From 42451f0c3d1423b31273fe2be64ca31313efedf0 Mon Sep 17 00:00:00 2001 From: xbzk Date: Sat, 7 Feb 2026 21:26:30 -0300 Subject: [PATCH] versionwise workgroup vars --- .../backend/spirv/spirv_emit_context.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/shader_recompiler/backend/spirv/spirv_emit_context.cpp b/src/shader_recompiler/backend/spirv/spirv_emit_context.cpp index a076cb8036..2a606f833b 100644 --- a/src/shader_recompiler/backend/spirv/spirv_emit_context.cpp +++ b/src/shader_recompiler/backend/spirv/spirv_emit_context.cpp @@ -613,7 +613,10 @@ void EmitContext::DefineSharedMemory(const IR::Program& program) { const Id element_pointer{TypePointer(spv::StorageClass::Workgroup, element_type)}; const Id variable{AddGlobalVariable(pointer, spv::StorageClass::Workgroup)}; Decorate(variable, spv::Decoration::Aliased); - interfaces.push_back(variable); + // Workgroup variables in EntryPoint interfaces are only supported in SPIR-V 1.4+ + if (profile.supported_spirv >= 0x00010400) { + interfaces.push_back(variable); + } return std::make_tuple(variable, element_pointer, pointer); }}; @@ -642,7 +645,10 @@ void EmitContext::DefineSharedMemory(const IR::Program& program) { shared_u32 = TypePointer(spv::StorageClass::Workgroup, U32[1]); shared_memory_u32 = AddGlobalVariable(shared_memory_u32_type, spv::StorageClass::Workgroup); - interfaces.push_back(shared_memory_u32); + // Workgroup variables in EntryPoint interfaces are only supported in SPIR-V 1.4+ + if (profile.supported_spirv >= 0x00010400) { + interfaces.push_back(shared_memory_u32); + } const Id func_type{TypeFunction(void_id, U32[1], U32[1])}; const auto make_function{[&](u32 mask, u32 size) {