|
|
@ -218,8 +218,15 @@ std::string EmitGLSL(const Profile& profile, const RuntimeInfo& runtime_info, IR
|
|
|
|
const std::string version{fmt::format("#version 450{}\n", GlslVersionSpecifier(ctx))};
|
|
|
|
const std::string version{fmt::format("#version 450{}\n", GlslVersionSpecifier(ctx))};
|
|
|
|
ctx.header.insert(0, version);
|
|
|
|
ctx.header.insert(0, version);
|
|
|
|
if (program.shared_memory_size > 0) {
|
|
|
|
if (program.shared_memory_size > 0) {
|
|
|
|
ctx.header +=
|
|
|
|
const auto requested_size{program.shared_memory_size};
|
|
|
|
fmt::format("shared uint smem[{}];", Common::DivCeil(program.shared_memory_size, 4U));
|
|
|
|
const auto max_size{profile.gl_max_compute_smem_size};
|
|
|
|
|
|
|
|
const bool needs_clamp{requested_size > max_size};
|
|
|
|
|
|
|
|
if (needs_clamp) {
|
|
|
|
|
|
|
|
LOG_WARNING(Shader_GLSL, "Requested shared memory size ({}) exceeds device limit ({})",
|
|
|
|
|
|
|
|
requested_size, max_size);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
const auto smem_size{needs_clamp ? max_size : requested_size};
|
|
|
|
|
|
|
|
ctx.header += fmt::format("shared uint smem[{}];", Common::DivCeil(smem_size, 4U));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ctx.header += "void main(){\n";
|
|
|
|
ctx.header += "void main(){\n";
|
|
|
|
if (program.local_memory_size > 0) {
|
|
|
|
if (program.local_memory_size > 0) {
|
|
|
|