diff options
| author | 2021-07-12 02:03:25 -0400 | |
|---|---|---|
| committer | 2021-07-22 21:51:40 -0400 | |
| commit | 94af0a00f67c9f28fcaf170458e55b7a95de76bf (patch) | |
| tree | 82028b10b54dc4483a7b1e76003c4efa44f7938a /src/shader_recompiler/backend/glsl | |
| parent | gl_shader_cache: Properly implement asynchronous shaders (diff) | |
| download | yuzu-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/glsl')
| -rw-r--r-- | src/shader_recompiler/backend/glsl/emit_glsl.cpp | 11 |
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) { |