Fix CFG for forwarded temporaries.
Forwarded temporaries would never declare a temporary. Figure out all result types ahead of time so we can deal with those temporaries as well.
This commit is contained in:
Родитель
3c0f539590
Коммит
7d223b8987
|
@ -15,8 +15,6 @@ float4 _21;
|
|||
|
||||
void frag_main()
|
||||
{
|
||||
float4 _15;
|
||||
float4 _17;
|
||||
float4 _33;
|
||||
do
|
||||
{
|
||||
|
|
|
@ -104,12 +104,6 @@ struct main0_out
|
|||
fragment main0_out main0(main0_in in [[stage_in]], float4 gl_FragCoord [[position]], constant CB0& _19 [[buffer(0)]], texture3d<float> LightMapTexture [[texture(0)]], sampler LightMapSampler [[sampler(0)]], sampler ShadowMapSampler [[sampler(1)]], texture2d<float> ShadowMapTexture [[texture(1)]], texturecube<float> EnvironmentMapTexture [[texture(2)]], sampler EnvironmentMapSampler [[sampler(2)]], sampler DiffuseMapSampler [[sampler(3)]], texture2d<float> DiffuseMapTexture [[texture(3)]], sampler NormalMapSampler [[sampler(4)]], texture2d<float> NormalMapTexture [[texture(4)]], texture2d<float> NormalDetailMapTexture [[texture(5)]], sampler NormalDetailMapSampler [[sampler(5)]], texture2d<float> StudsMapTexture [[texture(6)]], sampler StudsMapSampler [[sampler(6)]], sampler SpecularMapSampler [[sampler(7)]], texture2d<float> SpecularMapTexture [[texture(7)]])
|
||||
{
|
||||
main0_out out = {};
|
||||
float4 _178;
|
||||
float4 _191;
|
||||
float4 _205;
|
||||
float4 _218;
|
||||
float4 _283;
|
||||
float4 _296;
|
||||
bool _173;
|
||||
VertexOutput _128 = _121;
|
||||
_128.HPosition = gl_FragCoord;
|
||||
|
@ -148,15 +142,13 @@ fragment main0_out main0(main0_in in [[stage_in]], float4 gl_FragCoord [[positio
|
|||
_173 = 0.0 == 0.0;
|
||||
if (_173)
|
||||
{
|
||||
_178 = DiffuseMapTexture.sample(DiffuseMapSampler, _166);
|
||||
_193 = _178;
|
||||
_193 = DiffuseMapTexture.sample(DiffuseMapSampler, _166);
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
float _180 = 1.0 / (1.0 - 0.0);
|
||||
_191 = mix(DiffuseMapTexture.sample(DiffuseMapSampler, (_166 * 0.25)), DiffuseMapTexture.sample(DiffuseMapSampler, _166), float4(clamp((clamp(1.0 - (_146.View_Depth.w * 0.00333332992158830165863037109375), 0.0, 1.0) * _180) - (0.0 * _180), 0.0, 1.0)));
|
||||
_193 = _191;
|
||||
_193 = mix(DiffuseMapTexture.sample(DiffuseMapSampler, (_166 * 0.25)), DiffuseMapTexture.sample(DiffuseMapSampler, _166), float4(clamp((clamp(1.0 - (_146.View_Depth.w * 0.00333332992158830165863037109375), 0.0, 1.0) * _180) - (0.0 * _180), 0.0, 1.0)));
|
||||
break;
|
||||
}
|
||||
_193 = _192;
|
||||
|
@ -167,15 +159,13 @@ fragment main0_out main0(main0_in in [[stage_in]], float4 gl_FragCoord [[positio
|
|||
{
|
||||
if (_173)
|
||||
{
|
||||
_205 = NormalMapTexture.sample(NormalMapSampler, _166);
|
||||
_220 = _205;
|
||||
_220 = NormalMapTexture.sample(NormalMapSampler, _166);
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
float _207 = 1.0 / (1.0 - 0.0);
|
||||
_218 = mix(NormalMapTexture.sample(NormalMapSampler, (_166 * 0.25)), NormalMapTexture.sample(NormalMapSampler, _166), float4(clamp((_165 * _207) - (0.0 * _207), 0.0, 1.0)));
|
||||
_220 = _218;
|
||||
_220 = mix(NormalMapTexture.sample(NormalMapSampler, (_166 * 0.25)), NormalMapTexture.sample(NormalMapSampler, _166), float4(clamp((_165 * _207) - (0.0 * _207), 0.0, 1.0)));
|
||||
break;
|
||||
}
|
||||
_220 = _219;
|
||||
|
@ -195,15 +185,13 @@ fragment main0_out main0(main0_in in [[stage_in]], float4 gl_FragCoord [[positio
|
|||
{
|
||||
if (0.75 == 0.0)
|
||||
{
|
||||
_283 = SpecularMapTexture.sample(SpecularMapSampler, _166);
|
||||
_298 = _283;
|
||||
_298 = SpecularMapTexture.sample(SpecularMapSampler, _166);
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
float _285 = 1.0 / (1.0 - 0.75);
|
||||
_296 = mix(SpecularMapTexture.sample(SpecularMapSampler, (_166 * 0.25)), SpecularMapTexture.sample(SpecularMapSampler, _166), float4(clamp((_165 * _285) - (0.75 * _285), 0.0, 1.0)));
|
||||
_298 = _296;
|
||||
_298 = mix(SpecularMapTexture.sample(SpecularMapSampler, (_166 * 0.25)), SpecularMapTexture.sample(SpecularMapSampler, _166), float4(clamp((_165 * _285) - (0.75 * _285), 0.0, 1.0)));
|
||||
break;
|
||||
}
|
||||
_298 = _297;
|
||||
|
|
|
@ -5,9 +5,7 @@ using namespace metal;
|
|||
|
||||
fragment void main0()
|
||||
{
|
||||
int _16;
|
||||
int _23;
|
||||
for (int _22 = 35; _22 >= 0; _23 = _22 - 1, _22 = _23)
|
||||
for (int _22 = 35; _22 >= 0; _22--)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,8 +14,6 @@ struct main0_out
|
|||
fragment main0_out main0()
|
||||
{
|
||||
main0_out out = {};
|
||||
float4 _20;
|
||||
float4 _21;
|
||||
float4 _51;
|
||||
float4 _52;
|
||||
_51 = _50;
|
||||
|
|
|
@ -18,8 +18,6 @@ struct main0_out
|
|||
fragment main0_out main0(main0_in in [[stage_in]])
|
||||
{
|
||||
main0_out out = {};
|
||||
float4 _15;
|
||||
float4 _17;
|
||||
float4 _33;
|
||||
do
|
||||
{
|
||||
|
|
|
@ -16,12 +16,10 @@ struct SSBO2
|
|||
|
||||
kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], device SSBO& _28 [[buffer(0)]], device SSBO2& _52 [[buffer(1)]])
|
||||
{
|
||||
float4 _33;
|
||||
float4 _42;
|
||||
int i = 0;
|
||||
_33 = _28.in_data[gl_GlobalInvocationID.x];
|
||||
float4 _56;
|
||||
_56 = _33;
|
||||
_56 = _28.in_data[gl_GlobalInvocationID.x];
|
||||
for (;;)
|
||||
{
|
||||
_42 = _28.mvp * _56;
|
||||
|
|
|
@ -12,8 +12,6 @@ constant int _69 = {};
|
|||
|
||||
kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], device SSBO2& _27 [[buffer(0)]])
|
||||
{
|
||||
int _29;
|
||||
int _65;
|
||||
if (gl_GlobalInvocationID.x == 2u)
|
||||
{
|
||||
_27.out_data[gl_GlobalInvocationID.x] = float4(20.0);
|
||||
|
@ -26,7 +24,7 @@ kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], devic
|
|||
return;
|
||||
}
|
||||
}
|
||||
for (int _68 = 0; _68 < 20; _65 = _69 + 1, _68 = _65)
|
||||
for (int _68 = 0; _68 < 20; _68 = _69 + 1)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -18,22 +18,13 @@ constant uint _98 = {};
|
|||
|
||||
kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], device SSBO& _24 [[buffer(0)]], device SSBO2& _89 [[buffer(1)]])
|
||||
{
|
||||
float4 _30;
|
||||
float4 _46;
|
||||
int _33;
|
||||
int _48;
|
||||
int _40;
|
||||
int _77;
|
||||
uint _12;
|
||||
uint _75;
|
||||
float4 _71;
|
||||
uint _73;
|
||||
int _83;
|
||||
_30 = _24.in_data[gl_GlobalInvocationID.x];
|
||||
float4 _93;
|
||||
int _94;
|
||||
_93 = _30;
|
||||
_93 = _24.in_data[gl_GlobalInvocationID.x];
|
||||
_94 = 0;
|
||||
int _48;
|
||||
float4 _46;
|
||||
for (;;)
|
||||
{
|
||||
_40 = _94 + 1;
|
||||
|
@ -56,17 +47,19 @@ kernel void main0(uint3 gl_GlobalInvocationID [[thread_position_in_grid]], devic
|
|||
_96 = _40;
|
||||
float4 _100;
|
||||
uint _101;
|
||||
for (uint _97 = 0u, _99 = _98; _97 < 16u; _75 = _97 + uint(1), _77 = _96 + 1, _95 = _100, _96 = _77, _97 = _75, _99 = _101)
|
||||
for (uint _97 = 0u, _99 = _98; _97 < 16u; _95 = _100, _96++, _97++, _99 = _101)
|
||||
{
|
||||
_100 = _95;
|
||||
_101 = 0u;
|
||||
for (; _101 < 30u; _73 = _101 + uint(1), _100 = _71, _101 = _73)
|
||||
float4 _71;
|
||||
for (; _101 < 30u; _100 = _71, _101++)
|
||||
{
|
||||
_71 = _24.mvp * _100;
|
||||
}
|
||||
}
|
||||
int _102;
|
||||
_102 = _96;
|
||||
int _83;
|
||||
for (;;)
|
||||
{
|
||||
_83 = _102 + 1;
|
||||
|
|
|
@ -11,36 +11,26 @@ struct main0_out
|
|||
fragment main0_out main0()
|
||||
{
|
||||
main0_out out = {};
|
||||
int _12;
|
||||
int _27;
|
||||
int _26;
|
||||
int _43;
|
||||
int _59;
|
||||
int _83;
|
||||
int2 _93;
|
||||
int2 _139;
|
||||
int _62;
|
||||
int _128;
|
||||
out.FragColor = 16;
|
||||
for (int _140 = 0; _140 < 25; _27 = _140 + 1, _140 = _27)
|
||||
for (int _140 = 0; _140 < 25; _140++)
|
||||
{
|
||||
out.FragColor += 10;
|
||||
}
|
||||
for (int _141 = 1; _141 < 30; _43 = _141 + 1, _141 = _43)
|
||||
for (int _141 = 1; _141 < 30; _141++)
|
||||
{
|
||||
out.FragColor += 11;
|
||||
}
|
||||
int _142;
|
||||
_142 = 0;
|
||||
for (; _142 < 20; _59 = _142 + 1, _142 = _59)
|
||||
for (; _142 < 20; _142++)
|
||||
{
|
||||
out.FragColor += 12;
|
||||
}
|
||||
_62 = _142 + 3;
|
||||
int _62 = _142 + 3;
|
||||
out.FragColor += _62;
|
||||
if (_62 == 40)
|
||||
{
|
||||
for (int _143 = 0; _143 < 40; _83 = _143 + 1, _143 = _83)
|
||||
for (int _143 = 0; _143 < 40; _143++)
|
||||
{
|
||||
out.FragColor += 13;
|
||||
}
|
||||
|
@ -52,11 +42,12 @@ fragment main0_out main0()
|
|||
}
|
||||
int2 _144;
|
||||
_144 = int2(0);
|
||||
int2 _139;
|
||||
for (; _144.x < 10; _139 = _144, _139.x = _144.x + 4, _144 = _139)
|
||||
{
|
||||
out.FragColor += _144.y;
|
||||
}
|
||||
for (int _145 = _62; _145 < 40; _128 = _145 + 1, _145 = _128)
|
||||
for (int _145 = _62; _145 < 40; _145++)
|
||||
{
|
||||
out.FragColor += _145;
|
||||
}
|
||||
|
|
|
@ -31,11 +31,9 @@ struct main0_out
|
|||
vertex main0_out main0(main0_in in [[stage_in]], constant UBO& _21 [[buffer(0)]])
|
||||
{
|
||||
main0_out out = {};
|
||||
int _12;
|
||||
int _92;
|
||||
out.gl_Position = _21.uMVP * in.aVertex;
|
||||
out.vColor = float4(0.0);
|
||||
for (int _103 = 0; _103 < 4; _92 = _103 + 1, _103 = _92)
|
||||
for (int _103 = 0; _103 < 4; _103++)
|
||||
{
|
||||
float3 _68 = in.aVertex.xyz - _21.lights[_103].Position;
|
||||
out.vColor += ((_21.lights[_103].Color * clamp(1.0 - (length(_68) / _21.lights[_103].Radius), 0.0, 1.0)) * dot(in.aNormal, normalize(_68)));
|
||||
|
|
|
@ -31,11 +31,9 @@ struct main0_out
|
|||
vertex main0_out main0(main0_in in [[stage_in]], constant UBO& _21 [[buffer(0)]])
|
||||
{
|
||||
main0_out out = {};
|
||||
int _12;
|
||||
int _81;
|
||||
out.gl_Position = _21.uMVP * in.aVertex;
|
||||
out.vColor = float4(0.0);
|
||||
for (int _82 = 0; _82 < 4; _81 = _82 + 1, _82 = _81)
|
||||
for (int _82 = 0; _82 < 4; _82++)
|
||||
{
|
||||
float3 _54 = in.aVertex.xyz - _21.lights[_82].Position;
|
||||
out.vColor += ((_21.lights[_82].Color * clamp(1.0 - (length(_54) / _21.lights[_82].Radius), 0.0, 1.0)) * dot(in.aNormal, normalize(_54)));
|
||||
|
|
|
@ -97,12 +97,6 @@ vec4 _297;
|
|||
|
||||
void main()
|
||||
{
|
||||
vec4 _178;
|
||||
vec4 _191;
|
||||
vec4 _205;
|
||||
vec4 _218;
|
||||
vec4 _283;
|
||||
vec4 _296;
|
||||
bool _173;
|
||||
VertexOutput _128 = _121;
|
||||
_128.HPosition = gl_FragCoord;
|
||||
|
@ -141,15 +135,13 @@ void main()
|
|||
_173 = 0.0 == 0.0;
|
||||
if (_173)
|
||||
{
|
||||
_178 = texture(SPIRV_Cross_CombinedDiffuseMapTextureDiffuseMapSampler, _166);
|
||||
_193 = _178;
|
||||
_193 = texture(SPIRV_Cross_CombinedDiffuseMapTextureDiffuseMapSampler, _166);
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
float _180 = 1.0 / (1.0 - 0.0);
|
||||
_191 = mix(texture(SPIRV_Cross_CombinedDiffuseMapTextureDiffuseMapSampler, _166 * 0.25), texture(SPIRV_Cross_CombinedDiffuseMapTextureDiffuseMapSampler, _166), vec4(clamp((clamp(1.0 - (_146.View_Depth.w * 0.00333332992158830165863037109375), 0.0, 1.0) * _180) - (0.0 * _180), 0.0, 1.0)));
|
||||
_193 = _191;
|
||||
_193 = mix(texture(SPIRV_Cross_CombinedDiffuseMapTextureDiffuseMapSampler, _166 * 0.25), texture(SPIRV_Cross_CombinedDiffuseMapTextureDiffuseMapSampler, _166), vec4(clamp((clamp(1.0 - (_146.View_Depth.w * 0.00333332992158830165863037109375), 0.0, 1.0) * _180) - (0.0 * _180), 0.0, 1.0)));
|
||||
break;
|
||||
}
|
||||
_193 = _192;
|
||||
|
@ -160,15 +152,13 @@ void main()
|
|||
{
|
||||
if (_173)
|
||||
{
|
||||
_205 = texture(SPIRV_Cross_CombinedNormalMapTextureNormalMapSampler, _166);
|
||||
_220 = _205;
|
||||
_220 = texture(SPIRV_Cross_CombinedNormalMapTextureNormalMapSampler, _166);
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
float _207 = 1.0 / (1.0 - 0.0);
|
||||
_218 = mix(texture(SPIRV_Cross_CombinedNormalMapTextureNormalMapSampler, _166 * 0.25), texture(SPIRV_Cross_CombinedNormalMapTextureNormalMapSampler, _166), vec4(clamp((_165 * _207) - (0.0 * _207), 0.0, 1.0)));
|
||||
_220 = _218;
|
||||
_220 = mix(texture(SPIRV_Cross_CombinedNormalMapTextureNormalMapSampler, _166 * 0.25), texture(SPIRV_Cross_CombinedNormalMapTextureNormalMapSampler, _166), vec4(clamp((_165 * _207) - (0.0 * _207), 0.0, 1.0)));
|
||||
break;
|
||||
}
|
||||
_220 = _219;
|
||||
|
@ -188,15 +178,13 @@ void main()
|
|||
{
|
||||
if (0.75 == 0.0)
|
||||
{
|
||||
_283 = texture(SPIRV_Cross_CombinedSpecularMapTextureSpecularMapSampler, _166);
|
||||
_298 = _283;
|
||||
_298 = texture(SPIRV_Cross_CombinedSpecularMapTextureSpecularMapSampler, _166);
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
float _285 = 1.0 / (1.0 - 0.75);
|
||||
_296 = mix(texture(SPIRV_Cross_CombinedSpecularMapTextureSpecularMapSampler, _166 * 0.25), texture(SPIRV_Cross_CombinedSpecularMapTextureSpecularMapSampler, _166), vec4(clamp((_165 * _285) - (0.75 * _285), 0.0, 1.0)));
|
||||
_298 = _296;
|
||||
_298 = mix(texture(SPIRV_Cross_CombinedSpecularMapTextureSpecularMapSampler, _166 * 0.25), texture(SPIRV_Cross_CombinedSpecularMapTextureSpecularMapSampler, _166), vec4(clamp((_165 * _285) - (0.75 * _285), 0.0, 1.0)));
|
||||
break;
|
||||
}
|
||||
_298 = _297;
|
||||
|
|
|
@ -15,15 +15,11 @@ uint _155;
|
|||
|
||||
int GetCascade(vec3 fragWorldPosition)
|
||||
{
|
||||
uint _49;
|
||||
uint _119;
|
||||
mat4 _43;
|
||||
mat4 _47;
|
||||
mat4 _153;
|
||||
_153 = _152;
|
||||
uint _156;
|
||||
mat4 _157;
|
||||
for (uint _151 = 0u; _151 < _11.shadowCascadesNum; _119 = _156 + uint(1), _151 = _119, _153 = _157)
|
||||
for (uint _151 = 0u; _151 < _11.shadowCascadesNum; _151 = _156 + uint(1), _153 = _157)
|
||||
{
|
||||
mat4 _154;
|
||||
_154 = _153;
|
||||
|
|
|
@ -7,14 +7,10 @@ layout(location = 0) flat in mediump int counter;
|
|||
|
||||
void main()
|
||||
{
|
||||
int _37;
|
||||
mediump int _22;
|
||||
uint _38;
|
||||
mediump uint _25;
|
||||
FragColor = vec4(0.0);
|
||||
int _53 = 0;
|
||||
uint _54 = 1u;
|
||||
for (; (_53 < 10) && (int(_54) < int(20u)); _22 = _53 + counter, _25 = _54 + uint(counter), _53 = _22, _54 = _25)
|
||||
for (; (_53 < 10) && (int(_54) < int(20u)); _53 += counter, _54 += uint(counter))
|
||||
{
|
||||
FragColor += vec4(float(_53));
|
||||
FragColor += vec4(float(_54));
|
||||
|
|
|
@ -2,9 +2,7 @@
|
|||
|
||||
void main()
|
||||
{
|
||||
int _16;
|
||||
int _23;
|
||||
for (int _22 = 35; _22 >= 0; _23 = _22 - 1, _22 = _23)
|
||||
for (int _22 = 35; _22 >= 0; _22--)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,13 +14,10 @@ layout(location = 0) out vec4 _entryPointOutput;
|
|||
|
||||
void main()
|
||||
{
|
||||
vec3 _14;
|
||||
vec3 _29;
|
||||
int _16;
|
||||
int _32;
|
||||
vec3 _28;
|
||||
_28 = vec3(0.0);
|
||||
for (int _31 = 0; _31 < 4; _32 = _31 + 1, _28 = _29, _31 = _32)
|
||||
vec3 _29;
|
||||
for (int _31 = 0; _31 < 4; _28 = _29, _31++)
|
||||
{
|
||||
_29 = _28 + _6.g_MyStruct[_31].color.xyz;
|
||||
}
|
||||
|
|
|
@ -7,8 +7,6 @@ vec4 _50;
|
|||
|
||||
void main()
|
||||
{
|
||||
vec4 _20;
|
||||
vec4 _21;
|
||||
vec4 _51;
|
||||
vec4 _52;
|
||||
_51 = _50;
|
||||
|
|
|
@ -7,8 +7,6 @@ vec4 _21;
|
|||
|
||||
void main()
|
||||
{
|
||||
vec4 _15;
|
||||
vec4 _17;
|
||||
vec4 _33;
|
||||
do
|
||||
{
|
||||
|
|
|
@ -10,9 +10,6 @@ float _180;
|
|||
|
||||
void main()
|
||||
{
|
||||
int _13;
|
||||
int _166;
|
||||
float _168;
|
||||
if (_11.data != 0.0)
|
||||
{
|
||||
_11.data = 10.0;
|
||||
|
@ -47,7 +44,7 @@ void main()
|
|||
}
|
||||
float _181;
|
||||
_181 = _180;
|
||||
for (int _179 = 0; _179 < 20; _166 = _179 + 1, _168 = _181 + 10.0, _179 = _166, _181 = _168)
|
||||
for (int _179 = 0; _179 < 20; _179++, _181 += 10.0)
|
||||
{
|
||||
}
|
||||
_11.data = _181;
|
||||
|
|
|
@ -16,12 +16,10 @@ int i;
|
|||
|
||||
void main()
|
||||
{
|
||||
vec4 _33;
|
||||
vec4 _42;
|
||||
i = 0;
|
||||
_33 = _28.in_data[gl_GlobalInvocationID.x];
|
||||
vec4 _56;
|
||||
_56 = _33;
|
||||
_56 = _28.in_data[gl_GlobalInvocationID.x];
|
||||
for (;;)
|
||||
{
|
||||
_42 = _28.mvp * _56;
|
||||
|
|
|
@ -18,9 +18,6 @@ layout(binding = 1, std430) writeonly buffer HeightmapFFT
|
|||
|
||||
void main()
|
||||
{
|
||||
uint _66;
|
||||
uint _435;
|
||||
uint _439;
|
||||
uvec2 _263 = uvec2(64u, 1u) * gl_NumWorkGroups.xy;
|
||||
uvec2 _268 = _263 - gl_GlobalInvocationID.xy;
|
||||
bvec2 _270 = equal(gl_GlobalInvocationID.xy, uvec2(0u));
|
||||
|
@ -31,8 +28,7 @@ void main()
|
|||
}
|
||||
else
|
||||
{
|
||||
_435 = _268.x;
|
||||
_470 = _435;
|
||||
_470 = _268.x;
|
||||
}
|
||||
uint _471;
|
||||
if (_270.y)
|
||||
|
@ -41,8 +37,7 @@ void main()
|
|||
}
|
||||
else
|
||||
{
|
||||
_439 = _268.y;
|
||||
_471 = _439;
|
||||
_471 = _268.y;
|
||||
}
|
||||
vec2 _296 = vec2(gl_GlobalInvocationID.xy);
|
||||
vec2 _298 = vec2(_263);
|
||||
|
|
|
@ -10,8 +10,6 @@ int _69;
|
|||
|
||||
void main()
|
||||
{
|
||||
int _29;
|
||||
int _65;
|
||||
if (gl_GlobalInvocationID.x == 2u)
|
||||
{
|
||||
_27.out_data[gl_GlobalInvocationID.x] = vec4(20.0);
|
||||
|
@ -24,7 +22,7 @@ void main()
|
|||
return;
|
||||
}
|
||||
}
|
||||
for (int _68 = 0; _68 < 20; _65 = _69 + 1, _68 = _65)
|
||||
for (int _68 = 0; _68 < 20; _68 = _69 + 1)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -16,22 +16,13 @@ uint _98;
|
|||
|
||||
void main()
|
||||
{
|
||||
vec4 _30;
|
||||
vec4 _46;
|
||||
int _33;
|
||||
int _48;
|
||||
int _40;
|
||||
int _77;
|
||||
uint _12;
|
||||
uint _75;
|
||||
vec4 _71;
|
||||
uint _73;
|
||||
int _83;
|
||||
_30 = _24.in_data[gl_GlobalInvocationID.x];
|
||||
vec4 _93;
|
||||
int _94;
|
||||
_93 = _30;
|
||||
_93 = _24.in_data[gl_GlobalInvocationID.x];
|
||||
_94 = 0;
|
||||
int _48;
|
||||
vec4 _46;
|
||||
for (;;)
|
||||
{
|
||||
_40 = _94 + 1;
|
||||
|
@ -54,17 +45,19 @@ void main()
|
|||
_96 = _40;
|
||||
vec4 _100;
|
||||
uint _101;
|
||||
for (uint _97 = 0u, _99 = _98; _97 < 16u; _75 = _97 + uint(1), _77 = _96 + 1, _95 = _100, _96 = _77, _97 = _75, _99 = _101)
|
||||
for (uint _97 = 0u, _99 = _98; _97 < 16u; _95 = _100, _96++, _97++, _99 = _101)
|
||||
{
|
||||
_100 = _95;
|
||||
_101 = 0u;
|
||||
for (; _101 < 30u; _73 = _101 + uint(1), _100 = _71, _101 = _73)
|
||||
vec4 _71;
|
||||
for (; _101 < 30u; _100 = _71, _101++)
|
||||
{
|
||||
_71 = _24.mvp * _100;
|
||||
}
|
||||
}
|
||||
int _102;
|
||||
_102 = _96;
|
||||
int _83;
|
||||
for (;;)
|
||||
{
|
||||
_83 = _102 + 1;
|
||||
|
|
|
@ -14,11 +14,9 @@ layout(location = 1) in vec3 aNormal;
|
|||
|
||||
void main()
|
||||
{
|
||||
int _12;
|
||||
int _92;
|
||||
gl_Position = mat4(UBO[0], UBO[1], UBO[2], UBO[3]) * aVertex;
|
||||
vColor = vec4(0.0);
|
||||
for (int _103 = 0; _103 < 4; _92 = _103 + 1, _103 = _92)
|
||||
for (int _103 = 0; _103 < 4; _103++)
|
||||
{
|
||||
vec3 _68 = aVertex.xyz - Light(UBO[_103 * 2 + 4].xyz, UBO[_103 * 2 + 4].w, UBO[_103 * 2 + 5]).Position;
|
||||
vColor += (((UBO[_103 * 2 + 5]) * clamp(1.0 - (length(_68) / Light(UBO[_103 * 2 + 4].xyz, UBO[_103 * 2 + 4].w, UBO[_103 * 2 + 5]).Radius), 0.0, 1.0)) * dot(aNormal, normalize(_68)));
|
||||
|
|
|
@ -14,11 +14,9 @@ layout(location = 1) in vec3 aNormal;
|
|||
|
||||
void main()
|
||||
{
|
||||
int _12;
|
||||
int _81;
|
||||
gl_Position = mat4(UBO[0], UBO[1], UBO[2], UBO[3]) * aVertex;
|
||||
vColor = vec4(0.0);
|
||||
for (int _82 = 0; _82 < 4; _81 = _82 + 1, _82 = _81)
|
||||
for (int _82 = 0; _82 < 4; _82++)
|
||||
{
|
||||
vec3 _54 = aVertex.xyz - (UBO[_82 * 2 + 4].xyz);
|
||||
vColor += (((UBO[_82 * 2 + 5]) * clamp(1.0 - (length(_54) / (UBO[_82 * 2 + 4].w)), 0.0, 1.0)) * dot(aNormal, normalize(_54)));
|
||||
|
|
|
@ -10,22 +10,18 @@ int _93;
|
|||
|
||||
void main()
|
||||
{
|
||||
int _9;
|
||||
int _76;
|
||||
int _74;
|
||||
int _72;
|
||||
vec4 values3[2 * 3 * 1];
|
||||
int _96;
|
||||
int _97;
|
||||
for (int _92 = 0, _94 = _93, _95 = _93; _92 < 2; _76 = _92 + 1, _92 = _76, _94 = _96, _95 = _97)
|
||||
for (int _92 = 0, _94 = _93, _95 = _93; _92 < 2; _92++, _94 = _96, _95 = _97)
|
||||
{
|
||||
_96 = 0;
|
||||
_97 = _95;
|
||||
int _98;
|
||||
for (; _96 < 3; _74 = _96 + 1, _96 = _74, _97 = _98)
|
||||
for (; _96 < 3; _96++, _97 = _98)
|
||||
{
|
||||
_98 = 0;
|
||||
for (; _98 < 1; _72 = _98 + 1, _98 = _72)
|
||||
for (; _98 < 1; _98++)
|
||||
{
|
||||
values3[_92 * 3 * 1 + _96 * 1 + _98] = texture(uTextures[_92 * 3 * 1 + _96 * 1 + _98], vUV);
|
||||
}
|
||||
|
|
|
@ -6,36 +6,26 @@ layout(location = 0) out mediump int FragColor;
|
|||
|
||||
void main()
|
||||
{
|
||||
int _12;
|
||||
mediump int _27;
|
||||
int _26;
|
||||
mediump int _43;
|
||||
mediump int _59;
|
||||
mediump int _83;
|
||||
ivec2 _93;
|
||||
ivec2 _139;
|
||||
mediump int _62;
|
||||
mediump int _128;
|
||||
FragColor = 16;
|
||||
for (int _140 = 0; _140 < 25; _27 = _140 + 1, _140 = _27)
|
||||
for (int _140 = 0; _140 < 25; _140++)
|
||||
{
|
||||
FragColor += 10;
|
||||
}
|
||||
for (int _141 = 1; _141 < 30; _43 = _141 + 1, _141 = _43)
|
||||
for (int _141 = 1; _141 < 30; _141++)
|
||||
{
|
||||
FragColor += 11;
|
||||
}
|
||||
int _142;
|
||||
_142 = 0;
|
||||
for (; _142 < 20; _59 = _142 + 1, _142 = _59)
|
||||
for (; _142 < 20; _142++)
|
||||
{
|
||||
FragColor += 12;
|
||||
}
|
||||
_62 = _142 + 3;
|
||||
mediump int _62 = _142 + 3;
|
||||
FragColor += _62;
|
||||
if (_62 == 40)
|
||||
{
|
||||
for (int _143 = 0; _143 < 40; _83 = _143 + 1, _143 = _83)
|
||||
for (int _143 = 0; _143 < 40; _143++)
|
||||
{
|
||||
FragColor += 13;
|
||||
}
|
||||
|
@ -47,11 +37,12 @@ void main()
|
|||
}
|
||||
ivec2 _144;
|
||||
_144 = ivec2(0);
|
||||
ivec2 _139;
|
||||
for (; _144.x < 10; _139 = _144, _139.x = _144.x + 4, _144 = _139)
|
||||
{
|
||||
FragColor += _144.y;
|
||||
}
|
||||
for (int _145 = _62; _145 < 40; _128 = _145 + 1, _145 = _128)
|
||||
for (int _145 = _62; _145 < 40; _145++)
|
||||
{
|
||||
FragColor += _145;
|
||||
}
|
||||
|
|
|
@ -18,20 +18,17 @@ layout(location = 0) in vec2 vPatchPosBase[];
|
|||
|
||||
void main()
|
||||
{
|
||||
bool _515;
|
||||
bool _524;
|
||||
vec2 _430 = (vPatchPosBase[0] - vec2(10.0)) * _41.uScale.xy;
|
||||
vec2 _440 = ((vPatchPosBase[0] + _41.uPatchSize) + vec2(10.0)) * _41.uScale.xy;
|
||||
vec3 _445 = vec3(_430.x, -10.0, _430.y);
|
||||
vec3 _450 = vec3(_440.x, 10.0, _440.y);
|
||||
vec3 _454 = (_445 + _450) * 0.5;
|
||||
float _459 = 0.5 * length(_450 - _445);
|
||||
_515 = any(lessThanEqual(vec3(dot(_41.uFrustum[0], vec4(_454, 1.0)), dot(_41.uFrustum[1], vec4(_454, 1.0)), dot(_41.uFrustum[2], vec4(_454, 1.0))), vec3(-_459)));
|
||||
bool _515 = any(lessThanEqual(vec3(dot(_41.uFrustum[0], vec4(_454, 1.0)), dot(_41.uFrustum[1], vec4(_454, 1.0)), dot(_41.uFrustum[2], vec4(_454, 1.0))), vec3(-_459)));
|
||||
bool _525;
|
||||
if (!_515)
|
||||
{
|
||||
_524 = any(lessThanEqual(vec3(dot(_41.uFrustum[3], vec4(_454, 1.0)), dot(_41.uFrustum[4], vec4(_454, 1.0)), dot(_41.uFrustum[5], vec4(_454, 1.0))), vec3(-_459)));
|
||||
_525 = _524;
|
||||
_525 = any(lessThanEqual(vec3(dot(_41.uFrustum[3], vec4(_454, 1.0)), dot(_41.uFrustum[4], vec4(_454, 1.0)), dot(_41.uFrustum[5], vec4(_454, 1.0))), vec3(-_459)));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -51,9 +51,6 @@ layout(location = 0) out vec2 TexCoord;
|
|||
|
||||
void main()
|
||||
{
|
||||
uint _372;
|
||||
uint _28;
|
||||
uint _376;
|
||||
float _300 = all(equal(LODWeights, vec4(0.0))) ? _53.Patches[(gl_InstanceID + SPIRV_Cross_BaseInstance)].Position.w : dot(LODWeights, _53.Patches[(gl_InstanceID + SPIRV_Cross_BaseInstance)].LODs);
|
||||
float _302 = floor(_300);
|
||||
uint _307 = uint(_302);
|
||||
|
@ -62,8 +59,7 @@ void main()
|
|||
uint _395;
|
||||
if (_309.x < 32u)
|
||||
{
|
||||
_372 = _316.x;
|
||||
_395 = _372;
|
||||
_395 = _316.x;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -72,8 +68,7 @@ void main()
|
|||
uint _396;
|
||||
if (_309.y < 32u)
|
||||
{
|
||||
_376 = _316.y;
|
||||
_396 = _376;
|
||||
_396 = _316.y;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -54,11 +54,6 @@ uvec4 _483;
|
|||
|
||||
void main()
|
||||
{
|
||||
uint _443;
|
||||
uint _28;
|
||||
uint _449;
|
||||
uint _455;
|
||||
uint _461;
|
||||
float _350 = all(equal(LODWeights, vec4(0.0))) ? _53.Patches[(gl_InstanceID + SPIRV_Cross_BaseInstance)].Position.w : dot(LODWeights, _53.Patches[(gl_InstanceID + SPIRV_Cross_BaseInstance)].LODs);
|
||||
float _352 = floor(_350);
|
||||
uint _357 = uint(_352);
|
||||
|
@ -67,8 +62,7 @@ void main()
|
|||
uint _482;
|
||||
if (_359.x < 32u)
|
||||
{
|
||||
_443 = _366.x;
|
||||
_482 = _443;
|
||||
_482 = _366.x;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -79,8 +73,7 @@ void main()
|
|||
uint _484;
|
||||
if (_359.y < 32u)
|
||||
{
|
||||
_449 = _366.x;
|
||||
_484 = _449;
|
||||
_484 = _366.x;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -91,8 +84,7 @@ void main()
|
|||
uint _485;
|
||||
if (_359.x < 32u)
|
||||
{
|
||||
_455 = _366.y;
|
||||
_485 = _455;
|
||||
_485 = _366.y;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -103,8 +95,7 @@ void main()
|
|||
uint _486;
|
||||
if (_359.y < 32u)
|
||||
{
|
||||
_461 = _366.y;
|
||||
_486 = _461;
|
||||
_486 = _366.y;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -15,8 +15,6 @@ float4 _21;
|
|||
|
||||
void frag_main()
|
||||
{
|
||||
float4 _15;
|
||||
float4 _17;
|
||||
float4 _24;
|
||||
float4 _33;
|
||||
_24 = _21;
|
||||
|
|
|
@ -104,12 +104,6 @@ struct main0_out
|
|||
fragment main0_out main0(main0_in in [[stage_in]], float4 gl_FragCoord [[position]], constant CB0& _19 [[buffer(0)]], texture3d<float> LightMapTexture [[texture(0)]], sampler LightMapSampler [[sampler(0)]], sampler ShadowMapSampler [[sampler(1)]], texture2d<float> ShadowMapTexture [[texture(1)]], texturecube<float> EnvironmentMapTexture [[texture(2)]], sampler EnvironmentMapSampler [[sampler(2)]], sampler DiffuseMapSampler [[sampler(3)]], texture2d<float> DiffuseMapTexture [[texture(3)]], sampler NormalMapSampler [[sampler(4)]], texture2d<float> NormalMapTexture [[texture(4)]], texture2d<float> NormalDetailMapTexture [[texture(5)]], sampler NormalDetailMapSampler [[sampler(5)]], texture2d<float> StudsMapTexture [[texture(6)]], sampler StudsMapSampler [[sampler(6)]], sampler SpecularMapSampler [[sampler(7)]], texture2d<float> SpecularMapTexture [[texture(7)]])
|
||||
{
|
||||
main0_out out = {};
|
||||
float4 _178;
|
||||
float4 _191;
|
||||
float4 _205;
|
||||
float4 _218;
|
||||
float4 _283;
|
||||
float4 _296;
|
||||
bool _173;
|
||||
VertexOutput _128 = _121;
|
||||
_128.HPosition = gl_FragCoord;
|
||||
|
@ -148,15 +142,13 @@ fragment main0_out main0(main0_in in [[stage_in]], float4 gl_FragCoord [[positio
|
|||
_173 = 0.0 == 0.0;
|
||||
if (_173)
|
||||
{
|
||||
_178 = DiffuseMapTexture.sample(DiffuseMapSampler, _166);
|
||||
_193 = _178;
|
||||
_193 = DiffuseMapTexture.sample(DiffuseMapSampler, _166);
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
float _180 = 1.0 / (1.0 - 0.0);
|
||||
_191 = mix(DiffuseMapTexture.sample(DiffuseMapSampler, (_166 * 0.25)), DiffuseMapTexture.sample(DiffuseMapSampler, _166), float4(clamp((clamp(1.0 - (_146.View_Depth.w * 0.00333332992158830165863037109375), 0.0, 1.0) * _180) - (0.0 * _180), 0.0, 1.0)));
|
||||
_193 = _191;
|
||||
_193 = mix(DiffuseMapTexture.sample(DiffuseMapSampler, (_166 * 0.25)), DiffuseMapTexture.sample(DiffuseMapSampler, _166), float4(clamp((clamp(1.0 - (_146.View_Depth.w * 0.00333332992158830165863037109375), 0.0, 1.0) * _180) - (0.0 * _180), 0.0, 1.0)));
|
||||
break;
|
||||
}
|
||||
_193 = _192;
|
||||
|
@ -167,15 +159,13 @@ fragment main0_out main0(main0_in in [[stage_in]], float4 gl_FragCoord [[positio
|
|||
{
|
||||
if (_173)
|
||||
{
|
||||
_205 = NormalMapTexture.sample(NormalMapSampler, _166);
|
||||
_220 = _205;
|
||||
_220 = NormalMapTexture.sample(NormalMapSampler, _166);
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
float _207 = 1.0 / (1.0 - 0.0);
|
||||
_218 = mix(NormalMapTexture.sample(NormalMapSampler, (_166 * 0.25)), NormalMapTexture.sample(NormalMapSampler, _166), float4(clamp((_165 * _207) - (0.0 * _207), 0.0, 1.0)));
|
||||
_220 = _218;
|
||||
_220 = mix(NormalMapTexture.sample(NormalMapSampler, (_166 * 0.25)), NormalMapTexture.sample(NormalMapSampler, _166), float4(clamp((_165 * _207) - (0.0 * _207), 0.0, 1.0)));
|
||||
break;
|
||||
}
|
||||
_220 = _219;
|
||||
|
@ -195,15 +185,13 @@ fragment main0_out main0(main0_in in [[stage_in]], float4 gl_FragCoord [[positio
|
|||
{
|
||||
if (0.75 == 0.0)
|
||||
{
|
||||
_283 = SpecularMapTexture.sample(SpecularMapSampler, _166);
|
||||
_298 = _283;
|
||||
_298 = SpecularMapTexture.sample(SpecularMapSampler, _166);
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
float _285 = 1.0 / (1.0 - 0.75);
|
||||
_296 = mix(SpecularMapTexture.sample(SpecularMapSampler, (_166 * 0.25)), SpecularMapTexture.sample(SpecularMapSampler, _166), float4(clamp((_165 * _285) - (0.75 * _285), 0.0, 1.0)));
|
||||
_298 = _296;
|
||||
_298 = mix(SpecularMapTexture.sample(SpecularMapSampler, (_166 * 0.25)), SpecularMapTexture.sample(SpecularMapSampler, _166), float4(clamp((_165 * _285) - (0.75 * _285), 0.0, 1.0)));
|
||||
break;
|
||||
}
|
||||
_298 = _297;
|
||||
|
|
|
@ -5,9 +5,7 @@ using namespace metal;
|
|||
|
||||
fragment void main0()
|
||||
{
|
||||
int _16;
|
||||
int _23;
|
||||
for (int _22 = 35; _22 >= 0; _23 = _22 - 1, _22 = _23)
|
||||
for (int _22 = 35; _22 >= 0; _22--)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,8 +18,6 @@ struct main0_out
|
|||
fragment main0_out main0(main0_in in [[stage_in]])
|
||||
{
|
||||
main0_out out = {};
|
||||
float4 _15;
|
||||
float4 _17;
|
||||
float4 _24;
|
||||
float4 _33;
|
||||
_24 = _21;
|
||||
|
|
|
@ -97,12 +97,6 @@ vec4 _297;
|
|||
|
||||
void main()
|
||||
{
|
||||
vec4 _178;
|
||||
vec4 _191;
|
||||
vec4 _205;
|
||||
vec4 _218;
|
||||
vec4 _283;
|
||||
vec4 _296;
|
||||
bool _173;
|
||||
VertexOutput _128 = _121;
|
||||
_128.HPosition = gl_FragCoord;
|
||||
|
@ -141,15 +135,13 @@ void main()
|
|||
_173 = 0.0 == 0.0;
|
||||
if (_173)
|
||||
{
|
||||
_178 = texture(SPIRV_Cross_CombinedDiffuseMapTextureDiffuseMapSampler, _166);
|
||||
_193 = _178;
|
||||
_193 = texture(SPIRV_Cross_CombinedDiffuseMapTextureDiffuseMapSampler, _166);
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
float _180 = 1.0 / (1.0 - 0.0);
|
||||
_191 = mix(texture(SPIRV_Cross_CombinedDiffuseMapTextureDiffuseMapSampler, _166 * 0.25), texture(SPIRV_Cross_CombinedDiffuseMapTextureDiffuseMapSampler, _166), vec4(clamp((clamp(1.0 - (_146.View_Depth.w * 0.00333332992158830165863037109375), 0.0, 1.0) * _180) - (0.0 * _180), 0.0, 1.0)));
|
||||
_193 = _191;
|
||||
_193 = mix(texture(SPIRV_Cross_CombinedDiffuseMapTextureDiffuseMapSampler, _166 * 0.25), texture(SPIRV_Cross_CombinedDiffuseMapTextureDiffuseMapSampler, _166), vec4(clamp((clamp(1.0 - (_146.View_Depth.w * 0.00333332992158830165863037109375), 0.0, 1.0) * _180) - (0.0 * _180), 0.0, 1.0)));
|
||||
break;
|
||||
}
|
||||
_193 = _192;
|
||||
|
@ -160,15 +152,13 @@ void main()
|
|||
{
|
||||
if (_173)
|
||||
{
|
||||
_205 = texture(SPIRV_Cross_CombinedNormalMapTextureNormalMapSampler, _166);
|
||||
_220 = _205;
|
||||
_220 = texture(SPIRV_Cross_CombinedNormalMapTextureNormalMapSampler, _166);
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
float _207 = 1.0 / (1.0 - 0.0);
|
||||
_218 = mix(texture(SPIRV_Cross_CombinedNormalMapTextureNormalMapSampler, _166 * 0.25), texture(SPIRV_Cross_CombinedNormalMapTextureNormalMapSampler, _166), vec4(clamp((_165 * _207) - (0.0 * _207), 0.0, 1.0)));
|
||||
_220 = _218;
|
||||
_220 = mix(texture(SPIRV_Cross_CombinedNormalMapTextureNormalMapSampler, _166 * 0.25), texture(SPIRV_Cross_CombinedNormalMapTextureNormalMapSampler, _166), vec4(clamp((_165 * _207) - (0.0 * _207), 0.0, 1.0)));
|
||||
break;
|
||||
}
|
||||
_220 = _219;
|
||||
|
@ -188,15 +178,13 @@ void main()
|
|||
{
|
||||
if (0.75 == 0.0)
|
||||
{
|
||||
_283 = texture(SPIRV_Cross_CombinedSpecularMapTextureSpecularMapSampler, _166);
|
||||
_298 = _283;
|
||||
_298 = texture(SPIRV_Cross_CombinedSpecularMapTextureSpecularMapSampler, _166);
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
float _285 = 1.0 / (1.0 - 0.75);
|
||||
_296 = mix(texture(SPIRV_Cross_CombinedSpecularMapTextureSpecularMapSampler, _166 * 0.25), texture(SPIRV_Cross_CombinedSpecularMapTextureSpecularMapSampler, _166), vec4(clamp((_165 * _285) - (0.75 * _285), 0.0, 1.0)));
|
||||
_298 = _296;
|
||||
_298 = mix(texture(SPIRV_Cross_CombinedSpecularMapTextureSpecularMapSampler, _166 * 0.25), texture(SPIRV_Cross_CombinedSpecularMapTextureSpecularMapSampler, _166), vec4(clamp((_165 * _285) - (0.75 * _285), 0.0, 1.0)));
|
||||
break;
|
||||
}
|
||||
_298 = _297;
|
||||
|
|
|
@ -2,9 +2,7 @@
|
|||
|
||||
void main()
|
||||
{
|
||||
int _16;
|
||||
int _23;
|
||||
for (int _22 = 35; _22 >= 0; _23 = _22 - 1, _22 = _23)
|
||||
for (int _22 = 35; _22 >= 0; _22--)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,13 +14,10 @@ layout(location = 0) out vec4 _entryPointOutput;
|
|||
|
||||
void main()
|
||||
{
|
||||
vec3 _14;
|
||||
vec3 _29;
|
||||
int _16;
|
||||
int _32;
|
||||
vec3 _28;
|
||||
_28 = vec3(0.0);
|
||||
for (int _31 = 0; _31 < 4; _32 = _31 + 1, _28 = _29, _31 = _32)
|
||||
vec3 _29;
|
||||
for (int _31 = 0; _31 < 4; _28 = _29, _31++)
|
||||
{
|
||||
_29 = _28 + _6.g_MyStruct[_31].color.xyz;
|
||||
}
|
||||
|
|
|
@ -7,8 +7,6 @@ vec4 _21;
|
|||
|
||||
void main()
|
||||
{
|
||||
vec4 _15;
|
||||
vec4 _17;
|
||||
vec4 _24;
|
||||
vec4 _33;
|
||||
_24 = _21;
|
||||
|
|
|
@ -18,8 +18,6 @@ layout(location = 0) in vec2 vPatchPosBase[];
|
|||
|
||||
bool frustum_cull(vec2 p0)
|
||||
{
|
||||
bool _205;
|
||||
bool _214;
|
||||
vec2 min_xz = (p0 - vec2(10.0)) * _41.uScale.xy;
|
||||
vec2 max_xz = ((p0 + _41.uPatchSize) + vec2(10.0)) * _41.uScale.xy;
|
||||
vec3 bb_min = vec3(min_xz.x, -10.0, min_xz.y);
|
||||
|
@ -28,12 +26,12 @@ bool frustum_cull(vec2 p0)
|
|||
float radius = 0.5 * length(bb_max - bb_min);
|
||||
vec3 f0 = vec3(dot(_41.uFrustum[0], vec4(center, 1.0)), dot(_41.uFrustum[1], vec4(center, 1.0)), dot(_41.uFrustum[2], vec4(center, 1.0)));
|
||||
vec3 f1 = vec3(dot(_41.uFrustum[3], vec4(center, 1.0)), dot(_41.uFrustum[4], vec4(center, 1.0)), dot(_41.uFrustum[5], vec4(center, 1.0)));
|
||||
_205 = any(lessThanEqual(f0, vec3(-radius)));
|
||||
vec3 _199 = f0;
|
||||
bool _205 = any(lessThanEqual(_199, vec3(-radius)));
|
||||
bool _215;
|
||||
if (!_205)
|
||||
{
|
||||
_214 = any(lessThanEqual(f1, vec3(-radius)));
|
||||
_215 = _214;
|
||||
_215 = any(lessThanEqual(f1, vec3(-radius)));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
108
spirv_cross.cpp
108
spirv_cross.cpp
|
@ -3129,36 +3129,12 @@ void Compiler::analyze_variable_scope(SPIRFunction &entry)
|
|||
accessed_variables_to_block[phi.function_variable].insert(block.self);
|
||||
// Phi variables are also accessed in our target branch block.
|
||||
accessed_variables_to_block[phi.function_variable].insert(next.self);
|
||||
|
||||
notify_variable_access(phi.local_variable, block.self);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// A Phi node might be reading other phi variables as input, so check for this as well.
|
||||
for (auto &phi : block.phi_variables)
|
||||
{
|
||||
if (id_is_phi_variable(phi.local_variable))
|
||||
accessed_variables_to_block[phi.local_variable].insert(block.self);
|
||||
else
|
||||
{
|
||||
// Temporary variable, due to potential issues with scoping,
|
||||
// always declare these variables up-front in the entry block.
|
||||
if (!compiler.hoisted_temporaries.count(phi.local_variable))
|
||||
{
|
||||
auto *undef = compiler.maybe_get<SPIRUndef>(phi.local_variable);
|
||||
// Undef variables are declared as global variables without initializer.
|
||||
// Never declare these variables.
|
||||
if (!undef)
|
||||
{
|
||||
auto &var = compiler.get<SPIRVariable>(phi.function_variable);
|
||||
auto &entry_block = compiler.get<SPIRBlock>(entry.entry_block);
|
||||
entry_block.declare_temporary.emplace_back(var.basetype, phi.local_variable);
|
||||
compiler.hoisted_temporaries.insert(phi.local_variable);
|
||||
compiler.forced_temporaries.insert(phi.local_variable);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
switch (block.terminator)
|
||||
{
|
||||
case SPIRBlock::Direct:
|
||||
|
@ -3212,6 +3188,11 @@ void Compiler::analyze_variable_scope(SPIRFunction &entry)
|
|||
|
||||
bool handle(spv::Op op, const uint32_t *args, uint32_t length)
|
||||
{
|
||||
// Keep track of the types of temporaries, so we can hoist them out as necessary.
|
||||
uint32_t result_type, result_id;
|
||||
if (compiler.instruction_to_result_type(result_type, result_id, op, args, length))
|
||||
result_id_to_type[result_id] = result_type;
|
||||
|
||||
switch (op)
|
||||
{
|
||||
case OpStore:
|
||||
|
@ -3374,6 +3355,7 @@ void Compiler::analyze_variable_scope(SPIRFunction &entry)
|
|||
SPIRFunction &entry;
|
||||
std::unordered_map<uint32_t, std::unordered_set<uint32_t>> accessed_variables_to_block;
|
||||
std::unordered_map<uint32_t, std::unordered_set<uint32_t>> accessed_temporaries_to_block;
|
||||
std::unordered_map<uint32_t, uint32_t> result_id_to_type;
|
||||
std::unordered_map<uint32_t, std::unordered_set<uint32_t>> complete_write_variables_to_block;
|
||||
const SPIRBlock *current_block = nullptr;
|
||||
} handler(*this, entry);
|
||||
|
@ -3445,18 +3427,48 @@ void Compiler::analyze_variable_scope(SPIRFunction &entry)
|
|||
|
||||
for (auto &var : handler.accessed_temporaries_to_block)
|
||||
{
|
||||
auto itr = handler.result_id_to_type.find(var.first);
|
||||
|
||||
if (itr == end(handler.result_id_to_type))
|
||||
{
|
||||
// We found a false positive ID being used, ignore.
|
||||
// This should probably be an assert.
|
||||
continue;
|
||||
}
|
||||
|
||||
DominatorBuilder builder(cfg);
|
||||
|
||||
// Figure out which block is dominating all accesses of those temporaries.
|
||||
auto &blocks = var.second;
|
||||
for (auto &block : blocks)
|
||||
{
|
||||
builder.add_block(block);
|
||||
|
||||
builder.lift_continue_block_dominator();
|
||||
// If a temporary is used in more than one block, we might have to lift continue block
|
||||
// access up to loop header like we did for variables.
|
||||
if (blocks.size() != 1 && this->is_continue(block))
|
||||
builder.add_block(continue_block_to_loop_header[block]);
|
||||
}
|
||||
|
||||
uint32_t dominating_block = builder.get_dominator();
|
||||
if (dominating_block)
|
||||
expected_dominator_for_temporary[var.first] = dominating_block;
|
||||
{
|
||||
// If we touch a variable in the dominating block, this is the expected setup.
|
||||
// SPIR-V normally mandates this, but we have extra cases for temporary use inside loops.
|
||||
bool first_use_is_dominator = blocks.count(dominating_block) != 0;
|
||||
|
||||
if (!first_use_is_dominator)
|
||||
{
|
||||
// This should be very rare, but if we try to declare a temporary inside a loop,
|
||||
// and that temporary is used outside the loop as well (spirv-opt inliner likes this)
|
||||
// we should actually emit the temporary outside the loop.
|
||||
hoisted_temporaries.insert(var.first);
|
||||
forced_temporaries.insert(var.first);
|
||||
|
||||
auto &block_temporaries = get<SPIRBlock>(dominating_block).declare_temporary;
|
||||
block_temporaries.emplace_back(handler.result_id_to_type[var.first], var.first);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
unordered_set<uint32_t> seen_blocks;
|
||||
|
@ -3897,3 +3909,43 @@ std::string Compiler::get_remapped_declared_block_name(uint32_t id) const
|
|||
return block_name.empty() ? get_block_fallback_name(id) : block_name;
|
||||
}
|
||||
}
|
||||
|
||||
bool Compiler::instruction_to_result_type(uint32_t &result_type, uint32_t &result_id, spv::Op op, const uint32_t *args,
|
||||
uint32_t length)
|
||||
{
|
||||
// Most instructions follow the pattern of <result-type> <result-id> <arguments>.
|
||||
// There are some exceptions.
|
||||
switch (op)
|
||||
{
|
||||
case OpStore:
|
||||
case OpCopyMemory:
|
||||
case OpCopyMemorySized:
|
||||
case OpImageWrite:
|
||||
case OpAtomicStore:
|
||||
case OpAtomicFlagClear:
|
||||
case OpEmitStreamVertex:
|
||||
case OpEndStreamPrimitive:
|
||||
case OpControlBarrier:
|
||||
case OpMemoryBarrier:
|
||||
case OpGroupWaitEvents:
|
||||
case OpRetainEvent:
|
||||
case OpReleaseEvent:
|
||||
case OpSetUserEventStatus:
|
||||
case OpCaptureEventProfilingInfo:
|
||||
case OpCommitReadPipe:
|
||||
case OpCommitWritePipe:
|
||||
case OpGroupCommitReadPipe:
|
||||
case OpGroupCommitWritePipe:
|
||||
return false;
|
||||
|
||||
default:
|
||||
if (length > 1)
|
||||
{
|
||||
result_type = args[0];
|
||||
result_id = args[1];
|
||||
return true;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -705,10 +705,6 @@ protected:
|
|||
std::unordered_set<uint32_t> forwarded_temporaries;
|
||||
std::unordered_set<uint32_t> hoisted_temporaries;
|
||||
|
||||
// Based on initial analysis, we expect a temporary to be declared in a certain block.
|
||||
// If we end up declaring a temporary in another block, we'll hoist out that temporary later.
|
||||
std::unordered_map<uint32_t, uint32_t> expected_dominator_for_temporary;
|
||||
|
||||
uint64_t active_input_builtins = 0;
|
||||
uint64_t active_output_builtins = 0;
|
||||
// Traverses all reachable opcodes and sets active_builtins to a bitmask of all builtin variables which are accessed in the shader.
|
||||
|
@ -748,6 +744,9 @@ protected:
|
|||
std::vector<spv::Capability> declared_capabilities;
|
||||
std::vector<std::string> declared_extensions;
|
||||
std::unordered_map<uint32_t, std::string> declared_block_names;
|
||||
|
||||
bool instruction_to_result_type(uint32_t &result_type, uint32_t &result_id, spv::Op op, const uint32_t *args,
|
||||
uint32_t length);
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -2745,24 +2745,6 @@ string CompilerGLSL::declare_temporary(uint32_t result_type, uint32_t result_id)
|
|||
auto &type = get<SPIRType>(result_type);
|
||||
auto flags = meta[result_id].decoration.decoration_flags;
|
||||
|
||||
auto itr = expected_dominator_for_temporary.find(result_id);
|
||||
if (!hoisted_temporaries.count(result_id) && itr != end(expected_dominator_for_temporary))
|
||||
{
|
||||
if (current_emitting_block->self != itr->second)
|
||||
{
|
||||
// This should be very rare, but if we try to declare a temporary inside a loop,
|
||||
// and that temporary is used outside the loop as well (spirv-opt inliner likes this)
|
||||
// we should actually emit the temporary outside the loop. We don't know the result types
|
||||
// before declaring the temporary unless we check every possible opcode during CFG traversal,
|
||||
// so do it lazily like this where we fallback in these rare scenarios.
|
||||
|
||||
hoisted_temporaries.insert(result_id);
|
||||
forced_temporaries.insert(result_id);
|
||||
get<SPIRBlock>(itr->second).declare_temporary.emplace_back(result_type, result_id);
|
||||
force_recompile = true;
|
||||
}
|
||||
}
|
||||
|
||||
// If we're declaring temporaries inside continue blocks,
|
||||
// we must declare the temporary in the loop header so that the continue block can avoid declaring new variables.
|
||||
if (current_continue_block && !hoisted_temporaries.count(result_id))
|
||||
|
@ -2774,6 +2756,7 @@ string CompilerGLSL::declare_temporary(uint32_t result_type, uint32_t result_id)
|
|||
}) == end(header.declare_temporary))
|
||||
{
|
||||
header.declare_temporary.emplace_back(result_type, result_id);
|
||||
hoisted_temporaries.insert(result_id);
|
||||
force_recompile = true;
|
||||
}
|
||||
|
||||
|
|
|
@ -3449,34 +3449,9 @@ bool CompilerMSL::OpCodePreprocessor::handle(Op opcode, const uint32_t *args, ui
|
|||
}
|
||||
|
||||
// If it has one, keep track of the instruction's result type, mapped by ID
|
||||
switch (opcode)
|
||||
{
|
||||
case OpStore:
|
||||
case OpCopyMemory:
|
||||
case OpCopyMemorySized:
|
||||
case OpImageWrite:
|
||||
case OpAtomicStore:
|
||||
case OpAtomicFlagClear:
|
||||
case OpEmitStreamVertex:
|
||||
case OpEndStreamPrimitive:
|
||||
case OpControlBarrier:
|
||||
case OpMemoryBarrier:
|
||||
case OpGroupWaitEvents:
|
||||
case OpRetainEvent:
|
||||
case OpReleaseEvent:
|
||||
case OpSetUserEventStatus:
|
||||
case OpCaptureEventProfilingInfo:
|
||||
case OpCommitReadPipe:
|
||||
case OpCommitWritePipe:
|
||||
case OpGroupCommitReadPipe:
|
||||
case OpGroupCommitWritePipe:
|
||||
break;
|
||||
|
||||
default:
|
||||
if (length > 1)
|
||||
result_types[args[1]] = args[0];
|
||||
break;
|
||||
}
|
||||
uint32_t result_type, result_id;
|
||||
if (compiler.instruction_to_result_type(result_type, result_id, opcode, args, length))
|
||||
result_types[result_id] = result_type;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче