diff options
author | liamwhite <liamwhite@users.noreply.github.com> | 2023-06-27 17:21:10 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-27 17:21:10 +0200 |
commit | dafbc86366f8bcd9153949db4d141ec489928f81 (patch) | |
tree | 8496cb635eef6967a99d0b7dfad41419a24b5efd /src/video_core/renderer_opengl/gl_shader_manager.cpp | |
parent | Merge pull request #10925 from t895/fs-agony (diff) | |
parent | OpenGL: Limit lmem warmup to NVIDIA (diff) | |
download | yuzu-dafbc86366f8bcd9153949db4d141ec489928f81.tar yuzu-dafbc86366f8bcd9153949db4d141ec489928f81.tar.gz yuzu-dafbc86366f8bcd9153949db4d141ec489928f81.tar.bz2 yuzu-dafbc86366f8bcd9153949db4d141ec489928f81.tar.lz yuzu-dafbc86366f8bcd9153949db4d141ec489928f81.tar.xz yuzu-dafbc86366f8bcd9153949db4d141ec489928f81.tar.zst yuzu-dafbc86366f8bcd9153949db4d141ec489928f81.zip |
Diffstat (limited to 'src/video_core/renderer_opengl/gl_shader_manager.cpp')
-rw-r--r-- | src/video_core/renderer_opengl/gl_shader_manager.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/video_core/renderer_opengl/gl_shader_manager.cpp b/src/video_core/renderer_opengl/gl_shader_manager.cpp index 98841ae65..03d4b9d06 100644 --- a/src/video_core/renderer_opengl/gl_shader_manager.cpp +++ b/src/video_core/renderer_opengl/gl_shader_manager.cpp @@ -3,7 +3,9 @@ #include <glad/glad.h> +#include "video_core/host_shaders/opengl_lmem_warmup_comp.h" #include "video_core/renderer_opengl/gl_shader_manager.h" +#include "video_core/renderer_opengl/gl_shader_util.h" namespace OpenGL { @@ -17,6 +19,10 @@ ProgramManager::ProgramManager(const Device& device) { if (device.UseAssemblyShaders()) { glEnable(GL_COMPUTE_PROGRAM_NV); } + if (device.HasLmemPerfBug()) { + lmem_warmup_program = + CreateProgram(HostShaders::OPENGL_LMEM_WARMUP_COMP, GL_COMPUTE_SHADER); + } } void ProgramManager::BindComputeProgram(GLuint program) { @@ -98,6 +104,13 @@ void ProgramManager::BindAssemblyPrograms(std::span<const OGLAssemblyProgram, NU void ProgramManager::RestoreGuestCompute() {} +void ProgramManager::LocalMemoryWarmup() { + if (lmem_warmup_program.handle != 0) { + BindComputeProgram(lmem_warmup_program.handle); + glDispatchCompute(1, 1, 1); + } +} + void ProgramManager::BindPipeline() { if (!is_pipeline_bound) { is_pipeline_bound = true; |