Skip to content

Commit 42096ca

Browse files
Merge pull request #1409 from KhronosGroup/fix-1405
Improve expression usage tracking
2 parents 2e7a562 + 3afbfdb commit 42096ca

17 files changed

Lines changed: 189 additions & 17 deletions

reference/opt/shaders/asm/frag/loop-header-to-continue.asm.frag

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,19 @@ layout(location = 0) out vec4 _entryPointOutput;
2222

2323
void main()
2424
{
25+
vec2 _45 = vec2(0.0, _8.CB1.TextureSize.w);
2526
vec4 _49 = texture(SPIRV_Cross_CombinedmapTexturemapSampler, IN_uv);
2627
float _50 = _49.y;
28+
float _53 = clamp(_50 * 0.06399999558925628662109375, 7.999999797903001308441162109375e-05, 0.008000000379979610443115234375);
2729
float _55;
2830
float _58;
2931
_55 = 0.0;
3032
_58 = 0.0;
3133
for (int _60 = -3; _60 <= 3; )
3234
{
3335
float _64 = float(_60);
34-
vec4 _72 = texture(SPIRV_Cross_CombinedmapTexturemapSampler, IN_uv + (vec2(0.0, _8.CB1.TextureSize.w) * _64));
35-
float _78 = exp(((-_64) * _64) * 0.2222220003604888916015625) * float(abs(_72.y - _50) < clamp(_50 * 0.06399999558925628662109375, 7.999999797903001308441162109375e-05, 0.008000000379979610443115234375));
36+
vec4 _72 = texture(SPIRV_Cross_CombinedmapTexturemapSampler, IN_uv + (_45 * _64));
37+
float _78 = exp(((-_64) * _64) * 0.2222220003604888916015625) * float(abs(_72.y - _50) < _53);
3638
_55 += (_72.x * _78);
3739
_58 += _78;
3840
_60++;
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#version 310 es
2+
precision mediump float;
3+
precision highp int;
4+
5+
layout(binding = 1, std140) uniform Count
6+
{
7+
float count;
8+
} _44;
9+
10+
layout(binding = 0) uniform mediump sampler2D tex;
11+
12+
layout(location = 0) in highp vec4 vertex;
13+
layout(location = 0) out vec4 fragColor;
14+
15+
void main()
16+
{
17+
highp float _24 = 1.0 / float(textureSize(tex, 0).x);
18+
highp float _34 = dFdx(vertex.x);
19+
float _62;
20+
_62 = 0.0;
21+
for (float _61 = 0.0; _61 < _44.count; )
22+
{
23+
_62 += (_24 * _34);
24+
_61 += 1.0;
25+
continue;
26+
}
27+
fragColor = vec4(_62);
28+
}
29+

reference/shaders-msl/asm/comp/variable-pointers-2.asm.comp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ kernel void main0(device foo& buf [[buffer(0)]], constant bar& cb [[buffer(1)]],
3333
{
3434
device foo* _46 = select_buffer(buf, cb);
3535
device foo* _45 = _46;
36+
thread uint3* _47 = select_input(gl_GlobalInvocationID, gl_LocalInvocationID, cb);
3637
device foo* _48 = _45;
3738
device int* _52;
3839
device int* _55;
@@ -46,7 +47,7 @@ kernel void main0(device foo& buf [[buffer(0)]], constant bar& cb [[buffer(1)]],
4647
_58 = *_55;
4748
if (_57 != _58)
4849
{
49-
int _66 = (_57 + _58) + int((*select_input(gl_GlobalInvocationID, gl_LocalInvocationID, cb)).x);
50+
int _66 = (_57 + _58) + int((*_47).x);
5051
*_52 = _66;
5152
*_55 = _66;
5253
_52 = &_52[1u];

reference/shaders-no-opt/asm/frag/inliner-dominator-inside-loop.asm.frag

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ void main()
125125
_151.UvStuds = IN_UvStuds_EdgeDistance2.xy;
126126
SurfaceInput _156 = _151;
127127
_156.UvStuds.y = (fract(_151.UvStuds.y) + IN_studIndex) * 0.25;
128+
float _160 = clamp(1.0 - (_146.View_Depth.w * 0.00333332992158830165863037109375), 0.0, 1.0);
128129
float _163 = _146.View_Depth.w * _19.CB0.RefractionBias_FadeDistance_GlowFactor.y;
129130
float _165 = clamp(1.0 - _163, 0.0, 1.0);
130131
vec2 _166 = IN_Uv_EdgeDistance1.xy * 1.0;
@@ -141,7 +142,7 @@ void main()
141142
else
142143
{
143144
float _180 = 1.0 / (1.0 - 0.0);
144-
_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)));
145+
_193 = mix(texture(SPIRV_Cross_CombinedDiffuseMapTextureDiffuseMapSampler, _166 * 0.25), texture(SPIRV_Cross_CombinedDiffuseMapTextureDiffuseMapSampler, _166), vec4(clamp((_160 * _180) - (0.0 * _180), 0.0, 1.0)));
145146
break;
146147
}
147148
_193 = _192;
@@ -167,12 +168,14 @@ void main()
167168
vec2 _223 = vec2(1.0);
168169
vec2 _224 = (_220.wy * 2.0) - _223;
169170
vec3 _232 = vec3(_224, sqrt(clamp(1.0 + dot(-_224, _224), 0.0, 1.0)));
170-
vec2 _240 = (texture(SPIRV_Cross_CombinedNormalDetailMapTextureNormalDetailMapSampler, _166 * 0.0).wy * 2.0) - _223;
171+
vec4 _237 = texture(SPIRV_Cross_CombinedNormalDetailMapTextureNormalDetailMapSampler, _166 * 0.0);
172+
vec2 _240 = (_237.wy * 2.0) - _223;
171173
vec2 _252 = _232.xy + (vec3(_240, sqrt(clamp(1.0 + dot(-_240, _240), 0.0, 1.0))).xy * 0.0);
172174
vec3 _253 = vec3(_252.x, _252.y, _232.z);
173175
vec2 _255 = _253.xy * _165;
174176
vec3 _256 = vec3(_255.x, _255.y, _253.z);
175-
vec3 _271 = ((IN_Color.xyz * (_193 * 1.0).xyz) * (1.0 + (_256.x * 0.300000011920928955078125))) * (texture(SPIRV_Cross_CombinedStudsMapTextureStudsMapSampler, _156.UvStuds).x * 2.0);
177+
vec4 _268 = texture(SPIRV_Cross_CombinedStudsMapTextureStudsMapSampler, _156.UvStuds);
178+
vec3 _271 = ((IN_Color.xyz * (_193 * 1.0).xyz) * (1.0 + (_256.x * 0.300000011920928955078125))) * (_268.x * 2.0);
176179
vec4 _298;
177180
for (;;)
178181
{

reference/shaders-ue4-no-opt/asm/frag/accesschain-invalid-expression.asm.invalid.frag

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -216,11 +216,14 @@ fragment main0_out main0(main0_in in [[stage_in]], constant type_View& View [[bu
216216
{
217217
main0_out out = {};
218218
float4 _177 = float4((((gl_FragCoord.xy - View.View_ViewRectMin.xy) * View.View_ViewSizeAndInvSize.zw) - float2(0.5)) * float2(2.0, -2.0), _138, 1.0) * float4(gl_FragCoord.w);
219+
float3 _179 = in.in_var_TEXCOORD8.xyz - float3(View.View_PreViewTranslation);
219220
float3 _181 = normalize(-in.in_var_TEXCOORD8.xyz);
220-
float2 _190 = (Material_Texture2D_0.sample(Material_Texture2D_0Sampler, (in.in_var_TEXCOORD0 * float2(10.0))).xy * float2(2.0)) - float2(1.0);
221+
float4 _187 = Material_Texture2D_0.sample(Material_Texture2D_0Sampler, (in.in_var_TEXCOORD0 * float2(10.0)));
222+
float2 _190 = (_187.xy * float2(2.0)) - float2(1.0);
221223
float3 _206 = normalize(float3x3(float3(1.0, 0.0, 0.0), float3(0.0, 1.0, 0.0), float3(0.0, 0.0, 1.0)) * (((float4(_190, sqrt(fast::clamp(1.0 - dot(_190, _190), 0.0, 1.0)), 1.0).xyz * float3(0.300000011920928955078125, 0.300000011920928955078125, 1.0)) * float3(View.View_NormalOverrideParameter.w)) + View.View_NormalOverrideParameter.xyz));
222224
float _208 = dot(_206, _181);
223-
float _219 = mix(0.4000000059604644775390625, 1.0, Material_Texture2D_1.sample(Material_Texture2D_1Sampler, (in.in_var_TEXCOORD0 * float2(20.0))).x);
225+
float4 _217 = Material_Texture2D_1.sample(Material_Texture2D_1Sampler, (in.in_var_TEXCOORD0 * float2(20.0)));
226+
float _219 = mix(0.4000000059604644775390625, 1.0, _217.x);
224227
float4 _223 = Material_Texture2D_1.sample(Material_Texture2D_1Sampler, (in.in_var_TEXCOORD0 * float2(5.0)));
225228
float _224 = _177.w;
226229
float _228 = fast::min(fast::max((_224 - 24.0) * 0.000666666659526526927947998046875, 0.0), 1.0);
@@ -328,7 +331,7 @@ fragment main0_out main0(main0_in in [[stage_in]], constant type_View& View [[bu
328331
{
329332
if (_491 < _Globals.NumDynamicPointLights)
330333
{
331-
float3 _501 = _Globals.LightPositionAndInvRadius[_491].xyz - (in.in_var_TEXCOORD8.xyz - float3(View.View_PreViewTranslation));
334+
float3 _501 = _Globals.LightPositionAndInvRadius[_491].xyz - _179;
332335
float _502 = dot(_501, _501);
333336
float3 _505 = _501 * float3(rsqrt(_502));
334337
_507 = normalize(_181 + _505);

reference/shaders-ue4-no-opt/asm/frag/array-copy-error.asm.invalid.frag

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -274,8 +274,11 @@ fragment main0_out main0(main0_in in [[stage_in]], constant type_View& View [[bu
274274
float3 _151 = normalize(-_148);
275275
float3 _152 = _151 * float3x3(in.in_var_TEXCOORD10_centroid.xyz, cross(in.in_var_TEXCOORD11_centroid.xyz, in.in_var_TEXCOORD10_centroid.xyz) * float3(in.in_var_TEXCOORD11_centroid.w), in.in_var_TEXCOORD11_centroid.xyz);
276276
float _170 = mix(Material.Material_ScalarExpressions[0].y, Material.Material_ScalarExpressions[0].z, fast::min(fast::max(abs(dot(_151, in.in_var_TEXCOORD11_centroid.xyz)), 0.0), 1.0));
277+
float _171 = floor(_170);
277278
float _172 = 1.0 / _170;
278279
float2 _174 = (float2(Material.Material_ScalarExpressions[0].x) * ((_152.xy * float2(-1.0)) / float2(_152.z))) * float2(_172);
280+
float2 _175 = dfdx(float2(in_var_TEXCOORD0[0].x, in_var_TEXCOORD0[0].y));
281+
float2 _176 = dfdy(float2(in_var_TEXCOORD0[0].x, in_var_TEXCOORD0[0].y));
279282
float _180_copy;
280283
float2 _183;
281284
_183 = float2(0.0);
@@ -288,9 +291,9 @@ fragment main0_out main0(main0_in in [[stage_in]], constant type_View& View [[bu
288291
float _189 = 1.0;
289292
for (;;)
290293
{
291-
if (float(_185) < (floor(_170) + 2.0))
294+
if (float(_185) < (_171 + 2.0))
292295
{
293-
_188 = Material_Texture2D_0.sample(Material_Texture2D_0Sampler, (float2(in_var_TEXCOORD0[0].x, in_var_TEXCOORD0[0].y) + _183), gradient2d(dfdx(float2(in_var_TEXCOORD0[0].x, in_var_TEXCOORD0[0].y)), dfdy(float2(in_var_TEXCOORD0[0].x, in_var_TEXCOORD0[0].y)))).y;
296+
_188 = Material_Texture2D_0.sample(Material_Texture2D_0Sampler, (float2(in_var_TEXCOORD0[0].x, in_var_TEXCOORD0[0].y) + _183), gradient2d(_175, _176)).y;
294297
if (_180 < _188)
295298
{
296299
float _201 = _188 - _180;

reference/shaders-ue4-no-opt/asm/frag/phi-variable-declaration.asm.invalid.frag

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -274,8 +274,11 @@ fragment main0_out main0(main0_in in [[stage_in]], constant type_View& View [[bu
274274
float3 _151 = normalize(-_148);
275275
float3 _152 = _151 * float3x3(in.in_var_TEXCOORD10_centroid.xyz, cross(in.in_var_TEXCOORD11_centroid.xyz, in.in_var_TEXCOORD10_centroid.xyz) * float3(in.in_var_TEXCOORD11_centroid.w), in.in_var_TEXCOORD11_centroid.xyz);
276276
float _170 = mix(Material.Material_ScalarExpressions[0].y, Material.Material_ScalarExpressions[0].z, fast::min(fast::max(abs(dot(_151, in.in_var_TEXCOORD11_centroid.xyz)), 0.0), 1.0));
277+
float _171 = floor(_170);
277278
float _172 = 1.0 / _170;
278279
float2 _174 = (float2(Material.Material_ScalarExpressions[0].x) * ((_152.xy * float2(-1.0)) / float2(_152.z))) * float2(_172);
280+
float2 _175 = dfdx(float2(in_var_TEXCOORD0[0].x, in_var_TEXCOORD0[0].y));
281+
float2 _176 = dfdy(float2(in_var_TEXCOORD0[0].x, in_var_TEXCOORD0[0].y));
279282
float _180_copy;
280283
float2 _183;
281284
_183 = float2(0.0);
@@ -288,9 +291,9 @@ fragment main0_out main0(main0_in in [[stage_in]], constant type_View& View [[bu
288291
float _189 = 1.0;
289292
for (;;)
290293
{
291-
if (float(_185) < (floor(_170) + 2.0))
294+
if (float(_185) < (_171 + 2.0))
292295
{
293-
_188 = Material_Texture2D_0.sample(Material_Texture2D_0Sampler, (float2(in_var_TEXCOORD0[0].x, in_var_TEXCOORD0[0].y) + _183), gradient2d(dfdx(float2(in_var_TEXCOORD0[0].x, in_var_TEXCOORD0[0].y)), dfdy(float2(in_var_TEXCOORD0[0].x, in_var_TEXCOORD0[0].y)))).y;
296+
_188 = Material_Texture2D_0.sample(Material_Texture2D_0Sampler, (float2(in_var_TEXCOORD0[0].x, in_var_TEXCOORD0[0].y) + _183), gradient2d(_175, _176)).y;
294297
if (_180 < _188)
295298
{
296299
float _201 = _188 - _180;

reference/shaders-ue4/asm/frag/texture-atomics.asm.frag

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ fragment main0_out main0(main0_in in [[stage_in]], const device type_StructuredB
8484
uint _107 = _103 + 1u;
8585
if (all(CulledObjectBoxBounds._m0[_107].xy > _96.xy) && all(CulledObjectBoxBounds._m0[_103].xyz < _102))
8686
{
87+
float3 _121 = float3(0.5) * (CulledObjectBoxBounds._m0[_103].xyz + CulledObjectBoxBounds._m0[_107].xyz);
8788
float _122 = _96.x;
8889
float _123 = _96.y;
8990
spvUnsafeArray<float3, 8> _73;
@@ -103,7 +104,7 @@ fragment main0_out main0(main0_in in [[stage_in]], const device type_StructuredB
103104
_158 = float3(500000.0);
104105
for (int _160 = 0; _160 < 8; )
105106
{
106-
float3 _166 = _73[_160] - (float3(0.5) * (CulledObjectBoxBounds._m0[_103].xyz + CulledObjectBoxBounds._m0[_107].xyz));
107+
float3 _166 = _73[_160] - _121;
107108
float3 _170 = float3(dot(_166, CulledObjectBoxBounds._m0[_103 + 2u].xyz), dot(_166, CulledObjectBoxBounds._m0[_103 + 3u].xyz), dot(_166, CulledObjectBoxBounds._m0[_103 + 4u].xyz));
108109
_155 = fast::max(_155, _170);
109110
_158 = fast::min(_158, _170);

reference/shaders-ue4/asm/frag/texture-atomics.asm.graphics-robust-access.frag

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ fragment main0_out main0(main0_in in [[stage_in]], const device type_StructuredB
8484
uint _107 = _103 + 1u;
8585
if (all(CulledObjectBoxBounds._m0[_107].xy > _96.xy) && all(CulledObjectBoxBounds._m0[_103].xyz < _102))
8686
{
87+
float3 _121 = float3(0.5) * (CulledObjectBoxBounds._m0[_103].xyz + CulledObjectBoxBounds._m0[_107].xyz);
8788
float _122 = _96.x;
8889
float _123 = _96.y;
8990
spvUnsafeArray<float3, 8> _73;
@@ -103,7 +104,7 @@ fragment main0_out main0(main0_in in [[stage_in]], const device type_StructuredB
103104
_158 = float3(500000.0);
104105
for (int _160 = 0; _160 < 8; )
105106
{
106-
float3 _166 = _73[_160] - (float3(0.5) * (CulledObjectBoxBounds._m0[_103].xyz + CulledObjectBoxBounds._m0[_107].xyz));
107+
float3 _166 = _73[_160] - _121;
107108
float3 _170 = float3(dot(_166, CulledObjectBoxBounds._m0[_103 + 2u].xyz), dot(_166, CulledObjectBoxBounds._m0[_103 + 3u].xyz), dot(_166, CulledObjectBoxBounds._m0[_103 + 4u].xyz));
108109
_155 = fast::max(_155, _170);
109110
_158 = fast::min(_158, _170);

reference/shaders/asm/frag/loop-header-to-continue.asm.frag

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,19 @@ layout(location = 0) out vec4 _entryPointOutput;
2222

2323
void main()
2424
{
25+
vec2 _45 = vec2(0.0, _8.CB1.TextureSize.w);
2526
vec4 _49 = texture(SPIRV_Cross_CombinedmapTexturemapSampler, IN_uv);
2627
float _50 = _49.y;
28+
float _53 = clamp((_50 * 80.0) * 0.0007999999797903001308441162109375, 7.999999797903001308441162109375e-05, 0.008000000379979610443115234375);
2729
float _55;
2830
float _58;
2931
_55 = 0.0;
3032
_58 = 0.0;
3133
for (int _60 = -3; _60 <= 3; )
3234
{
3335
float _64 = float(_60);
34-
vec4 _72 = texture(SPIRV_Cross_CombinedmapTexturemapSampler, IN_uv + (vec2(0.0, _8.CB1.TextureSize.w) * _64));
35-
float _78 = exp(((-_64) * _64) * 0.2222220003604888916015625) * float(abs(_72.y - _50) < clamp((_50 * 80.0) * 0.0007999999797903001308441162109375, 7.999999797903001308441162109375e-05, 0.008000000379979610443115234375));
36+
vec4 _72 = texture(SPIRV_Cross_CombinedmapTexturemapSampler, IN_uv + (_45 * _64));
37+
float _78 = exp(((-_64) * _64) * 0.2222220003604888916015625) * float(abs(_72.y - _50) < _53);
3638
_55 += (_72.x * _78);
3739
_58 += _78;
3840
_60++;

0 commit comments

Comments
 (0)