From 6888a98c8931a93ff8c651c6a537679b0efe7bb3 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Sat, 26 Oct 2019 23:19:59 +0200 Subject: [PATCH] [dxbc] Always set geometry shader invocation count Fixes validation errors when the DXBC shader does not specify the invocation count itself. --- src/dxbc/dxbc_compiler.cpp | 4 ++++ src/dxbc/dxbc_compiler.h | 1 + 2 files changed, 5 insertions(+) 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; };