diff --git a/src/dxbc/dxbc_compiler.cpp b/src/dxbc/dxbc_compiler.cpp index 4947a4f8e..4ea2eff17 100644 --- a/src/dxbc/dxbc_compiler.cpp +++ b/src/dxbc/dxbc_compiler.cpp @@ -1391,6 +1391,7 @@ namespace dxvk { // dcl_gs_instance_count has one operand: // (imm0) Number of geometry shader invocations m_module.setInvocations(m_entryPointId, ins.imm[0].u32); + m_gs.invocationCount = ins.imm[0].u32; } @@ -6866,6 +6867,9 @@ namespace dxvk { void DxbcCompiler::emitGsFinalize() { + if (!m_gs.invocationCount) + m_module.setInvocations(m_entryPointId, 1); + this->emitMainFunctionBegin(); this->emitInputSetup( primitiveVertexCount(m_gs.inputPrimitive)); diff --git a/src/dxbc/dxbc_compiler.h b/src/dxbc/dxbc_compiler.h index 03b143c88..dc1267e4f 100644 --- a/src/dxbc/dxbc_compiler.h +++ b/src/dxbc/dxbc_compiler.h @@ -160,6 +160,7 @@ namespace dxvk { uint32_t builtinLayer = 0; uint32_t builtinViewportId = 0; uint32_t builtinInvocationId = 0; + uint32_t invocationCount = 0; };