diff --git a/naga/src/front/wgsl/lower/construction.rs b/naga/src/front/wgsl/lower/construction.rs index 5e58c93892..2cd030dadc 100644 --- a/naga/src/front/wgsl/lower/construction.rs +++ b/naga/src/front/wgsl/lower/construction.rs @@ -346,6 +346,10 @@ impl<'source, 'temp> Lowerer<'source, 'temp> { automatic_conversion_consensus(&components, ctx).map_err(|index| { Error::InvalidConstructorComponentType(spans[index], index as i32) })?; + // We actually only accept floating-point elements. + let consensus_scalar = consensus_scalar + .automatic_conversion_combine(crate::Scalar::ABSTRACT_FLOAT) + .unwrap_or(consensus_scalar); ctx.convert_slice_to_common_scalar(&mut components, consensus_scalar)?; let vec_ty = ctx.ensure_type_exists(consensus_scalar.to_inner_vector(rows)); diff --git a/naga/tests/in/abstract-types.wgsl b/naga/tests/in/abstract-types.wgsl index f9f718bf01..0cf20b5d26 100644 --- a/naga/tests/in/abstract-types.wgsl +++ b/naga/tests/in/abstract-types.wgsl @@ -27,6 +27,10 @@ const xmfpaiafaiai: mat2x2 = mat2x2(1, 2.0, 3, 4); const xmfpaiaiafai: mat2x2 = mat2x2(1, 2, 3.0, 4); const xmfpaiaiaiaf: mat2x2 = mat2x2(1, 2, 3, 4.0); +const imfpaiaiaiai = mat2x2(1, 2, 3, 4); +const imfpafaiaiai = mat2x2(1.0, 2, 3, 4); +const imfpafafafaf = mat2x2(1.0, 2.0, 3.0, 4.0); + const ivispai = vec2(1); const ivfspaf = vec2(1.0); const ivis_ai = vec2(1); diff --git a/naga/tests/out/msl/abstract-types.msl b/naga/tests/out/msl/abstract-types.msl index a9c89f7a9c..af4de25cc6 100644 --- a/naga/tests/out/msl/abstract-types.msl +++ b/naga/tests/out/msl/abstract-types.msl @@ -23,6 +23,9 @@ constant metal::float2x2 xmfpafaiaiai = metal::float2x2(metal::float2(1.0, 2.0), constant metal::float2x2 xmfpaiafaiai = metal::float2x2(metal::float2(1.0, 2.0), metal::float2(3.0, 4.0)); constant metal::float2x2 xmfpaiaiafai = metal::float2x2(metal::float2(1.0, 2.0), metal::float2(3.0, 4.0)); constant metal::float2x2 xmfpaiaiaiaf = metal::float2x2(metal::float2(1.0, 2.0), metal::float2(3.0, 4.0)); +constant metal::float2x2 imfpaiaiaiai = metal::float2x2(metal::float2(1.0, 2.0), metal::float2(3.0, 4.0)); +constant metal::float2x2 imfpafaiaiai = metal::float2x2(metal::float2(1.0, 2.0), metal::float2(3.0, 4.0)); +constant metal::float2x2 imfpafafafaf = metal::float2x2(metal::float2(1.0, 2.0), metal::float2(3.0, 4.0)); constant metal::int2 ivispai = metal::int2(1); constant metal::float2 ivfspaf = metal::float2(1.0); constant metal::int2 ivis_ai = metal::int2(1); diff --git a/naga/tests/out/wgsl/abstract-types.wgsl b/naga/tests/out/wgsl/abstract-types.wgsl index 4096f9ff02..538be44df7 100644 --- a/naga/tests/out/wgsl/abstract-types.wgsl +++ b/naga/tests/out/wgsl/abstract-types.wgsl @@ -15,6 +15,9 @@ const xmfpafaiaiai: mat2x2 = mat2x2(vec2(1.0, 2.0), vec2(3.0 const xmfpaiafaiai: mat2x2 = mat2x2(vec2(1.0, 2.0), vec2(3.0, 4.0)); const xmfpaiaiafai: mat2x2 = mat2x2(vec2(1.0, 2.0), vec2(3.0, 4.0)); const xmfpaiaiaiaf: mat2x2 = mat2x2(vec2(1.0, 2.0), vec2(3.0, 4.0)); +const imfpaiaiaiai: mat2x2 = mat2x2(vec2(1.0, 2.0), vec2(3.0, 4.0)); +const imfpafaiaiai: mat2x2 = mat2x2(vec2(1.0, 2.0), vec2(3.0, 4.0)); +const imfpafafafaf: mat2x2 = mat2x2(vec2(1.0, 2.0), vec2(3.0, 4.0)); const ivispai: vec2 = vec2(1); const ivfspaf: vec2 = vec2(1.0); const ivis_ai: vec2 = vec2(1);