writer/msl: Fix swizzling on packed vectors
Metal 1.x does not support swizzling on packed_vec types.
Use array-index for single element selection (permitted on LHS and RHS of assignment)
Cast the packed_vec to a vec for multiple element swizzles (not permitted as the LHS of an assignment).
Fixed: tint:1249
Change-Id: I70cbb0c22a935b06b3905d24484bdc2edfb95fc2
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/67060
Commit-Queue: Ben Clayton <bclayton@google.com>
Kokoro: Ben Clayton <bclayton@google.com>
Reviewed-by: James Price <jrprice@google.com>
diff --git a/docs/origin-trial-changes.md b/docs/origin-trial-changes.md
index bb96497..4e577a3 100644
--- a/docs/origin-trial-changes.md
+++ b/docs/origin-trial-changes.md
@@ -8,6 +8,10 @@
* Deprecated texture builtin functions that accepted a `read` access controlled storage texture have been removed.
* Storage textures must now only use the `write` access control.
+### Fixes
+
+* Swizzling of `vec3` types in `storage` and `uniform` buffers has been fixed for Metal 1.x. [tint:1249](https://crbug.com/tint/1249)
+
## Changes for M95
### New Features
diff --git a/src/writer/msl/generator_impl.cc b/src/writer/msl/generator_impl.cc
index 2c90761..ecc63ca 100644
--- a/src/writer/msl/generator_impl.cc
+++ b/src/writer/msl/generator_impl.cc
@@ -1953,28 +1953,55 @@
bool GeneratorImpl::EmitMemberAccessor(
std::ostream& out,
const ast::MemberAccessorExpression* expr) {
- bool paren_lhs =
- !expr->structure
- ->IsAnyOf<ast::ArrayAccessorExpression, ast::CallExpression,
- ast::IdentifierExpression, ast::MemberAccessorExpression,
- ast::TypeConstructorExpression>();
- if (paren_lhs) {
- out << "(";
- }
- if (!EmitExpression(out, expr->structure)) {
- return false;
- }
- if (paren_lhs) {
- out << ")";
- }
+ auto write_lhs = [&] {
+ bool paren_lhs =
+ !expr->structure
+ ->IsAnyOf<ast::ArrayAccessorExpression, ast::CallExpression,
+ ast::IdentifierExpression, ast::MemberAccessorExpression,
+ ast::TypeConstructorExpression>();
+ if (paren_lhs) {
+ out << "(";
+ }
+ if (!EmitExpression(out, expr->structure)) {
+ return false;
+ }
+ if (paren_lhs) {
+ out << ")";
+ }
+ return true;
+ };
- out << ".";
+ auto& sem = program_->Sem();
- // Swizzles get written out directly
- if (program_->Sem().Get(expr)->Is<sem::Swizzle>()) {
- out << program_->Symbols().NameFor(expr->member->symbol);
- } else if (!EmitExpression(out, expr->member)) {
- return false;
+ if (auto* swizzle = sem.Get(expr)->As<sem::Swizzle>()) {
+ // Metal 1.x does not support swizzling of packed vector types.
+ // For single element swizzles, we can use the index operator.
+ // For multi-element swizzles, we need to cast to a regular vector type
+ // first. Note that we do not currently allow assignments to swizzles, so
+ // the casting which will convert the l-value to r-value is fine.
+ if (swizzle->Indices().size() == 1) {
+ if (!write_lhs()) {
+ return false;
+ }
+ out << "[" << swizzle->Indices()[0] << "]";
+ } else {
+ if (!EmitType(out, sem.Get(expr->structure)->Type()->UnwrapRef(), "")) {
+ return false;
+ }
+ out << "(";
+ if (!write_lhs()) {
+ return false;
+ }
+ out << ")." << program_->Symbols().NameFor(expr->member->symbol);
+ }
+ } else {
+ if (!write_lhs()) {
+ return false;
+ }
+ out << ".";
+ if (!EmitExpression(out, expr->member)) {
+ return false;
+ }
}
return true;
diff --git a/src/writer/msl/generator_impl_function_test.cc b/src/writer/msl/generator_impl_function_test.cc
index af27b79..c384e5f 100644
--- a/src/writer/msl/generator_impl_function_test.cc
+++ b/src/writer/msl/generator_impl_function_test.cc
@@ -147,7 +147,7 @@
};
float frag_main_inner(float4 coord) {
- return coord.x;
+ return coord[0];
}
fragment tint_symbol frag_main(float4 coord [[position]]) {
@@ -457,7 +457,7 @@
};
float sub_func(constant UBO& ubo, float param) {
- return ubo.coord.x;
+ return ubo.coord[0];
}
fragment void frag_main(constant UBO& ubo [[buffer(0)]]) {
diff --git a/src/writer/msl/generator_impl_member_accessor_test.cc b/src/writer/msl/generator_impl_member_accessor_test.cc
index 9623a2b..b511cab 100644
--- a/src/writer/msl/generator_impl_member_accessor_test.cc
+++ b/src/writer/msl/generator_impl_member_accessor_test.cc
@@ -43,7 +43,7 @@
GeneratorImpl& gen = Build();
std::stringstream out;
ASSERT_TRUE(gen.EmitExpression(out, expr)) << gen.error();
- EXPECT_EQ(out.str(), "my_vec.xyz");
+ EXPECT_EQ(out.str(), "float4(my_vec).xyz");
}
TEST_F(MslGeneratorImplTest, EmitExpression_MemberAccessor_Swizzle_gbr) {
@@ -55,7 +55,7 @@
GeneratorImpl& gen = Build();
std::stringstream out;
ASSERT_TRUE(gen.EmitExpression(out, expr)) << gen.error();
- EXPECT_EQ(out.str(), "my_vec.gbr");
+ EXPECT_EQ(out.str(), "float4(my_vec).gbr");
}
} // namespace
diff --git a/test/access/let/matrix.spvasm.expected.msl b/test/access/let/matrix.spvasm.expected.msl
index 2123a38..74a4b93 100644
--- a/test/access/let/matrix.spvasm.expected.msl
+++ b/test/access/let/matrix.spvasm.expected.msl
@@ -2,7 +2,7 @@
using namespace metal;
void main_1() {
- float const x_24 = float3x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f))[1u].y;
+ float const x_24 = float3x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f))[1u][1];
return;
}
diff --git a/test/access/let/vector.spvasm.expected.msl b/test/access/let/vector.spvasm.expected.msl
index d644226..354e9b1 100644
--- a/test/access/let/vector.spvasm.expected.msl
+++ b/test/access/let/vector.spvasm.expected.msl
@@ -2,9 +2,9 @@
using namespace metal;
void main_1() {
- float const x_11 = float3(1.0f, 2.0f, 3.0f).y;
- float2 const x_13 = float2(float3(1.0f, 2.0f, 3.0f).x, float3(1.0f, 2.0f, 3.0f).z);
- float3 const x_14 = float3(float3(1.0f, 2.0f, 3.0f).x, float3(1.0f, 2.0f, 3.0f).z, float3(1.0f, 2.0f, 3.0f).y);
+ float const x_11 = float3(1.0f, 2.0f, 3.0f)[1];
+ float2 const x_13 = float2(float3(1.0f, 2.0f, 3.0f)[0], float3(1.0f, 2.0f, 3.0f)[2]);
+ float3 const x_14 = float3(float3(1.0f, 2.0f, 3.0f)[0], float3(1.0f, 2.0f, 3.0f)[2], float3(1.0f, 2.0f, 3.0f)[1]);
return;
}
diff --git a/test/access/let/vector.wgsl.expected.msl b/test/access/let/vector.wgsl.expected.msl
index e690077..13a9b75 100644
--- a/test/access/let/vector.wgsl.expected.msl
+++ b/test/access/let/vector.wgsl.expected.msl
@@ -3,9 +3,9 @@
using namespace metal;
kernel void tint_symbol() {
float3 const v = float3(1.0f, 2.0f, 3.0f);
- float const scalar = v.y;
- float2 const swizzle2 = v.xz;
- float3 const swizzle3 = v.xzy;
+ float const scalar = v[1];
+ float2 const swizzle2 = float3(v).xz;
+ float3 const swizzle3 = float3(v).xzy;
return;
}
diff --git a/test/access/var/matrix.spvasm.expected.msl b/test/access/var/matrix.spvasm.expected.msl
index e22abd0..ae11058 100644
--- a/test/access/var/matrix.spvasm.expected.msl
+++ b/test/access/var/matrix.spvasm.expected.msl
@@ -4,7 +4,7 @@
void main_1() {
float3x3 m = float3x3(float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f));
float3 const x_15 = m[1];
- float const x_16 = x_15.y;
+ float const x_16 = x_15[1];
return;
}
diff --git a/test/access/var/vector.spvasm.expected.msl b/test/access/var/vector.spvasm.expected.msl
index a0bb9e4..a6963f9 100644
--- a/test/access/var/vector.spvasm.expected.msl
+++ b/test/access/var/vector.spvasm.expected.msl
@@ -3,11 +3,11 @@
using namespace metal;
void main_1() {
float3 v = float3(0.0f, 0.0f, 0.0f);
- float const x_14 = v.y;
+ float const x_14 = v[1];
float3 const x_16 = v;
- float2 const x_17 = float2(x_16.x, x_16.z);
+ float2 const x_17 = float2(x_16[0], x_16[2]);
float3 const x_18 = v;
- float3 const x_19 = float3(x_18.x, x_18.z, x_18.y);
+ float3 const x_19 = float3(x_18[0], x_18[2], x_18[1]);
return;
}
diff --git a/test/access/var/vector.wgsl.expected.msl b/test/access/var/vector.wgsl.expected.msl
index 542eae7..e965ea7 100644
--- a/test/access/var/vector.wgsl.expected.msl
+++ b/test/access/var/vector.wgsl.expected.msl
@@ -3,9 +3,9 @@
using namespace metal;
kernel void tint_symbol() {
float3 v = 0.0f;
- float const scalar = v.y;
- float2 const swizzle2 = v.xz;
- float3 const swizzle3 = v.xzy;
+ float const scalar = v[1];
+ float2 const swizzle2 = float3(v).xz;
+ float3 const swizzle3 = float3(v).xzy;
return;
}
diff --git a/test/bug/dawn/947.wgsl.expected.msl b/test/bug/dawn/947.wgsl.expected.msl
index 11bf563..ff00746 100644
--- a/test/bug/dawn/947.wgsl.expected.msl
+++ b/test/bug/dawn/947.wgsl.expected.msl
@@ -27,7 +27,7 @@
tint_array_wrapper texcoord = {.arr={float2(-0.5f, 0.0f), float2(1.5f, 0.0f), float2(0.5f, 2.0f)}};
VertexOutputs output = {};
output.position = float4(((texcoord.arr[VertexIndex] * 2.0f) - float2(1.0f, 1.0f)), 0.0f, 1.0f);
- bool flipY = (uniforms.u_scale.y < 0.0f);
+ bool flipY = (uniforms.u_scale[1] < 0.0f);
if (flipY) {
output.texcoords = ((((texcoord.arr[VertexIndex] * uniforms.u_scale) + uniforms.u_offset) * float2(1.0f, -1.0f)) + float2(0.0f, 1.0f));
} else {
diff --git a/test/bug/tint/1046.wgsl.expected.msl b/test/bug/tint/1046.wgsl.expected.msl
index 5f5c846..ac5baa1 100644
--- a/test/bug/tint/1046.wgsl.expected.msl
+++ b/test/bug/tint/1046.wgsl.expected.msl
@@ -42,7 +42,7 @@
} else {
if ((uniforms.color_source == 1u)) {
color = tint_symbol.normal;
- color.a = 1.0f;
+ color[3] = 1.0f;
} else {
if ((uniforms.color_source == 2u)) {
color = uniforms.color;
diff --git a/test/bug/tint/1088.spvasm.expected.msl b/test/bug/tint/1088.spvasm.expected.msl
index 6010645..5a11505 100644
--- a/test/bug/tint/1088.spvasm.expected.msl
+++ b/test/bug/tint/1088.spvasm.expected.msl
@@ -36,24 +36,24 @@
float4 q = 0.0f;
float3 p = 0.0f;
float3 const x_13 = *(tint_symbol_5);
- q = float4(x_13.x, x_13.y, x_13.z, 1.0f);
+ q = float4(x_13[0], x_13[1], x_13[2], 1.0f);
float4 const x_21 = q;
- p = float3(x_21.x, x_21.y, x_21.z);
- float const x_27 = p.x;
+ p = float3(x_21[0], x_21[1], x_21[2]);
+ float const x_27 = p[0];
float const x_41 = x_14.test.arr[0].el;
- float const x_45 = (*(tint_symbol_5)).y;
+ float const x_45 = (*(tint_symbol_5))[1];
float const x_49 = x_14.time;
- p.x = (x_27 + sin(((x_41 * x_45) + x_49)));
- float const x_55 = p.y;
+ p[0] = (x_27 + sin(((x_41 * x_45) + x_49)));
+ float const x_55 = p[1];
float const x_57 = x_14.time;
- p.y = (x_55 + sin((x_57 + 4.0f)));
+ p[1] = (x_55 + sin((x_57 + 4.0f)));
float4x4 const x_69 = x_14.worldViewProjection;
float3 const x_70 = p;
- *(tint_symbol_6) = (x_69 * float4(x_70.x, x_70.y, x_70.z, 1.0f));
+ *(tint_symbol_6) = (x_69 * float4(x_70[0], x_70[1], x_70[2], 1.0f));
float2 const x_83 = *(tint_symbol_7);
*(tint_symbol_8) = x_83;
- float const x_87 = (*(tint_symbol_6)).y;
- (*(tint_symbol_6)).y = (x_87 * -1.0f);
+ float const x_87 = (*(tint_symbol_6))[1];
+ (*(tint_symbol_6))[1] = (x_87 * -1.0f);
return;
}
diff --git a/test/bug/tint/1113.wgsl.expected.msl b/test/bug/tint/1113.wgsl.expected.msl
index 663d47f..52cc00c 100644
--- a/test/bug/tint/1113.wgsl.expected.msl
+++ b/test/bug/tint/1113.wgsl.expected.msl
@@ -53,20 +53,20 @@
};
float3 toVoxelPos(constant Uniforms& uniforms, float3 position) {
- float3 bbMin = float3(uniforms.bbMin.x, uniforms.bbMin.y, uniforms.bbMin.z);
- float3 bbMax = float3(uniforms.bbMax.x, uniforms.bbMax.y, uniforms.bbMax.z);
+ float3 bbMin = float3(uniforms.bbMin[0], uniforms.bbMin[1], uniforms.bbMin[2]);
+ float3 bbMax = float3(uniforms.bbMax[0], uniforms.bbMax[1], uniforms.bbMax[2]);
float3 bbSize = (bbMax - bbMin);
- float cubeSize = fmax(fmax(bbSize.x, bbSize.y), bbSize.z);
+ float cubeSize = fmax(fmax(bbSize[0], bbSize[1]), bbSize[2]);
float gridSize = float(uniforms.gridSize);
- float gx = ((gridSize * (position.x - uniforms.bbMin.x)) / cubeSize);
- float gy = ((gridSize * (position.y - uniforms.bbMin.y)) / cubeSize);
- float gz = ((gridSize * (position.z - uniforms.bbMin.z)) / cubeSize);
+ float gx = ((gridSize * (position[0] - uniforms.bbMin[0])) / cubeSize);
+ float gy = ((gridSize * (position[1] - uniforms.bbMin[1])) / cubeSize);
+ float gz = ((gridSize * (position[2] - uniforms.bbMin[2])) / cubeSize);
return float3(gx, gy, gz);
}
uint toIndex1D(uint gridSize, float3 voxelPos) {
uint3 icoord = uint3(voxelPos);
- return ((icoord.x + (gridSize * icoord.y)) + ((gridSize * gridSize) * icoord.z));
+ return ((icoord[0] + (gridSize * icoord[1])) + ((gridSize * gridSize) * icoord[2]));
}
uint3 toIndex3D(uint gridSize, uint index) {
@@ -91,7 +91,7 @@
}
void main_count_inner(constant Uniforms& uniforms, device Dbg& dbg, device AU32s& counters, device U32s& indices, device F32s& positions, device AI32s& LUT, uint3 GlobalInvocationID) {
- uint triangleIndex = GlobalInvocationID.x;
+ uint triangleIndex = GlobalInvocationID[0];
if ((triangleIndex >= uniforms.numTriangles)) {
return;
}
@@ -108,9 +108,9 @@
uint acefg = atomic_fetch_add_explicit(&(counters.values[voxelIndex]), 1u, memory_order_relaxed);
if ((triangleIndex == 0u)) {
dbg.value0 = uniforms.gridSize;
- dbg.value_f32_0 = center.x;
- dbg.value_f32_1 = center.y;
- dbg.value_f32_2 = center.z;
+ dbg.value_f32_0 = center[0];
+ dbg.value_f32_1 = center[1];
+ dbg.value_f32_2 = center[2];
}
}
@@ -120,7 +120,7 @@
}
void main_create_lut_inner(constant Uniforms& uniforms, device Dbg& dbg, device AU32s& counters, device U32s& indices, device F32s& positions, device AI32s& LUT, uint3 GlobalInvocationID) {
- uint voxelIndex = GlobalInvocationID.x;
+ uint voxelIndex = GlobalInvocationID[0];
doIgnore(uniforms, dbg, counters, indices, positions, LUT);
uint maxVoxels = ((uniforms.gridSize * uniforms.gridSize) * uniforms.gridSize);
if ((voxelIndex >= maxVoxels)) {
@@ -140,7 +140,7 @@
}
void main_sort_triangles_inner(constant Uniforms& uniforms, device Dbg& dbg, device AU32s& counters, device U32s& indices, device F32s& positions, device AI32s& LUT, uint3 GlobalInvocationID) {
- uint triangleIndex = GlobalInvocationID.x;
+ uint triangleIndex = GlobalInvocationID[0];
doIgnore(uniforms, dbg, counters, indices, positions, LUT);
if ((triangleIndex >= uniforms.numTriangles)) {
return;
diff --git a/test/bug/tint/1121.wgsl.expected.msl b/test/bug/tint/1121.wgsl.expected.msl
index c7eb13c..9592e5a 100644
--- a/test/bug/tint/1121.wgsl.expected.msl
+++ b/test/bug/tint/1121.wgsl.expected.msl
@@ -53,20 +53,20 @@
};
void tint_symbol_inner(constant Config& config, constant Uniforms& uniforms, device LightsBuffer& lightsBuffer, device Tiles& tileLightId, uint3 GlobalInvocationID) {
- uint index = GlobalInvocationID.x;
+ uint index = GlobalInvocationID[0];
if ((index >= config.numLights)) {
return;
}
- lightsBuffer.lights[index].position.y = ((lightsBuffer.lights[index].position.y - 0.100000001f) + (0.001f * (float(index) - (64.0f * floor((float(index) / 64.0f))))));
- if ((lightsBuffer.lights[index].position.y < uniforms.min.y)) {
- lightsBuffer.lights[index].position.y = uniforms.max.y;
+ lightsBuffer.lights[index].position[1] = ((lightsBuffer.lights[index].position[1] - 0.100000001f) + (0.001f * (float(index) - (64.0f * floor((float(index) / 64.0f))))));
+ if ((lightsBuffer.lights[index].position[1] < uniforms.min[1])) {
+ lightsBuffer.lights[index].position[1] = uniforms.max[1];
}
float4x4 M = uniforms.projectionMatrix;
float viewNear = (-(M[3][2]) / (-1.0f + M[2][2]));
float viewFar = (-(M[3][2]) / (1.0f + M[2][2]));
float4 lightPos = lightsBuffer.lights[index].position;
lightPos = (uniforms.viewMatrix * lightPos);
- lightPos = (lightPos / lightPos.w);
+ lightPos = (lightPos / lightPos[3]);
float lightRadius = lightsBuffer.lights[index].radius;
float4 boxMin = (lightPos - float4(float3(lightRadius), 0.0f));
float4 boxMax = (lightPos + float4(float3(lightRadius), 0.0f));
@@ -79,33 +79,33 @@
for(int y_1 = 0; (y_1 < TILE_COUNT_Y); y_1 = as_type<int>((as_type<uint>(y_1) + as_type<uint>(1)))) {
for(int x_1 = 0; (x_1 < TILE_COUNT_X); x_1 = as_type<int>((as_type<uint>(x_1) + as_type<uint>(1)))) {
int2 tilePixel0Idx = int2(as_type<int>((as_type<uint>(x_1) * as_type<uint>(TILE_SIZE))), as_type<int>((as_type<uint>(y_1) * as_type<uint>(TILE_SIZE))));
- float2 floorCoord = (((2.0f * float2(tilePixel0Idx)) / uniforms.fullScreenSize.xy) - float2(1.0f));
- float2 ceilCoord = (((2.0f * float2(as_type<int2>((as_type<uint2>(tilePixel0Idx) + as_type<uint2>(int2(TILE_SIZE)))))) / uniforms.fullScreenSize.xy) - float2(1.0f));
- float2 viewFloorCoord = float2((((-(viewNear) * floorCoord.x) - (M[2][0] * viewNear)) / M[0][0]), (((-(viewNear) * floorCoord.y) - (M[2][1] * viewNear)) / M[1][1]));
- float2 viewCeilCoord = float2((((-(viewNear) * ceilCoord.x) - (M[2][0] * viewNear)) / M[0][0]), (((-(viewNear) * ceilCoord.y) - (M[2][1] * viewNear)) / M[1][1]));
- frustumPlanes.arr[0] = float4(1.0f, 0.0f, (-(viewFloorCoord.x) / viewNear), 0.0f);
- frustumPlanes.arr[1] = float4(-1.0f, 0.0f, (viewCeilCoord.x / viewNear), 0.0f);
- frustumPlanes.arr[2] = float4(0.0f, 1.0f, (-(viewFloorCoord.y) / viewNear), 0.0f);
- frustumPlanes.arr[3] = float4(0.0f, -1.0f, (viewCeilCoord.y / viewNear), 0.0f);
+ float2 floorCoord = (((2.0f * float2(tilePixel0Idx)) / float4(uniforms.fullScreenSize).xy) - float2(1.0f));
+ float2 ceilCoord = (((2.0f * float2(as_type<int2>((as_type<uint2>(tilePixel0Idx) + as_type<uint2>(int2(TILE_SIZE)))))) / float4(uniforms.fullScreenSize).xy) - float2(1.0f));
+ float2 viewFloorCoord = float2((((-(viewNear) * floorCoord[0]) - (M[2][0] * viewNear)) / M[0][0]), (((-(viewNear) * floorCoord[1]) - (M[2][1] * viewNear)) / M[1][1]));
+ float2 viewCeilCoord = float2((((-(viewNear) * ceilCoord[0]) - (M[2][0] * viewNear)) / M[0][0]), (((-(viewNear) * ceilCoord[1]) - (M[2][1] * viewNear)) / M[1][1]));
+ frustumPlanes.arr[0] = float4(1.0f, 0.0f, (-(viewFloorCoord[0]) / viewNear), 0.0f);
+ frustumPlanes.arr[1] = float4(-1.0f, 0.0f, (viewCeilCoord[0] / viewNear), 0.0f);
+ frustumPlanes.arr[2] = float4(0.0f, 1.0f, (-(viewFloorCoord[1]) / viewNear), 0.0f);
+ frustumPlanes.arr[3] = float4(0.0f, -1.0f, (viewCeilCoord[1] / viewNear), 0.0f);
float dp = 0.0f;
for(uint i = 0u; (i < 6u); i = (i + 1u)) {
float4 p = 0.0f;
- if ((frustumPlanes.arr[i].x > 0.0f)) {
- p.x = boxMax.x;
+ if ((frustumPlanes.arr[i][0] > 0.0f)) {
+ p[0] = boxMax[0];
} else {
- p.x = boxMin.x;
+ p[0] = boxMin[0];
}
- if ((frustumPlanes.arr[i].y > 0.0f)) {
- p.y = boxMax.y;
+ if ((frustumPlanes.arr[i][1] > 0.0f)) {
+ p[1] = boxMax[1];
} else {
- p.y = boxMin.y;
+ p[1] = boxMin[1];
}
- if ((frustumPlanes.arr[i].z > 0.0f)) {
- p.z = boxMax.z;
+ if ((frustumPlanes.arr[i][2] > 0.0f)) {
+ p[2] = boxMax[2];
} else {
- p.z = boxMin.z;
+ p[2] = boxMin[2];
}
- p.w = 1.0f;
+ p[3] = 1.0f;
dp = (dp + fmin(0.0f, dot(p, frustumPlanes.arr[i])));
}
if ((dp >= 0.0f)) {
@@ -117,7 +117,7 @@
if ((offset >= config.numTileLightSlot)) {
continue;
}
- tileLightId.data.arr[tileId].lightId.arr[offset] = GlobalInvocationID.x;
+ tileLightId.data.arr[tileId].lightId.arr[offset] = GlobalInvocationID[0];
}
}
}
diff --git a/test/bug/tint/219.spvasm.expected.msl b/test/bug/tint/219.spvasm.expected.msl
index 103a45b..8caf787 100644
--- a/test/bug/tint/219.spvasm.expected.msl
+++ b/test/bug/tint/219.spvasm.expected.msl
@@ -2,7 +2,7 @@
using namespace metal;
float x_200(thread float2* const x_201) {
- float const x_212 = (*(x_201)).x;
+ float const x_212 = (*(x_201))[0];
return x_212;
}
diff --git a/test/bug/tint/403.wgsl.expected.msl b/test/bug/tint/403.wgsl.expected.msl
index 9f88b26..8e87d26 100644
--- a/test/bug/tint/403.wgsl.expected.msl
+++ b/test/bug/tint/403.wgsl.expected.msl
@@ -23,7 +23,7 @@
indexable = tint_symbol_2;
float2 const x_51 = indexable.arr[x_46];
float2 const x_52 = (float2x2((x_23[0u] + x_28[0u]), (x_23[1u] + x_28[1u])) * x_51);
- return float4(x_52.x, x_52.y, 0.0f, 1.0f);
+ return float4(x_52[0], x_52[1], 0.0f, 1.0f);
}
vertex tint_symbol_1 tint_symbol(uint gl_VertexIndex [[vertex_id]], constant vertexUniformBuffer1& x_20 [[buffer(0)]], constant vertexUniformBuffer2& x_26 [[buffer(1)]]) {
diff --git a/test/bug/tint/413.spvasm.expected.msl b/test/bug/tint/413.spvasm.expected.msl
index 982307b..d62ec29 100644
--- a/test/bug/tint/413.spvasm.expected.msl
+++ b/test/bug/tint/413.spvasm.expected.msl
@@ -5,8 +5,8 @@
uint4 srcValue = 0u;
uint4 const x_18 = tint_symbol_1.read(uint2(int2(0, 0)), 0);
srcValue = x_18;
- uint const x_22 = srcValue.x;
- srcValue.x = (x_22 + as_type<uint>(1));
+ uint const x_22 = srcValue[0];
+ srcValue[0] = (x_22 + as_type<uint>(1));
uint4 const x_27 = srcValue;
tint_symbol_2.write(x_27, uint2(int2(0, 0)));
return;
diff --git a/test/bug/tint/453.wgsl.expected.msl b/test/bug/tint/453.wgsl.expected.msl
index 728fc2f..d51ef16 100644
--- a/test/bug/tint/453.wgsl.expected.msl
+++ b/test/bug/tint/453.wgsl.expected.msl
@@ -5,10 +5,10 @@
uint4 srcValue = 0u;
uint4 const x_22 = tint_symbol_1.read(uint2(int2(0, 0)), 0);
srcValue = x_22;
- uint const x_24 = srcValue.x;
+ uint const x_24 = srcValue[0];
uint const x_25 = (x_24 + 1u);
uint4 const x_27 = srcValue;
- tint_symbol_2.write(x_27.xxxx, uint2(int2(0, 0)));
+ tint_symbol_2.write(uint4(x_27).xxxx, uint2(int2(0, 0)));
return;
}
diff --git a/test/bug/tint/534.wgsl.expected.msl b/test/bug/tint/534.wgsl.expected.msl
index e294678..584bdc7 100644
--- a/test/bug/tint/534.wgsl.expected.msl
+++ b/test/bug/tint/534.wgsl.expected.msl
@@ -17,10 +17,10 @@
void tint_symbol_inner(constant Uniforms& uniforms, device OutputBuf& output, uint3 GlobalInvocationID, texture2d<float, access::sample> tint_symbol_1, texture2d<float, access::sample> tint_symbol_2) {
int2 size = int2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- int2 dstTexCoord = int2(GlobalInvocationID.xy);
+ int2 dstTexCoord = int2(uint3(GlobalInvocationID).xy);
int2 srcTexCoord = dstTexCoord;
if ((uniforms.dstTextureFlipY == 1u)) {
- srcTexCoord.y = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(size.y) - as_type<uint>(dstTexCoord.y)))) - as_type<uint>(1)));
+ srcTexCoord[1] = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(size[1]) - as_type<uint>(dstTexCoord[1])))) - as_type<uint>(1)));
}
float4 srcColor = tint_symbol_1.read(uint2(srcTexCoord), 0);
float4 dstColor = tint_symbol_2.read(uint2(dstTexCoord), 0);
@@ -31,7 +31,7 @@
srcColorBits[i] = ConvertToFp16FloatValue(srcColor[i]);
success = (success && (srcColorBits[i] == dstColorBits[i]));
}
- uint outputIndex = ((GlobalInvocationID.y * uint(size.x)) + GlobalInvocationID.x);
+ uint outputIndex = ((GlobalInvocationID[1] * uint(size[0])) + GlobalInvocationID[0]);
if (success) {
output.result[outputIndex] = uint(1);
} else {
diff --git a/test/bug/tint/744.wgsl.expected.msl b/test/bug/tint/744.wgsl.expected.msl
index 1bdfd21..1a3cffa 100644
--- a/test/bug/tint/744.wgsl.expected.msl
+++ b/test/bug/tint/744.wgsl.expected.msl
@@ -11,16 +11,16 @@
};
void tint_symbol_inner(constant Uniforms& uniforms, const device Matrix& firstMatrix, const device Matrix& secondMatrix, device Matrix& resultMatrix, uint3 global_id) {
- uint2 const resultCell = uint2(global_id.y, global_id.x);
- uint const dimInner = uniforms.aShape.y;
- uint const dimOutter = uniforms.outShape.y;
+ uint2 const resultCell = uint2(global_id[1], global_id[0]);
+ uint const dimInner = uniforms.aShape[1];
+ uint const dimOutter = uniforms.outShape[1];
uint result = 0u;
for(uint i = 0u; (i < dimInner); i = (i + 1u)) {
- uint const a = (i + (resultCell.x * dimInner));
- uint const b = (resultCell.y + (i * dimOutter));
+ uint const a = (i + (resultCell[0] * dimInner));
+ uint const b = (resultCell[1] + (i * dimOutter));
result = (result + (firstMatrix.numbers[a] * secondMatrix.numbers[b]));
}
- uint const index = (resultCell.y + (resultCell.x * dimOutter));
+ uint const index = (resultCell[1] + (resultCell[0] * dimOutter));
resultMatrix.numbers[index] = result;
}
diff --git a/test/bug/tint/749.spvasm.expected.msl b/test/bug/tint/749.spvasm.expected.msl
index dd020c9..7717716 100644
--- a/test/bug/tint/749.spvasm.expected.msl
+++ b/test/bug/tint/749.spvasm.expected.msl
@@ -22,7 +22,7 @@
int const x_932 = temp;
temp = 0;
temp = x_932;
- float3 const x_523 = float3(float3(1.0f, 2.0f, 3.0f).z, float3(1.0f, 2.0f, 3.0f).y, float3(1.0f, 2.0f, 3.0f).z);
+ float3 const x_523 = float3(float3(1.0f, 2.0f, 3.0f)[2], float3(1.0f, 2.0f, 3.0f)[1], float3(1.0f, 2.0f, 3.0f)[2]);
int const x_933 = *(i);
*(i) = 0;
*(i) = x_933;
@@ -30,7 +30,7 @@
int const x_934 = *(j);
*(j) = 0;
*(j) = x_934;
- float3 const x_524 = float3(x_523.y, x_523.x, x_523.y);
+ float3 const x_524 = float3(x_523[1], x_523[0], x_523[1]);
int const x_935 = temp;
temp = 0;
temp = x_935;
@@ -46,7 +46,7 @@
int const x_938 = *(j);
*(j) = 0;
*(j) = x_938;
- float3 const x_525 = float3(x_523.z, float3(1.0f, 2.0f, 3.0f).x, x_523.y);
+ float3 const x_525 = float3(x_523[2], float3(1.0f, 2.0f, 3.0f)[0], x_523[1]);
int const x_939 = *(i);
*(i) = 0;
*(i) = x_939;
@@ -58,7 +58,7 @@
int const x_941 = *(i);
*(i) = 0;
*(i) = x_941;
- float3 const x_526 = float3(x_525.x, x_525.z, x_525.z);
+ float3 const x_526 = float3(x_525[0], x_525[2], x_525[2]);
int const x_942 = (*(tint_symbol_81)).numbers.arr[x_30_save];
(*(tint_symbol_81)).numbers.arr[x_30_save] = 0;
(*(tint_symbol_81)).numbers.arr[x_30_save] = x_942;
@@ -69,16 +69,16 @@
QuicksortObject const tint_symbol_3 = {.numbers=tint_symbol_2};
*(tint_symbol_81) = tint_symbol_3;
*(tint_symbol_81) = x_943;
- float2 const x_527 = float2(x_526.x, x_526.x);
+ float2 const x_527 = float2(x_526[0], x_526[0]);
int const x_36_save = x_32;
- float3 const x_528 = float3(x_524.x, x_524.z, x_524.x);
+ float3 const x_528 = float3(x_524[0], x_524[2], x_524[0]);
(*(tint_symbol_81)).numbers.arr[x_36_save] = x_35;
QuicksortObject const x_944 = *(tint_symbol_81);
tint_array_wrapper const tint_symbol_4 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
QuicksortObject const tint_symbol_5 = {.numbers=tint_symbol_4};
*(tint_symbol_81) = tint_symbol_5;
*(tint_symbol_81) = x_944;
- float3 const x_529 = float3(x_526.y, x_526.z, x_526.x);
+ float3 const x_529 = float3(x_526[1], x_526[2], x_526[0]);
int const x_945 = *(i);
*(i) = 0;
*(i) = x_945;
@@ -86,7 +86,7 @@
int const x_946 = temp;
temp = 0;
temp = x_946;
- float2 const x_530 = float2(x_529.z, x_529.y);
+ float2 const x_530 = float2(x_529[2], x_529[1]);
int const x_947 = (*(tint_symbol_81)).numbers.arr[x_34_save];
(*(tint_symbol_81)).numbers.arr[x_34_save] = 0;
(*(tint_symbol_81)).numbers.arr[x_34_save] = x_947;
@@ -94,7 +94,7 @@
int const x_948 = *(j);
*(j) = 0;
*(j) = x_948;
- float3 const x_531 = float3(x_527.x, x_526.y, x_526.x);
+ float3 const x_531 = float3(x_527[0], x_526[1], x_526[0]);
int const x_949 = (*(tint_symbol_81)).numbers.arr[x_36_save];
(*(tint_symbol_81)).numbers.arr[x_36_save] = 0;
(*(tint_symbol_81)).numbers.arr[x_36_save] = x_949;
@@ -103,7 +103,7 @@
QuicksortObject const tint_symbol_7 = {.numbers=tint_symbol_6};
*(tint_symbol_81) = tint_symbol_7;
*(tint_symbol_81) = x_950;
- float3 const x_532 = float3(x_528.x, x_528.y, x_528.x);
+ float3 const x_532 = float3(x_528[0], x_528[1], x_528[0]);
int const x_951 = (*(tint_symbol_81)).numbers.arr[x_34_save];
(*(tint_symbol_81)).numbers.arr[x_34_save] = 0;
(*(tint_symbol_81)).numbers.arr[x_34_save] = x_951;
@@ -136,7 +136,7 @@
int const x_955 = param_3;
param_3 = 0;
param_3 = x_955;
- float3 const x_534 = float3(float3(1.0f, 2.0f, 3.0f).z, float3(1.0f, 2.0f, 3.0f).x, float3(1.0f, 2.0f, 3.0f).z);
+ float3 const x_534 = float3(float3(1.0f, 2.0f, 3.0f)[2], float3(1.0f, 2.0f, 3.0f)[0], float3(1.0f, 2.0f, 3.0f)[2]);
int const x_956 = param_1;
param_1 = 0;
param_1 = x_956;
@@ -148,13 +148,13 @@
int const x_958 = j_1;
j_1 = 0;
j_1 = x_958;
- float3 const x_535 = float3(x_534.y, x_534.z, x_534.y);
+ float3 const x_535 = float3(x_534[1], x_534[2], x_534[1]);
int const x_959 = *(l);
*(l) = 0;
*(l) = x_959;
i_1 = as_type<int>((as_type<uint>(x_45) - as_type<uint>(as_type<int>(1u))));
int const x_49 = *(l);
- float3 const x_536 = float3(x_534.x, x_534.z, x_535.x);
+ float3 const x_536 = float3(x_534[0], x_534[2], x_535[0]);
j_1 = 10;
QuicksortObject const x_960 = *(tint_symbol_82);
tint_array_wrapper const tint_symbol_8 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
@@ -172,7 +172,7 @@
int const x_963 = pivot;
pivot = 0;
pivot = x_963;
- x_537 = float2(float3(1.0f, 2.0f, 3.0f).y, float3(1.0f, 2.0f, 3.0f).z);
+ x_537 = float2(float3(1.0f, 2.0f, 3.0f)[1], float3(1.0f, 2.0f, 3.0f)[2]);
QuicksortObject const x_964 = *(tint_symbol_82);
tint_array_wrapper const tint_symbol_10 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
QuicksortObject const tint_symbol_11 = {.numbers=tint_symbol_10};
@@ -188,7 +188,7 @@
int const x_967 = j_1;
j_1 = 0;
j_1 = x_967;
- x_538 = float3(x_534.x, x_537.y, x_534.z);
+ x_538 = float3(x_534[0], x_537[1], x_534[2]);
int const x_968 = param;
param = 0;
param = x_968;
@@ -204,7 +204,7 @@
int const x_970 = *(h);
*(h) = 0;
*(h) = x_970;
- float3 const x_539 = float3(x_537.x, x_535.z, x_537.x);
+ float3 const x_539 = float3(x_537[0], x_535[2], x_537[0]);
int const x_971 = param_1;
param_1 = 0;
param_1 = x_971;
@@ -215,19 +215,19 @@
*(tint_symbol_82) = tint_symbol_13;
*(tint_symbol_82) = x_972;
int const x_63 = pivot;
- float2 const x_540 = float2(float3(1.0f, 2.0f, 3.0f).y, x_534.z);
+ float2 const x_540 = float2(float3(1.0f, 2.0f, 3.0f)[1], x_534[2]);
int const x_973 = i_1;
i_1 = 0;
i_1 = x_973;
int const x_974 = *(l);
*(l) = 0;
*(l) = x_974;
- float3 const x_541 = float3(x_534.y, x_534.x, x_534.y);
+ float3 const x_541 = float3(x_534[1], x_534[0], x_534[1]);
int const x_975 = pivot;
pivot = 0;
pivot = x_975;
if ((x_62 <= x_63)) {
- float3 const x_542 = float3(x_541.z, x_541.x, x_541.x);
+ float3 const x_542 = float3(x_541[2], x_541[0], x_541[0]);
int const x_976 = param_3;
param_3 = 0;
param_3 = x_976;
@@ -235,7 +235,7 @@
int const x_977 = pivot;
pivot = 0;
pivot = x_977;
- float2 const x_543 = float2(x_539.x, x_541.y);
+ float2 const x_543 = float2(x_539[0], x_541[1]);
int const x_978 = i_1;
i_1 = 0;
i_1 = x_978;
@@ -246,9 +246,9 @@
int const x_980 = *(l);
*(l) = 0;
*(l) = x_980;
- float3 const x_544 = float3(float3(1.0f, 2.0f, 3.0f).z, float3(1.0f, 2.0f, 3.0f).y, x_540.x);
+ float3 const x_544 = float3(float3(1.0f, 2.0f, 3.0f)[2], float3(1.0f, 2.0f, 3.0f)[1], x_540[0]);
int const x_70 = i_1;
- float2 const x_545 = float2(x_537.y, x_538.x);
+ float2 const x_545 = float2(x_537[1], x_538[0]);
int const x_981 = param;
param = 0;
param = x_981;
@@ -256,7 +256,7 @@
int const x_982 = param;
param = 0;
param = x_982;
- float2 const x_546 = float2(x_545.x, x_545.x);
+ float2 const x_546 = float2(x_545[0], x_545[0]);
int const x_983 = i_1;
i_1 = 0;
i_1 = x_983;
@@ -283,7 +283,7 @@
int const x_988 = *(h);
*(h) = 0;
*(h) = x_988;
- float3 const x_547 = float3(x_539.x, x_541.z, x_541.z);
+ float3 const x_547 = float3(x_539[0], x_541[2], x_541[2]);
int const x_989 = (*(tint_symbol_82)).numbers.arr[x_61_save];
(*(tint_symbol_82)).numbers.arr[x_61_save] = 0;
(*(tint_symbol_82)).numbers.arr[x_61_save] = x_989;
@@ -294,7 +294,7 @@
int const x_991 = param_1;
param_1 = 0;
param_1 = x_991;
- float3 const x_548 = float3(x_541.y, x_541.z, x_541.x);
+ float3 const x_548 = float3(x_541[1], x_541[2], x_541[0]);
int const x_992 = (*(tint_symbol_82)).numbers.arr[x_61_save];
(*(tint_symbol_82)).numbers.arr[x_61_save] = 0;
(*(tint_symbol_82)).numbers.arr[x_61_save] = x_992;
@@ -304,7 +304,7 @@
int const x_993 = (*(tint_symbol_82)).numbers.arr[x_42_save];
(*(tint_symbol_82)).numbers.arr[x_42_save] = 0;
(*(tint_symbol_82)).numbers.arr[x_42_save] = x_993;
- float2 const x_549 = float2(x_534.x, x_534.y);
+ float2 const x_549 = float2(x_534[0], x_534[1]);
QuicksortObject const x_994 = *(tint_symbol_82);
tint_array_wrapper const tint_symbol_16 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
QuicksortObject const tint_symbol_17 = {.numbers=tint_symbol_16};
@@ -321,17 +321,17 @@
int const x_997 = j_1;
j_1 = 0;
j_1 = x_997;
- float2 const x_550 = float2(x_534.x, x_534.x);
+ float2 const x_550 = float2(x_534[0], x_534[0]);
int const x_998 = param_1;
param_1 = 0;
param_1 = x_998;
param_2 = x_79;
- float2 const x_551 = float2(x_534.y, x_536.x);
+ float2 const x_551 = float2(x_534[1], x_536[0]);
int const x_999 = pivot;
pivot = 0;
pivot = x_999;
int const x_81 = *(h);
- float2 const x_552 = float2(x_550.x, x_549.y);
+ float2 const x_552 = float2(x_550[0], x_549[1]);
int const x_1000 = *(h);
*(h) = 0;
*(h) = x_1000;
@@ -339,7 +339,7 @@
int const x_1001 = i_1;
i_1 = 0;
i_1 = x_1001;
- float2 const x_553 = float2(x_549.y, x_552.x);
+ float2 const x_553 = float2(x_549[1], x_552[0]);
int const x_1002 = *(h);
*(h) = 0;
*(h) = x_1002;
@@ -347,7 +347,7 @@
int const x_1003 = *(l);
*(l) = 0;
*(l) = x_1003;
- float2 const x_554 = float2(x_536.z, float3(1.0f, 2.0f, 3.0f).y);
+ float2 const x_554 = float2(x_536[2], float3(1.0f, 2.0f, 3.0f)[1]);
int const x_1004 = param_1;
param_1 = 0;
param_1 = x_1004;
@@ -355,7 +355,7 @@
int const x_1005 = param;
param = 0;
param = x_1005;
- float2 const x_555 = float2(x_534.y, x_534.x);
+ float2 const x_555 = float2(x_534[1], x_534[0]);
int const x_1006 = j_1;
j_1 = 0;
j_1 = x_1006;
@@ -379,7 +379,7 @@
tint_array_wrapper const tint_symbol_18 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
stack = tint_symbol_18;
stack = x_1008;
- float2 const x_556 = float2(float3(1.0f, 2.0f, 3.0f).y, float3(1.0f, 2.0f, 3.0f).y);
+ float2 const x_556 = float2(float3(1.0f, 2.0f, 3.0f)[1], float3(1.0f, 2.0f, 3.0f)[1]);
int const x_1009 = param_5;
param_5 = 0;
param_5 = x_1009;
@@ -388,7 +388,7 @@
p = 0;
p = x_1010;
int const x_93 = top;
- float2 const x_557 = float2(float3(1.0f, 2.0f, 3.0f).x, float3(1.0f, 2.0f, 3.0f).x);
+ float2 const x_557 = float2(float3(1.0f, 2.0f, 3.0f)[0], float3(1.0f, 2.0f, 3.0f)[0]);
int const x_1011 = p;
p = 0;
p = x_1011;
@@ -396,7 +396,7 @@
int const x_1012 = top;
top = 0;
top = x_1012;
- float2 const x_558 = float2(x_556.y, x_557.y);
+ float2 const x_558 = float2(x_556[1], x_557[1]);
int const x_1013 = param_4;
param_4 = 0;
param_4 = x_1013;
@@ -404,7 +404,7 @@
int const x_1014 = h_1;
h_1 = 0;
h_1 = x_1014;
- float3 const x_559 = float3(x_557.y, x_557.x, x_557.x);
+ float3 const x_559 = float3(x_557[1], x_557[0], x_557[0]);
int const x_1015 = param_4;
param_4 = 0;
param_4 = x_1015;
@@ -414,13 +414,13 @@
QuicksortObject const tint_symbol_20 = {.numbers=tint_symbol_19};
*(tint_symbol_83) = tint_symbol_20;
*(tint_symbol_83) = x_1016;
- float3 const x_560 = float3(x_559.y, x_559.x, x_557.x);
+ float3 const x_560 = float3(x_559[1], x_559[0], x_557[0]);
int const x_96_save = x_94;
tint_array_wrapper const x_1017 = stack;
tint_array_wrapper const tint_symbol_21 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
stack = tint_symbol_21;
stack = x_1017;
- float3 const x_561 = float3(x_556.y, x_556.y, x_556.y);
+ float3 const x_561 = float3(x_556[1], x_556[1], x_556[1]);
int const x_1018 = l_1;
l_1 = 0;
l_1 = 0;
@@ -432,7 +432,7 @@
int const x_1020 = param_4;
param_4 = 0;
param_4 = x_1020;
- float3 const x_562 = float3(float3(1.0f, 2.0f, 3.0f).z, x_558.y, float3(1.0f, 2.0f, 3.0f).y);
+ float3 const x_562 = float3(float3(1.0f, 2.0f, 3.0f)[2], x_558[1], float3(1.0f, 2.0f, 3.0f)[1]);
int const x_1021 = stack.arr[x_96_save];
stack.arr[x_96_save] = 0;
stack.arr[x_96_save] = x_1021;
@@ -440,7 +440,7 @@
int const x_1022 = stack.arr[x_96_save];
stack.arr[x_96_save] = 0;
stack.arr[x_96_save] = x_1022;
- float3 const x_563 = float3(x_559.x, x_559.z, x_556.y);
+ float3 const x_563 = float3(x_559[0], x_559[2], x_556[1]);
top = x_98;
int const x_1023 = param_4;
param_4 = 0;
@@ -449,7 +449,7 @@
int const x_1024 = param_4;
param_4 = 0;
param_4 = x_1024;
- float3 const x_564 = float3(x_558.x, x_561.x, x_558.y);
+ float3 const x_564 = float3(x_558[0], x_561[0], x_558[1]);
int const x_1025 = l_1;
l_1 = 0;
l_1 = x_1025;
@@ -457,13 +457,13 @@
int const x_1026 = param_5;
param_5 = 0;
param_5 = x_1026;
- float2 const x_565 = float2(x_564.z, x_564.z);
+ float2 const x_565 = float2(x_564[2], x_564[2]);
int const x_1027 = p;
p = 0;
p = x_1027;
stack.arr[x_100_save] = x_99;
while (true) {
- float3 const x_566 = float3(x_563.x, x_563.x, x_563.x);
+ float3 const x_566 = float3(x_563[0], x_563[0], x_563[0]);
int const x_1028 = h_1;
h_1 = 0;
h_1 = x_1028;
@@ -476,7 +476,7 @@
tint_array_wrapper const tint_symbol_23 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
stack = tint_symbol_23;
stack = x_1030;
- float2 const x_567 = float2(x_558.x, x_564.z);
+ float2 const x_567 = float2(x_558[0], x_564[2]);
int const x_1031 = param_4;
param_4 = 0;
param_4 = x_1031;
@@ -489,16 +489,16 @@
QuicksortObject const tint_symbol_25 = {.numbers=tint_symbol_24};
*(tint_symbol_83) = tint_symbol_25;
*(tint_symbol_83) = x_1032;
- float3 const x_568 = float3(x_559.y, x_559.x, x_563.y);
+ float3 const x_568 = float3(x_559[1], x_559[0], x_563[1]);
int const x_1033 = param_4;
param_4 = 0;
param_4 = x_1033;
int const x_108 = top;
- float3 const x_569 = float3(x_565.x, x_567.y, x_565.x);
+ float3 const x_569 = float3(x_565[0], x_567[1], x_565[0]);
int const x_1034 = h_1;
h_1 = 0;
h_1 = x_1034;
- float2 const x_570 = float2(x_556.x, x_556.x);
+ float2 const x_570 = float2(x_556[0], x_556[0]);
int const x_1035 = p;
p = 0;
p = x_1035;
@@ -515,7 +515,7 @@
tint_array_wrapper const tint_symbol_26 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
stack = tint_symbol_26;
stack = x_1038;
- float3 const x_571 = float3(x_559.y, x_559.x, x_564.y);
+ float3 const x_571 = float3(x_559[1], x_559[0], x_564[1]);
int const x_1039 = l_1;
l_1 = 0;
l_1 = x_1039;
@@ -524,7 +524,7 @@
tint_array_wrapper const tint_symbol_27 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
stack = tint_symbol_27;
stack = x_1040;
- float2 const x_572 = float2(x_562.y, x_561.y);
+ float2 const x_572 = float2(x_562[1], x_561[1]);
int const x_1041 = p;
p = 0;
p = x_1041;
@@ -535,17 +535,17 @@
int const x_1043 = stack.arr[x_100_save];
stack.arr[x_100_save] = 0;
stack.arr[x_100_save] = x_1043;
- float2 const x_573 = float2(float3(1.0f, 2.0f, 3.0f).y, float3(1.0f, 2.0f, 3.0f).z);
+ float2 const x_573 = float2(float3(1.0f, 2.0f, 3.0f)[1], float3(1.0f, 2.0f, 3.0f)[2]);
top = as_type<int>((as_type<uint>(x_112) - as_type<uint>(1)));
int const x_1044 = param_5;
param_5 = 0;
param_5 = x_1044;
- float3 const x_574 = float3(x_570.y, x_565.x, x_570.y);
+ float3 const x_574 = float3(x_570[1], x_565[0], x_570[1]);
int const x_1045 = h_1;
h_1 = 0;
h_1 = x_1045;
int const x_114_save = x_112;
- float2 const x_575 = float2(x_564.y, x_564.z);
+ float2 const x_575 = float2(x_564[1], x_564[2]);
int const x_1046 = stack.arr[x_100_save];
stack.arr[x_100_save] = 0;
stack.arr[x_100_save] = x_1046;
@@ -553,7 +553,7 @@
int const x_1047 = p;
p = 0;
p = x_1047;
- float3 const x_576 = float3(x_573.y, x_573.y, x_565.x);
+ float3 const x_576 = float3(x_573[1], x_573[1], x_565[0]);
int const x_1048 = param_5;
param_5 = 0;
param_5 = x_1048;
@@ -566,15 +566,15 @@
int const x_1050 = stack.arr[x_110_save];
stack.arr[x_110_save] = 0;
stack.arr[x_110_save] = x_1050;
- float2 const x_577 = float2(x_569.y, x_569.z);
+ float2 const x_577 = float2(x_569[1], x_569[2]);
int const x_120 = h_1;
- float2 const x_578 = float2(x_558.x, float3(1.0f, 2.0f, 3.0f).y);
+ float2 const x_578 = float2(x_558[0], float3(1.0f, 2.0f, 3.0f)[1]);
param_5 = x_120;
int const x_1051 = stack.arr[x_100_save];
stack.arr[x_100_save] = 0;
stack.arr[x_100_save] = x_1051;
int const x_121 = performPartition_i1_i1_(&(param_4), &(param_5), tint_symbol_83);
- float2 const x_579 = float2(x_567.x, x_568.x);
+ float2 const x_579 = float2(x_567[0], x_568[0]);
int const x_1052 = param_5;
param_5 = 0;
param_5 = x_1052;
@@ -586,7 +586,7 @@
int const x_1054 = h_1;
h_1 = 0;
h_1 = x_1054;
- float2 const x_580 = float2(x_568.y, x_568.y);
+ float2 const x_580 = float2(x_568[1], x_568[1]);
int const x_1055 = l_1;
l_1 = 0;
l_1 = x_1055;
@@ -600,7 +600,7 @@
int const x_1058 = h_1;
h_1 = 0;
h_1 = x_1058;
- float2 const x_582 = float2(x_567.y, x_573.x);
+ float2 const x_582 = float2(x_567[1], x_573[0]);
int const x_1059 = stack.arr[x_100_save];
stack.arr[x_100_save] = 0;
stack.arr[x_100_save] = x_1059;
@@ -609,7 +609,7 @@
param_4 = 0;
param_4 = x_1060;
int const x_128 = top;
- float2 const x_583 = float2(x_571.y, x_556.y);
+ float2 const x_583 = float2(x_571[1], x_556[1]);
int const x_1061 = stack.arr[x_100_save];
stack.arr[x_100_save] = 0;
stack.arr[x_100_save] = x_1061;
@@ -617,13 +617,13 @@
tint_array_wrapper const tint_symbol_28 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
stack = tint_symbol_28;
stack = x_1062;
- float2 const x_584 = float2(x_569.z, x_569.y);
- float3 const x_585 = float3(x_580.y, x_577.x, x_577.x);
+ float2 const x_584 = float2(x_569[2], x_569[1]);
+ float3 const x_585 = float3(x_580[1], x_577[0], x_577[0]);
int const x_130 = l_1;
int const x_1063 = stack.arr[x_114_save];
stack.arr[x_114_save] = 0;
stack.arr[x_114_save] = x_1063;
- float2 const x_586 = float2(x_564.x, x_585.x);
+ float2 const x_586 = float2(x_564[0], x_585[0]);
int const x_1064 = param_5;
param_5 = 0;
param_5 = x_1064;
@@ -631,7 +631,7 @@
int const x_1065 = stack.arr[x_110_save];
stack.arr[x_110_save] = 0;
stack.arr[x_110_save] = x_1065;
- float3 const x_587 = float3(x_566.y, x_566.y, x_563.x);
+ float3 const x_587 = float3(x_566[1], x_566[1], x_563[0]);
int const x_1066 = param_5;
param_5 = 0;
param_5 = x_1066;
@@ -640,7 +640,7 @@
int const x_1067 = stack.arr[x_100_save];
stack.arr[x_100_save] = 0;
stack.arr[x_100_save] = x_1067;
- float2 const x_588 = float2(x_575.y, x_575.x);
+ float2 const x_588 = float2(x_575[1], x_575[0]);
int const x_1068 = stack.arr[x_131_save];
stack.arr[x_131_save] = 0;
stack.arr[x_131_save] = x_1068;
@@ -648,7 +648,7 @@
int const x_1069 = stack.arr[x_100_save];
stack.arr[x_100_save] = 0;
stack.arr[x_100_save] = x_1069;
- float3 const x_589 = float3(x_576.z, x_588.y, x_576.z);
+ float3 const x_589 = float3(x_576[2], x_588[1], x_576[2]);
int const x_1070 = h_1;
h_1 = 0;
h_1 = x_1070;
@@ -658,7 +658,7 @@
stack = tint_symbol_29;
stack = x_1071;
int const x_134 = p;
- float2 const x_590 = float2(x_576.x, x_573.y);
+ float2 const x_590 = float2(x_576[0], x_573[1]);
int const x_1072 = stack.arr[x_114_save];
stack.arr[x_114_save] = 0;
stack.arr[x_114_save] = x_1072;
@@ -670,7 +670,7 @@
int const x_1074 = stack.arr[x_96_save];
stack.arr[x_96_save] = 0;
stack.arr[x_96_save] = x_1074;
- float2 const x_591 = float2(x_569.z, x_569.y);
+ float2 const x_591 = float2(x_569[2], x_569[1]);
int const x_1075 = stack.arr[x_136_save];
stack.arr[x_136_save] = 0;
stack.arr[x_136_save] = x_1075;
@@ -678,7 +678,7 @@
int const x_1076 = stack.arr[x_96_save];
stack.arr[x_96_save] = 0;
stack.arr[x_96_save] = x_1076;
- float2 const x_592 = float2(float3(1.0f, 2.0f, 3.0f).x, float3(1.0f, 2.0f, 3.0f).y);
+ float2 const x_592 = float2(float3(1.0f, 2.0f, 3.0f)[0], float3(1.0f, 2.0f, 3.0f)[1]);
QuicksortObject const x_1077 = *(tint_symbol_83);
tint_array_wrapper const tint_symbol_30 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
QuicksortObject const tint_symbol_31 = {.numbers=tint_symbol_30};
@@ -688,11 +688,11 @@
int const x_1078 = stack.arr[x_114_save];
stack.arr[x_114_save] = 0;
stack.arr[x_114_save] = x_1078;
- float3 const x_593 = float3(x_571.z, x_556.x, x_556.y);
+ float3 const x_593 = float3(x_571[2], x_556[0], x_556[1]);
int const x_1079 = p;
p = 0;
p = x_1079;
- float3 const x_594 = float3(x_563.z, x_563.x, x_575.x);
+ float3 const x_594 = float3(x_563[2], x_563[0], x_575[0]);
int const x_1080 = stack.arr[x_114_save];
stack.arr[x_114_save] = 0;
stack.arr[x_114_save] = x_1080;
@@ -700,7 +700,7 @@
int const x_1081 = top;
top = 0;
top = x_1081;
- float3 const x_595 = float3(x_560.z, x_568.x, x_560.x);
+ float3 const x_595 = float3(x_560[2], x_568[0], x_560[0]);
int const x_1082 = stack.arr[x_100_save];
stack.arr[x_100_save] = 0;
stack.arr[x_100_save] = x_1082;
@@ -711,7 +711,7 @@
int const x_1084 = stack.arr[x_114_save];
stack.arr[x_114_save] = 0;
stack.arr[x_114_save] = x_1084;
- float2 const x_596 = float2(x_592.y, x_582.x);
+ float2 const x_596 = float2(x_592[1], x_582[0]);
int const x_1085 = l_1;
l_1 = 0;
l_1 = x_1085;
@@ -719,7 +719,7 @@
int const x_1086 = stack.arr[x_114_save];
stack.arr[x_114_save] = 0;
stack.arr[x_114_save] = x_1086;
- float3 const x_597 = float3(x_562.y, x_560.y, x_560.y);
+ float3 const x_597 = float3(x_562[1], x_560[1], x_560[1]);
int const x_144 = as_type<int>((as_type<uint>(x_143) + as_type<uint>(1)));
int const x_1087 = param_5;
param_5 = 0;
@@ -732,11 +732,11 @@
int const x_1089 = param_5;
param_5 = 0;
param_5 = x_1089;
- float3 const x_599 = float3(x_560.z, x_560.x, x_568.x);
+ float3 const x_599 = float3(x_560[2], x_560[0], x_568[0]);
int const x_1090 = p;
p = 0;
p = x_1090;
- float3 const x_600 = float3(x_556.x, x_580.x, x_580.x);
+ float3 const x_600 = float3(x_556[0], x_580[0], x_580[0]);
int const x_1091 = stack.arr[x_100_save];
stack.arr[x_100_save] = 0;
stack.arr[x_100_save] = x_1091;
@@ -744,7 +744,7 @@
int const x_1092 = stack.arr[x_110_save];
stack.arr[x_110_save] = 0;
stack.arr[x_110_save] = x_1092;
- float2 const x_601 = float2(x_563.x, x_563.y);
+ float2 const x_601 = float2(x_563[0], x_563[1]);
stack.arr[x_147_save] = as_type<int>((1u + as_type<uint>(x_145)));
tint_array_wrapper const x_1093 = stack;
tint_array_wrapper const tint_symbol_32 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
@@ -754,7 +754,7 @@
int const x_1094 = stack.arr[x_114_save];
stack.arr[x_114_save] = 0;
stack.arr[x_114_save] = x_1094;
- float2 const x_602 = float2(x_565.y, x_599.y);
+ float2 const x_602 = float2(x_565[1], x_599[1]);
tint_array_wrapper const x_1095 = stack;
tint_array_wrapper const tint_symbol_33 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
stack = tint_symbol_33;
@@ -778,7 +778,7 @@
int const x_1100 = stack.arr[x_114_save];
stack.arr[x_114_save] = 0;
stack.arr[x_114_save] = x_1100;
- float3 const x_603 = float3(x_568.y, x_564.x, x_564.x);
+ float3 const x_603 = float3(x_568[1], x_564[0], x_564[0]);
int const x_1101 = l_1;
l_1 = 0;
l_1 = x_1101;
@@ -790,7 +790,7 @@
int const x_1103 = l_1;
l_1 = 0;
l_1 = x_1103;
- float2 const x_604 = float2(x_563.z, x_564.x);
+ float2 const x_604 = float2(x_563[2], x_564[0]);
QuicksortObject const x_1104 = *(tint_symbol_83);
tint_array_wrapper const tint_symbol_34 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
QuicksortObject const tint_symbol_35 = {.numbers=tint_symbol_34};
@@ -823,7 +823,7 @@
QuicksortObject const tint_symbol_39 = {.numbers=tint_symbol_38};
*(tint_symbol_84) = tint_symbol_39;
*(tint_symbol_84) = x_722;
- float2 const x_431 = float2(float3(1.0f, 2.0f, 3.0f).x, float3(1.0f, 2.0f, 3.0f).x);
+ float2 const x_431 = float2(float3(1.0f, 2.0f, 3.0f)[0], float3(1.0f, 2.0f, 3.0f)[0]);
int const x_158 = i_2;
float2 const x_723 = uv;
uv = float2(0.0f, 0.0f);
@@ -831,7 +831,7 @@
float3 const x_725 = color;
color = float3(0.0f, 0.0f, 0.0f);
color = x_725;
- float2 const x_432 = float2(x_431.y, x_431.y);
+ float2 const x_432 = float2(x_431[1], x_431[1]);
QuicksortObject const x_726 = *(tint_symbol_84);
tint_array_wrapper const tint_symbol_40 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
QuicksortObject const tint_symbol_41 = {.numbers=tint_symbol_40};
@@ -843,7 +843,7 @@
QuicksortObject const tint_symbol_43 = {.numbers=tint_symbol_42};
*(tint_symbol_84) = tint_symbol_43;
*(tint_symbol_84) = x_756;
- float2 const x_446 = float2(float2(0.0f, 0.0f).x, float2(0.0f, 0.0f).x);
+ float2 const x_446 = float2(float2(0.0f, 0.0f)[0], float2(0.0f, 0.0f)[0]);
int const x_757 = i_2;
i_2 = 0;
i_2 = x_757;
@@ -857,12 +857,12 @@
float2 const x_759 = uv;
uv = float2(0.0f, 0.0f);
uv = x_759;
- float2 const x_447 = float2(float2(0.0f, 0.0f).y, float2(0.0f, 0.0f).y);
+ float2 const x_447 = float2(float2(0.0f, 0.0f)[1], float2(0.0f, 0.0f)[1]);
float2 const x_760 = uv;
uv = float2(0.0f, 0.0f);
uv = x_760;
- float2 const x_185 = float2(x_184.x, x_184.y);
- float3 const x_448 = float3(x_185.y, x_446.y, x_446.y);
+ float2 const x_185 = float2(x_184[0], x_184[1]);
+ float3 const x_448 = float3(x_185[1], x_446[1], x_446[1]);
QuicksortObject const x_761 = *(tint_symbol_84);
tint_array_wrapper const tint_symbol_46 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
QuicksortObject const tint_symbol_47 = {.numbers=tint_symbol_46};
@@ -877,7 +877,7 @@
QuicksortObject const tint_symbol_49 = {.numbers=tint_symbol_48};
*(tint_symbol_84) = tint_symbol_49;
*(tint_symbol_84) = x_763;
- float3 const x_449 = float3(x_184.y, float3(1.0f, 2.0f, 3.0f).z, x_184.w);
+ float3 const x_449 = float3(x_184[1], float3(1.0f, 2.0f, 3.0f)[2], x_184[3]);
float3 const x_764 = color;
color = float3(0.0f, 0.0f, 0.0f);
color = x_764;
@@ -887,7 +887,7 @@
QuicksortObject const tint_symbol_51 = {.numbers=tint_symbol_50};
*(tint_symbol_84) = tint_symbol_51;
*(tint_symbol_84) = x_765;
- float2 const x_450 = float2(x_447.x, x_185.y);
+ float2 const x_450 = float2(x_447[0], x_185[1]);
float3 const x_766 = color;
color = float3(0.0f, 0.0f, 0.0f);
float3 const x_767 = color;
@@ -899,7 +899,7 @@
float3 const x_768 = color;
color = float3(0.0f, 0.0f, 0.0f);
color = x_768;
- float3 const x_451 = float3(x_185.x, x_185.y, x_446.y);
+ float3 const x_451 = float3(x_185[0], x_185[1], x_446[1]);
QuicksortObject const x_769 = *(tint_symbol_84);
tint_array_wrapper const tint_symbol_52 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
QuicksortObject const tint_symbol_53 = {.numbers=tint_symbol_52};
@@ -917,11 +917,11 @@
int const x_772 = (*(tint_symbol_84)).numbers.arr[0u];
(*(tint_symbol_84)).numbers.arr[0u] = 0;
(*(tint_symbol_84)).numbers.arr[0u] = x_772;
- float const x_206 = color.x;
- float const x_773 = color.x;
- color.x = 0.0f;
- color.x = x_773;
- float2 const x_452 = float2(float3(1.0f, 2.0f, 3.0f).z, float3(1.0f, 2.0f, 3.0f).y);
+ float const x_206 = color[0];
+ float const x_773 = color[0];
+ color[0] = 0.0f;
+ color[0] = x_773;
+ float2 const x_452 = float2(float3(1.0f, 2.0f, 3.0f)[2], float3(1.0f, 2.0f, 3.0f)[1]);
int const x_774 = i_2;
i_2 = 0;
i_2 = x_774;
@@ -930,20 +930,20 @@
QuicksortObject const tint_symbol_57 = {.numbers=tint_symbol_56};
*(tint_symbol_84) = tint_symbol_57;
*(tint_symbol_84) = x_775;
- float3 const x_453 = float3(x_451.x, x_450.x, x_450.y);
- color.x = (x_206 + float(x_201));
+ float3 const x_453 = float3(x_451[0], x_450[0], x_450[1]);
+ color[0] = (x_206 + float(x_201));
float2 const x_776 = uv;
uv = float2(0.0f, 0.0f);
uv = x_776;
float2 const x_777 = uv;
uv = float2(0.0f, 0.0f);
uv = x_777;
- float2 const x_454 = float2(x_184.y, x_184.y);
- float const x_210 = uv.x;
- float2 const x_455 = float2(x_192.y, x_192.x);
- float const x_778 = uv.x;
- uv.x = 0.0f;
- uv.x = x_778;
+ float2 const x_454 = float2(x_184[1], x_184[1]);
+ float const x_210 = uv[0];
+ float2 const x_455 = float2(x_192[1], x_192[0]);
+ float const x_778 = uv[0];
+ uv[0] = 0.0f;
+ uv[0] = x_778;
QuicksortObject const x_779 = *(tint_symbol_84);
tint_array_wrapper const tint_symbol_58 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
QuicksortObject const tint_symbol_59 = {.numbers=tint_symbol_58};
@@ -956,17 +956,17 @@
int const x_781 = (*(tint_symbol_84)).numbers.arr[0u];
(*(tint_symbol_84)).numbers.arr[0u] = 0;
(*(tint_symbol_84)).numbers.arr[0u] = x_781;
- float3 const x_456 = float3(float2(0.0f, 0.0f).y, x_448.y, x_448.y);
- float const x_782 = uv.x;
- uv.x = 0.0f;
- uv.x = x_782;
+ float3 const x_456 = float3(float2(0.0f, 0.0f)[1], x_448[1], x_448[1]);
+ float const x_782 = uv[0];
+ uv[0] = 0.0f;
+ uv[0] = x_782;
int const x_216 = (*(tint_symbol_84)).numbers.arr[1];
QuicksortObject const x_783 = *(tint_symbol_84);
tint_array_wrapper const tint_symbol_60 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
QuicksortObject const tint_symbol_61 = {.numbers=tint_symbol_60};
*(tint_symbol_84) = tint_symbol_61;
*(tint_symbol_84) = x_783;
- float2 const x_457 = float2(x_454.x, x_454.x);
+ float2 const x_457 = float2(x_454[0], x_454[0]);
float2 const x_784 = uv;
uv = float2(0.0f, 0.0f);
uv = x_784;
@@ -975,7 +975,7 @@
QuicksortObject const tint_symbol_63 = {.numbers=tint_symbol_62};
*(tint_symbol_84) = tint_symbol_63;
*(tint_symbol_84) = x_785;
- float2 const x_458 = float2(float3(1.0f, 2.0f, 3.0f).z, float2(0.0f, 0.0f).y);
+ float2 const x_458 = float2(float3(1.0f, 2.0f, 3.0f)[2], float2(0.0f, 0.0f)[1]);
int const x_786 = i_2;
i_2 = 0;
i_2 = x_786;
@@ -989,144 +989,144 @@
float3 const x_789 = color;
color = float3(0.0f, 0.0f, 0.0f);
color = x_789;
- float3 const x_459 = float3(x_454.y, x_454.y, x_447.y);
+ float3 const x_459 = float3(x_454[1], x_454[1], x_447[1]);
float const x_790 = color[0];
color[0] = 0.0f;
color[0] = x_790;
- color.x = (float(x_216) + x_219);
+ color[0] = (float(x_216) + x_219);
int const x_791 = (*(tint_symbol_84)).numbers.arr[0u];
(*(tint_symbol_84)).numbers.arr[0u] = 0;
(*(tint_symbol_84)).numbers.arr[0u] = x_791;
}
- float const x_792 = uv.x;
- uv.x = 0.0f;
- uv.x = x_792;
- float const x_793 = uv.x;
- uv.x = 0.0f;
- uv.x = x_793;
- float const x_223 = uv.x;
- float const x_794 = uv.x;
- uv.x = 0.0f;
- uv.x = x_794;
- float3 const x_460 = float3(x_453.z, x_453.y, x_453.y);
+ float const x_792 = uv[0];
+ uv[0] = 0.0f;
+ uv[0] = x_792;
+ float const x_793 = uv[0];
+ uv[0] = 0.0f;
+ uv[0] = x_793;
+ float const x_223 = uv[0];
+ float const x_794 = uv[0];
+ uv[0] = 0.0f;
+ uv[0] = x_794;
+ float3 const x_460 = float3(x_453[2], x_453[1], x_453[1]);
float2 const x_795 = uv;
uv = float2(0.0f, 0.0f);
uv = x_795;
- float const x_796 = uv.x;
- uv.x = 0.0f;
- uv.x = x_796;
- float2 const x_461 = float2(float2(0.0f, 0.0f).y, float2(0.0f, 0.0f).y);
- float const x_797 = uv.x;
- uv.x = 0.0f;
- uv.x = x_797;
+ float const x_796 = uv[0];
+ uv[0] = 0.0f;
+ uv[0] = x_796;
+ float2 const x_461 = float2(float2(0.0f, 0.0f)[1], float2(0.0f, 0.0f)[1]);
+ float const x_797 = uv[0];
+ uv[0] = 0.0f;
+ uv[0] = x_797;
if ((x_223 > 0.5f)) {
- float const x_798 = uv.x;
- uv.x = 0.0f;
- uv.x = x_798;
- float2 const x_462 = float2(x_446.x, x_446.x);
- float const x_799 = color.x;
- color.x = 0.0f;
- color.x = x_799;
- float const x_800 = color.x;
- color.x = 0.0f;
- color.x = x_800;
- float3 const x_463 = float3(x_453.x, x_453.z, x_461.y);
- float const x_801 = color.x;
- color.x = 0.0f;
- color.x = x_801;
+ float const x_798 = uv[0];
+ uv[0] = 0.0f;
+ uv[0] = x_798;
+ float2 const x_462 = float2(x_446[0], x_446[0]);
+ float const x_799 = color[0];
+ color[0] = 0.0f;
+ color[0] = x_799;
+ float const x_800 = color[0];
+ color[0] = 0.0f;
+ color[0] = x_800;
+ float3 const x_463 = float3(x_453[0], x_453[2], x_461[1]);
+ float const x_801 = color[0];
+ color[0] = 0.0f;
+ color[0] = x_801;
int const x_230 = (*(tint_symbol_84)).numbers.arr[2u];
- float const x_802 = uv.x;
- uv.x = 0.0f;
- uv.x = x_802;
- float const x_803 = color.x;
- color.x = 0.0f;
- color.x = x_803;
+ float const x_802 = uv[0];
+ uv[0] = 0.0f;
+ uv[0] = x_802;
+ float const x_803 = color[0];
+ color[0] = 0.0f;
+ color[0] = x_803;
int const x_804 = (*(tint_symbol_84)).numbers.arr[2u];
(*(tint_symbol_84)).numbers.arr[2u] = 0;
(*(tint_symbol_84)).numbers.arr[2u] = x_804;
- float2 const x_464 = float2(x_450.y, x_191.x);
- float const x_805 = color.y;
- color.y = 0.0f;
- color.y = x_805;
- float const x_234 = color.y;
+ float2 const x_464 = float2(x_450[1], x_191[0]);
+ float const x_805 = color[1];
+ color[1] = 0.0f;
+ color[1] = x_805;
+ float const x_234 = color[1];
int const x_806 = (*(tint_symbol_84)).numbers.arr[2u];
(*(tint_symbol_84)).numbers.arr[2u] = 0;
(*(tint_symbol_84)).numbers.arr[2u] = x_806;
- float2 const x_465 = float2(x_463.x, x_185.x);
- float const x_807 = color.x;
- color.x = 0.0f;
- color.x = x_807;
+ float2 const x_465 = float2(x_463[0], x_185[0]);
+ float const x_807 = color[0];
+ color[0] = 0.0f;
+ color[0] = x_807;
int const x_808 = i_2;
i_2 = 0;
i_2 = x_808;
- float2 const x_466 = float2(x_455.y, float2(0.0f, 0.0f).y);
+ float2 const x_466 = float2(x_455[1], float2(0.0f, 0.0f)[1]);
int const x_809 = i_2;
i_2 = 0;
i_2 = x_809;
- color.y = (float(x_230) + x_234);
- float const x_810 = uv.x;
- uv.x = 0.0f;
- uv.x = x_810;
+ color[1] = (float(x_230) + x_234);
+ float const x_810 = uv[0];
+ uv[0] = 0.0f;
+ uv[0] = x_810;
}
int const x_811 = i_2;
i_2 = 0;
i_2 = x_811;
- float2 const x_467 = float2(x_191.x, x_191.x);
- float const x_812 = uv.x;
- uv.x = 0.0f;
- uv.x = x_812;
+ float2 const x_467 = float2(x_191[0], x_191[0]);
+ float const x_812 = uv[0];
+ uv[0] = 0.0f;
+ uv[0] = x_812;
float const x_238 = uv[0];
float3 const x_813 = color;
color = float3(0.0f, 0.0f, 0.0f);
color = x_813;
- float const x_814 = color.x;
- color.x = 0.0f;
- color.x = x_814;
+ float const x_814 = color[0];
+ color[0] = 0.0f;
+ color[0] = x_814;
if ((x_238 > 0.75f)) {
- float const x_815 = color.x;
- color.x = 0.0f;
- color.x = x_815;
+ float const x_815 = color[0];
+ color[0] = 0.0f;
+ color[0] = x_815;
int const x_245 = (*(tint_symbol_84)).numbers.arr[3];
- float const x_816 = color.x;
- color.x = 0.0f;
- color.x = x_816;
+ float const x_816 = color[0];
+ color[0] = 0.0f;
+ color[0] = x_816;
QuicksortObject const x_817 = *(tint_symbol_84);
tint_array_wrapper const tint_symbol_64 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
QuicksortObject const tint_symbol_65 = {.numbers=tint_symbol_64};
*(tint_symbol_84) = tint_symbol_65;
*(tint_symbol_84) = x_817;
- float3 const x_468 = float3(x_467.x, x_467.x, x_467.x);
+ float3 const x_468 = float3(x_467[0], x_467[0], x_467[0]);
float const x_818 = uv[0];
uv[0] = 0.0f;
uv[0] = x_818;
- float const x_819 = uv.x;
- uv.x = 0.0f;
- uv.x = x_819;
- float const x_249 = color.z;
+ float const x_819 = uv[0];
+ uv[0] = 0.0f;
+ uv[0] = x_819;
+ float const x_249 = color[2];
float3 const x_820 = color;
color = float3(0.0f, 0.0f, 0.0f);
color = x_820;
- float3 const x_469 = float3(x_467.x, x_191.y, x_467.y);
- float const x_821 = color.z;
- color.z = 0.0f;
- color.z = x_821;
+ float3 const x_469 = float3(x_467[0], x_191[1], x_467[1]);
+ float const x_821 = color[2];
+ color[2] = 0.0f;
+ color[2] = x_821;
int const x_822 = (*(tint_symbol_84)).numbers.arr[0u];
(*(tint_symbol_84)).numbers.arr[0u] = 0;
(*(tint_symbol_84)).numbers.arr[0u] = x_822;
- float2 const x_470 = float2(float2(0.0f, 0.0f).x, float2(0.0f, 0.0f).y);
- float const x_823 = color.z;
- color.z = 0.0f;
- color.z = x_823;
- color.z = (x_249 + float(x_245));
+ float2 const x_470 = float2(float2(0.0f, 0.0f)[0], float2(0.0f, 0.0f)[1]);
+ float const x_823 = color[2];
+ color[2] = 0.0f;
+ color[2] = x_823;
+ color[2] = (x_249 + float(x_245));
float2 const x_824 = uv;
uv = float2(0.0f, 0.0f);
uv = x_824;
- float2 const x_471 = float2(x_470.y, x_470.y);
+ float2 const x_471 = float2(x_470[1], x_470[1]);
}
float const x_825 = uv[0];
uv[0] = 0.0f;
uv[0] = x_825;
- float3 const x_472 = float3(x_454.x, x_454.y, x_454.y);
+ float3 const x_472 = float3(x_454[0], x_454[1], x_454[1]);
int const x_254 = (*(tint_symbol_84)).numbers.arr[4];
float const x_826 = uv[0];
uv[0] = 0.0f;
@@ -1134,178 +1134,178 @@
float3 const x_827 = color;
color = float3(0.0f, 0.0f, 0.0f);
color = x_827;
- float3 const x_473 = float3(x_446.y, x_453.x, x_453.x);
+ float3 const x_473 = float3(x_446[1], x_453[0], x_453[0]);
int const x_828 = (*(tint_symbol_84)).numbers.arr[4];
(*(tint_symbol_84)).numbers.arr[4] = 0;
(*(tint_symbol_84)).numbers.arr[4] = x_828;
- float2 const x_474 = float2(x_191.x, x_184.z);
- float const x_829 = uv.x;
- uv.x = 0.0f;
- uv.x = x_829;
- float const x_257 = color.y;
- float const x_830 = color.y;
- color.y = 0.0f;
- color.y = x_830;
- float2 const x_475 = float2(x_467.x, x_450.x);
- float const x_831 = uv.x;
- uv.x = 0.0f;
- uv.x = x_831;
- float const x_832 = color.x;
- color.x = 0.0f;
- color.x = x_832;
- float2 const x_476 = float2(x_451.z, x_460.y);
- color.y = (x_257 + float(x_254));
- float3 const x_477 = float3(float2(0.0f, 0.0f).x, x_472.x, float2(0.0f, 0.0f).y);
- float const x_833 = uv.x;
- uv.x = 0.0f;
- uv.x = x_833;
- float const x_834 = color.x;
- color.x = 0.0f;
- color.x = x_834;
- float2 const x_478 = float2(x_472.x, x_472.y);
- float const x_835 = uv.y;
- uv.y = 0.0f;
- uv.y = x_835;
- float const x_261 = uv.y;
+ float2 const x_474 = float2(x_191[0], x_184[2]);
+ float const x_829 = uv[0];
+ uv[0] = 0.0f;
+ uv[0] = x_829;
+ float const x_257 = color[1];
+ float const x_830 = color[1];
+ color[1] = 0.0f;
+ color[1] = x_830;
+ float2 const x_475 = float2(x_467[0], x_450[0]);
+ float const x_831 = uv[0];
+ uv[0] = 0.0f;
+ uv[0] = x_831;
+ float const x_832 = color[0];
+ color[0] = 0.0f;
+ color[0] = x_832;
+ float2 const x_476 = float2(x_451[2], x_460[1]);
+ color[1] = (x_257 + float(x_254));
+ float3 const x_477 = float3(float2(0.0f, 0.0f)[0], x_472[0], float2(0.0f, 0.0f)[1]);
+ float const x_833 = uv[0];
+ uv[0] = 0.0f;
+ uv[0] = x_833;
+ float const x_834 = color[0];
+ color[0] = 0.0f;
+ color[0] = x_834;
+ float2 const x_478 = float2(x_472[0], x_472[1]);
+ float const x_835 = uv[1];
+ uv[1] = 0.0f;
+ uv[1] = x_835;
+ float const x_261 = uv[1];
int const x_836 = i_2;
i_2 = 0;
i_2 = x_836;
- float3 const x_479 = float3(float2(0.0f, 0.0f).y, x_454.y, float2(0.0f, 0.0f).x);
+ float3 const x_479 = float3(float2(0.0f, 0.0f)[1], x_454[1], float2(0.0f, 0.0f)[0]);
int const x_837 = (*(tint_symbol_84)).numbers.arr[0u];
(*(tint_symbol_84)).numbers.arr[0u] = 0;
(*(tint_symbol_84)).numbers.arr[0u] = x_837;
- float const x_838 = color.y;
- color.y = 0.0f;
- color.y = x_838;
- float3 const x_480 = float3(x_446.x, x_446.x, float2(0.0f, 0.0f).y);
- float const x_839 = uv.x;
- uv.x = 0.0f;
- uv.x = x_839;
+ float const x_838 = color[1];
+ color[1] = 0.0f;
+ color[1] = x_838;
+ float3 const x_480 = float3(x_446[0], x_446[0], float2(0.0f, 0.0f)[1]);
+ float const x_839 = uv[0];
+ uv[0] = 0.0f;
+ uv[0] = x_839;
if ((x_261 > 0.25f)) {
- float2 const x_481 = float2(x_447.x, x_480.z);
+ float2 const x_481 = float2(x_447[0], x_480[2]);
float3 const x_840 = color;
color = float3(0.0f, 0.0f, 0.0f);
color = x_840;
int const x_267 = (*(tint_symbol_84)).numbers.arr[5u];
- float const x_841 = color.x;
- color.x = 0.0f;
- color.x = x_841;
+ float const x_841 = color[0];
+ color[0] = 0.0f;
+ color[0] = x_841;
int const x_842 = i_2;
i_2 = 0;
i_2 = x_842;
int const x_843 = i_2;
i_2 = 0;
i_2 = x_843;
- float const x_270 = color.x;
+ float const x_270 = color[0];
float const x_844 = uv[0];
uv[0] = 0.0f;
uv[0] = x_844;
- float3 const x_482 = float3(x_455.x, x_475.y, x_455.y);
+ float3 const x_482 = float3(x_455[0], x_475[1], x_455[1]);
QuicksortObject const x_845 = *(tint_symbol_84);
tint_array_wrapper const tint_symbol_66 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
QuicksortObject const tint_symbol_67 = {.numbers=tint_symbol_66};
*(tint_symbol_84) = tint_symbol_67;
*(tint_symbol_84) = x_845;
- float const x_846 = uv.y;
- uv.y = 0.0f;
- uv.y = x_846;
+ float const x_846 = uv[1];
+ uv[1] = 0.0f;
+ uv[1] = x_846;
int const x_847 = i_2;
i_2 = 0;
i_2 = x_847;
- float3 const x_483 = float3(x_184.w, x_184.w, x_192.x);
- float const x_848 = uv.x;
- uv.x = 0.0f;
- uv.x = x_848;
- color.x = (float(x_267) + x_270);
- float3 const x_484 = float3(x_454.y, x_450.x, x_454.y);
- float const x_849 = uv.x;
- uv.x = 0.0f;
- uv.x = x_849;
+ float3 const x_483 = float3(x_184[3], x_184[3], x_192[0]);
+ float const x_848 = uv[0];
+ uv[0] = 0.0f;
+ uv[0] = x_848;
+ color[0] = (float(x_267) + x_270);
+ float3 const x_484 = float3(x_454[1], x_450[0], x_454[1]);
+ float const x_849 = uv[0];
+ uv[0] = 0.0f;
+ uv[0] = x_849;
}
- float const x_850 = color.x;
- color.x = 0.0f;
- color.x = x_850;
- float3 const x_485 = float3(x_467.x, x_450.y, x_450.x);
- float const x_851 = uv.y;
- uv.y = 0.0f;
- uv.y = x_851;
+ float const x_850 = color[0];
+ color[0] = 0.0f;
+ color[0] = x_850;
+ float3 const x_485 = float3(x_467[0], x_450[1], x_450[0]);
+ float const x_851 = uv[1];
+ uv[1] = 0.0f;
+ uv[1] = x_851;
int const x_852 = (*(tint_symbol_84)).numbers.arr[4];
(*(tint_symbol_84)).numbers.arr[4] = 0;
(*(tint_symbol_84)).numbers.arr[4] = x_852;
- float const x_274 = uv.y;
+ float const x_274 = uv[1];
int const x_853 = (*(tint_symbol_84)).numbers.arr[0u];
(*(tint_symbol_84)).numbers.arr[0u] = 0;
(*(tint_symbol_84)).numbers.arr[0u] = x_853;
if ((x_274 > 0.5f)) {
- float const x_854 = uv.x;
- uv.x = 0.0f;
- uv.x = x_854;
- float2 const x_486 = float2(x_480.y, x_455.y);
- float const x_855 = color.y;
- color.y = 0.0f;
- color.y = x_855;
- float2 const x_487 = float2(x_449.z, x_449.y);
- float const x_856 = uv.y;
- uv.y = 0.0f;
- uv.y = x_856;
+ float const x_854 = uv[0];
+ uv[0] = 0.0f;
+ uv[0] = x_854;
+ float2 const x_486 = float2(x_480[1], x_455[1]);
+ float const x_855 = color[1];
+ color[1] = 0.0f;
+ color[1] = x_855;
+ float2 const x_487 = float2(x_449[2], x_449[1]);
+ float const x_856 = uv[1];
+ uv[1] = 0.0f;
+ uv[1] = x_856;
int const x_280 = (*(tint_symbol_84)).numbers.arr[6u];
- float const x_857 = uv.y;
- uv.y = 0.0f;
- uv.y = x_857;
+ float const x_857 = uv[1];
+ uv[1] = 0.0f;
+ uv[1] = x_857;
int const x_858 = i_2;
i_2 = 0;
i_2 = x_858;
int const x_859 = (*(tint_symbol_84)).numbers.arr[4];
(*(tint_symbol_84)).numbers.arr[4] = 0;
(*(tint_symbol_84)).numbers.arr[4] = x_859;
- float2 const x_488 = float2(x_473.z, x_473.y);
- float const x_283 = color.y;
+ float2 const x_488 = float2(x_473[2], x_473[1]);
+ float const x_283 = color[1];
float2 const x_860 = uv;
uv = float2(0.0f, 0.0f);
uv = x_860;
- float const x_861 = color.x;
- color.x = 0.0f;
- color.x = x_861;
- float2 const x_489 = float2(x_475.y, x_475.x);
+ float const x_861 = color[0];
+ color[0] = 0.0f;
+ color[0] = x_861;
+ float2 const x_489 = float2(x_475[1], x_475[0]);
int const x_862 = (*(tint_symbol_84)).numbers.arr[6u];
(*(tint_symbol_84)).numbers.arr[6u] = 0;
(*(tint_symbol_84)).numbers.arr[6u] = x_862;
int const x_863 = (*(tint_symbol_84)).numbers.arr[6u];
(*(tint_symbol_84)).numbers.arr[6u] = 0;
(*(tint_symbol_84)).numbers.arr[6u] = x_863;
- float2 const x_490 = float2(x_480.z, x_480.z);
+ float2 const x_490 = float2(x_480[2], x_480[2]);
QuicksortObject const x_864 = *(tint_symbol_84);
tint_array_wrapper const tint_symbol_68 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
QuicksortObject const tint_symbol_69 = {.numbers=tint_symbol_68};
*(tint_symbol_84) = tint_symbol_69;
*(tint_symbol_84) = x_864;
- color.y = (float(x_280) + x_283);
- float const x_865 = color.x;
- color.x = 0.0f;
- color.x = x_865;
- float2 const x_491 = float2(float3(1.0f, 2.0f, 3.0f).y, x_454.x);
- float const x_866 = color.y;
- color.y = 0.0f;
- color.y = x_866;
+ color[1] = (float(x_280) + x_283);
+ float const x_865 = color[0];
+ color[0] = 0.0f;
+ color[0] = x_865;
+ float2 const x_491 = float2(float3(1.0f, 2.0f, 3.0f)[1], x_454[0]);
+ float const x_866 = color[1];
+ color[1] = 0.0f;
+ color[1] = x_866;
}
- float2 const x_492 = float2(x_455.y, x_455.y);
- float const x_867 = color.x;
- color.x = 0.0f;
- color.x = x_867;
- float const x_287 = uv.y;
+ float2 const x_492 = float2(x_455[1], x_455[1]);
+ float const x_867 = color[0];
+ color[0] = 0.0f;
+ color[0] = x_867;
+ float const x_287 = uv[1];
QuicksortObject const x_868 = *(tint_symbol_84);
tint_array_wrapper const tint_symbol_70 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
QuicksortObject const tint_symbol_71 = {.numbers=tint_symbol_70};
*(tint_symbol_84) = tint_symbol_71;
*(tint_symbol_84) = x_868;
- float2 const x_493 = float2(x_475.x, x_475.y);
+ float2 const x_493 = float2(x_475[0], x_475[1]);
float const x_869 = uv[0];
uv[0] = 0.0f;
uv[0] = x_869;
- float const x_870 = color.y;
- color.y = 0.0f;
- color.y = x_870;
- float3 const x_494 = float3(x_191.x, x_191.y, x_191.y);
+ float const x_870 = color[1];
+ color[1] = 0.0f;
+ color[1] = x_870;
+ float3 const x_494 = float3(x_191[0], x_191[1], x_191[1]);
int const x_871 = (*(tint_symbol_84)).numbers.arr[4];
(*(tint_symbol_84)).numbers.arr[4] = 0;
(*(tint_symbol_84)).numbers.arr[4] = x_871;
@@ -1313,63 +1313,63 @@
float3 const x_872 = color;
color = float3(0.0f, 0.0f, 0.0f);
color = x_872;
- float const x_873 = color.x;
- color.x = 0.0f;
- color.x = x_873;
- float3 const x_495 = float3(x_192.y, x_192.x, x_192.y);
+ float const x_873 = color[0];
+ color[0] = 0.0f;
+ color[0] = x_873;
+ float3 const x_495 = float3(x_192[1], x_192[0], x_192[1]);
float3 const x_874 = color;
color = float3(0.0f, 0.0f, 0.0f);
color = x_874;
int const x_293 = (*(tint_symbol_84)).numbers.arr[7];
- float const x_875 = uv.x;
- uv.x = 0.0f;
- uv.x = x_875;
- float3 const x_496 = float3(x_475.x, x_467.y, x_467.x);
- float const x_876 = color.y;
- color.y = 0.0f;
- color.y = x_876;
- float2 const x_497 = float2(x_477.x, x_461.y);
+ float const x_875 = uv[0];
+ uv[0] = 0.0f;
+ uv[0] = x_875;
+ float3 const x_496 = float3(x_475[0], x_467[1], x_467[0]);
+ float const x_876 = color[1];
+ color[1] = 0.0f;
+ color[1] = x_876;
+ float2 const x_497 = float2(x_477[0], x_461[1]);
int const x_877 = (*(tint_symbol_84)).numbers.arr[0u];
(*(tint_symbol_84)).numbers.arr[0u] = 0;
(*(tint_symbol_84)).numbers.arr[0u] = x_877;
- float const x_878 = color.y;
- color.y = 0.0f;
- color.y = x_878;
- float3 const x_498 = float3(x_478.x, x_478.y, x_478.x);
- float const x_879 = color.x;
- color.x = 0.0f;
- color.x = x_879;
- float const x_296 = color.z;
- float const x_880 = uv.y;
- uv.y = 0.0f;
- uv.y = x_880;
- float2 const x_499 = float2(x_184.x, x_184.y);
- float const x_881 = uv.x;
- uv.x = 0.0f;
- uv.x = x_881;
- float const x_882 = uv.y;
- uv.y = 0.0f;
- uv.y = x_882;
- float const x_883 = uv.y;
- uv.y = 0.0f;
- uv.y = x_883;
- float3 const x_500 = float3(x_499.y, x_499.y, x_494.z);
- float const x_884 = color.z;
- color.z = 0.0f;
- color.z = x_884;
- color.z = (float(x_293) + x_296);
- float const x_885 = color.y;
- color.y = 0.0f;
- color.y = x_885;
- float2 const x_501 = float2(x_453.x, x_453.z);
- float const x_886 = color.x;
- color.x = 0.0f;
- color.x = x_886;
+ float const x_878 = color[1];
+ color[1] = 0.0f;
+ color[1] = x_878;
+ float3 const x_498 = float3(x_478[0], x_478[1], x_478[0]);
+ float const x_879 = color[0];
+ color[0] = 0.0f;
+ color[0] = x_879;
+ float const x_296 = color[2];
+ float const x_880 = uv[1];
+ uv[1] = 0.0f;
+ uv[1] = x_880;
+ float2 const x_499 = float2(x_184[0], x_184[1]);
+ float const x_881 = uv[0];
+ uv[0] = 0.0f;
+ uv[0] = x_881;
+ float const x_882 = uv[1];
+ uv[1] = 0.0f;
+ uv[1] = x_882;
+ float const x_883 = uv[1];
+ uv[1] = 0.0f;
+ uv[1] = x_883;
+ float3 const x_500 = float3(x_499[1], x_499[1], x_494[2]);
+ float const x_884 = color[2];
+ color[2] = 0.0f;
+ color[2] = x_884;
+ color[2] = (float(x_293) + x_296);
+ float const x_885 = color[1];
+ color[1] = 0.0f;
+ color[1] = x_885;
+ float2 const x_501 = float2(x_453[0], x_453[2]);
+ float const x_886 = color[0];
+ color[0] = 0.0f;
+ color[0] = x_886;
}
int const x_887 = i_2;
i_2 = 0;
i_2 = x_887;
- float2 const x_502 = float2(x_451.y, x_192.y);
+ float2 const x_502 = float2(x_451[1], x_192[1]);
float2 const x_888 = uv;
uv = float2(0.0f, 0.0f);
uv = x_888;
@@ -1377,138 +1377,138 @@
int const x_889 = i_2;
i_2 = 0;
i_2 = x_889;
- float2 const x_503 = float2(x_185.x, x_451.z);
+ float2 const x_503 = float2(x_185[0], x_451[2]);
int const x_890 = (*(tint_symbol_84)).numbers.arr[8];
(*(tint_symbol_84)).numbers.arr[8] = 0;
(*(tint_symbol_84)).numbers.arr[8] = x_890;
- float const x_891 = color.y;
- color.y = 0.0f;
- color.y = x_891;
- float2 const x_504 = float2(x_453.y, float2(0.0f, 0.0f).x);
- float const x_892 = color.x;
- color.x = 0.0f;
- color.x = x_892;
- float3 const x_505 = float3(x_504.x, x_504.y, x_504.x);
- float const x_893 = color.z;
- color.z = 0.0f;
- color.z = x_893;
- float const x_304 = color.z;
- float const x_894 = color.x;
- color.x = 0.0f;
- color.x = x_894;
- float2 const x_506 = float2(x_493.x, x_492.x);
+ float const x_891 = color[1];
+ color[1] = 0.0f;
+ color[1] = x_891;
+ float2 const x_504 = float2(x_453[1], float2(0.0f, 0.0f)[0]);
+ float const x_892 = color[0];
+ color[0] = 0.0f;
+ color[0] = x_892;
+ float3 const x_505 = float3(x_504[0], x_504[1], x_504[0]);
+ float const x_893 = color[2];
+ color[2] = 0.0f;
+ color[2] = x_893;
+ float const x_304 = color[2];
+ float const x_894 = color[0];
+ color[0] = 0.0f;
+ color[0] = x_894;
+ float2 const x_506 = float2(x_493[0], x_492[0]);
int const x_895 = (*(tint_symbol_84)).numbers.arr[4];
(*(tint_symbol_84)).numbers.arr[4] = 0;
(*(tint_symbol_84)).numbers.arr[4] = x_895;
- float const x_896 = uv.y;
- uv.y = 0.0f;
- uv.y = x_896;
- float2 const x_507 = float2(x_461.x, x_447.x);
- float const x_897 = color.y;
- color.y = 0.0f;
- color.y = x_897;
- color.z = (x_304 + float(x_301));
+ float const x_896 = uv[1];
+ uv[1] = 0.0f;
+ uv[1] = x_896;
+ float2 const x_507 = float2(x_461[0], x_447[0]);
+ float const x_897 = color[1];
+ color[1] = 0.0f;
+ color[1] = x_897;
+ color[2] = (x_304 + float(x_301));
float2 const x_898 = uv;
uv = float2(0.0f, 0.0f);
uv = x_898;
- float const x_899 = uv.x;
- uv.x = 0.0f;
- uv.x = x_899;
- float3 const x_508 = float3(x_461.y, x_461.x, x_506.y);
- float const x_900 = uv.x;
- uv.x = 0.0f;
- uv.x = x_900;
- float const x_308 = uv.x;
- float const x_901 = color.y;
- color.y = 0.0f;
- color.y = x_901;
- float3 const x_509 = float3(x_503.y, x_503.x, x_448.z);
- float const x_902 = uv.y;
- uv.y = 0.0f;
- uv.y = x_902;
- float const x_310 = uv.y;
- float const x_903 = uv.y;
- uv.y = 0.0f;
- uv.y = x_903;
- float const x_904 = color.z;
- color.z = 0.0f;
- color.z = x_904;
- float3 const x_510 = float3(float3(1.0f, 2.0f, 3.0f).y, x_485.y, x_485.z);
- float const x_905 = color.z;
- color.z = 0.0f;
- color.z = x_905;
+ float const x_899 = uv[0];
+ uv[0] = 0.0f;
+ uv[0] = x_899;
+ float3 const x_508 = float3(x_461[1], x_461[0], x_506[1]);
+ float const x_900 = uv[0];
+ uv[0] = 0.0f;
+ uv[0] = x_900;
+ float const x_308 = uv[0];
+ float const x_901 = color[1];
+ color[1] = 0.0f;
+ color[1] = x_901;
+ float3 const x_509 = float3(x_503[1], x_503[0], x_448[2]);
+ float const x_902 = uv[1];
+ uv[1] = 0.0f;
+ uv[1] = x_902;
+ float const x_310 = uv[1];
+ float const x_903 = uv[1];
+ uv[1] = 0.0f;
+ uv[1] = x_903;
+ float const x_904 = color[2];
+ color[2] = 0.0f;
+ color[2] = x_904;
+ float3 const x_510 = float3(float3(1.0f, 2.0f, 3.0f)[1], x_485[1], x_485[2]);
+ float const x_905 = color[2];
+ color[2] = 0.0f;
+ color[2] = x_905;
int const x_906 = i_2;
i_2 = 0;
i_2 = x_906;
- float2 const x_511 = float2(x_485.z, x_485.y);
+ float2 const x_511 = float2(x_485[2], x_485[1]);
float3 const x_907 = color;
color = float3(0.0f, 0.0f, 0.0f);
color = x_907;
- float const x_908 = uv.y;
- uv.y = 0.0f;
- uv.y = x_908;
- float3 const x_512 = float3(x_455.y, x_455.y, x_455.y);
+ float const x_908 = uv[1];
+ uv[1] = 0.0f;
+ uv[1] = x_908;
+ float3 const x_512 = float3(x_455[1], x_455[1], x_455[1]);
int const x_909 = (*(tint_symbol_84)).numbers.arr[4];
(*(tint_symbol_84)).numbers.arr[4] = 0;
(*(tint_symbol_84)).numbers.arr[4] = x_909;
if ((fabs((x_308 - x_310)) < 0.25f)) {
- float const x_910 = uv.x;
- uv.x = 0.0f;
- uv.x = x_910;
+ float const x_910 = uv[0];
+ uv[0] = 0.0f;
+ uv[0] = x_910;
QuicksortObject const x_911 = *(tint_symbol_84);
tint_array_wrapper const tint_symbol_72 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
QuicksortObject const tint_symbol_73 = {.numbers=tint_symbol_72};
*(tint_symbol_84) = tint_symbol_73;
*(tint_symbol_84) = x_911;
- float3 const x_513 = float3(x_505.z, x_505.x, x_448.x);
+ float3 const x_513 = float3(x_505[2], x_505[0], x_448[0]);
int const x_912 = (*(tint_symbol_84)).numbers.arr[8];
(*(tint_symbol_84)).numbers.arr[8] = 0;
(*(tint_symbol_84)).numbers.arr[8] = x_912;
int const x_317 = (*(tint_symbol_84)).numbers.arr[9u];
- float3 const x_514 = float3(x_474.y, x_474.y, x_474.y);
- float const x_913 = uv.y;
- uv.y = 0.0f;
- uv.y = x_913;
- float const x_320 = color.x;
- float const x_914 = uv.y;
- uv.y = 0.0f;
- uv.y = x_914;
- float2 const x_515 = float2(x_502.x, x_502.y);
- float const x_915 = color.x;
- color.x = 0.0f;
- color.x = x_915;
+ float3 const x_514 = float3(x_474[1], x_474[1], x_474[1]);
+ float const x_913 = uv[1];
+ uv[1] = 0.0f;
+ uv[1] = x_913;
+ float const x_320 = color[0];
+ float const x_914 = uv[1];
+ uv[1] = 0.0f;
+ uv[1] = x_914;
+ float2 const x_515 = float2(x_502[0], x_502[1]);
+ float const x_915 = color[0];
+ color[0] = 0.0f;
+ color[0] = x_915;
float3 const x_916 = color;
color = float3(0.0f, 0.0f, 0.0f);
color = x_916;
- float2 const x_516 = float2(x_452.x, x_452.x);
+ float2 const x_516 = float2(x_452[0], x_452[0]);
float2 const x_917 = uv;
uv = float2(0.0f, 0.0f);
uv = x_917;
- float const x_918 = uv.x;
- uv.x = 0.0f;
- uv.x = x_918;
- float3 const x_517 = float3(float2(0.0f, 0.0f).x, float2(0.0f, 0.0f).x, float2(0.0f, 0.0f).y);
- color.x = (float(x_317) + x_320);
- float const x_919 = color.x;
- color.x = 0.0f;
- color.x = x_919;
- float3 const x_518 = float3(x_480.y, x_508.x, x_480.x);
- float const x_920 = color.x;
- color.x = 0.0f;
- color.x = x_920;
+ float const x_918 = uv[0];
+ uv[0] = 0.0f;
+ uv[0] = x_918;
+ float3 const x_517 = float3(float2(0.0f, 0.0f)[0], float2(0.0f, 0.0f)[0], float2(0.0f, 0.0f)[1]);
+ color[0] = (float(x_317) + x_320);
+ float const x_919 = color[0];
+ color[0] = 0.0f;
+ color[0] = x_919;
+ float3 const x_518 = float3(x_480[1], x_508[0], x_480[0]);
+ float const x_920 = color[0];
+ color[0] = 0.0f;
+ color[0] = x_920;
}
- float const x_921 = uv.y;
- uv.y = 0.0f;
- uv.y = x_921;
+ float const x_921 = uv[1];
+ uv[1] = 0.0f;
+ uv[1] = x_921;
float3 const x_325 = color;
float const x_922 = uv[0];
uv[0] = 0.0f;
uv[0] = x_922;
- float3 const x_519 = float3(x_447.x, x_446.x, x_446.y);
+ float3 const x_519 = float3(x_447[0], x_446[0], x_446[1]);
float3 const x_326 = normalize(x_325);
- float const x_923 = uv.x;
- uv.x = 0.0f;
- uv.x = x_923;
+ float const x_923 = uv[0];
+ uv[0] = 0.0f;
+ uv[0] = x_923;
QuicksortObject const x_924 = *(tint_symbol_84);
tint_array_wrapper const tint_symbol_74 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
QuicksortObject const tint_symbol_75 = {.numbers=tint_symbol_74};
@@ -1519,31 +1519,31 @@
QuicksortObject const tint_symbol_77 = {.numbers=tint_symbol_76};
*(tint_symbol_84) = tint_symbol_77;
*(tint_symbol_84) = x_925;
- float const x_926 = color.y;
- color.y = 0.0f;
- color.y = x_926;
- float2 const x_520 = float2(x_506.y, x_519.y);
- float const x_927 = color.y;
- color.y = 0.0f;
- color.y = x_927;
- float4 const x_330 = float4(x_326.x, x_326.y, x_326.z, 1.0f);
- float const x_928 = uv.y;
- uv.y = 0.0f;
- uv.y = x_928;
- float3 const x_521 = float3(float3(1.0f, 2.0f, 3.0f).y, float3(1.0f, 2.0f, 3.0f).y, x_520.y);
- float const x_929 = uv.x;
- uv.x = 0.0f;
- uv.x = x_929;
+ float const x_926 = color[1];
+ color[1] = 0.0f;
+ color[1] = x_926;
+ float2 const x_520 = float2(x_506[1], x_519[1]);
+ float const x_927 = color[1];
+ color[1] = 0.0f;
+ color[1] = x_927;
+ float4 const x_330 = float4(x_326[0], x_326[1], x_326[2], 1.0f);
+ float const x_928 = uv[1];
+ uv[1] = 0.0f;
+ uv[1] = x_928;
+ float3 const x_521 = float3(float3(1.0f, 2.0f, 3.0f)[1], float3(1.0f, 2.0f, 3.0f)[1], x_520[1]);
+ float const x_929 = uv[0];
+ uv[0] = 0.0f;
+ uv[0] = x_929;
*(tint_symbol_86) = x_330;
QuicksortObject const x_930 = *(tint_symbol_84);
tint_array_wrapper const tint_symbol_78 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
QuicksortObject const tint_symbol_79 = {.numbers=tint_symbol_78};
*(tint_symbol_84) = tint_symbol_79;
*(tint_symbol_84) = x_930;
- float3 const x_522 = float3(x_330.w, x_330.y, x_493.x);
- float const x_931 = color.x;
- color.x = 0.0f;
- color.x = x_931;
+ float3 const x_522 = float3(x_330[3], x_330[1], x_493[0]);
+ float const x_931 = color[0];
+ color[0] = 0.0f;
+ color[0] = x_931;
return;
}
diff --git a/test/bug/tint/757.wgsl.expected.msl b/test/bug/tint/757.wgsl.expected.msl
index c40c608..809bed6 100644
--- a/test/bug/tint/757.wgsl.expected.msl
+++ b/test/bug/tint/757.wgsl.expected.msl
@@ -9,11 +9,11 @@
};
void tint_symbol_inner(device Result& result, uint3 GlobalInvocationID, texture2d_array<float, access::sample> tint_symbol_1) {
- uint flatIndex = ((((2u * 2u) * GlobalInvocationID.z) + (2u * GlobalInvocationID.y)) + GlobalInvocationID.x);
+ uint flatIndex = ((((2u * 2u) * GlobalInvocationID[2]) + (2u * GlobalInvocationID[1])) + GlobalInvocationID[0]);
flatIndex = (flatIndex * 1u);
- float4 texel = tint_symbol_1.read(uint2(int2(GlobalInvocationID.xy)), 0, 0);
+ float4 texel = tint_symbol_1.read(uint2(int2(uint3(GlobalInvocationID).xy)), 0, 0);
for(uint i = 0u; (i < 1u); i = (i + 1u)) {
- result.values[(flatIndex + i)] = texel.r;
+ result.values[(flatIndex + i)] = texel[0];
}
}
diff --git a/test/bug/tint/824.wgsl.expected.msl b/test/bug/tint/824.wgsl.expected.msl
index 3aa26e2..906762b 100644
--- a/test/bug/tint/824.wgsl.expected.msl
+++ b/test/bug/tint/824.wgsl.expected.msl
@@ -18,7 +18,7 @@
Output tint_symbol_inner(uint VertexIndex, uint InstanceIndex) {
tint_array_wrapper zv = {.arr={float2(0.200000003f, 0.200000003f), float2(0.300000012f, 0.300000012f), float2(-0.100000001f, -0.100000001f), float2(1.100000024f, 1.100000024f)}};
- float const z = zv.arr[InstanceIndex].x;
+ float const z = zv.arr[InstanceIndex][0];
Output output = {};
output.Position = float4(0.5f, 0.5f, z, 1.0f);
tint_array_wrapper_1 colors = {.arr={float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)}};
diff --git a/test/bug/tint/827.wgsl.expected.msl b/test/bug/tint/827.wgsl.expected.msl
index f9eea7a..b11495f 100644
--- a/test/bug/tint/827.wgsl.expected.msl
+++ b/test/bug/tint/827.wgsl.expected.msl
@@ -7,7 +7,7 @@
constant uint width = 128u;
void tint_symbol_inner(device Result& result, uint3 GlobalInvocationId, depth2d<float, access::sample> tint_symbol_1) {
- result.values[((GlobalInvocationId.y * width) + GlobalInvocationId.x)] = tint_symbol_1.read(uint2(int2(int(GlobalInvocationId.x), int(GlobalInvocationId.y))), 0);
+ result.values[((GlobalInvocationId[1] * width) + GlobalInvocationId[0])] = tint_symbol_1.read(uint2(int2(int(GlobalInvocationId[0]), int(GlobalInvocationId[1]))), 0);
}
kernel void tint_symbol(depth2d<float, access::sample> tint_symbol_2 [[texture(0)]], uint3 GlobalInvocationId [[thread_position_in_grid]], device Result& result [[buffer(0)]]) {
diff --git a/test/bug/tint/913.wgsl.expected.msl b/test/bug/tint/913.wgsl.expected.msl
index a577524..aa299f6 100644
--- a/test/bug/tint/913.wgsl.expected.msl
+++ b/test/bug/tint/913.wgsl.expected.msl
@@ -19,25 +19,25 @@
void tint_symbol_inner(constant Uniforms& uniforms, device OutputBuf& output, uint3 GlobalInvocationID, texture2d<float, access::sample> tint_symbol_1, texture2d<float, access::sample> tint_symbol_2) {
int2 const srcSize = int2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
int2 const dstSize = int2(tint_symbol_2.get_width(), tint_symbol_2.get_height());
- uint2 const dstTexCoord = uint2(GlobalInvocationID.xy);
+ uint2 const dstTexCoord = uint2(uint3(GlobalInvocationID).xy);
float4 const nonCoveredColor = float4(0.0f, 1.0f, 0.0f, 1.0f);
bool success = true;
- if (((((dstTexCoord.x < uniforms.dstCopyOrigin.x) || (dstTexCoord.y < uniforms.dstCopyOrigin.y)) || (dstTexCoord.x >= (uniforms.dstCopyOrigin.x + uniforms.copySize.x))) || (dstTexCoord.y >= (uniforms.dstCopyOrigin.y + uniforms.copySize.y)))) {
+ if (((((dstTexCoord[0] < uniforms.dstCopyOrigin[0]) || (dstTexCoord[1] < uniforms.dstCopyOrigin[1])) || (dstTexCoord[0] >= (uniforms.dstCopyOrigin[0] + uniforms.copySize[0]))) || (dstTexCoord[1] >= (uniforms.dstCopyOrigin[1] + uniforms.copySize[1])))) {
success = (success && all((tint_symbol_2.read(uint2(int2(dstTexCoord)), 0) == nonCoveredColor)));
} else {
uint2 srcTexCoord = ((dstTexCoord - uniforms.dstCopyOrigin) + uniforms.srcCopyOrigin);
if ((uniforms.dstTextureFlipY == 1u)) {
- srcTexCoord.y = ((uint(srcSize.y) - srcTexCoord.y) - 1u);
+ srcTexCoord[1] = ((uint(srcSize[1]) - srcTexCoord[1]) - 1u);
}
float4 const srcColor = tint_symbol_1.read(uint2(int2(srcTexCoord)), 0);
float4 const dstColor = tint_symbol_2.read(uint2(int2(dstTexCoord)), 0);
if ((uniforms.channelCount == 2u)) {
- success = ((success && aboutEqual(dstColor.r, srcColor.r)) && aboutEqual(dstColor.g, srcColor.g));
+ success = ((success && aboutEqual(dstColor[0], srcColor[0])) && aboutEqual(dstColor[1], srcColor[1]));
} else {
- success = ((((success && aboutEqual(dstColor.r, srcColor.r)) && aboutEqual(dstColor.g, srcColor.g)) && aboutEqual(dstColor.b, srcColor.b)) && aboutEqual(dstColor.a, srcColor.a));
+ success = ((((success && aboutEqual(dstColor[0], srcColor[0])) && aboutEqual(dstColor[1], srcColor[1])) && aboutEqual(dstColor[2], srcColor[2])) && aboutEqual(dstColor[3], srcColor[3]));
}
}
- uint const outputIndex = ((GlobalInvocationID.y * uint(dstSize.x)) + GlobalInvocationID.x);
+ uint const outputIndex = ((GlobalInvocationID[1] * uint(dstSize[0])) + GlobalInvocationID[0]);
if (success) {
output.result[outputIndex] = 1u;
} else {
diff --git a/test/bug/tint/914.wgsl.expected.msl b/test/bug/tint/914.wgsl.expected.msl
index 426f200..d0f5a3e 100644
--- a/test/bug/tint/914.wgsl.expected.msl
+++ b/test/bug/tint/914.wgsl.expected.msl
@@ -58,10 +58,10 @@
(*(tint_symbol_2)).arr[i].arr[i_1] = float();
}
threadgroup_barrier(mem_flags::mem_threadgroup);
- uint const tileRow = (local_id.y * RowPerThread);
- uint const tileCol = (local_id.x * ColPerThread);
- uint const globalRow = (global_id.y * RowPerThread);
- uint const globalCol = (global_id.x * ColPerThread);
+ uint const tileRow = (local_id[1] * RowPerThread);
+ uint const tileCol = (local_id[0] * ColPerThread);
+ uint const globalRow = (global_id[1] * RowPerThread);
+ uint const globalCol = (global_id[0] * ColPerThread);
uint const numTiles = (((uniforms.dimInner - 1u) / TileInner) + 1u);
tint_array_wrapper_2 acc = {};
float ACached = 0.0f;
@@ -70,9 +70,9 @@
acc.arr[index] = 0.0f;
}
uint const ColPerThreadA = (TileInner / 16u);
- uint const tileColA = (local_id.x * ColPerThreadA);
+ uint const tileColA = (local_id[0] * ColPerThreadA);
uint const RowPerThreadB = (TileInner / 16u);
- uint const tileRowB = (local_id.y * RowPerThreadB);
+ uint const tileRowB = (local_id[1] * RowPerThreadB);
for(uint t = 0u; (t < numTiles); t = (t + 1u)) {
for(uint innerRow = 0u; (innerRow < RowPerThread); innerRow = (innerRow + 1u)) {
for(uint innerCol = 0u; (innerCol < ColPerThreadA); innerCol = (innerCol + 1u)) {
diff --git a/test/bug/tint/922.wgsl.expected.msl b/test/bug/tint/922.wgsl.expected.msl
index e9b7764..c1aa861 100644
--- a/test/bug/tint/922.wgsl.expected.msl
+++ b/test/bug/tint/922.wgsl.expected.msl
@@ -56,7 +56,7 @@
Mat4x3_ const x_e2 = m1;
Mat4x3_ const x_e5 = m1;
Mat4x3_ const x_e8 = m1;
- return float3(x_e2.mx.x, x_e5.my.x, x_e8.mz.x);
+ return float3(x_e2.mx[0], x_e5.my[0], x_e8.mz[0]);
}
float3 Mat4x3GetCol1_(Mat4x3_ m2) {
@@ -65,7 +65,7 @@
Mat4x3_ const x_e2 = m3;
Mat4x3_ const x_e5 = m3;
Mat4x3_ const x_e8 = m3;
- return float3(x_e2.mx.y, x_e5.my.y, x_e8.mz.y);
+ return float3(x_e2.mx[1], x_e5.my[1], x_e8.mz[1]);
}
float3 Mat4x3GetCol2_(Mat4x3_ m4) {
@@ -74,7 +74,7 @@
Mat4x3_ const x_e2 = m5;
Mat4x3_ const x_e5 = m5;
Mat4x3_ const x_e8 = m5;
- return float3(x_e2.mx.z, x_e5.my.z, x_e8.mz.z);
+ return float3(x_e2.mx[2], x_e5.my[2], x_e8.mz[2]);
}
float3 Mat4x3GetCol3_(Mat4x3_ m6) {
@@ -83,7 +83,7 @@
Mat4x3_ const x_e2 = m7;
Mat4x3_ const x_e5 = m7;
Mat4x3_ const x_e8 = m7;
- return float3(x_e2.mx.w, x_e5.my.w, x_e8.mz.w);
+ return float3(x_e2.mx[3], x_e5.my[3], x_e8.mz[3]);
}
float4 Mul(Mat4x4_ m8, float4 v) {
@@ -248,13 +248,13 @@
float4 const x_e50 = *(tint_symbol_8);
*(tint_symbol_9) = x_e50;
float4 const x_e52 = global1.u_Misc0_;
- if ((x_e52.x == 2.0f)) {
+ if ((x_e52[0] == 2.0f)) {
{
float3 const x_e59 = *(tint_symbol_10);
Mat4x2_ const x_e64 = global1.u_TexMtx.arr[0];
float3 const x_e65 = *(tint_symbol_10);
float2 const x_e68 = Mul2(x_e64, float4(x_e65, 1.0f));
- *(tint_symbol_11) = x_e68.xy;
+ *(tint_symbol_11) = float2(x_e68).xy;
return;
}
} else {
@@ -263,7 +263,7 @@
Mat4x2_ const x_e79 = global1.u_TexMtx.arr[0];
float2 const x_e80 = *(tint_symbol_12);
float2 const x_e84 = Mul2(x_e79, float4(x_e80, 1.0f, 1.0f));
- *(tint_symbol_11) = x_e84.xy;
+ *(tint_symbol_11) = float2(x_e84).xy;
return;
}
}
diff --git a/test/bug/tint/942.wgsl.expected.msl b/test/bug/tint/942.wgsl.expected.msl
index 935fd20..510cfec 100644
--- a/test/bug/tint/942.wgsl.expected.msl
+++ b/test/bug/tint/942.wgsl.expected.msl
@@ -24,14 +24,14 @@
threadgroup_barrier(mem_flags::mem_threadgroup);
uint const filterOffset = ((params.filterDim - 1u) / 2u);
int2 const dims = int2(tint_symbol_2.get_width(0), tint_symbol_2.get_height(0));
- int2 const baseIndex = as_type<int2>((as_type<uint2>(int2(((WorkGroupID.xy * uint2(params.blockDim, 4u)) + (LocalInvocationID.xy * uint2(4u, 1u))))) - as_type<uint2>(int2(int(filterOffset), 0))));
+ int2 const baseIndex = as_type<int2>((as_type<uint2>(int2(((uint3(WorkGroupID).xy * uint2(params.blockDim, 4u)) + (uint3(LocalInvocationID).xy * uint2(4u, 1u))))) - as_type<uint2>(int2(int(filterOffset), 0))));
for(uint r = 0u; (r < 4u); r = (r + 1u)) {
for(uint c = 0u; (c < 4u); c = (c + 1u)) {
int2 loadIndex = as_type<int2>((as_type<uint2>(baseIndex) + as_type<uint2>(int2(int(c), int(r)))));
if ((flip.value != 0u)) {
- loadIndex = loadIndex.yx;
+ loadIndex = int2(loadIndex).yx;
}
- (*(tint_symbol_1)).arr[r].arr[((4u * LocalInvocationID.x) + c)] = tint_symbol_2.sample(tint_symbol_3, ((float2(loadIndex) + float2(0.25f, 0.25f)) / float2(dims)), level(0.0f)).rgb;
+ (*(tint_symbol_1)).arr[r].arr[((4u * LocalInvocationID[0]) + c)] = float4(tint_symbol_2.sample(tint_symbol_3, ((float2(loadIndex) + float2(0.25f, 0.25f)) / float2(dims)), level(0.0f))).rgb;
}
}
threadgroup_barrier(mem_flags::mem_threadgroup);
@@ -39,9 +39,9 @@
for(uint c = 0u; (c < 4u); c = (c + 1u)) {
int2 writeIndex = as_type<int2>((as_type<uint2>(baseIndex) + as_type<uint2>(int2(int(c), int(r)))));
if ((flip.value != 0u)) {
- writeIndex = writeIndex.yx;
+ writeIndex = int2(writeIndex).yx;
}
- uint const center = ((4u * LocalInvocationID.x) + c);
+ uint const center = ((4u * LocalInvocationID[0]) + c);
if ((((center >= filterOffset) && (center < (256u - filterOffset))) && all((writeIndex < dims)))) {
float3 acc = float3(0.0f, 0.0f, 0.0f);
for(uint f = 0u; (f < params.filterDim); f = (f + 1u)) {
diff --git a/test/bug/tint/943.spvasm.expected.msl b/test/bug/tint/943.spvasm.expected.msl
index a8806ca..d3178ac 100644
--- a/test/bug/tint/943.spvasm.expected.msl
+++ b/test/bug/tint/943.spvasm.expected.msl
@@ -58,8 +58,8 @@
int2 param_10 = 0;
int2 param_11 = 0;
float x_430 = 0.0f;
- int const x_417 = x_48.aShape.y;
- int const x_419 = x_48.aShape.z;
+ int const x_417 = x_48.aShape[1];
+ int const x_419 = x_48.aShape[2];
batchASize = as_type<int>((as_type<uint>(x_417) * as_type<uint>(x_419)));
int const x_421 = *(row);
int const x_422 = *(col);
@@ -88,8 +88,8 @@
int2 param_12 = 0;
int2 param_13 = 0;
float x_468 = 0.0f;
- int const x_455 = x_48.bShape.y;
- int const x_457 = x_48.bShape.z;
+ int const x_455 = x_48.bShape[1];
+ int const x_457 = x_48.bShape[2];
batchBSize = as_type<int>((as_type<uint>(x_455) * as_type<uint>(x_457)));
int const x_459 = *(row_1);
int const x_460 = *(col_1);
@@ -115,8 +115,8 @@
int getOutputFlatIndex_vi3_(constant Uniforms& x_48, thread int3* const coords) {
int3 const x_99 = *(coords);
- int const x_105 = x_48.outShapeStrides.x;
- int const x_107 = x_48.outShapeStrides.y;
+ int const x_105 = x_48.outShapeStrides[0];
+ int const x_107 = x_48.outShapeStrides[1];
return int(dot(float3(x_99), float3(int3(x_105, x_107, 1))));
}
@@ -203,13 +203,13 @@
int param_7 = 0;
int param_8 = 0;
float param_9 = 0.0f;
- uint const x_132 = (*(tint_symbol_9)).y;
+ uint const x_132 = (*(tint_symbol_9))[1];
tileRow = as_type<int>((as_type<uint>(as_type<int>(x_132)) * as_type<uint>(1)));
- uint const x_137 = (*(tint_symbol_9)).x;
+ uint const x_137 = (*(tint_symbol_9))[0];
tileCol = as_type<int>((as_type<uint>(as_type<int>(x_137)) * as_type<uint>(1)));
- uint const x_143 = (*(tint_symbol_10)).y;
+ uint const x_143 = (*(tint_symbol_10))[1];
globalRow = as_type<int>((as_type<uint>(as_type<int>(x_143)) * as_type<uint>(1)));
- uint const x_148 = (*(tint_symbol_10)).x;
+ uint const x_148 = (*(tint_symbol_10))[0];
globalCol = as_type<int>((as_type<uint>(as_type<int>(x_148)) * as_type<uint>(1)));
int const x_152 = *(dimInner);
numTiles = as_type<int>((as_type<uint>((as_type<int>((as_type<uint>(x_152) - as_type<uint>(1))) / 64)) + as_type<uint>(1)));
@@ -240,9 +240,9 @@
innerRow = as_type<int>((as_type<uint>(x_183) + as_type<uint>(1)));
}
}
- uint const x_187 = (*(tint_symbol_9)).x;
+ uint const x_187 = (*(tint_symbol_9))[0];
tileColA = as_type<int>((as_type<uint>(as_type<int>(x_187)) * as_type<uint>(64)));
- uint const x_192 = (*(tint_symbol_9)).y;
+ uint const x_192 = (*(tint_symbol_9))[1];
tileRowB = as_type<int>((as_type<uint>(as_type<int>(x_192)) * as_type<uint>(1)));
t = 0;
while (true) {
@@ -464,13 +464,13 @@
int param_18 = 0;
int param_19 = 0;
int param_20 = 0;
- int const x_67 = x_48.aShape.y;
+ int const x_67 = x_48.aShape[1];
*(tint_symbol_17) = x_67;
- int const x_71 = x_48.aShape.z;
+ int const x_71 = x_48.aShape[2];
*(tint_symbol_18) = x_71;
- int const x_75 = x_48.bShape.z;
+ int const x_75 = x_48.bShape[2];
*(tint_symbol_19) = x_75;
- uint const x_505 = (*(tint_symbol_20)).z;
+ uint const x_505 = (*(tint_symbol_20))[2];
*(tint_symbol_21) = as_type<int>(x_505);
int const x_508 = *(tint_symbol_17);
param_18 = x_508;
diff --git a/test/bug/tint/948.wgsl.expected.msl b/test/bug/tint/948.wgsl.expected.msl
index a0e0430..711b38f 100644
--- a/test/bug/tint/948.wgsl.expected.msl
+++ b/test/bug/tint/948.wgsl.expected.msl
@@ -51,7 +51,7 @@
float4 const x_47 = tint_symbol_5.sample(tint_symbol_6, float2(x_44, 0.25f), bias(0.0f));
float const x_51 = fX;
float4 const x_54 = tint_symbol_5.sample(tint_symbol_6, float2(x_51, 0.5f), bias(0.0f));
- return float4x4(float4(x_40.x, x_40.y, x_40.z, x_40.w), float4(x_47.x, x_47.y, x_47.z, x_47.w), float4(x_54.x, x_54.y, x_54.z, x_54.w), float4(float4(0.0f, 0.0f, 0.0f, 0.0f).x, float4(0.0f, 0.0f, 0.0f, 0.0f).y, float4(0.0f, 0.0f, 0.0f, 0.0f).z, float4(0.0f, 0.0f, 0.0f, 0.0f).w));
+ return float4x4(float4(x_40[0], x_40[1], x_40[2], x_40[3]), float4(x_47[0], x_47[1], x_47[2], x_47[3]), float4(x_54[0], x_54[1], x_54[2], x_54[3]), float4(float4(0.0f, 0.0f, 0.0f, 0.0f)[0], float4(0.0f, 0.0f, 0.0f, 0.0f)[1], float4(0.0f, 0.0f, 0.0f, 0.0f)[2], float4(0.0f, 0.0f, 0.0f, 0.0f)[3]));
}
void main_1(constant LeftOver& x_20, thread float2* const tint_symbol_7, texture2d<float, access::sample> tint_symbol_8, sampler tint_symbol_9, texture2d<float, access::sample> tint_symbol_10, texture2d<float, access::sample> tint_symbol_11, sampler tint_symbol_12, thread float* const tint_symbol_13, texture2d<float, access::sample> tint_symbol_14, sampler tint_symbol_15, texture2d<float, access::sample> tint_symbol_16, sampler tint_symbol_17, thread float4* const tint_symbol_18) {
@@ -76,8 +76,8 @@
color = float4(0.0f, 0.0f, 0.0f, 0.0f);
float2 const x_86 = *(tint_symbol_7);
tileUV = fract(x_86);
- float const x_91 = tileUV.y;
- tileUV.y = (1.0f - x_91);
+ float const x_91 = tileUV[1];
+ tileUV[1] = (1.0f - x_91);
float2 const x_95 = *(tint_symbol_7);
tileID = floor(x_95);
float2 const x_101 = x_20.spriteMapSize;
@@ -99,14 +99,14 @@
float2 const x_150 = tileID;
float2 const x_154 = x_20.stageSize;
float4 const x_156 = tint_symbol_8.sample(tint_symbol_9, ((x_150 + float2(0.5f, 0.5f)) / x_154), bias(0.0f));
- frameID_1 = x_156.x;
+ frameID_1 = x_156[0];
break;
}
case 0: {
float2 const x_136 = tileID;
float2 const x_140 = x_20.stageSize;
float4 const x_142 = tint_symbol_10.sample(tint_symbol_9, ((x_136 + float2(0.5f, 0.5f)) / x_140), bias(0.0f));
- frameID_1 = x_142.x;
+ frameID_1 = x_142[0];
break;
}
default: {
@@ -117,10 +117,10 @@
float const x_169 = x_20.spriteCount;
float4 const x_172 = tint_symbol_11.sample(tint_symbol_12, float2(((x_166 + 0.5f) / x_169), 0.0f), bias(0.0f));
animationData = x_172;
- float const x_174 = animationData.y;
+ float const x_174 = animationData[1];
if ((x_174 > 0.0f)) {
float const x_181 = x_20.time;
- float const x_184 = animationData.z;
+ float const x_184 = animationData[2];
*(tint_symbol_13) = fmod((x_181 * x_184), 1.0f);
f = 0.0f;
while (true) {
@@ -129,10 +129,10 @@
} else {
break;
}
- float const x_197 = animationData.y;
+ float const x_197 = animationData[1];
float const x_198 = *(tint_symbol_13);
if ((x_197 > x_198)) {
- float const x_203 = animationData.x;
+ float const x_203 = animationData[0];
frameID_1 = x_203;
break;
}
@@ -153,17 +153,17 @@
frameData = x_225;
float4 const x_228 = frameData[0];
float2 const x_231 = x_20.spriteMapSize;
- frameSize = (float2(x_228.w, x_228.z) / x_231);
+ frameSize = (float2(x_228[3], x_228[2]) / x_231);
float4 const x_235 = frameData[0];
float2 const x_237 = sheetUnits;
- offset_1 = (float2(x_235.x, x_235.y) * x_237);
+ offset_1 = (float2(x_235[0], x_235[1]) * x_237);
float4 const x_241 = frameData[2];
float4 const x_244 = frameData[0];
- ratio = (float2(x_241.x, x_241.y) / float2(x_244.w, x_244.z));
- float const x_248 = frameData[2].z;
+ ratio = (float2(x_241[0], x_241[1]) / float2(x_244[3], x_244[2]));
+ float const x_248 = frameData[2][2];
if ((x_248 == 1.0f)) {
float2 const x_252 = tileUV;
- tileUV = float2(x_252.y, x_252.x);
+ tileUV = float2(x_252[1], x_252[0]);
}
int const x_254 = i;
if ((x_254 == 0)) {
@@ -178,16 +178,16 @@
float2 const x_277 = offset_1;
float4 const x_279 = tint_symbol_16.sample(tint_symbol_17, ((x_274 * x_275) + x_277));
nc = x_279;
- float const x_283 = color.w;
- float const x_285 = nc.w;
+ float const x_283 = color[3];
+ float const x_285 = nc[3];
alpha = fmin((x_283 + x_285), 1.0f);
float4 const x_290 = color;
float4 const x_292 = nc;
- float const x_295 = nc.w;
- mixed = mix(float3(x_290.x, x_290.y, x_290.z), float3(x_292.x, x_292.y, x_292.z), float3(x_295, x_295, x_295));
+ float const x_295 = nc[3];
+ mixed = mix(float3(x_290[0], x_290[1], x_290[2]), float3(x_292[0], x_292[1], x_292[2]), float3(x_295, x_295, x_295));
float3 const x_298 = mixed;
float const x_299 = alpha;
- color = float4(x_298.x, x_298.y, x_298.z, x_299);
+ color = float4(x_298[0], x_298[1], x_298[2], x_299);
}
{
int const x_304 = i;
@@ -196,9 +196,9 @@
}
float3 const x_310 = x_20.colorMul;
float4 const x_311 = color;
- float3 const x_313 = (float3(x_311.x, x_311.y, x_311.z) * x_310);
+ float3 const x_313 = (float3(x_311[0], x_311[1], x_311[2]) * x_310);
float4 const x_314 = color;
- color = float4(x_313.x, x_313.y, x_313.z, x_314.w);
+ color = float4(x_313[0], x_313[1], x_313[2], x_314[3]);
float4 const x_318 = color;
*(tint_symbol_18) = x_318;
return;
diff --git a/test/bug/tint/949.wgsl.expected.msl b/test/bug/tint/949.wgsl.expected.msl
index 776865d..c3a16ec 100644
--- a/test/bug/tint/949.wgsl.expected.msl
+++ b/test/bug/tint/949.wgsl.expected.msl
@@ -76,19 +76,19 @@
float3 const x_150 = dp1;
dp1perp = cross(x_149, x_150);
float3 const x_153 = dp2perp;
- float const x_155 = duv1.x;
+ float const x_155 = duv1[0];
float3 const x_157 = dp1perp;
- float const x_159 = duv2.x;
+ float const x_159 = duv2[0];
tangent = ((x_153 * x_155) + (x_157 * x_159));
float3 const x_163 = dp2perp;
- float const x_165 = duv1.y;
+ float const x_165 = duv1[1];
float3 const x_167 = dp1perp;
- float const x_169 = duv2.y;
+ float const x_169 = duv2[1];
bitangent = ((x_163 * x_165) + (x_167 * x_169));
- float const x_173 = (*(tangentSpaceParams)).x;
+ float const x_173 = (*(tangentSpaceParams))[0];
float3 const x_174 = tangent;
tangent = (x_174 * x_173);
- float const x_177 = (*(tangentSpaceParams)).y;
+ float const x_177 = (*(tangentSpaceParams))[1];
float3 const x_178 = bitangent;
bitangent = (x_178 * x_177);
float3 const x_181 = tangent;
@@ -103,7 +103,7 @@
float const x_193 = invmax;
float3 const x_194 = (x_192 * x_193);
float3 const x_195 = *(normal_1);
- return float3x3(float3(x_191.x, x_191.y, x_191.z), float3(x_194.x, x_194.y, x_194.z), float3(x_195.x, x_195.y, x_195.z));
+ return float3x3(float3(x_191[0], x_191[1], x_191[2]), float3(x_194[0], x_194[1], x_194[2]), float3(x_195[0], x_195[1], x_195[2]));
}
float3x3 transposeMat3_mf33_(thread float3x3* const inMatrix) {
@@ -117,19 +117,19 @@
i1 = x_64;
float3 const x_68 = (*(inMatrix))[2];
i2 = x_68;
- float const x_73 = i0.x;
- float const x_75 = i1.x;
- float const x_77 = i2.x;
+ float const x_73 = i0[0];
+ float const x_75 = i1[0];
+ float const x_77 = i2[0];
float3 const x_78 = float3(x_73, x_75, x_77);
- float const x_81 = i0.y;
- float const x_83 = i1.y;
- float const x_85 = i2.y;
+ float const x_81 = i0[1];
+ float const x_83 = i1[1];
+ float const x_85 = i2[1];
float3 const x_86 = float3(x_81, x_83, x_85);
- float const x_89 = i0.z;
- float const x_91 = i1.z;
- float const x_93 = i2.z;
+ float const x_89 = i0[2];
+ float const x_91 = i1[2];
+ float const x_93 = i2[2];
float3 const x_94 = float3(x_89, x_91, x_93);
- outMatrix = float3x3(float3(x_78.x, x_78.y, x_78.z), float3(x_86.x, x_86.y, x_86.z), float3(x_94.x, x_94.y, x_94.z));
+ outMatrix = float3x3(float3(x_78[0], x_78[1], x_78[2]), float3(x_86[0], x_86[1], x_86[2]), float3(x_94[0], x_94[1], x_94[2]));
float3x3 const x_110 = outMatrix;
return x_110;
}
@@ -161,14 +161,14 @@
float specComp = 0.0f;
float3 const x_212 = *(vNormal);
float4 const x_213 = *(lightData);
- ndl = ((dot(x_212, float3(x_213.x, x_213.y, x_213.z)) * 0.5f) + 0.5f);
+ ndl = ((dot(x_212, float3(x_213[0], x_213[1], x_213[2])) * 0.5f) + 0.5f);
float3 const x_220 = *(groundColor);
float3 const x_221 = *(diffuseColor);
float const x_222 = ndl;
result.diffuse = mix(x_220, x_221, float3(x_222, x_222, x_222));
float3 const x_227 = *(viewDirectionW);
float4 const x_228 = *(lightData);
- angleW = normalize((x_227 + float3(x_228.x, x_228.y, x_228.z)));
+ angleW = normalize((x_227 + float3(x_228[0], x_228[1], x_228[2])));
float3 const x_233 = *(vNormal);
float3 const x_234 = angleW;
specComp = fmax(0.0f, dot(x_233, x_234));
@@ -243,10 +243,10 @@
tempTextureRead = x_262;
float4 const x_264 = tempTextureRead;
float const x_273 = x_269.textureInfoName;
- rgb = (float3(x_264.x, x_264.y, x_264.z) * x_273);
+ rgb = (float3(x_264[0], x_264[1], x_264[2]) * x_273);
float3 const x_279 = x_269.u_cameraPosition;
float4 const x_282 = *(tint_symbol_10);
- output5 = normalize((x_279 - float3(x_282.x, x_282.y, x_282.z)));
+ output5 = normalize((x_279 - float3(x_282[0], x_282[1], x_282[2])));
output4 = float4(0.0f, 0.0f, 0.0f, 0.0f);
uvOffset = float2(0.0f, 0.0f);
float const x_292 = x_269.u_bumpStrength;
@@ -263,9 +263,9 @@
TBNUV = x_307;
float4 const x_310 = *(tint_symbol_13);
float const x_312 = normalScale;
- param_3 = (float3(x_310.x, x_310.y, x_310.z) * x_312);
+ param_3 = (float3(x_310[0], x_310[1], x_310[2]) * x_312);
float4 const x_317 = *(tint_symbol_10);
- param_4 = float3(x_317.x, x_317.y, x_317.z);
+ param_4 = float3(x_317[0], x_317[1], x_317[2]);
float2 const x_320 = TBNUV;
param_5 = x_320;
float2 const x_324 = x_269.tangentSpaceParameter0;
@@ -281,14 +281,14 @@
float3 const x_334 = (x_331 * -(x_332));
float3x3 const x_337 = invTBN;
float3 const x_338 = output5;
- parallaxLimit = (length(float2(x_334.x, x_334.y)) / ((x_337 * -(x_338))).z);
+ parallaxLimit = (length(float2(x_334[0], x_334[1])) / ((x_337 * -(x_338)))[2]);
float const x_345 = x_269.u_parallaxScale;
float const x_346 = parallaxLimit;
parallaxLimit = (x_346 * x_345);
float3x3 const x_349 = invTBN;
float3 const x_350 = output5;
float3 const x_352 = (x_349 * -(x_350));
- vOffsetDir = normalize(float2(x_352.x, x_352.y));
+ vOffsetDir = normalize(float2(x_352[0], x_352[1]));
float2 const x_356 = vOffsetDir;
float const x_357 = parallaxLimit;
vMaxOffset = (x_356 * x_357);
@@ -296,7 +296,7 @@
float3 const x_362 = output5;
float3x3 const x_365 = invTBN;
float4 const x_366 = *(tint_symbol_13);
- numSamples = (15.0f + (dot((x_361 * -(x_362)), (x_365 * float3(x_366.x, x_366.y, x_366.z))) * -11.0f));
+ numSamples = (15.0f + (dot((x_361 * -(x_362)), (x_365 * float3(x_366[0], x_366[1], x_366[2]))) * -11.0f));
float const x_374 = numSamples;
stepSize = (1.0f / x_374);
currRayHeight = 1.0f;
@@ -314,7 +314,7 @@
float2 const x_394 = *(tint_symbol_12);
float2 const x_395 = vCurrOffset;
float4 const x_397 = tint_symbol_8.sample(tint_symbol_9, (x_394 + x_395));
- currSampledHeight = x_397.w;
+ currSampledHeight = x_397[3];
float const x_400 = currSampledHeight;
float const x_401 = currRayHeight;
if ((x_400 > x_401)) {
@@ -363,11 +363,11 @@
float const x_454 = x_269.u_bumpStrength;
float3x3 const x_457 = TBN;
param_8 = x_457;
- param_9 = float3(x_452.x, x_452.y, x_452.z);
+ param_9 = float3(x_452[0], x_452[1], x_452[2]);
param_10 = (1.0f / x_454);
float3 const x_461 = perturbNormal_mf33_vf3_f1_(&(param_8), &(param_9), &(param_10));
float4 const x_462 = output4;
- output4 = float4(x_461.x, x_461.y, x_461.z, x_462.w);
+ output4 = float4(x_461[0], x_461[1], x_461[2], x_462[3]);
float2 const x_465 = *(tint_symbol_12);
float2 const x_466 = uvOffset;
output6 = (x_465 + x_466);
@@ -375,17 +375,17 @@
float4 const x_475 = tint_symbol_14.sample(tint_symbol_15, x_474);
tempTextureRead1 = x_475;
float4 const x_477 = tempTextureRead1;
- rgb1 = float3(x_477.x, x_477.y, x_477.z);
+ rgb1 = float3(x_477[0], x_477[1], x_477[2]);
float3 const x_481 = x_269.u_cameraPosition;
float4 const x_482 = *(tint_symbol_10);
- viewDirectionW_1 = normalize((x_481 - float3(x_482.x, x_482.y, x_482.z)));
+ viewDirectionW_1 = normalize((x_481 - float3(x_482[0], x_482[1], x_482[2])));
shadow = 1.0f;
float const x_488 = *(tint_symbol_5);
glossiness_1 = (1.0f * x_488);
diffuseBase = float3(0.0f, 0.0f, 0.0f);
specularBase = float3(0.0f, 0.0f, 0.0f);
float4 const x_494 = output4;
- normalW = float3(x_494.x, x_494.y, x_494.z);
+ normalW = float3(x_494[0], x_494[1], x_494[2]);
float3 const x_501 = viewDirectionW_1;
param_11 = x_501;
float3 const x_503 = normalW;
@@ -393,9 +393,9 @@
float4 const x_507 = light0.vLightData;
param_13 = x_507;
float4 const x_510 = light0.vLightDiffuse;
- param_14 = float3(x_510.x, x_510.y, x_510.z);
+ param_14 = float3(x_510[0], x_510[1], x_510[2]);
float4 const x_514 = light0.vLightSpecular;
- param_15 = float3(x_514.x, x_514.y, x_514.z);
+ param_15 = float3(x_514[0], x_514[1], x_514[2]);
float3 const x_518 = light0.vLightGround;
param_16 = x_518;
float const x_520 = glossiness_1;
@@ -421,7 +421,7 @@
float3 const x_544 = specularOutput;
output3 = (x_543 + x_544);
float3 const x_548 = output3;
- *(tint_symbol_16) = float4(x_548.x, x_548.y, x_548.z, 1.0f);
+ *(tint_symbol_16) = float4(x_548[0], x_548[1], x_548[2], 1.0f);
return;
}
diff --git a/test/bug/tint/951.spvasm.expected.msl b/test/bug/tint/951.spvasm.expected.msl
index b8d78da..57b22d3 100644
--- a/test/bug/tint/951.spvasm.expected.msl
+++ b/test/bug/tint/951.spvasm.expected.msl
@@ -16,7 +16,7 @@
};
float getAAtOutCoords_(const device ssbA& x_20, thread uint3* const tint_symbol_2) {
- uint const x_42 = (*(tint_symbol_2)).x;
+ uint const x_42 = (*(tint_symbol_2))[0];
float const x_44 = x_20.A[x_42];
return x_44;
}
@@ -43,7 +43,7 @@
float param = 0.0f;
int param_1 = 0;
float param_2 = 0.0f;
- uint const x_61 = (*(tint_symbol_3)).x;
+ uint const x_61 = (*(tint_symbol_3))[0];
index = as_type<int>(x_61);
int const x_63 = index;
int const x_70 = x_24.size;
diff --git a/test/bug/tint/977.spvasm.expected.msl b/test/bug/tint/977.spvasm.expected.msl
index fc98b33..c729f30 100644
--- a/test/bug/tint/977.spvasm.expected.msl
+++ b/test/bug/tint/977.spvasm.expected.msl
@@ -42,7 +42,7 @@
int a_1 = 0;
float param = 0.0f;
float param_1 = 0.0f;
- uint const x_54 = (*(tint_symbol_2)).x;
+ uint const x_54 = (*(tint_symbol_2))[0];
index = as_type<int>(x_54);
a_1 = -10;
int const x_63 = index;
diff --git a/test/expressions/splat/with_swizzle/f32.wgsl.expected.msl b/test/expressions/splat/with_swizzle/f32.wgsl.expected.msl
index 64e4f8c..2f9ac2a 100644
--- a/test/expressions/splat/with_swizzle/f32.wgsl.expected.msl
+++ b/test/expressions/splat/with_swizzle/f32.wgsl.expected.msl
@@ -2,8 +2,8 @@
using namespace metal;
void f() {
- float a = float2(1.0f).y;
- float b = float3(1.0f).z;
- float c = float4(1.0f).w;
+ float a = float2(1.0f)[1];
+ float b = float3(1.0f)[2];
+ float c = float4(1.0f)[3];
}
diff --git a/test/expressions/swizzle/read/packed_vec3/f32.wgsl b/test/expressions/swizzle/read/packed_vec3/f32.wgsl
new file mode 100644
index 0000000..81a9220
--- /dev/null
+++ b/test/expressions/swizzle/read/packed_vec3/f32.wgsl
@@ -0,0 +1,144 @@
+[[block]]
+struct S {
+ v: vec3<f32>;
+};
+
+[[group(0), binding(0)]] var<uniform> U : S;
+
+fn f() {
+ var v = U.v;
+
+ var x = U.v.x;
+ var y = U.v.y;
+ var z = U.v.z;
+
+ var xx = U.v.xx;
+ var xy = U.v.xy;
+ var xz = U.v.xz;
+ var yx = U.v.yx;
+ var yy = U.v.yy;
+ var yz = U.v.yz;
+ var zx = U.v.zx;
+ var zy = U.v.zy;
+ var zz = U.v.zz;
+
+ var xxx = U.v.xxx;
+ var xxy = U.v.xxy;
+ var xxz = U.v.xxz;
+ var xyx = U.v.xyx;
+ var xyy = U.v.xyy;
+ var xyz = U.v.xyz;
+ var xzx = U.v.xzx;
+ var xzy = U.v.xzy;
+ var xzz = U.v.xzz;
+
+ var yxx = U.v.yxx;
+ var yxy = U.v.yxy;
+ var yxz = U.v.yxz;
+ var yyx = U.v.yyx;
+ var yyy = U.v.yyy;
+ var yyz = U.v.yyz;
+ var yzx = U.v.yzx;
+ var yzy = U.v.yzy;
+ var yzz = U.v.yzz;
+
+ var zxx = U.v.zxx;
+ var zxy = U.v.zxy;
+ var zxz = U.v.zxz;
+ var zyx = U.v.zyx;
+ var zyy = U.v.zyy;
+ var zyz = U.v.zyz;
+ var zzx = U.v.zzx;
+ var zzy = U.v.zzy;
+ var zzz = U.v.zzz;
+
+ var xxxx = U.v.xxxx;
+ var xxxy = U.v.xxxy;
+ var xxxz = U.v.xxxz;
+ var xxyx = U.v.xxyx;
+ var xxyy = U.v.xxyy;
+ var xxyz = U.v.xxyz;
+ var xxzx = U.v.xxzx;
+ var xxzy = U.v.xxzy;
+ var xxzz = U.v.xxzz;
+
+ var xyxx = U.v.xyxx;
+ var xyxy = U.v.xyxy;
+ var xyxz = U.v.xyxz;
+ var xyyx = U.v.xyyx;
+ var xyyy = U.v.xyyy;
+ var xyyz = U.v.xyyz;
+ var xyzx = U.v.xyzx;
+ var xyzy = U.v.xyzy;
+ var xyzz = U.v.xyzz;
+
+ var xzxx = U.v.xzxx;
+ var xzxy = U.v.xzxy;
+ var xzxz = U.v.xzxz;
+ var xzyx = U.v.xzyx;
+ var xzyy = U.v.xzyy;
+ var xzyz = U.v.xzyz;
+ var xzzx = U.v.xzzx;
+ var xzzy = U.v.xzzy;
+ var xzzz = U.v.xzzz;
+
+ var yxxx = U.v.yxxx;
+ var yxxy = U.v.yxxy;
+ var yxxz = U.v.yxxz;
+ var yxyx = U.v.yxyx;
+ var yxyy = U.v.yxyy;
+ var yxyz = U.v.yxyz;
+ var yxzx = U.v.yxzx;
+ var yxzy = U.v.yxzy;
+ var yxzz = U.v.yxzz;
+
+ var yyxx = U.v.yyxx;
+ var yyxy = U.v.yyxy;
+ var yyxz = U.v.yyxz;
+ var yyyx = U.v.yyyx;
+ var yyyy = U.v.yyyy;
+ var yyyz = U.v.yyyz;
+ var yyzx = U.v.yyzx;
+ var yyzy = U.v.yyzy;
+ var yyzz = U.v.yyzz;
+
+ var yzxx = U.v.yzxx;
+ var yzxy = U.v.yzxy;
+ var yzxz = U.v.yzxz;
+ var yzyx = U.v.yzyx;
+ var yzyy = U.v.yzyy;
+ var yzyz = U.v.yzyz;
+ var yzzx = U.v.yzzx;
+ var yzzy = U.v.yzzy;
+ var yzzz = U.v.yzzz;
+
+ var zxxx = U.v.zxxx;
+ var zxxy = U.v.zxxy;
+ var zxxz = U.v.zxxz;
+ var zxyx = U.v.zxyx;
+ var zxyy = U.v.zxyy;
+ var zxyz = U.v.zxyz;
+ var zxzx = U.v.zxzx;
+ var zxzy = U.v.zxzy;
+ var zxzz = U.v.zxzz;
+
+ var zyxx = U.v.zyxx;
+ var zyxy = U.v.zyxy;
+ var zyxz = U.v.zyxz;
+ var zyyx = U.v.zyyx;
+ var zyyy = U.v.zyyy;
+ var zyyz = U.v.zyyz;
+ var zyzx = U.v.zyzx;
+ var zyzy = U.v.zyzy;
+ var zyzz = U.v.zyzz;
+
+ var zzxx = U.v.zzxx;
+ var zzxy = U.v.zzxy;
+ var zzxz = U.v.zzxz;
+ var zzyx = U.v.zzyx;
+ var zzyy = U.v.zzyy;
+ var zzyz = U.v.zzyz;
+ var zzzx = U.v.zzzx;
+ var zzzy = U.v.zzzy;
+ var zzzz = U.v.zzzz;
+}
diff --git a/test/expressions/swizzle/read/packed_vec3/f32.wgsl.expected.hlsl b/test/expressions/swizzle/read/packed_vec3/f32.wgsl.expected.hlsl
new file mode 100644
index 0000000..a0fa0de
--- /dev/null
+++ b/test/expressions/swizzle/read/packed_vec3/f32.wgsl.expected.hlsl
@@ -0,0 +1,132 @@
+[numthreads(1, 1, 1)]
+void unused_entry_point() {
+ return;
+}
+
+cbuffer cbuffer_U : register(b0, space0) {
+ uint4 U[1];
+};
+
+void f() {
+ float3 v = asfloat(U[0].xyz);
+ float x = asfloat(U[0].x);
+ float y = asfloat(U[0].y);
+ float z = asfloat(U[0].z);
+ float2 xx = asfloat(U[0].xyz).xx;
+ float2 xy = asfloat(U[0].xyz).xy;
+ float2 xz = asfloat(U[0].xyz).xz;
+ float2 yx = asfloat(U[0].xyz).yx;
+ float2 yy = asfloat(U[0].xyz).yy;
+ float2 yz = asfloat(U[0].xyz).yz;
+ float2 zx = asfloat(U[0].xyz).zx;
+ float2 zy = asfloat(U[0].xyz).zy;
+ float2 zz = asfloat(U[0].xyz).zz;
+ float3 xxx = asfloat(U[0].xyz).xxx;
+ float3 xxy = asfloat(U[0].xyz).xxy;
+ float3 xxz = asfloat(U[0].xyz).xxz;
+ float3 xyx = asfloat(U[0].xyz).xyx;
+ float3 xyy = asfloat(U[0].xyz).xyy;
+ float3 xyz = asfloat(U[0].xyz).xyz;
+ float3 xzx = asfloat(U[0].xyz).xzx;
+ float3 xzy = asfloat(U[0].xyz).xzy;
+ float3 xzz = asfloat(U[0].xyz).xzz;
+ float3 yxx = asfloat(U[0].xyz).yxx;
+ float3 yxy = asfloat(U[0].xyz).yxy;
+ float3 yxz = asfloat(U[0].xyz).yxz;
+ float3 yyx = asfloat(U[0].xyz).yyx;
+ float3 yyy = asfloat(U[0].xyz).yyy;
+ float3 yyz = asfloat(U[0].xyz).yyz;
+ float3 yzx = asfloat(U[0].xyz).yzx;
+ float3 yzy = asfloat(U[0].xyz).yzy;
+ float3 yzz = asfloat(U[0].xyz).yzz;
+ float3 zxx = asfloat(U[0].xyz).zxx;
+ float3 zxy = asfloat(U[0].xyz).zxy;
+ float3 zxz = asfloat(U[0].xyz).zxz;
+ float3 zyx = asfloat(U[0].xyz).zyx;
+ float3 zyy = asfloat(U[0].xyz).zyy;
+ float3 zyz = asfloat(U[0].xyz).zyz;
+ float3 zzx = asfloat(U[0].xyz).zzx;
+ float3 zzy = asfloat(U[0].xyz).zzy;
+ float3 zzz = asfloat(U[0].xyz).zzz;
+ float4 xxxx = asfloat(U[0].xyz).xxxx;
+ float4 xxxy = asfloat(U[0].xyz).xxxy;
+ float4 xxxz = asfloat(U[0].xyz).xxxz;
+ float4 xxyx = asfloat(U[0].xyz).xxyx;
+ float4 xxyy = asfloat(U[0].xyz).xxyy;
+ float4 xxyz = asfloat(U[0].xyz).xxyz;
+ float4 xxzx = asfloat(U[0].xyz).xxzx;
+ float4 xxzy = asfloat(U[0].xyz).xxzy;
+ float4 xxzz = asfloat(U[0].xyz).xxzz;
+ float4 xyxx = asfloat(U[0].xyz).xyxx;
+ float4 xyxy = asfloat(U[0].xyz).xyxy;
+ float4 xyxz = asfloat(U[0].xyz).xyxz;
+ float4 xyyx = asfloat(U[0].xyz).xyyx;
+ float4 xyyy = asfloat(U[0].xyz).xyyy;
+ float4 xyyz = asfloat(U[0].xyz).xyyz;
+ float4 xyzx = asfloat(U[0].xyz).xyzx;
+ float4 xyzy = asfloat(U[0].xyz).xyzy;
+ float4 xyzz = asfloat(U[0].xyz).xyzz;
+ float4 xzxx = asfloat(U[0].xyz).xzxx;
+ float4 xzxy = asfloat(U[0].xyz).xzxy;
+ float4 xzxz = asfloat(U[0].xyz).xzxz;
+ float4 xzyx = asfloat(U[0].xyz).xzyx;
+ float4 xzyy = asfloat(U[0].xyz).xzyy;
+ float4 xzyz = asfloat(U[0].xyz).xzyz;
+ float4 xzzx = asfloat(U[0].xyz).xzzx;
+ float4 xzzy = asfloat(U[0].xyz).xzzy;
+ float4 xzzz = asfloat(U[0].xyz).xzzz;
+ float4 yxxx = asfloat(U[0].xyz).yxxx;
+ float4 yxxy = asfloat(U[0].xyz).yxxy;
+ float4 yxxz = asfloat(U[0].xyz).yxxz;
+ float4 yxyx = asfloat(U[0].xyz).yxyx;
+ float4 yxyy = asfloat(U[0].xyz).yxyy;
+ float4 yxyz = asfloat(U[0].xyz).yxyz;
+ float4 yxzx = asfloat(U[0].xyz).yxzx;
+ float4 yxzy = asfloat(U[0].xyz).yxzy;
+ float4 yxzz = asfloat(U[0].xyz).yxzz;
+ float4 yyxx = asfloat(U[0].xyz).yyxx;
+ float4 yyxy = asfloat(U[0].xyz).yyxy;
+ float4 yyxz = asfloat(U[0].xyz).yyxz;
+ float4 yyyx = asfloat(U[0].xyz).yyyx;
+ float4 yyyy = asfloat(U[0].xyz).yyyy;
+ float4 yyyz = asfloat(U[0].xyz).yyyz;
+ float4 yyzx = asfloat(U[0].xyz).yyzx;
+ float4 yyzy = asfloat(U[0].xyz).yyzy;
+ float4 yyzz = asfloat(U[0].xyz).yyzz;
+ float4 yzxx = asfloat(U[0].xyz).yzxx;
+ float4 yzxy = asfloat(U[0].xyz).yzxy;
+ float4 yzxz = asfloat(U[0].xyz).yzxz;
+ float4 yzyx = asfloat(U[0].xyz).yzyx;
+ float4 yzyy = asfloat(U[0].xyz).yzyy;
+ float4 yzyz = asfloat(U[0].xyz).yzyz;
+ float4 yzzx = asfloat(U[0].xyz).yzzx;
+ float4 yzzy = asfloat(U[0].xyz).yzzy;
+ float4 yzzz = asfloat(U[0].xyz).yzzz;
+ float4 zxxx = asfloat(U[0].xyz).zxxx;
+ float4 zxxy = asfloat(U[0].xyz).zxxy;
+ float4 zxxz = asfloat(U[0].xyz).zxxz;
+ float4 zxyx = asfloat(U[0].xyz).zxyx;
+ float4 zxyy = asfloat(U[0].xyz).zxyy;
+ float4 zxyz = asfloat(U[0].xyz).zxyz;
+ float4 zxzx = asfloat(U[0].xyz).zxzx;
+ float4 zxzy = asfloat(U[0].xyz).zxzy;
+ float4 zxzz = asfloat(U[0].xyz).zxzz;
+ float4 zyxx = asfloat(U[0].xyz).zyxx;
+ float4 zyxy = asfloat(U[0].xyz).zyxy;
+ float4 zyxz = asfloat(U[0].xyz).zyxz;
+ float4 zyyx = asfloat(U[0].xyz).zyyx;
+ float4 zyyy = asfloat(U[0].xyz).zyyy;
+ float4 zyyz = asfloat(U[0].xyz).zyyz;
+ float4 zyzx = asfloat(U[0].xyz).zyzx;
+ float4 zyzy = asfloat(U[0].xyz).zyzy;
+ float4 zyzz = asfloat(U[0].xyz).zyzz;
+ float4 zzxx = asfloat(U[0].xyz).zzxx;
+ float4 zzxy = asfloat(U[0].xyz).zzxy;
+ float4 zzxz = asfloat(U[0].xyz).zzxz;
+ float4 zzyx = asfloat(U[0].xyz).zzyx;
+ float4 zzyy = asfloat(U[0].xyz).zzyy;
+ float4 zzyz = asfloat(U[0].xyz).zzyz;
+ float4 zzzx = asfloat(U[0].xyz).zzzx;
+ float4 zzzy = asfloat(U[0].xyz).zzzy;
+ float4 zzzz = asfloat(U[0].xyz).zzzz;
+}
diff --git a/test/expressions/swizzle/read/packed_vec3/f32.wgsl.expected.msl b/test/expressions/swizzle/read/packed_vec3/f32.wgsl.expected.msl
new file mode 100644
index 0000000..b38da02
--- /dev/null
+++ b/test/expressions/swizzle/read/packed_vec3/f32.wgsl.expected.msl
@@ -0,0 +1,143 @@
+#include <metal_stdlib>
+
+using namespace metal;
+
+template<typename T, int N, int M>
+inline auto operator*(matrix<T, N, M> lhs, packed_vec<T, N> rhs) {
+ return lhs * vec<T, N>(rhs);
+}
+
+template<typename T, int N, int M>
+inline auto operator*(packed_vec<T, M> lhs, matrix<T, N, M> rhs) {
+ return vec<T, M>(lhs) * rhs;
+}
+
+struct S {
+ /* 0x0000 */ packed_float3 v;
+ /* 0x000c */ int8_t tint_pad[4];
+};
+
+void f(constant S& U) {
+ float3 v = U.v;
+ float x = U.v[0];
+ float y = U.v[1];
+ float z = U.v[2];
+ float2 xx = float3(U.v).xx;
+ float2 xy = float3(U.v).xy;
+ float2 xz = float3(U.v).xz;
+ float2 yx = float3(U.v).yx;
+ float2 yy = float3(U.v).yy;
+ float2 yz = float3(U.v).yz;
+ float2 zx = float3(U.v).zx;
+ float2 zy = float3(U.v).zy;
+ float2 zz = float3(U.v).zz;
+ float3 xxx = float3(U.v).xxx;
+ float3 xxy = float3(U.v).xxy;
+ float3 xxz = float3(U.v).xxz;
+ float3 xyx = float3(U.v).xyx;
+ float3 xyy = float3(U.v).xyy;
+ float3 xyz = float3(U.v).xyz;
+ float3 xzx = float3(U.v).xzx;
+ float3 xzy = float3(U.v).xzy;
+ float3 xzz = float3(U.v).xzz;
+ float3 yxx = float3(U.v).yxx;
+ float3 yxy = float3(U.v).yxy;
+ float3 yxz = float3(U.v).yxz;
+ float3 yyx = float3(U.v).yyx;
+ float3 yyy = float3(U.v).yyy;
+ float3 yyz = float3(U.v).yyz;
+ float3 yzx = float3(U.v).yzx;
+ float3 yzy = float3(U.v).yzy;
+ float3 yzz = float3(U.v).yzz;
+ float3 zxx = float3(U.v).zxx;
+ float3 zxy = float3(U.v).zxy;
+ float3 zxz = float3(U.v).zxz;
+ float3 zyx = float3(U.v).zyx;
+ float3 zyy = float3(U.v).zyy;
+ float3 zyz = float3(U.v).zyz;
+ float3 zzx = float3(U.v).zzx;
+ float3 zzy = float3(U.v).zzy;
+ float3 zzz = float3(U.v).zzz;
+ float4 xxxx = float3(U.v).xxxx;
+ float4 xxxy = float3(U.v).xxxy;
+ float4 xxxz = float3(U.v).xxxz;
+ float4 xxyx = float3(U.v).xxyx;
+ float4 xxyy = float3(U.v).xxyy;
+ float4 xxyz = float3(U.v).xxyz;
+ float4 xxzx = float3(U.v).xxzx;
+ float4 xxzy = float3(U.v).xxzy;
+ float4 xxzz = float3(U.v).xxzz;
+ float4 xyxx = float3(U.v).xyxx;
+ float4 xyxy = float3(U.v).xyxy;
+ float4 xyxz = float3(U.v).xyxz;
+ float4 xyyx = float3(U.v).xyyx;
+ float4 xyyy = float3(U.v).xyyy;
+ float4 xyyz = float3(U.v).xyyz;
+ float4 xyzx = float3(U.v).xyzx;
+ float4 xyzy = float3(U.v).xyzy;
+ float4 xyzz = float3(U.v).xyzz;
+ float4 xzxx = float3(U.v).xzxx;
+ float4 xzxy = float3(U.v).xzxy;
+ float4 xzxz = float3(U.v).xzxz;
+ float4 xzyx = float3(U.v).xzyx;
+ float4 xzyy = float3(U.v).xzyy;
+ float4 xzyz = float3(U.v).xzyz;
+ float4 xzzx = float3(U.v).xzzx;
+ float4 xzzy = float3(U.v).xzzy;
+ float4 xzzz = float3(U.v).xzzz;
+ float4 yxxx = float3(U.v).yxxx;
+ float4 yxxy = float3(U.v).yxxy;
+ float4 yxxz = float3(U.v).yxxz;
+ float4 yxyx = float3(U.v).yxyx;
+ float4 yxyy = float3(U.v).yxyy;
+ float4 yxyz = float3(U.v).yxyz;
+ float4 yxzx = float3(U.v).yxzx;
+ float4 yxzy = float3(U.v).yxzy;
+ float4 yxzz = float3(U.v).yxzz;
+ float4 yyxx = float3(U.v).yyxx;
+ float4 yyxy = float3(U.v).yyxy;
+ float4 yyxz = float3(U.v).yyxz;
+ float4 yyyx = float3(U.v).yyyx;
+ float4 yyyy = float3(U.v).yyyy;
+ float4 yyyz = float3(U.v).yyyz;
+ float4 yyzx = float3(U.v).yyzx;
+ float4 yyzy = float3(U.v).yyzy;
+ float4 yyzz = float3(U.v).yyzz;
+ float4 yzxx = float3(U.v).yzxx;
+ float4 yzxy = float3(U.v).yzxy;
+ float4 yzxz = float3(U.v).yzxz;
+ float4 yzyx = float3(U.v).yzyx;
+ float4 yzyy = float3(U.v).yzyy;
+ float4 yzyz = float3(U.v).yzyz;
+ float4 yzzx = float3(U.v).yzzx;
+ float4 yzzy = float3(U.v).yzzy;
+ float4 yzzz = float3(U.v).yzzz;
+ float4 zxxx = float3(U.v).zxxx;
+ float4 zxxy = float3(U.v).zxxy;
+ float4 zxxz = float3(U.v).zxxz;
+ float4 zxyx = float3(U.v).zxyx;
+ float4 zxyy = float3(U.v).zxyy;
+ float4 zxyz = float3(U.v).zxyz;
+ float4 zxzx = float3(U.v).zxzx;
+ float4 zxzy = float3(U.v).zxzy;
+ float4 zxzz = float3(U.v).zxzz;
+ float4 zyxx = float3(U.v).zyxx;
+ float4 zyxy = float3(U.v).zyxy;
+ float4 zyxz = float3(U.v).zyxz;
+ float4 zyyx = float3(U.v).zyyx;
+ float4 zyyy = float3(U.v).zyyy;
+ float4 zyyz = float3(U.v).zyyz;
+ float4 zyzx = float3(U.v).zyzx;
+ float4 zyzy = float3(U.v).zyzy;
+ float4 zyzz = float3(U.v).zyzz;
+ float4 zzxx = float3(U.v).zzxx;
+ float4 zzxy = float3(U.v).zzxy;
+ float4 zzxz = float3(U.v).zzxz;
+ float4 zzyx = float3(U.v).zzyx;
+ float4 zzyy = float3(U.v).zzyy;
+ float4 zzyz = float3(U.v).zzyz;
+ float4 zzzx = float3(U.v).zzzx;
+ float4 zzzy = float3(U.v).zzzy;
+ float4 zzzz = float3(U.v).zzzz;
+}
+
diff --git a/test/expressions/swizzle/read/packed_vec3/f32.wgsl.expected.spvasm b/test/expressions/swizzle/read/packed_vec3/f32.wgsl.expected.spvasm
new file mode 100644
index 0000000..eaadf00
--- /dev/null
+++ b/test/expressions/swizzle/read/packed_vec3/f32.wgsl.expected.spvasm
@@ -0,0 +1,772 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 508
+; Schema: 0
+ OpCapability Shader
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
+ OpExecutionMode %unused_entry_point LocalSize 1 1 1
+ OpName %S "S"
+ OpMemberName %S 0 "v"
+ OpName %U "U"
+ OpName %unused_entry_point "unused_entry_point"
+ OpName %f "f"
+ OpName %v "v"
+ OpName %x "x"
+ OpName %y "y"
+ OpName %z "z"
+ OpName %xx "xx"
+ OpName %xy "xy"
+ OpName %xz "xz"
+ OpName %yx "yx"
+ OpName %yy "yy"
+ OpName %yz "yz"
+ OpName %zx "zx"
+ OpName %zy "zy"
+ OpName %zz "zz"
+ OpName %xxx "xxx"
+ OpName %xxy "xxy"
+ OpName %xxz "xxz"
+ OpName %xyx "xyx"
+ OpName %xyy "xyy"
+ OpName %xyz "xyz"
+ OpName %xzx "xzx"
+ OpName %xzy "xzy"
+ OpName %xzz "xzz"
+ OpName %yxx "yxx"
+ OpName %yxy "yxy"
+ OpName %yxz "yxz"
+ OpName %yyx "yyx"
+ OpName %yyy "yyy"
+ OpName %yyz "yyz"
+ OpName %yzx "yzx"
+ OpName %yzy "yzy"
+ OpName %yzz "yzz"
+ OpName %zxx "zxx"
+ OpName %zxy "zxy"
+ OpName %zxz "zxz"
+ OpName %zyx "zyx"
+ OpName %zyy "zyy"
+ OpName %zyz "zyz"
+ OpName %zzx "zzx"
+ OpName %zzy "zzy"
+ OpName %zzz "zzz"
+ OpName %xxxx "xxxx"
+ OpName %xxxy "xxxy"
+ OpName %xxxz "xxxz"
+ OpName %xxyx "xxyx"
+ OpName %xxyy "xxyy"
+ OpName %xxyz "xxyz"
+ OpName %xxzx "xxzx"
+ OpName %xxzy "xxzy"
+ OpName %xxzz "xxzz"
+ OpName %xyxx "xyxx"
+ OpName %xyxy "xyxy"
+ OpName %xyxz "xyxz"
+ OpName %xyyx "xyyx"
+ OpName %xyyy "xyyy"
+ OpName %xyyz "xyyz"
+ OpName %xyzx "xyzx"
+ OpName %xyzy "xyzy"
+ OpName %xyzz "xyzz"
+ OpName %xzxx "xzxx"
+ OpName %xzxy "xzxy"
+ OpName %xzxz "xzxz"
+ OpName %xzyx "xzyx"
+ OpName %xzyy "xzyy"
+ OpName %xzyz "xzyz"
+ OpName %xzzx "xzzx"
+ OpName %xzzy "xzzy"
+ OpName %xzzz "xzzz"
+ OpName %yxxx "yxxx"
+ OpName %yxxy "yxxy"
+ OpName %yxxz "yxxz"
+ OpName %yxyx "yxyx"
+ OpName %yxyy "yxyy"
+ OpName %yxyz "yxyz"
+ OpName %yxzx "yxzx"
+ OpName %yxzy "yxzy"
+ OpName %yxzz "yxzz"
+ OpName %yyxx "yyxx"
+ OpName %yyxy "yyxy"
+ OpName %yyxz "yyxz"
+ OpName %yyyx "yyyx"
+ OpName %yyyy "yyyy"
+ OpName %yyyz "yyyz"
+ OpName %yyzx "yyzx"
+ OpName %yyzy "yyzy"
+ OpName %yyzz "yyzz"
+ OpName %yzxx "yzxx"
+ OpName %yzxy "yzxy"
+ OpName %yzxz "yzxz"
+ OpName %yzyx "yzyx"
+ OpName %yzyy "yzyy"
+ OpName %yzyz "yzyz"
+ OpName %yzzx "yzzx"
+ OpName %yzzy "yzzy"
+ OpName %yzzz "yzzz"
+ OpName %zxxx "zxxx"
+ OpName %zxxy "zxxy"
+ OpName %zxxz "zxxz"
+ OpName %zxyx "zxyx"
+ OpName %zxyy "zxyy"
+ OpName %zxyz "zxyz"
+ OpName %zxzx "zxzx"
+ OpName %zxzy "zxzy"
+ OpName %zxzz "zxzz"
+ OpName %zyxx "zyxx"
+ OpName %zyxy "zyxy"
+ OpName %zyxz "zyxz"
+ OpName %zyyx "zyyx"
+ OpName %zyyy "zyyy"
+ OpName %zyyz "zyyz"
+ OpName %zyzx "zyzx"
+ OpName %zyzy "zyzy"
+ OpName %zyzz "zyzz"
+ OpName %zzxx "zzxx"
+ OpName %zzxy "zzxy"
+ OpName %zzxz "zzxz"
+ OpName %zzyx "zzyx"
+ OpName %zzyy "zzyy"
+ OpName %zzyz "zzyz"
+ OpName %zzzx "zzzx"
+ OpName %zzzy "zzzy"
+ OpName %zzzz "zzzz"
+ OpDecorate %S Block
+ OpMemberDecorate %S 0 Offset 0
+ OpDecorate %U NonWritable
+ OpDecorate %U DescriptorSet 0
+ OpDecorate %U Binding 0
+ %float = OpTypeFloat 32
+ %v3float = OpTypeVector %float 3
+ %S = OpTypeStruct %v3float
+%_ptr_Uniform_S = OpTypePointer Uniform %S
+ %U = OpVariable %_ptr_Uniform_S Uniform
+ %void = OpTypeVoid
+ %6 = OpTypeFunction %void
+ %uint = OpTypeInt 32 0
+ %uint_0 = OpConstant %uint 0
+%_ptr_Uniform_v3float = OpTypePointer Uniform %v3float
+%_ptr_Function_v3float = OpTypePointer Function %v3float
+ %19 = OpConstantNull %v3float
+%_ptr_Uniform_float = OpTypePointer Uniform %float
+%_ptr_Function_float = OpTypePointer Function %float
+ %25 = OpConstantNull %float
+ %uint_1 = OpConstant %uint 1
+ %uint_2 = OpConstant %uint 2
+ %v2float = OpTypeVector %float 2
+%_ptr_Function_v2float = OpTypePointer Function %v2float
+ %40 = OpConstantNull %v2float
+ %v4float = OpTypeVector %float 4
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %187 = OpConstantNull %v4float
+%unused_entry_point = OpFunction %void None %6
+ %9 = OpLabel
+ OpReturn
+ OpFunctionEnd
+ %f = OpFunction %void None %6
+ %11 = OpLabel
+ %v = OpVariable %_ptr_Function_v3float Function %19
+ %x = OpVariable %_ptr_Function_float Function %25
+ %y = OpVariable %_ptr_Function_float Function %25
+ %z = OpVariable %_ptr_Function_float Function %25
+ %xx = OpVariable %_ptr_Function_v2float Function %40
+ %xy = OpVariable %_ptr_Function_v2float Function %40
+ %xz = OpVariable %_ptr_Function_v2float Function %40
+ %yx = OpVariable %_ptr_Function_v2float Function %40
+ %yy = OpVariable %_ptr_Function_v2float Function %40
+ %yz = OpVariable %_ptr_Function_v2float Function %40
+ %zx = OpVariable %_ptr_Function_v2float Function %40
+ %zy = OpVariable %_ptr_Function_v2float Function %40
+ %zz = OpVariable %_ptr_Function_v2float Function %40
+ %xxx = OpVariable %_ptr_Function_v3float Function %19
+ %xxy = OpVariable %_ptr_Function_v3float Function %19
+ %xxz = OpVariable %_ptr_Function_v3float Function %19
+ %xyx = OpVariable %_ptr_Function_v3float Function %19
+ %xyy = OpVariable %_ptr_Function_v3float Function %19
+ %xyz = OpVariable %_ptr_Function_v3float Function %19
+ %xzx = OpVariable %_ptr_Function_v3float Function %19
+ %xzy = OpVariable %_ptr_Function_v3float Function %19
+ %xzz = OpVariable %_ptr_Function_v3float Function %19
+ %yxx = OpVariable %_ptr_Function_v3float Function %19
+ %yxy = OpVariable %_ptr_Function_v3float Function %19
+ %yxz = OpVariable %_ptr_Function_v3float Function %19
+ %yyx = OpVariable %_ptr_Function_v3float Function %19
+ %yyy = OpVariable %_ptr_Function_v3float Function %19
+ %yyz = OpVariable %_ptr_Function_v3float Function %19
+ %yzx = OpVariable %_ptr_Function_v3float Function %19
+ %yzy = OpVariable %_ptr_Function_v3float Function %19
+ %yzz = OpVariable %_ptr_Function_v3float Function %19
+ %zxx = OpVariable %_ptr_Function_v3float Function %19
+ %zxy = OpVariable %_ptr_Function_v3float Function %19
+ %zxz = OpVariable %_ptr_Function_v3float Function %19
+ %zyx = OpVariable %_ptr_Function_v3float Function %19
+ %zyy = OpVariable %_ptr_Function_v3float Function %19
+ %zyz = OpVariable %_ptr_Function_v3float Function %19
+ %zzx = OpVariable %_ptr_Function_v3float Function %19
+ %zzy = OpVariable %_ptr_Function_v3float Function %19
+ %zzz = OpVariable %_ptr_Function_v3float Function %19
+ %xxxx = OpVariable %_ptr_Function_v4float Function %187
+ %xxxy = OpVariable %_ptr_Function_v4float Function %187
+ %xxxz = OpVariable %_ptr_Function_v4float Function %187
+ %xxyx = OpVariable %_ptr_Function_v4float Function %187
+ %xxyy = OpVariable %_ptr_Function_v4float Function %187
+ %xxyz = OpVariable %_ptr_Function_v4float Function %187
+ %xxzx = OpVariable %_ptr_Function_v4float Function %187
+ %xxzy = OpVariable %_ptr_Function_v4float Function %187
+ %xxzz = OpVariable %_ptr_Function_v4float Function %187
+ %xyxx = OpVariable %_ptr_Function_v4float Function %187
+ %xyxy = OpVariable %_ptr_Function_v4float Function %187
+ %xyxz = OpVariable %_ptr_Function_v4float Function %187
+ %xyyx = OpVariable %_ptr_Function_v4float Function %187
+ %xyyy = OpVariable %_ptr_Function_v4float Function %187
+ %xyyz = OpVariable %_ptr_Function_v4float Function %187
+ %xyzx = OpVariable %_ptr_Function_v4float Function %187
+ %xyzy = OpVariable %_ptr_Function_v4float Function %187
+ %xyzz = OpVariable %_ptr_Function_v4float Function %187
+ %xzxx = OpVariable %_ptr_Function_v4float Function %187
+ %xzxy = OpVariable %_ptr_Function_v4float Function %187
+ %xzxz = OpVariable %_ptr_Function_v4float Function %187
+ %xzyx = OpVariable %_ptr_Function_v4float Function %187
+ %xzyy = OpVariable %_ptr_Function_v4float Function %187
+ %xzyz = OpVariable %_ptr_Function_v4float Function %187
+ %xzzx = OpVariable %_ptr_Function_v4float Function %187
+ %xzzy = OpVariable %_ptr_Function_v4float Function %187
+ %xzzz = OpVariable %_ptr_Function_v4float Function %187
+ %yxxx = OpVariable %_ptr_Function_v4float Function %187
+ %yxxy = OpVariable %_ptr_Function_v4float Function %187
+ %yxxz = OpVariable %_ptr_Function_v4float Function %187
+ %yxyx = OpVariable %_ptr_Function_v4float Function %187
+ %yxyy = OpVariable %_ptr_Function_v4float Function %187
+ %yxyz = OpVariable %_ptr_Function_v4float Function %187
+ %yxzx = OpVariable %_ptr_Function_v4float Function %187
+ %yxzy = OpVariable %_ptr_Function_v4float Function %187
+ %yxzz = OpVariable %_ptr_Function_v4float Function %187
+ %yyxx = OpVariable %_ptr_Function_v4float Function %187
+ %yyxy = OpVariable %_ptr_Function_v4float Function %187
+ %yyxz = OpVariable %_ptr_Function_v4float Function %187
+ %yyyx = OpVariable %_ptr_Function_v4float Function %187
+ %yyyy = OpVariable %_ptr_Function_v4float Function %187
+ %yyyz = OpVariable %_ptr_Function_v4float Function %187
+ %yyzx = OpVariable %_ptr_Function_v4float Function %187
+ %yyzy = OpVariable %_ptr_Function_v4float Function %187
+ %yyzz = OpVariable %_ptr_Function_v4float Function %187
+ %yzxx = OpVariable %_ptr_Function_v4float Function %187
+ %yzxy = OpVariable %_ptr_Function_v4float Function %187
+ %yzxz = OpVariable %_ptr_Function_v4float Function %187
+ %yzyx = OpVariable %_ptr_Function_v4float Function %187
+ %yzyy = OpVariable %_ptr_Function_v4float Function %187
+ %yzyz = OpVariable %_ptr_Function_v4float Function %187
+ %yzzx = OpVariable %_ptr_Function_v4float Function %187
+ %yzzy = OpVariable %_ptr_Function_v4float Function %187
+ %yzzz = OpVariable %_ptr_Function_v4float Function %187
+ %zxxx = OpVariable %_ptr_Function_v4float Function %187
+ %zxxy = OpVariable %_ptr_Function_v4float Function %187
+ %zxxz = OpVariable %_ptr_Function_v4float Function %187
+ %zxyx = OpVariable %_ptr_Function_v4float Function %187
+ %zxyy = OpVariable %_ptr_Function_v4float Function %187
+ %zxyz = OpVariable %_ptr_Function_v4float Function %187
+ %zxzx = OpVariable %_ptr_Function_v4float Function %187
+ %zxzy = OpVariable %_ptr_Function_v4float Function %187
+ %zxzz = OpVariable %_ptr_Function_v4float Function %187
+ %zyxx = OpVariable %_ptr_Function_v4float Function %187
+ %zyxy = OpVariable %_ptr_Function_v4float Function %187
+ %zyxz = OpVariable %_ptr_Function_v4float Function %187
+ %zyyx = OpVariable %_ptr_Function_v4float Function %187
+ %zyyy = OpVariable %_ptr_Function_v4float Function %187
+ %zyyz = OpVariable %_ptr_Function_v4float Function %187
+ %zyzx = OpVariable %_ptr_Function_v4float Function %187
+ %zyzy = OpVariable %_ptr_Function_v4float Function %187
+ %zyzz = OpVariable %_ptr_Function_v4float Function %187
+ %zzxx = OpVariable %_ptr_Function_v4float Function %187
+ %zzxy = OpVariable %_ptr_Function_v4float Function %187
+ %zzxz = OpVariable %_ptr_Function_v4float Function %187
+ %zzyx = OpVariable %_ptr_Function_v4float Function %187
+ %zzyy = OpVariable %_ptr_Function_v4float Function %187
+ %zzyz = OpVariable %_ptr_Function_v4float Function %187
+ %zzzx = OpVariable %_ptr_Function_v4float Function %187
+ %zzzy = OpVariable %_ptr_Function_v4float Function %187
+ %zzzz = OpVariable %_ptr_Function_v4float Function %187
+ %15 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %16 = OpLoad %v3float %15
+ OpStore %v %16
+ %21 = OpAccessChain %_ptr_Uniform_float %U %uint_0 %uint_0
+ %22 = OpLoad %float %21
+ OpStore %x %22
+ %27 = OpAccessChain %_ptr_Uniform_float %U %uint_0 %uint_1
+ %28 = OpLoad %float %27
+ OpStore %y %28
+ %31 = OpAccessChain %_ptr_Uniform_float %U %uint_0 %uint_2
+ %32 = OpLoad %float %31
+ OpStore %z %32
+ %34 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %36 = OpLoad %v3float %34
+ %37 = OpVectorShuffle %v2float %36 %36 0 0
+ OpStore %xx %37
+ %41 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %42 = OpLoad %v3float %41
+ %43 = OpVectorShuffle %v2float %42 %42 0 1
+ OpStore %xy %43
+ %45 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %46 = OpLoad %v3float %45
+ %47 = OpVectorShuffle %v2float %46 %46 0 2
+ OpStore %xz %47
+ %49 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %50 = OpLoad %v3float %49
+ %51 = OpVectorShuffle %v2float %50 %50 1 0
+ OpStore %yx %51
+ %53 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %54 = OpLoad %v3float %53
+ %55 = OpVectorShuffle %v2float %54 %54 1 1
+ OpStore %yy %55
+ %57 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %58 = OpLoad %v3float %57
+ %59 = OpVectorShuffle %v2float %58 %58 1 2
+ OpStore %yz %59
+ %61 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %62 = OpLoad %v3float %61
+ %63 = OpVectorShuffle %v2float %62 %62 2 0
+ OpStore %zx %63
+ %65 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %66 = OpLoad %v3float %65
+ %67 = OpVectorShuffle %v2float %66 %66 2 1
+ OpStore %zy %67
+ %69 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %70 = OpLoad %v3float %69
+ %71 = OpVectorShuffle %v2float %70 %70 2 2
+ OpStore %zz %71
+ %73 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %74 = OpLoad %v3float %73
+ %75 = OpVectorShuffle %v3float %74 %74 0 0 0
+ OpStore %xxx %75
+ %77 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %78 = OpLoad %v3float %77
+ %79 = OpVectorShuffle %v3float %78 %78 0 0 1
+ OpStore %xxy %79
+ %81 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %82 = OpLoad %v3float %81
+ %83 = OpVectorShuffle %v3float %82 %82 0 0 2
+ OpStore %xxz %83
+ %85 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %86 = OpLoad %v3float %85
+ %87 = OpVectorShuffle %v3float %86 %86 0 1 0
+ OpStore %xyx %87
+ %89 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %90 = OpLoad %v3float %89
+ %91 = OpVectorShuffle %v3float %90 %90 0 1 1
+ OpStore %xyy %91
+ %93 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %94 = OpLoad %v3float %93
+ %95 = OpVectorShuffle %v3float %94 %94 0 1 2
+ OpStore %xyz %95
+ %97 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %98 = OpLoad %v3float %97
+ %99 = OpVectorShuffle %v3float %98 %98 0 2 0
+ OpStore %xzx %99
+ %101 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %102 = OpLoad %v3float %101
+ %103 = OpVectorShuffle %v3float %102 %102 0 2 1
+ OpStore %xzy %103
+ %105 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %106 = OpLoad %v3float %105
+ %107 = OpVectorShuffle %v3float %106 %106 0 2 2
+ OpStore %xzz %107
+ %109 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %110 = OpLoad %v3float %109
+ %111 = OpVectorShuffle %v3float %110 %110 1 0 0
+ OpStore %yxx %111
+ %113 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %114 = OpLoad %v3float %113
+ %115 = OpVectorShuffle %v3float %114 %114 1 0 1
+ OpStore %yxy %115
+ %117 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %118 = OpLoad %v3float %117
+ %119 = OpVectorShuffle %v3float %118 %118 1 0 2
+ OpStore %yxz %119
+ %121 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %122 = OpLoad %v3float %121
+ %123 = OpVectorShuffle %v3float %122 %122 1 1 0
+ OpStore %yyx %123
+ %125 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %126 = OpLoad %v3float %125
+ %127 = OpVectorShuffle %v3float %126 %126 1 1 1
+ OpStore %yyy %127
+ %129 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %130 = OpLoad %v3float %129
+ %131 = OpVectorShuffle %v3float %130 %130 1 1 2
+ OpStore %yyz %131
+ %133 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %134 = OpLoad %v3float %133
+ %135 = OpVectorShuffle %v3float %134 %134 1 2 0
+ OpStore %yzx %135
+ %137 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %138 = OpLoad %v3float %137
+ %139 = OpVectorShuffle %v3float %138 %138 1 2 1
+ OpStore %yzy %139
+ %141 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %142 = OpLoad %v3float %141
+ %143 = OpVectorShuffle %v3float %142 %142 1 2 2
+ OpStore %yzz %143
+ %145 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %146 = OpLoad %v3float %145
+ %147 = OpVectorShuffle %v3float %146 %146 2 0 0
+ OpStore %zxx %147
+ %149 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %150 = OpLoad %v3float %149
+ %151 = OpVectorShuffle %v3float %150 %150 2 0 1
+ OpStore %zxy %151
+ %153 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %154 = OpLoad %v3float %153
+ %155 = OpVectorShuffle %v3float %154 %154 2 0 2
+ OpStore %zxz %155
+ %157 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %158 = OpLoad %v3float %157
+ %159 = OpVectorShuffle %v3float %158 %158 2 1 0
+ OpStore %zyx %159
+ %161 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %162 = OpLoad %v3float %161
+ %163 = OpVectorShuffle %v3float %162 %162 2 1 1
+ OpStore %zyy %163
+ %165 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %166 = OpLoad %v3float %165
+ %167 = OpVectorShuffle %v3float %166 %166 2 1 2
+ OpStore %zyz %167
+ %169 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %170 = OpLoad %v3float %169
+ %171 = OpVectorShuffle %v3float %170 %170 2 2 0
+ OpStore %zzx %171
+ %173 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %174 = OpLoad %v3float %173
+ %175 = OpVectorShuffle %v3float %174 %174 2 2 1
+ OpStore %zzy %175
+ %177 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %178 = OpLoad %v3float %177
+ %179 = OpVectorShuffle %v3float %178 %178 2 2 2
+ OpStore %zzz %179
+ %181 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %183 = OpLoad %v3float %181
+ %184 = OpVectorShuffle %v4float %183 %183 0 0 0 0
+ OpStore %xxxx %184
+ %188 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %189 = OpLoad %v3float %188
+ %190 = OpVectorShuffle %v4float %189 %189 0 0 0 1
+ OpStore %xxxy %190
+ %192 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %193 = OpLoad %v3float %192
+ %194 = OpVectorShuffle %v4float %193 %193 0 0 0 2
+ OpStore %xxxz %194
+ %196 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %197 = OpLoad %v3float %196
+ %198 = OpVectorShuffle %v4float %197 %197 0 0 1 0
+ OpStore %xxyx %198
+ %200 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %201 = OpLoad %v3float %200
+ %202 = OpVectorShuffle %v4float %201 %201 0 0 1 1
+ OpStore %xxyy %202
+ %204 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %205 = OpLoad %v3float %204
+ %206 = OpVectorShuffle %v4float %205 %205 0 0 1 2
+ OpStore %xxyz %206
+ %208 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %209 = OpLoad %v3float %208
+ %210 = OpVectorShuffle %v4float %209 %209 0 0 2 0
+ OpStore %xxzx %210
+ %212 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %213 = OpLoad %v3float %212
+ %214 = OpVectorShuffle %v4float %213 %213 0 0 2 1
+ OpStore %xxzy %214
+ %216 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %217 = OpLoad %v3float %216
+ %218 = OpVectorShuffle %v4float %217 %217 0 0 2 2
+ OpStore %xxzz %218
+ %220 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %221 = OpLoad %v3float %220
+ %222 = OpVectorShuffle %v4float %221 %221 0 1 0 0
+ OpStore %xyxx %222
+ %224 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %225 = OpLoad %v3float %224
+ %226 = OpVectorShuffle %v4float %225 %225 0 1 0 1
+ OpStore %xyxy %226
+ %228 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %229 = OpLoad %v3float %228
+ %230 = OpVectorShuffle %v4float %229 %229 0 1 0 2
+ OpStore %xyxz %230
+ %232 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %233 = OpLoad %v3float %232
+ %234 = OpVectorShuffle %v4float %233 %233 0 1 1 0
+ OpStore %xyyx %234
+ %236 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %237 = OpLoad %v3float %236
+ %238 = OpVectorShuffle %v4float %237 %237 0 1 1 1
+ OpStore %xyyy %238
+ %240 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %241 = OpLoad %v3float %240
+ %242 = OpVectorShuffle %v4float %241 %241 0 1 1 2
+ OpStore %xyyz %242
+ %244 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %245 = OpLoad %v3float %244
+ %246 = OpVectorShuffle %v4float %245 %245 0 1 2 0
+ OpStore %xyzx %246
+ %248 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %249 = OpLoad %v3float %248
+ %250 = OpVectorShuffle %v4float %249 %249 0 1 2 1
+ OpStore %xyzy %250
+ %252 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %253 = OpLoad %v3float %252
+ %254 = OpVectorShuffle %v4float %253 %253 0 1 2 2
+ OpStore %xyzz %254
+ %256 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %257 = OpLoad %v3float %256
+ %258 = OpVectorShuffle %v4float %257 %257 0 2 0 0
+ OpStore %xzxx %258
+ %260 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %261 = OpLoad %v3float %260
+ %262 = OpVectorShuffle %v4float %261 %261 0 2 0 1
+ OpStore %xzxy %262
+ %264 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %265 = OpLoad %v3float %264
+ %266 = OpVectorShuffle %v4float %265 %265 0 2 0 2
+ OpStore %xzxz %266
+ %268 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %269 = OpLoad %v3float %268
+ %270 = OpVectorShuffle %v4float %269 %269 0 2 1 0
+ OpStore %xzyx %270
+ %272 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %273 = OpLoad %v3float %272
+ %274 = OpVectorShuffle %v4float %273 %273 0 2 1 1
+ OpStore %xzyy %274
+ %276 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %277 = OpLoad %v3float %276
+ %278 = OpVectorShuffle %v4float %277 %277 0 2 1 2
+ OpStore %xzyz %278
+ %280 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %281 = OpLoad %v3float %280
+ %282 = OpVectorShuffle %v4float %281 %281 0 2 2 0
+ OpStore %xzzx %282
+ %284 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %285 = OpLoad %v3float %284
+ %286 = OpVectorShuffle %v4float %285 %285 0 2 2 1
+ OpStore %xzzy %286
+ %288 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %289 = OpLoad %v3float %288
+ %290 = OpVectorShuffle %v4float %289 %289 0 2 2 2
+ OpStore %xzzz %290
+ %292 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %293 = OpLoad %v3float %292
+ %294 = OpVectorShuffle %v4float %293 %293 1 0 0 0
+ OpStore %yxxx %294
+ %296 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %297 = OpLoad %v3float %296
+ %298 = OpVectorShuffle %v4float %297 %297 1 0 0 1
+ OpStore %yxxy %298
+ %300 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %301 = OpLoad %v3float %300
+ %302 = OpVectorShuffle %v4float %301 %301 1 0 0 2
+ OpStore %yxxz %302
+ %304 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %305 = OpLoad %v3float %304
+ %306 = OpVectorShuffle %v4float %305 %305 1 0 1 0
+ OpStore %yxyx %306
+ %308 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %309 = OpLoad %v3float %308
+ %310 = OpVectorShuffle %v4float %309 %309 1 0 1 1
+ OpStore %yxyy %310
+ %312 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %313 = OpLoad %v3float %312
+ %314 = OpVectorShuffle %v4float %313 %313 1 0 1 2
+ OpStore %yxyz %314
+ %316 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %317 = OpLoad %v3float %316
+ %318 = OpVectorShuffle %v4float %317 %317 1 0 2 0
+ OpStore %yxzx %318
+ %320 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %321 = OpLoad %v3float %320
+ %322 = OpVectorShuffle %v4float %321 %321 1 0 2 1
+ OpStore %yxzy %322
+ %324 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %325 = OpLoad %v3float %324
+ %326 = OpVectorShuffle %v4float %325 %325 1 0 2 2
+ OpStore %yxzz %326
+ %328 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %329 = OpLoad %v3float %328
+ %330 = OpVectorShuffle %v4float %329 %329 1 1 0 0
+ OpStore %yyxx %330
+ %332 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %333 = OpLoad %v3float %332
+ %334 = OpVectorShuffle %v4float %333 %333 1 1 0 1
+ OpStore %yyxy %334
+ %336 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %337 = OpLoad %v3float %336
+ %338 = OpVectorShuffle %v4float %337 %337 1 1 0 2
+ OpStore %yyxz %338
+ %340 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %341 = OpLoad %v3float %340
+ %342 = OpVectorShuffle %v4float %341 %341 1 1 1 0
+ OpStore %yyyx %342
+ %344 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %345 = OpLoad %v3float %344
+ %346 = OpVectorShuffle %v4float %345 %345 1 1 1 1
+ OpStore %yyyy %346
+ %348 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %349 = OpLoad %v3float %348
+ %350 = OpVectorShuffle %v4float %349 %349 1 1 1 2
+ OpStore %yyyz %350
+ %352 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %353 = OpLoad %v3float %352
+ %354 = OpVectorShuffle %v4float %353 %353 1 1 2 0
+ OpStore %yyzx %354
+ %356 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %357 = OpLoad %v3float %356
+ %358 = OpVectorShuffle %v4float %357 %357 1 1 2 1
+ OpStore %yyzy %358
+ %360 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %361 = OpLoad %v3float %360
+ %362 = OpVectorShuffle %v4float %361 %361 1 1 2 2
+ OpStore %yyzz %362
+ %364 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %365 = OpLoad %v3float %364
+ %366 = OpVectorShuffle %v4float %365 %365 1 2 0 0
+ OpStore %yzxx %366
+ %368 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %369 = OpLoad %v3float %368
+ %370 = OpVectorShuffle %v4float %369 %369 1 2 0 1
+ OpStore %yzxy %370
+ %372 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %373 = OpLoad %v3float %372
+ %374 = OpVectorShuffle %v4float %373 %373 1 2 0 2
+ OpStore %yzxz %374
+ %376 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %377 = OpLoad %v3float %376
+ %378 = OpVectorShuffle %v4float %377 %377 1 2 1 0
+ OpStore %yzyx %378
+ %380 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %381 = OpLoad %v3float %380
+ %382 = OpVectorShuffle %v4float %381 %381 1 2 1 1
+ OpStore %yzyy %382
+ %384 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %385 = OpLoad %v3float %384
+ %386 = OpVectorShuffle %v4float %385 %385 1 2 1 2
+ OpStore %yzyz %386
+ %388 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %389 = OpLoad %v3float %388
+ %390 = OpVectorShuffle %v4float %389 %389 1 2 2 0
+ OpStore %yzzx %390
+ %392 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %393 = OpLoad %v3float %392
+ %394 = OpVectorShuffle %v4float %393 %393 1 2 2 1
+ OpStore %yzzy %394
+ %396 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %397 = OpLoad %v3float %396
+ %398 = OpVectorShuffle %v4float %397 %397 1 2 2 2
+ OpStore %yzzz %398
+ %400 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %401 = OpLoad %v3float %400
+ %402 = OpVectorShuffle %v4float %401 %401 2 0 0 0
+ OpStore %zxxx %402
+ %404 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %405 = OpLoad %v3float %404
+ %406 = OpVectorShuffle %v4float %405 %405 2 0 0 1
+ OpStore %zxxy %406
+ %408 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %409 = OpLoad %v3float %408
+ %410 = OpVectorShuffle %v4float %409 %409 2 0 0 2
+ OpStore %zxxz %410
+ %412 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %413 = OpLoad %v3float %412
+ %414 = OpVectorShuffle %v4float %413 %413 2 0 1 0
+ OpStore %zxyx %414
+ %416 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %417 = OpLoad %v3float %416
+ %418 = OpVectorShuffle %v4float %417 %417 2 0 1 1
+ OpStore %zxyy %418
+ %420 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %421 = OpLoad %v3float %420
+ %422 = OpVectorShuffle %v4float %421 %421 2 0 1 2
+ OpStore %zxyz %422
+ %424 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %425 = OpLoad %v3float %424
+ %426 = OpVectorShuffle %v4float %425 %425 2 0 2 0
+ OpStore %zxzx %426
+ %428 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %429 = OpLoad %v3float %428
+ %430 = OpVectorShuffle %v4float %429 %429 2 0 2 1
+ OpStore %zxzy %430
+ %432 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %433 = OpLoad %v3float %432
+ %434 = OpVectorShuffle %v4float %433 %433 2 0 2 2
+ OpStore %zxzz %434
+ %436 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %437 = OpLoad %v3float %436
+ %438 = OpVectorShuffle %v4float %437 %437 2 1 0 0
+ OpStore %zyxx %438
+ %440 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %441 = OpLoad %v3float %440
+ %442 = OpVectorShuffle %v4float %441 %441 2 1 0 1
+ OpStore %zyxy %442
+ %444 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %445 = OpLoad %v3float %444
+ %446 = OpVectorShuffle %v4float %445 %445 2 1 0 2
+ OpStore %zyxz %446
+ %448 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %449 = OpLoad %v3float %448
+ %450 = OpVectorShuffle %v4float %449 %449 2 1 1 0
+ OpStore %zyyx %450
+ %452 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %453 = OpLoad %v3float %452
+ %454 = OpVectorShuffle %v4float %453 %453 2 1 1 1
+ OpStore %zyyy %454
+ %456 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %457 = OpLoad %v3float %456
+ %458 = OpVectorShuffle %v4float %457 %457 2 1 1 2
+ OpStore %zyyz %458
+ %460 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %461 = OpLoad %v3float %460
+ %462 = OpVectorShuffle %v4float %461 %461 2 1 2 0
+ OpStore %zyzx %462
+ %464 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %465 = OpLoad %v3float %464
+ %466 = OpVectorShuffle %v4float %465 %465 2 1 2 1
+ OpStore %zyzy %466
+ %468 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %469 = OpLoad %v3float %468
+ %470 = OpVectorShuffle %v4float %469 %469 2 1 2 2
+ OpStore %zyzz %470
+ %472 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %473 = OpLoad %v3float %472
+ %474 = OpVectorShuffle %v4float %473 %473 2 2 0 0
+ OpStore %zzxx %474
+ %476 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %477 = OpLoad %v3float %476
+ %478 = OpVectorShuffle %v4float %477 %477 2 2 0 1
+ OpStore %zzxy %478
+ %480 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %481 = OpLoad %v3float %480
+ %482 = OpVectorShuffle %v4float %481 %481 2 2 0 2
+ OpStore %zzxz %482
+ %484 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %485 = OpLoad %v3float %484
+ %486 = OpVectorShuffle %v4float %485 %485 2 2 1 0
+ OpStore %zzyx %486
+ %488 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %489 = OpLoad %v3float %488
+ %490 = OpVectorShuffle %v4float %489 %489 2 2 1 1
+ OpStore %zzyy %490
+ %492 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %493 = OpLoad %v3float %492
+ %494 = OpVectorShuffle %v4float %493 %493 2 2 1 2
+ OpStore %zzyz %494
+ %496 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %497 = OpLoad %v3float %496
+ %498 = OpVectorShuffle %v4float %497 %497 2 2 2 0
+ OpStore %zzzx %498
+ %500 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %501 = OpLoad %v3float %500
+ %502 = OpVectorShuffle %v4float %501 %501 2 2 2 1
+ OpStore %zzzy %502
+ %504 = OpAccessChain %_ptr_Uniform_v3float %U %uint_0
+ %505 = OpLoad %v3float %504
+ %506 = OpVectorShuffle %v4float %505 %505 2 2 2 2
+ OpStore %zzzz %506
+ OpReturn
+ OpFunctionEnd
diff --git a/test/expressions/swizzle/read/packed_vec3/f32.wgsl.expected.wgsl b/test/expressions/swizzle/read/packed_vec3/f32.wgsl.expected.wgsl
new file mode 100644
index 0000000..1e01c44
--- /dev/null
+++ b/test/expressions/swizzle/read/packed_vec3/f32.wgsl.expected.wgsl
@@ -0,0 +1,130 @@
+[[block]]
+struct S {
+ v : vec3<f32>;
+};
+
+[[group(0), binding(0)]] var<uniform> U : S;
+
+fn f() {
+ var v = U.v;
+ var x = U.v.x;
+ var y = U.v.y;
+ var z = U.v.z;
+ var xx = U.v.xx;
+ var xy = U.v.xy;
+ var xz = U.v.xz;
+ var yx = U.v.yx;
+ var yy = U.v.yy;
+ var yz = U.v.yz;
+ var zx = U.v.zx;
+ var zy = U.v.zy;
+ var zz = U.v.zz;
+ var xxx = U.v.xxx;
+ var xxy = U.v.xxy;
+ var xxz = U.v.xxz;
+ var xyx = U.v.xyx;
+ var xyy = U.v.xyy;
+ var xyz = U.v.xyz;
+ var xzx = U.v.xzx;
+ var xzy = U.v.xzy;
+ var xzz = U.v.xzz;
+ var yxx = U.v.yxx;
+ var yxy = U.v.yxy;
+ var yxz = U.v.yxz;
+ var yyx = U.v.yyx;
+ var yyy = U.v.yyy;
+ var yyz = U.v.yyz;
+ var yzx = U.v.yzx;
+ var yzy = U.v.yzy;
+ var yzz = U.v.yzz;
+ var zxx = U.v.zxx;
+ var zxy = U.v.zxy;
+ var zxz = U.v.zxz;
+ var zyx = U.v.zyx;
+ var zyy = U.v.zyy;
+ var zyz = U.v.zyz;
+ var zzx = U.v.zzx;
+ var zzy = U.v.zzy;
+ var zzz = U.v.zzz;
+ var xxxx = U.v.xxxx;
+ var xxxy = U.v.xxxy;
+ var xxxz = U.v.xxxz;
+ var xxyx = U.v.xxyx;
+ var xxyy = U.v.xxyy;
+ var xxyz = U.v.xxyz;
+ var xxzx = U.v.xxzx;
+ var xxzy = U.v.xxzy;
+ var xxzz = U.v.xxzz;
+ var xyxx = U.v.xyxx;
+ var xyxy = U.v.xyxy;
+ var xyxz = U.v.xyxz;
+ var xyyx = U.v.xyyx;
+ var xyyy = U.v.xyyy;
+ var xyyz = U.v.xyyz;
+ var xyzx = U.v.xyzx;
+ var xyzy = U.v.xyzy;
+ var xyzz = U.v.xyzz;
+ var xzxx = U.v.xzxx;
+ var xzxy = U.v.xzxy;
+ var xzxz = U.v.xzxz;
+ var xzyx = U.v.xzyx;
+ var xzyy = U.v.xzyy;
+ var xzyz = U.v.xzyz;
+ var xzzx = U.v.xzzx;
+ var xzzy = U.v.xzzy;
+ var xzzz = U.v.xzzz;
+ var yxxx = U.v.yxxx;
+ var yxxy = U.v.yxxy;
+ var yxxz = U.v.yxxz;
+ var yxyx = U.v.yxyx;
+ var yxyy = U.v.yxyy;
+ var yxyz = U.v.yxyz;
+ var yxzx = U.v.yxzx;
+ var yxzy = U.v.yxzy;
+ var yxzz = U.v.yxzz;
+ var yyxx = U.v.yyxx;
+ var yyxy = U.v.yyxy;
+ var yyxz = U.v.yyxz;
+ var yyyx = U.v.yyyx;
+ var yyyy = U.v.yyyy;
+ var yyyz = U.v.yyyz;
+ var yyzx = U.v.yyzx;
+ var yyzy = U.v.yyzy;
+ var yyzz = U.v.yyzz;
+ var yzxx = U.v.yzxx;
+ var yzxy = U.v.yzxy;
+ var yzxz = U.v.yzxz;
+ var yzyx = U.v.yzyx;
+ var yzyy = U.v.yzyy;
+ var yzyz = U.v.yzyz;
+ var yzzx = U.v.yzzx;
+ var yzzy = U.v.yzzy;
+ var yzzz = U.v.yzzz;
+ var zxxx = U.v.zxxx;
+ var zxxy = U.v.zxxy;
+ var zxxz = U.v.zxxz;
+ var zxyx = U.v.zxyx;
+ var zxyy = U.v.zxyy;
+ var zxyz = U.v.zxyz;
+ var zxzx = U.v.zxzx;
+ var zxzy = U.v.zxzy;
+ var zxzz = U.v.zxzz;
+ var zyxx = U.v.zyxx;
+ var zyxy = U.v.zyxy;
+ var zyxz = U.v.zyxz;
+ var zyyx = U.v.zyyx;
+ var zyyy = U.v.zyyy;
+ var zyyz = U.v.zyyz;
+ var zyzx = U.v.zyzx;
+ var zyzy = U.v.zyzy;
+ var zyzz = U.v.zyzz;
+ var zzxx = U.v.zzxx;
+ var zzxy = U.v.zzxy;
+ var zzxz = U.v.zzxz;
+ var zzyx = U.v.zzyx;
+ var zzyy = U.v.zzyy;
+ var zzyz = U.v.zzyz;
+ var zzzx = U.v.zzzx;
+ var zzzy = U.v.zzzy;
+ var zzzz = U.v.zzzz;
+}
diff --git a/test/expressions/swizzle/read/packed_vec3/i32.wgsl b/test/expressions/swizzle/read/packed_vec3/i32.wgsl
new file mode 100644
index 0000000..114397b
--- /dev/null
+++ b/test/expressions/swizzle/read/packed_vec3/i32.wgsl
@@ -0,0 +1,144 @@
+[[block]]
+struct S {
+ v: vec3<i32>;
+};
+
+[[group(0), binding(0)]] var<uniform> U : S;
+
+fn f() {
+ var v = U.v;
+
+ var x = U.v.x;
+ var y = U.v.y;
+ var z = U.v.z;
+
+ var xx = U.v.xx;
+ var xy = U.v.xy;
+ var xz = U.v.xz;
+ var yx = U.v.yx;
+ var yy = U.v.yy;
+ var yz = U.v.yz;
+ var zx = U.v.zx;
+ var zy = U.v.zy;
+ var zz = U.v.zz;
+
+ var xxx = U.v.xxx;
+ var xxy = U.v.xxy;
+ var xxz = U.v.xxz;
+ var xyx = U.v.xyx;
+ var xyy = U.v.xyy;
+ var xyz = U.v.xyz;
+ var xzx = U.v.xzx;
+ var xzy = U.v.xzy;
+ var xzz = U.v.xzz;
+
+ var yxx = U.v.yxx;
+ var yxy = U.v.yxy;
+ var yxz = U.v.yxz;
+ var yyx = U.v.yyx;
+ var yyy = U.v.yyy;
+ var yyz = U.v.yyz;
+ var yzx = U.v.yzx;
+ var yzy = U.v.yzy;
+ var yzz = U.v.yzz;
+
+ var zxx = U.v.zxx;
+ var zxy = U.v.zxy;
+ var zxz = U.v.zxz;
+ var zyx = U.v.zyx;
+ var zyy = U.v.zyy;
+ var zyz = U.v.zyz;
+ var zzx = U.v.zzx;
+ var zzy = U.v.zzy;
+ var zzz = U.v.zzz;
+
+ var xxxx = U.v.xxxx;
+ var xxxy = U.v.xxxy;
+ var xxxz = U.v.xxxz;
+ var xxyx = U.v.xxyx;
+ var xxyy = U.v.xxyy;
+ var xxyz = U.v.xxyz;
+ var xxzx = U.v.xxzx;
+ var xxzy = U.v.xxzy;
+ var xxzz = U.v.xxzz;
+
+ var xyxx = U.v.xyxx;
+ var xyxy = U.v.xyxy;
+ var xyxz = U.v.xyxz;
+ var xyyx = U.v.xyyx;
+ var xyyy = U.v.xyyy;
+ var xyyz = U.v.xyyz;
+ var xyzx = U.v.xyzx;
+ var xyzy = U.v.xyzy;
+ var xyzz = U.v.xyzz;
+
+ var xzxx = U.v.xzxx;
+ var xzxy = U.v.xzxy;
+ var xzxz = U.v.xzxz;
+ var xzyx = U.v.xzyx;
+ var xzyy = U.v.xzyy;
+ var xzyz = U.v.xzyz;
+ var xzzx = U.v.xzzx;
+ var xzzy = U.v.xzzy;
+ var xzzz = U.v.xzzz;
+
+ var yxxx = U.v.yxxx;
+ var yxxy = U.v.yxxy;
+ var yxxz = U.v.yxxz;
+ var yxyx = U.v.yxyx;
+ var yxyy = U.v.yxyy;
+ var yxyz = U.v.yxyz;
+ var yxzx = U.v.yxzx;
+ var yxzy = U.v.yxzy;
+ var yxzz = U.v.yxzz;
+
+ var yyxx = U.v.yyxx;
+ var yyxy = U.v.yyxy;
+ var yyxz = U.v.yyxz;
+ var yyyx = U.v.yyyx;
+ var yyyy = U.v.yyyy;
+ var yyyz = U.v.yyyz;
+ var yyzx = U.v.yyzx;
+ var yyzy = U.v.yyzy;
+ var yyzz = U.v.yyzz;
+
+ var yzxx = U.v.yzxx;
+ var yzxy = U.v.yzxy;
+ var yzxz = U.v.yzxz;
+ var yzyx = U.v.yzyx;
+ var yzyy = U.v.yzyy;
+ var yzyz = U.v.yzyz;
+ var yzzx = U.v.yzzx;
+ var yzzy = U.v.yzzy;
+ var yzzz = U.v.yzzz;
+
+ var zxxx = U.v.zxxx;
+ var zxxy = U.v.zxxy;
+ var zxxz = U.v.zxxz;
+ var zxyx = U.v.zxyx;
+ var zxyy = U.v.zxyy;
+ var zxyz = U.v.zxyz;
+ var zxzx = U.v.zxzx;
+ var zxzy = U.v.zxzy;
+ var zxzz = U.v.zxzz;
+
+ var zyxx = U.v.zyxx;
+ var zyxy = U.v.zyxy;
+ var zyxz = U.v.zyxz;
+ var zyyx = U.v.zyyx;
+ var zyyy = U.v.zyyy;
+ var zyyz = U.v.zyyz;
+ var zyzx = U.v.zyzx;
+ var zyzy = U.v.zyzy;
+ var zyzz = U.v.zyzz;
+
+ var zzxx = U.v.zzxx;
+ var zzxy = U.v.zzxy;
+ var zzxz = U.v.zzxz;
+ var zzyx = U.v.zzyx;
+ var zzyy = U.v.zzyy;
+ var zzyz = U.v.zzyz;
+ var zzzx = U.v.zzzx;
+ var zzzy = U.v.zzzy;
+ var zzzz = U.v.zzzz;
+}
diff --git a/test/expressions/swizzle/read/packed_vec3/i32.wgsl.expected.hlsl b/test/expressions/swizzle/read/packed_vec3/i32.wgsl.expected.hlsl
new file mode 100644
index 0000000..13b2315
--- /dev/null
+++ b/test/expressions/swizzle/read/packed_vec3/i32.wgsl.expected.hlsl
@@ -0,0 +1,132 @@
+[numthreads(1, 1, 1)]
+void unused_entry_point() {
+ return;
+}
+
+cbuffer cbuffer_U : register(b0, space0) {
+ uint4 U[1];
+};
+
+void f() {
+ int3 v = asint(U[0].xyz);
+ int x = asint(U[0].x);
+ int y = asint(U[0].y);
+ int z = asint(U[0].z);
+ int2 xx = asint(U[0].xyz).xx;
+ int2 xy = asint(U[0].xyz).xy;
+ int2 xz = asint(U[0].xyz).xz;
+ int2 yx = asint(U[0].xyz).yx;
+ int2 yy = asint(U[0].xyz).yy;
+ int2 yz = asint(U[0].xyz).yz;
+ int2 zx = asint(U[0].xyz).zx;
+ int2 zy = asint(U[0].xyz).zy;
+ int2 zz = asint(U[0].xyz).zz;
+ int3 xxx = asint(U[0].xyz).xxx;
+ int3 xxy = asint(U[0].xyz).xxy;
+ int3 xxz = asint(U[0].xyz).xxz;
+ int3 xyx = asint(U[0].xyz).xyx;
+ int3 xyy = asint(U[0].xyz).xyy;
+ int3 xyz = asint(U[0].xyz).xyz;
+ int3 xzx = asint(U[0].xyz).xzx;
+ int3 xzy = asint(U[0].xyz).xzy;
+ int3 xzz = asint(U[0].xyz).xzz;
+ int3 yxx = asint(U[0].xyz).yxx;
+ int3 yxy = asint(U[0].xyz).yxy;
+ int3 yxz = asint(U[0].xyz).yxz;
+ int3 yyx = asint(U[0].xyz).yyx;
+ int3 yyy = asint(U[0].xyz).yyy;
+ int3 yyz = asint(U[0].xyz).yyz;
+ int3 yzx = asint(U[0].xyz).yzx;
+ int3 yzy = asint(U[0].xyz).yzy;
+ int3 yzz = asint(U[0].xyz).yzz;
+ int3 zxx = asint(U[0].xyz).zxx;
+ int3 zxy = asint(U[0].xyz).zxy;
+ int3 zxz = asint(U[0].xyz).zxz;
+ int3 zyx = asint(U[0].xyz).zyx;
+ int3 zyy = asint(U[0].xyz).zyy;
+ int3 zyz = asint(U[0].xyz).zyz;
+ int3 zzx = asint(U[0].xyz).zzx;
+ int3 zzy = asint(U[0].xyz).zzy;
+ int3 zzz = asint(U[0].xyz).zzz;
+ int4 xxxx = asint(U[0].xyz).xxxx;
+ int4 xxxy = asint(U[0].xyz).xxxy;
+ int4 xxxz = asint(U[0].xyz).xxxz;
+ int4 xxyx = asint(U[0].xyz).xxyx;
+ int4 xxyy = asint(U[0].xyz).xxyy;
+ int4 xxyz = asint(U[0].xyz).xxyz;
+ int4 xxzx = asint(U[0].xyz).xxzx;
+ int4 xxzy = asint(U[0].xyz).xxzy;
+ int4 xxzz = asint(U[0].xyz).xxzz;
+ int4 xyxx = asint(U[0].xyz).xyxx;
+ int4 xyxy = asint(U[0].xyz).xyxy;
+ int4 xyxz = asint(U[0].xyz).xyxz;
+ int4 xyyx = asint(U[0].xyz).xyyx;
+ int4 xyyy = asint(U[0].xyz).xyyy;
+ int4 xyyz = asint(U[0].xyz).xyyz;
+ int4 xyzx = asint(U[0].xyz).xyzx;
+ int4 xyzy = asint(U[0].xyz).xyzy;
+ int4 xyzz = asint(U[0].xyz).xyzz;
+ int4 xzxx = asint(U[0].xyz).xzxx;
+ int4 xzxy = asint(U[0].xyz).xzxy;
+ int4 xzxz = asint(U[0].xyz).xzxz;
+ int4 xzyx = asint(U[0].xyz).xzyx;
+ int4 xzyy = asint(U[0].xyz).xzyy;
+ int4 xzyz = asint(U[0].xyz).xzyz;
+ int4 xzzx = asint(U[0].xyz).xzzx;
+ int4 xzzy = asint(U[0].xyz).xzzy;
+ int4 xzzz = asint(U[0].xyz).xzzz;
+ int4 yxxx = asint(U[0].xyz).yxxx;
+ int4 yxxy = asint(U[0].xyz).yxxy;
+ int4 yxxz = asint(U[0].xyz).yxxz;
+ int4 yxyx = asint(U[0].xyz).yxyx;
+ int4 yxyy = asint(U[0].xyz).yxyy;
+ int4 yxyz = asint(U[0].xyz).yxyz;
+ int4 yxzx = asint(U[0].xyz).yxzx;
+ int4 yxzy = asint(U[0].xyz).yxzy;
+ int4 yxzz = asint(U[0].xyz).yxzz;
+ int4 yyxx = asint(U[0].xyz).yyxx;
+ int4 yyxy = asint(U[0].xyz).yyxy;
+ int4 yyxz = asint(U[0].xyz).yyxz;
+ int4 yyyx = asint(U[0].xyz).yyyx;
+ int4 yyyy = asint(U[0].xyz).yyyy;
+ int4 yyyz = asint(U[0].xyz).yyyz;
+ int4 yyzx = asint(U[0].xyz).yyzx;
+ int4 yyzy = asint(U[0].xyz).yyzy;
+ int4 yyzz = asint(U[0].xyz).yyzz;
+ int4 yzxx = asint(U[0].xyz).yzxx;
+ int4 yzxy = asint(U[0].xyz).yzxy;
+ int4 yzxz = asint(U[0].xyz).yzxz;
+ int4 yzyx = asint(U[0].xyz).yzyx;
+ int4 yzyy = asint(U[0].xyz).yzyy;
+ int4 yzyz = asint(U[0].xyz).yzyz;
+ int4 yzzx = asint(U[0].xyz).yzzx;
+ int4 yzzy = asint(U[0].xyz).yzzy;
+ int4 yzzz = asint(U[0].xyz).yzzz;
+ int4 zxxx = asint(U[0].xyz).zxxx;
+ int4 zxxy = asint(U[0].xyz).zxxy;
+ int4 zxxz = asint(U[0].xyz).zxxz;
+ int4 zxyx = asint(U[0].xyz).zxyx;
+ int4 zxyy = asint(U[0].xyz).zxyy;
+ int4 zxyz = asint(U[0].xyz).zxyz;
+ int4 zxzx = asint(U[0].xyz).zxzx;
+ int4 zxzy = asint(U[0].xyz).zxzy;
+ int4 zxzz = asint(U[0].xyz).zxzz;
+ int4 zyxx = asint(U[0].xyz).zyxx;
+ int4 zyxy = asint(U[0].xyz).zyxy;
+ int4 zyxz = asint(U[0].xyz).zyxz;
+ int4 zyyx = asint(U[0].xyz).zyyx;
+ int4 zyyy = asint(U[0].xyz).zyyy;
+ int4 zyyz = asint(U[0].xyz).zyyz;
+ int4 zyzx = asint(U[0].xyz).zyzx;
+ int4 zyzy = asint(U[0].xyz).zyzy;
+ int4 zyzz = asint(U[0].xyz).zyzz;
+ int4 zzxx = asint(U[0].xyz).zzxx;
+ int4 zzxy = asint(U[0].xyz).zzxy;
+ int4 zzxz = asint(U[0].xyz).zzxz;
+ int4 zzyx = asint(U[0].xyz).zzyx;
+ int4 zzyy = asint(U[0].xyz).zzyy;
+ int4 zzyz = asint(U[0].xyz).zzyz;
+ int4 zzzx = asint(U[0].xyz).zzzx;
+ int4 zzzy = asint(U[0].xyz).zzzy;
+ int4 zzzz = asint(U[0].xyz).zzzz;
+}
diff --git a/test/expressions/swizzle/read/packed_vec3/i32.wgsl.expected.msl b/test/expressions/swizzle/read/packed_vec3/i32.wgsl.expected.msl
new file mode 100644
index 0000000..c308b3c
--- /dev/null
+++ b/test/expressions/swizzle/read/packed_vec3/i32.wgsl.expected.msl
@@ -0,0 +1,132 @@
+#include <metal_stdlib>
+
+using namespace metal;
+struct S {
+ /* 0x0000 */ packed_int3 v;
+ /* 0x000c */ int8_t tint_pad[4];
+};
+
+void f(constant S& U) {
+ int3 v = U.v;
+ int x = U.v[0];
+ int y = U.v[1];
+ int z = U.v[2];
+ int2 xx = int3(U.v).xx;
+ int2 xy = int3(U.v).xy;
+ int2 xz = int3(U.v).xz;
+ int2 yx = int3(U.v).yx;
+ int2 yy = int3(U.v).yy;
+ int2 yz = int3(U.v).yz;
+ int2 zx = int3(U.v).zx;
+ int2 zy = int3(U.v).zy;
+ int2 zz = int3(U.v).zz;
+ int3 xxx = int3(U.v).xxx;
+ int3 xxy = int3(U.v).xxy;
+ int3 xxz = int3(U.v).xxz;
+ int3 xyx = int3(U.v).xyx;
+ int3 xyy = int3(U.v).xyy;
+ int3 xyz = int3(U.v).xyz;
+ int3 xzx = int3(U.v).xzx;
+ int3 xzy = int3(U.v).xzy;
+ int3 xzz = int3(U.v).xzz;
+ int3 yxx = int3(U.v).yxx;
+ int3 yxy = int3(U.v).yxy;
+ int3 yxz = int3(U.v).yxz;
+ int3 yyx = int3(U.v).yyx;
+ int3 yyy = int3(U.v).yyy;
+ int3 yyz = int3(U.v).yyz;
+ int3 yzx = int3(U.v).yzx;
+ int3 yzy = int3(U.v).yzy;
+ int3 yzz = int3(U.v).yzz;
+ int3 zxx = int3(U.v).zxx;
+ int3 zxy = int3(U.v).zxy;
+ int3 zxz = int3(U.v).zxz;
+ int3 zyx = int3(U.v).zyx;
+ int3 zyy = int3(U.v).zyy;
+ int3 zyz = int3(U.v).zyz;
+ int3 zzx = int3(U.v).zzx;
+ int3 zzy = int3(U.v).zzy;
+ int3 zzz = int3(U.v).zzz;
+ int4 xxxx = int3(U.v).xxxx;
+ int4 xxxy = int3(U.v).xxxy;
+ int4 xxxz = int3(U.v).xxxz;
+ int4 xxyx = int3(U.v).xxyx;
+ int4 xxyy = int3(U.v).xxyy;
+ int4 xxyz = int3(U.v).xxyz;
+ int4 xxzx = int3(U.v).xxzx;
+ int4 xxzy = int3(U.v).xxzy;
+ int4 xxzz = int3(U.v).xxzz;
+ int4 xyxx = int3(U.v).xyxx;
+ int4 xyxy = int3(U.v).xyxy;
+ int4 xyxz = int3(U.v).xyxz;
+ int4 xyyx = int3(U.v).xyyx;
+ int4 xyyy = int3(U.v).xyyy;
+ int4 xyyz = int3(U.v).xyyz;
+ int4 xyzx = int3(U.v).xyzx;
+ int4 xyzy = int3(U.v).xyzy;
+ int4 xyzz = int3(U.v).xyzz;
+ int4 xzxx = int3(U.v).xzxx;
+ int4 xzxy = int3(U.v).xzxy;
+ int4 xzxz = int3(U.v).xzxz;
+ int4 xzyx = int3(U.v).xzyx;
+ int4 xzyy = int3(U.v).xzyy;
+ int4 xzyz = int3(U.v).xzyz;
+ int4 xzzx = int3(U.v).xzzx;
+ int4 xzzy = int3(U.v).xzzy;
+ int4 xzzz = int3(U.v).xzzz;
+ int4 yxxx = int3(U.v).yxxx;
+ int4 yxxy = int3(U.v).yxxy;
+ int4 yxxz = int3(U.v).yxxz;
+ int4 yxyx = int3(U.v).yxyx;
+ int4 yxyy = int3(U.v).yxyy;
+ int4 yxyz = int3(U.v).yxyz;
+ int4 yxzx = int3(U.v).yxzx;
+ int4 yxzy = int3(U.v).yxzy;
+ int4 yxzz = int3(U.v).yxzz;
+ int4 yyxx = int3(U.v).yyxx;
+ int4 yyxy = int3(U.v).yyxy;
+ int4 yyxz = int3(U.v).yyxz;
+ int4 yyyx = int3(U.v).yyyx;
+ int4 yyyy = int3(U.v).yyyy;
+ int4 yyyz = int3(U.v).yyyz;
+ int4 yyzx = int3(U.v).yyzx;
+ int4 yyzy = int3(U.v).yyzy;
+ int4 yyzz = int3(U.v).yyzz;
+ int4 yzxx = int3(U.v).yzxx;
+ int4 yzxy = int3(U.v).yzxy;
+ int4 yzxz = int3(U.v).yzxz;
+ int4 yzyx = int3(U.v).yzyx;
+ int4 yzyy = int3(U.v).yzyy;
+ int4 yzyz = int3(U.v).yzyz;
+ int4 yzzx = int3(U.v).yzzx;
+ int4 yzzy = int3(U.v).yzzy;
+ int4 yzzz = int3(U.v).yzzz;
+ int4 zxxx = int3(U.v).zxxx;
+ int4 zxxy = int3(U.v).zxxy;
+ int4 zxxz = int3(U.v).zxxz;
+ int4 zxyx = int3(U.v).zxyx;
+ int4 zxyy = int3(U.v).zxyy;
+ int4 zxyz = int3(U.v).zxyz;
+ int4 zxzx = int3(U.v).zxzx;
+ int4 zxzy = int3(U.v).zxzy;
+ int4 zxzz = int3(U.v).zxzz;
+ int4 zyxx = int3(U.v).zyxx;
+ int4 zyxy = int3(U.v).zyxy;
+ int4 zyxz = int3(U.v).zyxz;
+ int4 zyyx = int3(U.v).zyyx;
+ int4 zyyy = int3(U.v).zyyy;
+ int4 zyyz = int3(U.v).zyyz;
+ int4 zyzx = int3(U.v).zyzx;
+ int4 zyzy = int3(U.v).zyzy;
+ int4 zyzz = int3(U.v).zyzz;
+ int4 zzxx = int3(U.v).zzxx;
+ int4 zzxy = int3(U.v).zzxy;
+ int4 zzxz = int3(U.v).zzxz;
+ int4 zzyx = int3(U.v).zzyx;
+ int4 zzyy = int3(U.v).zzyy;
+ int4 zzyz = int3(U.v).zzyz;
+ int4 zzzx = int3(U.v).zzzx;
+ int4 zzzy = int3(U.v).zzzy;
+ int4 zzzz = int3(U.v).zzzz;
+}
+
diff --git a/test/expressions/swizzle/read/packed_vec3/i32.wgsl.expected.spvasm b/test/expressions/swizzle/read/packed_vec3/i32.wgsl.expected.spvasm
new file mode 100644
index 0000000..a71db22
--- /dev/null
+++ b/test/expressions/swizzle/read/packed_vec3/i32.wgsl.expected.spvasm
@@ -0,0 +1,772 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 508
+; Schema: 0
+ OpCapability Shader
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
+ OpExecutionMode %unused_entry_point LocalSize 1 1 1
+ OpName %S "S"
+ OpMemberName %S 0 "v"
+ OpName %U "U"
+ OpName %unused_entry_point "unused_entry_point"
+ OpName %f "f"
+ OpName %v "v"
+ OpName %x "x"
+ OpName %y "y"
+ OpName %z "z"
+ OpName %xx "xx"
+ OpName %xy "xy"
+ OpName %xz "xz"
+ OpName %yx "yx"
+ OpName %yy "yy"
+ OpName %yz "yz"
+ OpName %zx "zx"
+ OpName %zy "zy"
+ OpName %zz "zz"
+ OpName %xxx "xxx"
+ OpName %xxy "xxy"
+ OpName %xxz "xxz"
+ OpName %xyx "xyx"
+ OpName %xyy "xyy"
+ OpName %xyz "xyz"
+ OpName %xzx "xzx"
+ OpName %xzy "xzy"
+ OpName %xzz "xzz"
+ OpName %yxx "yxx"
+ OpName %yxy "yxy"
+ OpName %yxz "yxz"
+ OpName %yyx "yyx"
+ OpName %yyy "yyy"
+ OpName %yyz "yyz"
+ OpName %yzx "yzx"
+ OpName %yzy "yzy"
+ OpName %yzz "yzz"
+ OpName %zxx "zxx"
+ OpName %zxy "zxy"
+ OpName %zxz "zxz"
+ OpName %zyx "zyx"
+ OpName %zyy "zyy"
+ OpName %zyz "zyz"
+ OpName %zzx "zzx"
+ OpName %zzy "zzy"
+ OpName %zzz "zzz"
+ OpName %xxxx "xxxx"
+ OpName %xxxy "xxxy"
+ OpName %xxxz "xxxz"
+ OpName %xxyx "xxyx"
+ OpName %xxyy "xxyy"
+ OpName %xxyz "xxyz"
+ OpName %xxzx "xxzx"
+ OpName %xxzy "xxzy"
+ OpName %xxzz "xxzz"
+ OpName %xyxx "xyxx"
+ OpName %xyxy "xyxy"
+ OpName %xyxz "xyxz"
+ OpName %xyyx "xyyx"
+ OpName %xyyy "xyyy"
+ OpName %xyyz "xyyz"
+ OpName %xyzx "xyzx"
+ OpName %xyzy "xyzy"
+ OpName %xyzz "xyzz"
+ OpName %xzxx "xzxx"
+ OpName %xzxy "xzxy"
+ OpName %xzxz "xzxz"
+ OpName %xzyx "xzyx"
+ OpName %xzyy "xzyy"
+ OpName %xzyz "xzyz"
+ OpName %xzzx "xzzx"
+ OpName %xzzy "xzzy"
+ OpName %xzzz "xzzz"
+ OpName %yxxx "yxxx"
+ OpName %yxxy "yxxy"
+ OpName %yxxz "yxxz"
+ OpName %yxyx "yxyx"
+ OpName %yxyy "yxyy"
+ OpName %yxyz "yxyz"
+ OpName %yxzx "yxzx"
+ OpName %yxzy "yxzy"
+ OpName %yxzz "yxzz"
+ OpName %yyxx "yyxx"
+ OpName %yyxy "yyxy"
+ OpName %yyxz "yyxz"
+ OpName %yyyx "yyyx"
+ OpName %yyyy "yyyy"
+ OpName %yyyz "yyyz"
+ OpName %yyzx "yyzx"
+ OpName %yyzy "yyzy"
+ OpName %yyzz "yyzz"
+ OpName %yzxx "yzxx"
+ OpName %yzxy "yzxy"
+ OpName %yzxz "yzxz"
+ OpName %yzyx "yzyx"
+ OpName %yzyy "yzyy"
+ OpName %yzyz "yzyz"
+ OpName %yzzx "yzzx"
+ OpName %yzzy "yzzy"
+ OpName %yzzz "yzzz"
+ OpName %zxxx "zxxx"
+ OpName %zxxy "zxxy"
+ OpName %zxxz "zxxz"
+ OpName %zxyx "zxyx"
+ OpName %zxyy "zxyy"
+ OpName %zxyz "zxyz"
+ OpName %zxzx "zxzx"
+ OpName %zxzy "zxzy"
+ OpName %zxzz "zxzz"
+ OpName %zyxx "zyxx"
+ OpName %zyxy "zyxy"
+ OpName %zyxz "zyxz"
+ OpName %zyyx "zyyx"
+ OpName %zyyy "zyyy"
+ OpName %zyyz "zyyz"
+ OpName %zyzx "zyzx"
+ OpName %zyzy "zyzy"
+ OpName %zyzz "zyzz"
+ OpName %zzxx "zzxx"
+ OpName %zzxy "zzxy"
+ OpName %zzxz "zzxz"
+ OpName %zzyx "zzyx"
+ OpName %zzyy "zzyy"
+ OpName %zzyz "zzyz"
+ OpName %zzzx "zzzx"
+ OpName %zzzy "zzzy"
+ OpName %zzzz "zzzz"
+ OpDecorate %S Block
+ OpMemberDecorate %S 0 Offset 0
+ OpDecorate %U NonWritable
+ OpDecorate %U DescriptorSet 0
+ OpDecorate %U Binding 0
+ %int = OpTypeInt 32 1
+ %v3int = OpTypeVector %int 3
+ %S = OpTypeStruct %v3int
+%_ptr_Uniform_S = OpTypePointer Uniform %S
+ %U = OpVariable %_ptr_Uniform_S Uniform
+ %void = OpTypeVoid
+ %6 = OpTypeFunction %void
+ %uint = OpTypeInt 32 0
+ %uint_0 = OpConstant %uint 0
+%_ptr_Uniform_v3int = OpTypePointer Uniform %v3int
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+ %19 = OpConstantNull %v3int
+%_ptr_Uniform_int = OpTypePointer Uniform %int
+%_ptr_Function_int = OpTypePointer Function %int
+ %25 = OpConstantNull %int
+ %uint_1 = OpConstant %uint 1
+ %uint_2 = OpConstant %uint 2
+ %v2int = OpTypeVector %int 2
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+ %40 = OpConstantNull %v2int
+ %v4int = OpTypeVector %int 4
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+ %187 = OpConstantNull %v4int
+%unused_entry_point = OpFunction %void None %6
+ %9 = OpLabel
+ OpReturn
+ OpFunctionEnd
+ %f = OpFunction %void None %6
+ %11 = OpLabel
+ %v = OpVariable %_ptr_Function_v3int Function %19
+ %x = OpVariable %_ptr_Function_int Function %25
+ %y = OpVariable %_ptr_Function_int Function %25
+ %z = OpVariable %_ptr_Function_int Function %25
+ %xx = OpVariable %_ptr_Function_v2int Function %40
+ %xy = OpVariable %_ptr_Function_v2int Function %40
+ %xz = OpVariable %_ptr_Function_v2int Function %40
+ %yx = OpVariable %_ptr_Function_v2int Function %40
+ %yy = OpVariable %_ptr_Function_v2int Function %40
+ %yz = OpVariable %_ptr_Function_v2int Function %40
+ %zx = OpVariable %_ptr_Function_v2int Function %40
+ %zy = OpVariable %_ptr_Function_v2int Function %40
+ %zz = OpVariable %_ptr_Function_v2int Function %40
+ %xxx = OpVariable %_ptr_Function_v3int Function %19
+ %xxy = OpVariable %_ptr_Function_v3int Function %19
+ %xxz = OpVariable %_ptr_Function_v3int Function %19
+ %xyx = OpVariable %_ptr_Function_v3int Function %19
+ %xyy = OpVariable %_ptr_Function_v3int Function %19
+ %xyz = OpVariable %_ptr_Function_v3int Function %19
+ %xzx = OpVariable %_ptr_Function_v3int Function %19
+ %xzy = OpVariable %_ptr_Function_v3int Function %19
+ %xzz = OpVariable %_ptr_Function_v3int Function %19
+ %yxx = OpVariable %_ptr_Function_v3int Function %19
+ %yxy = OpVariable %_ptr_Function_v3int Function %19
+ %yxz = OpVariable %_ptr_Function_v3int Function %19
+ %yyx = OpVariable %_ptr_Function_v3int Function %19
+ %yyy = OpVariable %_ptr_Function_v3int Function %19
+ %yyz = OpVariable %_ptr_Function_v3int Function %19
+ %yzx = OpVariable %_ptr_Function_v3int Function %19
+ %yzy = OpVariable %_ptr_Function_v3int Function %19
+ %yzz = OpVariable %_ptr_Function_v3int Function %19
+ %zxx = OpVariable %_ptr_Function_v3int Function %19
+ %zxy = OpVariable %_ptr_Function_v3int Function %19
+ %zxz = OpVariable %_ptr_Function_v3int Function %19
+ %zyx = OpVariable %_ptr_Function_v3int Function %19
+ %zyy = OpVariable %_ptr_Function_v3int Function %19
+ %zyz = OpVariable %_ptr_Function_v3int Function %19
+ %zzx = OpVariable %_ptr_Function_v3int Function %19
+ %zzy = OpVariable %_ptr_Function_v3int Function %19
+ %zzz = OpVariable %_ptr_Function_v3int Function %19
+ %xxxx = OpVariable %_ptr_Function_v4int Function %187
+ %xxxy = OpVariable %_ptr_Function_v4int Function %187
+ %xxxz = OpVariable %_ptr_Function_v4int Function %187
+ %xxyx = OpVariable %_ptr_Function_v4int Function %187
+ %xxyy = OpVariable %_ptr_Function_v4int Function %187
+ %xxyz = OpVariable %_ptr_Function_v4int Function %187
+ %xxzx = OpVariable %_ptr_Function_v4int Function %187
+ %xxzy = OpVariable %_ptr_Function_v4int Function %187
+ %xxzz = OpVariable %_ptr_Function_v4int Function %187
+ %xyxx = OpVariable %_ptr_Function_v4int Function %187
+ %xyxy = OpVariable %_ptr_Function_v4int Function %187
+ %xyxz = OpVariable %_ptr_Function_v4int Function %187
+ %xyyx = OpVariable %_ptr_Function_v4int Function %187
+ %xyyy = OpVariable %_ptr_Function_v4int Function %187
+ %xyyz = OpVariable %_ptr_Function_v4int Function %187
+ %xyzx = OpVariable %_ptr_Function_v4int Function %187
+ %xyzy = OpVariable %_ptr_Function_v4int Function %187
+ %xyzz = OpVariable %_ptr_Function_v4int Function %187
+ %xzxx = OpVariable %_ptr_Function_v4int Function %187
+ %xzxy = OpVariable %_ptr_Function_v4int Function %187
+ %xzxz = OpVariable %_ptr_Function_v4int Function %187
+ %xzyx = OpVariable %_ptr_Function_v4int Function %187
+ %xzyy = OpVariable %_ptr_Function_v4int Function %187
+ %xzyz = OpVariable %_ptr_Function_v4int Function %187
+ %xzzx = OpVariable %_ptr_Function_v4int Function %187
+ %xzzy = OpVariable %_ptr_Function_v4int Function %187
+ %xzzz = OpVariable %_ptr_Function_v4int Function %187
+ %yxxx = OpVariable %_ptr_Function_v4int Function %187
+ %yxxy = OpVariable %_ptr_Function_v4int Function %187
+ %yxxz = OpVariable %_ptr_Function_v4int Function %187
+ %yxyx = OpVariable %_ptr_Function_v4int Function %187
+ %yxyy = OpVariable %_ptr_Function_v4int Function %187
+ %yxyz = OpVariable %_ptr_Function_v4int Function %187
+ %yxzx = OpVariable %_ptr_Function_v4int Function %187
+ %yxzy = OpVariable %_ptr_Function_v4int Function %187
+ %yxzz = OpVariable %_ptr_Function_v4int Function %187
+ %yyxx = OpVariable %_ptr_Function_v4int Function %187
+ %yyxy = OpVariable %_ptr_Function_v4int Function %187
+ %yyxz = OpVariable %_ptr_Function_v4int Function %187
+ %yyyx = OpVariable %_ptr_Function_v4int Function %187
+ %yyyy = OpVariable %_ptr_Function_v4int Function %187
+ %yyyz = OpVariable %_ptr_Function_v4int Function %187
+ %yyzx = OpVariable %_ptr_Function_v4int Function %187
+ %yyzy = OpVariable %_ptr_Function_v4int Function %187
+ %yyzz = OpVariable %_ptr_Function_v4int Function %187
+ %yzxx = OpVariable %_ptr_Function_v4int Function %187
+ %yzxy = OpVariable %_ptr_Function_v4int Function %187
+ %yzxz = OpVariable %_ptr_Function_v4int Function %187
+ %yzyx = OpVariable %_ptr_Function_v4int Function %187
+ %yzyy = OpVariable %_ptr_Function_v4int Function %187
+ %yzyz = OpVariable %_ptr_Function_v4int Function %187
+ %yzzx = OpVariable %_ptr_Function_v4int Function %187
+ %yzzy = OpVariable %_ptr_Function_v4int Function %187
+ %yzzz = OpVariable %_ptr_Function_v4int Function %187
+ %zxxx = OpVariable %_ptr_Function_v4int Function %187
+ %zxxy = OpVariable %_ptr_Function_v4int Function %187
+ %zxxz = OpVariable %_ptr_Function_v4int Function %187
+ %zxyx = OpVariable %_ptr_Function_v4int Function %187
+ %zxyy = OpVariable %_ptr_Function_v4int Function %187
+ %zxyz = OpVariable %_ptr_Function_v4int Function %187
+ %zxzx = OpVariable %_ptr_Function_v4int Function %187
+ %zxzy = OpVariable %_ptr_Function_v4int Function %187
+ %zxzz = OpVariable %_ptr_Function_v4int Function %187
+ %zyxx = OpVariable %_ptr_Function_v4int Function %187
+ %zyxy = OpVariable %_ptr_Function_v4int Function %187
+ %zyxz = OpVariable %_ptr_Function_v4int Function %187
+ %zyyx = OpVariable %_ptr_Function_v4int Function %187
+ %zyyy = OpVariable %_ptr_Function_v4int Function %187
+ %zyyz = OpVariable %_ptr_Function_v4int Function %187
+ %zyzx = OpVariable %_ptr_Function_v4int Function %187
+ %zyzy = OpVariable %_ptr_Function_v4int Function %187
+ %zyzz = OpVariable %_ptr_Function_v4int Function %187
+ %zzxx = OpVariable %_ptr_Function_v4int Function %187
+ %zzxy = OpVariable %_ptr_Function_v4int Function %187
+ %zzxz = OpVariable %_ptr_Function_v4int Function %187
+ %zzyx = OpVariable %_ptr_Function_v4int Function %187
+ %zzyy = OpVariable %_ptr_Function_v4int Function %187
+ %zzyz = OpVariable %_ptr_Function_v4int Function %187
+ %zzzx = OpVariable %_ptr_Function_v4int Function %187
+ %zzzy = OpVariable %_ptr_Function_v4int Function %187
+ %zzzz = OpVariable %_ptr_Function_v4int Function %187
+ %15 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %16 = OpLoad %v3int %15
+ OpStore %v %16
+ %21 = OpAccessChain %_ptr_Uniform_int %U %uint_0 %uint_0
+ %22 = OpLoad %int %21
+ OpStore %x %22
+ %27 = OpAccessChain %_ptr_Uniform_int %U %uint_0 %uint_1
+ %28 = OpLoad %int %27
+ OpStore %y %28
+ %31 = OpAccessChain %_ptr_Uniform_int %U %uint_0 %uint_2
+ %32 = OpLoad %int %31
+ OpStore %z %32
+ %34 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %36 = OpLoad %v3int %34
+ %37 = OpVectorShuffle %v2int %36 %36 0 0
+ OpStore %xx %37
+ %41 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %42 = OpLoad %v3int %41
+ %43 = OpVectorShuffle %v2int %42 %42 0 1
+ OpStore %xy %43
+ %45 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %46 = OpLoad %v3int %45
+ %47 = OpVectorShuffle %v2int %46 %46 0 2
+ OpStore %xz %47
+ %49 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %50 = OpLoad %v3int %49
+ %51 = OpVectorShuffle %v2int %50 %50 1 0
+ OpStore %yx %51
+ %53 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %54 = OpLoad %v3int %53
+ %55 = OpVectorShuffle %v2int %54 %54 1 1
+ OpStore %yy %55
+ %57 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %58 = OpLoad %v3int %57
+ %59 = OpVectorShuffle %v2int %58 %58 1 2
+ OpStore %yz %59
+ %61 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %62 = OpLoad %v3int %61
+ %63 = OpVectorShuffle %v2int %62 %62 2 0
+ OpStore %zx %63
+ %65 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %66 = OpLoad %v3int %65
+ %67 = OpVectorShuffle %v2int %66 %66 2 1
+ OpStore %zy %67
+ %69 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %70 = OpLoad %v3int %69
+ %71 = OpVectorShuffle %v2int %70 %70 2 2
+ OpStore %zz %71
+ %73 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %74 = OpLoad %v3int %73
+ %75 = OpVectorShuffle %v3int %74 %74 0 0 0
+ OpStore %xxx %75
+ %77 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %78 = OpLoad %v3int %77
+ %79 = OpVectorShuffle %v3int %78 %78 0 0 1
+ OpStore %xxy %79
+ %81 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %82 = OpLoad %v3int %81
+ %83 = OpVectorShuffle %v3int %82 %82 0 0 2
+ OpStore %xxz %83
+ %85 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %86 = OpLoad %v3int %85
+ %87 = OpVectorShuffle %v3int %86 %86 0 1 0
+ OpStore %xyx %87
+ %89 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %90 = OpLoad %v3int %89
+ %91 = OpVectorShuffle %v3int %90 %90 0 1 1
+ OpStore %xyy %91
+ %93 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %94 = OpLoad %v3int %93
+ %95 = OpVectorShuffle %v3int %94 %94 0 1 2
+ OpStore %xyz %95
+ %97 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %98 = OpLoad %v3int %97
+ %99 = OpVectorShuffle %v3int %98 %98 0 2 0
+ OpStore %xzx %99
+ %101 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %102 = OpLoad %v3int %101
+ %103 = OpVectorShuffle %v3int %102 %102 0 2 1
+ OpStore %xzy %103
+ %105 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %106 = OpLoad %v3int %105
+ %107 = OpVectorShuffle %v3int %106 %106 0 2 2
+ OpStore %xzz %107
+ %109 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %110 = OpLoad %v3int %109
+ %111 = OpVectorShuffle %v3int %110 %110 1 0 0
+ OpStore %yxx %111
+ %113 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %114 = OpLoad %v3int %113
+ %115 = OpVectorShuffle %v3int %114 %114 1 0 1
+ OpStore %yxy %115
+ %117 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %118 = OpLoad %v3int %117
+ %119 = OpVectorShuffle %v3int %118 %118 1 0 2
+ OpStore %yxz %119
+ %121 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %122 = OpLoad %v3int %121
+ %123 = OpVectorShuffle %v3int %122 %122 1 1 0
+ OpStore %yyx %123
+ %125 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %126 = OpLoad %v3int %125
+ %127 = OpVectorShuffle %v3int %126 %126 1 1 1
+ OpStore %yyy %127
+ %129 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %130 = OpLoad %v3int %129
+ %131 = OpVectorShuffle %v3int %130 %130 1 1 2
+ OpStore %yyz %131
+ %133 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %134 = OpLoad %v3int %133
+ %135 = OpVectorShuffle %v3int %134 %134 1 2 0
+ OpStore %yzx %135
+ %137 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %138 = OpLoad %v3int %137
+ %139 = OpVectorShuffle %v3int %138 %138 1 2 1
+ OpStore %yzy %139
+ %141 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %142 = OpLoad %v3int %141
+ %143 = OpVectorShuffle %v3int %142 %142 1 2 2
+ OpStore %yzz %143
+ %145 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %146 = OpLoad %v3int %145
+ %147 = OpVectorShuffle %v3int %146 %146 2 0 0
+ OpStore %zxx %147
+ %149 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %150 = OpLoad %v3int %149
+ %151 = OpVectorShuffle %v3int %150 %150 2 0 1
+ OpStore %zxy %151
+ %153 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %154 = OpLoad %v3int %153
+ %155 = OpVectorShuffle %v3int %154 %154 2 0 2
+ OpStore %zxz %155
+ %157 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %158 = OpLoad %v3int %157
+ %159 = OpVectorShuffle %v3int %158 %158 2 1 0
+ OpStore %zyx %159
+ %161 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %162 = OpLoad %v3int %161
+ %163 = OpVectorShuffle %v3int %162 %162 2 1 1
+ OpStore %zyy %163
+ %165 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %166 = OpLoad %v3int %165
+ %167 = OpVectorShuffle %v3int %166 %166 2 1 2
+ OpStore %zyz %167
+ %169 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %170 = OpLoad %v3int %169
+ %171 = OpVectorShuffle %v3int %170 %170 2 2 0
+ OpStore %zzx %171
+ %173 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %174 = OpLoad %v3int %173
+ %175 = OpVectorShuffle %v3int %174 %174 2 2 1
+ OpStore %zzy %175
+ %177 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %178 = OpLoad %v3int %177
+ %179 = OpVectorShuffle %v3int %178 %178 2 2 2
+ OpStore %zzz %179
+ %181 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %183 = OpLoad %v3int %181
+ %184 = OpVectorShuffle %v4int %183 %183 0 0 0 0
+ OpStore %xxxx %184
+ %188 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %189 = OpLoad %v3int %188
+ %190 = OpVectorShuffle %v4int %189 %189 0 0 0 1
+ OpStore %xxxy %190
+ %192 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %193 = OpLoad %v3int %192
+ %194 = OpVectorShuffle %v4int %193 %193 0 0 0 2
+ OpStore %xxxz %194
+ %196 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %197 = OpLoad %v3int %196
+ %198 = OpVectorShuffle %v4int %197 %197 0 0 1 0
+ OpStore %xxyx %198
+ %200 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %201 = OpLoad %v3int %200
+ %202 = OpVectorShuffle %v4int %201 %201 0 0 1 1
+ OpStore %xxyy %202
+ %204 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %205 = OpLoad %v3int %204
+ %206 = OpVectorShuffle %v4int %205 %205 0 0 1 2
+ OpStore %xxyz %206
+ %208 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %209 = OpLoad %v3int %208
+ %210 = OpVectorShuffle %v4int %209 %209 0 0 2 0
+ OpStore %xxzx %210
+ %212 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %213 = OpLoad %v3int %212
+ %214 = OpVectorShuffle %v4int %213 %213 0 0 2 1
+ OpStore %xxzy %214
+ %216 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %217 = OpLoad %v3int %216
+ %218 = OpVectorShuffle %v4int %217 %217 0 0 2 2
+ OpStore %xxzz %218
+ %220 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %221 = OpLoad %v3int %220
+ %222 = OpVectorShuffle %v4int %221 %221 0 1 0 0
+ OpStore %xyxx %222
+ %224 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %225 = OpLoad %v3int %224
+ %226 = OpVectorShuffle %v4int %225 %225 0 1 0 1
+ OpStore %xyxy %226
+ %228 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %229 = OpLoad %v3int %228
+ %230 = OpVectorShuffle %v4int %229 %229 0 1 0 2
+ OpStore %xyxz %230
+ %232 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %233 = OpLoad %v3int %232
+ %234 = OpVectorShuffle %v4int %233 %233 0 1 1 0
+ OpStore %xyyx %234
+ %236 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %237 = OpLoad %v3int %236
+ %238 = OpVectorShuffle %v4int %237 %237 0 1 1 1
+ OpStore %xyyy %238
+ %240 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %241 = OpLoad %v3int %240
+ %242 = OpVectorShuffle %v4int %241 %241 0 1 1 2
+ OpStore %xyyz %242
+ %244 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %245 = OpLoad %v3int %244
+ %246 = OpVectorShuffle %v4int %245 %245 0 1 2 0
+ OpStore %xyzx %246
+ %248 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %249 = OpLoad %v3int %248
+ %250 = OpVectorShuffle %v4int %249 %249 0 1 2 1
+ OpStore %xyzy %250
+ %252 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %253 = OpLoad %v3int %252
+ %254 = OpVectorShuffle %v4int %253 %253 0 1 2 2
+ OpStore %xyzz %254
+ %256 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %257 = OpLoad %v3int %256
+ %258 = OpVectorShuffle %v4int %257 %257 0 2 0 0
+ OpStore %xzxx %258
+ %260 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %261 = OpLoad %v3int %260
+ %262 = OpVectorShuffle %v4int %261 %261 0 2 0 1
+ OpStore %xzxy %262
+ %264 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %265 = OpLoad %v3int %264
+ %266 = OpVectorShuffle %v4int %265 %265 0 2 0 2
+ OpStore %xzxz %266
+ %268 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %269 = OpLoad %v3int %268
+ %270 = OpVectorShuffle %v4int %269 %269 0 2 1 0
+ OpStore %xzyx %270
+ %272 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %273 = OpLoad %v3int %272
+ %274 = OpVectorShuffle %v4int %273 %273 0 2 1 1
+ OpStore %xzyy %274
+ %276 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %277 = OpLoad %v3int %276
+ %278 = OpVectorShuffle %v4int %277 %277 0 2 1 2
+ OpStore %xzyz %278
+ %280 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %281 = OpLoad %v3int %280
+ %282 = OpVectorShuffle %v4int %281 %281 0 2 2 0
+ OpStore %xzzx %282
+ %284 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %285 = OpLoad %v3int %284
+ %286 = OpVectorShuffle %v4int %285 %285 0 2 2 1
+ OpStore %xzzy %286
+ %288 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %289 = OpLoad %v3int %288
+ %290 = OpVectorShuffle %v4int %289 %289 0 2 2 2
+ OpStore %xzzz %290
+ %292 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %293 = OpLoad %v3int %292
+ %294 = OpVectorShuffle %v4int %293 %293 1 0 0 0
+ OpStore %yxxx %294
+ %296 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %297 = OpLoad %v3int %296
+ %298 = OpVectorShuffle %v4int %297 %297 1 0 0 1
+ OpStore %yxxy %298
+ %300 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %301 = OpLoad %v3int %300
+ %302 = OpVectorShuffle %v4int %301 %301 1 0 0 2
+ OpStore %yxxz %302
+ %304 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %305 = OpLoad %v3int %304
+ %306 = OpVectorShuffle %v4int %305 %305 1 0 1 0
+ OpStore %yxyx %306
+ %308 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %309 = OpLoad %v3int %308
+ %310 = OpVectorShuffle %v4int %309 %309 1 0 1 1
+ OpStore %yxyy %310
+ %312 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %313 = OpLoad %v3int %312
+ %314 = OpVectorShuffle %v4int %313 %313 1 0 1 2
+ OpStore %yxyz %314
+ %316 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %317 = OpLoad %v3int %316
+ %318 = OpVectorShuffle %v4int %317 %317 1 0 2 0
+ OpStore %yxzx %318
+ %320 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %321 = OpLoad %v3int %320
+ %322 = OpVectorShuffle %v4int %321 %321 1 0 2 1
+ OpStore %yxzy %322
+ %324 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %325 = OpLoad %v3int %324
+ %326 = OpVectorShuffle %v4int %325 %325 1 0 2 2
+ OpStore %yxzz %326
+ %328 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %329 = OpLoad %v3int %328
+ %330 = OpVectorShuffle %v4int %329 %329 1 1 0 0
+ OpStore %yyxx %330
+ %332 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %333 = OpLoad %v3int %332
+ %334 = OpVectorShuffle %v4int %333 %333 1 1 0 1
+ OpStore %yyxy %334
+ %336 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %337 = OpLoad %v3int %336
+ %338 = OpVectorShuffle %v4int %337 %337 1 1 0 2
+ OpStore %yyxz %338
+ %340 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %341 = OpLoad %v3int %340
+ %342 = OpVectorShuffle %v4int %341 %341 1 1 1 0
+ OpStore %yyyx %342
+ %344 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %345 = OpLoad %v3int %344
+ %346 = OpVectorShuffle %v4int %345 %345 1 1 1 1
+ OpStore %yyyy %346
+ %348 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %349 = OpLoad %v3int %348
+ %350 = OpVectorShuffle %v4int %349 %349 1 1 1 2
+ OpStore %yyyz %350
+ %352 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %353 = OpLoad %v3int %352
+ %354 = OpVectorShuffle %v4int %353 %353 1 1 2 0
+ OpStore %yyzx %354
+ %356 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %357 = OpLoad %v3int %356
+ %358 = OpVectorShuffle %v4int %357 %357 1 1 2 1
+ OpStore %yyzy %358
+ %360 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %361 = OpLoad %v3int %360
+ %362 = OpVectorShuffle %v4int %361 %361 1 1 2 2
+ OpStore %yyzz %362
+ %364 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %365 = OpLoad %v3int %364
+ %366 = OpVectorShuffle %v4int %365 %365 1 2 0 0
+ OpStore %yzxx %366
+ %368 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %369 = OpLoad %v3int %368
+ %370 = OpVectorShuffle %v4int %369 %369 1 2 0 1
+ OpStore %yzxy %370
+ %372 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %373 = OpLoad %v3int %372
+ %374 = OpVectorShuffle %v4int %373 %373 1 2 0 2
+ OpStore %yzxz %374
+ %376 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %377 = OpLoad %v3int %376
+ %378 = OpVectorShuffle %v4int %377 %377 1 2 1 0
+ OpStore %yzyx %378
+ %380 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %381 = OpLoad %v3int %380
+ %382 = OpVectorShuffle %v4int %381 %381 1 2 1 1
+ OpStore %yzyy %382
+ %384 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %385 = OpLoad %v3int %384
+ %386 = OpVectorShuffle %v4int %385 %385 1 2 1 2
+ OpStore %yzyz %386
+ %388 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %389 = OpLoad %v3int %388
+ %390 = OpVectorShuffle %v4int %389 %389 1 2 2 0
+ OpStore %yzzx %390
+ %392 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %393 = OpLoad %v3int %392
+ %394 = OpVectorShuffle %v4int %393 %393 1 2 2 1
+ OpStore %yzzy %394
+ %396 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %397 = OpLoad %v3int %396
+ %398 = OpVectorShuffle %v4int %397 %397 1 2 2 2
+ OpStore %yzzz %398
+ %400 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %401 = OpLoad %v3int %400
+ %402 = OpVectorShuffle %v4int %401 %401 2 0 0 0
+ OpStore %zxxx %402
+ %404 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %405 = OpLoad %v3int %404
+ %406 = OpVectorShuffle %v4int %405 %405 2 0 0 1
+ OpStore %zxxy %406
+ %408 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %409 = OpLoad %v3int %408
+ %410 = OpVectorShuffle %v4int %409 %409 2 0 0 2
+ OpStore %zxxz %410
+ %412 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %413 = OpLoad %v3int %412
+ %414 = OpVectorShuffle %v4int %413 %413 2 0 1 0
+ OpStore %zxyx %414
+ %416 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %417 = OpLoad %v3int %416
+ %418 = OpVectorShuffle %v4int %417 %417 2 0 1 1
+ OpStore %zxyy %418
+ %420 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %421 = OpLoad %v3int %420
+ %422 = OpVectorShuffle %v4int %421 %421 2 0 1 2
+ OpStore %zxyz %422
+ %424 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %425 = OpLoad %v3int %424
+ %426 = OpVectorShuffle %v4int %425 %425 2 0 2 0
+ OpStore %zxzx %426
+ %428 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %429 = OpLoad %v3int %428
+ %430 = OpVectorShuffle %v4int %429 %429 2 0 2 1
+ OpStore %zxzy %430
+ %432 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %433 = OpLoad %v3int %432
+ %434 = OpVectorShuffle %v4int %433 %433 2 0 2 2
+ OpStore %zxzz %434
+ %436 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %437 = OpLoad %v3int %436
+ %438 = OpVectorShuffle %v4int %437 %437 2 1 0 0
+ OpStore %zyxx %438
+ %440 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %441 = OpLoad %v3int %440
+ %442 = OpVectorShuffle %v4int %441 %441 2 1 0 1
+ OpStore %zyxy %442
+ %444 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %445 = OpLoad %v3int %444
+ %446 = OpVectorShuffle %v4int %445 %445 2 1 0 2
+ OpStore %zyxz %446
+ %448 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %449 = OpLoad %v3int %448
+ %450 = OpVectorShuffle %v4int %449 %449 2 1 1 0
+ OpStore %zyyx %450
+ %452 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %453 = OpLoad %v3int %452
+ %454 = OpVectorShuffle %v4int %453 %453 2 1 1 1
+ OpStore %zyyy %454
+ %456 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %457 = OpLoad %v3int %456
+ %458 = OpVectorShuffle %v4int %457 %457 2 1 1 2
+ OpStore %zyyz %458
+ %460 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %461 = OpLoad %v3int %460
+ %462 = OpVectorShuffle %v4int %461 %461 2 1 2 0
+ OpStore %zyzx %462
+ %464 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %465 = OpLoad %v3int %464
+ %466 = OpVectorShuffle %v4int %465 %465 2 1 2 1
+ OpStore %zyzy %466
+ %468 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %469 = OpLoad %v3int %468
+ %470 = OpVectorShuffle %v4int %469 %469 2 1 2 2
+ OpStore %zyzz %470
+ %472 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %473 = OpLoad %v3int %472
+ %474 = OpVectorShuffle %v4int %473 %473 2 2 0 0
+ OpStore %zzxx %474
+ %476 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %477 = OpLoad %v3int %476
+ %478 = OpVectorShuffle %v4int %477 %477 2 2 0 1
+ OpStore %zzxy %478
+ %480 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %481 = OpLoad %v3int %480
+ %482 = OpVectorShuffle %v4int %481 %481 2 2 0 2
+ OpStore %zzxz %482
+ %484 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %485 = OpLoad %v3int %484
+ %486 = OpVectorShuffle %v4int %485 %485 2 2 1 0
+ OpStore %zzyx %486
+ %488 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %489 = OpLoad %v3int %488
+ %490 = OpVectorShuffle %v4int %489 %489 2 2 1 1
+ OpStore %zzyy %490
+ %492 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %493 = OpLoad %v3int %492
+ %494 = OpVectorShuffle %v4int %493 %493 2 2 1 2
+ OpStore %zzyz %494
+ %496 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %497 = OpLoad %v3int %496
+ %498 = OpVectorShuffle %v4int %497 %497 2 2 2 0
+ OpStore %zzzx %498
+ %500 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %501 = OpLoad %v3int %500
+ %502 = OpVectorShuffle %v4int %501 %501 2 2 2 1
+ OpStore %zzzy %502
+ %504 = OpAccessChain %_ptr_Uniform_v3int %U %uint_0
+ %505 = OpLoad %v3int %504
+ %506 = OpVectorShuffle %v4int %505 %505 2 2 2 2
+ OpStore %zzzz %506
+ OpReturn
+ OpFunctionEnd
diff --git a/test/expressions/swizzle/read/packed_vec3/i32.wgsl.expected.wgsl b/test/expressions/swizzle/read/packed_vec3/i32.wgsl.expected.wgsl
new file mode 100644
index 0000000..d174a70
--- /dev/null
+++ b/test/expressions/swizzle/read/packed_vec3/i32.wgsl.expected.wgsl
@@ -0,0 +1,130 @@
+[[block]]
+struct S {
+ v : vec3<i32>;
+};
+
+[[group(0), binding(0)]] var<uniform> U : S;
+
+fn f() {
+ var v = U.v;
+ var x = U.v.x;
+ var y = U.v.y;
+ var z = U.v.z;
+ var xx = U.v.xx;
+ var xy = U.v.xy;
+ var xz = U.v.xz;
+ var yx = U.v.yx;
+ var yy = U.v.yy;
+ var yz = U.v.yz;
+ var zx = U.v.zx;
+ var zy = U.v.zy;
+ var zz = U.v.zz;
+ var xxx = U.v.xxx;
+ var xxy = U.v.xxy;
+ var xxz = U.v.xxz;
+ var xyx = U.v.xyx;
+ var xyy = U.v.xyy;
+ var xyz = U.v.xyz;
+ var xzx = U.v.xzx;
+ var xzy = U.v.xzy;
+ var xzz = U.v.xzz;
+ var yxx = U.v.yxx;
+ var yxy = U.v.yxy;
+ var yxz = U.v.yxz;
+ var yyx = U.v.yyx;
+ var yyy = U.v.yyy;
+ var yyz = U.v.yyz;
+ var yzx = U.v.yzx;
+ var yzy = U.v.yzy;
+ var yzz = U.v.yzz;
+ var zxx = U.v.zxx;
+ var zxy = U.v.zxy;
+ var zxz = U.v.zxz;
+ var zyx = U.v.zyx;
+ var zyy = U.v.zyy;
+ var zyz = U.v.zyz;
+ var zzx = U.v.zzx;
+ var zzy = U.v.zzy;
+ var zzz = U.v.zzz;
+ var xxxx = U.v.xxxx;
+ var xxxy = U.v.xxxy;
+ var xxxz = U.v.xxxz;
+ var xxyx = U.v.xxyx;
+ var xxyy = U.v.xxyy;
+ var xxyz = U.v.xxyz;
+ var xxzx = U.v.xxzx;
+ var xxzy = U.v.xxzy;
+ var xxzz = U.v.xxzz;
+ var xyxx = U.v.xyxx;
+ var xyxy = U.v.xyxy;
+ var xyxz = U.v.xyxz;
+ var xyyx = U.v.xyyx;
+ var xyyy = U.v.xyyy;
+ var xyyz = U.v.xyyz;
+ var xyzx = U.v.xyzx;
+ var xyzy = U.v.xyzy;
+ var xyzz = U.v.xyzz;
+ var xzxx = U.v.xzxx;
+ var xzxy = U.v.xzxy;
+ var xzxz = U.v.xzxz;
+ var xzyx = U.v.xzyx;
+ var xzyy = U.v.xzyy;
+ var xzyz = U.v.xzyz;
+ var xzzx = U.v.xzzx;
+ var xzzy = U.v.xzzy;
+ var xzzz = U.v.xzzz;
+ var yxxx = U.v.yxxx;
+ var yxxy = U.v.yxxy;
+ var yxxz = U.v.yxxz;
+ var yxyx = U.v.yxyx;
+ var yxyy = U.v.yxyy;
+ var yxyz = U.v.yxyz;
+ var yxzx = U.v.yxzx;
+ var yxzy = U.v.yxzy;
+ var yxzz = U.v.yxzz;
+ var yyxx = U.v.yyxx;
+ var yyxy = U.v.yyxy;
+ var yyxz = U.v.yyxz;
+ var yyyx = U.v.yyyx;
+ var yyyy = U.v.yyyy;
+ var yyyz = U.v.yyyz;
+ var yyzx = U.v.yyzx;
+ var yyzy = U.v.yyzy;
+ var yyzz = U.v.yyzz;
+ var yzxx = U.v.yzxx;
+ var yzxy = U.v.yzxy;
+ var yzxz = U.v.yzxz;
+ var yzyx = U.v.yzyx;
+ var yzyy = U.v.yzyy;
+ var yzyz = U.v.yzyz;
+ var yzzx = U.v.yzzx;
+ var yzzy = U.v.yzzy;
+ var yzzz = U.v.yzzz;
+ var zxxx = U.v.zxxx;
+ var zxxy = U.v.zxxy;
+ var zxxz = U.v.zxxz;
+ var zxyx = U.v.zxyx;
+ var zxyy = U.v.zxyy;
+ var zxyz = U.v.zxyz;
+ var zxzx = U.v.zxzx;
+ var zxzy = U.v.zxzy;
+ var zxzz = U.v.zxzz;
+ var zyxx = U.v.zyxx;
+ var zyxy = U.v.zyxy;
+ var zyxz = U.v.zyxz;
+ var zyyx = U.v.zyyx;
+ var zyyy = U.v.zyyy;
+ var zyyz = U.v.zyyz;
+ var zyzx = U.v.zyzx;
+ var zyzy = U.v.zyzy;
+ var zyzz = U.v.zyzz;
+ var zzxx = U.v.zzxx;
+ var zzxy = U.v.zzxy;
+ var zzxz = U.v.zzxz;
+ var zzyx = U.v.zzyx;
+ var zzyy = U.v.zzyy;
+ var zzyz = U.v.zzyz;
+ var zzzx = U.v.zzzx;
+ var zzzy = U.v.zzzy;
+ var zzzz = U.v.zzzz;
+}
diff --git a/test/expressions/swizzle/read/packed_vec3/u32.wgsl b/test/expressions/swizzle/read/packed_vec3/u32.wgsl
new file mode 100644
index 0000000..358d13b
--- /dev/null
+++ b/test/expressions/swizzle/read/packed_vec3/u32.wgsl
@@ -0,0 +1,144 @@
+[[block]]
+struct S {
+ v: vec3<u32>;
+};
+
+[[group(0), binding(0)]] var<uniform> U : S;
+
+fn f() {
+ var v = U.v;
+
+ var x = U.v.x;
+ var y = U.v.y;
+ var z = U.v.z;
+
+ var xx = U.v.xx;
+ var xy = U.v.xy;
+ var xz = U.v.xz;
+ var yx = U.v.yx;
+ var yy = U.v.yy;
+ var yz = U.v.yz;
+ var zx = U.v.zx;
+ var zy = U.v.zy;
+ var zz = U.v.zz;
+
+ var xxx = U.v.xxx;
+ var xxy = U.v.xxy;
+ var xxz = U.v.xxz;
+ var xyx = U.v.xyx;
+ var xyy = U.v.xyy;
+ var xyz = U.v.xyz;
+ var xzx = U.v.xzx;
+ var xzy = U.v.xzy;
+ var xzz = U.v.xzz;
+
+ var yxx = U.v.yxx;
+ var yxy = U.v.yxy;
+ var yxz = U.v.yxz;
+ var yyx = U.v.yyx;
+ var yyy = U.v.yyy;
+ var yyz = U.v.yyz;
+ var yzx = U.v.yzx;
+ var yzy = U.v.yzy;
+ var yzz = U.v.yzz;
+
+ var zxx = U.v.zxx;
+ var zxy = U.v.zxy;
+ var zxz = U.v.zxz;
+ var zyx = U.v.zyx;
+ var zyy = U.v.zyy;
+ var zyz = U.v.zyz;
+ var zzx = U.v.zzx;
+ var zzy = U.v.zzy;
+ var zzz = U.v.zzz;
+
+ var xxxx = U.v.xxxx;
+ var xxxy = U.v.xxxy;
+ var xxxz = U.v.xxxz;
+ var xxyx = U.v.xxyx;
+ var xxyy = U.v.xxyy;
+ var xxyz = U.v.xxyz;
+ var xxzx = U.v.xxzx;
+ var xxzy = U.v.xxzy;
+ var xxzz = U.v.xxzz;
+
+ var xyxx = U.v.xyxx;
+ var xyxy = U.v.xyxy;
+ var xyxz = U.v.xyxz;
+ var xyyx = U.v.xyyx;
+ var xyyy = U.v.xyyy;
+ var xyyz = U.v.xyyz;
+ var xyzx = U.v.xyzx;
+ var xyzy = U.v.xyzy;
+ var xyzz = U.v.xyzz;
+
+ var xzxx = U.v.xzxx;
+ var xzxy = U.v.xzxy;
+ var xzxz = U.v.xzxz;
+ var xzyx = U.v.xzyx;
+ var xzyy = U.v.xzyy;
+ var xzyz = U.v.xzyz;
+ var xzzx = U.v.xzzx;
+ var xzzy = U.v.xzzy;
+ var xzzz = U.v.xzzz;
+
+ var yxxx = U.v.yxxx;
+ var yxxy = U.v.yxxy;
+ var yxxz = U.v.yxxz;
+ var yxyx = U.v.yxyx;
+ var yxyy = U.v.yxyy;
+ var yxyz = U.v.yxyz;
+ var yxzx = U.v.yxzx;
+ var yxzy = U.v.yxzy;
+ var yxzz = U.v.yxzz;
+
+ var yyxx = U.v.yyxx;
+ var yyxy = U.v.yyxy;
+ var yyxz = U.v.yyxz;
+ var yyyx = U.v.yyyx;
+ var yyyy = U.v.yyyy;
+ var yyyz = U.v.yyyz;
+ var yyzx = U.v.yyzx;
+ var yyzy = U.v.yyzy;
+ var yyzz = U.v.yyzz;
+
+ var yzxx = U.v.yzxx;
+ var yzxy = U.v.yzxy;
+ var yzxz = U.v.yzxz;
+ var yzyx = U.v.yzyx;
+ var yzyy = U.v.yzyy;
+ var yzyz = U.v.yzyz;
+ var yzzx = U.v.yzzx;
+ var yzzy = U.v.yzzy;
+ var yzzz = U.v.yzzz;
+
+ var zxxx = U.v.zxxx;
+ var zxxy = U.v.zxxy;
+ var zxxz = U.v.zxxz;
+ var zxyx = U.v.zxyx;
+ var zxyy = U.v.zxyy;
+ var zxyz = U.v.zxyz;
+ var zxzx = U.v.zxzx;
+ var zxzy = U.v.zxzy;
+ var zxzz = U.v.zxzz;
+
+ var zyxx = U.v.zyxx;
+ var zyxy = U.v.zyxy;
+ var zyxz = U.v.zyxz;
+ var zyyx = U.v.zyyx;
+ var zyyy = U.v.zyyy;
+ var zyyz = U.v.zyyz;
+ var zyzx = U.v.zyzx;
+ var zyzy = U.v.zyzy;
+ var zyzz = U.v.zyzz;
+
+ var zzxx = U.v.zzxx;
+ var zzxy = U.v.zzxy;
+ var zzxz = U.v.zzxz;
+ var zzyx = U.v.zzyx;
+ var zzyy = U.v.zzyy;
+ var zzyz = U.v.zzyz;
+ var zzzx = U.v.zzzx;
+ var zzzy = U.v.zzzy;
+ var zzzz = U.v.zzzz;
+}
diff --git a/test/expressions/swizzle/read/packed_vec3/u32.wgsl.expected.hlsl b/test/expressions/swizzle/read/packed_vec3/u32.wgsl.expected.hlsl
new file mode 100644
index 0000000..72d8077
--- /dev/null
+++ b/test/expressions/swizzle/read/packed_vec3/u32.wgsl.expected.hlsl
@@ -0,0 +1,132 @@
+[numthreads(1, 1, 1)]
+void unused_entry_point() {
+ return;
+}
+
+cbuffer cbuffer_U : register(b0, space0) {
+ uint4 U[1];
+};
+
+void f() {
+ uint3 v = U[0].xyz;
+ uint x = U[0].x;
+ uint y = U[0].y;
+ uint z = U[0].z;
+ uint2 xx = U[0].xyz.xx;
+ uint2 xy = U[0].xyz.xy;
+ uint2 xz = U[0].xyz.xz;
+ uint2 yx = U[0].xyz.yx;
+ uint2 yy = U[0].xyz.yy;
+ uint2 yz = U[0].xyz.yz;
+ uint2 zx = U[0].xyz.zx;
+ uint2 zy = U[0].xyz.zy;
+ uint2 zz = U[0].xyz.zz;
+ uint3 xxx = U[0].xyz.xxx;
+ uint3 xxy = U[0].xyz.xxy;
+ uint3 xxz = U[0].xyz.xxz;
+ uint3 xyx = U[0].xyz.xyx;
+ uint3 xyy = U[0].xyz.xyy;
+ uint3 xyz = U[0].xyz.xyz;
+ uint3 xzx = U[0].xyz.xzx;
+ uint3 xzy = U[0].xyz.xzy;
+ uint3 xzz = U[0].xyz.xzz;
+ uint3 yxx = U[0].xyz.yxx;
+ uint3 yxy = U[0].xyz.yxy;
+ uint3 yxz = U[0].xyz.yxz;
+ uint3 yyx = U[0].xyz.yyx;
+ uint3 yyy = U[0].xyz.yyy;
+ uint3 yyz = U[0].xyz.yyz;
+ uint3 yzx = U[0].xyz.yzx;
+ uint3 yzy = U[0].xyz.yzy;
+ uint3 yzz = U[0].xyz.yzz;
+ uint3 zxx = U[0].xyz.zxx;
+ uint3 zxy = U[0].xyz.zxy;
+ uint3 zxz = U[0].xyz.zxz;
+ uint3 zyx = U[0].xyz.zyx;
+ uint3 zyy = U[0].xyz.zyy;
+ uint3 zyz = U[0].xyz.zyz;
+ uint3 zzx = U[0].xyz.zzx;
+ uint3 zzy = U[0].xyz.zzy;
+ uint3 zzz = U[0].xyz.zzz;
+ uint4 xxxx = U[0].xyz.xxxx;
+ uint4 xxxy = U[0].xyz.xxxy;
+ uint4 xxxz = U[0].xyz.xxxz;
+ uint4 xxyx = U[0].xyz.xxyx;
+ uint4 xxyy = U[0].xyz.xxyy;
+ uint4 xxyz = U[0].xyz.xxyz;
+ uint4 xxzx = U[0].xyz.xxzx;
+ uint4 xxzy = U[0].xyz.xxzy;
+ uint4 xxzz = U[0].xyz.xxzz;
+ uint4 xyxx = U[0].xyz.xyxx;
+ uint4 xyxy = U[0].xyz.xyxy;
+ uint4 xyxz = U[0].xyz.xyxz;
+ uint4 xyyx = U[0].xyz.xyyx;
+ uint4 xyyy = U[0].xyz.xyyy;
+ uint4 xyyz = U[0].xyz.xyyz;
+ uint4 xyzx = U[0].xyz.xyzx;
+ uint4 xyzy = U[0].xyz.xyzy;
+ uint4 xyzz = U[0].xyz.xyzz;
+ uint4 xzxx = U[0].xyz.xzxx;
+ uint4 xzxy = U[0].xyz.xzxy;
+ uint4 xzxz = U[0].xyz.xzxz;
+ uint4 xzyx = U[0].xyz.xzyx;
+ uint4 xzyy = U[0].xyz.xzyy;
+ uint4 xzyz = U[0].xyz.xzyz;
+ uint4 xzzx = U[0].xyz.xzzx;
+ uint4 xzzy = U[0].xyz.xzzy;
+ uint4 xzzz = U[0].xyz.xzzz;
+ uint4 yxxx = U[0].xyz.yxxx;
+ uint4 yxxy = U[0].xyz.yxxy;
+ uint4 yxxz = U[0].xyz.yxxz;
+ uint4 yxyx = U[0].xyz.yxyx;
+ uint4 yxyy = U[0].xyz.yxyy;
+ uint4 yxyz = U[0].xyz.yxyz;
+ uint4 yxzx = U[0].xyz.yxzx;
+ uint4 yxzy = U[0].xyz.yxzy;
+ uint4 yxzz = U[0].xyz.yxzz;
+ uint4 yyxx = U[0].xyz.yyxx;
+ uint4 yyxy = U[0].xyz.yyxy;
+ uint4 yyxz = U[0].xyz.yyxz;
+ uint4 yyyx = U[0].xyz.yyyx;
+ uint4 yyyy = U[0].xyz.yyyy;
+ uint4 yyyz = U[0].xyz.yyyz;
+ uint4 yyzx = U[0].xyz.yyzx;
+ uint4 yyzy = U[0].xyz.yyzy;
+ uint4 yyzz = U[0].xyz.yyzz;
+ uint4 yzxx = U[0].xyz.yzxx;
+ uint4 yzxy = U[0].xyz.yzxy;
+ uint4 yzxz = U[0].xyz.yzxz;
+ uint4 yzyx = U[0].xyz.yzyx;
+ uint4 yzyy = U[0].xyz.yzyy;
+ uint4 yzyz = U[0].xyz.yzyz;
+ uint4 yzzx = U[0].xyz.yzzx;
+ uint4 yzzy = U[0].xyz.yzzy;
+ uint4 yzzz = U[0].xyz.yzzz;
+ uint4 zxxx = U[0].xyz.zxxx;
+ uint4 zxxy = U[0].xyz.zxxy;
+ uint4 zxxz = U[0].xyz.zxxz;
+ uint4 zxyx = U[0].xyz.zxyx;
+ uint4 zxyy = U[0].xyz.zxyy;
+ uint4 zxyz = U[0].xyz.zxyz;
+ uint4 zxzx = U[0].xyz.zxzx;
+ uint4 zxzy = U[0].xyz.zxzy;
+ uint4 zxzz = U[0].xyz.zxzz;
+ uint4 zyxx = U[0].xyz.zyxx;
+ uint4 zyxy = U[0].xyz.zyxy;
+ uint4 zyxz = U[0].xyz.zyxz;
+ uint4 zyyx = U[0].xyz.zyyx;
+ uint4 zyyy = U[0].xyz.zyyy;
+ uint4 zyyz = U[0].xyz.zyyz;
+ uint4 zyzx = U[0].xyz.zyzx;
+ uint4 zyzy = U[0].xyz.zyzy;
+ uint4 zyzz = U[0].xyz.zyzz;
+ uint4 zzxx = U[0].xyz.zzxx;
+ uint4 zzxy = U[0].xyz.zzxy;
+ uint4 zzxz = U[0].xyz.zzxz;
+ uint4 zzyx = U[0].xyz.zzyx;
+ uint4 zzyy = U[0].xyz.zzyy;
+ uint4 zzyz = U[0].xyz.zzyz;
+ uint4 zzzx = U[0].xyz.zzzx;
+ uint4 zzzy = U[0].xyz.zzzy;
+ uint4 zzzz = U[0].xyz.zzzz;
+}
diff --git a/test/expressions/swizzle/read/packed_vec3/u32.wgsl.expected.msl b/test/expressions/swizzle/read/packed_vec3/u32.wgsl.expected.msl
new file mode 100644
index 0000000..d3ff2d4
--- /dev/null
+++ b/test/expressions/swizzle/read/packed_vec3/u32.wgsl.expected.msl
@@ -0,0 +1,132 @@
+#include <metal_stdlib>
+
+using namespace metal;
+struct S {
+ /* 0x0000 */ packed_uint3 v;
+ /* 0x000c */ int8_t tint_pad[4];
+};
+
+void f(constant S& U) {
+ uint3 v = U.v;
+ uint x = U.v[0];
+ uint y = U.v[1];
+ uint z = U.v[2];
+ uint2 xx = uint3(U.v).xx;
+ uint2 xy = uint3(U.v).xy;
+ uint2 xz = uint3(U.v).xz;
+ uint2 yx = uint3(U.v).yx;
+ uint2 yy = uint3(U.v).yy;
+ uint2 yz = uint3(U.v).yz;
+ uint2 zx = uint3(U.v).zx;
+ uint2 zy = uint3(U.v).zy;
+ uint2 zz = uint3(U.v).zz;
+ uint3 xxx = uint3(U.v).xxx;
+ uint3 xxy = uint3(U.v).xxy;
+ uint3 xxz = uint3(U.v).xxz;
+ uint3 xyx = uint3(U.v).xyx;
+ uint3 xyy = uint3(U.v).xyy;
+ uint3 xyz = uint3(U.v).xyz;
+ uint3 xzx = uint3(U.v).xzx;
+ uint3 xzy = uint3(U.v).xzy;
+ uint3 xzz = uint3(U.v).xzz;
+ uint3 yxx = uint3(U.v).yxx;
+ uint3 yxy = uint3(U.v).yxy;
+ uint3 yxz = uint3(U.v).yxz;
+ uint3 yyx = uint3(U.v).yyx;
+ uint3 yyy = uint3(U.v).yyy;
+ uint3 yyz = uint3(U.v).yyz;
+ uint3 yzx = uint3(U.v).yzx;
+ uint3 yzy = uint3(U.v).yzy;
+ uint3 yzz = uint3(U.v).yzz;
+ uint3 zxx = uint3(U.v).zxx;
+ uint3 zxy = uint3(U.v).zxy;
+ uint3 zxz = uint3(U.v).zxz;
+ uint3 zyx = uint3(U.v).zyx;
+ uint3 zyy = uint3(U.v).zyy;
+ uint3 zyz = uint3(U.v).zyz;
+ uint3 zzx = uint3(U.v).zzx;
+ uint3 zzy = uint3(U.v).zzy;
+ uint3 zzz = uint3(U.v).zzz;
+ uint4 xxxx = uint3(U.v).xxxx;
+ uint4 xxxy = uint3(U.v).xxxy;
+ uint4 xxxz = uint3(U.v).xxxz;
+ uint4 xxyx = uint3(U.v).xxyx;
+ uint4 xxyy = uint3(U.v).xxyy;
+ uint4 xxyz = uint3(U.v).xxyz;
+ uint4 xxzx = uint3(U.v).xxzx;
+ uint4 xxzy = uint3(U.v).xxzy;
+ uint4 xxzz = uint3(U.v).xxzz;
+ uint4 xyxx = uint3(U.v).xyxx;
+ uint4 xyxy = uint3(U.v).xyxy;
+ uint4 xyxz = uint3(U.v).xyxz;
+ uint4 xyyx = uint3(U.v).xyyx;
+ uint4 xyyy = uint3(U.v).xyyy;
+ uint4 xyyz = uint3(U.v).xyyz;
+ uint4 xyzx = uint3(U.v).xyzx;
+ uint4 xyzy = uint3(U.v).xyzy;
+ uint4 xyzz = uint3(U.v).xyzz;
+ uint4 xzxx = uint3(U.v).xzxx;
+ uint4 xzxy = uint3(U.v).xzxy;
+ uint4 xzxz = uint3(U.v).xzxz;
+ uint4 xzyx = uint3(U.v).xzyx;
+ uint4 xzyy = uint3(U.v).xzyy;
+ uint4 xzyz = uint3(U.v).xzyz;
+ uint4 xzzx = uint3(U.v).xzzx;
+ uint4 xzzy = uint3(U.v).xzzy;
+ uint4 xzzz = uint3(U.v).xzzz;
+ uint4 yxxx = uint3(U.v).yxxx;
+ uint4 yxxy = uint3(U.v).yxxy;
+ uint4 yxxz = uint3(U.v).yxxz;
+ uint4 yxyx = uint3(U.v).yxyx;
+ uint4 yxyy = uint3(U.v).yxyy;
+ uint4 yxyz = uint3(U.v).yxyz;
+ uint4 yxzx = uint3(U.v).yxzx;
+ uint4 yxzy = uint3(U.v).yxzy;
+ uint4 yxzz = uint3(U.v).yxzz;
+ uint4 yyxx = uint3(U.v).yyxx;
+ uint4 yyxy = uint3(U.v).yyxy;
+ uint4 yyxz = uint3(U.v).yyxz;
+ uint4 yyyx = uint3(U.v).yyyx;
+ uint4 yyyy = uint3(U.v).yyyy;
+ uint4 yyyz = uint3(U.v).yyyz;
+ uint4 yyzx = uint3(U.v).yyzx;
+ uint4 yyzy = uint3(U.v).yyzy;
+ uint4 yyzz = uint3(U.v).yyzz;
+ uint4 yzxx = uint3(U.v).yzxx;
+ uint4 yzxy = uint3(U.v).yzxy;
+ uint4 yzxz = uint3(U.v).yzxz;
+ uint4 yzyx = uint3(U.v).yzyx;
+ uint4 yzyy = uint3(U.v).yzyy;
+ uint4 yzyz = uint3(U.v).yzyz;
+ uint4 yzzx = uint3(U.v).yzzx;
+ uint4 yzzy = uint3(U.v).yzzy;
+ uint4 yzzz = uint3(U.v).yzzz;
+ uint4 zxxx = uint3(U.v).zxxx;
+ uint4 zxxy = uint3(U.v).zxxy;
+ uint4 zxxz = uint3(U.v).zxxz;
+ uint4 zxyx = uint3(U.v).zxyx;
+ uint4 zxyy = uint3(U.v).zxyy;
+ uint4 zxyz = uint3(U.v).zxyz;
+ uint4 zxzx = uint3(U.v).zxzx;
+ uint4 zxzy = uint3(U.v).zxzy;
+ uint4 zxzz = uint3(U.v).zxzz;
+ uint4 zyxx = uint3(U.v).zyxx;
+ uint4 zyxy = uint3(U.v).zyxy;
+ uint4 zyxz = uint3(U.v).zyxz;
+ uint4 zyyx = uint3(U.v).zyyx;
+ uint4 zyyy = uint3(U.v).zyyy;
+ uint4 zyyz = uint3(U.v).zyyz;
+ uint4 zyzx = uint3(U.v).zyzx;
+ uint4 zyzy = uint3(U.v).zyzy;
+ uint4 zyzz = uint3(U.v).zyzz;
+ uint4 zzxx = uint3(U.v).zzxx;
+ uint4 zzxy = uint3(U.v).zzxy;
+ uint4 zzxz = uint3(U.v).zzxz;
+ uint4 zzyx = uint3(U.v).zzyx;
+ uint4 zzyy = uint3(U.v).zzyy;
+ uint4 zzyz = uint3(U.v).zzyz;
+ uint4 zzzx = uint3(U.v).zzzx;
+ uint4 zzzy = uint3(U.v).zzzy;
+ uint4 zzzz = uint3(U.v).zzzz;
+}
+
diff --git a/test/expressions/swizzle/read/packed_vec3/u32.wgsl.expected.spvasm b/test/expressions/swizzle/read/packed_vec3/u32.wgsl.expected.spvasm
new file mode 100644
index 0000000..f38664d
--- /dev/null
+++ b/test/expressions/swizzle/read/packed_vec3/u32.wgsl.expected.spvasm
@@ -0,0 +1,771 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 507
+; Schema: 0
+ OpCapability Shader
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
+ OpExecutionMode %unused_entry_point LocalSize 1 1 1
+ OpName %S "S"
+ OpMemberName %S 0 "v"
+ OpName %U "U"
+ OpName %unused_entry_point "unused_entry_point"
+ OpName %f "f"
+ OpName %v "v"
+ OpName %x "x"
+ OpName %y "y"
+ OpName %z "z"
+ OpName %xx "xx"
+ OpName %xy "xy"
+ OpName %xz "xz"
+ OpName %yx "yx"
+ OpName %yy "yy"
+ OpName %yz "yz"
+ OpName %zx "zx"
+ OpName %zy "zy"
+ OpName %zz "zz"
+ OpName %xxx "xxx"
+ OpName %xxy "xxy"
+ OpName %xxz "xxz"
+ OpName %xyx "xyx"
+ OpName %xyy "xyy"
+ OpName %xyz "xyz"
+ OpName %xzx "xzx"
+ OpName %xzy "xzy"
+ OpName %xzz "xzz"
+ OpName %yxx "yxx"
+ OpName %yxy "yxy"
+ OpName %yxz "yxz"
+ OpName %yyx "yyx"
+ OpName %yyy "yyy"
+ OpName %yyz "yyz"
+ OpName %yzx "yzx"
+ OpName %yzy "yzy"
+ OpName %yzz "yzz"
+ OpName %zxx "zxx"
+ OpName %zxy "zxy"
+ OpName %zxz "zxz"
+ OpName %zyx "zyx"
+ OpName %zyy "zyy"
+ OpName %zyz "zyz"
+ OpName %zzx "zzx"
+ OpName %zzy "zzy"
+ OpName %zzz "zzz"
+ OpName %xxxx "xxxx"
+ OpName %xxxy "xxxy"
+ OpName %xxxz "xxxz"
+ OpName %xxyx "xxyx"
+ OpName %xxyy "xxyy"
+ OpName %xxyz "xxyz"
+ OpName %xxzx "xxzx"
+ OpName %xxzy "xxzy"
+ OpName %xxzz "xxzz"
+ OpName %xyxx "xyxx"
+ OpName %xyxy "xyxy"
+ OpName %xyxz "xyxz"
+ OpName %xyyx "xyyx"
+ OpName %xyyy "xyyy"
+ OpName %xyyz "xyyz"
+ OpName %xyzx "xyzx"
+ OpName %xyzy "xyzy"
+ OpName %xyzz "xyzz"
+ OpName %xzxx "xzxx"
+ OpName %xzxy "xzxy"
+ OpName %xzxz "xzxz"
+ OpName %xzyx "xzyx"
+ OpName %xzyy "xzyy"
+ OpName %xzyz "xzyz"
+ OpName %xzzx "xzzx"
+ OpName %xzzy "xzzy"
+ OpName %xzzz "xzzz"
+ OpName %yxxx "yxxx"
+ OpName %yxxy "yxxy"
+ OpName %yxxz "yxxz"
+ OpName %yxyx "yxyx"
+ OpName %yxyy "yxyy"
+ OpName %yxyz "yxyz"
+ OpName %yxzx "yxzx"
+ OpName %yxzy "yxzy"
+ OpName %yxzz "yxzz"
+ OpName %yyxx "yyxx"
+ OpName %yyxy "yyxy"
+ OpName %yyxz "yyxz"
+ OpName %yyyx "yyyx"
+ OpName %yyyy "yyyy"
+ OpName %yyyz "yyyz"
+ OpName %yyzx "yyzx"
+ OpName %yyzy "yyzy"
+ OpName %yyzz "yyzz"
+ OpName %yzxx "yzxx"
+ OpName %yzxy "yzxy"
+ OpName %yzxz "yzxz"
+ OpName %yzyx "yzyx"
+ OpName %yzyy "yzyy"
+ OpName %yzyz "yzyz"
+ OpName %yzzx "yzzx"
+ OpName %yzzy "yzzy"
+ OpName %yzzz "yzzz"
+ OpName %zxxx "zxxx"
+ OpName %zxxy "zxxy"
+ OpName %zxxz "zxxz"
+ OpName %zxyx "zxyx"
+ OpName %zxyy "zxyy"
+ OpName %zxyz "zxyz"
+ OpName %zxzx "zxzx"
+ OpName %zxzy "zxzy"
+ OpName %zxzz "zxzz"
+ OpName %zyxx "zyxx"
+ OpName %zyxy "zyxy"
+ OpName %zyxz "zyxz"
+ OpName %zyyx "zyyx"
+ OpName %zyyy "zyyy"
+ OpName %zyyz "zyyz"
+ OpName %zyzx "zyzx"
+ OpName %zyzy "zyzy"
+ OpName %zyzz "zyzz"
+ OpName %zzxx "zzxx"
+ OpName %zzxy "zzxy"
+ OpName %zzxz "zzxz"
+ OpName %zzyx "zzyx"
+ OpName %zzyy "zzyy"
+ OpName %zzyz "zzyz"
+ OpName %zzzx "zzzx"
+ OpName %zzzy "zzzy"
+ OpName %zzzz "zzzz"
+ OpDecorate %S Block
+ OpMemberDecorate %S 0 Offset 0
+ OpDecorate %U NonWritable
+ OpDecorate %U DescriptorSet 0
+ OpDecorate %U Binding 0
+ %uint = OpTypeInt 32 0
+ %v3uint = OpTypeVector %uint 3
+ %S = OpTypeStruct %v3uint
+%_ptr_Uniform_S = OpTypePointer Uniform %S
+ %U = OpVariable %_ptr_Uniform_S Uniform
+ %void = OpTypeVoid
+ %6 = OpTypeFunction %void
+ %uint_0 = OpConstant %uint 0
+%_ptr_Uniform_v3uint = OpTypePointer Uniform %v3uint
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+ %18 = OpConstantNull %v3uint
+%_ptr_Uniform_uint = OpTypePointer Uniform %uint
+%_ptr_Function_uint = OpTypePointer Function %uint
+ %24 = OpConstantNull %uint
+ %uint_1 = OpConstant %uint 1
+ %uint_2 = OpConstant %uint 2
+ %v2uint = OpTypeVector %uint 2
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+ %39 = OpConstantNull %v2uint
+ %v4uint = OpTypeVector %uint 4
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+ %186 = OpConstantNull %v4uint
+%unused_entry_point = OpFunction %void None %6
+ %9 = OpLabel
+ OpReturn
+ OpFunctionEnd
+ %f = OpFunction %void None %6
+ %11 = OpLabel
+ %v = OpVariable %_ptr_Function_v3uint Function %18
+ %x = OpVariable %_ptr_Function_uint Function %24
+ %y = OpVariable %_ptr_Function_uint Function %24
+ %z = OpVariable %_ptr_Function_uint Function %24
+ %xx = OpVariable %_ptr_Function_v2uint Function %39
+ %xy = OpVariable %_ptr_Function_v2uint Function %39
+ %xz = OpVariable %_ptr_Function_v2uint Function %39
+ %yx = OpVariable %_ptr_Function_v2uint Function %39
+ %yy = OpVariable %_ptr_Function_v2uint Function %39
+ %yz = OpVariable %_ptr_Function_v2uint Function %39
+ %zx = OpVariable %_ptr_Function_v2uint Function %39
+ %zy = OpVariable %_ptr_Function_v2uint Function %39
+ %zz = OpVariable %_ptr_Function_v2uint Function %39
+ %xxx = OpVariable %_ptr_Function_v3uint Function %18
+ %xxy = OpVariable %_ptr_Function_v3uint Function %18
+ %xxz = OpVariable %_ptr_Function_v3uint Function %18
+ %xyx = OpVariable %_ptr_Function_v3uint Function %18
+ %xyy = OpVariable %_ptr_Function_v3uint Function %18
+ %xyz = OpVariable %_ptr_Function_v3uint Function %18
+ %xzx = OpVariable %_ptr_Function_v3uint Function %18
+ %xzy = OpVariable %_ptr_Function_v3uint Function %18
+ %xzz = OpVariable %_ptr_Function_v3uint Function %18
+ %yxx = OpVariable %_ptr_Function_v3uint Function %18
+ %yxy = OpVariable %_ptr_Function_v3uint Function %18
+ %yxz = OpVariable %_ptr_Function_v3uint Function %18
+ %yyx = OpVariable %_ptr_Function_v3uint Function %18
+ %yyy = OpVariable %_ptr_Function_v3uint Function %18
+ %yyz = OpVariable %_ptr_Function_v3uint Function %18
+ %yzx = OpVariable %_ptr_Function_v3uint Function %18
+ %yzy = OpVariable %_ptr_Function_v3uint Function %18
+ %yzz = OpVariable %_ptr_Function_v3uint Function %18
+ %zxx = OpVariable %_ptr_Function_v3uint Function %18
+ %zxy = OpVariable %_ptr_Function_v3uint Function %18
+ %zxz = OpVariable %_ptr_Function_v3uint Function %18
+ %zyx = OpVariable %_ptr_Function_v3uint Function %18
+ %zyy = OpVariable %_ptr_Function_v3uint Function %18
+ %zyz = OpVariable %_ptr_Function_v3uint Function %18
+ %zzx = OpVariable %_ptr_Function_v3uint Function %18
+ %zzy = OpVariable %_ptr_Function_v3uint Function %18
+ %zzz = OpVariable %_ptr_Function_v3uint Function %18
+ %xxxx = OpVariable %_ptr_Function_v4uint Function %186
+ %xxxy = OpVariable %_ptr_Function_v4uint Function %186
+ %xxxz = OpVariable %_ptr_Function_v4uint Function %186
+ %xxyx = OpVariable %_ptr_Function_v4uint Function %186
+ %xxyy = OpVariable %_ptr_Function_v4uint Function %186
+ %xxyz = OpVariable %_ptr_Function_v4uint Function %186
+ %xxzx = OpVariable %_ptr_Function_v4uint Function %186
+ %xxzy = OpVariable %_ptr_Function_v4uint Function %186
+ %xxzz = OpVariable %_ptr_Function_v4uint Function %186
+ %xyxx = OpVariable %_ptr_Function_v4uint Function %186
+ %xyxy = OpVariable %_ptr_Function_v4uint Function %186
+ %xyxz = OpVariable %_ptr_Function_v4uint Function %186
+ %xyyx = OpVariable %_ptr_Function_v4uint Function %186
+ %xyyy = OpVariable %_ptr_Function_v4uint Function %186
+ %xyyz = OpVariable %_ptr_Function_v4uint Function %186
+ %xyzx = OpVariable %_ptr_Function_v4uint Function %186
+ %xyzy = OpVariable %_ptr_Function_v4uint Function %186
+ %xyzz = OpVariable %_ptr_Function_v4uint Function %186
+ %xzxx = OpVariable %_ptr_Function_v4uint Function %186
+ %xzxy = OpVariable %_ptr_Function_v4uint Function %186
+ %xzxz = OpVariable %_ptr_Function_v4uint Function %186
+ %xzyx = OpVariable %_ptr_Function_v4uint Function %186
+ %xzyy = OpVariable %_ptr_Function_v4uint Function %186
+ %xzyz = OpVariable %_ptr_Function_v4uint Function %186
+ %xzzx = OpVariable %_ptr_Function_v4uint Function %186
+ %xzzy = OpVariable %_ptr_Function_v4uint Function %186
+ %xzzz = OpVariable %_ptr_Function_v4uint Function %186
+ %yxxx = OpVariable %_ptr_Function_v4uint Function %186
+ %yxxy = OpVariable %_ptr_Function_v4uint Function %186
+ %yxxz = OpVariable %_ptr_Function_v4uint Function %186
+ %yxyx = OpVariable %_ptr_Function_v4uint Function %186
+ %yxyy = OpVariable %_ptr_Function_v4uint Function %186
+ %yxyz = OpVariable %_ptr_Function_v4uint Function %186
+ %yxzx = OpVariable %_ptr_Function_v4uint Function %186
+ %yxzy = OpVariable %_ptr_Function_v4uint Function %186
+ %yxzz = OpVariable %_ptr_Function_v4uint Function %186
+ %yyxx = OpVariable %_ptr_Function_v4uint Function %186
+ %yyxy = OpVariable %_ptr_Function_v4uint Function %186
+ %yyxz = OpVariable %_ptr_Function_v4uint Function %186
+ %yyyx = OpVariable %_ptr_Function_v4uint Function %186
+ %yyyy = OpVariable %_ptr_Function_v4uint Function %186
+ %yyyz = OpVariable %_ptr_Function_v4uint Function %186
+ %yyzx = OpVariable %_ptr_Function_v4uint Function %186
+ %yyzy = OpVariable %_ptr_Function_v4uint Function %186
+ %yyzz = OpVariable %_ptr_Function_v4uint Function %186
+ %yzxx = OpVariable %_ptr_Function_v4uint Function %186
+ %yzxy = OpVariable %_ptr_Function_v4uint Function %186
+ %yzxz = OpVariable %_ptr_Function_v4uint Function %186
+ %yzyx = OpVariable %_ptr_Function_v4uint Function %186
+ %yzyy = OpVariable %_ptr_Function_v4uint Function %186
+ %yzyz = OpVariable %_ptr_Function_v4uint Function %186
+ %yzzx = OpVariable %_ptr_Function_v4uint Function %186
+ %yzzy = OpVariable %_ptr_Function_v4uint Function %186
+ %yzzz = OpVariable %_ptr_Function_v4uint Function %186
+ %zxxx = OpVariable %_ptr_Function_v4uint Function %186
+ %zxxy = OpVariable %_ptr_Function_v4uint Function %186
+ %zxxz = OpVariable %_ptr_Function_v4uint Function %186
+ %zxyx = OpVariable %_ptr_Function_v4uint Function %186
+ %zxyy = OpVariable %_ptr_Function_v4uint Function %186
+ %zxyz = OpVariable %_ptr_Function_v4uint Function %186
+ %zxzx = OpVariable %_ptr_Function_v4uint Function %186
+ %zxzy = OpVariable %_ptr_Function_v4uint Function %186
+ %zxzz = OpVariable %_ptr_Function_v4uint Function %186
+ %zyxx = OpVariable %_ptr_Function_v4uint Function %186
+ %zyxy = OpVariable %_ptr_Function_v4uint Function %186
+ %zyxz = OpVariable %_ptr_Function_v4uint Function %186
+ %zyyx = OpVariable %_ptr_Function_v4uint Function %186
+ %zyyy = OpVariable %_ptr_Function_v4uint Function %186
+ %zyyz = OpVariable %_ptr_Function_v4uint Function %186
+ %zyzx = OpVariable %_ptr_Function_v4uint Function %186
+ %zyzy = OpVariable %_ptr_Function_v4uint Function %186
+ %zyzz = OpVariable %_ptr_Function_v4uint Function %186
+ %zzxx = OpVariable %_ptr_Function_v4uint Function %186
+ %zzxy = OpVariable %_ptr_Function_v4uint Function %186
+ %zzxz = OpVariable %_ptr_Function_v4uint Function %186
+ %zzyx = OpVariable %_ptr_Function_v4uint Function %186
+ %zzyy = OpVariable %_ptr_Function_v4uint Function %186
+ %zzyz = OpVariable %_ptr_Function_v4uint Function %186
+ %zzzx = OpVariable %_ptr_Function_v4uint Function %186
+ %zzzy = OpVariable %_ptr_Function_v4uint Function %186
+ %zzzz = OpVariable %_ptr_Function_v4uint Function %186
+ %14 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %15 = OpLoad %v3uint %14
+ OpStore %v %15
+ %20 = OpAccessChain %_ptr_Uniform_uint %U %uint_0 %uint_0
+ %21 = OpLoad %uint %20
+ OpStore %x %21
+ %26 = OpAccessChain %_ptr_Uniform_uint %U %uint_0 %uint_1
+ %27 = OpLoad %uint %26
+ OpStore %y %27
+ %30 = OpAccessChain %_ptr_Uniform_uint %U %uint_0 %uint_2
+ %31 = OpLoad %uint %30
+ OpStore %z %31
+ %33 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %35 = OpLoad %v3uint %33
+ %36 = OpVectorShuffle %v2uint %35 %35 0 0
+ OpStore %xx %36
+ %40 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %41 = OpLoad %v3uint %40
+ %42 = OpVectorShuffle %v2uint %41 %41 0 1
+ OpStore %xy %42
+ %44 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %45 = OpLoad %v3uint %44
+ %46 = OpVectorShuffle %v2uint %45 %45 0 2
+ OpStore %xz %46
+ %48 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %49 = OpLoad %v3uint %48
+ %50 = OpVectorShuffle %v2uint %49 %49 1 0
+ OpStore %yx %50
+ %52 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %53 = OpLoad %v3uint %52
+ %54 = OpVectorShuffle %v2uint %53 %53 1 1
+ OpStore %yy %54
+ %56 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %57 = OpLoad %v3uint %56
+ %58 = OpVectorShuffle %v2uint %57 %57 1 2
+ OpStore %yz %58
+ %60 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %61 = OpLoad %v3uint %60
+ %62 = OpVectorShuffle %v2uint %61 %61 2 0
+ OpStore %zx %62
+ %64 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %65 = OpLoad %v3uint %64
+ %66 = OpVectorShuffle %v2uint %65 %65 2 1
+ OpStore %zy %66
+ %68 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %69 = OpLoad %v3uint %68
+ %70 = OpVectorShuffle %v2uint %69 %69 2 2
+ OpStore %zz %70
+ %72 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %73 = OpLoad %v3uint %72
+ %74 = OpVectorShuffle %v3uint %73 %73 0 0 0
+ OpStore %xxx %74
+ %76 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %77 = OpLoad %v3uint %76
+ %78 = OpVectorShuffle %v3uint %77 %77 0 0 1
+ OpStore %xxy %78
+ %80 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %81 = OpLoad %v3uint %80
+ %82 = OpVectorShuffle %v3uint %81 %81 0 0 2
+ OpStore %xxz %82
+ %84 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %85 = OpLoad %v3uint %84
+ %86 = OpVectorShuffle %v3uint %85 %85 0 1 0
+ OpStore %xyx %86
+ %88 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %89 = OpLoad %v3uint %88
+ %90 = OpVectorShuffle %v3uint %89 %89 0 1 1
+ OpStore %xyy %90
+ %92 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %93 = OpLoad %v3uint %92
+ %94 = OpVectorShuffle %v3uint %93 %93 0 1 2
+ OpStore %xyz %94
+ %96 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %97 = OpLoad %v3uint %96
+ %98 = OpVectorShuffle %v3uint %97 %97 0 2 0
+ OpStore %xzx %98
+ %100 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %101 = OpLoad %v3uint %100
+ %102 = OpVectorShuffle %v3uint %101 %101 0 2 1
+ OpStore %xzy %102
+ %104 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %105 = OpLoad %v3uint %104
+ %106 = OpVectorShuffle %v3uint %105 %105 0 2 2
+ OpStore %xzz %106
+ %108 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %109 = OpLoad %v3uint %108
+ %110 = OpVectorShuffle %v3uint %109 %109 1 0 0
+ OpStore %yxx %110
+ %112 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %113 = OpLoad %v3uint %112
+ %114 = OpVectorShuffle %v3uint %113 %113 1 0 1
+ OpStore %yxy %114
+ %116 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %117 = OpLoad %v3uint %116
+ %118 = OpVectorShuffle %v3uint %117 %117 1 0 2
+ OpStore %yxz %118
+ %120 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %121 = OpLoad %v3uint %120
+ %122 = OpVectorShuffle %v3uint %121 %121 1 1 0
+ OpStore %yyx %122
+ %124 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %125 = OpLoad %v3uint %124
+ %126 = OpVectorShuffle %v3uint %125 %125 1 1 1
+ OpStore %yyy %126
+ %128 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %129 = OpLoad %v3uint %128
+ %130 = OpVectorShuffle %v3uint %129 %129 1 1 2
+ OpStore %yyz %130
+ %132 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %133 = OpLoad %v3uint %132
+ %134 = OpVectorShuffle %v3uint %133 %133 1 2 0
+ OpStore %yzx %134
+ %136 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %137 = OpLoad %v3uint %136
+ %138 = OpVectorShuffle %v3uint %137 %137 1 2 1
+ OpStore %yzy %138
+ %140 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %141 = OpLoad %v3uint %140
+ %142 = OpVectorShuffle %v3uint %141 %141 1 2 2
+ OpStore %yzz %142
+ %144 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %145 = OpLoad %v3uint %144
+ %146 = OpVectorShuffle %v3uint %145 %145 2 0 0
+ OpStore %zxx %146
+ %148 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %149 = OpLoad %v3uint %148
+ %150 = OpVectorShuffle %v3uint %149 %149 2 0 1
+ OpStore %zxy %150
+ %152 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %153 = OpLoad %v3uint %152
+ %154 = OpVectorShuffle %v3uint %153 %153 2 0 2
+ OpStore %zxz %154
+ %156 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %157 = OpLoad %v3uint %156
+ %158 = OpVectorShuffle %v3uint %157 %157 2 1 0
+ OpStore %zyx %158
+ %160 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %161 = OpLoad %v3uint %160
+ %162 = OpVectorShuffle %v3uint %161 %161 2 1 1
+ OpStore %zyy %162
+ %164 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %165 = OpLoad %v3uint %164
+ %166 = OpVectorShuffle %v3uint %165 %165 2 1 2
+ OpStore %zyz %166
+ %168 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %169 = OpLoad %v3uint %168
+ %170 = OpVectorShuffle %v3uint %169 %169 2 2 0
+ OpStore %zzx %170
+ %172 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %173 = OpLoad %v3uint %172
+ %174 = OpVectorShuffle %v3uint %173 %173 2 2 1
+ OpStore %zzy %174
+ %176 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %177 = OpLoad %v3uint %176
+ %178 = OpVectorShuffle %v3uint %177 %177 2 2 2
+ OpStore %zzz %178
+ %180 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %182 = OpLoad %v3uint %180
+ %183 = OpVectorShuffle %v4uint %182 %182 0 0 0 0
+ OpStore %xxxx %183
+ %187 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %188 = OpLoad %v3uint %187
+ %189 = OpVectorShuffle %v4uint %188 %188 0 0 0 1
+ OpStore %xxxy %189
+ %191 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %192 = OpLoad %v3uint %191
+ %193 = OpVectorShuffle %v4uint %192 %192 0 0 0 2
+ OpStore %xxxz %193
+ %195 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %196 = OpLoad %v3uint %195
+ %197 = OpVectorShuffle %v4uint %196 %196 0 0 1 0
+ OpStore %xxyx %197
+ %199 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %200 = OpLoad %v3uint %199
+ %201 = OpVectorShuffle %v4uint %200 %200 0 0 1 1
+ OpStore %xxyy %201
+ %203 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %204 = OpLoad %v3uint %203
+ %205 = OpVectorShuffle %v4uint %204 %204 0 0 1 2
+ OpStore %xxyz %205
+ %207 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %208 = OpLoad %v3uint %207
+ %209 = OpVectorShuffle %v4uint %208 %208 0 0 2 0
+ OpStore %xxzx %209
+ %211 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %212 = OpLoad %v3uint %211
+ %213 = OpVectorShuffle %v4uint %212 %212 0 0 2 1
+ OpStore %xxzy %213
+ %215 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %216 = OpLoad %v3uint %215
+ %217 = OpVectorShuffle %v4uint %216 %216 0 0 2 2
+ OpStore %xxzz %217
+ %219 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %220 = OpLoad %v3uint %219
+ %221 = OpVectorShuffle %v4uint %220 %220 0 1 0 0
+ OpStore %xyxx %221
+ %223 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %224 = OpLoad %v3uint %223
+ %225 = OpVectorShuffle %v4uint %224 %224 0 1 0 1
+ OpStore %xyxy %225
+ %227 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %228 = OpLoad %v3uint %227
+ %229 = OpVectorShuffle %v4uint %228 %228 0 1 0 2
+ OpStore %xyxz %229
+ %231 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %232 = OpLoad %v3uint %231
+ %233 = OpVectorShuffle %v4uint %232 %232 0 1 1 0
+ OpStore %xyyx %233
+ %235 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %236 = OpLoad %v3uint %235
+ %237 = OpVectorShuffle %v4uint %236 %236 0 1 1 1
+ OpStore %xyyy %237
+ %239 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %240 = OpLoad %v3uint %239
+ %241 = OpVectorShuffle %v4uint %240 %240 0 1 1 2
+ OpStore %xyyz %241
+ %243 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %244 = OpLoad %v3uint %243
+ %245 = OpVectorShuffle %v4uint %244 %244 0 1 2 0
+ OpStore %xyzx %245
+ %247 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %248 = OpLoad %v3uint %247
+ %249 = OpVectorShuffle %v4uint %248 %248 0 1 2 1
+ OpStore %xyzy %249
+ %251 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %252 = OpLoad %v3uint %251
+ %253 = OpVectorShuffle %v4uint %252 %252 0 1 2 2
+ OpStore %xyzz %253
+ %255 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %256 = OpLoad %v3uint %255
+ %257 = OpVectorShuffle %v4uint %256 %256 0 2 0 0
+ OpStore %xzxx %257
+ %259 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %260 = OpLoad %v3uint %259
+ %261 = OpVectorShuffle %v4uint %260 %260 0 2 0 1
+ OpStore %xzxy %261
+ %263 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %264 = OpLoad %v3uint %263
+ %265 = OpVectorShuffle %v4uint %264 %264 0 2 0 2
+ OpStore %xzxz %265
+ %267 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %268 = OpLoad %v3uint %267
+ %269 = OpVectorShuffle %v4uint %268 %268 0 2 1 0
+ OpStore %xzyx %269
+ %271 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %272 = OpLoad %v3uint %271
+ %273 = OpVectorShuffle %v4uint %272 %272 0 2 1 1
+ OpStore %xzyy %273
+ %275 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %276 = OpLoad %v3uint %275
+ %277 = OpVectorShuffle %v4uint %276 %276 0 2 1 2
+ OpStore %xzyz %277
+ %279 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %280 = OpLoad %v3uint %279
+ %281 = OpVectorShuffle %v4uint %280 %280 0 2 2 0
+ OpStore %xzzx %281
+ %283 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %284 = OpLoad %v3uint %283
+ %285 = OpVectorShuffle %v4uint %284 %284 0 2 2 1
+ OpStore %xzzy %285
+ %287 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %288 = OpLoad %v3uint %287
+ %289 = OpVectorShuffle %v4uint %288 %288 0 2 2 2
+ OpStore %xzzz %289
+ %291 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %292 = OpLoad %v3uint %291
+ %293 = OpVectorShuffle %v4uint %292 %292 1 0 0 0
+ OpStore %yxxx %293
+ %295 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %296 = OpLoad %v3uint %295
+ %297 = OpVectorShuffle %v4uint %296 %296 1 0 0 1
+ OpStore %yxxy %297
+ %299 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %300 = OpLoad %v3uint %299
+ %301 = OpVectorShuffle %v4uint %300 %300 1 0 0 2
+ OpStore %yxxz %301
+ %303 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %304 = OpLoad %v3uint %303
+ %305 = OpVectorShuffle %v4uint %304 %304 1 0 1 0
+ OpStore %yxyx %305
+ %307 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %308 = OpLoad %v3uint %307
+ %309 = OpVectorShuffle %v4uint %308 %308 1 0 1 1
+ OpStore %yxyy %309
+ %311 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %312 = OpLoad %v3uint %311
+ %313 = OpVectorShuffle %v4uint %312 %312 1 0 1 2
+ OpStore %yxyz %313
+ %315 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %316 = OpLoad %v3uint %315
+ %317 = OpVectorShuffle %v4uint %316 %316 1 0 2 0
+ OpStore %yxzx %317
+ %319 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %320 = OpLoad %v3uint %319
+ %321 = OpVectorShuffle %v4uint %320 %320 1 0 2 1
+ OpStore %yxzy %321
+ %323 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %324 = OpLoad %v3uint %323
+ %325 = OpVectorShuffle %v4uint %324 %324 1 0 2 2
+ OpStore %yxzz %325
+ %327 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %328 = OpLoad %v3uint %327
+ %329 = OpVectorShuffle %v4uint %328 %328 1 1 0 0
+ OpStore %yyxx %329
+ %331 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %332 = OpLoad %v3uint %331
+ %333 = OpVectorShuffle %v4uint %332 %332 1 1 0 1
+ OpStore %yyxy %333
+ %335 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %336 = OpLoad %v3uint %335
+ %337 = OpVectorShuffle %v4uint %336 %336 1 1 0 2
+ OpStore %yyxz %337
+ %339 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %340 = OpLoad %v3uint %339
+ %341 = OpVectorShuffle %v4uint %340 %340 1 1 1 0
+ OpStore %yyyx %341
+ %343 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %344 = OpLoad %v3uint %343
+ %345 = OpVectorShuffle %v4uint %344 %344 1 1 1 1
+ OpStore %yyyy %345
+ %347 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %348 = OpLoad %v3uint %347
+ %349 = OpVectorShuffle %v4uint %348 %348 1 1 1 2
+ OpStore %yyyz %349
+ %351 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %352 = OpLoad %v3uint %351
+ %353 = OpVectorShuffle %v4uint %352 %352 1 1 2 0
+ OpStore %yyzx %353
+ %355 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %356 = OpLoad %v3uint %355
+ %357 = OpVectorShuffle %v4uint %356 %356 1 1 2 1
+ OpStore %yyzy %357
+ %359 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %360 = OpLoad %v3uint %359
+ %361 = OpVectorShuffle %v4uint %360 %360 1 1 2 2
+ OpStore %yyzz %361
+ %363 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %364 = OpLoad %v3uint %363
+ %365 = OpVectorShuffle %v4uint %364 %364 1 2 0 0
+ OpStore %yzxx %365
+ %367 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %368 = OpLoad %v3uint %367
+ %369 = OpVectorShuffle %v4uint %368 %368 1 2 0 1
+ OpStore %yzxy %369
+ %371 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %372 = OpLoad %v3uint %371
+ %373 = OpVectorShuffle %v4uint %372 %372 1 2 0 2
+ OpStore %yzxz %373
+ %375 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %376 = OpLoad %v3uint %375
+ %377 = OpVectorShuffle %v4uint %376 %376 1 2 1 0
+ OpStore %yzyx %377
+ %379 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %380 = OpLoad %v3uint %379
+ %381 = OpVectorShuffle %v4uint %380 %380 1 2 1 1
+ OpStore %yzyy %381
+ %383 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %384 = OpLoad %v3uint %383
+ %385 = OpVectorShuffle %v4uint %384 %384 1 2 1 2
+ OpStore %yzyz %385
+ %387 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %388 = OpLoad %v3uint %387
+ %389 = OpVectorShuffle %v4uint %388 %388 1 2 2 0
+ OpStore %yzzx %389
+ %391 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %392 = OpLoad %v3uint %391
+ %393 = OpVectorShuffle %v4uint %392 %392 1 2 2 1
+ OpStore %yzzy %393
+ %395 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %396 = OpLoad %v3uint %395
+ %397 = OpVectorShuffle %v4uint %396 %396 1 2 2 2
+ OpStore %yzzz %397
+ %399 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %400 = OpLoad %v3uint %399
+ %401 = OpVectorShuffle %v4uint %400 %400 2 0 0 0
+ OpStore %zxxx %401
+ %403 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %404 = OpLoad %v3uint %403
+ %405 = OpVectorShuffle %v4uint %404 %404 2 0 0 1
+ OpStore %zxxy %405
+ %407 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %408 = OpLoad %v3uint %407
+ %409 = OpVectorShuffle %v4uint %408 %408 2 0 0 2
+ OpStore %zxxz %409
+ %411 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %412 = OpLoad %v3uint %411
+ %413 = OpVectorShuffle %v4uint %412 %412 2 0 1 0
+ OpStore %zxyx %413
+ %415 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %416 = OpLoad %v3uint %415
+ %417 = OpVectorShuffle %v4uint %416 %416 2 0 1 1
+ OpStore %zxyy %417
+ %419 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %420 = OpLoad %v3uint %419
+ %421 = OpVectorShuffle %v4uint %420 %420 2 0 1 2
+ OpStore %zxyz %421
+ %423 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %424 = OpLoad %v3uint %423
+ %425 = OpVectorShuffle %v4uint %424 %424 2 0 2 0
+ OpStore %zxzx %425
+ %427 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %428 = OpLoad %v3uint %427
+ %429 = OpVectorShuffle %v4uint %428 %428 2 0 2 1
+ OpStore %zxzy %429
+ %431 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %432 = OpLoad %v3uint %431
+ %433 = OpVectorShuffle %v4uint %432 %432 2 0 2 2
+ OpStore %zxzz %433
+ %435 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %436 = OpLoad %v3uint %435
+ %437 = OpVectorShuffle %v4uint %436 %436 2 1 0 0
+ OpStore %zyxx %437
+ %439 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %440 = OpLoad %v3uint %439
+ %441 = OpVectorShuffle %v4uint %440 %440 2 1 0 1
+ OpStore %zyxy %441
+ %443 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %444 = OpLoad %v3uint %443
+ %445 = OpVectorShuffle %v4uint %444 %444 2 1 0 2
+ OpStore %zyxz %445
+ %447 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %448 = OpLoad %v3uint %447
+ %449 = OpVectorShuffle %v4uint %448 %448 2 1 1 0
+ OpStore %zyyx %449
+ %451 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %452 = OpLoad %v3uint %451
+ %453 = OpVectorShuffle %v4uint %452 %452 2 1 1 1
+ OpStore %zyyy %453
+ %455 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %456 = OpLoad %v3uint %455
+ %457 = OpVectorShuffle %v4uint %456 %456 2 1 1 2
+ OpStore %zyyz %457
+ %459 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %460 = OpLoad %v3uint %459
+ %461 = OpVectorShuffle %v4uint %460 %460 2 1 2 0
+ OpStore %zyzx %461
+ %463 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %464 = OpLoad %v3uint %463
+ %465 = OpVectorShuffle %v4uint %464 %464 2 1 2 1
+ OpStore %zyzy %465
+ %467 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %468 = OpLoad %v3uint %467
+ %469 = OpVectorShuffle %v4uint %468 %468 2 1 2 2
+ OpStore %zyzz %469
+ %471 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %472 = OpLoad %v3uint %471
+ %473 = OpVectorShuffle %v4uint %472 %472 2 2 0 0
+ OpStore %zzxx %473
+ %475 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %476 = OpLoad %v3uint %475
+ %477 = OpVectorShuffle %v4uint %476 %476 2 2 0 1
+ OpStore %zzxy %477
+ %479 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %480 = OpLoad %v3uint %479
+ %481 = OpVectorShuffle %v4uint %480 %480 2 2 0 2
+ OpStore %zzxz %481
+ %483 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %484 = OpLoad %v3uint %483
+ %485 = OpVectorShuffle %v4uint %484 %484 2 2 1 0
+ OpStore %zzyx %485
+ %487 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %488 = OpLoad %v3uint %487
+ %489 = OpVectorShuffle %v4uint %488 %488 2 2 1 1
+ OpStore %zzyy %489
+ %491 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %492 = OpLoad %v3uint %491
+ %493 = OpVectorShuffle %v4uint %492 %492 2 2 1 2
+ OpStore %zzyz %493
+ %495 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %496 = OpLoad %v3uint %495
+ %497 = OpVectorShuffle %v4uint %496 %496 2 2 2 0
+ OpStore %zzzx %497
+ %499 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %500 = OpLoad %v3uint %499
+ %501 = OpVectorShuffle %v4uint %500 %500 2 2 2 1
+ OpStore %zzzy %501
+ %503 = OpAccessChain %_ptr_Uniform_v3uint %U %uint_0
+ %504 = OpLoad %v3uint %503
+ %505 = OpVectorShuffle %v4uint %504 %504 2 2 2 2
+ OpStore %zzzz %505
+ OpReturn
+ OpFunctionEnd
diff --git a/test/expressions/swizzle/read/packed_vec3/u32.wgsl.expected.wgsl b/test/expressions/swizzle/read/packed_vec3/u32.wgsl.expected.wgsl
new file mode 100644
index 0000000..96b7263
--- /dev/null
+++ b/test/expressions/swizzle/read/packed_vec3/u32.wgsl.expected.wgsl
@@ -0,0 +1,130 @@
+[[block]]
+struct S {
+ v : vec3<u32>;
+};
+
+[[group(0), binding(0)]] var<uniform> U : S;
+
+fn f() {
+ var v = U.v;
+ var x = U.v.x;
+ var y = U.v.y;
+ var z = U.v.z;
+ var xx = U.v.xx;
+ var xy = U.v.xy;
+ var xz = U.v.xz;
+ var yx = U.v.yx;
+ var yy = U.v.yy;
+ var yz = U.v.yz;
+ var zx = U.v.zx;
+ var zy = U.v.zy;
+ var zz = U.v.zz;
+ var xxx = U.v.xxx;
+ var xxy = U.v.xxy;
+ var xxz = U.v.xxz;
+ var xyx = U.v.xyx;
+ var xyy = U.v.xyy;
+ var xyz = U.v.xyz;
+ var xzx = U.v.xzx;
+ var xzy = U.v.xzy;
+ var xzz = U.v.xzz;
+ var yxx = U.v.yxx;
+ var yxy = U.v.yxy;
+ var yxz = U.v.yxz;
+ var yyx = U.v.yyx;
+ var yyy = U.v.yyy;
+ var yyz = U.v.yyz;
+ var yzx = U.v.yzx;
+ var yzy = U.v.yzy;
+ var yzz = U.v.yzz;
+ var zxx = U.v.zxx;
+ var zxy = U.v.zxy;
+ var zxz = U.v.zxz;
+ var zyx = U.v.zyx;
+ var zyy = U.v.zyy;
+ var zyz = U.v.zyz;
+ var zzx = U.v.zzx;
+ var zzy = U.v.zzy;
+ var zzz = U.v.zzz;
+ var xxxx = U.v.xxxx;
+ var xxxy = U.v.xxxy;
+ var xxxz = U.v.xxxz;
+ var xxyx = U.v.xxyx;
+ var xxyy = U.v.xxyy;
+ var xxyz = U.v.xxyz;
+ var xxzx = U.v.xxzx;
+ var xxzy = U.v.xxzy;
+ var xxzz = U.v.xxzz;
+ var xyxx = U.v.xyxx;
+ var xyxy = U.v.xyxy;
+ var xyxz = U.v.xyxz;
+ var xyyx = U.v.xyyx;
+ var xyyy = U.v.xyyy;
+ var xyyz = U.v.xyyz;
+ var xyzx = U.v.xyzx;
+ var xyzy = U.v.xyzy;
+ var xyzz = U.v.xyzz;
+ var xzxx = U.v.xzxx;
+ var xzxy = U.v.xzxy;
+ var xzxz = U.v.xzxz;
+ var xzyx = U.v.xzyx;
+ var xzyy = U.v.xzyy;
+ var xzyz = U.v.xzyz;
+ var xzzx = U.v.xzzx;
+ var xzzy = U.v.xzzy;
+ var xzzz = U.v.xzzz;
+ var yxxx = U.v.yxxx;
+ var yxxy = U.v.yxxy;
+ var yxxz = U.v.yxxz;
+ var yxyx = U.v.yxyx;
+ var yxyy = U.v.yxyy;
+ var yxyz = U.v.yxyz;
+ var yxzx = U.v.yxzx;
+ var yxzy = U.v.yxzy;
+ var yxzz = U.v.yxzz;
+ var yyxx = U.v.yyxx;
+ var yyxy = U.v.yyxy;
+ var yyxz = U.v.yyxz;
+ var yyyx = U.v.yyyx;
+ var yyyy = U.v.yyyy;
+ var yyyz = U.v.yyyz;
+ var yyzx = U.v.yyzx;
+ var yyzy = U.v.yyzy;
+ var yyzz = U.v.yyzz;
+ var yzxx = U.v.yzxx;
+ var yzxy = U.v.yzxy;
+ var yzxz = U.v.yzxz;
+ var yzyx = U.v.yzyx;
+ var yzyy = U.v.yzyy;
+ var yzyz = U.v.yzyz;
+ var yzzx = U.v.yzzx;
+ var yzzy = U.v.yzzy;
+ var yzzz = U.v.yzzz;
+ var zxxx = U.v.zxxx;
+ var zxxy = U.v.zxxy;
+ var zxxz = U.v.zxxz;
+ var zxyx = U.v.zxyx;
+ var zxyy = U.v.zxyy;
+ var zxyz = U.v.zxyz;
+ var zxzx = U.v.zxzx;
+ var zxzy = U.v.zxzy;
+ var zxzz = U.v.zxzz;
+ var zyxx = U.v.zyxx;
+ var zyxy = U.v.zyxy;
+ var zyxz = U.v.zyxz;
+ var zyyx = U.v.zyyx;
+ var zyyy = U.v.zyyy;
+ var zyyz = U.v.zyyz;
+ var zyzx = U.v.zyzx;
+ var zyzy = U.v.zyzy;
+ var zyzz = U.v.zyzz;
+ var zzxx = U.v.zzxx;
+ var zzxy = U.v.zzxy;
+ var zzxz = U.v.zzxz;
+ var zzyx = U.v.zzyx;
+ var zzyy = U.v.zzyy;
+ var zzyz = U.v.zzyz;
+ var zzzx = U.v.zzzx;
+ var zzzy = U.v.zzzy;
+ var zzzz = U.v.zzzz;
+}
diff --git a/test/expressions/swizzle/read/vec3/f32.wgsl b/test/expressions/swizzle/read/vec3/f32.wgsl
new file mode 100644
index 0000000..77a78f0
--- /dev/null
+++ b/test/expressions/swizzle/read/vec3/f32.wgsl
@@ -0,0 +1,143 @@
+struct S {
+ v: vec3<f32>;
+};
+
+var<private> P : S;
+
+fn f() {
+ var v = P.v;
+
+ var x = P.v.x;
+ var y = P.v.y;
+ var z = P.v.z;
+
+ var xx = P.v.xx;
+ var xy = P.v.xy;
+ var xz = P.v.xz;
+ var yx = P.v.yx;
+ var yy = P.v.yy;
+ var yz = P.v.yz;
+ var zx = P.v.zx;
+ var zy = P.v.zy;
+ var zz = P.v.zz;
+
+ var xxx = P.v.xxx;
+ var xxy = P.v.xxy;
+ var xxz = P.v.xxz;
+ var xyx = P.v.xyx;
+ var xyy = P.v.xyy;
+ var xyz = P.v.xyz;
+ var xzx = P.v.xzx;
+ var xzy = P.v.xzy;
+ var xzz = P.v.xzz;
+
+ var yxx = P.v.yxx;
+ var yxy = P.v.yxy;
+ var yxz = P.v.yxz;
+ var yyx = P.v.yyx;
+ var yyy = P.v.yyy;
+ var yyz = P.v.yyz;
+ var yzx = P.v.yzx;
+ var yzy = P.v.yzy;
+ var yzz = P.v.yzz;
+
+ var zxx = P.v.zxx;
+ var zxy = P.v.zxy;
+ var zxz = P.v.zxz;
+ var zyx = P.v.zyx;
+ var zyy = P.v.zyy;
+ var zyz = P.v.zyz;
+ var zzx = P.v.zzx;
+ var zzy = P.v.zzy;
+ var zzz = P.v.zzz;
+
+ var xxxx = P.v.xxxx;
+ var xxxy = P.v.xxxy;
+ var xxxz = P.v.xxxz;
+ var xxyx = P.v.xxyx;
+ var xxyy = P.v.xxyy;
+ var xxyz = P.v.xxyz;
+ var xxzx = P.v.xxzx;
+ var xxzy = P.v.xxzy;
+ var xxzz = P.v.xxzz;
+
+ var xyxx = P.v.xyxx;
+ var xyxy = P.v.xyxy;
+ var xyxz = P.v.xyxz;
+ var xyyx = P.v.xyyx;
+ var xyyy = P.v.xyyy;
+ var xyyz = P.v.xyyz;
+ var xyzx = P.v.xyzx;
+ var xyzy = P.v.xyzy;
+ var xyzz = P.v.xyzz;
+
+ var xzxx = P.v.xzxx;
+ var xzxy = P.v.xzxy;
+ var xzxz = P.v.xzxz;
+ var xzyx = P.v.xzyx;
+ var xzyy = P.v.xzyy;
+ var xzyz = P.v.xzyz;
+ var xzzx = P.v.xzzx;
+ var xzzy = P.v.xzzy;
+ var xzzz = P.v.xzzz;
+
+ var yxxx = P.v.yxxx;
+ var yxxy = P.v.yxxy;
+ var yxxz = P.v.yxxz;
+ var yxyx = P.v.yxyx;
+ var yxyy = P.v.yxyy;
+ var yxyz = P.v.yxyz;
+ var yxzx = P.v.yxzx;
+ var yxzy = P.v.yxzy;
+ var yxzz = P.v.yxzz;
+
+ var yyxx = P.v.yyxx;
+ var yyxy = P.v.yyxy;
+ var yyxz = P.v.yyxz;
+ var yyyx = P.v.yyyx;
+ var yyyy = P.v.yyyy;
+ var yyyz = P.v.yyyz;
+ var yyzx = P.v.yyzx;
+ var yyzy = P.v.yyzy;
+ var yyzz = P.v.yyzz;
+
+ var yzxx = P.v.yzxx;
+ var yzxy = P.v.yzxy;
+ var yzxz = P.v.yzxz;
+ var yzyx = P.v.yzyx;
+ var yzyy = P.v.yzyy;
+ var yzyz = P.v.yzyz;
+ var yzzx = P.v.yzzx;
+ var yzzy = P.v.yzzy;
+ var yzzz = P.v.yzzz;
+
+ var zxxx = P.v.zxxx;
+ var zxxy = P.v.zxxy;
+ var zxxz = P.v.zxxz;
+ var zxyx = P.v.zxyx;
+ var zxyy = P.v.zxyy;
+ var zxyz = P.v.zxyz;
+ var zxzx = P.v.zxzx;
+ var zxzy = P.v.zxzy;
+ var zxzz = P.v.zxzz;
+
+ var zyxx = P.v.zyxx;
+ var zyxy = P.v.zyxy;
+ var zyxz = P.v.zyxz;
+ var zyyx = P.v.zyyx;
+ var zyyy = P.v.zyyy;
+ var zyyz = P.v.zyyz;
+ var zyzx = P.v.zyzx;
+ var zyzy = P.v.zyzy;
+ var zyzz = P.v.zyzz;
+
+ var zzxx = P.v.zzxx;
+ var zzxy = P.v.zzxy;
+ var zzxz = P.v.zzxz;
+ var zzyx = P.v.zzyx;
+ var zzyy = P.v.zzyy;
+ var zzyz = P.v.zzyz;
+ var zzzx = P.v.zzzx;
+ var zzzy = P.v.zzzy;
+ var zzzz = P.v.zzzz;
+}
diff --git a/test/expressions/swizzle/read/vec3/f32.wgsl.expected.hlsl b/test/expressions/swizzle/read/vec3/f32.wgsl.expected.hlsl
new file mode 100644
index 0000000..9f65e92
--- /dev/null
+++ b/test/expressions/swizzle/read/vec3/f32.wgsl.expected.hlsl
@@ -0,0 +1,134 @@
+[numthreads(1, 1, 1)]
+void unused_entry_point() {
+ return;
+}
+
+struct S {
+ float3 v;
+};
+
+static S P = (S)0;
+
+void f() {
+ float3 v = P.v;
+ float x = P.v.x;
+ float y = P.v.y;
+ float z = P.v.z;
+ float2 xx = P.v.xx;
+ float2 xy = P.v.xy;
+ float2 xz = P.v.xz;
+ float2 yx = P.v.yx;
+ float2 yy = P.v.yy;
+ float2 yz = P.v.yz;
+ float2 zx = P.v.zx;
+ float2 zy = P.v.zy;
+ float2 zz = P.v.zz;
+ float3 xxx = P.v.xxx;
+ float3 xxy = P.v.xxy;
+ float3 xxz = P.v.xxz;
+ float3 xyx = P.v.xyx;
+ float3 xyy = P.v.xyy;
+ float3 xyz = P.v.xyz;
+ float3 xzx = P.v.xzx;
+ float3 xzy = P.v.xzy;
+ float3 xzz = P.v.xzz;
+ float3 yxx = P.v.yxx;
+ float3 yxy = P.v.yxy;
+ float3 yxz = P.v.yxz;
+ float3 yyx = P.v.yyx;
+ float3 yyy = P.v.yyy;
+ float3 yyz = P.v.yyz;
+ float3 yzx = P.v.yzx;
+ float3 yzy = P.v.yzy;
+ float3 yzz = P.v.yzz;
+ float3 zxx = P.v.zxx;
+ float3 zxy = P.v.zxy;
+ float3 zxz = P.v.zxz;
+ float3 zyx = P.v.zyx;
+ float3 zyy = P.v.zyy;
+ float3 zyz = P.v.zyz;
+ float3 zzx = P.v.zzx;
+ float3 zzy = P.v.zzy;
+ float3 zzz = P.v.zzz;
+ float4 xxxx = P.v.xxxx;
+ float4 xxxy = P.v.xxxy;
+ float4 xxxz = P.v.xxxz;
+ float4 xxyx = P.v.xxyx;
+ float4 xxyy = P.v.xxyy;
+ float4 xxyz = P.v.xxyz;
+ float4 xxzx = P.v.xxzx;
+ float4 xxzy = P.v.xxzy;
+ float4 xxzz = P.v.xxzz;
+ float4 xyxx = P.v.xyxx;
+ float4 xyxy = P.v.xyxy;
+ float4 xyxz = P.v.xyxz;
+ float4 xyyx = P.v.xyyx;
+ float4 xyyy = P.v.xyyy;
+ float4 xyyz = P.v.xyyz;
+ float4 xyzx = P.v.xyzx;
+ float4 xyzy = P.v.xyzy;
+ float4 xyzz = P.v.xyzz;
+ float4 xzxx = P.v.xzxx;
+ float4 xzxy = P.v.xzxy;
+ float4 xzxz = P.v.xzxz;
+ float4 xzyx = P.v.xzyx;
+ float4 xzyy = P.v.xzyy;
+ float4 xzyz = P.v.xzyz;
+ float4 xzzx = P.v.xzzx;
+ float4 xzzy = P.v.xzzy;
+ float4 xzzz = P.v.xzzz;
+ float4 yxxx = P.v.yxxx;
+ float4 yxxy = P.v.yxxy;
+ float4 yxxz = P.v.yxxz;
+ float4 yxyx = P.v.yxyx;
+ float4 yxyy = P.v.yxyy;
+ float4 yxyz = P.v.yxyz;
+ float4 yxzx = P.v.yxzx;
+ float4 yxzy = P.v.yxzy;
+ float4 yxzz = P.v.yxzz;
+ float4 yyxx = P.v.yyxx;
+ float4 yyxy = P.v.yyxy;
+ float4 yyxz = P.v.yyxz;
+ float4 yyyx = P.v.yyyx;
+ float4 yyyy = P.v.yyyy;
+ float4 yyyz = P.v.yyyz;
+ float4 yyzx = P.v.yyzx;
+ float4 yyzy = P.v.yyzy;
+ float4 yyzz = P.v.yyzz;
+ float4 yzxx = P.v.yzxx;
+ float4 yzxy = P.v.yzxy;
+ float4 yzxz = P.v.yzxz;
+ float4 yzyx = P.v.yzyx;
+ float4 yzyy = P.v.yzyy;
+ float4 yzyz = P.v.yzyz;
+ float4 yzzx = P.v.yzzx;
+ float4 yzzy = P.v.yzzy;
+ float4 yzzz = P.v.yzzz;
+ float4 zxxx = P.v.zxxx;
+ float4 zxxy = P.v.zxxy;
+ float4 zxxz = P.v.zxxz;
+ float4 zxyx = P.v.zxyx;
+ float4 zxyy = P.v.zxyy;
+ float4 zxyz = P.v.zxyz;
+ float4 zxzx = P.v.zxzx;
+ float4 zxzy = P.v.zxzy;
+ float4 zxzz = P.v.zxzz;
+ float4 zyxx = P.v.zyxx;
+ float4 zyxy = P.v.zyxy;
+ float4 zyxz = P.v.zyxz;
+ float4 zyyx = P.v.zyyx;
+ float4 zyyy = P.v.zyyy;
+ float4 zyyz = P.v.zyyz;
+ float4 zyzx = P.v.zyzx;
+ float4 zyzy = P.v.zyzy;
+ float4 zyzz = P.v.zyzz;
+ float4 zzxx = P.v.zzxx;
+ float4 zzxy = P.v.zzxy;
+ float4 zzxz = P.v.zzxz;
+ float4 zzyx = P.v.zzyx;
+ float4 zzyy = P.v.zzyy;
+ float4 zzyz = P.v.zzyz;
+ float4 zzzx = P.v.zzzx;
+ float4 zzzy = P.v.zzzy;
+ float4 zzzz = P.v.zzzz;
+}
diff --git a/test/expressions/swizzle/read/vec3/f32.wgsl.expected.msl b/test/expressions/swizzle/read/vec3/f32.wgsl.expected.msl
new file mode 100644
index 0000000..85b1790
--- /dev/null
+++ b/test/expressions/swizzle/read/vec3/f32.wgsl.expected.msl
@@ -0,0 +1,131 @@
+#include <metal_stdlib>
+
+using namespace metal;
+struct S {
+ float3 v;
+};
+
+void f(thread S* const tint_symbol) {
+ float3 v = (*(tint_symbol)).v;
+ float x = (*(tint_symbol)).v[0];
+ float y = (*(tint_symbol)).v[1];
+ float z = (*(tint_symbol)).v[2];
+ float2 xx = float3((*(tint_symbol)).v).xx;
+ float2 xy = float3((*(tint_symbol)).v).xy;
+ float2 xz = float3((*(tint_symbol)).v).xz;
+ float2 yx = float3((*(tint_symbol)).v).yx;
+ float2 yy = float3((*(tint_symbol)).v).yy;
+ float2 yz = float3((*(tint_symbol)).v).yz;
+ float2 zx = float3((*(tint_symbol)).v).zx;
+ float2 zy = float3((*(tint_symbol)).v).zy;
+ float2 zz = float3((*(tint_symbol)).v).zz;
+ float3 xxx = float3((*(tint_symbol)).v).xxx;
+ float3 xxy = float3((*(tint_symbol)).v).xxy;
+ float3 xxz = float3((*(tint_symbol)).v).xxz;
+ float3 xyx = float3((*(tint_symbol)).v).xyx;
+ float3 xyy = float3((*(tint_symbol)).v).xyy;
+ float3 xyz = float3((*(tint_symbol)).v).xyz;
+ float3 xzx = float3((*(tint_symbol)).v).xzx;
+ float3 xzy = float3((*(tint_symbol)).v).xzy;
+ float3 xzz = float3((*(tint_symbol)).v).xzz;
+ float3 yxx = float3((*(tint_symbol)).v).yxx;
+ float3 yxy = float3((*(tint_symbol)).v).yxy;
+ float3 yxz = float3((*(tint_symbol)).v).yxz;
+ float3 yyx = float3((*(tint_symbol)).v).yyx;
+ float3 yyy = float3((*(tint_symbol)).v).yyy;
+ float3 yyz = float3((*(tint_symbol)).v).yyz;
+ float3 yzx = float3((*(tint_symbol)).v).yzx;
+ float3 yzy = float3((*(tint_symbol)).v).yzy;
+ float3 yzz = float3((*(tint_symbol)).v).yzz;
+ float3 zxx = float3((*(tint_symbol)).v).zxx;
+ float3 zxy = float3((*(tint_symbol)).v).zxy;
+ float3 zxz = float3((*(tint_symbol)).v).zxz;
+ float3 zyx = float3((*(tint_symbol)).v).zyx;
+ float3 zyy = float3((*(tint_symbol)).v).zyy;
+ float3 zyz = float3((*(tint_symbol)).v).zyz;
+ float3 zzx = float3((*(tint_symbol)).v).zzx;
+ float3 zzy = float3((*(tint_symbol)).v).zzy;
+ float3 zzz = float3((*(tint_symbol)).v).zzz;
+ float4 xxxx = float3((*(tint_symbol)).v).xxxx;
+ float4 xxxy = float3((*(tint_symbol)).v).xxxy;
+ float4 xxxz = float3((*(tint_symbol)).v).xxxz;
+ float4 xxyx = float3((*(tint_symbol)).v).xxyx;
+ float4 xxyy = float3((*(tint_symbol)).v).xxyy;
+ float4 xxyz = float3((*(tint_symbol)).v).xxyz;
+ float4 xxzx = float3((*(tint_symbol)).v).xxzx;
+ float4 xxzy = float3((*(tint_symbol)).v).xxzy;
+ float4 xxzz = float3((*(tint_symbol)).v).xxzz;
+ float4 xyxx = float3((*(tint_symbol)).v).xyxx;
+ float4 xyxy = float3((*(tint_symbol)).v).xyxy;
+ float4 xyxz = float3((*(tint_symbol)).v).xyxz;
+ float4 xyyx = float3((*(tint_symbol)).v).xyyx;
+ float4 xyyy = float3((*(tint_symbol)).v).xyyy;
+ float4 xyyz = float3((*(tint_symbol)).v).xyyz;
+ float4 xyzx = float3((*(tint_symbol)).v).xyzx;
+ float4 xyzy = float3((*(tint_symbol)).v).xyzy;
+ float4 xyzz = float3((*(tint_symbol)).v).xyzz;
+ float4 xzxx = float3((*(tint_symbol)).v).xzxx;
+ float4 xzxy = float3((*(tint_symbol)).v).xzxy;
+ float4 xzxz = float3((*(tint_symbol)).v).xzxz;
+ float4 xzyx = float3((*(tint_symbol)).v).xzyx;
+ float4 xzyy = float3((*(tint_symbol)).v).xzyy;
+ float4 xzyz = float3((*(tint_symbol)).v).xzyz;
+ float4 xzzx = float3((*(tint_symbol)).v).xzzx;
+ float4 xzzy = float3((*(tint_symbol)).v).xzzy;
+ float4 xzzz = float3((*(tint_symbol)).v).xzzz;
+ float4 yxxx = float3((*(tint_symbol)).v).yxxx;
+ float4 yxxy = float3((*(tint_symbol)).v).yxxy;
+ float4 yxxz = float3((*(tint_symbol)).v).yxxz;
+ float4 yxyx = float3((*(tint_symbol)).v).yxyx;
+ float4 yxyy = float3((*(tint_symbol)).v).yxyy;
+ float4 yxyz = float3((*(tint_symbol)).v).yxyz;
+ float4 yxzx = float3((*(tint_symbol)).v).yxzx;
+ float4 yxzy = float3((*(tint_symbol)).v).yxzy;
+ float4 yxzz = float3((*(tint_symbol)).v).yxzz;
+ float4 yyxx = float3((*(tint_symbol)).v).yyxx;
+ float4 yyxy = float3((*(tint_symbol)).v).yyxy;
+ float4 yyxz = float3((*(tint_symbol)).v).yyxz;
+ float4 yyyx = float3((*(tint_symbol)).v).yyyx;
+ float4 yyyy = float3((*(tint_symbol)).v).yyyy;
+ float4 yyyz = float3((*(tint_symbol)).v).yyyz;
+ float4 yyzx = float3((*(tint_symbol)).v).yyzx;
+ float4 yyzy = float3((*(tint_symbol)).v).yyzy;
+ float4 yyzz = float3((*(tint_symbol)).v).yyzz;
+ float4 yzxx = float3((*(tint_symbol)).v).yzxx;
+ float4 yzxy = float3((*(tint_symbol)).v).yzxy;
+ float4 yzxz = float3((*(tint_symbol)).v).yzxz;
+ float4 yzyx = float3((*(tint_symbol)).v).yzyx;
+ float4 yzyy = float3((*(tint_symbol)).v).yzyy;
+ float4 yzyz = float3((*(tint_symbol)).v).yzyz;
+ float4 yzzx = float3((*(tint_symbol)).v).yzzx;
+ float4 yzzy = float3((*(tint_symbol)).v).yzzy;
+ float4 yzzz = float3((*(tint_symbol)).v).yzzz;
+ float4 zxxx = float3((*(tint_symbol)).v).zxxx;
+ float4 zxxy = float3((*(tint_symbol)).v).zxxy;
+ float4 zxxz = float3((*(tint_symbol)).v).zxxz;
+ float4 zxyx = float3((*(tint_symbol)).v).zxyx;
+ float4 zxyy = float3((*(tint_symbol)).v).zxyy;
+ float4 zxyz = float3((*(tint_symbol)).v).zxyz;
+ float4 zxzx = float3((*(tint_symbol)).v).zxzx;
+ float4 zxzy = float3((*(tint_symbol)).v).zxzy;
+ float4 zxzz = float3((*(tint_symbol)).v).zxzz;
+ float4 zyxx = float3((*(tint_symbol)).v).zyxx;
+ float4 zyxy = float3((*(tint_symbol)).v).zyxy;
+ float4 zyxz = float3((*(tint_symbol)).v).zyxz;
+ float4 zyyx = float3((*(tint_symbol)).v).zyyx;
+ float4 zyyy = float3((*(tint_symbol)).v).zyyy;
+ float4 zyyz = float3((*(tint_symbol)).v).zyyz;
+ float4 zyzx = float3((*(tint_symbol)).v).zyzx;
+ float4 zyzy = float3((*(tint_symbol)).v).zyzy;
+ float4 zyzz = float3((*(tint_symbol)).v).zyzz;
+ float4 zzxx = float3((*(tint_symbol)).v).zzxx;
+ float4 zzxy = float3((*(tint_symbol)).v).zzxy;
+ float4 zzxz = float3((*(tint_symbol)).v).zzxz;
+ float4 zzyx = float3((*(tint_symbol)).v).zzyx;
+ float4 zzyy = float3((*(tint_symbol)).v).zzyy;
+ float4 zzyz = float3((*(tint_symbol)).v).zzyz;
+ float4 zzzx = float3((*(tint_symbol)).v).zzzx;
+ float4 zzzy = float3((*(tint_symbol)).v).zzzy;
+ float4 zzzz = float3((*(tint_symbol)).v).zzzz;
+}
+
diff --git a/test/expressions/swizzle/read/vec3/f32.wgsl.expected.spvasm b/test/expressions/swizzle/read/vec3/f32.wgsl.expected.spvasm
new file mode 100644
index 0000000..ec1ce6ae
--- /dev/null
+++ b/test/expressions/swizzle/read/vec3/f32.wgsl.expected.spvasm
@@ -0,0 +1,769 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 509
+; Schema: 0
+ OpCapability Shader
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
+ OpExecutionMode %unused_entry_point LocalSize 1 1 1
+ OpName %S "S"
+ OpMemberName %S 0 "v"
+ OpName %P "P"
+ OpName %unused_entry_point "unused_entry_point"
+ OpName %f "f"
+ OpName %v "v"
+ OpName %x "x"
+ OpName %y "y"
+ OpName %z "z"
+ OpName %xx "xx"
+ OpName %xy "xy"
+ OpName %xz "xz"
+ OpName %yx "yx"
+ OpName %yy "yy"
+ OpName %yz "yz"
+ OpName %zx "zx"
+ OpName %zy "zy"
+ OpName %zz "zz"
+ OpName %xxx "xxx"
+ OpName %xxy "xxy"
+ OpName %xxz "xxz"
+ OpName %xyx "xyx"
+ OpName %xyy "xyy"
+ OpName %xyz "xyz"
+ OpName %xzx "xzx"
+ OpName %xzy "xzy"
+ OpName %xzz "xzz"
+ OpName %yxx "yxx"
+ OpName %yxy "yxy"
+ OpName %yxz "yxz"
+ OpName %yyx "yyx"
+ OpName %yyy "yyy"
+ OpName %yyz "yyz"
+ OpName %yzx "yzx"
+ OpName %yzy "yzy"
+ OpName %yzz "yzz"
+ OpName %zxx "zxx"
+ OpName %zxy "zxy"
+ OpName %zxz "zxz"
+ OpName %zyx "zyx"
+ OpName %zyy "zyy"
+ OpName %zyz "zyz"
+ OpName %zzx "zzx"
+ OpName %zzy "zzy"
+ OpName %zzz "zzz"
+ OpName %xxxx "xxxx"
+ OpName %xxxy "xxxy"
+ OpName %xxxz "xxxz"
+ OpName %xxyx "xxyx"
+ OpName %xxyy "xxyy"
+ OpName %xxyz "xxyz"
+ OpName %xxzx "xxzx"
+ OpName %xxzy "xxzy"
+ OpName %xxzz "xxzz"
+ OpName %xyxx "xyxx"
+ OpName %xyxy "xyxy"
+ OpName %xyxz "xyxz"
+ OpName %xyyx "xyyx"
+ OpName %xyyy "xyyy"
+ OpName %xyyz "xyyz"
+ OpName %xyzx "xyzx"
+ OpName %xyzy "xyzy"
+ OpName %xyzz "xyzz"
+ OpName %xzxx "xzxx"
+ OpName %xzxy "xzxy"
+ OpName %xzxz "xzxz"
+ OpName %xzyx "xzyx"
+ OpName %xzyy "xzyy"
+ OpName %xzyz "xzyz"
+ OpName %xzzx "xzzx"
+ OpName %xzzy "xzzy"
+ OpName %xzzz "xzzz"
+ OpName %yxxx "yxxx"
+ OpName %yxxy "yxxy"
+ OpName %yxxz "yxxz"
+ OpName %yxyx "yxyx"
+ OpName %yxyy "yxyy"
+ OpName %yxyz "yxyz"
+ OpName %yxzx "yxzx"
+ OpName %yxzy "yxzy"
+ OpName %yxzz "yxzz"
+ OpName %yyxx "yyxx"
+ OpName %yyxy "yyxy"
+ OpName %yyxz "yyxz"
+ OpName %yyyx "yyyx"
+ OpName %yyyy "yyyy"
+ OpName %yyyz "yyyz"
+ OpName %yyzx "yyzx"
+ OpName %yyzy "yyzy"
+ OpName %yyzz "yyzz"
+ OpName %yzxx "yzxx"
+ OpName %yzxy "yzxy"
+ OpName %yzxz "yzxz"
+ OpName %yzyx "yzyx"
+ OpName %yzyy "yzyy"
+ OpName %yzyz "yzyz"
+ OpName %yzzx "yzzx"
+ OpName %yzzy "yzzy"
+ OpName %yzzz "yzzz"
+ OpName %zxxx "zxxx"
+ OpName %zxxy "zxxy"
+ OpName %zxxz "zxxz"
+ OpName %zxyx "zxyx"
+ OpName %zxyy "zxyy"
+ OpName %zxyz "zxyz"
+ OpName %zxzx "zxzx"
+ OpName %zxzy "zxzy"
+ OpName %zxzz "zxzz"
+ OpName %zyxx "zyxx"
+ OpName %zyxy "zyxy"
+ OpName %zyxz "zyxz"
+ OpName %zyyx "zyyx"
+ OpName %zyyy "zyyy"
+ OpName %zyyz "zyyz"
+ OpName %zyzx "zyzx"
+ OpName %zyzy "zyzy"
+ OpName %zyzz "zyzz"
+ OpName %zzxx "zzxx"
+ OpName %zzxy "zzxy"
+ OpName %zzxz "zzxz"
+ OpName %zzyx "zzyx"
+ OpName %zzyy "zzyy"
+ OpName %zzyz "zzyz"
+ OpName %zzzx "zzzx"
+ OpName %zzzy "zzzy"
+ OpName %zzzz "zzzz"
+ OpMemberDecorate %S 0 Offset 0
+ %float = OpTypeFloat 32
+ %v3float = OpTypeVector %float 3
+ %S = OpTypeStruct %v3float
+%_ptr_Private_S = OpTypePointer Private %S
+ %6 = OpConstantNull %S
+ %P = OpVariable %_ptr_Private_S Private %6
+ %void = OpTypeVoid
+ %7 = OpTypeFunction %void
+ %uint = OpTypeInt 32 0
+ %uint_0 = OpConstant %uint 0
+%_ptr_Private_v3float = OpTypePointer Private %v3float
+%_ptr_Function_v3float = OpTypePointer Function %v3float
+ %20 = OpConstantNull %v3float
+%_ptr_Private_float = OpTypePointer Private %float
+%_ptr_Function_float = OpTypePointer Function %float
+ %26 = OpConstantNull %float
+ %uint_1 = OpConstant %uint 1
+ %uint_2 = OpConstant %uint 2
+ %v2float = OpTypeVector %float 2
+%_ptr_Function_v2float = OpTypePointer Function %v2float
+ %41 = OpConstantNull %v2float
+ %v4float = OpTypeVector %float 4
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %188 = OpConstantNull %v4float
+%unused_entry_point = OpFunction %void None %7
+ %10 = OpLabel
+ OpReturn
+ OpFunctionEnd
+ %f = OpFunction %void None %7
+ %12 = OpLabel
+ %v = OpVariable %_ptr_Function_v3float Function %20
+ %x = OpVariable %_ptr_Function_float Function %26
+ %y = OpVariable %_ptr_Function_float Function %26
+ %z = OpVariable %_ptr_Function_float Function %26
+ %xx = OpVariable %_ptr_Function_v2float Function %41
+ %xy = OpVariable %_ptr_Function_v2float Function %41
+ %xz = OpVariable %_ptr_Function_v2float Function %41
+ %yx = OpVariable %_ptr_Function_v2float Function %41
+ %yy = OpVariable %_ptr_Function_v2float Function %41
+ %yz = OpVariable %_ptr_Function_v2float Function %41
+ %zx = OpVariable %_ptr_Function_v2float Function %41
+ %zy = OpVariable %_ptr_Function_v2float Function %41
+ %zz = OpVariable %_ptr_Function_v2float Function %41
+ %xxx = OpVariable %_ptr_Function_v3float Function %20
+ %xxy = OpVariable %_ptr_Function_v3float Function %20
+ %xxz = OpVariable %_ptr_Function_v3float Function %20
+ %xyx = OpVariable %_ptr_Function_v3float Function %20
+ %xyy = OpVariable %_ptr_Function_v3float Function %20
+ %xyz = OpVariable %_ptr_Function_v3float Function %20
+ %xzx = OpVariable %_ptr_Function_v3float Function %20
+ %xzy = OpVariable %_ptr_Function_v3float Function %20
+ %xzz = OpVariable %_ptr_Function_v3float Function %20
+ %yxx = OpVariable %_ptr_Function_v3float Function %20
+ %yxy = OpVariable %_ptr_Function_v3float Function %20
+ %yxz = OpVariable %_ptr_Function_v3float Function %20
+ %yyx = OpVariable %_ptr_Function_v3float Function %20
+ %yyy = OpVariable %_ptr_Function_v3float Function %20
+ %yyz = OpVariable %_ptr_Function_v3float Function %20
+ %yzx = OpVariable %_ptr_Function_v3float Function %20
+ %yzy = OpVariable %_ptr_Function_v3float Function %20
+ %yzz = OpVariable %_ptr_Function_v3float Function %20
+ %zxx = OpVariable %_ptr_Function_v3float Function %20
+ %zxy = OpVariable %_ptr_Function_v3float Function %20
+ %zxz = OpVariable %_ptr_Function_v3float Function %20
+ %zyx = OpVariable %_ptr_Function_v3float Function %20
+ %zyy = OpVariable %_ptr_Function_v3float Function %20
+ %zyz = OpVariable %_ptr_Function_v3float Function %20
+ %zzx = OpVariable %_ptr_Function_v3float Function %20
+ %zzy = OpVariable %_ptr_Function_v3float Function %20
+ %zzz = OpVariable %_ptr_Function_v3float Function %20
+ %xxxx = OpVariable %_ptr_Function_v4float Function %188
+ %xxxy = OpVariable %_ptr_Function_v4float Function %188
+ %xxxz = OpVariable %_ptr_Function_v4float Function %188
+ %xxyx = OpVariable %_ptr_Function_v4float Function %188
+ %xxyy = OpVariable %_ptr_Function_v4float Function %188
+ %xxyz = OpVariable %_ptr_Function_v4float Function %188
+ %xxzx = OpVariable %_ptr_Function_v4float Function %188
+ %xxzy = OpVariable %_ptr_Function_v4float Function %188
+ %xxzz = OpVariable %_ptr_Function_v4float Function %188
+ %xyxx = OpVariable %_ptr_Function_v4float Function %188
+ %xyxy = OpVariable %_ptr_Function_v4float Function %188
+ %xyxz = OpVariable %_ptr_Function_v4float Function %188
+ %xyyx = OpVariable %_ptr_Function_v4float Function %188
+ %xyyy = OpVariable %_ptr_Function_v4float Function %188
+ %xyyz = OpVariable %_ptr_Function_v4float Function %188
+ %xyzx = OpVariable %_ptr_Function_v4float Function %188
+ %xyzy = OpVariable %_ptr_Function_v4float Function %188
+ %xyzz = OpVariable %_ptr_Function_v4float Function %188
+ %xzxx = OpVariable %_ptr_Function_v4float Function %188
+ %xzxy = OpVariable %_ptr_Function_v4float Function %188
+ %xzxz = OpVariable %_ptr_Function_v4float Function %188
+ %xzyx = OpVariable %_ptr_Function_v4float Function %188
+ %xzyy = OpVariable %_ptr_Function_v4float Function %188
+ %xzyz = OpVariable %_ptr_Function_v4float Function %188
+ %xzzx = OpVariable %_ptr_Function_v4float Function %188
+ %xzzy = OpVariable %_ptr_Function_v4float Function %188
+ %xzzz = OpVariable %_ptr_Function_v4float Function %188
+ %yxxx = OpVariable %_ptr_Function_v4float Function %188
+ %yxxy = OpVariable %_ptr_Function_v4float Function %188
+ %yxxz = OpVariable %_ptr_Function_v4float Function %188
+ %yxyx = OpVariable %_ptr_Function_v4float Function %188
+ %yxyy = OpVariable %_ptr_Function_v4float Function %188
+ %yxyz = OpVariable %_ptr_Function_v4float Function %188
+ %yxzx = OpVariable %_ptr_Function_v4float Function %188
+ %yxzy = OpVariable %_ptr_Function_v4float Function %188
+ %yxzz = OpVariable %_ptr_Function_v4float Function %188
+ %yyxx = OpVariable %_ptr_Function_v4float Function %188
+ %yyxy = OpVariable %_ptr_Function_v4float Function %188
+ %yyxz = OpVariable %_ptr_Function_v4float Function %188
+ %yyyx = OpVariable %_ptr_Function_v4float Function %188
+ %yyyy = OpVariable %_ptr_Function_v4float Function %188
+ %yyyz = OpVariable %_ptr_Function_v4float Function %188
+ %yyzx = OpVariable %_ptr_Function_v4float Function %188
+ %yyzy = OpVariable %_ptr_Function_v4float Function %188
+ %yyzz = OpVariable %_ptr_Function_v4float Function %188
+ %yzxx = OpVariable %_ptr_Function_v4float Function %188
+ %yzxy = OpVariable %_ptr_Function_v4float Function %188
+ %yzxz = OpVariable %_ptr_Function_v4float Function %188
+ %yzyx = OpVariable %_ptr_Function_v4float Function %188
+ %yzyy = OpVariable %_ptr_Function_v4float Function %188
+ %yzyz = OpVariable %_ptr_Function_v4float Function %188
+ %yzzx = OpVariable %_ptr_Function_v4float Function %188
+ %yzzy = OpVariable %_ptr_Function_v4float Function %188
+ %yzzz = OpVariable %_ptr_Function_v4float Function %188
+ %zxxx = OpVariable %_ptr_Function_v4float Function %188
+ %zxxy = OpVariable %_ptr_Function_v4float Function %188
+ %zxxz = OpVariable %_ptr_Function_v4float Function %188
+ %zxyx = OpVariable %_ptr_Function_v4float Function %188
+ %zxyy = OpVariable %_ptr_Function_v4float Function %188
+ %zxyz = OpVariable %_ptr_Function_v4float Function %188
+ %zxzx = OpVariable %_ptr_Function_v4float Function %188
+ %zxzy = OpVariable %_ptr_Function_v4float Function %188
+ %zxzz = OpVariable %_ptr_Function_v4float Function %188
+ %zyxx = OpVariable %_ptr_Function_v4float Function %188
+ %zyxy = OpVariable %_ptr_Function_v4float Function %188
+ %zyxz = OpVariable %_ptr_Function_v4float Function %188
+ %zyyx = OpVariable %_ptr_Function_v4float Function %188
+ %zyyy = OpVariable %_ptr_Function_v4float Function %188
+ %zyyz = OpVariable %_ptr_Function_v4float Function %188
+ %zyzx = OpVariable %_ptr_Function_v4float Function %188
+ %zyzy = OpVariable %_ptr_Function_v4float Function %188
+ %zyzz = OpVariable %_ptr_Function_v4float Function %188
+ %zzxx = OpVariable %_ptr_Function_v4float Function %188
+ %zzxy = OpVariable %_ptr_Function_v4float Function %188
+ %zzxz = OpVariable %_ptr_Function_v4float Function %188
+ %zzyx = OpVariable %_ptr_Function_v4float Function %188
+ %zzyy = OpVariable %_ptr_Function_v4float Function %188
+ %zzyz = OpVariable %_ptr_Function_v4float Function %188
+ %zzzx = OpVariable %_ptr_Function_v4float Function %188
+ %zzzy = OpVariable %_ptr_Function_v4float Function %188
+ %zzzz = OpVariable %_ptr_Function_v4float Function %188
+ %16 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %17 = OpLoad %v3float %16
+ OpStore %v %17
+ %22 = OpAccessChain %_ptr_Private_float %P %uint_0 %uint_0
+ %23 = OpLoad %float %22
+ OpStore %x %23
+ %28 = OpAccessChain %_ptr_Private_float %P %uint_0 %uint_1
+ %29 = OpLoad %float %28
+ OpStore %y %29
+ %32 = OpAccessChain %_ptr_Private_float %P %uint_0 %uint_2
+ %33 = OpLoad %float %32
+ OpStore %z %33
+ %35 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %37 = OpLoad %v3float %35
+ %38 = OpVectorShuffle %v2float %37 %37 0 0
+ OpStore %xx %38
+ %42 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %43 = OpLoad %v3float %42
+ %44 = OpVectorShuffle %v2float %43 %43 0 1
+ OpStore %xy %44
+ %46 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %47 = OpLoad %v3float %46
+ %48 = OpVectorShuffle %v2float %47 %47 0 2
+ OpStore %xz %48
+ %50 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %51 = OpLoad %v3float %50
+ %52 = OpVectorShuffle %v2float %51 %51 1 0
+ OpStore %yx %52
+ %54 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %55 = OpLoad %v3float %54
+ %56 = OpVectorShuffle %v2float %55 %55 1 1
+ OpStore %yy %56
+ %58 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %59 = OpLoad %v3float %58
+ %60 = OpVectorShuffle %v2float %59 %59 1 2
+ OpStore %yz %60
+ %62 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %63 = OpLoad %v3float %62
+ %64 = OpVectorShuffle %v2float %63 %63 2 0
+ OpStore %zx %64
+ %66 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %67 = OpLoad %v3float %66
+ %68 = OpVectorShuffle %v2float %67 %67 2 1
+ OpStore %zy %68
+ %70 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %71 = OpLoad %v3float %70
+ %72 = OpVectorShuffle %v2float %71 %71 2 2
+ OpStore %zz %72
+ %74 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %75 = OpLoad %v3float %74
+ %76 = OpVectorShuffle %v3float %75 %75 0 0 0
+ OpStore %xxx %76
+ %78 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %79 = OpLoad %v3float %78
+ %80 = OpVectorShuffle %v3float %79 %79 0 0 1
+ OpStore %xxy %80
+ %82 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %83 = OpLoad %v3float %82
+ %84 = OpVectorShuffle %v3float %83 %83 0 0 2
+ OpStore %xxz %84
+ %86 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %87 = OpLoad %v3float %86
+ %88 = OpVectorShuffle %v3float %87 %87 0 1 0
+ OpStore %xyx %88
+ %90 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %91 = OpLoad %v3float %90
+ %92 = OpVectorShuffle %v3float %91 %91 0 1 1
+ OpStore %xyy %92
+ %94 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %95 = OpLoad %v3float %94
+ %96 = OpVectorShuffle %v3float %95 %95 0 1 2
+ OpStore %xyz %96
+ %98 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %99 = OpLoad %v3float %98
+ %100 = OpVectorShuffle %v3float %99 %99 0 2 0
+ OpStore %xzx %100
+ %102 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %103 = OpLoad %v3float %102
+ %104 = OpVectorShuffle %v3float %103 %103 0 2 1
+ OpStore %xzy %104
+ %106 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %107 = OpLoad %v3float %106
+ %108 = OpVectorShuffle %v3float %107 %107 0 2 2
+ OpStore %xzz %108
+ %110 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %111 = OpLoad %v3float %110
+ %112 = OpVectorShuffle %v3float %111 %111 1 0 0
+ OpStore %yxx %112
+ %114 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %115 = OpLoad %v3float %114
+ %116 = OpVectorShuffle %v3float %115 %115 1 0 1
+ OpStore %yxy %116
+ %118 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %119 = OpLoad %v3float %118
+ %120 = OpVectorShuffle %v3float %119 %119 1 0 2
+ OpStore %yxz %120
+ %122 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %123 = OpLoad %v3float %122
+ %124 = OpVectorShuffle %v3float %123 %123 1 1 0
+ OpStore %yyx %124
+ %126 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %127 = OpLoad %v3float %126
+ %128 = OpVectorShuffle %v3float %127 %127 1 1 1
+ OpStore %yyy %128
+ %130 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %131 = OpLoad %v3float %130
+ %132 = OpVectorShuffle %v3float %131 %131 1 1 2
+ OpStore %yyz %132
+ %134 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %135 = OpLoad %v3float %134
+ %136 = OpVectorShuffle %v3float %135 %135 1 2 0
+ OpStore %yzx %136
+ %138 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %139 = OpLoad %v3float %138
+ %140 = OpVectorShuffle %v3float %139 %139 1 2 1
+ OpStore %yzy %140
+ %142 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %143 = OpLoad %v3float %142
+ %144 = OpVectorShuffle %v3float %143 %143 1 2 2
+ OpStore %yzz %144
+ %146 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %147 = OpLoad %v3float %146
+ %148 = OpVectorShuffle %v3float %147 %147 2 0 0
+ OpStore %zxx %148
+ %150 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %151 = OpLoad %v3float %150
+ %152 = OpVectorShuffle %v3float %151 %151 2 0 1
+ OpStore %zxy %152
+ %154 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %155 = OpLoad %v3float %154
+ %156 = OpVectorShuffle %v3float %155 %155 2 0 2
+ OpStore %zxz %156
+ %158 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %159 = OpLoad %v3float %158
+ %160 = OpVectorShuffle %v3float %159 %159 2 1 0
+ OpStore %zyx %160
+ %162 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %163 = OpLoad %v3float %162
+ %164 = OpVectorShuffle %v3float %163 %163 2 1 1
+ OpStore %zyy %164
+ %166 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %167 = OpLoad %v3float %166
+ %168 = OpVectorShuffle %v3float %167 %167 2 1 2
+ OpStore %zyz %168
+ %170 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %171 = OpLoad %v3float %170
+ %172 = OpVectorShuffle %v3float %171 %171 2 2 0
+ OpStore %zzx %172
+ %174 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %175 = OpLoad %v3float %174
+ %176 = OpVectorShuffle %v3float %175 %175 2 2 1
+ OpStore %zzy %176
+ %178 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %179 = OpLoad %v3float %178
+ %180 = OpVectorShuffle %v3float %179 %179 2 2 2
+ OpStore %zzz %180
+ %182 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %184 = OpLoad %v3float %182
+ %185 = OpVectorShuffle %v4float %184 %184 0 0 0 0
+ OpStore %xxxx %185
+ %189 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %190 = OpLoad %v3float %189
+ %191 = OpVectorShuffle %v4float %190 %190 0 0 0 1
+ OpStore %xxxy %191
+ %193 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %194 = OpLoad %v3float %193
+ %195 = OpVectorShuffle %v4float %194 %194 0 0 0 2
+ OpStore %xxxz %195
+ %197 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %198 = OpLoad %v3float %197
+ %199 = OpVectorShuffle %v4float %198 %198 0 0 1 0
+ OpStore %xxyx %199
+ %201 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %202 = OpLoad %v3float %201
+ %203 = OpVectorShuffle %v4float %202 %202 0 0 1 1
+ OpStore %xxyy %203
+ %205 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %206 = OpLoad %v3float %205
+ %207 = OpVectorShuffle %v4float %206 %206 0 0 1 2
+ OpStore %xxyz %207
+ %209 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %210 = OpLoad %v3float %209
+ %211 = OpVectorShuffle %v4float %210 %210 0 0 2 0
+ OpStore %xxzx %211
+ %213 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %214 = OpLoad %v3float %213
+ %215 = OpVectorShuffle %v4float %214 %214 0 0 2 1
+ OpStore %xxzy %215
+ %217 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %218 = OpLoad %v3float %217
+ %219 = OpVectorShuffle %v4float %218 %218 0 0 2 2
+ OpStore %xxzz %219
+ %221 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %222 = OpLoad %v3float %221
+ %223 = OpVectorShuffle %v4float %222 %222 0 1 0 0
+ OpStore %xyxx %223
+ %225 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %226 = OpLoad %v3float %225
+ %227 = OpVectorShuffle %v4float %226 %226 0 1 0 1
+ OpStore %xyxy %227
+ %229 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %230 = OpLoad %v3float %229
+ %231 = OpVectorShuffle %v4float %230 %230 0 1 0 2
+ OpStore %xyxz %231
+ %233 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %234 = OpLoad %v3float %233
+ %235 = OpVectorShuffle %v4float %234 %234 0 1 1 0
+ OpStore %xyyx %235
+ %237 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %238 = OpLoad %v3float %237
+ %239 = OpVectorShuffle %v4float %238 %238 0 1 1 1
+ OpStore %xyyy %239
+ %241 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %242 = OpLoad %v3float %241
+ %243 = OpVectorShuffle %v4float %242 %242 0 1 1 2
+ OpStore %xyyz %243
+ %245 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %246 = OpLoad %v3float %245
+ %247 = OpVectorShuffle %v4float %246 %246 0 1 2 0
+ OpStore %xyzx %247
+ %249 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %250 = OpLoad %v3float %249
+ %251 = OpVectorShuffle %v4float %250 %250 0 1 2 1
+ OpStore %xyzy %251
+ %253 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %254 = OpLoad %v3float %253
+ %255 = OpVectorShuffle %v4float %254 %254 0 1 2 2
+ OpStore %xyzz %255
+ %257 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %258 = OpLoad %v3float %257
+ %259 = OpVectorShuffle %v4float %258 %258 0 2 0 0
+ OpStore %xzxx %259
+ %261 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %262 = OpLoad %v3float %261
+ %263 = OpVectorShuffle %v4float %262 %262 0 2 0 1
+ OpStore %xzxy %263
+ %265 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %266 = OpLoad %v3float %265
+ %267 = OpVectorShuffle %v4float %266 %266 0 2 0 2
+ OpStore %xzxz %267
+ %269 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %270 = OpLoad %v3float %269
+ %271 = OpVectorShuffle %v4float %270 %270 0 2 1 0
+ OpStore %xzyx %271
+ %273 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %274 = OpLoad %v3float %273
+ %275 = OpVectorShuffle %v4float %274 %274 0 2 1 1
+ OpStore %xzyy %275
+ %277 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %278 = OpLoad %v3float %277
+ %279 = OpVectorShuffle %v4float %278 %278 0 2 1 2
+ OpStore %xzyz %279
+ %281 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %282 = OpLoad %v3float %281
+ %283 = OpVectorShuffle %v4float %282 %282 0 2 2 0
+ OpStore %xzzx %283
+ %285 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %286 = OpLoad %v3float %285
+ %287 = OpVectorShuffle %v4float %286 %286 0 2 2 1
+ OpStore %xzzy %287
+ %289 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %290 = OpLoad %v3float %289
+ %291 = OpVectorShuffle %v4float %290 %290 0 2 2 2
+ OpStore %xzzz %291
+ %293 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %294 = OpLoad %v3float %293
+ %295 = OpVectorShuffle %v4float %294 %294 1 0 0 0
+ OpStore %yxxx %295
+ %297 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %298 = OpLoad %v3float %297
+ %299 = OpVectorShuffle %v4float %298 %298 1 0 0 1
+ OpStore %yxxy %299
+ %301 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %302 = OpLoad %v3float %301
+ %303 = OpVectorShuffle %v4float %302 %302 1 0 0 2
+ OpStore %yxxz %303
+ %305 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %306 = OpLoad %v3float %305
+ %307 = OpVectorShuffle %v4float %306 %306 1 0 1 0
+ OpStore %yxyx %307
+ %309 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %310 = OpLoad %v3float %309
+ %311 = OpVectorShuffle %v4float %310 %310 1 0 1 1
+ OpStore %yxyy %311
+ %313 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %314 = OpLoad %v3float %313
+ %315 = OpVectorShuffle %v4float %314 %314 1 0 1 2
+ OpStore %yxyz %315
+ %317 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %318 = OpLoad %v3float %317
+ %319 = OpVectorShuffle %v4float %318 %318 1 0 2 0
+ OpStore %yxzx %319
+ %321 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %322 = OpLoad %v3float %321
+ %323 = OpVectorShuffle %v4float %322 %322 1 0 2 1
+ OpStore %yxzy %323
+ %325 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %326 = OpLoad %v3float %325
+ %327 = OpVectorShuffle %v4float %326 %326 1 0 2 2
+ OpStore %yxzz %327
+ %329 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %330 = OpLoad %v3float %329
+ %331 = OpVectorShuffle %v4float %330 %330 1 1 0 0
+ OpStore %yyxx %331
+ %333 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %334 = OpLoad %v3float %333
+ %335 = OpVectorShuffle %v4float %334 %334 1 1 0 1
+ OpStore %yyxy %335
+ %337 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %338 = OpLoad %v3float %337
+ %339 = OpVectorShuffle %v4float %338 %338 1 1 0 2
+ OpStore %yyxz %339
+ %341 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %342 = OpLoad %v3float %341
+ %343 = OpVectorShuffle %v4float %342 %342 1 1 1 0
+ OpStore %yyyx %343
+ %345 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %346 = OpLoad %v3float %345
+ %347 = OpVectorShuffle %v4float %346 %346 1 1 1 1
+ OpStore %yyyy %347
+ %349 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %350 = OpLoad %v3float %349
+ %351 = OpVectorShuffle %v4float %350 %350 1 1 1 2
+ OpStore %yyyz %351
+ %353 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %354 = OpLoad %v3float %353
+ %355 = OpVectorShuffle %v4float %354 %354 1 1 2 0
+ OpStore %yyzx %355
+ %357 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %358 = OpLoad %v3float %357
+ %359 = OpVectorShuffle %v4float %358 %358 1 1 2 1
+ OpStore %yyzy %359
+ %361 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %362 = OpLoad %v3float %361
+ %363 = OpVectorShuffle %v4float %362 %362 1 1 2 2
+ OpStore %yyzz %363
+ %365 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %366 = OpLoad %v3float %365
+ %367 = OpVectorShuffle %v4float %366 %366 1 2 0 0
+ OpStore %yzxx %367
+ %369 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %370 = OpLoad %v3float %369
+ %371 = OpVectorShuffle %v4float %370 %370 1 2 0 1
+ OpStore %yzxy %371
+ %373 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %374 = OpLoad %v3float %373
+ %375 = OpVectorShuffle %v4float %374 %374 1 2 0 2
+ OpStore %yzxz %375
+ %377 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %378 = OpLoad %v3float %377
+ %379 = OpVectorShuffle %v4float %378 %378 1 2 1 0
+ OpStore %yzyx %379
+ %381 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %382 = OpLoad %v3float %381
+ %383 = OpVectorShuffle %v4float %382 %382 1 2 1 1
+ OpStore %yzyy %383
+ %385 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %386 = OpLoad %v3float %385
+ %387 = OpVectorShuffle %v4float %386 %386 1 2 1 2
+ OpStore %yzyz %387
+ %389 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %390 = OpLoad %v3float %389
+ %391 = OpVectorShuffle %v4float %390 %390 1 2 2 0
+ OpStore %yzzx %391
+ %393 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %394 = OpLoad %v3float %393
+ %395 = OpVectorShuffle %v4float %394 %394 1 2 2 1
+ OpStore %yzzy %395
+ %397 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %398 = OpLoad %v3float %397
+ %399 = OpVectorShuffle %v4float %398 %398 1 2 2 2
+ OpStore %yzzz %399
+ %401 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %402 = OpLoad %v3float %401
+ %403 = OpVectorShuffle %v4float %402 %402 2 0 0 0
+ OpStore %zxxx %403
+ %405 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %406 = OpLoad %v3float %405
+ %407 = OpVectorShuffle %v4float %406 %406 2 0 0 1
+ OpStore %zxxy %407
+ %409 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %410 = OpLoad %v3float %409
+ %411 = OpVectorShuffle %v4float %410 %410 2 0 0 2
+ OpStore %zxxz %411
+ %413 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %414 = OpLoad %v3float %413
+ %415 = OpVectorShuffle %v4float %414 %414 2 0 1 0
+ OpStore %zxyx %415
+ %417 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %418 = OpLoad %v3float %417
+ %419 = OpVectorShuffle %v4float %418 %418 2 0 1 1
+ OpStore %zxyy %419
+ %421 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %422 = OpLoad %v3float %421
+ %423 = OpVectorShuffle %v4float %422 %422 2 0 1 2
+ OpStore %zxyz %423
+ %425 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %426 = OpLoad %v3float %425
+ %427 = OpVectorShuffle %v4float %426 %426 2 0 2 0
+ OpStore %zxzx %427
+ %429 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %430 = OpLoad %v3float %429
+ %431 = OpVectorShuffle %v4float %430 %430 2 0 2 1
+ OpStore %zxzy %431
+ %433 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %434 = OpLoad %v3float %433
+ %435 = OpVectorShuffle %v4float %434 %434 2 0 2 2
+ OpStore %zxzz %435
+ %437 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %438 = OpLoad %v3float %437
+ %439 = OpVectorShuffle %v4float %438 %438 2 1 0 0
+ OpStore %zyxx %439
+ %441 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %442 = OpLoad %v3float %441
+ %443 = OpVectorShuffle %v4float %442 %442 2 1 0 1
+ OpStore %zyxy %443
+ %445 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %446 = OpLoad %v3float %445
+ %447 = OpVectorShuffle %v4float %446 %446 2 1 0 2
+ OpStore %zyxz %447
+ %449 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %450 = OpLoad %v3float %449
+ %451 = OpVectorShuffle %v4float %450 %450 2 1 1 0
+ OpStore %zyyx %451
+ %453 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %454 = OpLoad %v3float %453
+ %455 = OpVectorShuffle %v4float %454 %454 2 1 1 1
+ OpStore %zyyy %455
+ %457 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %458 = OpLoad %v3float %457
+ %459 = OpVectorShuffle %v4float %458 %458 2 1 1 2
+ OpStore %zyyz %459
+ %461 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %462 = OpLoad %v3float %461
+ %463 = OpVectorShuffle %v4float %462 %462 2 1 2 0
+ OpStore %zyzx %463
+ %465 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %466 = OpLoad %v3float %465
+ %467 = OpVectorShuffle %v4float %466 %466 2 1 2 1
+ OpStore %zyzy %467
+ %469 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %470 = OpLoad %v3float %469
+ %471 = OpVectorShuffle %v4float %470 %470 2 1 2 2
+ OpStore %zyzz %471
+ %473 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %474 = OpLoad %v3float %473
+ %475 = OpVectorShuffle %v4float %474 %474 2 2 0 0
+ OpStore %zzxx %475
+ %477 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %478 = OpLoad %v3float %477
+ %479 = OpVectorShuffle %v4float %478 %478 2 2 0 1
+ OpStore %zzxy %479
+ %481 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %482 = OpLoad %v3float %481
+ %483 = OpVectorShuffle %v4float %482 %482 2 2 0 2
+ OpStore %zzxz %483
+ %485 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %486 = OpLoad %v3float %485
+ %487 = OpVectorShuffle %v4float %486 %486 2 2 1 0
+ OpStore %zzyx %487
+ %489 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %490 = OpLoad %v3float %489
+ %491 = OpVectorShuffle %v4float %490 %490 2 2 1 1
+ OpStore %zzyy %491
+ %493 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %494 = OpLoad %v3float %493
+ %495 = OpVectorShuffle %v4float %494 %494 2 2 1 2
+ OpStore %zzyz %495
+ %497 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %498 = OpLoad %v3float %497
+ %499 = OpVectorShuffle %v4float %498 %498 2 2 2 0
+ OpStore %zzzx %499
+ %501 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %502 = OpLoad %v3float %501
+ %503 = OpVectorShuffle %v4float %502 %502 2 2 2 1
+ OpStore %zzzy %503
+ %505 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ %506 = OpLoad %v3float %505
+ %507 = OpVectorShuffle %v4float %506 %506 2 2 2 2
+ OpStore %zzzz %507
+ OpReturn
+ OpFunctionEnd
diff --git a/test/expressions/swizzle/read/vec3/f32.wgsl.expected.wgsl b/test/expressions/swizzle/read/vec3/f32.wgsl.expected.wgsl
new file mode 100644
index 0000000..cef93bb
--- /dev/null
+++ b/test/expressions/swizzle/read/vec3/f32.wgsl.expected.wgsl
@@ -0,0 +1,129 @@
+struct S {
+ v : vec3<f32>;
+};
+
+var<private> P : S;
+
+fn f() {
+ var v = P.v;
+ var x = P.v.x;
+ var y = P.v.y;
+ var z = P.v.z;
+ var xx = P.v.xx;
+ var xy = P.v.xy;
+ var xz = P.v.xz;
+ var yx = P.v.yx;
+ var yy = P.v.yy;
+ var yz = P.v.yz;
+ var zx = P.v.zx;
+ var zy = P.v.zy;
+ var zz = P.v.zz;
+ var xxx = P.v.xxx;
+ var xxy = P.v.xxy;
+ var xxz = P.v.xxz;
+ var xyx = P.v.xyx;
+ var xyy = P.v.xyy;
+ var xyz = P.v.xyz;
+ var xzx = P.v.xzx;
+ var xzy = P.v.xzy;
+ var xzz = P.v.xzz;
+ var yxx = P.v.yxx;
+ var yxy = P.v.yxy;
+ var yxz = P.v.yxz;
+ var yyx = P.v.yyx;
+ var yyy = P.v.yyy;
+ var yyz = P.v.yyz;
+ var yzx = P.v.yzx;
+ var yzy = P.v.yzy;
+ var yzz = P.v.yzz;
+ var zxx = P.v.zxx;
+ var zxy = P.v.zxy;
+ var zxz = P.v.zxz;
+ var zyx = P.v.zyx;
+ var zyy = P.v.zyy;
+ var zyz = P.v.zyz;
+ var zzx = P.v.zzx;
+ var zzy = P.v.zzy;
+ var zzz = P.v.zzz;
+ var xxxx = P.v.xxxx;
+ var xxxy = P.v.xxxy;
+ var xxxz = P.v.xxxz;
+ var xxyx = P.v.xxyx;
+ var xxyy = P.v.xxyy;
+ var xxyz = P.v.xxyz;
+ var xxzx = P.v.xxzx;
+ var xxzy = P.v.xxzy;
+ var xxzz = P.v.xxzz;
+ var xyxx = P.v.xyxx;
+ var xyxy = P.v.xyxy;
+ var xyxz = P.v.xyxz;
+ var xyyx = P.v.xyyx;
+ var xyyy = P.v.xyyy;
+ var xyyz = P.v.xyyz;
+ var xyzx = P.v.xyzx;
+ var xyzy = P.v.xyzy;
+ var xyzz = P.v.xyzz;
+ var xzxx = P.v.xzxx;
+ var xzxy = P.v.xzxy;
+ var xzxz = P.v.xzxz;
+ var xzyx = P.v.xzyx;
+ var xzyy = P.v.xzyy;
+ var xzyz = P.v.xzyz;
+ var xzzx = P.v.xzzx;
+ var xzzy = P.v.xzzy;
+ var xzzz = P.v.xzzz;
+ var yxxx = P.v.yxxx;
+ var yxxy = P.v.yxxy;
+ var yxxz = P.v.yxxz;
+ var yxyx = P.v.yxyx;
+ var yxyy = P.v.yxyy;
+ var yxyz = P.v.yxyz;
+ var yxzx = P.v.yxzx;
+ var yxzy = P.v.yxzy;
+ var yxzz = P.v.yxzz;
+ var yyxx = P.v.yyxx;
+ var yyxy = P.v.yyxy;
+ var yyxz = P.v.yyxz;
+ var yyyx = P.v.yyyx;
+ var yyyy = P.v.yyyy;
+ var yyyz = P.v.yyyz;
+ var yyzx = P.v.yyzx;
+ var yyzy = P.v.yyzy;
+ var yyzz = P.v.yyzz;
+ var yzxx = P.v.yzxx;
+ var yzxy = P.v.yzxy;
+ var yzxz = P.v.yzxz;
+ var yzyx = P.v.yzyx;
+ var yzyy = P.v.yzyy;
+ var yzyz = P.v.yzyz;
+ var yzzx = P.v.yzzx;
+ var yzzy = P.v.yzzy;
+ var yzzz = P.v.yzzz;
+ var zxxx = P.v.zxxx;
+ var zxxy = P.v.zxxy;
+ var zxxz = P.v.zxxz;
+ var zxyx = P.v.zxyx;
+ var zxyy = P.v.zxyy;
+ var zxyz = P.v.zxyz;
+ var zxzx = P.v.zxzx;
+ var zxzy = P.v.zxzy;
+ var zxzz = P.v.zxzz;
+ var zyxx = P.v.zyxx;
+ var zyxy = P.v.zyxy;
+ var zyxz = P.v.zyxz;
+ var zyyx = P.v.zyyx;
+ var zyyy = P.v.zyyy;
+ var zyyz = P.v.zyyz;
+ var zyzx = P.v.zyzx;
+ var zyzy = P.v.zyzy;
+ var zyzz = P.v.zyzz;
+ var zzxx = P.v.zzxx;
+ var zzxy = P.v.zzxy;
+ var zzxz = P.v.zzxz;
+ var zzyx = P.v.zzyx;
+ var zzyy = P.v.zzyy;
+ var zzyz = P.v.zzyz;
+ var zzzx = P.v.zzzx;
+ var zzzy = P.v.zzzy;
+ var zzzz = P.v.zzzz;
+}
diff --git a/test/expressions/swizzle/read/vec3/i32.wgsl b/test/expressions/swizzle/read/vec3/i32.wgsl
new file mode 100644
index 0000000..fca1add
--- /dev/null
+++ b/test/expressions/swizzle/read/vec3/i32.wgsl
@@ -0,0 +1,143 @@
+struct S {
+ v: vec3<i32>;
+};
+
+var<private> P : S;
+
+fn f() {
+ var v = P.v;
+
+ var x = P.v.x;
+ var y = P.v.y;
+ var z = P.v.z;
+
+ var xx = P.v.xx;
+ var xy = P.v.xy;
+ var xz = P.v.xz;
+ var yx = P.v.yx;
+ var yy = P.v.yy;
+ var yz = P.v.yz;
+ var zx = P.v.zx;
+ var zy = P.v.zy;
+ var zz = P.v.zz;
+
+ var xxx = P.v.xxx;
+ var xxy = P.v.xxy;
+ var xxz = P.v.xxz;
+ var xyx = P.v.xyx;
+ var xyy = P.v.xyy;
+ var xyz = P.v.xyz;
+ var xzx = P.v.xzx;
+ var xzy = P.v.xzy;
+ var xzz = P.v.xzz;
+
+ var yxx = P.v.yxx;
+ var yxy = P.v.yxy;
+ var yxz = P.v.yxz;
+ var yyx = P.v.yyx;
+ var yyy = P.v.yyy;
+ var yyz = P.v.yyz;
+ var yzx = P.v.yzx;
+ var yzy = P.v.yzy;
+ var yzz = P.v.yzz;
+
+ var zxx = P.v.zxx;
+ var zxy = P.v.zxy;
+ var zxz = P.v.zxz;
+ var zyx = P.v.zyx;
+ var zyy = P.v.zyy;
+ var zyz = P.v.zyz;
+ var zzx = P.v.zzx;
+ var zzy = P.v.zzy;
+ var zzz = P.v.zzz;
+
+ var xxxx = P.v.xxxx;
+ var xxxy = P.v.xxxy;
+ var xxxz = P.v.xxxz;
+ var xxyx = P.v.xxyx;
+ var xxyy = P.v.xxyy;
+ var xxyz = P.v.xxyz;
+ var xxzx = P.v.xxzx;
+ var xxzy = P.v.xxzy;
+ var xxzz = P.v.xxzz;
+
+ var xyxx = P.v.xyxx;
+ var xyxy = P.v.xyxy;
+ var xyxz = P.v.xyxz;
+ var xyyx = P.v.xyyx;
+ var xyyy = P.v.xyyy;
+ var xyyz = P.v.xyyz;
+ var xyzx = P.v.xyzx;
+ var xyzy = P.v.xyzy;
+ var xyzz = P.v.xyzz;
+
+ var xzxx = P.v.xzxx;
+ var xzxy = P.v.xzxy;
+ var xzxz = P.v.xzxz;
+ var xzyx = P.v.xzyx;
+ var xzyy = P.v.xzyy;
+ var xzyz = P.v.xzyz;
+ var xzzx = P.v.xzzx;
+ var xzzy = P.v.xzzy;
+ var xzzz = P.v.xzzz;
+
+ var yxxx = P.v.yxxx;
+ var yxxy = P.v.yxxy;
+ var yxxz = P.v.yxxz;
+ var yxyx = P.v.yxyx;
+ var yxyy = P.v.yxyy;
+ var yxyz = P.v.yxyz;
+ var yxzx = P.v.yxzx;
+ var yxzy = P.v.yxzy;
+ var yxzz = P.v.yxzz;
+
+ var yyxx = P.v.yyxx;
+ var yyxy = P.v.yyxy;
+ var yyxz = P.v.yyxz;
+ var yyyx = P.v.yyyx;
+ var yyyy = P.v.yyyy;
+ var yyyz = P.v.yyyz;
+ var yyzx = P.v.yyzx;
+ var yyzy = P.v.yyzy;
+ var yyzz = P.v.yyzz;
+
+ var yzxx = P.v.yzxx;
+ var yzxy = P.v.yzxy;
+ var yzxz = P.v.yzxz;
+ var yzyx = P.v.yzyx;
+ var yzyy = P.v.yzyy;
+ var yzyz = P.v.yzyz;
+ var yzzx = P.v.yzzx;
+ var yzzy = P.v.yzzy;
+ var yzzz = P.v.yzzz;
+
+ var zxxx = P.v.zxxx;
+ var zxxy = P.v.zxxy;
+ var zxxz = P.v.zxxz;
+ var zxyx = P.v.zxyx;
+ var zxyy = P.v.zxyy;
+ var zxyz = P.v.zxyz;
+ var zxzx = P.v.zxzx;
+ var zxzy = P.v.zxzy;
+ var zxzz = P.v.zxzz;
+
+ var zyxx = P.v.zyxx;
+ var zyxy = P.v.zyxy;
+ var zyxz = P.v.zyxz;
+ var zyyx = P.v.zyyx;
+ var zyyy = P.v.zyyy;
+ var zyyz = P.v.zyyz;
+ var zyzx = P.v.zyzx;
+ var zyzy = P.v.zyzy;
+ var zyzz = P.v.zyzz;
+
+ var zzxx = P.v.zzxx;
+ var zzxy = P.v.zzxy;
+ var zzxz = P.v.zzxz;
+ var zzyx = P.v.zzyx;
+ var zzyy = P.v.zzyy;
+ var zzyz = P.v.zzyz;
+ var zzzx = P.v.zzzx;
+ var zzzy = P.v.zzzy;
+ var zzzz = P.v.zzzz;
+}
diff --git a/test/expressions/swizzle/read/vec3/i32.wgsl.expected.hlsl b/test/expressions/swizzle/read/vec3/i32.wgsl.expected.hlsl
new file mode 100644
index 0000000..b6314fb
--- /dev/null
+++ b/test/expressions/swizzle/read/vec3/i32.wgsl.expected.hlsl
@@ -0,0 +1,134 @@
+[numthreads(1, 1, 1)]
+void unused_entry_point() {
+ return;
+}
+
+struct S {
+ int3 v;
+};
+
+static S P = (S)0;
+
+void f() {
+ int3 v = P.v;
+ int x = P.v.x;
+ int y = P.v.y;
+ int z = P.v.z;
+ int2 xx = P.v.xx;
+ int2 xy = P.v.xy;
+ int2 xz = P.v.xz;
+ int2 yx = P.v.yx;
+ int2 yy = P.v.yy;
+ int2 yz = P.v.yz;
+ int2 zx = P.v.zx;
+ int2 zy = P.v.zy;
+ int2 zz = P.v.zz;
+ int3 xxx = P.v.xxx;
+ int3 xxy = P.v.xxy;
+ int3 xxz = P.v.xxz;
+ int3 xyx = P.v.xyx;
+ int3 xyy = P.v.xyy;
+ int3 xyz = P.v.xyz;
+ int3 xzx = P.v.xzx;
+ int3 xzy = P.v.xzy;
+ int3 xzz = P.v.xzz;
+ int3 yxx = P.v.yxx;
+ int3 yxy = P.v.yxy;
+ int3 yxz = P.v.yxz;
+ int3 yyx = P.v.yyx;
+ int3 yyy = P.v.yyy;
+ int3 yyz = P.v.yyz;
+ int3 yzx = P.v.yzx;
+ int3 yzy = P.v.yzy;
+ int3 yzz = P.v.yzz;
+ int3 zxx = P.v.zxx;
+ int3 zxy = P.v.zxy;
+ int3 zxz = P.v.zxz;
+ int3 zyx = P.v.zyx;
+ int3 zyy = P.v.zyy;
+ int3 zyz = P.v.zyz;
+ int3 zzx = P.v.zzx;
+ int3 zzy = P.v.zzy;
+ int3 zzz = P.v.zzz;
+ int4 xxxx = P.v.xxxx;
+ int4 xxxy = P.v.xxxy;
+ int4 xxxz = P.v.xxxz;
+ int4 xxyx = P.v.xxyx;
+ int4 xxyy = P.v.xxyy;
+ int4 xxyz = P.v.xxyz;
+ int4 xxzx = P.v.xxzx;
+ int4 xxzy = P.v.xxzy;
+ int4 xxzz = P.v.xxzz;
+ int4 xyxx = P.v.xyxx;
+ int4 xyxy = P.v.xyxy;
+ int4 xyxz = P.v.xyxz;
+ int4 xyyx = P.v.xyyx;
+ int4 xyyy = P.v.xyyy;
+ int4 xyyz = P.v.xyyz;
+ int4 xyzx = P.v.xyzx;
+ int4 xyzy = P.v.xyzy;
+ int4 xyzz = P.v.xyzz;
+ int4 xzxx = P.v.xzxx;
+ int4 xzxy = P.v.xzxy;
+ int4 xzxz = P.v.xzxz;
+ int4 xzyx = P.v.xzyx;
+ int4 xzyy = P.v.xzyy;
+ int4 xzyz = P.v.xzyz;
+ int4 xzzx = P.v.xzzx;
+ int4 xzzy = P.v.xzzy;
+ int4 xzzz = P.v.xzzz;
+ int4 yxxx = P.v.yxxx;
+ int4 yxxy = P.v.yxxy;
+ int4 yxxz = P.v.yxxz;
+ int4 yxyx = P.v.yxyx;
+ int4 yxyy = P.v.yxyy;
+ int4 yxyz = P.v.yxyz;
+ int4 yxzx = P.v.yxzx;
+ int4 yxzy = P.v.yxzy;
+ int4 yxzz = P.v.yxzz;
+ int4 yyxx = P.v.yyxx;
+ int4 yyxy = P.v.yyxy;
+ int4 yyxz = P.v.yyxz;
+ int4 yyyx = P.v.yyyx;
+ int4 yyyy = P.v.yyyy;
+ int4 yyyz = P.v.yyyz;
+ int4 yyzx = P.v.yyzx;
+ int4 yyzy = P.v.yyzy;
+ int4 yyzz = P.v.yyzz;
+ int4 yzxx = P.v.yzxx;
+ int4 yzxy = P.v.yzxy;
+ int4 yzxz = P.v.yzxz;
+ int4 yzyx = P.v.yzyx;
+ int4 yzyy = P.v.yzyy;
+ int4 yzyz = P.v.yzyz;
+ int4 yzzx = P.v.yzzx;
+ int4 yzzy = P.v.yzzy;
+ int4 yzzz = P.v.yzzz;
+ int4 zxxx = P.v.zxxx;
+ int4 zxxy = P.v.zxxy;
+ int4 zxxz = P.v.zxxz;
+ int4 zxyx = P.v.zxyx;
+ int4 zxyy = P.v.zxyy;
+ int4 zxyz = P.v.zxyz;
+ int4 zxzx = P.v.zxzx;
+ int4 zxzy = P.v.zxzy;
+ int4 zxzz = P.v.zxzz;
+ int4 zyxx = P.v.zyxx;
+ int4 zyxy = P.v.zyxy;
+ int4 zyxz = P.v.zyxz;
+ int4 zyyx = P.v.zyyx;
+ int4 zyyy = P.v.zyyy;
+ int4 zyyz = P.v.zyyz;
+ int4 zyzx = P.v.zyzx;
+ int4 zyzy = P.v.zyzy;
+ int4 zyzz = P.v.zyzz;
+ int4 zzxx = P.v.zzxx;
+ int4 zzxy = P.v.zzxy;
+ int4 zzxz = P.v.zzxz;
+ int4 zzyx = P.v.zzyx;
+ int4 zzyy = P.v.zzyy;
+ int4 zzyz = P.v.zzyz;
+ int4 zzzx = P.v.zzzx;
+ int4 zzzy = P.v.zzzy;
+ int4 zzzz = P.v.zzzz;
+}
diff --git a/test/expressions/swizzle/read/vec3/i32.wgsl.expected.msl b/test/expressions/swizzle/read/vec3/i32.wgsl.expected.msl
new file mode 100644
index 0000000..ddcd693
--- /dev/null
+++ b/test/expressions/swizzle/read/vec3/i32.wgsl.expected.msl
@@ -0,0 +1,131 @@
+#include <metal_stdlib>
+
+using namespace metal;
+struct S {
+ int3 v;
+};
+
+void f(thread S* const tint_symbol) {
+ int3 v = (*(tint_symbol)).v;
+ int x = (*(tint_symbol)).v[0];
+ int y = (*(tint_symbol)).v[1];
+ int z = (*(tint_symbol)).v[2];
+ int2 xx = int3((*(tint_symbol)).v).xx;
+ int2 xy = int3((*(tint_symbol)).v).xy;
+ int2 xz = int3((*(tint_symbol)).v).xz;
+ int2 yx = int3((*(tint_symbol)).v).yx;
+ int2 yy = int3((*(tint_symbol)).v).yy;
+ int2 yz = int3((*(tint_symbol)).v).yz;
+ int2 zx = int3((*(tint_symbol)).v).zx;
+ int2 zy = int3((*(tint_symbol)).v).zy;
+ int2 zz = int3((*(tint_symbol)).v).zz;
+ int3 xxx = int3((*(tint_symbol)).v).xxx;
+ int3 xxy = int3((*(tint_symbol)).v).xxy;
+ int3 xxz = int3((*(tint_symbol)).v).xxz;
+ int3 xyx = int3((*(tint_symbol)).v).xyx;
+ int3 xyy = int3((*(tint_symbol)).v).xyy;
+ int3 xyz = int3((*(tint_symbol)).v).xyz;
+ int3 xzx = int3((*(tint_symbol)).v).xzx;
+ int3 xzy = int3((*(tint_symbol)).v).xzy;
+ int3 xzz = int3((*(tint_symbol)).v).xzz;
+ int3 yxx = int3((*(tint_symbol)).v).yxx;
+ int3 yxy = int3((*(tint_symbol)).v).yxy;
+ int3 yxz = int3((*(tint_symbol)).v).yxz;
+ int3 yyx = int3((*(tint_symbol)).v).yyx;
+ int3 yyy = int3((*(tint_symbol)).v).yyy;
+ int3 yyz = int3((*(tint_symbol)).v).yyz;
+ int3 yzx = int3((*(tint_symbol)).v).yzx;
+ int3 yzy = int3((*(tint_symbol)).v).yzy;
+ int3 yzz = int3((*(tint_symbol)).v).yzz;
+ int3 zxx = int3((*(tint_symbol)).v).zxx;
+ int3 zxy = int3((*(tint_symbol)).v).zxy;
+ int3 zxz = int3((*(tint_symbol)).v).zxz;
+ int3 zyx = int3((*(tint_symbol)).v).zyx;
+ int3 zyy = int3((*(tint_symbol)).v).zyy;
+ int3 zyz = int3((*(tint_symbol)).v).zyz;
+ int3 zzx = int3((*(tint_symbol)).v).zzx;
+ int3 zzy = int3((*(tint_symbol)).v).zzy;
+ int3 zzz = int3((*(tint_symbol)).v).zzz;
+ int4 xxxx = int3((*(tint_symbol)).v).xxxx;
+ int4 xxxy = int3((*(tint_symbol)).v).xxxy;
+ int4 xxxz = int3((*(tint_symbol)).v).xxxz;
+ int4 xxyx = int3((*(tint_symbol)).v).xxyx;
+ int4 xxyy = int3((*(tint_symbol)).v).xxyy;
+ int4 xxyz = int3((*(tint_symbol)).v).xxyz;
+ int4 xxzx = int3((*(tint_symbol)).v).xxzx;
+ int4 xxzy = int3((*(tint_symbol)).v).xxzy;
+ int4 xxzz = int3((*(tint_symbol)).v).xxzz;
+ int4 xyxx = int3((*(tint_symbol)).v).xyxx;
+ int4 xyxy = int3((*(tint_symbol)).v).xyxy;
+ int4 xyxz = int3((*(tint_symbol)).v).xyxz;
+ int4 xyyx = int3((*(tint_symbol)).v).xyyx;
+ int4 xyyy = int3((*(tint_symbol)).v).xyyy;
+ int4 xyyz = int3((*(tint_symbol)).v).xyyz;
+ int4 xyzx = int3((*(tint_symbol)).v).xyzx;
+ int4 xyzy = int3((*(tint_symbol)).v).xyzy;
+ int4 xyzz = int3((*(tint_symbol)).v).xyzz;
+ int4 xzxx = int3((*(tint_symbol)).v).xzxx;
+ int4 xzxy = int3((*(tint_symbol)).v).xzxy;
+ int4 xzxz = int3((*(tint_symbol)).v).xzxz;
+ int4 xzyx = int3((*(tint_symbol)).v).xzyx;
+ int4 xzyy = int3((*(tint_symbol)).v).xzyy;
+ int4 xzyz = int3((*(tint_symbol)).v).xzyz;
+ int4 xzzx = int3((*(tint_symbol)).v).xzzx;
+ int4 xzzy = int3((*(tint_symbol)).v).xzzy;
+ int4 xzzz = int3((*(tint_symbol)).v).xzzz;
+ int4 yxxx = int3((*(tint_symbol)).v).yxxx;
+ int4 yxxy = int3((*(tint_symbol)).v).yxxy;
+ int4 yxxz = int3((*(tint_symbol)).v).yxxz;
+ int4 yxyx = int3((*(tint_symbol)).v).yxyx;
+ int4 yxyy = int3((*(tint_symbol)).v).yxyy;
+ int4 yxyz = int3((*(tint_symbol)).v).yxyz;
+ int4 yxzx = int3((*(tint_symbol)).v).yxzx;
+ int4 yxzy = int3((*(tint_symbol)).v).yxzy;
+ int4 yxzz = int3((*(tint_symbol)).v).yxzz;
+ int4 yyxx = int3((*(tint_symbol)).v).yyxx;
+ int4 yyxy = int3((*(tint_symbol)).v).yyxy;
+ int4 yyxz = int3((*(tint_symbol)).v).yyxz;
+ int4 yyyx = int3((*(tint_symbol)).v).yyyx;
+ int4 yyyy = int3((*(tint_symbol)).v).yyyy;
+ int4 yyyz = int3((*(tint_symbol)).v).yyyz;
+ int4 yyzx = int3((*(tint_symbol)).v).yyzx;
+ int4 yyzy = int3((*(tint_symbol)).v).yyzy;
+ int4 yyzz = int3((*(tint_symbol)).v).yyzz;
+ int4 yzxx = int3((*(tint_symbol)).v).yzxx;
+ int4 yzxy = int3((*(tint_symbol)).v).yzxy;
+ int4 yzxz = int3((*(tint_symbol)).v).yzxz;
+ int4 yzyx = int3((*(tint_symbol)).v).yzyx;
+ int4 yzyy = int3((*(tint_symbol)).v).yzyy;
+ int4 yzyz = int3((*(tint_symbol)).v).yzyz;
+ int4 yzzx = int3((*(tint_symbol)).v).yzzx;
+ int4 yzzy = int3((*(tint_symbol)).v).yzzy;
+ int4 yzzz = int3((*(tint_symbol)).v).yzzz;
+ int4 zxxx = int3((*(tint_symbol)).v).zxxx;
+ int4 zxxy = int3((*(tint_symbol)).v).zxxy;
+ int4 zxxz = int3((*(tint_symbol)).v).zxxz;
+ int4 zxyx = int3((*(tint_symbol)).v).zxyx;
+ int4 zxyy = int3((*(tint_symbol)).v).zxyy;
+ int4 zxyz = int3((*(tint_symbol)).v).zxyz;
+ int4 zxzx = int3((*(tint_symbol)).v).zxzx;
+ int4 zxzy = int3((*(tint_symbol)).v).zxzy;
+ int4 zxzz = int3((*(tint_symbol)).v).zxzz;
+ int4 zyxx = int3((*(tint_symbol)).v).zyxx;
+ int4 zyxy = int3((*(tint_symbol)).v).zyxy;
+ int4 zyxz = int3((*(tint_symbol)).v).zyxz;
+ int4 zyyx = int3((*(tint_symbol)).v).zyyx;
+ int4 zyyy = int3((*(tint_symbol)).v).zyyy;
+ int4 zyyz = int3((*(tint_symbol)).v).zyyz;
+ int4 zyzx = int3((*(tint_symbol)).v).zyzx;
+ int4 zyzy = int3((*(tint_symbol)).v).zyzy;
+ int4 zyzz = int3((*(tint_symbol)).v).zyzz;
+ int4 zzxx = int3((*(tint_symbol)).v).zzxx;
+ int4 zzxy = int3((*(tint_symbol)).v).zzxy;
+ int4 zzxz = int3((*(tint_symbol)).v).zzxz;
+ int4 zzyx = int3((*(tint_symbol)).v).zzyx;
+ int4 zzyy = int3((*(tint_symbol)).v).zzyy;
+ int4 zzyz = int3((*(tint_symbol)).v).zzyz;
+ int4 zzzx = int3((*(tint_symbol)).v).zzzx;
+ int4 zzzy = int3((*(tint_symbol)).v).zzzy;
+ int4 zzzz = int3((*(tint_symbol)).v).zzzz;
+}
+
diff --git a/test/expressions/swizzle/read/vec3/i32.wgsl.expected.spvasm b/test/expressions/swizzle/read/vec3/i32.wgsl.expected.spvasm
new file mode 100644
index 0000000..87507a0
--- /dev/null
+++ b/test/expressions/swizzle/read/vec3/i32.wgsl.expected.spvasm
@@ -0,0 +1,769 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 509
+; Schema: 0
+ OpCapability Shader
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
+ OpExecutionMode %unused_entry_point LocalSize 1 1 1
+ OpName %S "S"
+ OpMemberName %S 0 "v"
+ OpName %P "P"
+ OpName %unused_entry_point "unused_entry_point"
+ OpName %f "f"
+ OpName %v "v"
+ OpName %x "x"
+ OpName %y "y"
+ OpName %z "z"
+ OpName %xx "xx"
+ OpName %xy "xy"
+ OpName %xz "xz"
+ OpName %yx "yx"
+ OpName %yy "yy"
+ OpName %yz "yz"
+ OpName %zx "zx"
+ OpName %zy "zy"
+ OpName %zz "zz"
+ OpName %xxx "xxx"
+ OpName %xxy "xxy"
+ OpName %xxz "xxz"
+ OpName %xyx "xyx"
+ OpName %xyy "xyy"
+ OpName %xyz "xyz"
+ OpName %xzx "xzx"
+ OpName %xzy "xzy"
+ OpName %xzz "xzz"
+ OpName %yxx "yxx"
+ OpName %yxy "yxy"
+ OpName %yxz "yxz"
+ OpName %yyx "yyx"
+ OpName %yyy "yyy"
+ OpName %yyz "yyz"
+ OpName %yzx "yzx"
+ OpName %yzy "yzy"
+ OpName %yzz "yzz"
+ OpName %zxx "zxx"
+ OpName %zxy "zxy"
+ OpName %zxz "zxz"
+ OpName %zyx "zyx"
+ OpName %zyy "zyy"
+ OpName %zyz "zyz"
+ OpName %zzx "zzx"
+ OpName %zzy "zzy"
+ OpName %zzz "zzz"
+ OpName %xxxx "xxxx"
+ OpName %xxxy "xxxy"
+ OpName %xxxz "xxxz"
+ OpName %xxyx "xxyx"
+ OpName %xxyy "xxyy"
+ OpName %xxyz "xxyz"
+ OpName %xxzx "xxzx"
+ OpName %xxzy "xxzy"
+ OpName %xxzz "xxzz"
+ OpName %xyxx "xyxx"
+ OpName %xyxy "xyxy"
+ OpName %xyxz "xyxz"
+ OpName %xyyx "xyyx"
+ OpName %xyyy "xyyy"
+ OpName %xyyz "xyyz"
+ OpName %xyzx "xyzx"
+ OpName %xyzy "xyzy"
+ OpName %xyzz "xyzz"
+ OpName %xzxx "xzxx"
+ OpName %xzxy "xzxy"
+ OpName %xzxz "xzxz"
+ OpName %xzyx "xzyx"
+ OpName %xzyy "xzyy"
+ OpName %xzyz "xzyz"
+ OpName %xzzx "xzzx"
+ OpName %xzzy "xzzy"
+ OpName %xzzz "xzzz"
+ OpName %yxxx "yxxx"
+ OpName %yxxy "yxxy"
+ OpName %yxxz "yxxz"
+ OpName %yxyx "yxyx"
+ OpName %yxyy "yxyy"
+ OpName %yxyz "yxyz"
+ OpName %yxzx "yxzx"
+ OpName %yxzy "yxzy"
+ OpName %yxzz "yxzz"
+ OpName %yyxx "yyxx"
+ OpName %yyxy "yyxy"
+ OpName %yyxz "yyxz"
+ OpName %yyyx "yyyx"
+ OpName %yyyy "yyyy"
+ OpName %yyyz "yyyz"
+ OpName %yyzx "yyzx"
+ OpName %yyzy "yyzy"
+ OpName %yyzz "yyzz"
+ OpName %yzxx "yzxx"
+ OpName %yzxy "yzxy"
+ OpName %yzxz "yzxz"
+ OpName %yzyx "yzyx"
+ OpName %yzyy "yzyy"
+ OpName %yzyz "yzyz"
+ OpName %yzzx "yzzx"
+ OpName %yzzy "yzzy"
+ OpName %yzzz "yzzz"
+ OpName %zxxx "zxxx"
+ OpName %zxxy "zxxy"
+ OpName %zxxz "zxxz"
+ OpName %zxyx "zxyx"
+ OpName %zxyy "zxyy"
+ OpName %zxyz "zxyz"
+ OpName %zxzx "zxzx"
+ OpName %zxzy "zxzy"
+ OpName %zxzz "zxzz"
+ OpName %zyxx "zyxx"
+ OpName %zyxy "zyxy"
+ OpName %zyxz "zyxz"
+ OpName %zyyx "zyyx"
+ OpName %zyyy "zyyy"
+ OpName %zyyz "zyyz"
+ OpName %zyzx "zyzx"
+ OpName %zyzy "zyzy"
+ OpName %zyzz "zyzz"
+ OpName %zzxx "zzxx"
+ OpName %zzxy "zzxy"
+ OpName %zzxz "zzxz"
+ OpName %zzyx "zzyx"
+ OpName %zzyy "zzyy"
+ OpName %zzyz "zzyz"
+ OpName %zzzx "zzzx"
+ OpName %zzzy "zzzy"
+ OpName %zzzz "zzzz"
+ OpMemberDecorate %S 0 Offset 0
+ %int = OpTypeInt 32 1
+ %v3int = OpTypeVector %int 3
+ %S = OpTypeStruct %v3int
+%_ptr_Private_S = OpTypePointer Private %S
+ %6 = OpConstantNull %S
+ %P = OpVariable %_ptr_Private_S Private %6
+ %void = OpTypeVoid
+ %7 = OpTypeFunction %void
+ %uint = OpTypeInt 32 0
+ %uint_0 = OpConstant %uint 0
+%_ptr_Private_v3int = OpTypePointer Private %v3int
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+ %20 = OpConstantNull %v3int
+%_ptr_Private_int = OpTypePointer Private %int
+%_ptr_Function_int = OpTypePointer Function %int
+ %26 = OpConstantNull %int
+ %uint_1 = OpConstant %uint 1
+ %uint_2 = OpConstant %uint 2
+ %v2int = OpTypeVector %int 2
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+ %41 = OpConstantNull %v2int
+ %v4int = OpTypeVector %int 4
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+ %188 = OpConstantNull %v4int
+%unused_entry_point = OpFunction %void None %7
+ %10 = OpLabel
+ OpReturn
+ OpFunctionEnd
+ %f = OpFunction %void None %7
+ %12 = OpLabel
+ %v = OpVariable %_ptr_Function_v3int Function %20
+ %x = OpVariable %_ptr_Function_int Function %26
+ %y = OpVariable %_ptr_Function_int Function %26
+ %z = OpVariable %_ptr_Function_int Function %26
+ %xx = OpVariable %_ptr_Function_v2int Function %41
+ %xy = OpVariable %_ptr_Function_v2int Function %41
+ %xz = OpVariable %_ptr_Function_v2int Function %41
+ %yx = OpVariable %_ptr_Function_v2int Function %41
+ %yy = OpVariable %_ptr_Function_v2int Function %41
+ %yz = OpVariable %_ptr_Function_v2int Function %41
+ %zx = OpVariable %_ptr_Function_v2int Function %41
+ %zy = OpVariable %_ptr_Function_v2int Function %41
+ %zz = OpVariable %_ptr_Function_v2int Function %41
+ %xxx = OpVariable %_ptr_Function_v3int Function %20
+ %xxy = OpVariable %_ptr_Function_v3int Function %20
+ %xxz = OpVariable %_ptr_Function_v3int Function %20
+ %xyx = OpVariable %_ptr_Function_v3int Function %20
+ %xyy = OpVariable %_ptr_Function_v3int Function %20
+ %xyz = OpVariable %_ptr_Function_v3int Function %20
+ %xzx = OpVariable %_ptr_Function_v3int Function %20
+ %xzy = OpVariable %_ptr_Function_v3int Function %20
+ %xzz = OpVariable %_ptr_Function_v3int Function %20
+ %yxx = OpVariable %_ptr_Function_v3int Function %20
+ %yxy = OpVariable %_ptr_Function_v3int Function %20
+ %yxz = OpVariable %_ptr_Function_v3int Function %20
+ %yyx = OpVariable %_ptr_Function_v3int Function %20
+ %yyy = OpVariable %_ptr_Function_v3int Function %20
+ %yyz = OpVariable %_ptr_Function_v3int Function %20
+ %yzx = OpVariable %_ptr_Function_v3int Function %20
+ %yzy = OpVariable %_ptr_Function_v3int Function %20
+ %yzz = OpVariable %_ptr_Function_v3int Function %20
+ %zxx = OpVariable %_ptr_Function_v3int Function %20
+ %zxy = OpVariable %_ptr_Function_v3int Function %20
+ %zxz = OpVariable %_ptr_Function_v3int Function %20
+ %zyx = OpVariable %_ptr_Function_v3int Function %20
+ %zyy = OpVariable %_ptr_Function_v3int Function %20
+ %zyz = OpVariable %_ptr_Function_v3int Function %20
+ %zzx = OpVariable %_ptr_Function_v3int Function %20
+ %zzy = OpVariable %_ptr_Function_v3int Function %20
+ %zzz = OpVariable %_ptr_Function_v3int Function %20
+ %xxxx = OpVariable %_ptr_Function_v4int Function %188
+ %xxxy = OpVariable %_ptr_Function_v4int Function %188
+ %xxxz = OpVariable %_ptr_Function_v4int Function %188
+ %xxyx = OpVariable %_ptr_Function_v4int Function %188
+ %xxyy = OpVariable %_ptr_Function_v4int Function %188
+ %xxyz = OpVariable %_ptr_Function_v4int Function %188
+ %xxzx = OpVariable %_ptr_Function_v4int Function %188
+ %xxzy = OpVariable %_ptr_Function_v4int Function %188
+ %xxzz = OpVariable %_ptr_Function_v4int Function %188
+ %xyxx = OpVariable %_ptr_Function_v4int Function %188
+ %xyxy = OpVariable %_ptr_Function_v4int Function %188
+ %xyxz = OpVariable %_ptr_Function_v4int Function %188
+ %xyyx = OpVariable %_ptr_Function_v4int Function %188
+ %xyyy = OpVariable %_ptr_Function_v4int Function %188
+ %xyyz = OpVariable %_ptr_Function_v4int Function %188
+ %xyzx = OpVariable %_ptr_Function_v4int Function %188
+ %xyzy = OpVariable %_ptr_Function_v4int Function %188
+ %xyzz = OpVariable %_ptr_Function_v4int Function %188
+ %xzxx = OpVariable %_ptr_Function_v4int Function %188
+ %xzxy = OpVariable %_ptr_Function_v4int Function %188
+ %xzxz = OpVariable %_ptr_Function_v4int Function %188
+ %xzyx = OpVariable %_ptr_Function_v4int Function %188
+ %xzyy = OpVariable %_ptr_Function_v4int Function %188
+ %xzyz = OpVariable %_ptr_Function_v4int Function %188
+ %xzzx = OpVariable %_ptr_Function_v4int Function %188
+ %xzzy = OpVariable %_ptr_Function_v4int Function %188
+ %xzzz = OpVariable %_ptr_Function_v4int Function %188
+ %yxxx = OpVariable %_ptr_Function_v4int Function %188
+ %yxxy = OpVariable %_ptr_Function_v4int Function %188
+ %yxxz = OpVariable %_ptr_Function_v4int Function %188
+ %yxyx = OpVariable %_ptr_Function_v4int Function %188
+ %yxyy = OpVariable %_ptr_Function_v4int Function %188
+ %yxyz = OpVariable %_ptr_Function_v4int Function %188
+ %yxzx = OpVariable %_ptr_Function_v4int Function %188
+ %yxzy = OpVariable %_ptr_Function_v4int Function %188
+ %yxzz = OpVariable %_ptr_Function_v4int Function %188
+ %yyxx = OpVariable %_ptr_Function_v4int Function %188
+ %yyxy = OpVariable %_ptr_Function_v4int Function %188
+ %yyxz = OpVariable %_ptr_Function_v4int Function %188
+ %yyyx = OpVariable %_ptr_Function_v4int Function %188
+ %yyyy = OpVariable %_ptr_Function_v4int Function %188
+ %yyyz = OpVariable %_ptr_Function_v4int Function %188
+ %yyzx = OpVariable %_ptr_Function_v4int Function %188
+ %yyzy = OpVariable %_ptr_Function_v4int Function %188
+ %yyzz = OpVariable %_ptr_Function_v4int Function %188
+ %yzxx = OpVariable %_ptr_Function_v4int Function %188
+ %yzxy = OpVariable %_ptr_Function_v4int Function %188
+ %yzxz = OpVariable %_ptr_Function_v4int Function %188
+ %yzyx = OpVariable %_ptr_Function_v4int Function %188
+ %yzyy = OpVariable %_ptr_Function_v4int Function %188
+ %yzyz = OpVariable %_ptr_Function_v4int Function %188
+ %yzzx = OpVariable %_ptr_Function_v4int Function %188
+ %yzzy = OpVariable %_ptr_Function_v4int Function %188
+ %yzzz = OpVariable %_ptr_Function_v4int Function %188
+ %zxxx = OpVariable %_ptr_Function_v4int Function %188
+ %zxxy = OpVariable %_ptr_Function_v4int Function %188
+ %zxxz = OpVariable %_ptr_Function_v4int Function %188
+ %zxyx = OpVariable %_ptr_Function_v4int Function %188
+ %zxyy = OpVariable %_ptr_Function_v4int Function %188
+ %zxyz = OpVariable %_ptr_Function_v4int Function %188
+ %zxzx = OpVariable %_ptr_Function_v4int Function %188
+ %zxzy = OpVariable %_ptr_Function_v4int Function %188
+ %zxzz = OpVariable %_ptr_Function_v4int Function %188
+ %zyxx = OpVariable %_ptr_Function_v4int Function %188
+ %zyxy = OpVariable %_ptr_Function_v4int Function %188
+ %zyxz = OpVariable %_ptr_Function_v4int Function %188
+ %zyyx = OpVariable %_ptr_Function_v4int Function %188
+ %zyyy = OpVariable %_ptr_Function_v4int Function %188
+ %zyyz = OpVariable %_ptr_Function_v4int Function %188
+ %zyzx = OpVariable %_ptr_Function_v4int Function %188
+ %zyzy = OpVariable %_ptr_Function_v4int Function %188
+ %zyzz = OpVariable %_ptr_Function_v4int Function %188
+ %zzxx = OpVariable %_ptr_Function_v4int Function %188
+ %zzxy = OpVariable %_ptr_Function_v4int Function %188
+ %zzxz = OpVariable %_ptr_Function_v4int Function %188
+ %zzyx = OpVariable %_ptr_Function_v4int Function %188
+ %zzyy = OpVariable %_ptr_Function_v4int Function %188
+ %zzyz = OpVariable %_ptr_Function_v4int Function %188
+ %zzzx = OpVariable %_ptr_Function_v4int Function %188
+ %zzzy = OpVariable %_ptr_Function_v4int Function %188
+ %zzzz = OpVariable %_ptr_Function_v4int Function %188
+ %16 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %17 = OpLoad %v3int %16
+ OpStore %v %17
+ %22 = OpAccessChain %_ptr_Private_int %P %uint_0 %uint_0
+ %23 = OpLoad %int %22
+ OpStore %x %23
+ %28 = OpAccessChain %_ptr_Private_int %P %uint_0 %uint_1
+ %29 = OpLoad %int %28
+ OpStore %y %29
+ %32 = OpAccessChain %_ptr_Private_int %P %uint_0 %uint_2
+ %33 = OpLoad %int %32
+ OpStore %z %33
+ %35 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %37 = OpLoad %v3int %35
+ %38 = OpVectorShuffle %v2int %37 %37 0 0
+ OpStore %xx %38
+ %42 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %43 = OpLoad %v3int %42
+ %44 = OpVectorShuffle %v2int %43 %43 0 1
+ OpStore %xy %44
+ %46 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %47 = OpLoad %v3int %46
+ %48 = OpVectorShuffle %v2int %47 %47 0 2
+ OpStore %xz %48
+ %50 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %51 = OpLoad %v3int %50
+ %52 = OpVectorShuffle %v2int %51 %51 1 0
+ OpStore %yx %52
+ %54 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %55 = OpLoad %v3int %54
+ %56 = OpVectorShuffle %v2int %55 %55 1 1
+ OpStore %yy %56
+ %58 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %59 = OpLoad %v3int %58
+ %60 = OpVectorShuffle %v2int %59 %59 1 2
+ OpStore %yz %60
+ %62 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %63 = OpLoad %v3int %62
+ %64 = OpVectorShuffle %v2int %63 %63 2 0
+ OpStore %zx %64
+ %66 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %67 = OpLoad %v3int %66
+ %68 = OpVectorShuffle %v2int %67 %67 2 1
+ OpStore %zy %68
+ %70 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %71 = OpLoad %v3int %70
+ %72 = OpVectorShuffle %v2int %71 %71 2 2
+ OpStore %zz %72
+ %74 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %75 = OpLoad %v3int %74
+ %76 = OpVectorShuffle %v3int %75 %75 0 0 0
+ OpStore %xxx %76
+ %78 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %79 = OpLoad %v3int %78
+ %80 = OpVectorShuffle %v3int %79 %79 0 0 1
+ OpStore %xxy %80
+ %82 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %83 = OpLoad %v3int %82
+ %84 = OpVectorShuffle %v3int %83 %83 0 0 2
+ OpStore %xxz %84
+ %86 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %87 = OpLoad %v3int %86
+ %88 = OpVectorShuffle %v3int %87 %87 0 1 0
+ OpStore %xyx %88
+ %90 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %91 = OpLoad %v3int %90
+ %92 = OpVectorShuffle %v3int %91 %91 0 1 1
+ OpStore %xyy %92
+ %94 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %95 = OpLoad %v3int %94
+ %96 = OpVectorShuffle %v3int %95 %95 0 1 2
+ OpStore %xyz %96
+ %98 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %99 = OpLoad %v3int %98
+ %100 = OpVectorShuffle %v3int %99 %99 0 2 0
+ OpStore %xzx %100
+ %102 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %103 = OpLoad %v3int %102
+ %104 = OpVectorShuffle %v3int %103 %103 0 2 1
+ OpStore %xzy %104
+ %106 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %107 = OpLoad %v3int %106
+ %108 = OpVectorShuffle %v3int %107 %107 0 2 2
+ OpStore %xzz %108
+ %110 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %111 = OpLoad %v3int %110
+ %112 = OpVectorShuffle %v3int %111 %111 1 0 0
+ OpStore %yxx %112
+ %114 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %115 = OpLoad %v3int %114
+ %116 = OpVectorShuffle %v3int %115 %115 1 0 1
+ OpStore %yxy %116
+ %118 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %119 = OpLoad %v3int %118
+ %120 = OpVectorShuffle %v3int %119 %119 1 0 2
+ OpStore %yxz %120
+ %122 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %123 = OpLoad %v3int %122
+ %124 = OpVectorShuffle %v3int %123 %123 1 1 0
+ OpStore %yyx %124
+ %126 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %127 = OpLoad %v3int %126
+ %128 = OpVectorShuffle %v3int %127 %127 1 1 1
+ OpStore %yyy %128
+ %130 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %131 = OpLoad %v3int %130
+ %132 = OpVectorShuffle %v3int %131 %131 1 1 2
+ OpStore %yyz %132
+ %134 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %135 = OpLoad %v3int %134
+ %136 = OpVectorShuffle %v3int %135 %135 1 2 0
+ OpStore %yzx %136
+ %138 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %139 = OpLoad %v3int %138
+ %140 = OpVectorShuffle %v3int %139 %139 1 2 1
+ OpStore %yzy %140
+ %142 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %143 = OpLoad %v3int %142
+ %144 = OpVectorShuffle %v3int %143 %143 1 2 2
+ OpStore %yzz %144
+ %146 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %147 = OpLoad %v3int %146
+ %148 = OpVectorShuffle %v3int %147 %147 2 0 0
+ OpStore %zxx %148
+ %150 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %151 = OpLoad %v3int %150
+ %152 = OpVectorShuffle %v3int %151 %151 2 0 1
+ OpStore %zxy %152
+ %154 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %155 = OpLoad %v3int %154
+ %156 = OpVectorShuffle %v3int %155 %155 2 0 2
+ OpStore %zxz %156
+ %158 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %159 = OpLoad %v3int %158
+ %160 = OpVectorShuffle %v3int %159 %159 2 1 0
+ OpStore %zyx %160
+ %162 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %163 = OpLoad %v3int %162
+ %164 = OpVectorShuffle %v3int %163 %163 2 1 1
+ OpStore %zyy %164
+ %166 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %167 = OpLoad %v3int %166
+ %168 = OpVectorShuffle %v3int %167 %167 2 1 2
+ OpStore %zyz %168
+ %170 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %171 = OpLoad %v3int %170
+ %172 = OpVectorShuffle %v3int %171 %171 2 2 0
+ OpStore %zzx %172
+ %174 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %175 = OpLoad %v3int %174
+ %176 = OpVectorShuffle %v3int %175 %175 2 2 1
+ OpStore %zzy %176
+ %178 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %179 = OpLoad %v3int %178
+ %180 = OpVectorShuffle %v3int %179 %179 2 2 2
+ OpStore %zzz %180
+ %182 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %184 = OpLoad %v3int %182
+ %185 = OpVectorShuffle %v4int %184 %184 0 0 0 0
+ OpStore %xxxx %185
+ %189 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %190 = OpLoad %v3int %189
+ %191 = OpVectorShuffle %v4int %190 %190 0 0 0 1
+ OpStore %xxxy %191
+ %193 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %194 = OpLoad %v3int %193
+ %195 = OpVectorShuffle %v4int %194 %194 0 0 0 2
+ OpStore %xxxz %195
+ %197 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %198 = OpLoad %v3int %197
+ %199 = OpVectorShuffle %v4int %198 %198 0 0 1 0
+ OpStore %xxyx %199
+ %201 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %202 = OpLoad %v3int %201
+ %203 = OpVectorShuffle %v4int %202 %202 0 0 1 1
+ OpStore %xxyy %203
+ %205 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %206 = OpLoad %v3int %205
+ %207 = OpVectorShuffle %v4int %206 %206 0 0 1 2
+ OpStore %xxyz %207
+ %209 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %210 = OpLoad %v3int %209
+ %211 = OpVectorShuffle %v4int %210 %210 0 0 2 0
+ OpStore %xxzx %211
+ %213 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %214 = OpLoad %v3int %213
+ %215 = OpVectorShuffle %v4int %214 %214 0 0 2 1
+ OpStore %xxzy %215
+ %217 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %218 = OpLoad %v3int %217
+ %219 = OpVectorShuffle %v4int %218 %218 0 0 2 2
+ OpStore %xxzz %219
+ %221 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %222 = OpLoad %v3int %221
+ %223 = OpVectorShuffle %v4int %222 %222 0 1 0 0
+ OpStore %xyxx %223
+ %225 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %226 = OpLoad %v3int %225
+ %227 = OpVectorShuffle %v4int %226 %226 0 1 0 1
+ OpStore %xyxy %227
+ %229 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %230 = OpLoad %v3int %229
+ %231 = OpVectorShuffle %v4int %230 %230 0 1 0 2
+ OpStore %xyxz %231
+ %233 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %234 = OpLoad %v3int %233
+ %235 = OpVectorShuffle %v4int %234 %234 0 1 1 0
+ OpStore %xyyx %235
+ %237 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %238 = OpLoad %v3int %237
+ %239 = OpVectorShuffle %v4int %238 %238 0 1 1 1
+ OpStore %xyyy %239
+ %241 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %242 = OpLoad %v3int %241
+ %243 = OpVectorShuffle %v4int %242 %242 0 1 1 2
+ OpStore %xyyz %243
+ %245 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %246 = OpLoad %v3int %245
+ %247 = OpVectorShuffle %v4int %246 %246 0 1 2 0
+ OpStore %xyzx %247
+ %249 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %250 = OpLoad %v3int %249
+ %251 = OpVectorShuffle %v4int %250 %250 0 1 2 1
+ OpStore %xyzy %251
+ %253 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %254 = OpLoad %v3int %253
+ %255 = OpVectorShuffle %v4int %254 %254 0 1 2 2
+ OpStore %xyzz %255
+ %257 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %258 = OpLoad %v3int %257
+ %259 = OpVectorShuffle %v4int %258 %258 0 2 0 0
+ OpStore %xzxx %259
+ %261 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %262 = OpLoad %v3int %261
+ %263 = OpVectorShuffle %v4int %262 %262 0 2 0 1
+ OpStore %xzxy %263
+ %265 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %266 = OpLoad %v3int %265
+ %267 = OpVectorShuffle %v4int %266 %266 0 2 0 2
+ OpStore %xzxz %267
+ %269 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %270 = OpLoad %v3int %269
+ %271 = OpVectorShuffle %v4int %270 %270 0 2 1 0
+ OpStore %xzyx %271
+ %273 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %274 = OpLoad %v3int %273
+ %275 = OpVectorShuffle %v4int %274 %274 0 2 1 1
+ OpStore %xzyy %275
+ %277 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %278 = OpLoad %v3int %277
+ %279 = OpVectorShuffle %v4int %278 %278 0 2 1 2
+ OpStore %xzyz %279
+ %281 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %282 = OpLoad %v3int %281
+ %283 = OpVectorShuffle %v4int %282 %282 0 2 2 0
+ OpStore %xzzx %283
+ %285 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %286 = OpLoad %v3int %285
+ %287 = OpVectorShuffle %v4int %286 %286 0 2 2 1
+ OpStore %xzzy %287
+ %289 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %290 = OpLoad %v3int %289
+ %291 = OpVectorShuffle %v4int %290 %290 0 2 2 2
+ OpStore %xzzz %291
+ %293 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %294 = OpLoad %v3int %293
+ %295 = OpVectorShuffle %v4int %294 %294 1 0 0 0
+ OpStore %yxxx %295
+ %297 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %298 = OpLoad %v3int %297
+ %299 = OpVectorShuffle %v4int %298 %298 1 0 0 1
+ OpStore %yxxy %299
+ %301 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %302 = OpLoad %v3int %301
+ %303 = OpVectorShuffle %v4int %302 %302 1 0 0 2
+ OpStore %yxxz %303
+ %305 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %306 = OpLoad %v3int %305
+ %307 = OpVectorShuffle %v4int %306 %306 1 0 1 0
+ OpStore %yxyx %307
+ %309 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %310 = OpLoad %v3int %309
+ %311 = OpVectorShuffle %v4int %310 %310 1 0 1 1
+ OpStore %yxyy %311
+ %313 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %314 = OpLoad %v3int %313
+ %315 = OpVectorShuffle %v4int %314 %314 1 0 1 2
+ OpStore %yxyz %315
+ %317 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %318 = OpLoad %v3int %317
+ %319 = OpVectorShuffle %v4int %318 %318 1 0 2 0
+ OpStore %yxzx %319
+ %321 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %322 = OpLoad %v3int %321
+ %323 = OpVectorShuffle %v4int %322 %322 1 0 2 1
+ OpStore %yxzy %323
+ %325 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %326 = OpLoad %v3int %325
+ %327 = OpVectorShuffle %v4int %326 %326 1 0 2 2
+ OpStore %yxzz %327
+ %329 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %330 = OpLoad %v3int %329
+ %331 = OpVectorShuffle %v4int %330 %330 1 1 0 0
+ OpStore %yyxx %331
+ %333 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %334 = OpLoad %v3int %333
+ %335 = OpVectorShuffle %v4int %334 %334 1 1 0 1
+ OpStore %yyxy %335
+ %337 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %338 = OpLoad %v3int %337
+ %339 = OpVectorShuffle %v4int %338 %338 1 1 0 2
+ OpStore %yyxz %339
+ %341 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %342 = OpLoad %v3int %341
+ %343 = OpVectorShuffle %v4int %342 %342 1 1 1 0
+ OpStore %yyyx %343
+ %345 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %346 = OpLoad %v3int %345
+ %347 = OpVectorShuffle %v4int %346 %346 1 1 1 1
+ OpStore %yyyy %347
+ %349 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %350 = OpLoad %v3int %349
+ %351 = OpVectorShuffle %v4int %350 %350 1 1 1 2
+ OpStore %yyyz %351
+ %353 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %354 = OpLoad %v3int %353
+ %355 = OpVectorShuffle %v4int %354 %354 1 1 2 0
+ OpStore %yyzx %355
+ %357 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %358 = OpLoad %v3int %357
+ %359 = OpVectorShuffle %v4int %358 %358 1 1 2 1
+ OpStore %yyzy %359
+ %361 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %362 = OpLoad %v3int %361
+ %363 = OpVectorShuffle %v4int %362 %362 1 1 2 2
+ OpStore %yyzz %363
+ %365 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %366 = OpLoad %v3int %365
+ %367 = OpVectorShuffle %v4int %366 %366 1 2 0 0
+ OpStore %yzxx %367
+ %369 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %370 = OpLoad %v3int %369
+ %371 = OpVectorShuffle %v4int %370 %370 1 2 0 1
+ OpStore %yzxy %371
+ %373 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %374 = OpLoad %v3int %373
+ %375 = OpVectorShuffle %v4int %374 %374 1 2 0 2
+ OpStore %yzxz %375
+ %377 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %378 = OpLoad %v3int %377
+ %379 = OpVectorShuffle %v4int %378 %378 1 2 1 0
+ OpStore %yzyx %379
+ %381 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %382 = OpLoad %v3int %381
+ %383 = OpVectorShuffle %v4int %382 %382 1 2 1 1
+ OpStore %yzyy %383
+ %385 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %386 = OpLoad %v3int %385
+ %387 = OpVectorShuffle %v4int %386 %386 1 2 1 2
+ OpStore %yzyz %387
+ %389 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %390 = OpLoad %v3int %389
+ %391 = OpVectorShuffle %v4int %390 %390 1 2 2 0
+ OpStore %yzzx %391
+ %393 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %394 = OpLoad %v3int %393
+ %395 = OpVectorShuffle %v4int %394 %394 1 2 2 1
+ OpStore %yzzy %395
+ %397 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %398 = OpLoad %v3int %397
+ %399 = OpVectorShuffle %v4int %398 %398 1 2 2 2
+ OpStore %yzzz %399
+ %401 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %402 = OpLoad %v3int %401
+ %403 = OpVectorShuffle %v4int %402 %402 2 0 0 0
+ OpStore %zxxx %403
+ %405 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %406 = OpLoad %v3int %405
+ %407 = OpVectorShuffle %v4int %406 %406 2 0 0 1
+ OpStore %zxxy %407
+ %409 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %410 = OpLoad %v3int %409
+ %411 = OpVectorShuffle %v4int %410 %410 2 0 0 2
+ OpStore %zxxz %411
+ %413 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %414 = OpLoad %v3int %413
+ %415 = OpVectorShuffle %v4int %414 %414 2 0 1 0
+ OpStore %zxyx %415
+ %417 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %418 = OpLoad %v3int %417
+ %419 = OpVectorShuffle %v4int %418 %418 2 0 1 1
+ OpStore %zxyy %419
+ %421 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %422 = OpLoad %v3int %421
+ %423 = OpVectorShuffle %v4int %422 %422 2 0 1 2
+ OpStore %zxyz %423
+ %425 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %426 = OpLoad %v3int %425
+ %427 = OpVectorShuffle %v4int %426 %426 2 0 2 0
+ OpStore %zxzx %427
+ %429 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %430 = OpLoad %v3int %429
+ %431 = OpVectorShuffle %v4int %430 %430 2 0 2 1
+ OpStore %zxzy %431
+ %433 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %434 = OpLoad %v3int %433
+ %435 = OpVectorShuffle %v4int %434 %434 2 0 2 2
+ OpStore %zxzz %435
+ %437 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %438 = OpLoad %v3int %437
+ %439 = OpVectorShuffle %v4int %438 %438 2 1 0 0
+ OpStore %zyxx %439
+ %441 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %442 = OpLoad %v3int %441
+ %443 = OpVectorShuffle %v4int %442 %442 2 1 0 1
+ OpStore %zyxy %443
+ %445 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %446 = OpLoad %v3int %445
+ %447 = OpVectorShuffle %v4int %446 %446 2 1 0 2
+ OpStore %zyxz %447
+ %449 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %450 = OpLoad %v3int %449
+ %451 = OpVectorShuffle %v4int %450 %450 2 1 1 0
+ OpStore %zyyx %451
+ %453 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %454 = OpLoad %v3int %453
+ %455 = OpVectorShuffle %v4int %454 %454 2 1 1 1
+ OpStore %zyyy %455
+ %457 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %458 = OpLoad %v3int %457
+ %459 = OpVectorShuffle %v4int %458 %458 2 1 1 2
+ OpStore %zyyz %459
+ %461 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %462 = OpLoad %v3int %461
+ %463 = OpVectorShuffle %v4int %462 %462 2 1 2 0
+ OpStore %zyzx %463
+ %465 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %466 = OpLoad %v3int %465
+ %467 = OpVectorShuffle %v4int %466 %466 2 1 2 1
+ OpStore %zyzy %467
+ %469 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %470 = OpLoad %v3int %469
+ %471 = OpVectorShuffle %v4int %470 %470 2 1 2 2
+ OpStore %zyzz %471
+ %473 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %474 = OpLoad %v3int %473
+ %475 = OpVectorShuffle %v4int %474 %474 2 2 0 0
+ OpStore %zzxx %475
+ %477 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %478 = OpLoad %v3int %477
+ %479 = OpVectorShuffle %v4int %478 %478 2 2 0 1
+ OpStore %zzxy %479
+ %481 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %482 = OpLoad %v3int %481
+ %483 = OpVectorShuffle %v4int %482 %482 2 2 0 2
+ OpStore %zzxz %483
+ %485 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %486 = OpLoad %v3int %485
+ %487 = OpVectorShuffle %v4int %486 %486 2 2 1 0
+ OpStore %zzyx %487
+ %489 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %490 = OpLoad %v3int %489
+ %491 = OpVectorShuffle %v4int %490 %490 2 2 1 1
+ OpStore %zzyy %491
+ %493 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %494 = OpLoad %v3int %493
+ %495 = OpVectorShuffle %v4int %494 %494 2 2 1 2
+ OpStore %zzyz %495
+ %497 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %498 = OpLoad %v3int %497
+ %499 = OpVectorShuffle %v4int %498 %498 2 2 2 0
+ OpStore %zzzx %499
+ %501 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %502 = OpLoad %v3int %501
+ %503 = OpVectorShuffle %v4int %502 %502 2 2 2 1
+ OpStore %zzzy %503
+ %505 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ %506 = OpLoad %v3int %505
+ %507 = OpVectorShuffle %v4int %506 %506 2 2 2 2
+ OpStore %zzzz %507
+ OpReturn
+ OpFunctionEnd
diff --git a/test/expressions/swizzle/read/vec3/i32.wgsl.expected.wgsl b/test/expressions/swizzle/read/vec3/i32.wgsl.expected.wgsl
new file mode 100644
index 0000000..9b440ce
--- /dev/null
+++ b/test/expressions/swizzle/read/vec3/i32.wgsl.expected.wgsl
@@ -0,0 +1,129 @@
+struct S {
+ v : vec3<i32>;
+};
+
+var<private> P : S;
+
+fn f() {
+ var v = P.v;
+ var x = P.v.x;
+ var y = P.v.y;
+ var z = P.v.z;
+ var xx = P.v.xx;
+ var xy = P.v.xy;
+ var xz = P.v.xz;
+ var yx = P.v.yx;
+ var yy = P.v.yy;
+ var yz = P.v.yz;
+ var zx = P.v.zx;
+ var zy = P.v.zy;
+ var zz = P.v.zz;
+ var xxx = P.v.xxx;
+ var xxy = P.v.xxy;
+ var xxz = P.v.xxz;
+ var xyx = P.v.xyx;
+ var xyy = P.v.xyy;
+ var xyz = P.v.xyz;
+ var xzx = P.v.xzx;
+ var xzy = P.v.xzy;
+ var xzz = P.v.xzz;
+ var yxx = P.v.yxx;
+ var yxy = P.v.yxy;
+ var yxz = P.v.yxz;
+ var yyx = P.v.yyx;
+ var yyy = P.v.yyy;
+ var yyz = P.v.yyz;
+ var yzx = P.v.yzx;
+ var yzy = P.v.yzy;
+ var yzz = P.v.yzz;
+ var zxx = P.v.zxx;
+ var zxy = P.v.zxy;
+ var zxz = P.v.zxz;
+ var zyx = P.v.zyx;
+ var zyy = P.v.zyy;
+ var zyz = P.v.zyz;
+ var zzx = P.v.zzx;
+ var zzy = P.v.zzy;
+ var zzz = P.v.zzz;
+ var xxxx = P.v.xxxx;
+ var xxxy = P.v.xxxy;
+ var xxxz = P.v.xxxz;
+ var xxyx = P.v.xxyx;
+ var xxyy = P.v.xxyy;
+ var xxyz = P.v.xxyz;
+ var xxzx = P.v.xxzx;
+ var xxzy = P.v.xxzy;
+ var xxzz = P.v.xxzz;
+ var xyxx = P.v.xyxx;
+ var xyxy = P.v.xyxy;
+ var xyxz = P.v.xyxz;
+ var xyyx = P.v.xyyx;
+ var xyyy = P.v.xyyy;
+ var xyyz = P.v.xyyz;
+ var xyzx = P.v.xyzx;
+ var xyzy = P.v.xyzy;
+ var xyzz = P.v.xyzz;
+ var xzxx = P.v.xzxx;
+ var xzxy = P.v.xzxy;
+ var xzxz = P.v.xzxz;
+ var xzyx = P.v.xzyx;
+ var xzyy = P.v.xzyy;
+ var xzyz = P.v.xzyz;
+ var xzzx = P.v.xzzx;
+ var xzzy = P.v.xzzy;
+ var xzzz = P.v.xzzz;
+ var yxxx = P.v.yxxx;
+ var yxxy = P.v.yxxy;
+ var yxxz = P.v.yxxz;
+ var yxyx = P.v.yxyx;
+ var yxyy = P.v.yxyy;
+ var yxyz = P.v.yxyz;
+ var yxzx = P.v.yxzx;
+ var yxzy = P.v.yxzy;
+ var yxzz = P.v.yxzz;
+ var yyxx = P.v.yyxx;
+ var yyxy = P.v.yyxy;
+ var yyxz = P.v.yyxz;
+ var yyyx = P.v.yyyx;
+ var yyyy = P.v.yyyy;
+ var yyyz = P.v.yyyz;
+ var yyzx = P.v.yyzx;
+ var yyzy = P.v.yyzy;
+ var yyzz = P.v.yyzz;
+ var yzxx = P.v.yzxx;
+ var yzxy = P.v.yzxy;
+ var yzxz = P.v.yzxz;
+ var yzyx = P.v.yzyx;
+ var yzyy = P.v.yzyy;
+ var yzyz = P.v.yzyz;
+ var yzzx = P.v.yzzx;
+ var yzzy = P.v.yzzy;
+ var yzzz = P.v.yzzz;
+ var zxxx = P.v.zxxx;
+ var zxxy = P.v.zxxy;
+ var zxxz = P.v.zxxz;
+ var zxyx = P.v.zxyx;
+ var zxyy = P.v.zxyy;
+ var zxyz = P.v.zxyz;
+ var zxzx = P.v.zxzx;
+ var zxzy = P.v.zxzy;
+ var zxzz = P.v.zxzz;
+ var zyxx = P.v.zyxx;
+ var zyxy = P.v.zyxy;
+ var zyxz = P.v.zyxz;
+ var zyyx = P.v.zyyx;
+ var zyyy = P.v.zyyy;
+ var zyyz = P.v.zyyz;
+ var zyzx = P.v.zyzx;
+ var zyzy = P.v.zyzy;
+ var zyzz = P.v.zyzz;
+ var zzxx = P.v.zzxx;
+ var zzxy = P.v.zzxy;
+ var zzxz = P.v.zzxz;
+ var zzyx = P.v.zzyx;
+ var zzyy = P.v.zzyy;
+ var zzyz = P.v.zzyz;
+ var zzzx = P.v.zzzx;
+ var zzzy = P.v.zzzy;
+ var zzzz = P.v.zzzz;
+}
diff --git a/test/expressions/swizzle/read/vec3/u32.wgsl b/test/expressions/swizzle/read/vec3/u32.wgsl
new file mode 100644
index 0000000..73dbbaf
--- /dev/null
+++ b/test/expressions/swizzle/read/vec3/u32.wgsl
@@ -0,0 +1,143 @@
+struct S {
+ v: vec3<u32>;
+};
+
+var<private> P : S;
+
+fn f() {
+ var v = P.v;
+
+ var x = P.v.x;
+ var y = P.v.y;
+ var z = P.v.z;
+
+ var xx = P.v.xx;
+ var xy = P.v.xy;
+ var xz = P.v.xz;
+ var yx = P.v.yx;
+ var yy = P.v.yy;
+ var yz = P.v.yz;
+ var zx = P.v.zx;
+ var zy = P.v.zy;
+ var zz = P.v.zz;
+
+ var xxx = P.v.xxx;
+ var xxy = P.v.xxy;
+ var xxz = P.v.xxz;
+ var xyx = P.v.xyx;
+ var xyy = P.v.xyy;
+ var xyz = P.v.xyz;
+ var xzx = P.v.xzx;
+ var xzy = P.v.xzy;
+ var xzz = P.v.xzz;
+
+ var yxx = P.v.yxx;
+ var yxy = P.v.yxy;
+ var yxz = P.v.yxz;
+ var yyx = P.v.yyx;
+ var yyy = P.v.yyy;
+ var yyz = P.v.yyz;
+ var yzx = P.v.yzx;
+ var yzy = P.v.yzy;
+ var yzz = P.v.yzz;
+
+ var zxx = P.v.zxx;
+ var zxy = P.v.zxy;
+ var zxz = P.v.zxz;
+ var zyx = P.v.zyx;
+ var zyy = P.v.zyy;
+ var zyz = P.v.zyz;
+ var zzx = P.v.zzx;
+ var zzy = P.v.zzy;
+ var zzz = P.v.zzz;
+
+ var xxxx = P.v.xxxx;
+ var xxxy = P.v.xxxy;
+ var xxxz = P.v.xxxz;
+ var xxyx = P.v.xxyx;
+ var xxyy = P.v.xxyy;
+ var xxyz = P.v.xxyz;
+ var xxzx = P.v.xxzx;
+ var xxzy = P.v.xxzy;
+ var xxzz = P.v.xxzz;
+
+ var xyxx = P.v.xyxx;
+ var xyxy = P.v.xyxy;
+ var xyxz = P.v.xyxz;
+ var xyyx = P.v.xyyx;
+ var xyyy = P.v.xyyy;
+ var xyyz = P.v.xyyz;
+ var xyzx = P.v.xyzx;
+ var xyzy = P.v.xyzy;
+ var xyzz = P.v.xyzz;
+
+ var xzxx = P.v.xzxx;
+ var xzxy = P.v.xzxy;
+ var xzxz = P.v.xzxz;
+ var xzyx = P.v.xzyx;
+ var xzyy = P.v.xzyy;
+ var xzyz = P.v.xzyz;
+ var xzzx = P.v.xzzx;
+ var xzzy = P.v.xzzy;
+ var xzzz = P.v.xzzz;
+
+ var yxxx = P.v.yxxx;
+ var yxxy = P.v.yxxy;
+ var yxxz = P.v.yxxz;
+ var yxyx = P.v.yxyx;
+ var yxyy = P.v.yxyy;
+ var yxyz = P.v.yxyz;
+ var yxzx = P.v.yxzx;
+ var yxzy = P.v.yxzy;
+ var yxzz = P.v.yxzz;
+
+ var yyxx = P.v.yyxx;
+ var yyxy = P.v.yyxy;
+ var yyxz = P.v.yyxz;
+ var yyyx = P.v.yyyx;
+ var yyyy = P.v.yyyy;
+ var yyyz = P.v.yyyz;
+ var yyzx = P.v.yyzx;
+ var yyzy = P.v.yyzy;
+ var yyzz = P.v.yyzz;
+
+ var yzxx = P.v.yzxx;
+ var yzxy = P.v.yzxy;
+ var yzxz = P.v.yzxz;
+ var yzyx = P.v.yzyx;
+ var yzyy = P.v.yzyy;
+ var yzyz = P.v.yzyz;
+ var yzzx = P.v.yzzx;
+ var yzzy = P.v.yzzy;
+ var yzzz = P.v.yzzz;
+
+ var zxxx = P.v.zxxx;
+ var zxxy = P.v.zxxy;
+ var zxxz = P.v.zxxz;
+ var zxyx = P.v.zxyx;
+ var zxyy = P.v.zxyy;
+ var zxyz = P.v.zxyz;
+ var zxzx = P.v.zxzx;
+ var zxzy = P.v.zxzy;
+ var zxzz = P.v.zxzz;
+
+ var zyxx = P.v.zyxx;
+ var zyxy = P.v.zyxy;
+ var zyxz = P.v.zyxz;
+ var zyyx = P.v.zyyx;
+ var zyyy = P.v.zyyy;
+ var zyyz = P.v.zyyz;
+ var zyzx = P.v.zyzx;
+ var zyzy = P.v.zyzy;
+ var zyzz = P.v.zyzz;
+
+ var zzxx = P.v.zzxx;
+ var zzxy = P.v.zzxy;
+ var zzxz = P.v.zzxz;
+ var zzyx = P.v.zzyx;
+ var zzyy = P.v.zzyy;
+ var zzyz = P.v.zzyz;
+ var zzzx = P.v.zzzx;
+ var zzzy = P.v.zzzy;
+ var zzzz = P.v.zzzz;
+}
diff --git a/test/expressions/swizzle/read/vec3/u32.wgsl.expected.hlsl b/test/expressions/swizzle/read/vec3/u32.wgsl.expected.hlsl
new file mode 100644
index 0000000..79fb837
--- /dev/null
+++ b/test/expressions/swizzle/read/vec3/u32.wgsl.expected.hlsl
@@ -0,0 +1,134 @@
+[numthreads(1, 1, 1)]
+void unused_entry_point() {
+ return;
+}
+
+struct S {
+ uint3 v;
+};
+
+static S P = (S)0;
+
+void f() {
+ uint3 v = P.v;
+ uint x = P.v.x;
+ uint y = P.v.y;
+ uint z = P.v.z;
+ uint2 xx = P.v.xx;
+ uint2 xy = P.v.xy;
+ uint2 xz = P.v.xz;
+ uint2 yx = P.v.yx;
+ uint2 yy = P.v.yy;
+ uint2 yz = P.v.yz;
+ uint2 zx = P.v.zx;
+ uint2 zy = P.v.zy;
+ uint2 zz = P.v.zz;
+ uint3 xxx = P.v.xxx;
+ uint3 xxy = P.v.xxy;
+ uint3 xxz = P.v.xxz;
+ uint3 xyx = P.v.xyx;
+ uint3 xyy = P.v.xyy;
+ uint3 xyz = P.v.xyz;
+ uint3 xzx = P.v.xzx;
+ uint3 xzy = P.v.xzy;
+ uint3 xzz = P.v.xzz;
+ uint3 yxx = P.v.yxx;
+ uint3 yxy = P.v.yxy;
+ uint3 yxz = P.v.yxz;
+ uint3 yyx = P.v.yyx;
+ uint3 yyy = P.v.yyy;
+ uint3 yyz = P.v.yyz;
+ uint3 yzx = P.v.yzx;
+ uint3 yzy = P.v.yzy;
+ uint3 yzz = P.v.yzz;
+ uint3 zxx = P.v.zxx;
+ uint3 zxy = P.v.zxy;
+ uint3 zxz = P.v.zxz;
+ uint3 zyx = P.v.zyx;
+ uint3 zyy = P.v.zyy;
+ uint3 zyz = P.v.zyz;
+ uint3 zzx = P.v.zzx;
+ uint3 zzy = P.v.zzy;
+ uint3 zzz = P.v.zzz;
+ uint4 xxxx = P.v.xxxx;
+ uint4 xxxy = P.v.xxxy;
+ uint4 xxxz = P.v.xxxz;
+ uint4 xxyx = P.v.xxyx;
+ uint4 xxyy = P.v.xxyy;
+ uint4 xxyz = P.v.xxyz;
+ uint4 xxzx = P.v.xxzx;
+ uint4 xxzy = P.v.xxzy;
+ uint4 xxzz = P.v.xxzz;
+ uint4 xyxx = P.v.xyxx;
+ uint4 xyxy = P.v.xyxy;
+ uint4 xyxz = P.v.xyxz;
+ uint4 xyyx = P.v.xyyx;
+ uint4 xyyy = P.v.xyyy;
+ uint4 xyyz = P.v.xyyz;
+ uint4 xyzx = P.v.xyzx;
+ uint4 xyzy = P.v.xyzy;
+ uint4 xyzz = P.v.xyzz;
+ uint4 xzxx = P.v.xzxx;
+ uint4 xzxy = P.v.xzxy;
+ uint4 xzxz = P.v.xzxz;
+ uint4 xzyx = P.v.xzyx;
+ uint4 xzyy = P.v.xzyy;
+ uint4 xzyz = P.v.xzyz;
+ uint4 xzzx = P.v.xzzx;
+ uint4 xzzy = P.v.xzzy;
+ uint4 xzzz = P.v.xzzz;
+ uint4 yxxx = P.v.yxxx;
+ uint4 yxxy = P.v.yxxy;
+ uint4 yxxz = P.v.yxxz;
+ uint4 yxyx = P.v.yxyx;
+ uint4 yxyy = P.v.yxyy;
+ uint4 yxyz = P.v.yxyz;
+ uint4 yxzx = P.v.yxzx;
+ uint4 yxzy = P.v.yxzy;
+ uint4 yxzz = P.v.yxzz;
+ uint4 yyxx = P.v.yyxx;
+ uint4 yyxy = P.v.yyxy;
+ uint4 yyxz = P.v.yyxz;
+ uint4 yyyx = P.v.yyyx;
+ uint4 yyyy = P.v.yyyy;
+ uint4 yyyz = P.v.yyyz;
+ uint4 yyzx = P.v.yyzx;
+ uint4 yyzy = P.v.yyzy;
+ uint4 yyzz = P.v.yyzz;
+ uint4 yzxx = P.v.yzxx;
+ uint4 yzxy = P.v.yzxy;
+ uint4 yzxz = P.v.yzxz;
+ uint4 yzyx = P.v.yzyx;
+ uint4 yzyy = P.v.yzyy;
+ uint4 yzyz = P.v.yzyz;
+ uint4 yzzx = P.v.yzzx;
+ uint4 yzzy = P.v.yzzy;
+ uint4 yzzz = P.v.yzzz;
+ uint4 zxxx = P.v.zxxx;
+ uint4 zxxy = P.v.zxxy;
+ uint4 zxxz = P.v.zxxz;
+ uint4 zxyx = P.v.zxyx;
+ uint4 zxyy = P.v.zxyy;
+ uint4 zxyz = P.v.zxyz;
+ uint4 zxzx = P.v.zxzx;
+ uint4 zxzy = P.v.zxzy;
+ uint4 zxzz = P.v.zxzz;
+ uint4 zyxx = P.v.zyxx;
+ uint4 zyxy = P.v.zyxy;
+ uint4 zyxz = P.v.zyxz;
+ uint4 zyyx = P.v.zyyx;
+ uint4 zyyy = P.v.zyyy;
+ uint4 zyyz = P.v.zyyz;
+ uint4 zyzx = P.v.zyzx;
+ uint4 zyzy = P.v.zyzy;
+ uint4 zyzz = P.v.zyzz;
+ uint4 zzxx = P.v.zzxx;
+ uint4 zzxy = P.v.zzxy;
+ uint4 zzxz = P.v.zzxz;
+ uint4 zzyx = P.v.zzyx;
+ uint4 zzyy = P.v.zzyy;
+ uint4 zzyz = P.v.zzyz;
+ uint4 zzzx = P.v.zzzx;
+ uint4 zzzy = P.v.zzzy;
+ uint4 zzzz = P.v.zzzz;
+}
diff --git a/test/expressions/swizzle/read/vec3/u32.wgsl.expected.msl b/test/expressions/swizzle/read/vec3/u32.wgsl.expected.msl
new file mode 100644
index 0000000..61bc87d
--- /dev/null
+++ b/test/expressions/swizzle/read/vec3/u32.wgsl.expected.msl
@@ -0,0 +1,131 @@
+#include <metal_stdlib>
+
+using namespace metal;
+struct S {
+ uint3 v;
+};
+
+void f(thread S* const tint_symbol) {
+ uint3 v = (*(tint_symbol)).v;
+ uint x = (*(tint_symbol)).v[0];
+ uint y = (*(tint_symbol)).v[1];
+ uint z = (*(tint_symbol)).v[2];
+ uint2 xx = uint3((*(tint_symbol)).v).xx;
+ uint2 xy = uint3((*(tint_symbol)).v).xy;
+ uint2 xz = uint3((*(tint_symbol)).v).xz;
+ uint2 yx = uint3((*(tint_symbol)).v).yx;
+ uint2 yy = uint3((*(tint_symbol)).v).yy;
+ uint2 yz = uint3((*(tint_symbol)).v).yz;
+ uint2 zx = uint3((*(tint_symbol)).v).zx;
+ uint2 zy = uint3((*(tint_symbol)).v).zy;
+ uint2 zz = uint3((*(tint_symbol)).v).zz;
+ uint3 xxx = uint3((*(tint_symbol)).v).xxx;
+ uint3 xxy = uint3((*(tint_symbol)).v).xxy;
+ uint3 xxz = uint3((*(tint_symbol)).v).xxz;
+ uint3 xyx = uint3((*(tint_symbol)).v).xyx;
+ uint3 xyy = uint3((*(tint_symbol)).v).xyy;
+ uint3 xyz = uint3((*(tint_symbol)).v).xyz;
+ uint3 xzx = uint3((*(tint_symbol)).v).xzx;
+ uint3 xzy = uint3((*(tint_symbol)).v).xzy;
+ uint3 xzz = uint3((*(tint_symbol)).v).xzz;
+ uint3 yxx = uint3((*(tint_symbol)).v).yxx;
+ uint3 yxy = uint3((*(tint_symbol)).v).yxy;
+ uint3 yxz = uint3((*(tint_symbol)).v).yxz;
+ uint3 yyx = uint3((*(tint_symbol)).v).yyx;
+ uint3 yyy = uint3((*(tint_symbol)).v).yyy;
+ uint3 yyz = uint3((*(tint_symbol)).v).yyz;
+ uint3 yzx = uint3((*(tint_symbol)).v).yzx;
+ uint3 yzy = uint3((*(tint_symbol)).v).yzy;
+ uint3 yzz = uint3((*(tint_symbol)).v).yzz;
+ uint3 zxx = uint3((*(tint_symbol)).v).zxx;
+ uint3 zxy = uint3((*(tint_symbol)).v).zxy;
+ uint3 zxz = uint3((*(tint_symbol)).v).zxz;
+ uint3 zyx = uint3((*(tint_symbol)).v).zyx;
+ uint3 zyy = uint3((*(tint_symbol)).v).zyy;
+ uint3 zyz = uint3((*(tint_symbol)).v).zyz;
+ uint3 zzx = uint3((*(tint_symbol)).v).zzx;
+ uint3 zzy = uint3((*(tint_symbol)).v).zzy;
+ uint3 zzz = uint3((*(tint_symbol)).v).zzz;
+ uint4 xxxx = uint3((*(tint_symbol)).v).xxxx;
+ uint4 xxxy = uint3((*(tint_symbol)).v).xxxy;
+ uint4 xxxz = uint3((*(tint_symbol)).v).xxxz;
+ uint4 xxyx = uint3((*(tint_symbol)).v).xxyx;
+ uint4 xxyy = uint3((*(tint_symbol)).v).xxyy;
+ uint4 xxyz = uint3((*(tint_symbol)).v).xxyz;
+ uint4 xxzx = uint3((*(tint_symbol)).v).xxzx;
+ uint4 xxzy = uint3((*(tint_symbol)).v).xxzy;
+ uint4 xxzz = uint3((*(tint_symbol)).v).xxzz;
+ uint4 xyxx = uint3((*(tint_symbol)).v).xyxx;
+ uint4 xyxy = uint3((*(tint_symbol)).v).xyxy;
+ uint4 xyxz = uint3((*(tint_symbol)).v).xyxz;
+ uint4 xyyx = uint3((*(tint_symbol)).v).xyyx;
+ uint4 xyyy = uint3((*(tint_symbol)).v).xyyy;
+ uint4 xyyz = uint3((*(tint_symbol)).v).xyyz;
+ uint4 xyzx = uint3((*(tint_symbol)).v).xyzx;
+ uint4 xyzy = uint3((*(tint_symbol)).v).xyzy;
+ uint4 xyzz = uint3((*(tint_symbol)).v).xyzz;
+ uint4 xzxx = uint3((*(tint_symbol)).v).xzxx;
+ uint4 xzxy = uint3((*(tint_symbol)).v).xzxy;
+ uint4 xzxz = uint3((*(tint_symbol)).v).xzxz;
+ uint4 xzyx = uint3((*(tint_symbol)).v).xzyx;
+ uint4 xzyy = uint3((*(tint_symbol)).v).xzyy;
+ uint4 xzyz = uint3((*(tint_symbol)).v).xzyz;
+ uint4 xzzx = uint3((*(tint_symbol)).v).xzzx;
+ uint4 xzzy = uint3((*(tint_symbol)).v).xzzy;
+ uint4 xzzz = uint3((*(tint_symbol)).v).xzzz;
+ uint4 yxxx = uint3((*(tint_symbol)).v).yxxx;
+ uint4 yxxy = uint3((*(tint_symbol)).v).yxxy;
+ uint4 yxxz = uint3((*(tint_symbol)).v).yxxz;
+ uint4 yxyx = uint3((*(tint_symbol)).v).yxyx;
+ uint4 yxyy = uint3((*(tint_symbol)).v).yxyy;
+ uint4 yxyz = uint3((*(tint_symbol)).v).yxyz;
+ uint4 yxzx = uint3((*(tint_symbol)).v).yxzx;
+ uint4 yxzy = uint3((*(tint_symbol)).v).yxzy;
+ uint4 yxzz = uint3((*(tint_symbol)).v).yxzz;
+ uint4 yyxx = uint3((*(tint_symbol)).v).yyxx;
+ uint4 yyxy = uint3((*(tint_symbol)).v).yyxy;
+ uint4 yyxz = uint3((*(tint_symbol)).v).yyxz;
+ uint4 yyyx = uint3((*(tint_symbol)).v).yyyx;
+ uint4 yyyy = uint3((*(tint_symbol)).v).yyyy;
+ uint4 yyyz = uint3((*(tint_symbol)).v).yyyz;
+ uint4 yyzx = uint3((*(tint_symbol)).v).yyzx;
+ uint4 yyzy = uint3((*(tint_symbol)).v).yyzy;
+ uint4 yyzz = uint3((*(tint_symbol)).v).yyzz;
+ uint4 yzxx = uint3((*(tint_symbol)).v).yzxx;
+ uint4 yzxy = uint3((*(tint_symbol)).v).yzxy;
+ uint4 yzxz = uint3((*(tint_symbol)).v).yzxz;
+ uint4 yzyx = uint3((*(tint_symbol)).v).yzyx;
+ uint4 yzyy = uint3((*(tint_symbol)).v).yzyy;
+ uint4 yzyz = uint3((*(tint_symbol)).v).yzyz;
+ uint4 yzzx = uint3((*(tint_symbol)).v).yzzx;
+ uint4 yzzy = uint3((*(tint_symbol)).v).yzzy;
+ uint4 yzzz = uint3((*(tint_symbol)).v).yzzz;
+ uint4 zxxx = uint3((*(tint_symbol)).v).zxxx;
+ uint4 zxxy = uint3((*(tint_symbol)).v).zxxy;
+ uint4 zxxz = uint3((*(tint_symbol)).v).zxxz;
+ uint4 zxyx = uint3((*(tint_symbol)).v).zxyx;
+ uint4 zxyy = uint3((*(tint_symbol)).v).zxyy;
+ uint4 zxyz = uint3((*(tint_symbol)).v).zxyz;
+ uint4 zxzx = uint3((*(tint_symbol)).v).zxzx;
+ uint4 zxzy = uint3((*(tint_symbol)).v).zxzy;
+ uint4 zxzz = uint3((*(tint_symbol)).v).zxzz;
+ uint4 zyxx = uint3((*(tint_symbol)).v).zyxx;
+ uint4 zyxy = uint3((*(tint_symbol)).v).zyxy;
+ uint4 zyxz = uint3((*(tint_symbol)).v).zyxz;
+ uint4 zyyx = uint3((*(tint_symbol)).v).zyyx;
+ uint4 zyyy = uint3((*(tint_symbol)).v).zyyy;
+ uint4 zyyz = uint3((*(tint_symbol)).v).zyyz;
+ uint4 zyzx = uint3((*(tint_symbol)).v).zyzx;
+ uint4 zyzy = uint3((*(tint_symbol)).v).zyzy;
+ uint4 zyzz = uint3((*(tint_symbol)).v).zyzz;
+ uint4 zzxx = uint3((*(tint_symbol)).v).zzxx;
+ uint4 zzxy = uint3((*(tint_symbol)).v).zzxy;
+ uint4 zzxz = uint3((*(tint_symbol)).v).zzxz;
+ uint4 zzyx = uint3((*(tint_symbol)).v).zzyx;
+ uint4 zzyy = uint3((*(tint_symbol)).v).zzyy;
+ uint4 zzyz = uint3((*(tint_symbol)).v).zzyz;
+ uint4 zzzx = uint3((*(tint_symbol)).v).zzzx;
+ uint4 zzzy = uint3((*(tint_symbol)).v).zzzy;
+ uint4 zzzz = uint3((*(tint_symbol)).v).zzzz;
+}
+
diff --git a/test/expressions/swizzle/read/vec3/u32.wgsl.expected.spvasm b/test/expressions/swizzle/read/vec3/u32.wgsl.expected.spvasm
new file mode 100644
index 0000000..5ded792
--- /dev/null
+++ b/test/expressions/swizzle/read/vec3/u32.wgsl.expected.spvasm
@@ -0,0 +1,768 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 508
+; Schema: 0
+ OpCapability Shader
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
+ OpExecutionMode %unused_entry_point LocalSize 1 1 1
+ OpName %S "S"
+ OpMemberName %S 0 "v"
+ OpName %P "P"
+ OpName %unused_entry_point "unused_entry_point"
+ OpName %f "f"
+ OpName %v "v"
+ OpName %x "x"
+ OpName %y "y"
+ OpName %z "z"
+ OpName %xx "xx"
+ OpName %xy "xy"
+ OpName %xz "xz"
+ OpName %yx "yx"
+ OpName %yy "yy"
+ OpName %yz "yz"
+ OpName %zx "zx"
+ OpName %zy "zy"
+ OpName %zz "zz"
+ OpName %xxx "xxx"
+ OpName %xxy "xxy"
+ OpName %xxz "xxz"
+ OpName %xyx "xyx"
+ OpName %xyy "xyy"
+ OpName %xyz "xyz"
+ OpName %xzx "xzx"
+ OpName %xzy "xzy"
+ OpName %xzz "xzz"
+ OpName %yxx "yxx"
+ OpName %yxy "yxy"
+ OpName %yxz "yxz"
+ OpName %yyx "yyx"
+ OpName %yyy "yyy"
+ OpName %yyz "yyz"
+ OpName %yzx "yzx"
+ OpName %yzy "yzy"
+ OpName %yzz "yzz"
+ OpName %zxx "zxx"
+ OpName %zxy "zxy"
+ OpName %zxz "zxz"
+ OpName %zyx "zyx"
+ OpName %zyy "zyy"
+ OpName %zyz "zyz"
+ OpName %zzx "zzx"
+ OpName %zzy "zzy"
+ OpName %zzz "zzz"
+ OpName %xxxx "xxxx"
+ OpName %xxxy "xxxy"
+ OpName %xxxz "xxxz"
+ OpName %xxyx "xxyx"
+ OpName %xxyy "xxyy"
+ OpName %xxyz "xxyz"
+ OpName %xxzx "xxzx"
+ OpName %xxzy "xxzy"
+ OpName %xxzz "xxzz"
+ OpName %xyxx "xyxx"
+ OpName %xyxy "xyxy"
+ OpName %xyxz "xyxz"
+ OpName %xyyx "xyyx"
+ OpName %xyyy "xyyy"
+ OpName %xyyz "xyyz"
+ OpName %xyzx "xyzx"
+ OpName %xyzy "xyzy"
+ OpName %xyzz "xyzz"
+ OpName %xzxx "xzxx"
+ OpName %xzxy "xzxy"
+ OpName %xzxz "xzxz"
+ OpName %xzyx "xzyx"
+ OpName %xzyy "xzyy"
+ OpName %xzyz "xzyz"
+ OpName %xzzx "xzzx"
+ OpName %xzzy "xzzy"
+ OpName %xzzz "xzzz"
+ OpName %yxxx "yxxx"
+ OpName %yxxy "yxxy"
+ OpName %yxxz "yxxz"
+ OpName %yxyx "yxyx"
+ OpName %yxyy "yxyy"
+ OpName %yxyz "yxyz"
+ OpName %yxzx "yxzx"
+ OpName %yxzy "yxzy"
+ OpName %yxzz "yxzz"
+ OpName %yyxx "yyxx"
+ OpName %yyxy "yyxy"
+ OpName %yyxz "yyxz"
+ OpName %yyyx "yyyx"
+ OpName %yyyy "yyyy"
+ OpName %yyyz "yyyz"
+ OpName %yyzx "yyzx"
+ OpName %yyzy "yyzy"
+ OpName %yyzz "yyzz"
+ OpName %yzxx "yzxx"
+ OpName %yzxy "yzxy"
+ OpName %yzxz "yzxz"
+ OpName %yzyx "yzyx"
+ OpName %yzyy "yzyy"
+ OpName %yzyz "yzyz"
+ OpName %yzzx "yzzx"
+ OpName %yzzy "yzzy"
+ OpName %yzzz "yzzz"
+ OpName %zxxx "zxxx"
+ OpName %zxxy "zxxy"
+ OpName %zxxz "zxxz"
+ OpName %zxyx "zxyx"
+ OpName %zxyy "zxyy"
+ OpName %zxyz "zxyz"
+ OpName %zxzx "zxzx"
+ OpName %zxzy "zxzy"
+ OpName %zxzz "zxzz"
+ OpName %zyxx "zyxx"
+ OpName %zyxy "zyxy"
+ OpName %zyxz "zyxz"
+ OpName %zyyx "zyyx"
+ OpName %zyyy "zyyy"
+ OpName %zyyz "zyyz"
+ OpName %zyzx "zyzx"
+ OpName %zyzy "zyzy"
+ OpName %zyzz "zyzz"
+ OpName %zzxx "zzxx"
+ OpName %zzxy "zzxy"
+ OpName %zzxz "zzxz"
+ OpName %zzyx "zzyx"
+ OpName %zzyy "zzyy"
+ OpName %zzyz "zzyz"
+ OpName %zzzx "zzzx"
+ OpName %zzzy "zzzy"
+ OpName %zzzz "zzzz"
+ OpMemberDecorate %S 0 Offset 0
+ %uint = OpTypeInt 32 0
+ %v3uint = OpTypeVector %uint 3
+ %S = OpTypeStruct %v3uint
+%_ptr_Private_S = OpTypePointer Private %S
+ %6 = OpConstantNull %S
+ %P = OpVariable %_ptr_Private_S Private %6
+ %void = OpTypeVoid
+ %7 = OpTypeFunction %void
+ %uint_0 = OpConstant %uint 0
+%_ptr_Private_v3uint = OpTypePointer Private %v3uint
+%_ptr_Function_v3uint = OpTypePointer Function %v3uint
+ %19 = OpConstantNull %v3uint
+%_ptr_Private_uint = OpTypePointer Private %uint
+%_ptr_Function_uint = OpTypePointer Function %uint
+ %25 = OpConstantNull %uint
+ %uint_1 = OpConstant %uint 1
+ %uint_2 = OpConstant %uint 2
+ %v2uint = OpTypeVector %uint 2
+%_ptr_Function_v2uint = OpTypePointer Function %v2uint
+ %40 = OpConstantNull %v2uint
+ %v4uint = OpTypeVector %uint 4
+%_ptr_Function_v4uint = OpTypePointer Function %v4uint
+ %187 = OpConstantNull %v4uint
+%unused_entry_point = OpFunction %void None %7
+ %10 = OpLabel
+ OpReturn
+ OpFunctionEnd
+ %f = OpFunction %void None %7
+ %12 = OpLabel
+ %v = OpVariable %_ptr_Function_v3uint Function %19
+ %x = OpVariable %_ptr_Function_uint Function %25
+ %y = OpVariable %_ptr_Function_uint Function %25
+ %z = OpVariable %_ptr_Function_uint Function %25
+ %xx = OpVariable %_ptr_Function_v2uint Function %40
+ %xy = OpVariable %_ptr_Function_v2uint Function %40
+ %xz = OpVariable %_ptr_Function_v2uint Function %40
+ %yx = OpVariable %_ptr_Function_v2uint Function %40
+ %yy = OpVariable %_ptr_Function_v2uint Function %40
+ %yz = OpVariable %_ptr_Function_v2uint Function %40
+ %zx = OpVariable %_ptr_Function_v2uint Function %40
+ %zy = OpVariable %_ptr_Function_v2uint Function %40
+ %zz = OpVariable %_ptr_Function_v2uint Function %40
+ %xxx = OpVariable %_ptr_Function_v3uint Function %19
+ %xxy = OpVariable %_ptr_Function_v3uint Function %19
+ %xxz = OpVariable %_ptr_Function_v3uint Function %19
+ %xyx = OpVariable %_ptr_Function_v3uint Function %19
+ %xyy = OpVariable %_ptr_Function_v3uint Function %19
+ %xyz = OpVariable %_ptr_Function_v3uint Function %19
+ %xzx = OpVariable %_ptr_Function_v3uint Function %19
+ %xzy = OpVariable %_ptr_Function_v3uint Function %19
+ %xzz = OpVariable %_ptr_Function_v3uint Function %19
+ %yxx = OpVariable %_ptr_Function_v3uint Function %19
+ %yxy = OpVariable %_ptr_Function_v3uint Function %19
+ %yxz = OpVariable %_ptr_Function_v3uint Function %19
+ %yyx = OpVariable %_ptr_Function_v3uint Function %19
+ %yyy = OpVariable %_ptr_Function_v3uint Function %19
+ %yyz = OpVariable %_ptr_Function_v3uint Function %19
+ %yzx = OpVariable %_ptr_Function_v3uint Function %19
+ %yzy = OpVariable %_ptr_Function_v3uint Function %19
+ %yzz = OpVariable %_ptr_Function_v3uint Function %19
+ %zxx = OpVariable %_ptr_Function_v3uint Function %19
+ %zxy = OpVariable %_ptr_Function_v3uint Function %19
+ %zxz = OpVariable %_ptr_Function_v3uint Function %19
+ %zyx = OpVariable %_ptr_Function_v3uint Function %19
+ %zyy = OpVariable %_ptr_Function_v3uint Function %19
+ %zyz = OpVariable %_ptr_Function_v3uint Function %19
+ %zzx = OpVariable %_ptr_Function_v3uint Function %19
+ %zzy = OpVariable %_ptr_Function_v3uint Function %19
+ %zzz = OpVariable %_ptr_Function_v3uint Function %19
+ %xxxx = OpVariable %_ptr_Function_v4uint Function %187
+ %xxxy = OpVariable %_ptr_Function_v4uint Function %187
+ %xxxz = OpVariable %_ptr_Function_v4uint Function %187
+ %xxyx = OpVariable %_ptr_Function_v4uint Function %187
+ %xxyy = OpVariable %_ptr_Function_v4uint Function %187
+ %xxyz = OpVariable %_ptr_Function_v4uint Function %187
+ %xxzx = OpVariable %_ptr_Function_v4uint Function %187
+ %xxzy = OpVariable %_ptr_Function_v4uint Function %187
+ %xxzz = OpVariable %_ptr_Function_v4uint Function %187
+ %xyxx = OpVariable %_ptr_Function_v4uint Function %187
+ %xyxy = OpVariable %_ptr_Function_v4uint Function %187
+ %xyxz = OpVariable %_ptr_Function_v4uint Function %187
+ %xyyx = OpVariable %_ptr_Function_v4uint Function %187
+ %xyyy = OpVariable %_ptr_Function_v4uint Function %187
+ %xyyz = OpVariable %_ptr_Function_v4uint Function %187
+ %xyzx = OpVariable %_ptr_Function_v4uint Function %187
+ %xyzy = OpVariable %_ptr_Function_v4uint Function %187
+ %xyzz = OpVariable %_ptr_Function_v4uint Function %187
+ %xzxx = OpVariable %_ptr_Function_v4uint Function %187
+ %xzxy = OpVariable %_ptr_Function_v4uint Function %187
+ %xzxz = OpVariable %_ptr_Function_v4uint Function %187
+ %xzyx = OpVariable %_ptr_Function_v4uint Function %187
+ %xzyy = OpVariable %_ptr_Function_v4uint Function %187
+ %xzyz = OpVariable %_ptr_Function_v4uint Function %187
+ %xzzx = OpVariable %_ptr_Function_v4uint Function %187
+ %xzzy = OpVariable %_ptr_Function_v4uint Function %187
+ %xzzz = OpVariable %_ptr_Function_v4uint Function %187
+ %yxxx = OpVariable %_ptr_Function_v4uint Function %187
+ %yxxy = OpVariable %_ptr_Function_v4uint Function %187
+ %yxxz = OpVariable %_ptr_Function_v4uint Function %187
+ %yxyx = OpVariable %_ptr_Function_v4uint Function %187
+ %yxyy = OpVariable %_ptr_Function_v4uint Function %187
+ %yxyz = OpVariable %_ptr_Function_v4uint Function %187
+ %yxzx = OpVariable %_ptr_Function_v4uint Function %187
+ %yxzy = OpVariable %_ptr_Function_v4uint Function %187
+ %yxzz = OpVariable %_ptr_Function_v4uint Function %187
+ %yyxx = OpVariable %_ptr_Function_v4uint Function %187
+ %yyxy = OpVariable %_ptr_Function_v4uint Function %187
+ %yyxz = OpVariable %_ptr_Function_v4uint Function %187
+ %yyyx = OpVariable %_ptr_Function_v4uint Function %187
+ %yyyy = OpVariable %_ptr_Function_v4uint Function %187
+ %yyyz = OpVariable %_ptr_Function_v4uint Function %187
+ %yyzx = OpVariable %_ptr_Function_v4uint Function %187
+ %yyzy = OpVariable %_ptr_Function_v4uint Function %187
+ %yyzz = OpVariable %_ptr_Function_v4uint Function %187
+ %yzxx = OpVariable %_ptr_Function_v4uint Function %187
+ %yzxy = OpVariable %_ptr_Function_v4uint Function %187
+ %yzxz = OpVariable %_ptr_Function_v4uint Function %187
+ %yzyx = OpVariable %_ptr_Function_v4uint Function %187
+ %yzyy = OpVariable %_ptr_Function_v4uint Function %187
+ %yzyz = OpVariable %_ptr_Function_v4uint Function %187
+ %yzzx = OpVariable %_ptr_Function_v4uint Function %187
+ %yzzy = OpVariable %_ptr_Function_v4uint Function %187
+ %yzzz = OpVariable %_ptr_Function_v4uint Function %187
+ %zxxx = OpVariable %_ptr_Function_v4uint Function %187
+ %zxxy = OpVariable %_ptr_Function_v4uint Function %187
+ %zxxz = OpVariable %_ptr_Function_v4uint Function %187
+ %zxyx = OpVariable %_ptr_Function_v4uint Function %187
+ %zxyy = OpVariable %_ptr_Function_v4uint Function %187
+ %zxyz = OpVariable %_ptr_Function_v4uint Function %187
+ %zxzx = OpVariable %_ptr_Function_v4uint Function %187
+ %zxzy = OpVariable %_ptr_Function_v4uint Function %187
+ %zxzz = OpVariable %_ptr_Function_v4uint Function %187
+ %zyxx = OpVariable %_ptr_Function_v4uint Function %187
+ %zyxy = OpVariable %_ptr_Function_v4uint Function %187
+ %zyxz = OpVariable %_ptr_Function_v4uint Function %187
+ %zyyx = OpVariable %_ptr_Function_v4uint Function %187
+ %zyyy = OpVariable %_ptr_Function_v4uint Function %187
+ %zyyz = OpVariable %_ptr_Function_v4uint Function %187
+ %zyzx = OpVariable %_ptr_Function_v4uint Function %187
+ %zyzy = OpVariable %_ptr_Function_v4uint Function %187
+ %zyzz = OpVariable %_ptr_Function_v4uint Function %187
+ %zzxx = OpVariable %_ptr_Function_v4uint Function %187
+ %zzxy = OpVariable %_ptr_Function_v4uint Function %187
+ %zzxz = OpVariable %_ptr_Function_v4uint Function %187
+ %zzyx = OpVariable %_ptr_Function_v4uint Function %187
+ %zzyy = OpVariable %_ptr_Function_v4uint Function %187
+ %zzyz = OpVariable %_ptr_Function_v4uint Function %187
+ %zzzx = OpVariable %_ptr_Function_v4uint Function %187
+ %zzzy = OpVariable %_ptr_Function_v4uint Function %187
+ %zzzz = OpVariable %_ptr_Function_v4uint Function %187
+ %15 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %16 = OpLoad %v3uint %15
+ OpStore %v %16
+ %21 = OpAccessChain %_ptr_Private_uint %P %uint_0 %uint_0
+ %22 = OpLoad %uint %21
+ OpStore %x %22
+ %27 = OpAccessChain %_ptr_Private_uint %P %uint_0 %uint_1
+ %28 = OpLoad %uint %27
+ OpStore %y %28
+ %31 = OpAccessChain %_ptr_Private_uint %P %uint_0 %uint_2
+ %32 = OpLoad %uint %31
+ OpStore %z %32
+ %34 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %36 = OpLoad %v3uint %34
+ %37 = OpVectorShuffle %v2uint %36 %36 0 0
+ OpStore %xx %37
+ %41 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %42 = OpLoad %v3uint %41
+ %43 = OpVectorShuffle %v2uint %42 %42 0 1
+ OpStore %xy %43
+ %45 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %46 = OpLoad %v3uint %45
+ %47 = OpVectorShuffle %v2uint %46 %46 0 2
+ OpStore %xz %47
+ %49 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %50 = OpLoad %v3uint %49
+ %51 = OpVectorShuffle %v2uint %50 %50 1 0
+ OpStore %yx %51
+ %53 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %54 = OpLoad %v3uint %53
+ %55 = OpVectorShuffle %v2uint %54 %54 1 1
+ OpStore %yy %55
+ %57 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %58 = OpLoad %v3uint %57
+ %59 = OpVectorShuffle %v2uint %58 %58 1 2
+ OpStore %yz %59
+ %61 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %62 = OpLoad %v3uint %61
+ %63 = OpVectorShuffle %v2uint %62 %62 2 0
+ OpStore %zx %63
+ %65 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %66 = OpLoad %v3uint %65
+ %67 = OpVectorShuffle %v2uint %66 %66 2 1
+ OpStore %zy %67
+ %69 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %70 = OpLoad %v3uint %69
+ %71 = OpVectorShuffle %v2uint %70 %70 2 2
+ OpStore %zz %71
+ %73 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %74 = OpLoad %v3uint %73
+ %75 = OpVectorShuffle %v3uint %74 %74 0 0 0
+ OpStore %xxx %75
+ %77 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %78 = OpLoad %v3uint %77
+ %79 = OpVectorShuffle %v3uint %78 %78 0 0 1
+ OpStore %xxy %79
+ %81 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %82 = OpLoad %v3uint %81
+ %83 = OpVectorShuffle %v3uint %82 %82 0 0 2
+ OpStore %xxz %83
+ %85 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %86 = OpLoad %v3uint %85
+ %87 = OpVectorShuffle %v3uint %86 %86 0 1 0
+ OpStore %xyx %87
+ %89 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %90 = OpLoad %v3uint %89
+ %91 = OpVectorShuffle %v3uint %90 %90 0 1 1
+ OpStore %xyy %91
+ %93 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %94 = OpLoad %v3uint %93
+ %95 = OpVectorShuffle %v3uint %94 %94 0 1 2
+ OpStore %xyz %95
+ %97 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %98 = OpLoad %v3uint %97
+ %99 = OpVectorShuffle %v3uint %98 %98 0 2 0
+ OpStore %xzx %99
+ %101 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %102 = OpLoad %v3uint %101
+ %103 = OpVectorShuffle %v3uint %102 %102 0 2 1
+ OpStore %xzy %103
+ %105 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %106 = OpLoad %v3uint %105
+ %107 = OpVectorShuffle %v3uint %106 %106 0 2 2
+ OpStore %xzz %107
+ %109 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %110 = OpLoad %v3uint %109
+ %111 = OpVectorShuffle %v3uint %110 %110 1 0 0
+ OpStore %yxx %111
+ %113 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %114 = OpLoad %v3uint %113
+ %115 = OpVectorShuffle %v3uint %114 %114 1 0 1
+ OpStore %yxy %115
+ %117 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %118 = OpLoad %v3uint %117
+ %119 = OpVectorShuffle %v3uint %118 %118 1 0 2
+ OpStore %yxz %119
+ %121 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %122 = OpLoad %v3uint %121
+ %123 = OpVectorShuffle %v3uint %122 %122 1 1 0
+ OpStore %yyx %123
+ %125 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %126 = OpLoad %v3uint %125
+ %127 = OpVectorShuffle %v3uint %126 %126 1 1 1
+ OpStore %yyy %127
+ %129 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %130 = OpLoad %v3uint %129
+ %131 = OpVectorShuffle %v3uint %130 %130 1 1 2
+ OpStore %yyz %131
+ %133 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %134 = OpLoad %v3uint %133
+ %135 = OpVectorShuffle %v3uint %134 %134 1 2 0
+ OpStore %yzx %135
+ %137 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %138 = OpLoad %v3uint %137
+ %139 = OpVectorShuffle %v3uint %138 %138 1 2 1
+ OpStore %yzy %139
+ %141 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %142 = OpLoad %v3uint %141
+ %143 = OpVectorShuffle %v3uint %142 %142 1 2 2
+ OpStore %yzz %143
+ %145 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %146 = OpLoad %v3uint %145
+ %147 = OpVectorShuffle %v3uint %146 %146 2 0 0
+ OpStore %zxx %147
+ %149 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %150 = OpLoad %v3uint %149
+ %151 = OpVectorShuffle %v3uint %150 %150 2 0 1
+ OpStore %zxy %151
+ %153 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %154 = OpLoad %v3uint %153
+ %155 = OpVectorShuffle %v3uint %154 %154 2 0 2
+ OpStore %zxz %155
+ %157 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %158 = OpLoad %v3uint %157
+ %159 = OpVectorShuffle %v3uint %158 %158 2 1 0
+ OpStore %zyx %159
+ %161 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %162 = OpLoad %v3uint %161
+ %163 = OpVectorShuffle %v3uint %162 %162 2 1 1
+ OpStore %zyy %163
+ %165 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %166 = OpLoad %v3uint %165
+ %167 = OpVectorShuffle %v3uint %166 %166 2 1 2
+ OpStore %zyz %167
+ %169 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %170 = OpLoad %v3uint %169
+ %171 = OpVectorShuffle %v3uint %170 %170 2 2 0
+ OpStore %zzx %171
+ %173 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %174 = OpLoad %v3uint %173
+ %175 = OpVectorShuffle %v3uint %174 %174 2 2 1
+ OpStore %zzy %175
+ %177 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %178 = OpLoad %v3uint %177
+ %179 = OpVectorShuffle %v3uint %178 %178 2 2 2
+ OpStore %zzz %179
+ %181 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %183 = OpLoad %v3uint %181
+ %184 = OpVectorShuffle %v4uint %183 %183 0 0 0 0
+ OpStore %xxxx %184
+ %188 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %189 = OpLoad %v3uint %188
+ %190 = OpVectorShuffle %v4uint %189 %189 0 0 0 1
+ OpStore %xxxy %190
+ %192 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %193 = OpLoad %v3uint %192
+ %194 = OpVectorShuffle %v4uint %193 %193 0 0 0 2
+ OpStore %xxxz %194
+ %196 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %197 = OpLoad %v3uint %196
+ %198 = OpVectorShuffle %v4uint %197 %197 0 0 1 0
+ OpStore %xxyx %198
+ %200 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %201 = OpLoad %v3uint %200
+ %202 = OpVectorShuffle %v4uint %201 %201 0 0 1 1
+ OpStore %xxyy %202
+ %204 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %205 = OpLoad %v3uint %204
+ %206 = OpVectorShuffle %v4uint %205 %205 0 0 1 2
+ OpStore %xxyz %206
+ %208 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %209 = OpLoad %v3uint %208
+ %210 = OpVectorShuffle %v4uint %209 %209 0 0 2 0
+ OpStore %xxzx %210
+ %212 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %213 = OpLoad %v3uint %212
+ %214 = OpVectorShuffle %v4uint %213 %213 0 0 2 1
+ OpStore %xxzy %214
+ %216 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %217 = OpLoad %v3uint %216
+ %218 = OpVectorShuffle %v4uint %217 %217 0 0 2 2
+ OpStore %xxzz %218
+ %220 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %221 = OpLoad %v3uint %220
+ %222 = OpVectorShuffle %v4uint %221 %221 0 1 0 0
+ OpStore %xyxx %222
+ %224 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %225 = OpLoad %v3uint %224
+ %226 = OpVectorShuffle %v4uint %225 %225 0 1 0 1
+ OpStore %xyxy %226
+ %228 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %229 = OpLoad %v3uint %228
+ %230 = OpVectorShuffle %v4uint %229 %229 0 1 0 2
+ OpStore %xyxz %230
+ %232 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %233 = OpLoad %v3uint %232
+ %234 = OpVectorShuffle %v4uint %233 %233 0 1 1 0
+ OpStore %xyyx %234
+ %236 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %237 = OpLoad %v3uint %236
+ %238 = OpVectorShuffle %v4uint %237 %237 0 1 1 1
+ OpStore %xyyy %238
+ %240 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %241 = OpLoad %v3uint %240
+ %242 = OpVectorShuffle %v4uint %241 %241 0 1 1 2
+ OpStore %xyyz %242
+ %244 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %245 = OpLoad %v3uint %244
+ %246 = OpVectorShuffle %v4uint %245 %245 0 1 2 0
+ OpStore %xyzx %246
+ %248 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %249 = OpLoad %v3uint %248
+ %250 = OpVectorShuffle %v4uint %249 %249 0 1 2 1
+ OpStore %xyzy %250
+ %252 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %253 = OpLoad %v3uint %252
+ %254 = OpVectorShuffle %v4uint %253 %253 0 1 2 2
+ OpStore %xyzz %254
+ %256 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %257 = OpLoad %v3uint %256
+ %258 = OpVectorShuffle %v4uint %257 %257 0 2 0 0
+ OpStore %xzxx %258
+ %260 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %261 = OpLoad %v3uint %260
+ %262 = OpVectorShuffle %v4uint %261 %261 0 2 0 1
+ OpStore %xzxy %262
+ %264 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %265 = OpLoad %v3uint %264
+ %266 = OpVectorShuffle %v4uint %265 %265 0 2 0 2
+ OpStore %xzxz %266
+ %268 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %269 = OpLoad %v3uint %268
+ %270 = OpVectorShuffle %v4uint %269 %269 0 2 1 0
+ OpStore %xzyx %270
+ %272 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %273 = OpLoad %v3uint %272
+ %274 = OpVectorShuffle %v4uint %273 %273 0 2 1 1
+ OpStore %xzyy %274
+ %276 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %277 = OpLoad %v3uint %276
+ %278 = OpVectorShuffle %v4uint %277 %277 0 2 1 2
+ OpStore %xzyz %278
+ %280 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %281 = OpLoad %v3uint %280
+ %282 = OpVectorShuffle %v4uint %281 %281 0 2 2 0
+ OpStore %xzzx %282
+ %284 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %285 = OpLoad %v3uint %284
+ %286 = OpVectorShuffle %v4uint %285 %285 0 2 2 1
+ OpStore %xzzy %286
+ %288 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %289 = OpLoad %v3uint %288
+ %290 = OpVectorShuffle %v4uint %289 %289 0 2 2 2
+ OpStore %xzzz %290
+ %292 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %293 = OpLoad %v3uint %292
+ %294 = OpVectorShuffle %v4uint %293 %293 1 0 0 0
+ OpStore %yxxx %294
+ %296 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %297 = OpLoad %v3uint %296
+ %298 = OpVectorShuffle %v4uint %297 %297 1 0 0 1
+ OpStore %yxxy %298
+ %300 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %301 = OpLoad %v3uint %300
+ %302 = OpVectorShuffle %v4uint %301 %301 1 0 0 2
+ OpStore %yxxz %302
+ %304 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %305 = OpLoad %v3uint %304
+ %306 = OpVectorShuffle %v4uint %305 %305 1 0 1 0
+ OpStore %yxyx %306
+ %308 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %309 = OpLoad %v3uint %308
+ %310 = OpVectorShuffle %v4uint %309 %309 1 0 1 1
+ OpStore %yxyy %310
+ %312 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %313 = OpLoad %v3uint %312
+ %314 = OpVectorShuffle %v4uint %313 %313 1 0 1 2
+ OpStore %yxyz %314
+ %316 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %317 = OpLoad %v3uint %316
+ %318 = OpVectorShuffle %v4uint %317 %317 1 0 2 0
+ OpStore %yxzx %318
+ %320 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %321 = OpLoad %v3uint %320
+ %322 = OpVectorShuffle %v4uint %321 %321 1 0 2 1
+ OpStore %yxzy %322
+ %324 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %325 = OpLoad %v3uint %324
+ %326 = OpVectorShuffle %v4uint %325 %325 1 0 2 2
+ OpStore %yxzz %326
+ %328 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %329 = OpLoad %v3uint %328
+ %330 = OpVectorShuffle %v4uint %329 %329 1 1 0 0
+ OpStore %yyxx %330
+ %332 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %333 = OpLoad %v3uint %332
+ %334 = OpVectorShuffle %v4uint %333 %333 1 1 0 1
+ OpStore %yyxy %334
+ %336 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %337 = OpLoad %v3uint %336
+ %338 = OpVectorShuffle %v4uint %337 %337 1 1 0 2
+ OpStore %yyxz %338
+ %340 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %341 = OpLoad %v3uint %340
+ %342 = OpVectorShuffle %v4uint %341 %341 1 1 1 0
+ OpStore %yyyx %342
+ %344 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %345 = OpLoad %v3uint %344
+ %346 = OpVectorShuffle %v4uint %345 %345 1 1 1 1
+ OpStore %yyyy %346
+ %348 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %349 = OpLoad %v3uint %348
+ %350 = OpVectorShuffle %v4uint %349 %349 1 1 1 2
+ OpStore %yyyz %350
+ %352 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %353 = OpLoad %v3uint %352
+ %354 = OpVectorShuffle %v4uint %353 %353 1 1 2 0
+ OpStore %yyzx %354
+ %356 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %357 = OpLoad %v3uint %356
+ %358 = OpVectorShuffle %v4uint %357 %357 1 1 2 1
+ OpStore %yyzy %358
+ %360 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %361 = OpLoad %v3uint %360
+ %362 = OpVectorShuffle %v4uint %361 %361 1 1 2 2
+ OpStore %yyzz %362
+ %364 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %365 = OpLoad %v3uint %364
+ %366 = OpVectorShuffle %v4uint %365 %365 1 2 0 0
+ OpStore %yzxx %366
+ %368 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %369 = OpLoad %v3uint %368
+ %370 = OpVectorShuffle %v4uint %369 %369 1 2 0 1
+ OpStore %yzxy %370
+ %372 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %373 = OpLoad %v3uint %372
+ %374 = OpVectorShuffle %v4uint %373 %373 1 2 0 2
+ OpStore %yzxz %374
+ %376 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %377 = OpLoad %v3uint %376
+ %378 = OpVectorShuffle %v4uint %377 %377 1 2 1 0
+ OpStore %yzyx %378
+ %380 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %381 = OpLoad %v3uint %380
+ %382 = OpVectorShuffle %v4uint %381 %381 1 2 1 1
+ OpStore %yzyy %382
+ %384 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %385 = OpLoad %v3uint %384
+ %386 = OpVectorShuffle %v4uint %385 %385 1 2 1 2
+ OpStore %yzyz %386
+ %388 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %389 = OpLoad %v3uint %388
+ %390 = OpVectorShuffle %v4uint %389 %389 1 2 2 0
+ OpStore %yzzx %390
+ %392 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %393 = OpLoad %v3uint %392
+ %394 = OpVectorShuffle %v4uint %393 %393 1 2 2 1
+ OpStore %yzzy %394
+ %396 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %397 = OpLoad %v3uint %396
+ %398 = OpVectorShuffle %v4uint %397 %397 1 2 2 2
+ OpStore %yzzz %398
+ %400 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %401 = OpLoad %v3uint %400
+ %402 = OpVectorShuffle %v4uint %401 %401 2 0 0 0
+ OpStore %zxxx %402
+ %404 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %405 = OpLoad %v3uint %404
+ %406 = OpVectorShuffle %v4uint %405 %405 2 0 0 1
+ OpStore %zxxy %406
+ %408 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %409 = OpLoad %v3uint %408
+ %410 = OpVectorShuffle %v4uint %409 %409 2 0 0 2
+ OpStore %zxxz %410
+ %412 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %413 = OpLoad %v3uint %412
+ %414 = OpVectorShuffle %v4uint %413 %413 2 0 1 0
+ OpStore %zxyx %414
+ %416 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %417 = OpLoad %v3uint %416
+ %418 = OpVectorShuffle %v4uint %417 %417 2 0 1 1
+ OpStore %zxyy %418
+ %420 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %421 = OpLoad %v3uint %420
+ %422 = OpVectorShuffle %v4uint %421 %421 2 0 1 2
+ OpStore %zxyz %422
+ %424 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %425 = OpLoad %v3uint %424
+ %426 = OpVectorShuffle %v4uint %425 %425 2 0 2 0
+ OpStore %zxzx %426
+ %428 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %429 = OpLoad %v3uint %428
+ %430 = OpVectorShuffle %v4uint %429 %429 2 0 2 1
+ OpStore %zxzy %430
+ %432 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %433 = OpLoad %v3uint %432
+ %434 = OpVectorShuffle %v4uint %433 %433 2 0 2 2
+ OpStore %zxzz %434
+ %436 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %437 = OpLoad %v3uint %436
+ %438 = OpVectorShuffle %v4uint %437 %437 2 1 0 0
+ OpStore %zyxx %438
+ %440 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %441 = OpLoad %v3uint %440
+ %442 = OpVectorShuffle %v4uint %441 %441 2 1 0 1
+ OpStore %zyxy %442
+ %444 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %445 = OpLoad %v3uint %444
+ %446 = OpVectorShuffle %v4uint %445 %445 2 1 0 2
+ OpStore %zyxz %446
+ %448 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %449 = OpLoad %v3uint %448
+ %450 = OpVectorShuffle %v4uint %449 %449 2 1 1 0
+ OpStore %zyyx %450
+ %452 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %453 = OpLoad %v3uint %452
+ %454 = OpVectorShuffle %v4uint %453 %453 2 1 1 1
+ OpStore %zyyy %454
+ %456 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %457 = OpLoad %v3uint %456
+ %458 = OpVectorShuffle %v4uint %457 %457 2 1 1 2
+ OpStore %zyyz %458
+ %460 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %461 = OpLoad %v3uint %460
+ %462 = OpVectorShuffle %v4uint %461 %461 2 1 2 0
+ OpStore %zyzx %462
+ %464 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %465 = OpLoad %v3uint %464
+ %466 = OpVectorShuffle %v4uint %465 %465 2 1 2 1
+ OpStore %zyzy %466
+ %468 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %469 = OpLoad %v3uint %468
+ %470 = OpVectorShuffle %v4uint %469 %469 2 1 2 2
+ OpStore %zyzz %470
+ %472 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %473 = OpLoad %v3uint %472
+ %474 = OpVectorShuffle %v4uint %473 %473 2 2 0 0
+ OpStore %zzxx %474
+ %476 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %477 = OpLoad %v3uint %476
+ %478 = OpVectorShuffle %v4uint %477 %477 2 2 0 1
+ OpStore %zzxy %478
+ %480 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %481 = OpLoad %v3uint %480
+ %482 = OpVectorShuffle %v4uint %481 %481 2 2 0 2
+ OpStore %zzxz %482
+ %484 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %485 = OpLoad %v3uint %484
+ %486 = OpVectorShuffle %v4uint %485 %485 2 2 1 0
+ OpStore %zzyx %486
+ %488 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %489 = OpLoad %v3uint %488
+ %490 = OpVectorShuffle %v4uint %489 %489 2 2 1 1
+ OpStore %zzyy %490
+ %492 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %493 = OpLoad %v3uint %492
+ %494 = OpVectorShuffle %v4uint %493 %493 2 2 1 2
+ OpStore %zzyz %494
+ %496 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %497 = OpLoad %v3uint %496
+ %498 = OpVectorShuffle %v4uint %497 %497 2 2 2 0
+ OpStore %zzzx %498
+ %500 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %501 = OpLoad %v3uint %500
+ %502 = OpVectorShuffle %v4uint %501 %501 2 2 2 1
+ OpStore %zzzy %502
+ %504 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ %505 = OpLoad %v3uint %504
+ %506 = OpVectorShuffle %v4uint %505 %505 2 2 2 2
+ OpStore %zzzz %506
+ OpReturn
+ OpFunctionEnd
diff --git a/test/expressions/swizzle/read/vec3/u32.wgsl.expected.wgsl b/test/expressions/swizzle/read/vec3/u32.wgsl.expected.wgsl
new file mode 100644
index 0000000..390ba90
--- /dev/null
+++ b/test/expressions/swizzle/read/vec3/u32.wgsl.expected.wgsl
@@ -0,0 +1,129 @@
+struct S {
+ v : vec3<u32>;
+};
+
+var<private> P : S;
+
+fn f() {
+ var v = P.v;
+ var x = P.v.x;
+ var y = P.v.y;
+ var z = P.v.z;
+ var xx = P.v.xx;
+ var xy = P.v.xy;
+ var xz = P.v.xz;
+ var yx = P.v.yx;
+ var yy = P.v.yy;
+ var yz = P.v.yz;
+ var zx = P.v.zx;
+ var zy = P.v.zy;
+ var zz = P.v.zz;
+ var xxx = P.v.xxx;
+ var xxy = P.v.xxy;
+ var xxz = P.v.xxz;
+ var xyx = P.v.xyx;
+ var xyy = P.v.xyy;
+ var xyz = P.v.xyz;
+ var xzx = P.v.xzx;
+ var xzy = P.v.xzy;
+ var xzz = P.v.xzz;
+ var yxx = P.v.yxx;
+ var yxy = P.v.yxy;
+ var yxz = P.v.yxz;
+ var yyx = P.v.yyx;
+ var yyy = P.v.yyy;
+ var yyz = P.v.yyz;
+ var yzx = P.v.yzx;
+ var yzy = P.v.yzy;
+ var yzz = P.v.yzz;
+ var zxx = P.v.zxx;
+ var zxy = P.v.zxy;
+ var zxz = P.v.zxz;
+ var zyx = P.v.zyx;
+ var zyy = P.v.zyy;
+ var zyz = P.v.zyz;
+ var zzx = P.v.zzx;
+ var zzy = P.v.zzy;
+ var zzz = P.v.zzz;
+ var xxxx = P.v.xxxx;
+ var xxxy = P.v.xxxy;
+ var xxxz = P.v.xxxz;
+ var xxyx = P.v.xxyx;
+ var xxyy = P.v.xxyy;
+ var xxyz = P.v.xxyz;
+ var xxzx = P.v.xxzx;
+ var xxzy = P.v.xxzy;
+ var xxzz = P.v.xxzz;
+ var xyxx = P.v.xyxx;
+ var xyxy = P.v.xyxy;
+ var xyxz = P.v.xyxz;
+ var xyyx = P.v.xyyx;
+ var xyyy = P.v.xyyy;
+ var xyyz = P.v.xyyz;
+ var xyzx = P.v.xyzx;
+ var xyzy = P.v.xyzy;
+ var xyzz = P.v.xyzz;
+ var xzxx = P.v.xzxx;
+ var xzxy = P.v.xzxy;
+ var xzxz = P.v.xzxz;
+ var xzyx = P.v.xzyx;
+ var xzyy = P.v.xzyy;
+ var xzyz = P.v.xzyz;
+ var xzzx = P.v.xzzx;
+ var xzzy = P.v.xzzy;
+ var xzzz = P.v.xzzz;
+ var yxxx = P.v.yxxx;
+ var yxxy = P.v.yxxy;
+ var yxxz = P.v.yxxz;
+ var yxyx = P.v.yxyx;
+ var yxyy = P.v.yxyy;
+ var yxyz = P.v.yxyz;
+ var yxzx = P.v.yxzx;
+ var yxzy = P.v.yxzy;
+ var yxzz = P.v.yxzz;
+ var yyxx = P.v.yyxx;
+ var yyxy = P.v.yyxy;
+ var yyxz = P.v.yyxz;
+ var yyyx = P.v.yyyx;
+ var yyyy = P.v.yyyy;
+ var yyyz = P.v.yyyz;
+ var yyzx = P.v.yyzx;
+ var yyzy = P.v.yyzy;
+ var yyzz = P.v.yyzz;
+ var yzxx = P.v.yzxx;
+ var yzxy = P.v.yzxy;
+ var yzxz = P.v.yzxz;
+ var yzyx = P.v.yzyx;
+ var yzyy = P.v.yzyy;
+ var yzyz = P.v.yzyz;
+ var yzzx = P.v.yzzx;
+ var yzzy = P.v.yzzy;
+ var yzzz = P.v.yzzz;
+ var zxxx = P.v.zxxx;
+ var zxxy = P.v.zxxy;
+ var zxxz = P.v.zxxz;
+ var zxyx = P.v.zxyx;
+ var zxyy = P.v.zxyy;
+ var zxyz = P.v.zxyz;
+ var zxzx = P.v.zxzx;
+ var zxzy = P.v.zxzy;
+ var zxzz = P.v.zxzz;
+ var zyxx = P.v.zyxx;
+ var zyxy = P.v.zyxy;
+ var zyxz = P.v.zyxz;
+ var zyyx = P.v.zyyx;
+ var zyyy = P.v.zyyy;
+ var zyyz = P.v.zyyz;
+ var zyzx = P.v.zyzx;
+ var zyzy = P.v.zyzy;
+ var zyzz = P.v.zyzz;
+ var zzxx = P.v.zzxx;
+ var zzxy = P.v.zzxy;
+ var zzxz = P.v.zzxz;
+ var zzyx = P.v.zzyx;
+ var zzyy = P.v.zzyy;
+ var zzyz = P.v.zzyz;
+ var zzzx = P.v.zzzx;
+ var zzzy = P.v.zzzy;
+ var zzzz = P.v.zzzz;
+}
diff --git a/test/expressions/swizzle/write/packed_vec3/f32.wgsl b/test/expressions/swizzle/write/packed_vec3/f32.wgsl
new file mode 100644
index 0000000..7703af9
--- /dev/null
+++ b/test/expressions/swizzle/write/packed_vec3/f32.wgsl
@@ -0,0 +1,14 @@
+[[block]]
+struct S {
+ v: vec3<f32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> U : S;
+
+fn f() {
+ U.v = vec3<f32>(1.0, 2.0, 3.0);
+
+ U.v.x = 1.0;
+ U.v.y = 2.0;
+ U.v.z = 3.0;
+}
diff --git a/test/expressions/swizzle/write/packed_vec3/f32.wgsl.expected.hlsl b/test/expressions/swizzle/write/packed_vec3/f32.wgsl.expected.hlsl
new file mode 100644
index 0000000..bd302bc
--- /dev/null
+++ b/test/expressions/swizzle/write/packed_vec3/f32.wgsl.expected.hlsl
@@ -0,0 +1,13 @@
+[numthreads(1, 1, 1)]
+void unused_entry_point() {
+ return;
+}
+
+RWByteAddressBuffer U : register(u0, space0);
+
+void f() {
+ U.Store3(0u, asuint(float3(1.0f, 2.0f, 3.0f)));
+ U.Store(0u, asuint(1.0f));
+ U.Store(4u, asuint(2.0f));
+ U.Store(8u, asuint(3.0f));
+}
diff --git a/test/expressions/swizzle/write/packed_vec3/f32.wgsl.expected.msl b/test/expressions/swizzle/write/packed_vec3/f32.wgsl.expected.msl
new file mode 100644
index 0000000..80ad293
--- /dev/null
+++ b/test/expressions/swizzle/write/packed_vec3/f32.wgsl.expected.msl
@@ -0,0 +1,26 @@
+#include <metal_stdlib>
+
+using namespace metal;
+
+template<typename T, int N, int M>
+inline auto operator*(matrix<T, N, M> lhs, packed_vec<T, N> rhs) {
+ return lhs * vec<T, N>(rhs);
+}
+
+template<typename T, int N, int M>
+inline auto operator*(packed_vec<T, M> lhs, matrix<T, N, M> rhs) {
+ return vec<T, M>(lhs) * rhs;
+}
+
+struct S {
+ /* 0x0000 */ packed_float3 v;
+ /* 0x000c */ int8_t tint_pad[4];
+};
+
+void f(device S& U) {
+ U.v = float3(1.0f, 2.0f, 3.0f);
+ U.v[0] = 1.0f;
+ U.v[1] = 2.0f;
+ U.v[2] = 3.0f;
+}
+
diff --git a/test/expressions/swizzle/write/packed_vec3/f32.wgsl.expected.spvasm b/test/expressions/swizzle/write/packed_vec3/f32.wgsl.expected.spvasm
new file mode 100644
index 0000000..06c6c10
--- /dev/null
+++ b/test/expressions/swizzle/write/packed_vec3/f32.wgsl.expected.spvasm
@@ -0,0 +1,51 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 26
+; Schema: 0
+ OpCapability Shader
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
+ OpExecutionMode %unused_entry_point LocalSize 1 1 1
+ OpName %S "S"
+ OpMemberName %S 0 "v"
+ OpName %U "U"
+ OpName %unused_entry_point "unused_entry_point"
+ OpName %f "f"
+ OpDecorate %S Block
+ OpMemberDecorate %S 0 Offset 0
+ OpDecorate %U DescriptorSet 0
+ OpDecorate %U Binding 0
+ %float = OpTypeFloat 32
+ %v3float = OpTypeVector %float 3
+ %S = OpTypeStruct %v3float
+%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
+ %U = OpVariable %_ptr_StorageBuffer_S StorageBuffer
+ %void = OpTypeVoid
+ %6 = OpTypeFunction %void
+ %uint = OpTypeInt 32 0
+ %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v3float = OpTypePointer StorageBuffer %v3float
+ %float_1 = OpConstant %float 1
+ %float_2 = OpConstant %float 2
+ %float_3 = OpConstant %float 3
+ %19 = OpConstantComposite %v3float %float_1 %float_2 %float_3
+%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
+ %uint_1 = OpConstant %uint 1
+ %uint_2 = OpConstant %uint 2
+%unused_entry_point = OpFunction %void None %6
+ %9 = OpLabel
+ OpReturn
+ OpFunctionEnd
+ %f = OpFunction %void None %6
+ %11 = OpLabel
+ %15 = OpAccessChain %_ptr_StorageBuffer_v3float %U %uint_0
+ OpStore %15 %19
+ %21 = OpAccessChain %_ptr_StorageBuffer_float %U %uint_0 %uint_0
+ OpStore %21 %float_1
+ %23 = OpAccessChain %_ptr_StorageBuffer_float %U %uint_0 %uint_1
+ OpStore %23 %float_2
+ %25 = OpAccessChain %_ptr_StorageBuffer_float %U %uint_0 %uint_2
+ OpStore %25 %float_3
+ OpReturn
+ OpFunctionEnd
diff --git a/test/expressions/swizzle/write/packed_vec3/f32.wgsl.expected.wgsl b/test/expressions/swizzle/write/packed_vec3/f32.wgsl.expected.wgsl
new file mode 100644
index 0000000..db3ef39
--- /dev/null
+++ b/test/expressions/swizzle/write/packed_vec3/f32.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+[[block]]
+struct S {
+ v : vec3<f32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> U : S;
+
+fn f() {
+ U.v = vec3<f32>(1.0, 2.0, 3.0);
+ U.v.x = 1.0;
+ U.v.y = 2.0;
+ U.v.z = 3.0;
+}
diff --git a/test/expressions/swizzle/write/packed_vec3/i32.wgsl b/test/expressions/swizzle/write/packed_vec3/i32.wgsl
new file mode 100644
index 0000000..fb1ebc5
--- /dev/null
+++ b/test/expressions/swizzle/write/packed_vec3/i32.wgsl
@@ -0,0 +1,14 @@
+[[block]]
+struct S {
+ v: vec3<i32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> U : S;
+
+fn f() {
+ U.v = vec3<i32>(1, 2, 3);
+
+ U.v.x = 1;
+ U.v.y = 2;
+ U.v.z = 3;
+}
diff --git a/test/expressions/swizzle/write/packed_vec3/i32.wgsl.expected.hlsl b/test/expressions/swizzle/write/packed_vec3/i32.wgsl.expected.hlsl
new file mode 100644
index 0000000..1be931d
--- /dev/null
+++ b/test/expressions/swizzle/write/packed_vec3/i32.wgsl.expected.hlsl
@@ -0,0 +1,13 @@
+[numthreads(1, 1, 1)]
+void unused_entry_point() {
+ return;
+}
+
+RWByteAddressBuffer U : register(u0, space0);
+
+void f() {
+ U.Store3(0u, asuint(int3(1, 2, 3)));
+ U.Store(0u, asuint(1));
+ U.Store(4u, asuint(2));
+ U.Store(8u, asuint(3));
+}
diff --git a/test/expressions/swizzle/write/packed_vec3/i32.wgsl.expected.msl b/test/expressions/swizzle/write/packed_vec3/i32.wgsl.expected.msl
new file mode 100644
index 0000000..3a519e5
--- /dev/null
+++ b/test/expressions/swizzle/write/packed_vec3/i32.wgsl.expected.msl
@@ -0,0 +1,15 @@
+#include <metal_stdlib>
+
+using namespace metal;
+struct S {
+ /* 0x0000 */ packed_int3 v;
+ /* 0x000c */ int8_t tint_pad[4];
+};
+
+void f(device S& U) {
+ U.v = int3(1, 2, 3);
+ U.v[0] = 1;
+ U.v[1] = 2;
+ U.v[2] = 3;
+}
+
diff --git a/test/expressions/swizzle/write/packed_vec3/i32.wgsl.expected.spvasm b/test/expressions/swizzle/write/packed_vec3/i32.wgsl.expected.spvasm
new file mode 100644
index 0000000..b61e867
--- /dev/null
+++ b/test/expressions/swizzle/write/packed_vec3/i32.wgsl.expected.spvasm
@@ -0,0 +1,51 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 26
+; Schema: 0
+ OpCapability Shader
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
+ OpExecutionMode %unused_entry_point LocalSize 1 1 1
+ OpName %S "S"
+ OpMemberName %S 0 "v"
+ OpName %U "U"
+ OpName %unused_entry_point "unused_entry_point"
+ OpName %f "f"
+ OpDecorate %S Block
+ OpMemberDecorate %S 0 Offset 0
+ OpDecorate %U DescriptorSet 0
+ OpDecorate %U Binding 0
+ %int = OpTypeInt 32 1
+ %v3int = OpTypeVector %int 3
+ %S = OpTypeStruct %v3int
+%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
+ %U = OpVariable %_ptr_StorageBuffer_S StorageBuffer
+ %void = OpTypeVoid
+ %6 = OpTypeFunction %void
+ %uint = OpTypeInt 32 0
+ %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v3int = OpTypePointer StorageBuffer %v3int
+ %int_1 = OpConstant %int 1
+ %int_2 = OpConstant %int 2
+ %int_3 = OpConstant %int 3
+ %19 = OpConstantComposite %v3int %int_1 %int_2 %int_3
+%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
+ %uint_1 = OpConstant %uint 1
+ %uint_2 = OpConstant %uint 2
+%unused_entry_point = OpFunction %void None %6
+ %9 = OpLabel
+ OpReturn
+ OpFunctionEnd
+ %f = OpFunction %void None %6
+ %11 = OpLabel
+ %15 = OpAccessChain %_ptr_StorageBuffer_v3int %U %uint_0
+ OpStore %15 %19
+ %21 = OpAccessChain %_ptr_StorageBuffer_int %U %uint_0 %uint_0
+ OpStore %21 %int_1
+ %23 = OpAccessChain %_ptr_StorageBuffer_int %U %uint_0 %uint_1
+ OpStore %23 %int_2
+ %25 = OpAccessChain %_ptr_StorageBuffer_int %U %uint_0 %uint_2
+ OpStore %25 %int_3
+ OpReturn
+ OpFunctionEnd
diff --git a/test/expressions/swizzle/write/packed_vec3/i32.wgsl.expected.wgsl b/test/expressions/swizzle/write/packed_vec3/i32.wgsl.expected.wgsl
new file mode 100644
index 0000000..b84a23a
--- /dev/null
+++ b/test/expressions/swizzle/write/packed_vec3/i32.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+[[block]]
+struct S {
+ v : vec3<i32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> U : S;
+
+fn f() {
+ U.v = vec3<i32>(1, 2, 3);
+ U.v.x = 1;
+ U.v.y = 2;
+ U.v.z = 3;
+}
diff --git a/test/expressions/swizzle/write/packed_vec3/u32.wgsl b/test/expressions/swizzle/write/packed_vec3/u32.wgsl
new file mode 100644
index 0000000..306e540
--- /dev/null
+++ b/test/expressions/swizzle/write/packed_vec3/u32.wgsl
@@ -0,0 +1,14 @@
+[[block]]
+struct S {
+ v: vec3<u32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> U : S;
+
+fn f() {
+ U.v = vec3<u32>(1u, 2u, 3u);
+
+ U.v.x = 1u;
+ U.v.y = 2u;
+ U.v.z = 3u;
+}
diff --git a/test/expressions/swizzle/write/packed_vec3/u32.wgsl.expected.hlsl b/test/expressions/swizzle/write/packed_vec3/u32.wgsl.expected.hlsl
new file mode 100644
index 0000000..fd7ff48
--- /dev/null
+++ b/test/expressions/swizzle/write/packed_vec3/u32.wgsl.expected.hlsl
@@ -0,0 +1,13 @@
+[numthreads(1, 1, 1)]
+void unused_entry_point() {
+ return;
+}
+
+RWByteAddressBuffer U : register(u0, space0);
+
+void f() {
+ U.Store3(0u, asuint(uint3(1u, 2u, 3u)));
+ U.Store(0u, asuint(1u));
+ U.Store(4u, asuint(2u));
+ U.Store(8u, asuint(3u));
+}
diff --git a/test/expressions/swizzle/write/packed_vec3/u32.wgsl.expected.msl b/test/expressions/swizzle/write/packed_vec3/u32.wgsl.expected.msl
new file mode 100644
index 0000000..b12b460
--- /dev/null
+++ b/test/expressions/swizzle/write/packed_vec3/u32.wgsl.expected.msl
@@ -0,0 +1,15 @@
+#include <metal_stdlib>
+
+using namespace metal;
+struct S {
+ /* 0x0000 */ packed_uint3 v;
+ /* 0x000c */ int8_t tint_pad[4];
+};
+
+void f(device S& U) {
+ U.v = uint3(1u, 2u, 3u);
+ U.v[0] = 1u;
+ U.v[1] = 2u;
+ U.v[2] = 3u;
+}
+
diff --git a/test/expressions/swizzle/write/packed_vec3/u32.wgsl.expected.spvasm b/test/expressions/swizzle/write/packed_vec3/u32.wgsl.expected.spvasm
new file mode 100644
index 0000000..622a16e
--- /dev/null
+++ b/test/expressions/swizzle/write/packed_vec3/u32.wgsl.expected.spvasm
@@ -0,0 +1,48 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 23
+; Schema: 0
+ OpCapability Shader
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
+ OpExecutionMode %unused_entry_point LocalSize 1 1 1
+ OpName %S "S"
+ OpMemberName %S 0 "v"
+ OpName %U "U"
+ OpName %unused_entry_point "unused_entry_point"
+ OpName %f "f"
+ OpDecorate %S Block
+ OpMemberDecorate %S 0 Offset 0
+ OpDecorate %U DescriptorSet 0
+ OpDecorate %U Binding 0
+ %uint = OpTypeInt 32 0
+ %v3uint = OpTypeVector %uint 3
+ %S = OpTypeStruct %v3uint
+%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
+ %U = OpVariable %_ptr_StorageBuffer_S StorageBuffer
+ %void = OpTypeVoid
+ %6 = OpTypeFunction %void
+ %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
+ %uint_1 = OpConstant %uint 1
+ %uint_2 = OpConstant %uint 2
+ %uint_3 = OpConstant %uint 3
+ %18 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+%unused_entry_point = OpFunction %void None %6
+ %9 = OpLabel
+ OpReturn
+ OpFunctionEnd
+ %f = OpFunction %void None %6
+ %11 = OpLabel
+ %14 = OpAccessChain %_ptr_StorageBuffer_v3uint %U %uint_0
+ OpStore %14 %18
+ %20 = OpAccessChain %_ptr_StorageBuffer_uint %U %uint_0 %uint_0
+ OpStore %20 %uint_1
+ %21 = OpAccessChain %_ptr_StorageBuffer_uint %U %uint_0 %uint_1
+ OpStore %21 %uint_2
+ %22 = OpAccessChain %_ptr_StorageBuffer_uint %U %uint_0 %uint_2
+ OpStore %22 %uint_3
+ OpReturn
+ OpFunctionEnd
diff --git a/test/expressions/swizzle/write/packed_vec3/u32.wgsl.expected.wgsl b/test/expressions/swizzle/write/packed_vec3/u32.wgsl.expected.wgsl
new file mode 100644
index 0000000..0e7c8da
--- /dev/null
+++ b/test/expressions/swizzle/write/packed_vec3/u32.wgsl.expected.wgsl
@@ -0,0 +1,13 @@
+[[block]]
+struct S {
+ v : vec3<u32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> U : S;
+
+fn f() {
+ U.v = vec3<u32>(1u, 2u, 3u);
+ U.v.x = 1u;
+ U.v.y = 2u;
+ U.v.z = 3u;
+}
diff --git a/test/expressions/swizzle/write/vec3/f32.wgsl b/test/expressions/swizzle/write/vec3/f32.wgsl
new file mode 100644
index 0000000..c7d1633
--- /dev/null
+++ b/test/expressions/swizzle/write/vec3/f32.wgsl
@@ -0,0 +1,13 @@
+struct S {
+ v: vec3<f32>;
+};
+
+var<private> P : S;
+
+fn f() {
+ P.v = vec3<f32>(1.0, 2.0, 3.0);
+
+ P.v.x = 1.0;
+ P.v.y = 2.0;
+ P.v.z = 3.0;
+}
diff --git a/test/expressions/swizzle/write/vec3/f32.wgsl.expected.hlsl b/test/expressions/swizzle/write/vec3/f32.wgsl.expected.hlsl
new file mode 100644
index 0000000..4cfaf20
--- /dev/null
+++ b/test/expressions/swizzle/write/vec3/f32.wgsl.expected.hlsl
@@ -0,0 +1,17 @@
+[numthreads(1, 1, 1)]
+void unused_entry_point() {
+ return;
+}
+
+struct S {
+ float3 v;
+};
+
+static S P = (S)0;
+
+void f() {
+ P.v = float3(1.0f, 2.0f, 3.0f);
+ P.v.x = 1.0f;
+ P.v.y = 2.0f;
+ P.v.z = 3.0f;
+}
diff --git a/test/expressions/swizzle/write/vec3/f32.wgsl.expected.msl b/test/expressions/swizzle/write/vec3/f32.wgsl.expected.msl
new file mode 100644
index 0000000..17624cf
--- /dev/null
+++ b/test/expressions/swizzle/write/vec3/f32.wgsl.expected.msl
@@ -0,0 +1,14 @@
+#include <metal_stdlib>
+
+using namespace metal;
+struct S {
+ float3 v;
+};
+
+void f(thread S* const tint_symbol) {
+ (*(tint_symbol)).v = float3(1.0f, 2.0f, 3.0f);
+ (*(tint_symbol)).v[0] = 1.0f;
+ (*(tint_symbol)).v[1] = 2.0f;
+ (*(tint_symbol)).v[2] = 3.0f;
+}
+
diff --git a/test/expressions/swizzle/write/vec3/f32.wgsl.expected.spvasm b/test/expressions/swizzle/write/vec3/f32.wgsl.expected.spvasm
new file mode 100644
index 0000000..4c38eeb
--- /dev/null
+++ b/test/expressions/swizzle/write/vec3/f32.wgsl.expected.spvasm
@@ -0,0 +1,49 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 27
+; Schema: 0
+ OpCapability Shader
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
+ OpExecutionMode %unused_entry_point LocalSize 1 1 1
+ OpName %S "S"
+ OpMemberName %S 0 "v"
+ OpName %P "P"
+ OpName %unused_entry_point "unused_entry_point"
+ OpName %f "f"
+ OpMemberDecorate %S 0 Offset 0
+ %float = OpTypeFloat 32
+ %v3float = OpTypeVector %float 3
+ %S = OpTypeStruct %v3float
+%_ptr_Private_S = OpTypePointer Private %S
+ %6 = OpConstantNull %S
+ %P = OpVariable %_ptr_Private_S Private %6
+ %void = OpTypeVoid
+ %7 = OpTypeFunction %void
+ %uint = OpTypeInt 32 0
+ %uint_0 = OpConstant %uint 0
+%_ptr_Private_v3float = OpTypePointer Private %v3float
+ %float_1 = OpConstant %float 1
+ %float_2 = OpConstant %float 2
+ %float_3 = OpConstant %float 3
+ %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
+%_ptr_Private_float = OpTypePointer Private %float
+ %uint_1 = OpConstant %uint 1
+ %uint_2 = OpConstant %uint 2
+%unused_entry_point = OpFunction %void None %7
+ %10 = OpLabel
+ OpReturn
+ OpFunctionEnd
+ %f = OpFunction %void None %7
+ %12 = OpLabel
+ %16 = OpAccessChain %_ptr_Private_v3float %P %uint_0
+ OpStore %16 %20
+ %22 = OpAccessChain %_ptr_Private_float %P %uint_0 %uint_0
+ OpStore %22 %float_1
+ %24 = OpAccessChain %_ptr_Private_float %P %uint_0 %uint_1
+ OpStore %24 %float_2
+ %26 = OpAccessChain %_ptr_Private_float %P %uint_0 %uint_2
+ OpStore %26 %float_3
+ OpReturn
+ OpFunctionEnd
diff --git a/test/expressions/swizzle/write/vec3/f32.wgsl.expected.wgsl b/test/expressions/swizzle/write/vec3/f32.wgsl.expected.wgsl
new file mode 100644
index 0000000..83e6e31
--- /dev/null
+++ b/test/expressions/swizzle/write/vec3/f32.wgsl.expected.wgsl
@@ -0,0 +1,12 @@
+struct S {
+ v : vec3<f32>;
+};
+
+var<private> P : S;
+
+fn f() {
+ P.v = vec3<f32>(1.0, 2.0, 3.0);
+ P.v.x = 1.0;
+ P.v.y = 2.0;
+ P.v.z = 3.0;
+}
diff --git a/test/expressions/swizzle/write/vec3/i32.wgsl b/test/expressions/swizzle/write/vec3/i32.wgsl
new file mode 100644
index 0000000..9abf24a
--- /dev/null
+++ b/test/expressions/swizzle/write/vec3/i32.wgsl
@@ -0,0 +1,13 @@
+struct S {
+ v: vec3<i32>;
+};
+
+var<private> P : S;
+
+fn f() {
+ P.v = vec3<i32>(1, 2, 3);
+
+ P.v.x = 1;
+ P.v.y = 2;
+ P.v.z = 3;
+}
diff --git a/test/expressions/swizzle/write/vec3/i32.wgsl.expected.hlsl b/test/expressions/swizzle/write/vec3/i32.wgsl.expected.hlsl
new file mode 100644
index 0000000..e3ecfbc
--- /dev/null
+++ b/test/expressions/swizzle/write/vec3/i32.wgsl.expected.hlsl
@@ -0,0 +1,17 @@
+[numthreads(1, 1, 1)]
+void unused_entry_point() {
+ return;
+}
+
+struct S {
+ int3 v;
+};
+
+static S P = (S)0;
+
+void f() {
+ P.v = int3(1, 2, 3);
+ P.v.x = 1;
+ P.v.y = 2;
+ P.v.z = 3;
+}
diff --git a/test/expressions/swizzle/write/vec3/i32.wgsl.expected.msl b/test/expressions/swizzle/write/vec3/i32.wgsl.expected.msl
new file mode 100644
index 0000000..bbd4748
--- /dev/null
+++ b/test/expressions/swizzle/write/vec3/i32.wgsl.expected.msl
@@ -0,0 +1,14 @@
+#include <metal_stdlib>
+
+using namespace metal;
+struct S {
+ int3 v;
+};
+
+void f(thread S* const tint_symbol) {
+ (*(tint_symbol)).v = int3(1, 2, 3);
+ (*(tint_symbol)).v[0] = 1;
+ (*(tint_symbol)).v[1] = 2;
+ (*(tint_symbol)).v[2] = 3;
+}
+
diff --git a/test/expressions/swizzle/write/vec3/i32.wgsl.expected.spvasm b/test/expressions/swizzle/write/vec3/i32.wgsl.expected.spvasm
new file mode 100644
index 0000000..804efe4
--- /dev/null
+++ b/test/expressions/swizzle/write/vec3/i32.wgsl.expected.spvasm
@@ -0,0 +1,49 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 27
+; Schema: 0
+ OpCapability Shader
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
+ OpExecutionMode %unused_entry_point LocalSize 1 1 1
+ OpName %S "S"
+ OpMemberName %S 0 "v"
+ OpName %P "P"
+ OpName %unused_entry_point "unused_entry_point"
+ OpName %f "f"
+ OpMemberDecorate %S 0 Offset 0
+ %int = OpTypeInt 32 1
+ %v3int = OpTypeVector %int 3
+ %S = OpTypeStruct %v3int
+%_ptr_Private_S = OpTypePointer Private %S
+ %6 = OpConstantNull %S
+ %P = OpVariable %_ptr_Private_S Private %6
+ %void = OpTypeVoid
+ %7 = OpTypeFunction %void
+ %uint = OpTypeInt 32 0
+ %uint_0 = OpConstant %uint 0
+%_ptr_Private_v3int = OpTypePointer Private %v3int
+ %int_1 = OpConstant %int 1
+ %int_2 = OpConstant %int 2
+ %int_3 = OpConstant %int 3
+ %20 = OpConstantComposite %v3int %int_1 %int_2 %int_3
+%_ptr_Private_int = OpTypePointer Private %int
+ %uint_1 = OpConstant %uint 1
+ %uint_2 = OpConstant %uint 2
+%unused_entry_point = OpFunction %void None %7
+ %10 = OpLabel
+ OpReturn
+ OpFunctionEnd
+ %f = OpFunction %void None %7
+ %12 = OpLabel
+ %16 = OpAccessChain %_ptr_Private_v3int %P %uint_0
+ OpStore %16 %20
+ %22 = OpAccessChain %_ptr_Private_int %P %uint_0 %uint_0
+ OpStore %22 %int_1
+ %24 = OpAccessChain %_ptr_Private_int %P %uint_0 %uint_1
+ OpStore %24 %int_2
+ %26 = OpAccessChain %_ptr_Private_int %P %uint_0 %uint_2
+ OpStore %26 %int_3
+ OpReturn
+ OpFunctionEnd
diff --git a/test/expressions/swizzle/write/vec3/i32.wgsl.expected.wgsl b/test/expressions/swizzle/write/vec3/i32.wgsl.expected.wgsl
new file mode 100644
index 0000000..0c055df
--- /dev/null
+++ b/test/expressions/swizzle/write/vec3/i32.wgsl.expected.wgsl
@@ -0,0 +1,12 @@
+struct S {
+ v : vec3<i32>;
+};
+
+var<private> P : S;
+
+fn f() {
+ P.v = vec3<i32>(1, 2, 3);
+ P.v.x = 1;
+ P.v.y = 2;
+ P.v.z = 3;
+}
diff --git a/test/expressions/swizzle/write/vec3/u32.wgsl b/test/expressions/swizzle/write/vec3/u32.wgsl
new file mode 100644
index 0000000..427e61e
--- /dev/null
+++ b/test/expressions/swizzle/write/vec3/u32.wgsl
@@ -0,0 +1,13 @@
+struct S {
+ v: vec3<u32>;
+};
+
+var<private> P : S;
+
+fn f() {
+ P.v = vec3<u32>(1u, 2u, 3u);
+
+ P.v.x = 1u;
+ P.v.y = 2u;
+ P.v.z = 3u;
+}
diff --git a/test/expressions/swizzle/write/vec3/u32.wgsl.expected.hlsl b/test/expressions/swizzle/write/vec3/u32.wgsl.expected.hlsl
new file mode 100644
index 0000000..172c699
--- /dev/null
+++ b/test/expressions/swizzle/write/vec3/u32.wgsl.expected.hlsl
@@ -0,0 +1,17 @@
+[numthreads(1, 1, 1)]
+void unused_entry_point() {
+ return;
+}
+
+struct S {
+ uint3 v;
+};
+
+static S P = (S)0;
+
+void f() {
+ P.v = uint3(1u, 2u, 3u);
+ P.v.x = 1u;
+ P.v.y = 2u;
+ P.v.z = 3u;
+}
diff --git a/test/expressions/swizzle/write/vec3/u32.wgsl.expected.msl b/test/expressions/swizzle/write/vec3/u32.wgsl.expected.msl
new file mode 100644
index 0000000..f665ab6
--- /dev/null
+++ b/test/expressions/swizzle/write/vec3/u32.wgsl.expected.msl
@@ -0,0 +1,14 @@
+#include <metal_stdlib>
+
+using namespace metal;
+struct S {
+ uint3 v;
+};
+
+void f(thread S* const tint_symbol) {
+ (*(tint_symbol)).v = uint3(1u, 2u, 3u);
+ (*(tint_symbol)).v[0] = 1u;
+ (*(tint_symbol)).v[1] = 2u;
+ (*(tint_symbol)).v[2] = 3u;
+}
+
diff --git a/test/expressions/swizzle/write/vec3/u32.wgsl.expected.spvasm b/test/expressions/swizzle/write/vec3/u32.wgsl.expected.spvasm
new file mode 100644
index 0000000..7c3f26b
--- /dev/null
+++ b/test/expressions/swizzle/write/vec3/u32.wgsl.expected.spvasm
@@ -0,0 +1,46 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 24
+; Schema: 0
+ OpCapability Shader
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
+ OpExecutionMode %unused_entry_point LocalSize 1 1 1
+ OpName %S "S"
+ OpMemberName %S 0 "v"
+ OpName %P "P"
+ OpName %unused_entry_point "unused_entry_point"
+ OpName %f "f"
+ OpMemberDecorate %S 0 Offset 0
+ %uint = OpTypeInt 32 0
+ %v3uint = OpTypeVector %uint 3
+ %S = OpTypeStruct %v3uint
+%_ptr_Private_S = OpTypePointer Private %S
+ %6 = OpConstantNull %S
+ %P = OpVariable %_ptr_Private_S Private %6
+ %void = OpTypeVoid
+ %7 = OpTypeFunction %void
+ %uint_0 = OpConstant %uint 0
+%_ptr_Private_v3uint = OpTypePointer Private %v3uint
+ %uint_1 = OpConstant %uint 1
+ %uint_2 = OpConstant %uint 2
+ %uint_3 = OpConstant %uint 3
+ %19 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
+%_ptr_Private_uint = OpTypePointer Private %uint
+%unused_entry_point = OpFunction %void None %7
+ %10 = OpLabel
+ OpReturn
+ OpFunctionEnd
+ %f = OpFunction %void None %7
+ %12 = OpLabel
+ %15 = OpAccessChain %_ptr_Private_v3uint %P %uint_0
+ OpStore %15 %19
+ %21 = OpAccessChain %_ptr_Private_uint %P %uint_0 %uint_0
+ OpStore %21 %uint_1
+ %22 = OpAccessChain %_ptr_Private_uint %P %uint_0 %uint_1
+ OpStore %22 %uint_2
+ %23 = OpAccessChain %_ptr_Private_uint %P %uint_0 %uint_2
+ OpStore %23 %uint_3
+ OpReturn
+ OpFunctionEnd
diff --git a/test/expressions/swizzle/write/vec3/u32.wgsl.expected.wgsl b/test/expressions/swizzle/write/vec3/u32.wgsl.expected.wgsl
new file mode 100644
index 0000000..301f985
--- /dev/null
+++ b/test/expressions/swizzle/write/vec3/u32.wgsl.expected.wgsl
@@ -0,0 +1,12 @@
+struct S {
+ v : vec3<u32>;
+};
+
+var<private> P : S;
+
+fn f() {
+ P.v = vec3<u32>(1u, 2u, 3u);
+ P.v.x = 1u;
+ P.v.y = 2u;
+ P.v.z = 3u;
+}
diff --git a/test/intrinsics/textureLoad/depth_ms.spvasm.expected.msl b/test/intrinsics/textureLoad/depth_ms.spvasm.expected.msl
index 9b56186..0923cc4 100644
--- a/test/intrinsics/textureLoad/depth_ms.spvasm.expected.msl
+++ b/test/intrinsics/textureLoad/depth_ms.spvasm.expected.msl
@@ -11,7 +11,7 @@
void textureLoad_6273b1(depth2d_ms<float, access::read> tint_symbol_5) {
float res = 0.0f;
float4 const x_17 = float4(tint_symbol_5.read(uint2(int2(0, 0)), 1), 0.0f, 0.0f, 0.0f);
- res = x_17.x;
+ res = x_17[0];
return;
}
diff --git a/test/loops/continue_in_switch.wgsl.expected.hlsl b/test/loops/continue_in_switch.wgsl.expected.hlsl
index 966973f..610efee 100644
--- a/test/loops/continue_in_switch.wgsl.expected.hlsl
+++ b/test/loops/continue_in_switch.wgsl.expected.hlsl
@@ -18,4 +18,3 @@
return;
}
C:\src\tint\test\Shader@0x0000022998AE1EF0(7,11-19): error X3708: continue cannot be used in a switch
-
diff --git a/test/ptr_ref/access/vector.spvasm.expected.msl b/test/ptr_ref/access/vector.spvasm.expected.msl
index 2d93596..442948f 100644
--- a/test/ptr_ref/access/vector.spvasm.expected.msl
+++ b/test/ptr_ref/access/vector.spvasm.expected.msl
@@ -4,7 +4,7 @@
void main_1() {
float3 v = float3(0.0f, 0.0f, 0.0f);
v = float3(1.0f, 2.0f, 3.0f);
- v.y = 5.0f;
+ v[1] = 5.0f;
return;
}
diff --git a/test/ptr_ref/access/vector.wgsl.expected.msl b/test/ptr_ref/access/vector.wgsl.expected.msl
index 6625cdb..9df7578 100644
--- a/test/ptr_ref/access/vector.wgsl.expected.msl
+++ b/test/ptr_ref/access/vector.wgsl.expected.msl
@@ -3,7 +3,7 @@
using namespace metal;
kernel void tint_symbol() {
float3 v = float3(1.0f, 2.0f, 3.0f);
- v.y = 5.0f;
+ v[1] = 5.0f;
return;
}
diff --git a/test/samples/compute_boids.wgsl.expected.msl b/test/samples/compute_boids.wgsl.expected.msl
index 9c1b8a8..48252a3 100644
--- a/test/samples/compute_boids.wgsl.expected.msl
+++ b/test/samples/compute_boids.wgsl.expected.msl
@@ -33,8 +33,8 @@
};
float4 vert_main_inner(float2 a_particlePos, float2 a_particleVel, float2 a_pos) {
- float angle = -(atan2(a_particleVel.x, a_particleVel.y));
- float2 pos = float2(((a_pos.x * cos(angle)) - (a_pos.y * sin(angle))), ((a_pos.x * sin(angle)) + (a_pos.y * cos(angle))));
+ float angle = -(atan2(a_particleVel[0], a_particleVel[1]));
+ float2 pos = float2(((a_pos[0] * cos(angle)) - (a_pos[1] * sin(angle))), ((a_pos[0] * sin(angle)) + (a_pos[1] * cos(angle))));
return float4((pos + a_particlePos), 0.0f, 1.0f);
}
@@ -57,7 +57,7 @@
}
void comp_main_inner(constant SimParams& params, device Particles& particlesA, device Particles& particlesB, uint3 gl_GlobalInvocationID) {
- uint index = gl_GlobalInvocationID.x;
+ uint index = gl_GlobalInvocationID[0];
if ((index >= 5u)) {
return;
}
@@ -74,8 +74,8 @@
if ((i == index)) {
continue;
}
- pos = particlesA.particles.arr[i].pos.xy;
- vel = particlesA.particles.arr[i].vel.xy;
+ pos = float2(particlesA.particles.arr[i].pos).xy;
+ vel = float2(particlesA.particles.arr[i].vel).xy;
if ((distance(pos, vPos) < params.rule1Distance)) {
cMass = (cMass + pos);
cMassCount = as_type<int>((as_type<uint>(cMassCount) + as_type<uint>(1)));
@@ -97,17 +97,17 @@
vVel = (((vVel + (cMass * params.rule1Scale)) + (colVel * params.rule2Scale)) + (cVel * params.rule3Scale));
vVel = (normalize(vVel) * clamp(length(vVel), 0.0f, 0.100000001f));
vPos = (vPos + (vVel * params.deltaT));
- if ((vPos.x < -1.0f)) {
- vPos.x = 1.0f;
+ if ((vPos[0] < -1.0f)) {
+ vPos[0] = 1.0f;
}
- if ((vPos.x > 1.0f)) {
- vPos.x = -1.0f;
+ if ((vPos[0] > 1.0f)) {
+ vPos[0] = -1.0f;
}
- if ((vPos.y < -1.0f)) {
- vPos.y = 1.0f;
+ if ((vPos[1] < -1.0f)) {
+ vPos[1] = 1.0f;
}
- if ((vPos.y > 1.0f)) {
- vPos.y = -1.0f;
+ if ((vPos[1] > 1.0f)) {
+ vPos[1] = -1.0f;
}
particlesB.particles.arr[index].pos = vPos;
particlesB.particles.arr[index].vel = vVel;
diff --git a/test/shader_io/compute_input_builtins.wgsl.expected.msl b/test/shader_io/compute_input_builtins.wgsl.expected.msl
index 67ecc1b..64dee7c 100644
--- a/test/shader_io/compute_input_builtins.wgsl.expected.msl
+++ b/test/shader_io/compute_input_builtins.wgsl.expected.msl
@@ -2,7 +2,7 @@
using namespace metal;
void tint_symbol_inner(uint3 local_invocation_id, uint local_invocation_index, uint3 global_invocation_id, uint3 workgroup_id, uint3 num_workgroups) {
- uint const foo = ((((local_invocation_id.x + local_invocation_index) + global_invocation_id.x) + workgroup_id.x) + num_workgroups.x);
+ uint const foo = ((((local_invocation_id[0] + local_invocation_index) + global_invocation_id[0]) + workgroup_id[0]) + num_workgroups[0]);
}
kernel void tint_symbol(uint3 local_invocation_id [[thread_position_in_threadgroup]], uint local_invocation_index [[thread_index_in_threadgroup]], uint3 global_invocation_id [[thread_position_in_grid]], uint3 workgroup_id [[threadgroup_position_in_grid]], uint3 num_workgroups [[threadgroups_per_grid]]) {
diff --git a/test/shader_io/compute_input_builtins_struct.wgsl.expected.msl b/test/shader_io/compute_input_builtins_struct.wgsl.expected.msl
index 34db10e..dc5f7ca 100644
--- a/test/shader_io/compute_input_builtins_struct.wgsl.expected.msl
+++ b/test/shader_io/compute_input_builtins_struct.wgsl.expected.msl
@@ -10,7 +10,7 @@
};
void tint_symbol_inner(ComputeInputs inputs) {
- uint const foo = ((((inputs.local_invocation_id.x + inputs.local_invocation_index) + inputs.global_invocation_id.x) + inputs.workgroup_id.x) + inputs.num_workgroups.x);
+ uint const foo = ((((inputs.local_invocation_id[0] + inputs.local_invocation_index) + inputs.global_invocation_id[0]) + inputs.workgroup_id[0]) + inputs.num_workgroups[0]);
}
kernel void tint_symbol(uint3 local_invocation_id [[thread_position_in_threadgroup]], uint local_invocation_index [[thread_index_in_threadgroup]], uint3 global_invocation_id [[thread_position_in_grid]], uint3 workgroup_id [[threadgroup_position_in_grid]], uint3 num_workgroups [[threadgroups_per_grid]]) {
diff --git a/test/shader_io/compute_input_mixed.wgsl.expected.msl b/test/shader_io/compute_input_mixed.wgsl.expected.msl
index 65ca123..e46f80d 100644
--- a/test/shader_io/compute_input_mixed.wgsl.expected.msl
+++ b/test/shader_io/compute_input_mixed.wgsl.expected.msl
@@ -9,7 +9,7 @@
};
void tint_symbol_inner(ComputeInputs0 inputs0, uint local_invocation_index, uint3 global_invocation_id, ComputeInputs1 inputs1) {
- uint const foo = (((inputs0.local_invocation_id.x + local_invocation_index) + global_invocation_id.x) + inputs1.workgroup_id.x);
+ uint const foo = (((inputs0.local_invocation_id[0] + local_invocation_index) + global_invocation_id[0]) + inputs1.workgroup_id[0]);
}
kernel void tint_symbol(uint3 local_invocation_id [[thread_position_in_threadgroup]], uint local_invocation_index [[thread_index_in_threadgroup]], uint3 global_invocation_id [[thread_position_in_grid]], uint3 workgroup_id [[threadgroup_position_in_grid]]) {