From 199a1f6de5d120ba8d3c6ab9e7cc64ad16cdfa80 Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 4 Jun 2018 12:46:31 +0100 Subject: [PATCH] Add stencil reference as a supported shader builtin --- renderdoc/api/replay/renderdoc_tostr.inl | 1 + renderdoc/api/replay/replay_enums.h | 5 +++++ renderdoc/driver/d3d11/d3d11_shaderdebug.cpp | 2 ++ renderdoc/driver/gl/gl_shader_refl.cpp | 2 ++ renderdoc/driver/shaders/spirv/spirv_disassemble.cpp | 1 + 5 files changed, 11 insertions(+) diff --git a/renderdoc/api/replay/renderdoc_tostr.inl b/renderdoc/api/replay/renderdoc_tostr.inl index f2084bf33..859fb0674 100644 --- a/renderdoc/api/replay/renderdoc_tostr.inl +++ b/renderdoc/api/replay/renderdoc_tostr.inl @@ -518,6 +518,7 @@ std::string DoStringise(const ShaderBuiltin &el) STRINGISE_ENUM_CLASS_NAMED(DepthOutput, "Depth Output"); STRINGISE_ENUM_CLASS_NAMED(DepthOutputGreaterEqual, "Depth Output (GEqual)"); STRINGISE_ENUM_CLASS_NAMED(DepthOutputLessEqual, "Depth Output (LEqual)"); + STRINGISE_ENUM_CLASS_NAMED(StencilReference, "Stencil Ref Value"); } END_ENUM_STRINGISE(); } diff --git a/renderdoc/api/replay/replay_enums.h b/renderdoc/api/replay/replay_enums.h index 08645d826..e98d0dd97 100644 --- a/renderdoc/api/replay/replay_enums.h +++ b/renderdoc/api/replay/replay_enums.h @@ -744,6 +744,10 @@ to apply to multiple related things - see :data:`ClipDistance`, :data:`CullDista For indirect or multi-draw commands, the index of this draw call within the overall draw command. +.. data:: StencilReference + + The stencil reference to be used for stenciling operations on this fragment. + )"); enum class ShaderBuiltin : uint32_t { @@ -780,6 +784,7 @@ enum class ShaderBuiltin : uint32_t BaseVertex, BaseInstance, DrawIndex, + StencilReference, Count, }; diff --git a/renderdoc/driver/d3d11/d3d11_shaderdebug.cpp b/renderdoc/driver/d3d11/d3d11_shaderdebug.cpp index def7ef1e6..0bf289af3 100644 --- a/renderdoc/driver/d3d11/d3d11_shaderdebug.cpp +++ b/renderdoc/driver/d3d11/d3d11_shaderdebug.cpp @@ -177,6 +177,8 @@ ShaderDebug::State D3D11DebugManager::CreateShaderDebugState(ShaderDebugTrace &t v.name = "oDepthGreaterEqual"; else if(sig.systemValue == ShaderBuiltin::MSAACoverage) v.name = "oMask"; + else if(sig.systemValue == ShaderBuiltin::StencilReference) + v.name = "oStencilRef"; // if(sig.systemValue == TYPE_OUTPUT_CONTROL_POINT) str = "oOutputControlPoint"; else { diff --git a/renderdoc/driver/gl/gl_shader_refl.cpp b/renderdoc/driver/gl/gl_shader_refl.cpp index 6cfba0307..610af7df4 100644 --- a/renderdoc/driver/gl/gl_shader_refl.cpp +++ b/renderdoc/driver/gl/gl_shader_refl.cpp @@ -1883,6 +1883,8 @@ void MakeShaderReflection(const GLHookSet &gl, GLenum shadType, GLuint sepProg, sig.systemValue = ShaderBuiltin::DepthOutput; if(IS_BUILTIN("gl_SampleMask")) sig.systemValue = ShaderBuiltin::MSAACoverage; + if(IS_BUILTIN("gl_FragStencilRefARB")) + sig.systemValue = ShaderBuiltin::StencilReference; // CS built-in inputs if(IS_BUILTIN("gl_NumWorkGroups")) diff --git a/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp b/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp index 2632d4f00..316b7b3a7 100644 --- a/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp @@ -3682,6 +3682,7 @@ ShaderBuiltin BuiltInToSystemAttribute(ShaderStage stage, const spv::BuiltIn el) case spv::BuiltInBaseInstance: return ShaderBuiltin::BaseInstance; case spv::BuiltInDrawIndex: return ShaderBuiltin::DrawIndex; case spv::BuiltInViewIndex: return ShaderBuiltin::ViewportIndex; + case spv::BuiltInFragStencilRefEXT: return ShaderBuiltin::StencilReference; default: break; }