diff --git a/qrenderdoc/Code/QRDUtils.h b/qrenderdoc/Code/QRDUtils.h index 1c3808850..e6360067a 100644 --- a/qrenderdoc/Code/QRDUtils.h +++ b/qrenderdoc/Code/QRDUtils.h @@ -269,7 +269,6 @@ struct ToStr case ShaderBuiltin::VertexIndex: return "Vertex Index"; case ShaderBuiltin::PrimitiveIndex: return "Primitive Index"; case ShaderBuiltin::InstanceIndex: return "Instance Index"; - case ShaderBuiltin::InvocationIndex: return "Invocation Index"; case ShaderBuiltin::DispatchSize: return "Dispatch Size"; case ShaderBuiltin::DispatchThreadIndex: return "Dispatch Thread Index"; case ShaderBuiltin::GroupIndex: return "Group Index"; diff --git a/renderdoc/api/replay/replay_enums.h b/renderdoc/api/replay/replay_enums.h index b15ff9a34..a4e02ca8d 100644 --- a/renderdoc/api/replay/replay_enums.h +++ b/renderdoc/api/replay/replay_enums.h @@ -259,7 +259,6 @@ enum class ShaderBuiltin : uint32_t VertexIndex, PrimitiveIndex, InstanceIndex, - InvocationIndex, DispatchSize, DispatchThreadIndex, GroupIndex, diff --git a/renderdoc/core/replay_proxy.cpp b/renderdoc/core/replay_proxy.cpp index 8b3fe4b33..7e7cbc5e8 100644 --- a/renderdoc/core/replay_proxy.cpp +++ b/renderdoc/core/replay_proxy.cpp @@ -71,7 +71,6 @@ string ToStrHelper::Get(const ShaderBuiltin &el) TOSTR_CASE_STRINGIZE_SCOPED(ShaderBuiltin, VertexIndex) TOSTR_CASE_STRINGIZE_SCOPED(ShaderBuiltin, PrimitiveIndex) TOSTR_CASE_STRINGIZE_SCOPED(ShaderBuiltin, InstanceIndex) - TOSTR_CASE_STRINGIZE_SCOPED(ShaderBuiltin, InvocationIndex) TOSTR_CASE_STRINGIZE_SCOPED(ShaderBuiltin, DispatchSize) TOSTR_CASE_STRINGIZE_SCOPED(ShaderBuiltin, DispatchThreadIndex) TOSTR_CASE_STRINGIZE_SCOPED(ShaderBuiltin, GroupIndex) diff --git a/renderdoc/driver/gl/gl_shader_refl.cpp b/renderdoc/driver/gl/gl_shader_refl.cpp index c912442ae..1df965d25 100644 --- a/renderdoc/driver/gl/gl_shader_refl.cpp +++ b/renderdoc/driver/gl/gl_shader_refl.cpp @@ -1845,7 +1845,7 @@ void MakeShaderReflection(const GLHookSet &gl, GLenum shadType, GLuint sepProg, if(IS_BUILTIN("gl_PrimitiveID")) sig.systemValue = ShaderBuiltin::PrimitiveIndex; if(IS_BUILTIN("gl_InvocationID")) - sig.systemValue = ShaderBuiltin::InvocationIndex; + sig.systemValue = ShaderBuiltin::OutputControlPointIndex; // TCS built-in outputs if(IS_BUILTIN("gl_TessLevelOuter")) @@ -1864,8 +1864,8 @@ void MakeShaderReflection(const GLHookSet &gl, GLenum shadType, GLuint sepProg, // GS built-in inputs if(IS_BUILTIN("gl_PrimitiveIDIn")) sig.systemValue = ShaderBuiltin::PrimitiveIndex; - if(IS_BUILTIN("gl_InvocationID")) - sig.systemValue = ShaderBuiltin::InvocationIndex; + if(IS_BUILTIN("gl_InvocationID") && shadType == eGL_GEOMETRY_SHADER) + sig.systemValue = ShaderBuiltin::GSInstanceIndex; if(IS_BUILTIN("gl_Layer")) sig.systemValue = ShaderBuiltin::RTIndex; if(IS_BUILTIN("gl_ViewportIndex")) diff --git a/renderdoc/driver/shaders/spirv/spirv_common.h b/renderdoc/driver/shaders/spirv/spirv_common.h index 1929f5f44..885b0bf57 100644 --- a/renderdoc/driver/shaders/spirv/spirv_common.h +++ b/renderdoc/driver/shaders/spirv/spirv_common.h @@ -28,7 +28,6 @@ #include #include #include "3rdparty/glslang/SPIRV/spirv.hpp" -#include "api/replay/replay_enums.h" using std::string; using std::vector; @@ -49,6 +48,7 @@ void ShutdownSPIRVCompiler(); struct SPVInstruction; +enum class ShaderStage : uint32_t; struct ShaderReflection; struct ShaderBindpointMapping; diff --git a/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp b/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp index a28a04a8a..e945edabf 100644 --- a/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp @@ -3636,7 +3636,7 @@ uint32_t CalculateMinimumByteSize(const rdctype::array &variable } } -ShaderBuiltin BuiltInToSystemAttribute(const spv::BuiltIn el) +ShaderBuiltin BuiltInToSystemAttribute(ShaderStage stage, const spv::BuiltIn el) { // not complete, might need to expand system attribute list @@ -3649,7 +3649,13 @@ ShaderBuiltin BuiltInToSystemAttribute(const spv::BuiltIn el) case spv::BuiltInVertexId: return ShaderBuiltin::VertexIndex; case spv::BuiltInInstanceId: return ShaderBuiltin::InstanceIndex; case spv::BuiltInPrimitiveId: return ShaderBuiltin::PrimitiveIndex; - case spv::BuiltInInvocationId: return ShaderBuiltin::InvocationIndex; + case spv::BuiltInInvocationId: + { + if(stage == ShaderStage::Geometry) + return ShaderBuiltin::GSInstanceIndex; + else + return ShaderBuiltin::OutputControlPointIndex; + } case spv::BuiltInLayer: return ShaderBuiltin::RTIndex; case spv::BuiltInViewportIndex: return ShaderBuiltin::ViewportIndex; case spv::BuiltInTessLevelOuter: return ShaderBuiltin::OuterTessFactor; @@ -3718,7 +3724,7 @@ void AddSignatureParameter(ShaderStage stage, uint32_t id, uint32_t childIdx, st if(decorations[d].decoration == spv::DecorationLocation) sig.regIndex = decorations[d].val; else if(decorations[d].decoration == spv::DecorationBuiltIn) - sig.systemValue = BuiltInToSystemAttribute((spv::BuiltIn)decorations[d].val); + sig.systemValue = BuiltInToSystemAttribute(stage, (spv::BuiltIn)decorations[d].val); else if(decorations[d].decoration == spv::DecorationRowMajor) rowmajor = true; else if(decorations[d].decoration == spv::DecorationColMajor) @@ -3998,7 +4004,7 @@ void SPVModule::MakeReflection(ShaderStage stage, const string &entryPoint, if(eliminate) { - ShaderBuiltin attr = BuiltInToSystemAttribute(checkBuiltin); + ShaderBuiltin attr = BuiltInToSystemAttribute(stage, checkBuiltin); // find this builtin in the array, and remove for(auto it = sigarray->begin(); it != sigarray->end(); ++it) {