diff --git a/src/front/wgsl/lower/construction.rs b/src/front/wgsl/lower/construction.rs index ec3a338706..43025d0247 100644 --- a/src/front/wgsl/lower/construction.rs +++ b/src/front/wgsl/lower/construction.rs @@ -239,20 +239,16 @@ impl<'source, 'temp> Lowerer<'source, 'temp> { ( Components::One { component, - ty_inner: - &crate::TypeInner::Vector { - size: src_size, - kind: src_kind, - .. - }, + ty_inner: &crate::TypeInner::Vector { size: src_size, .. }, .. }, ConcreteConstructor::PartialVector { size: dst_size }, - ) if dst_size == src_size => crate::Expression::As { - expr: component, - kind: src_kind, - convert: None, - }, + ) if dst_size == src_size => { + // This is a trivial conversion: the sizes match, and a Partial + // constructor doesn't specify a scalar type, so nothing can + // possibly happen. + return Ok(component); + } // Matrix conversion (matrix -> matrix) ( @@ -296,11 +292,12 @@ impl<'source, 'temp> Lowerer<'source, 'temp> { columns: dst_columns, rows: dst_rows, }, - ) if dst_columns == src_columns && dst_rows == src_rows => crate::Expression::As { - expr: component, - kind: crate::ScalarKind::Float, - convert: None, - }, + ) if dst_columns == src_columns && dst_rows == src_rows => { + // This is a trivial conversion: the sizes match, and a Partial + // constructor doesn't specify a scalar type, so nothing can + // possibly happen. + return Ok(component); + } // Vector constructor (splat) - infer type ( diff --git a/tests/out/glsl/constructors.main.Compute.glsl b/tests/out/glsl/constructors.main.Compute.glsl index 8ef0a60ba7..4b4b0e71a4 100644 --- a/tests/out/glsl/constructors.main.Compute.glsl +++ b/tests/out/glsl/constructors.main.Compute.glsl @@ -34,7 +34,5 @@ void main() { bool ic0_ = bool(false); uvec2 ic4_ = uvec2(0u, 0u); mat2x3 ic5_ = mat2x3(vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0)); - uvec2 ic6_ = uvec2(0u); - mat2x3 ic7_ = mat2x3(0.0); } diff --git a/tests/out/hlsl/constructors.hlsl b/tests/out/hlsl/constructors.hlsl index 52de162f44..232494fa21 100644 --- a/tests/out/hlsl/constructors.hlsl +++ b/tests/out/hlsl/constructors.hlsl @@ -52,6 +52,4 @@ void main() bool ic0_ = bool((bool)0); uint2 ic4_ = uint2(0u, 0u); float2x3 ic5_ = float2x3(float3(0.0, 0.0, 0.0), float3(0.0, 0.0, 0.0)); - uint2 ic6_ = asuint((uint2)0); - float2x3 ic7_ = asfloat((float2x3)0); } diff --git a/tests/out/msl/constructors.msl b/tests/out/msl/constructors.msl index b3a0ecd896..b29e2468b0 100644 --- a/tests/out/msl/constructors.msl +++ b/tests/out/msl/constructors.msl @@ -42,6 +42,4 @@ kernel void main_( bool ic0_ = static_cast(bool {}); metal::uint2 ic4_ = metal::uint2(0u, 0u); metal::float2x3 ic5_ = metal::float2x3(metal::float3(0.0, 0.0, 0.0), metal::float3(0.0, 0.0, 0.0)); - metal::uint2 ic6_ = as_type(metal::uint2 {}); - metal::float2x3 ic7_ = metal::float2x3(metal::float2x3 {}); } diff --git a/tests/out/spv/constructors.spvasm b/tests/out/spv/constructors.spvasm index e8e2e25957..1a481aa95e 100644 --- a/tests/out/spv/constructors.spvasm +++ b/tests/out/spv/constructors.spvasm @@ -1,7 +1,7 @@ ; SPIR-V ; Version: 1.1 ; Generator: rspirv -; Bound: 70 +; Bound: 68 OpCapability Shader %1 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 @@ -79,6 +79,5 @@ OpDecorate %17 ArrayStride 4 OpBranch %66 %66 = OpLabel OpStore %63 %47 -%69 = OpCopyObject %20 %62 OpReturn OpFunctionEnd \ No newline at end of file diff --git a/tests/out/wgsl/constructors.wgsl b/tests/out/wgsl/constructors.wgsl index f15bcb6c8d..a52fb00217 100644 --- a/tests/out/wgsl/constructors.wgsl +++ b/tests/out/wgsl/constructors.wgsl @@ -29,6 +29,4 @@ fn main() { let ic0_ = bool(bool()); let ic4_ = vec2(0u, 0u); let ic5_ = mat2x3(vec3(0.0, 0.0, 0.0), vec3(0.0, 0.0, 0.0)); - let ic6_ = bitcast>(vec2()); - let ic7_ = mat2x3(mat2x3()); }