Sort GLSL reflected signature parameters with builtins first

This commit is contained in:
baldurk committed 2019-08-16 16:12:00 +01:00
1 parent a03538db4b
commit 1552182d0a
2 files changed
+74 -63

No files matched your search

+12 -1
View File
@@ -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;
}
};
+62 -62
View File
@@ -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);
}
}
};