Merge pull request #1412 from KhronosGroup/fix-1411
GLSL: Fix nested legacy switch workarounds.
This commit is contained in:
commit
2894b40868
@ -10,7 +10,7 @@ void main()
|
||||
highp vec4 _65;
|
||||
highp vec4 _66;
|
||||
highp vec4 _68;
|
||||
for (int SPIRV_Cross_Dummy = 0; SPIRV_Cross_Dummy < 1; SPIRV_Cross_Dummy++)
|
||||
for (int SPIRV_Cross_Dummy25 = 0; SPIRV_Cross_Dummy25 < 1; SPIRV_Cross_Dummy25++)
|
||||
{
|
||||
if (_13 == 2)
|
||||
{
|
||||
@ -59,7 +59,7 @@ void main()
|
||||
}
|
||||
}
|
||||
highp vec4 _70;
|
||||
for (int SPIRV_Cross_Dummy = 0; SPIRV_Cross_Dummy < 1; SPIRV_Cross_Dummy++)
|
||||
for (int SPIRV_Cross_Dummy146 = 0; SPIRV_Cross_Dummy146 < 1; SPIRV_Cross_Dummy146++)
|
||||
{
|
||||
if ((_13 == 10) || (_13 == 20))
|
||||
{
|
||||
|
43
reference/opt/shaders/legacy/vert/switch-nested.legacy.vert
Normal file
43
reference/opt/shaders/legacy/vert/switch-nested.legacy.vert
Normal file
@ -0,0 +1,43 @@
|
||||
#version 100
|
||||
|
||||
struct UBO
|
||||
{
|
||||
int func_arg;
|
||||
int inner_func_arg;
|
||||
};
|
||||
|
||||
uniform UBO _34;
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 _102;
|
||||
for (int SPIRV_Cross_Dummy30 = 0; SPIRV_Cross_Dummy30 < 1; SPIRV_Cross_Dummy30++)
|
||||
{
|
||||
if (_34.func_arg != 0)
|
||||
{
|
||||
vec4 _101;
|
||||
for (int SPIRV_Cross_Dummy45 = 0; SPIRV_Cross_Dummy45 < 1; SPIRV_Cross_Dummy45++)
|
||||
{
|
||||
if (_34.inner_func_arg != 0)
|
||||
{
|
||||
_101 = vec4(1.0);
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
_101 = vec4(0.0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
_102 = _101;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
_102 = vec4(0.0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
gl_Position = _102;
|
||||
}
|
||||
|
@ -7,7 +7,7 @@ vec2 _19;
|
||||
void main()
|
||||
{
|
||||
highp vec2 _30;
|
||||
for (int SPIRV_Cross_Dummy = 0; SPIRV_Cross_Dummy < 1; SPIRV_Cross_Dummy++)
|
||||
for (int SPIRV_Cross_Dummy15 = 0; SPIRV_Cross_Dummy15 < 1; SPIRV_Cross_Dummy15++)
|
||||
{
|
||||
if (gl_FragCoord.x != gl_FragCoord.x)
|
||||
{
|
||||
|
@ -8,7 +8,7 @@ void main()
|
||||
{
|
||||
int vIndex = int(vIndexF);
|
||||
highp vec4 v = vec4(0.0);
|
||||
for (int SPIRV_Cross_Dummy = 0; SPIRV_Cross_Dummy < 1; SPIRV_Cross_Dummy++)
|
||||
for (int SPIRV_Cross_Dummy21 = 0; SPIRV_Cross_Dummy21 < 1; SPIRV_Cross_Dummy21++)
|
||||
{
|
||||
if (vIndex == 2)
|
||||
{
|
||||
@ -65,7 +65,7 @@ void main()
|
||||
}
|
||||
}
|
||||
highp vec4 w = vec4(20.0);
|
||||
for (int SPIRV_Cross_Dummy = 0; SPIRV_Cross_Dummy < 1; SPIRV_Cross_Dummy++)
|
||||
for (int SPIRV_Cross_Dummy165 = 0; SPIRV_Cross_Dummy165 < 1; SPIRV_Cross_Dummy165++)
|
||||
{
|
||||
if ((vIndex == 10) || (vIndex == 20))
|
||||
{
|
||||
|
41
reference/shaders/legacy/vert/switch-nested.legacy.vert
Normal file
41
reference/shaders/legacy/vert/switch-nested.legacy.vert
Normal file
@ -0,0 +1,41 @@
|
||||
#version 100
|
||||
|
||||
struct UBO
|
||||
{
|
||||
int func_arg;
|
||||
int inner_func_arg;
|
||||
};
|
||||
|
||||
uniform UBO _34;
|
||||
|
||||
vec4 test_inner_func(bool b)
|
||||
{
|
||||
if (b)
|
||||
{
|
||||
return vec4(1.0);
|
||||
}
|
||||
else
|
||||
{
|
||||
return vec4(0.0);
|
||||
}
|
||||
}
|
||||
|
||||
vec4 test_func(bool b)
|
||||
{
|
||||
if (b)
|
||||
{
|
||||
bool param = _34.inner_func_arg != 0;
|
||||
return test_inner_func(param);
|
||||
}
|
||||
else
|
||||
{
|
||||
return vec4(0.0);
|
||||
}
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
bool param = _34.func_arg != 0;
|
||||
gl_Position = test_func(param);
|
||||
}
|
||||
|
28
shaders/legacy/vert/switch-nested.legacy.vert
Normal file
28
shaders/legacy/vert/switch-nested.legacy.vert
Normal file
@ -0,0 +1,28 @@
|
||||
#version 450
|
||||
|
||||
layout(set = 0, binding = 0) uniform UBO
|
||||
{
|
||||
int func_arg;
|
||||
int inner_func_arg;
|
||||
};
|
||||
|
||||
vec4 test_inner_func(bool b)
|
||||
{
|
||||
if (b)
|
||||
return vec4(1.0);
|
||||
else
|
||||
return vec4(0.0);
|
||||
}
|
||||
|
||||
vec4 test_func(bool b)
|
||||
{
|
||||
if (b)
|
||||
return test_inner_func(inner_func_arg != 0);
|
||||
else
|
||||
return vec4(0.0);
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_Position = test_func(func_arg != 0);
|
||||
}
|
@ -13386,7 +13386,11 @@ void CompilerGLSL::emit_block_chain(SPIRBlock &block)
|
||||
{
|
||||
// ESSL 1.0 is not guaranteed to support do/while.
|
||||
if (is_legacy_es())
|
||||
statement("for (int SPIRV_Cross_Dummy = 0; SPIRV_Cross_Dummy < 1; SPIRV_Cross_Dummy++)");
|
||||
{
|
||||
uint32_t counter = statement_count;
|
||||
statement("for (int SPIRV_Cross_Dummy", counter,
|
||||
" = 0; SPIRV_Cross_Dummy", counter, " < 1; SPIRV_Cross_Dummy", counter, "++)");
|
||||
}
|
||||
else
|
||||
statement("do");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user