From 1552182d0a391fae3ae5571577bbe88e61f78811 Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 12 Jun 2019 15:29:25 +0100 Subject: [PATCH] Sort GLSL reflected signature parameters with builtins first --- renderdoc/driver/gl/gl_shader_refl.cpp | 13 +- renderdoc/driver/gl/wrappers/gl_emulated.cpp | 124 +++++++++---------- 2 files changed, 74 insertions(+), 63 deletions(-) diff --git a/renderdoc/driver/gl/gl_shader_refl.cpp b/renderdoc/driver/gl/gl_shader_refl.cpp index c05e309ee..6ca252452 100644 --- a/renderdoc/driver/gl/gl_shader_refl.cpp +++ b/renderdoc/driver/gl/gl_shader_refl.cpp @@ -2158,7 +2158,18 @@ void MakeShaderReflection(GLenum shadType, GLuint sepProg, ShaderReflection &ref bool operator()(const SigParameter &a, const SigParameter &b) { if(a.systemValue == b.systemValue) - return a.regIndex < b.regIndex; + { + if(a.regIndex != b.regIndex) + return a.regIndex < b.regIndex; + + return a.varName < b.varName; + } + + if(a.systemValue == ShaderBuiltin::Undefined) + return false; + if(b.systemValue == ShaderBuiltin::Undefined) + return true; + return a.systemValue < b.systemValue; } }; diff --git a/renderdoc/driver/gl/wrappers/gl_emulated.cpp b/renderdoc/driver/gl/wrappers/gl_emulated.cpp index 70b14eb67..bb4689002 100644 --- a/renderdoc/driver/gl/wrappers/gl_emulated.cpp +++ b/renderdoc/driver/gl/wrappers/gl_emulated.cpp @@ -3591,11 +3591,24 @@ void main() { REQUIRE_ARRAY_SIZE(refl.inputSignature.size(), 3); { - CHECK(refl.inputSignature[0].varName == "a_input"); + CHECK(refl.inputSignature[0].varName == "gl_FragCoord"); { const SigParameter &sig = refl.inputSignature[0]; INFO("signature element: " << sig.varName.c_str()); + CHECK(sig.regIndex == 0); + CHECK(sig.systemValue == ShaderBuiltin::Position); + CHECK(sig.compType == CompType::Float); + CHECK(sig.compCount == 4); + CHECK(sig.regChannelMask == 0xf); + CHECK(sig.channelUsedMask == 0xf); + } + + CHECK(refl.inputSignature[1].varName == "a_input"); + { + const SigParameter &sig = refl.inputSignature[1]; + INFO("signature element: " << sig.varName.c_str()); + CHECK(sig.regIndex == 3); CHECK(sig.systemValue == ShaderBuiltin::Undefined); CHECK(sig.compType == CompType::Float); @@ -3604,9 +3617,9 @@ void main() { CHECK(sig.channelUsedMask == 0x3); } - CHECK(refl.inputSignature[1].varName == "z_input"); + CHECK(refl.inputSignature[2].varName == "z_input"); { - const SigParameter &sig = refl.inputSignature[1]; + const SigParameter &sig = refl.inputSignature[2]; INFO("signature element: " << sig.varName.c_str()); CHECK(sig.regIndex == 6); @@ -3616,19 +3629,6 @@ void main() { CHECK(sig.regChannelMask == 0x7); CHECK(sig.channelUsedMask == 0x7); } - - CHECK(refl.inputSignature[2].varName == "gl_FragCoord"); - { - const SigParameter &sig = refl.inputSignature[2]; - INFO("signature element: " << sig.varName.c_str()); - - CHECK(sig.regIndex == 0); - CHECK(sig.systemValue == ShaderBuiltin::Position); - CHECK(sig.compType == CompType::Float); - CHECK(sig.compCount == 4); - CHECK(sig.regChannelMask == 0xf); - CHECK(sig.channelUsedMask == 0xf); - } } REQUIRE_ARRAY_SIZE(refl.outputSignature.size(), 4); @@ -4213,24 +4213,40 @@ void main() REQUIRE_ARRAY_SIZE(refl.inputSignature.size(), 2); { - CHECK(refl.inputSignature[0].varName == "block.Texcoord"); + CHECK(refl.inputSignature[0].varName == "gl_PerVertex.gl_Position"); { const SigParameter &sig = refl.inputSignature[0]; INFO("signature element: " << sig.varName.c_str()); CHECK(sig.regIndex == 0); - CHECK(sig.systemValue == ShaderBuiltin::Undefined); + CHECK(sig.systemValue == ShaderBuiltin::Position); CHECK(sig.compType == CompType::Float); - CHECK(sig.compCount == 2); - CHECK(sig.regChannelMask == 0x3); - CHECK(sig.channelUsedMask == 0x3); + CHECK(sig.compCount == 4); + CHECK(sig.regChannelMask == 0xf); + CHECK(sig.channelUsedMask == 0xf); } - CHECK(refl.inputSignature[1].varName == "gl_PerVertex.gl_Position"); + CHECK(refl.inputSignature[1].varName == "block.Texcoord"); { const SigParameter &sig = refl.inputSignature[1]; INFO("signature element: " << sig.varName.c_str()); + CHECK(sig.regIndex == 0); + CHECK(sig.systemValue == ShaderBuiltin::Undefined); + CHECK(sig.compType == CompType::Float); + CHECK(sig.compCount == 2); + CHECK(sig.regChannelMask == 0x3); + CHECK(sig.channelUsedMask == 0x3); + } + } + + REQUIRE_ARRAY_SIZE(refl.outputSignature.size(), 2); + { + CHECK(refl.outputSignature[0].varName == "gl_Position"); + { + const SigParameter &sig = refl.outputSignature[0]; + INFO("signature element: " << sig.varName.c_str()); + CHECK(sig.regIndex == 0); CHECK(sig.systemValue == ShaderBuiltin::Position); CHECK(sig.compType == CompType::Float); @@ -4238,13 +4254,10 @@ void main() CHECK(sig.regChannelMask == 0xf); CHECK(sig.channelUsedMask == 0xf); } - } - REQUIRE_ARRAY_SIZE(refl.outputSignature.size(), 2); - { - CHECK(refl.outputSignature[0].varName == "block.Texcoord"); + CHECK(refl.outputSignature[1].varName == "block.Texcoord"); { - const SigParameter &sig = refl.outputSignature[0]; + const SigParameter &sig = refl.outputSignature[1]; INFO("signature element: " << sig.varName.c_str()); CHECK(sig.regIndex == 0); @@ -4254,19 +4267,6 @@ void main() CHECK(sig.regChannelMask == 0x3); CHECK(sig.channelUsedMask == 0x3); } - - CHECK(refl.outputSignature[1].varName == "gl_Position"); - { - const SigParameter &sig = refl.outputSignature[1]; - INFO("signature element: " << sig.varName.c_str()); - - CHECK(sig.regIndex == 0); - CHECK(sig.systemValue == ShaderBuiltin::Position); - CHECK(sig.compType == CompType::Float); - CHECK(sig.compCount == 4); - CHECK(sig.regChannelMask == 0xf); - CHECK(sig.channelUsedMask == 0xf); - } } }; @@ -4295,11 +4295,24 @@ void main() REQUIRE_ARRAY_SIZE(refl.outputSignature.size(), 6); { - CHECK(refl.outputSignature[0].varName == "outarr[0]"); + CHECK(refl.outputSignature[0].varName == "gl_Position"); { const SigParameter &sig = refl.outputSignature[0]; INFO("signature element: " << sig.varName.c_str()); + CHECK(sig.regIndex == 0); + CHECK(sig.systemValue == ShaderBuiltin::Position); + CHECK(sig.compType == CompType::Float); + CHECK(sig.compCount == 4); + CHECK(sig.regChannelMask == 0xf); + CHECK(sig.channelUsedMask == 0xf); + } + + CHECK(refl.outputSignature[1].varName == "outarr[0]"); + { + const SigParameter &sig = refl.outputSignature[1]; + INFO("signature element: " << sig.varName.c_str()); + CHECK(sig.regIndex == 0); CHECK(sig.arrayIndex == 0); CHECK(sig.systemValue == ShaderBuiltin::Undefined); @@ -4309,9 +4322,9 @@ void main() CHECK(sig.channelUsedMask == 0x7); } - CHECK(refl.outputSignature[1].varName == "outarr[1]"); + CHECK(refl.outputSignature[2].varName == "outarr[1]"); { - const SigParameter &sig = refl.outputSignature[1]; + const SigParameter &sig = refl.outputSignature[2]; INFO("signature element: " << sig.varName.c_str()); CHECK(sig.regIndex == 1); @@ -4323,9 +4336,9 @@ void main() CHECK(sig.channelUsedMask == 0x7); } - CHECK(refl.outputSignature[2].varName == "outarr[2]"); + CHECK(refl.outputSignature[3].varName == "outarr[2]"); { - const SigParameter &sig = refl.outputSignature[2]; + const SigParameter &sig = refl.outputSignature[3]; INFO("signature element: " << sig.varName.c_str()); CHECK(sig.regIndex == 2); @@ -4337,9 +4350,9 @@ void main() CHECK(sig.channelUsedMask == 0x7); } - CHECK(refl.outputSignature[3].varName == "outmat:row0"); + CHECK(refl.outputSignature[4].varName == "outmat:row0"); { - const SigParameter &sig = refl.outputSignature[3]; + const SigParameter &sig = refl.outputSignature[4]; INFO("signature element: " << sig.varName.c_str()); CHECK(sig.regIndex == 3); @@ -4350,9 +4363,9 @@ void main() CHECK(sig.channelUsedMask == 0x3); } - CHECK(refl.outputSignature[4].varName == "outmat:row1"); + CHECK(refl.outputSignature[5].varName == "outmat:row1"); { - const SigParameter &sig = refl.outputSignature[4]; + const SigParameter &sig = refl.outputSignature[5]; INFO("signature element: " << sig.varName.c_str()); CHECK(sig.regIndex == 4); @@ -4362,19 +4375,6 @@ void main() CHECK(sig.regChannelMask == 0x3); CHECK(sig.channelUsedMask == 0x3); } - - CHECK(refl.outputSignature[5].varName == "gl_Position"); - { - const SigParameter &sig = refl.outputSignature[5]; - INFO("signature element: " << sig.varName.c_str()); - - CHECK(sig.regIndex == 0); - CHECK(sig.systemValue == ShaderBuiltin::Position); - CHECK(sig.compType == CompType::Float); - CHECK(sig.compCount == 4); - CHECK(sig.regChannelMask == 0xf); - CHECK(sig.channelUsedMask == 0xf); - } } };