summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_opengl/gl_shader_manager.cpp
diff options
context:
space:
mode:
authorliamwhite <liamwhite@users.noreply.github.com>2023-06-27 17:21:10 +0200
committerGitHub <noreply@github.com>2023-06-27 17:21:10 +0200
commitdafbc86366f8bcd9153949db4d141ec489928f81 (patch)
tree8496cb635eef6967a99d0b7dfad41419a24b5efd /src/video_core/renderer_opengl/gl_shader_manager.cpp
parentMerge pull request #10925 from t895/fs-agony (diff)
parentOpenGL: Limit lmem warmup to NVIDIA (diff)
downloadyuzu-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.cpp13
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;