summaryrefslogtreecommitdiff
path: root/src/shader_recompiler/backend
diff options
context:
space:
mode:
authorGravatar ameerj2021-07-12 02:03:25 -0400
committerGravatar ameerj2021-07-22 21:51:40 -0400
commit94af0a00f67c9f28fcaf170458e55b7a95de76bf (patch)
tree82028b10b54dc4483a7b1e76003c4efa44f7938a /src/shader_recompiler/backend
parentgl_shader_cache: Properly implement asynchronous shaders (diff)
downloadyuzu-94af0a00f67c9f28fcaf170458e55b7a95de76bf.tar.gz
yuzu-94af0a00f67c9f28fcaf170458e55b7a95de76bf.tar.xz
yuzu-94af0a00f67c9f28fcaf170458e55b7a95de76bf.zip
glsl: Clamp shared mem size to GL_MAX_COMPUTE_SHARED_MEMORY_SIZE
Diffstat (limited to 'src/shader_recompiler/backend')
-rw-r--r--src/shader_recompiler/backend/glsl/emit_glsl.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/shader_recompiler/backend/glsl/emit_glsl.cpp b/src/shader_recompiler/backend/glsl/emit_glsl.cpp
index ffdc6dbba..c5e819a0a 100644
--- a/src/shader_recompiler/backend/glsl/emit_glsl.cpp
+++ b/src/shader_recompiler/backend/glsl/emit_glsl.cpp
@@ -218,8 +218,15 @@ std::string EmitGLSL(const Profile& profile, const RuntimeInfo& runtime_info, IR
218 const std::string version{fmt::format("#version 450{}\n", GlslVersionSpecifier(ctx))}; 218 const std::string version{fmt::format("#version 450{}\n", GlslVersionSpecifier(ctx))};
219 ctx.header.insert(0, version); 219 ctx.header.insert(0, version);
220 if (program.shared_memory_size > 0) { 220 if (program.shared_memory_size > 0) {
221 ctx.header += 221 const auto requested_size{program.shared_memory_size};
222 fmt::format("shared uint smem[{}];", Common::DivCeil(program.shared_memory_size, 4U)); 222 const auto max_size{profile.gl_max_compute_smem_size};
223 const bool needs_clamp{requested_size > max_size};
224 if (needs_clamp) {
225 LOG_WARNING(Shader_GLSL, "Requested shared memory size ({}) exceeds device limit ({})",
226 requested_size, max_size);
227 }
228 const auto smem_size{needs_clamp ? max_size : requested_size};
229 ctx.header += fmt::format("shared uint smem[{}];", Common::DivCeil(smem_size, 4U));
223 } 230 }
224 ctx.header += "void main(){\n"; 231 ctx.header += "void main(){\n";
225 if (program.local_memory_size > 0) { 232 if (program.local_memory_size > 0) {