diff --git a/tests/in/glsl/expressions.frag b/tests/in/glsl/expressions.frag index e9f3c59f80..e1d9fe191b 100644 --- a/tests/in/glsl/expressions.frag +++ b/tests/in/glsl/expressions.frag @@ -151,6 +151,12 @@ void indexConstantNonConstantIndex(int i) { const uvec4 a = strct.array[i]; } +void testSwizzleWrites(vec3 a) { + a.zxy.xy = vec2(3.0, 4.0); + a.rg *= 5.0; + a.zy++; +} + out vec4 o_color; void main() { privatePointer(global); diff --git a/tests/in/glsl/functions_call.frag b/tests/in/glsl/functions_call.frag new file mode 100644 index 0000000000..74d9c2673d --- /dev/null +++ b/tests/in/glsl/functions_call.frag @@ -0,0 +1,21 @@ +#version 450 + +void swizzleCallee(inout vec2 a) {} + +void swizzleCaller(vec3 a) { + swizzleCallee(a.xz); +} + +void outImplicitCastCallee(out uint a) {} + +void outImplicitCastCaller(float a) { + outImplicitCastCallee(a); +} + +void swizzleImplicitCastCallee(out uvec2 a) {} + +void swizzleImplicitCastCaller(vec3 a) { + swizzleImplicitCastCallee(a.xz); +} + +void main() {} diff --git a/tests/in/glsl/swizzle_write.frag b/tests/in/glsl/swizzle_write.frag deleted file mode 100644 index c5a165590a..0000000000 --- a/tests/in/glsl/swizzle_write.frag +++ /dev/null @@ -1,11 +0,0 @@ -#version 450 - -void foo(inout vec2 p) {} - -void main() { - vec3 x = vec3(2.0); - x.zxy.xy = vec2(3.0, 4.0); - x.rg *= 5.0; - x.zy++; - foo(x.xz); -} diff --git a/tests/out/wgsl/expressions-frag.wgsl b/tests/out/wgsl/expressions-frag.wgsl index 0cad7bf314..0910cdfe29 100644 --- a/tests/out/wgsl/expressions-frag.wgsl +++ b/tests/out/wgsl/expressions-frag.wgsl @@ -414,6 +414,30 @@ fn indexConstantNonConstantIndex(i: i32) { return; } +fn testSwizzleWrites(a_27: vec3) { + var a_28: vec3; + + _ = (&global_1.a); + a_28 = a_27; + let _e6 = a_28; + _ = _e6.zxy; + _ = _e6.zx; + let _e11 = vec2(3.0, 4.0); + a_28.z = _e11.x; + a_28.x = _e11.y; + let _e16 = a_28; + _ = _e16.xy; + let _e18 = a_28; + let _e21 = (_e18.xy * 5.0); + a_28.x = _e21.x; + a_28.y = _e21.y; + let _e26 = a_28; + let _e30 = (_e26.zy + vec2(1.0)); + a_28.z = _e30.x; + a_28.y = _e30.y; + return; +} + fn main_1() { var local_6: f32; diff --git a/tests/out/wgsl/functions_call-frag.wgsl b/tests/out/wgsl/functions_call-frag.wgsl new file mode 100644 index 0000000000..25615db22e --- /dev/null +++ b/tests/out/wgsl/functions_call-frag.wgsl @@ -0,0 +1,68 @@ +fn swizzleCallee(a: ptr>) { + return; +} + +fn swizzleCaller(a_1: vec3) { + var a_2: vec3; + var local: vec2; + + a_2 = a_1; + let _e2 = a_2; + _ = _e2.xz; + let _e4 = a_2; + local = _e4.xz; + swizzleCallee((&local)); + let _e11 = local.x; + a_2.x = _e11; + let _e12 = local.y; + a_2.z = _e12; + return; +} + +fn outImplicitCastCallee(a_3: ptr) { + return; +} + +fn outImplicitCastCaller(a_4: f32) { + var a_5: f32; + var local_1: u32; + + a_5 = a_4; + _ = a_5; + _ = a_5; + outImplicitCastCallee((&local_1)); + let _e5 = local_1; + a_5 = f32(_e5); + return; +} + +fn swizzleImplicitCastCallee(a_6: ptr>) { + return; +} + +fn swizzleImplicitCastCaller(a_7: vec3) { + var a_8: vec3; + var local_2: vec2; + + a_8 = a_7; + let _e2 = a_8; + _ = _e2.xz; + let _e4 = a_8; + _ = _e4.xz; + swizzleImplicitCastCallee((&local_2)); + let _e11 = local_2.x; + a_8.x = f32(_e11); + let _e13 = local_2.y; + a_8.z = f32(_e13); + return; +} + +fn main_1() { + return; +} + +@fragment +fn main() { + main_1(); + return; +} diff --git a/tests/out/wgsl/swizzle_write-frag.wgsl b/tests/out/wgsl/swizzle_write-frag.wgsl deleted file mode 100644 index e6b29a58ec..0000000000 --- a/tests/out/wgsl/swizzle_write-frag.wgsl +++ /dev/null @@ -1,42 +0,0 @@ -fn foo(p: ptr>) { - return; -} - -fn main_1() { - var x: vec3; - var local: vec2; - - x = vec3(2.0); - let _e3 = x; - _ = _e3.zxy; - _ = _e3.zx; - let _e8 = vec2(3.0, 4.0); - x.z = _e8.x; - x.x = _e8.y; - let _e13 = x; - _ = _e13.xy; - let _e15 = x; - let _e18 = (_e15.xy * 5.0); - x.x = _e18.x; - x.y = _e18.y; - let _e23 = x; - let _e27 = (_e23.zy + vec2(1.0)); - x.z = _e27.x; - x.y = _e27.y; - let _e32 = x; - _ = _e32.xz; - let _e34 = x; - local = _e34.xz; - foo((&local)); - let _e41 = local.x; - x.x = _e41; - let _e42 = local.y; - x.z = _e42; - return; -} - -@fragment -fn main() { - main_1(); - return; -}