Tint/E2E: Add f16 uniform/storage buffer E2E tests

This CL add Tint E2E tests for f16 types in uniform and storage buffers.

Bug: tint:1473, tint:1502
Change-Id: I325524d2df326240cc1b080a90abf5bd076b3da1
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/107543
Reviewed-by: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Zhaoming Jiang <zhaoming.jiang@intel.com>
This commit is contained in:
Zhaoming Jiang
2022-11-30 02:47:27 +00:00
committed by Dawn LUCI CQ
parent 205e16de63
commit 776b221ae2
2995 changed files with 113726 additions and 2997 deletions

View File

@@ -1,34 +1,56 @@
struct Inner {
a : vec3<i32>,
b : i32,
c : vec3<u32>,
d : u32,
e : vec3<f32>,
f : f32,
g : vec2<i32>,
h : vec2<i32>,
i : mat2x3<f32>,
@align(16) j : mat3x2<f32>,
@align(16) k : array<vec4<i32>, 4>,
scalar_f32 : f32,
scalar_i32 : i32,
scalar_u32 : u32,
vec2_f32 : vec2<f32>,
vec2_i32 : vec2<i32>,
vec2_u32 : vec2<u32>,
vec3_f32 : vec3<f32>,
vec3_i32 : vec3<i32>,
vec3_u32 : vec3<u32>,
vec4_f32 : vec4<f32>,
vec4_i32 : vec4<i32>,
vec4_u32 : vec4<u32>,
mat2x2_f32 : mat2x2<f32>,
mat2x3_f32 : mat2x3<f32>,
mat2x4_f32 : mat2x4<f32>,
mat3x2_f32 : mat3x2<f32>,
mat3x3_f32 : mat3x3<f32>,
mat3x4_f32 : mat3x4<f32>,
mat4x2_f32 : mat4x2<f32>,
mat4x3_f32 : mat4x3<f32>,
mat4x4_f32 : mat4x4<f32>,
@align(16) arr2_vec3_f32 : array<vec3<f32>, 2>,
};
struct S {
arr : array<Inner, 8>,
};
@binding(0) @group(0) var<uniform> s : S;
@binding(0) @group(0) var<uniform> ub : S;
@compute @workgroup_size(1)
fn main(@builtin(local_invocation_index) idx : u32) {
let a = s.arr[idx].a;
let b = s.arr[idx].b;
let c = s.arr[idx].c;
let d = s.arr[idx].d;
let e = s.arr[idx].e;
let f = s.arr[idx].f;
let g = s.arr[idx].g;
let h = s.arr[idx].h;
let i = s.arr[idx].i;
let j = s.arr[idx].j;
let k = s.arr[idx].k;
}
let scalar_f32 : f32 = ub.arr[idx].scalar_f32;
let scalar_i32 : i32 = ub.arr[idx].scalar_i32;
let scalar_u32 : u32 = ub.arr[idx].scalar_u32;
let vec2_f32 : vec2<f32> = ub.arr[idx].vec2_f32;
let vec2_i32 : vec2<i32> = ub.arr[idx].vec2_i32;
let vec2_u32 : vec2<u32> = ub.arr[idx].vec2_u32;
let vec3_f32 : vec3<f32> = ub.arr[idx].vec3_f32;
let vec3_i32 : vec3<i32> = ub.arr[idx].vec3_i32;
let vec3_u32 : vec3<u32> = ub.arr[idx].vec3_u32;
let vec4_f32 : vec4<f32> = ub.arr[idx].vec4_f32;
let vec4_i32 : vec4<i32> = ub.arr[idx].vec4_i32;
let vec4_u32 : vec4<u32> = ub.arr[idx].vec4_u32;
let mat2x2_f32 : mat2x2<f32> = ub.arr[idx].mat2x2_f32;
let mat2x3_f32 : mat2x3<f32> = ub.arr[idx].mat2x3_f32;
let mat2x4_f32 : mat2x4<f32> = ub.arr[idx].mat2x4_f32;
let mat3x2_f32 : mat3x2<f32> = ub.arr[idx].mat3x2_f32;
let mat3x3_f32 : mat3x3<f32> = ub.arr[idx].mat3x3_f32;
let mat3x4_f32 : mat3x4<f32> = ub.arr[idx].mat3x4_f32;
let mat4x2_f32 : mat4x2<f32> = ub.arr[idx].mat4x2_f32;
let mat4x3_f32 : mat4x3<f32> = ub.arr[idx].mat4x3_f32;
let mat4x4_f32 : mat4x4<f32> = ub.arr[idx].mat4x4_f32;
let arr2_vec3_f32 : array<vec3<f32>, 2> = ub.arr[idx].arr2_vec3_f32;
}

View File

@@ -1,61 +1,133 @@
cbuffer cbuffer_s : register(b0, space0) {
uint4 s[96];
cbuffer cbuffer_ub : register(b0, space0) {
uint4 ub[272];
};
struct tint_symbol_1 {
uint idx : SV_GroupIndex;
};
float2x3 tint_symbol_9(uint4 buffer[96], uint offset) {
float2x2 tint_symbol_14(uint4 buffer[272], uint offset) {
const uint scalar_offset = ((offset + 0u)) / 4;
const uint scalar_offset_1 = ((offset + 16u)) / 4;
return float2x3(asfloat(buffer[scalar_offset / 4].xyz), asfloat(buffer[scalar_offset_1 / 4].xyz));
uint4 ubo_load = buffer[scalar_offset / 4];
const uint scalar_offset_1 = ((offset + 8u)) / 4;
uint4 ubo_load_1 = buffer[scalar_offset_1 / 4];
return float2x2(asfloat(((scalar_offset & 2) ? ubo_load.zw : ubo_load.xy)), asfloat(((scalar_offset_1 & 2) ? ubo_load_1.zw : ubo_load_1.xy)));
}
float3x2 tint_symbol_10(uint4 buffer[96], uint offset) {
float2x3 tint_symbol_15(uint4 buffer[272], uint offset) {
const uint scalar_offset_2 = ((offset + 0u)) / 4;
uint4 ubo_load = buffer[scalar_offset_2 / 4];
const uint scalar_offset_3 = ((offset + 8u)) / 4;
uint4 ubo_load_1 = buffer[scalar_offset_3 / 4];
const uint scalar_offset_4 = ((offset + 16u)) / 4;
uint4 ubo_load_2 = buffer[scalar_offset_4 / 4];
return float3x2(asfloat(((scalar_offset_2 & 2) ? ubo_load.zw : ubo_load.xy)), asfloat(((scalar_offset_3 & 2) ? ubo_load_1.zw : ubo_load_1.xy)), asfloat(((scalar_offset_4 & 2) ? ubo_load_2.zw : ubo_load_2.xy)));
const uint scalar_offset_3 = ((offset + 16u)) / 4;
return float2x3(asfloat(buffer[scalar_offset_2 / 4].xyz), asfloat(buffer[scalar_offset_3 / 4].xyz));
}
typedef int4 tint_symbol_12_ret[4];
tint_symbol_12_ret tint_symbol_12(uint4 buffer[96], uint offset) {
int4 arr_1[4] = (int4[4])0;
float2x4 tint_symbol_16(uint4 buffer[272], uint offset) {
const uint scalar_offset_4 = ((offset + 0u)) / 4;
const uint scalar_offset_5 = ((offset + 16u)) / 4;
return float2x4(asfloat(buffer[scalar_offset_4 / 4]), asfloat(buffer[scalar_offset_5 / 4]));
}
float3x2 tint_symbol_17(uint4 buffer[272], uint offset) {
const uint scalar_offset_6 = ((offset + 0u)) / 4;
uint4 ubo_load_2 = buffer[scalar_offset_6 / 4];
const uint scalar_offset_7 = ((offset + 8u)) / 4;
uint4 ubo_load_3 = buffer[scalar_offset_7 / 4];
const uint scalar_offset_8 = ((offset + 16u)) / 4;
uint4 ubo_load_4 = buffer[scalar_offset_8 / 4];
return float3x2(asfloat(((scalar_offset_6 & 2) ? ubo_load_2.zw : ubo_load_2.xy)), asfloat(((scalar_offset_7 & 2) ? ubo_load_3.zw : ubo_load_3.xy)), asfloat(((scalar_offset_8 & 2) ? ubo_load_4.zw : ubo_load_4.xy)));
}
float3x3 tint_symbol_18(uint4 buffer[272], uint offset) {
const uint scalar_offset_9 = ((offset + 0u)) / 4;
const uint scalar_offset_10 = ((offset + 16u)) / 4;
const uint scalar_offset_11 = ((offset + 32u)) / 4;
return float3x3(asfloat(buffer[scalar_offset_9 / 4].xyz), asfloat(buffer[scalar_offset_10 / 4].xyz), asfloat(buffer[scalar_offset_11 / 4].xyz));
}
float3x4 tint_symbol_19(uint4 buffer[272], uint offset) {
const uint scalar_offset_12 = ((offset + 0u)) / 4;
const uint scalar_offset_13 = ((offset + 16u)) / 4;
const uint scalar_offset_14 = ((offset + 32u)) / 4;
return float3x4(asfloat(buffer[scalar_offset_12 / 4]), asfloat(buffer[scalar_offset_13 / 4]), asfloat(buffer[scalar_offset_14 / 4]));
}
float4x2 tint_symbol_20(uint4 buffer[272], uint offset) {
const uint scalar_offset_15 = ((offset + 0u)) / 4;
uint4 ubo_load_5 = buffer[scalar_offset_15 / 4];
const uint scalar_offset_16 = ((offset + 8u)) / 4;
uint4 ubo_load_6 = buffer[scalar_offset_16 / 4];
const uint scalar_offset_17 = ((offset + 16u)) / 4;
uint4 ubo_load_7 = buffer[scalar_offset_17 / 4];
const uint scalar_offset_18 = ((offset + 24u)) / 4;
uint4 ubo_load_8 = buffer[scalar_offset_18 / 4];
return float4x2(asfloat(((scalar_offset_15 & 2) ? ubo_load_5.zw : ubo_load_5.xy)), asfloat(((scalar_offset_16 & 2) ? ubo_load_6.zw : ubo_load_6.xy)), asfloat(((scalar_offset_17 & 2) ? ubo_load_7.zw : ubo_load_7.xy)), asfloat(((scalar_offset_18 & 2) ? ubo_load_8.zw : ubo_load_8.xy)));
}
float4x3 tint_symbol_21(uint4 buffer[272], uint offset) {
const uint scalar_offset_19 = ((offset + 0u)) / 4;
const uint scalar_offset_20 = ((offset + 16u)) / 4;
const uint scalar_offset_21 = ((offset + 32u)) / 4;
const uint scalar_offset_22 = ((offset + 48u)) / 4;
return float4x3(asfloat(buffer[scalar_offset_19 / 4].xyz), asfloat(buffer[scalar_offset_20 / 4].xyz), asfloat(buffer[scalar_offset_21 / 4].xyz), asfloat(buffer[scalar_offset_22 / 4].xyz));
}
float4x4 tint_symbol_22(uint4 buffer[272], uint offset) {
const uint scalar_offset_23 = ((offset + 0u)) / 4;
const uint scalar_offset_24 = ((offset + 16u)) / 4;
const uint scalar_offset_25 = ((offset + 32u)) / 4;
const uint scalar_offset_26 = ((offset + 48u)) / 4;
return float4x4(asfloat(buffer[scalar_offset_23 / 4]), asfloat(buffer[scalar_offset_24 / 4]), asfloat(buffer[scalar_offset_25 / 4]), asfloat(buffer[scalar_offset_26 / 4]));
}
typedef float3 tint_symbol_23_ret[2];
tint_symbol_23_ret tint_symbol_23(uint4 buffer[272], uint offset) {
float3 arr_1[2] = (float3[2])0;
{
for(uint i_1 = 0u; (i_1 < 4u); i_1 = (i_1 + 1u)) {
const uint scalar_offset_5 = ((offset + (i_1 * 16u))) / 4;
arr_1[i_1] = asint(buffer[scalar_offset_5 / 4]);
for(uint i = 0u; (i < 2u); i = (i + 1u)) {
const uint scalar_offset_27 = ((offset + (i * 16u))) / 4;
arr_1[i] = asfloat(buffer[scalar_offset_27 / 4].xyz);
}
}
return arr_1;
}
void main_inner(uint idx) {
const uint scalar_offset_6 = ((192u * idx)) / 4;
const int3 a = asint(s[scalar_offset_6 / 4].xyz);
const uint scalar_offset_7 = (((192u * idx) + 12u)) / 4;
const int b = asint(s[scalar_offset_7 / 4][scalar_offset_7 % 4]);
const uint scalar_offset_8 = (((192u * idx) + 16u)) / 4;
const uint3 c = s[scalar_offset_8 / 4].xyz;
const uint scalar_offset_9 = (((192u * idx) + 28u)) / 4;
const uint d = s[scalar_offset_9 / 4][scalar_offset_9 % 4];
const uint scalar_offset_10 = (((192u * idx) + 32u)) / 4;
const float3 e = asfloat(s[scalar_offset_10 / 4].xyz);
const uint scalar_offset_11 = (((192u * idx) + 44u)) / 4;
const float f = asfloat(s[scalar_offset_11 / 4][scalar_offset_11 % 4]);
const uint scalar_offset_12 = (((192u * idx) + 48u)) / 4;
uint4 ubo_load_3 = s[scalar_offset_12 / 4];
const int2 g = asint(((scalar_offset_12 & 2) ? ubo_load_3.zw : ubo_load_3.xy));
const uint scalar_offset_13 = (((192u * idx) + 56u)) / 4;
uint4 ubo_load_4 = s[scalar_offset_13 / 4];
const int2 h = asint(((scalar_offset_13 & 2) ? ubo_load_4.zw : ubo_load_4.xy));
const float2x3 i = tint_symbol_9(s, ((192u * idx) + 64u));
const float3x2 j = tint_symbol_10(s, ((192u * idx) + 96u));
const int4 k[4] = tint_symbol_12(s, ((192u * idx) + 128u));
const uint scalar_offset_28 = ((544u * idx)) / 4;
const float scalar_f32 = asfloat(ub[scalar_offset_28 / 4][scalar_offset_28 % 4]);
const uint scalar_offset_29 = (((544u * idx) + 4u)) / 4;
const int scalar_i32 = asint(ub[scalar_offset_29 / 4][scalar_offset_29 % 4]);
const uint scalar_offset_30 = (((544u * idx) + 8u)) / 4;
const uint scalar_u32 = ub[scalar_offset_30 / 4][scalar_offset_30 % 4];
const uint scalar_offset_31 = (((544u * idx) + 16u)) / 4;
uint4 ubo_load_9 = ub[scalar_offset_31 / 4];
const float2 vec2_f32 = asfloat(((scalar_offset_31 & 2) ? ubo_load_9.zw : ubo_load_9.xy));
const uint scalar_offset_32 = (((544u * idx) + 24u)) / 4;
uint4 ubo_load_10 = ub[scalar_offset_32 / 4];
const int2 vec2_i32 = asint(((scalar_offset_32 & 2) ? ubo_load_10.zw : ubo_load_10.xy));
const uint scalar_offset_33 = (((544u * idx) + 32u)) / 4;
uint4 ubo_load_11 = ub[scalar_offset_33 / 4];
const uint2 vec2_u32 = ((scalar_offset_33 & 2) ? ubo_load_11.zw : ubo_load_11.xy);
const uint scalar_offset_34 = (((544u * idx) + 48u)) / 4;
const float3 vec3_f32 = asfloat(ub[scalar_offset_34 / 4].xyz);
const uint scalar_offset_35 = (((544u * idx) + 64u)) / 4;
const int3 vec3_i32 = asint(ub[scalar_offset_35 / 4].xyz);
const uint scalar_offset_36 = (((544u * idx) + 80u)) / 4;
const uint3 vec3_u32 = ub[scalar_offset_36 / 4].xyz;
const uint scalar_offset_37 = (((544u * idx) + 96u)) / 4;
const float4 vec4_f32 = asfloat(ub[scalar_offset_37 / 4]);
const uint scalar_offset_38 = (((544u * idx) + 112u)) / 4;
const int4 vec4_i32 = asint(ub[scalar_offset_38 / 4]);
const uint scalar_offset_39 = (((544u * idx) + 128u)) / 4;
const uint4 vec4_u32 = ub[scalar_offset_39 / 4];
const float2x2 mat2x2_f32 = tint_symbol_14(ub, ((544u * idx) + 144u));
const float2x3 mat2x3_f32 = tint_symbol_15(ub, ((544u * idx) + 160u));
const float2x4 mat2x4_f32 = tint_symbol_16(ub, ((544u * idx) + 192u));
const float3x2 mat3x2_f32 = tint_symbol_17(ub, ((544u * idx) + 224u));
const float3x3 mat3x3_f32 = tint_symbol_18(ub, ((544u * idx) + 256u));
const float3x4 mat3x4_f32 = tint_symbol_19(ub, ((544u * idx) + 304u));
const float4x2 mat4x2_f32 = tint_symbol_20(ub, ((544u * idx) + 352u));
const float4x3 mat4x3_f32 = tint_symbol_21(ub, ((544u * idx) + 384u));
const float4x4 mat4x4_f32 = tint_symbol_22(ub, ((544u * idx) + 448u));
const float3 arr2_vec3_f32[2] = tint_symbol_23(ub, ((544u * idx) + 512u));
}
[numthreads(1, 1, 1)]

View File

@@ -1,61 +1,133 @@
cbuffer cbuffer_s : register(b0, space0) {
uint4 s[96];
cbuffer cbuffer_ub : register(b0, space0) {
uint4 ub[272];
};
struct tint_symbol_1 {
uint idx : SV_GroupIndex;
};
float2x3 tint_symbol_9(uint4 buffer[96], uint offset) {
float2x2 tint_symbol_14(uint4 buffer[272], uint offset) {
const uint scalar_offset = ((offset + 0u)) / 4;
const uint scalar_offset_1 = ((offset + 16u)) / 4;
return float2x3(asfloat(buffer[scalar_offset / 4].xyz), asfloat(buffer[scalar_offset_1 / 4].xyz));
uint4 ubo_load = buffer[scalar_offset / 4];
const uint scalar_offset_1 = ((offset + 8u)) / 4;
uint4 ubo_load_1 = buffer[scalar_offset_1 / 4];
return float2x2(asfloat(((scalar_offset & 2) ? ubo_load.zw : ubo_load.xy)), asfloat(((scalar_offset_1 & 2) ? ubo_load_1.zw : ubo_load_1.xy)));
}
float3x2 tint_symbol_10(uint4 buffer[96], uint offset) {
float2x3 tint_symbol_15(uint4 buffer[272], uint offset) {
const uint scalar_offset_2 = ((offset + 0u)) / 4;
uint4 ubo_load = buffer[scalar_offset_2 / 4];
const uint scalar_offset_3 = ((offset + 8u)) / 4;
uint4 ubo_load_1 = buffer[scalar_offset_3 / 4];
const uint scalar_offset_4 = ((offset + 16u)) / 4;
uint4 ubo_load_2 = buffer[scalar_offset_4 / 4];
return float3x2(asfloat(((scalar_offset_2 & 2) ? ubo_load.zw : ubo_load.xy)), asfloat(((scalar_offset_3 & 2) ? ubo_load_1.zw : ubo_load_1.xy)), asfloat(((scalar_offset_4 & 2) ? ubo_load_2.zw : ubo_load_2.xy)));
const uint scalar_offset_3 = ((offset + 16u)) / 4;
return float2x3(asfloat(buffer[scalar_offset_2 / 4].xyz), asfloat(buffer[scalar_offset_3 / 4].xyz));
}
typedef int4 tint_symbol_12_ret[4];
tint_symbol_12_ret tint_symbol_12(uint4 buffer[96], uint offset) {
int4 arr_1[4] = (int4[4])0;
float2x4 tint_symbol_16(uint4 buffer[272], uint offset) {
const uint scalar_offset_4 = ((offset + 0u)) / 4;
const uint scalar_offset_5 = ((offset + 16u)) / 4;
return float2x4(asfloat(buffer[scalar_offset_4 / 4]), asfloat(buffer[scalar_offset_5 / 4]));
}
float3x2 tint_symbol_17(uint4 buffer[272], uint offset) {
const uint scalar_offset_6 = ((offset + 0u)) / 4;
uint4 ubo_load_2 = buffer[scalar_offset_6 / 4];
const uint scalar_offset_7 = ((offset + 8u)) / 4;
uint4 ubo_load_3 = buffer[scalar_offset_7 / 4];
const uint scalar_offset_8 = ((offset + 16u)) / 4;
uint4 ubo_load_4 = buffer[scalar_offset_8 / 4];
return float3x2(asfloat(((scalar_offset_6 & 2) ? ubo_load_2.zw : ubo_load_2.xy)), asfloat(((scalar_offset_7 & 2) ? ubo_load_3.zw : ubo_load_3.xy)), asfloat(((scalar_offset_8 & 2) ? ubo_load_4.zw : ubo_load_4.xy)));
}
float3x3 tint_symbol_18(uint4 buffer[272], uint offset) {
const uint scalar_offset_9 = ((offset + 0u)) / 4;
const uint scalar_offset_10 = ((offset + 16u)) / 4;
const uint scalar_offset_11 = ((offset + 32u)) / 4;
return float3x3(asfloat(buffer[scalar_offset_9 / 4].xyz), asfloat(buffer[scalar_offset_10 / 4].xyz), asfloat(buffer[scalar_offset_11 / 4].xyz));
}
float3x4 tint_symbol_19(uint4 buffer[272], uint offset) {
const uint scalar_offset_12 = ((offset + 0u)) / 4;
const uint scalar_offset_13 = ((offset + 16u)) / 4;
const uint scalar_offset_14 = ((offset + 32u)) / 4;
return float3x4(asfloat(buffer[scalar_offset_12 / 4]), asfloat(buffer[scalar_offset_13 / 4]), asfloat(buffer[scalar_offset_14 / 4]));
}
float4x2 tint_symbol_20(uint4 buffer[272], uint offset) {
const uint scalar_offset_15 = ((offset + 0u)) / 4;
uint4 ubo_load_5 = buffer[scalar_offset_15 / 4];
const uint scalar_offset_16 = ((offset + 8u)) / 4;
uint4 ubo_load_6 = buffer[scalar_offset_16 / 4];
const uint scalar_offset_17 = ((offset + 16u)) / 4;
uint4 ubo_load_7 = buffer[scalar_offset_17 / 4];
const uint scalar_offset_18 = ((offset + 24u)) / 4;
uint4 ubo_load_8 = buffer[scalar_offset_18 / 4];
return float4x2(asfloat(((scalar_offset_15 & 2) ? ubo_load_5.zw : ubo_load_5.xy)), asfloat(((scalar_offset_16 & 2) ? ubo_load_6.zw : ubo_load_6.xy)), asfloat(((scalar_offset_17 & 2) ? ubo_load_7.zw : ubo_load_7.xy)), asfloat(((scalar_offset_18 & 2) ? ubo_load_8.zw : ubo_load_8.xy)));
}
float4x3 tint_symbol_21(uint4 buffer[272], uint offset) {
const uint scalar_offset_19 = ((offset + 0u)) / 4;
const uint scalar_offset_20 = ((offset + 16u)) / 4;
const uint scalar_offset_21 = ((offset + 32u)) / 4;
const uint scalar_offset_22 = ((offset + 48u)) / 4;
return float4x3(asfloat(buffer[scalar_offset_19 / 4].xyz), asfloat(buffer[scalar_offset_20 / 4].xyz), asfloat(buffer[scalar_offset_21 / 4].xyz), asfloat(buffer[scalar_offset_22 / 4].xyz));
}
float4x4 tint_symbol_22(uint4 buffer[272], uint offset) {
const uint scalar_offset_23 = ((offset + 0u)) / 4;
const uint scalar_offset_24 = ((offset + 16u)) / 4;
const uint scalar_offset_25 = ((offset + 32u)) / 4;
const uint scalar_offset_26 = ((offset + 48u)) / 4;
return float4x4(asfloat(buffer[scalar_offset_23 / 4]), asfloat(buffer[scalar_offset_24 / 4]), asfloat(buffer[scalar_offset_25 / 4]), asfloat(buffer[scalar_offset_26 / 4]));
}
typedef float3 tint_symbol_23_ret[2];
tint_symbol_23_ret tint_symbol_23(uint4 buffer[272], uint offset) {
float3 arr_1[2] = (float3[2])0;
{
for(uint i_1 = 0u; (i_1 < 4u); i_1 = (i_1 + 1u)) {
const uint scalar_offset_5 = ((offset + (i_1 * 16u))) / 4;
arr_1[i_1] = asint(buffer[scalar_offset_5 / 4]);
for(uint i = 0u; (i < 2u); i = (i + 1u)) {
const uint scalar_offset_27 = ((offset + (i * 16u))) / 4;
arr_1[i] = asfloat(buffer[scalar_offset_27 / 4].xyz);
}
}
return arr_1;
}
void main_inner(uint idx) {
const uint scalar_offset_6 = ((192u * idx)) / 4;
const int3 a = asint(s[scalar_offset_6 / 4].xyz);
const uint scalar_offset_7 = (((192u * idx) + 12u)) / 4;
const int b = asint(s[scalar_offset_7 / 4][scalar_offset_7 % 4]);
const uint scalar_offset_8 = (((192u * idx) + 16u)) / 4;
const uint3 c = s[scalar_offset_8 / 4].xyz;
const uint scalar_offset_9 = (((192u * idx) + 28u)) / 4;
const uint d = s[scalar_offset_9 / 4][scalar_offset_9 % 4];
const uint scalar_offset_10 = (((192u * idx) + 32u)) / 4;
const float3 e = asfloat(s[scalar_offset_10 / 4].xyz);
const uint scalar_offset_11 = (((192u * idx) + 44u)) / 4;
const float f = asfloat(s[scalar_offset_11 / 4][scalar_offset_11 % 4]);
const uint scalar_offset_12 = (((192u * idx) + 48u)) / 4;
uint4 ubo_load_3 = s[scalar_offset_12 / 4];
const int2 g = asint(((scalar_offset_12 & 2) ? ubo_load_3.zw : ubo_load_3.xy));
const uint scalar_offset_13 = (((192u * idx) + 56u)) / 4;
uint4 ubo_load_4 = s[scalar_offset_13 / 4];
const int2 h = asint(((scalar_offset_13 & 2) ? ubo_load_4.zw : ubo_load_4.xy));
const float2x3 i = tint_symbol_9(s, ((192u * idx) + 64u));
const float3x2 j = tint_symbol_10(s, ((192u * idx) + 96u));
const int4 k[4] = tint_symbol_12(s, ((192u * idx) + 128u));
const uint scalar_offset_28 = ((544u * idx)) / 4;
const float scalar_f32 = asfloat(ub[scalar_offset_28 / 4][scalar_offset_28 % 4]);
const uint scalar_offset_29 = (((544u * idx) + 4u)) / 4;
const int scalar_i32 = asint(ub[scalar_offset_29 / 4][scalar_offset_29 % 4]);
const uint scalar_offset_30 = (((544u * idx) + 8u)) / 4;
const uint scalar_u32 = ub[scalar_offset_30 / 4][scalar_offset_30 % 4];
const uint scalar_offset_31 = (((544u * idx) + 16u)) / 4;
uint4 ubo_load_9 = ub[scalar_offset_31 / 4];
const float2 vec2_f32 = asfloat(((scalar_offset_31 & 2) ? ubo_load_9.zw : ubo_load_9.xy));
const uint scalar_offset_32 = (((544u * idx) + 24u)) / 4;
uint4 ubo_load_10 = ub[scalar_offset_32 / 4];
const int2 vec2_i32 = asint(((scalar_offset_32 & 2) ? ubo_load_10.zw : ubo_load_10.xy));
const uint scalar_offset_33 = (((544u * idx) + 32u)) / 4;
uint4 ubo_load_11 = ub[scalar_offset_33 / 4];
const uint2 vec2_u32 = ((scalar_offset_33 & 2) ? ubo_load_11.zw : ubo_load_11.xy);
const uint scalar_offset_34 = (((544u * idx) + 48u)) / 4;
const float3 vec3_f32 = asfloat(ub[scalar_offset_34 / 4].xyz);
const uint scalar_offset_35 = (((544u * idx) + 64u)) / 4;
const int3 vec3_i32 = asint(ub[scalar_offset_35 / 4].xyz);
const uint scalar_offset_36 = (((544u * idx) + 80u)) / 4;
const uint3 vec3_u32 = ub[scalar_offset_36 / 4].xyz;
const uint scalar_offset_37 = (((544u * idx) + 96u)) / 4;
const float4 vec4_f32 = asfloat(ub[scalar_offset_37 / 4]);
const uint scalar_offset_38 = (((544u * idx) + 112u)) / 4;
const int4 vec4_i32 = asint(ub[scalar_offset_38 / 4]);
const uint scalar_offset_39 = (((544u * idx) + 128u)) / 4;
const uint4 vec4_u32 = ub[scalar_offset_39 / 4];
const float2x2 mat2x2_f32 = tint_symbol_14(ub, ((544u * idx) + 144u));
const float2x3 mat2x3_f32 = tint_symbol_15(ub, ((544u * idx) + 160u));
const float2x4 mat2x4_f32 = tint_symbol_16(ub, ((544u * idx) + 192u));
const float3x2 mat3x2_f32 = tint_symbol_17(ub, ((544u * idx) + 224u));
const float3x3 mat3x3_f32 = tint_symbol_18(ub, ((544u * idx) + 256u));
const float3x4 mat3x4_f32 = tint_symbol_19(ub, ((544u * idx) + 304u));
const float4x2 mat4x2_f32 = tint_symbol_20(ub, ((544u * idx) + 352u));
const float4x3 mat4x3_f32 = tint_symbol_21(ub, ((544u * idx) + 384u));
const float4x4 mat4x4_f32 = tint_symbol_22(ub, ((544u * idx) + 448u));
const float3 arr2_vec3_f32[2] = tint_symbol_23(ub, ((544u * idx) + 512u));
}
[numthreads(1, 1, 1)]

View File

@@ -1,37 +1,75 @@
#version 310 es
struct Inner {
ivec3 a;
int b;
uvec3 c;
uint d;
vec3 e;
float f;
ivec2 g;
ivec2 h;
mat2x3 i;
mat3x2 j;
float scalar_f32;
int scalar_i32;
uint scalar_u32;
uint pad;
vec2 vec2_f32;
ivec2 vec2_i32;
uvec2 vec2_u32;
uint pad_1;
ivec4 k[4];
uint pad_2;
vec3 vec3_f32;
uint pad_3;
ivec3 vec3_i32;
uint pad_4;
uvec3 vec3_u32;
uint pad_5;
vec4 vec4_f32;
ivec4 vec4_i32;
uvec4 vec4_u32;
mat2 mat2x2_f32;
mat2x3 mat2x3_f32;
mat2x4 mat2x4_f32;
mat3x2 mat3x2_f32;
uint pad_6;
uint pad_7;
mat3 mat3x3_f32;
mat3x4 mat3x4_f32;
mat4x2 mat4x2_f32;
mat4x3 mat4x3_f32;
mat4 mat4x4_f32;
vec3 arr2_vec3_f32[2];
};
struct Inner_std140 {
ivec3 a;
int b;
uvec3 c;
uint d;
vec3 e;
float f;
ivec2 g;
ivec2 h;
mat2x3 i;
vec2 j_0;
vec2 j_1;
vec2 j_2;
float scalar_f32;
int scalar_i32;
uint scalar_u32;
uint pad;
vec2 vec2_f32;
ivec2 vec2_i32;
uvec2 vec2_u32;
uint pad_1;
ivec4 k[4];
uint pad_2;
vec3 vec3_f32;
uint pad_3;
ivec3 vec3_i32;
uint pad_4;
uvec3 vec3_u32;
uint pad_5;
vec4 vec4_f32;
ivec4 vec4_i32;
uvec4 vec4_u32;
vec2 mat2x2_f32_0;
vec2 mat2x2_f32_1;
mat2x3 mat2x3_f32;
mat2x4 mat2x4_f32;
vec2 mat3x2_f32_0;
vec2 mat3x2_f32_1;
vec2 mat3x2_f32_2;
uint pad_6;
uint pad_7;
mat3 mat3x3_f32;
mat3x4 mat3x4_f32;
vec2 mat4x2_f32_0;
vec2 mat4x2_f32_1;
vec2 mat4x2_f32_2;
vec2 mat4x2_f32_3;
mat4x3 mat4x3_f32;
mat4 mat4x4_f32;
vec3 arr2_vec3_f32[2];
};
struct S {
@@ -42,27 +80,48 @@ struct S_std140 {
Inner_std140 arr[8];
};
layout(binding = 0, std140) uniform s_block_std140_ubo {
layout(binding = 0, std140) uniform ub_block_std140_ubo {
S_std140 inner;
} s;
} ub;
mat3x2 load_s_inner_arr_p0_j(uint p0) {
mat2 load_ub_inner_arr_p0_mat2x2_f32(uint p0) {
uint s_save = p0;
return mat3x2(s.inner.arr[s_save].j_0, s.inner.arr[s_save].j_1, s.inner.arr[s_save].j_2);
return mat2(ub.inner.arr[s_save].mat2x2_f32_0, ub.inner.arr[s_save].mat2x2_f32_1);
}
mat3x2 load_ub_inner_arr_p0_mat3x2_f32(uint p0) {
uint s_save_1 = p0;
return mat3x2(ub.inner.arr[s_save_1].mat3x2_f32_0, ub.inner.arr[s_save_1].mat3x2_f32_1, ub.inner.arr[s_save_1].mat3x2_f32_2);
}
mat4x2 load_ub_inner_arr_p0_mat4x2_f32(uint p0) {
uint s_save_2 = p0;
return mat4x2(ub.inner.arr[s_save_2].mat4x2_f32_0, ub.inner.arr[s_save_2].mat4x2_f32_1, ub.inner.arr[s_save_2].mat4x2_f32_2, ub.inner.arr[s_save_2].mat4x2_f32_3);
}
void tint_symbol(uint idx) {
ivec3 a = s.inner.arr[idx].a;
int b = s.inner.arr[idx].b;
uvec3 c = s.inner.arr[idx].c;
uint d = s.inner.arr[idx].d;
vec3 e = s.inner.arr[idx].e;
float f = s.inner.arr[idx].f;
ivec2 g = s.inner.arr[idx].g;
ivec2 h = s.inner.arr[idx].h;
mat2x3 i = s.inner.arr[idx].i;
mat3x2 j = load_s_inner_arr_p0_j(uint(idx));
ivec4 k[4] = s.inner.arr[idx].k;
float scalar_f32 = ub.inner.arr[idx].scalar_f32;
int scalar_i32 = ub.inner.arr[idx].scalar_i32;
uint scalar_u32 = ub.inner.arr[idx].scalar_u32;
vec2 vec2_f32 = ub.inner.arr[idx].vec2_f32;
ivec2 vec2_i32 = ub.inner.arr[idx].vec2_i32;
uvec2 vec2_u32 = ub.inner.arr[idx].vec2_u32;
vec3 vec3_f32 = ub.inner.arr[idx].vec3_f32;
ivec3 vec3_i32 = ub.inner.arr[idx].vec3_i32;
uvec3 vec3_u32 = ub.inner.arr[idx].vec3_u32;
vec4 vec4_f32 = ub.inner.arr[idx].vec4_f32;
ivec4 vec4_i32 = ub.inner.arr[idx].vec4_i32;
uvec4 vec4_u32 = ub.inner.arr[idx].vec4_u32;
mat2 mat2x2_f32 = load_ub_inner_arr_p0_mat2x2_f32(uint(idx));
mat2x3 mat2x3_f32 = ub.inner.arr[idx].mat2x3_f32;
mat2x4 mat2x4_f32 = ub.inner.arr[idx].mat2x4_f32;
mat3x2 mat3x2_f32 = load_ub_inner_arr_p0_mat3x2_f32(uint(idx));
mat3 mat3x3_f32 = ub.inner.arr[idx].mat3x3_f32;
mat3x4 mat3x4_f32 = ub.inner.arr[idx].mat3x4_f32;
mat4x2 mat4x2_f32 = load_ub_inner_arr_p0_mat4x2_f32(uint(idx));
mat4x3 mat4x3_f32 = ub.inner.arr[idx].mat4x3_f32;
mat4 mat4x4_f32 = ub.inner.arr[idx].mat4x4_f32;
vec3 arr2_vec3_f32[2] = ub.inner.arr[idx].arr2_vec3_f32;
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;

View File

@@ -15,18 +15,34 @@ struct tint_array {
};
struct Inner {
/* 0x0000 */ packed_int3 a;
/* 0x000c */ int b;
/* 0x0010 */ packed_uint3 c;
/* 0x001c */ uint d;
/* 0x0020 */ packed_float3 e;
/* 0x002c */ float f;
/* 0x0030 */ int2 g;
/* 0x0038 */ int2 h;
/* 0x0040 */ float2x3 i;
/* 0x0060 */ float3x2 j;
/* 0x0078 */ tint_array<int8_t, 8> tint_pad;
/* 0x0080 */ tint_array<int4, 4> k;
/* 0x0000 */ float scalar_f32;
/* 0x0004 */ int scalar_i32;
/* 0x0008 */ uint scalar_u32;
/* 0x000c */ tint_array<int8_t, 4> tint_pad;
/* 0x0010 */ float2 vec2_f32;
/* 0x0018 */ int2 vec2_i32;
/* 0x0020 */ uint2 vec2_u32;
/* 0x0028 */ tint_array<int8_t, 8> tint_pad_1;
/* 0x0030 */ packed_float3 vec3_f32;
/* 0x003c */ tint_array<int8_t, 4> tint_pad_2;
/* 0x0040 */ packed_int3 vec3_i32;
/* 0x004c */ tint_array<int8_t, 4> tint_pad_3;
/* 0x0050 */ packed_uint3 vec3_u32;
/* 0x005c */ tint_array<int8_t, 4> tint_pad_4;
/* 0x0060 */ float4 vec4_f32;
/* 0x0070 */ int4 vec4_i32;
/* 0x0080 */ uint4 vec4_u32;
/* 0x0090 */ float2x2 mat2x2_f32;
/* 0x00a0 */ float2x3 mat2x3_f32;
/* 0x00c0 */ float2x4 mat2x4_f32;
/* 0x00e0 */ float3x2 mat3x2_f32;
/* 0x00f8 */ tint_array<int8_t, 8> tint_pad_5;
/* 0x0100 */ float3x3 mat3x3_f32;
/* 0x0130 */ float3x4 mat3x4_f32;
/* 0x0160 */ float4x2 mat4x2_f32;
/* 0x0180 */ float4x3 mat4x3_f32;
/* 0x01c0 */ float4x4 mat4x4_f32;
/* 0x0200 */ tint_array<float3, 2> arr2_vec3_f32;
};
struct S {
@@ -34,17 +50,28 @@ struct S {
};
void tint_symbol_inner(uint idx, const constant S* const tint_symbol_1) {
int3 const a = int3((*(tint_symbol_1)).arr[idx].a);
int const b = (*(tint_symbol_1)).arr[idx].b;
uint3 const c = uint3((*(tint_symbol_1)).arr[idx].c);
uint const d = (*(tint_symbol_1)).arr[idx].d;
float3 const e = float3((*(tint_symbol_1)).arr[idx].e);
float const f = (*(tint_symbol_1)).arr[idx].f;
int2 const g = (*(tint_symbol_1)).arr[idx].g;
int2 const h = (*(tint_symbol_1)).arr[idx].h;
float2x3 const i = (*(tint_symbol_1)).arr[idx].i;
float3x2 const j = (*(tint_symbol_1)).arr[idx].j;
tint_array<int4, 4> const k = (*(tint_symbol_1)).arr[idx].k;
float const scalar_f32 = (*(tint_symbol_1)).arr[idx].scalar_f32;
int const scalar_i32 = (*(tint_symbol_1)).arr[idx].scalar_i32;
uint const scalar_u32 = (*(tint_symbol_1)).arr[idx].scalar_u32;
float2 const vec2_f32 = (*(tint_symbol_1)).arr[idx].vec2_f32;
int2 const vec2_i32 = (*(tint_symbol_1)).arr[idx].vec2_i32;
uint2 const vec2_u32 = (*(tint_symbol_1)).arr[idx].vec2_u32;
float3 const vec3_f32 = float3((*(tint_symbol_1)).arr[idx].vec3_f32);
int3 const vec3_i32 = int3((*(tint_symbol_1)).arr[idx].vec3_i32);
uint3 const vec3_u32 = uint3((*(tint_symbol_1)).arr[idx].vec3_u32);
float4 const vec4_f32 = (*(tint_symbol_1)).arr[idx].vec4_f32;
int4 const vec4_i32 = (*(tint_symbol_1)).arr[idx].vec4_i32;
uint4 const vec4_u32 = (*(tint_symbol_1)).arr[idx].vec4_u32;
float2x2 const mat2x2_f32 = (*(tint_symbol_1)).arr[idx].mat2x2_f32;
float2x3 const mat2x3_f32 = (*(tint_symbol_1)).arr[idx].mat2x3_f32;
float2x4 const mat2x4_f32 = (*(tint_symbol_1)).arr[idx].mat2x4_f32;
float3x2 const mat3x2_f32 = (*(tint_symbol_1)).arr[idx].mat3x2_f32;
float3x3 const mat3x3_f32 = (*(tint_symbol_1)).arr[idx].mat3x3_f32;
float3x4 const mat3x4_f32 = (*(tint_symbol_1)).arr[idx].mat3x4_f32;
float4x2 const mat4x2_f32 = (*(tint_symbol_1)).arr[idx].mat4x2_f32;
float4x3 const mat4x3_f32 = (*(tint_symbol_1)).arr[idx].mat4x3_f32;
float4x4 const mat4x4_f32 = (*(tint_symbol_1)).arr[idx].mat4x4_f32;
tint_array<float3, 2> const arr2_vec3_f32 = (*(tint_symbol_1)).arr[idx].arr2_vec3_f32;
}
kernel void tint_symbol(const constant S* tint_symbol_2 [[buffer(0)]], uint idx [[thread_index_in_threadgroup]]) {

View File

@@ -1,151 +1,277 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
; Bound: 93
; Bound: 181
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %main "main" %idx_1
OpExecutionMode %main LocalSize 1 1 1
OpName %idx_1 "idx_1"
OpName %s_block_std140 "s_block_std140"
OpMemberName %s_block_std140 0 "inner"
OpName %ub_block_std140 "ub_block_std140"
OpMemberName %ub_block_std140 0 "inner"
OpName %S_std140 "S_std140"
OpMemberName %S_std140 0 "arr"
OpName %Inner_std140 "Inner_std140"
OpMemberName %Inner_std140 0 "a"
OpMemberName %Inner_std140 1 "b"
OpMemberName %Inner_std140 2 "c"
OpMemberName %Inner_std140 3 "d"
OpMemberName %Inner_std140 4 "e"
OpMemberName %Inner_std140 5 "f"
OpMemberName %Inner_std140 6 "g"
OpMemberName %Inner_std140 7 "h"
OpMemberName %Inner_std140 8 "i"
OpMemberName %Inner_std140 9 "j_0"
OpMemberName %Inner_std140 10 "j_1"
OpMemberName %Inner_std140 11 "j_2"
OpMemberName %Inner_std140 12 "k"
OpName %s "s"
OpName %load_s_inner_arr_p0_j "load_s_inner_arr_p0_j"
OpMemberName %Inner_std140 0 "scalar_f32"
OpMemberName %Inner_std140 1 "scalar_i32"
OpMemberName %Inner_std140 2 "scalar_u32"
OpMemberName %Inner_std140 3 "vec2_f32"
OpMemberName %Inner_std140 4 "vec2_i32"
OpMemberName %Inner_std140 5 "vec2_u32"
OpMemberName %Inner_std140 6 "vec3_f32"
OpMemberName %Inner_std140 7 "vec3_i32"
OpMemberName %Inner_std140 8 "vec3_u32"
OpMemberName %Inner_std140 9 "vec4_f32"
OpMemberName %Inner_std140 10 "vec4_i32"
OpMemberName %Inner_std140 11 "vec4_u32"
OpMemberName %Inner_std140 12 "mat2x2_f32_0"
OpMemberName %Inner_std140 13 "mat2x2_f32_1"
OpMemberName %Inner_std140 14 "mat2x3_f32"
OpMemberName %Inner_std140 15 "mat2x4_f32"
OpMemberName %Inner_std140 16 "mat3x2_f32_0"
OpMemberName %Inner_std140 17 "mat3x2_f32_1"
OpMemberName %Inner_std140 18 "mat3x2_f32_2"
OpMemberName %Inner_std140 19 "mat3x3_f32"
OpMemberName %Inner_std140 20 "mat3x4_f32"
OpMemberName %Inner_std140 21 "mat4x2_f32_0"
OpMemberName %Inner_std140 22 "mat4x2_f32_1"
OpMemberName %Inner_std140 23 "mat4x2_f32_2"
OpMemberName %Inner_std140 24 "mat4x2_f32_3"
OpMemberName %Inner_std140 25 "mat4x3_f32"
OpMemberName %Inner_std140 26 "mat4x4_f32"
OpMemberName %Inner_std140 27 "arr2_vec3_f32"
OpName %ub "ub"
OpName %load_ub_inner_arr_p0_mat2x2_f32 "load_ub_inner_arr_p0_mat2x2_f32"
OpName %p0 "p0"
OpName %load_ub_inner_arr_p0_mat3x2_f32 "load_ub_inner_arr_p0_mat3x2_f32"
OpName %p0_0 "p0"
OpName %load_ub_inner_arr_p0_mat4x2_f32 "load_ub_inner_arr_p0_mat4x2_f32"
OpName %p0_1 "p0"
OpName %main_inner "main_inner"
OpName %idx "idx"
OpName %main "main"
OpDecorate %idx_1 BuiltIn LocalInvocationIndex
OpDecorate %s_block_std140 Block
OpMemberDecorate %s_block_std140 0 Offset 0
OpDecorate %ub_block_std140 Block
OpMemberDecorate %ub_block_std140 0 Offset 0
OpMemberDecorate %S_std140 0 Offset 0
OpMemberDecorate %Inner_std140 0 Offset 0
OpMemberDecorate %Inner_std140 1 Offset 12
OpMemberDecorate %Inner_std140 2 Offset 16
OpMemberDecorate %Inner_std140 3 Offset 28
OpMemberDecorate %Inner_std140 4 Offset 32
OpMemberDecorate %Inner_std140 5 Offset 44
OpMemberDecorate %Inner_std140 1 Offset 4
OpMemberDecorate %Inner_std140 2 Offset 8
OpMemberDecorate %Inner_std140 3 Offset 16
OpMemberDecorate %Inner_std140 4 Offset 24
OpMemberDecorate %Inner_std140 5 Offset 32
OpMemberDecorate %Inner_std140 6 Offset 48
OpMemberDecorate %Inner_std140 7 Offset 56
OpMemberDecorate %Inner_std140 8 Offset 64
OpMemberDecorate %Inner_std140 8 ColMajor
OpMemberDecorate %Inner_std140 8 MatrixStride 16
OpMemberDecorate %Inner_std140 7 Offset 64
OpMemberDecorate %Inner_std140 8 Offset 80
OpMemberDecorate %Inner_std140 9 Offset 96
OpMemberDecorate %Inner_std140 10 Offset 104
OpMemberDecorate %Inner_std140 11 Offset 112
OpMemberDecorate %Inner_std140 12 Offset 128
OpDecorate %_arr_v4int_uint_4 ArrayStride 16
OpDecorate %_arr_Inner_std140_uint_8 ArrayStride 192
OpDecorate %s NonWritable
OpDecorate %s Binding 0
OpDecorate %s DescriptorSet 0
OpMemberDecorate %Inner_std140 10 Offset 112
OpMemberDecorate %Inner_std140 11 Offset 128
OpMemberDecorate %Inner_std140 12 Offset 144
OpMemberDecorate %Inner_std140 13 Offset 152
OpMemberDecorate %Inner_std140 14 Offset 160
OpMemberDecorate %Inner_std140 14 ColMajor
OpMemberDecorate %Inner_std140 14 MatrixStride 16
OpMemberDecorate %Inner_std140 15 Offset 192
OpMemberDecorate %Inner_std140 15 ColMajor
OpMemberDecorate %Inner_std140 15 MatrixStride 16
OpMemberDecorate %Inner_std140 16 Offset 224
OpMemberDecorate %Inner_std140 17 Offset 232
OpMemberDecorate %Inner_std140 18 Offset 240
OpMemberDecorate %Inner_std140 19 Offset 256
OpMemberDecorate %Inner_std140 19 ColMajor
OpMemberDecorate %Inner_std140 19 MatrixStride 16
OpMemberDecorate %Inner_std140 20 Offset 304
OpMemberDecorate %Inner_std140 20 ColMajor
OpMemberDecorate %Inner_std140 20 MatrixStride 16
OpMemberDecorate %Inner_std140 21 Offset 352
OpMemberDecorate %Inner_std140 22 Offset 360
OpMemberDecorate %Inner_std140 23 Offset 368
OpMemberDecorate %Inner_std140 24 Offset 376
OpMemberDecorate %Inner_std140 25 Offset 384
OpMemberDecorate %Inner_std140 25 ColMajor
OpMemberDecorate %Inner_std140 25 MatrixStride 16
OpMemberDecorate %Inner_std140 26 Offset 448
OpMemberDecorate %Inner_std140 26 ColMajor
OpMemberDecorate %Inner_std140 26 MatrixStride 16
OpMemberDecorate %Inner_std140 27 Offset 512
OpDecorate %_arr_v3float_uint_2 ArrayStride 16
OpDecorate %_arr_Inner_std140_uint_8 ArrayStride 544
OpDecorate %ub NonWritable
OpDecorate %ub Binding 0
OpDecorate %ub DescriptorSet 0
%uint = OpTypeInt 32 0
%_ptr_Input_uint = OpTypePointer Input %uint
%idx_1 = OpVariable %_ptr_Input_uint Input
%float = OpTypeFloat 32
%int = OpTypeInt 32 1
%v2float = OpTypeVector %float 2
%v2int = OpTypeVector %int 2
%v2uint = OpTypeVector %uint 2
%v3float = OpTypeVector %float 3
%v3int = OpTypeVector %int 3
%v3uint = OpTypeVector %uint 3
%float = OpTypeFloat 32
%v3float = OpTypeVector %float 3
%v2int = OpTypeVector %int 2
%mat2v3float = OpTypeMatrix %v3float 2
%v2float = OpTypeVector %float 2
%v4float = OpTypeVector %float 4
%v4int = OpTypeVector %int 4
%uint_4 = OpConstant %uint 4
%_arr_v4int_uint_4 = OpTypeArray %v4int %uint_4
%Inner_std140 = OpTypeStruct %v3int %int %v3uint %uint %v3float %float %v2int %v2int %mat2v3float %v2float %v2float %v2float %_arr_v4int_uint_4
%v4uint = OpTypeVector %uint 4
%mat2v3float = OpTypeMatrix %v3float 2
%mat2v4float = OpTypeMatrix %v4float 2
%mat3v3float = OpTypeMatrix %v3float 3
%mat3v4float = OpTypeMatrix %v4float 3
%mat4v3float = OpTypeMatrix %v3float 4
%mat4v4float = OpTypeMatrix %v4float 4
%uint_2 = OpConstant %uint 2
%_arr_v3float_uint_2 = OpTypeArray %v3float %uint_2
%Inner_std140 = OpTypeStruct %float %int %uint %v2float %v2int %v2uint %v3float %v3int %v3uint %v4float %v4int %v4uint %v2float %v2float %mat2v3float %mat2v4float %v2float %v2float %v2float %mat3v3float %mat3v4float %v2float %v2float %v2float %v2float %mat4v3float %mat4v4float %_arr_v3float_uint_2
%uint_8 = OpConstant %uint 8
%_arr_Inner_std140_uint_8 = OpTypeArray %Inner_std140 %uint_8
%S_std140 = OpTypeStruct %_arr_Inner_std140_uint_8
%s_block_std140 = OpTypeStruct %S_std140
%_ptr_Uniform_s_block_std140 = OpTypePointer Uniform %s_block_std140
%s = OpVariable %_ptr_Uniform_s_block_std140 Uniform
%mat3v2float = OpTypeMatrix %v2float 3
%22 = OpTypeFunction %mat3v2float %uint
%ub_block_std140 = OpTypeStruct %S_std140
%_ptr_Uniform_ub_block_std140 = OpTypePointer Uniform %ub_block_std140
%ub = OpVariable %_ptr_Uniform_ub_block_std140 Uniform
%mat2v2float = OpTypeMatrix %v2float 2
%30 = OpTypeFunction %mat2v2float %uint
%uint_0 = OpConstant %uint 0
%_ptr_Uniform_Inner_std140 = OpTypePointer Uniform %Inner_std140
%uint_9 = OpConstant %uint 9
%uint_12 = OpConstant %uint 12
%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
%uint_10 = OpConstant %uint 10
%uint_11 = OpConstant %uint 11
%uint_13 = OpConstant %uint 13
%mat3v2float = OpTypeMatrix %v2float 3
%49 = OpTypeFunction %mat3v2float %uint
%uint_16 = OpConstant %uint 16
%uint_17 = OpConstant %uint 17
%uint_18 = OpConstant %uint 18
%mat4v2float = OpTypeMatrix %v2float 4
%69 = OpTypeFunction %mat4v2float %uint
%uint_21 = OpConstant %uint 21
%uint_22 = OpConstant %uint 22
%uint_23 = OpConstant %uint 23
%uint_24 = OpConstant %uint 24
%void = OpTypeVoid
%45 = OpTypeFunction %void %uint
%_ptr_Uniform_v3int = OpTypePointer Uniform %v3int
%93 = OpTypeFunction %void %uint
%_ptr_Uniform_float = OpTypePointer Uniform %float
%uint_1 = OpConstant %uint 1
%_ptr_Uniform_int = OpTypePointer Uniform %int
%uint_2 = OpConstant %uint 2
%_ptr_Uniform_v3uint = OpTypePointer Uniform %v3uint
%uint_3 = OpConstant %uint 3
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
%_ptr_Uniform_v3float = OpTypePointer Uniform %v3float
%uint_5 = OpConstant %uint 5
%_ptr_Uniform_float = OpTypePointer Uniform %float
%uint_6 = OpConstant %uint 6
%uint_3 = OpConstant %uint 3
%uint_4 = OpConstant %uint 4
%_ptr_Uniform_v2int = OpTypePointer Uniform %v2int
%uint_5 = OpConstant %uint 5
%_ptr_Uniform_v2uint = OpTypePointer Uniform %v2uint
%uint_6 = OpConstant %uint 6
%_ptr_Uniform_v3float = OpTypePointer Uniform %v3float
%uint_7 = OpConstant %uint 7
%_ptr_Uniform_v3int = OpTypePointer Uniform %v3int
%_ptr_Uniform_v3uint = OpTypePointer Uniform %v3uint
%uint_9 = OpConstant %uint 9
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
%uint_10 = OpConstant %uint 10
%_ptr_Uniform_v4int = OpTypePointer Uniform %v4int
%uint_11 = OpConstant %uint 11
%_ptr_Uniform_v4uint = OpTypePointer Uniform %v4uint
%uint_14 = OpConstant %uint 14
%_ptr_Uniform_mat2v3float = OpTypePointer Uniform %mat2v3float
%uint_12 = OpConstant %uint 12
%_ptr_Uniform__arr_v4int_uint_4 = OpTypePointer Uniform %_arr_v4int_uint_4
%88 = OpTypeFunction %void
%load_s_inner_arr_p0_j = OpFunction %mat3v2float None %22
%uint_15 = OpConstant %uint 15
%_ptr_Uniform_mat2v4float = OpTypePointer Uniform %mat2v4float
%uint_19 = OpConstant %uint 19
%_ptr_Uniform_mat3v3float = OpTypePointer Uniform %mat3v3float
%uint_20 = OpConstant %uint 20
%_ptr_Uniform_mat3v4float = OpTypePointer Uniform %mat3v4float
%uint_25 = OpConstant %uint 25
%_ptr_Uniform_mat4v3float = OpTypePointer Uniform %mat4v3float
%uint_26 = OpConstant %uint 26
%_ptr_Uniform_mat4v4float = OpTypePointer Uniform %mat4v4float
%uint_27 = OpConstant %uint 27
%_ptr_Uniform__arr_v3float_uint_2 = OpTypePointer Uniform %_arr_v3float_uint_2
%176 = OpTypeFunction %void
%load_ub_inner_arr_p0_mat2x2_f32 = OpFunction %mat2v2float None %30
%p0 = OpFunctionParameter %uint
%26 = OpLabel
%30 = OpAccessChain %_ptr_Uniform_Inner_std140 %s %uint_0 %uint_0 %p0
%34 = OpAccessChain %_ptr_Uniform_v2float %30 %uint_9
%35 = OpLoad %v2float %34
%38 = OpAccessChain %_ptr_Uniform_v2float %30 %uint_10
%39 = OpLoad %v2float %38
%42 = OpAccessChain %_ptr_Uniform_v2float %30 %uint_11
%34 = OpLabel
%38 = OpAccessChain %_ptr_Uniform_Inner_std140 %ub %uint_0 %uint_0 %p0
%42 = OpAccessChain %_ptr_Uniform_v2float %38 %uint_12
%43 = OpLoad %v2float %42
%44 = OpCompositeConstruct %mat3v2float %35 %39 %43
OpReturnValue %44
%46 = OpAccessChain %_ptr_Uniform_v2float %38 %uint_13
%47 = OpLoad %v2float %46
%48 = OpCompositeConstruct %mat2v2float %43 %47
OpReturnValue %48
OpFunctionEnd
%main_inner = OpFunction %void None %45
%load_ub_inner_arr_p0_mat3x2_f32 = OpFunction %mat3v2float None %49
%p0_0 = OpFunctionParameter %uint
%53 = OpLabel
%55 = OpAccessChain %_ptr_Uniform_Inner_std140 %ub %uint_0 %uint_0 %p0_0
%58 = OpAccessChain %_ptr_Uniform_v2float %55 %uint_16
%59 = OpLoad %v2float %58
%62 = OpAccessChain %_ptr_Uniform_v2float %55 %uint_17
%63 = OpLoad %v2float %62
%66 = OpAccessChain %_ptr_Uniform_v2float %55 %uint_18
%67 = OpLoad %v2float %66
%68 = OpCompositeConstruct %mat3v2float %59 %63 %67
OpReturnValue %68
OpFunctionEnd
%load_ub_inner_arr_p0_mat4x2_f32 = OpFunction %mat4v2float None %69
%p0_1 = OpFunctionParameter %uint
%73 = OpLabel
%75 = OpAccessChain %_ptr_Uniform_Inner_std140 %ub %uint_0 %uint_0 %p0_1
%78 = OpAccessChain %_ptr_Uniform_v2float %75 %uint_21
%79 = OpLoad %v2float %78
%82 = OpAccessChain %_ptr_Uniform_v2float %75 %uint_22
%83 = OpLoad %v2float %82
%86 = OpAccessChain %_ptr_Uniform_v2float %75 %uint_23
%87 = OpLoad %v2float %86
%90 = OpAccessChain %_ptr_Uniform_v2float %75 %uint_24
%91 = OpLoad %v2float %90
%92 = OpCompositeConstruct %mat4v2float %79 %83 %87 %91
OpReturnValue %92
OpFunctionEnd
%main_inner = OpFunction %void None %93
%idx = OpFunctionParameter %uint
%49 = OpLabel
%51 = OpAccessChain %_ptr_Uniform_v3int %s %uint_0 %uint_0 %idx %uint_0
%52 = OpLoad %v3int %51
%55 = OpAccessChain %_ptr_Uniform_int %s %uint_0 %uint_0 %idx %uint_1
%56 = OpLoad %int %55
%59 = OpAccessChain %_ptr_Uniform_v3uint %s %uint_0 %uint_0 %idx %uint_2
%60 = OpLoad %v3uint %59
%63 = OpAccessChain %_ptr_Uniform_uint %s %uint_0 %uint_0 %idx %uint_3
%64 = OpLoad %uint %63
%66 = OpAccessChain %_ptr_Uniform_v3float %s %uint_0 %uint_0 %idx %uint_4
%67 = OpLoad %v3float %66
%70 = OpAccessChain %_ptr_Uniform_float %s %uint_0 %uint_0 %idx %uint_5
%71 = OpLoad %float %70
%74 = OpAccessChain %_ptr_Uniform_v2int %s %uint_0 %uint_0 %idx %uint_6
%75 = OpLoad %v2int %74
%77 = OpAccessChain %_ptr_Uniform_v2int %s %uint_0 %uint_0 %idx %uint_7
%78 = OpLoad %v2int %77
%80 = OpAccessChain %_ptr_Uniform_mat2v3float %s %uint_0 %uint_0 %idx %uint_8
%81 = OpLoad %mat2v3float %80
%82 = OpFunctionCall %mat3v2float %load_s_inner_arr_p0_j %idx
%86 = OpAccessChain %_ptr_Uniform__arr_v4int_uint_4 %s %uint_0 %uint_0 %idx %uint_12
%87 = OpLoad %_arr_v4int_uint_4 %86
%97 = OpLabel
%99 = OpAccessChain %_ptr_Uniform_float %ub %uint_0 %uint_0 %idx %uint_0
%100 = OpLoad %float %99
%103 = OpAccessChain %_ptr_Uniform_int %ub %uint_0 %uint_0 %idx %uint_1
%104 = OpLoad %int %103
%106 = OpAccessChain %_ptr_Uniform_uint %ub %uint_0 %uint_0 %idx %uint_2
%107 = OpLoad %uint %106
%109 = OpAccessChain %_ptr_Uniform_v2float %ub %uint_0 %uint_0 %idx %uint_3
%110 = OpLoad %v2float %109
%113 = OpAccessChain %_ptr_Uniform_v2int %ub %uint_0 %uint_0 %idx %uint_4
%114 = OpLoad %v2int %113
%117 = OpAccessChain %_ptr_Uniform_v2uint %ub %uint_0 %uint_0 %idx %uint_5
%118 = OpLoad %v2uint %117
%121 = OpAccessChain %_ptr_Uniform_v3float %ub %uint_0 %uint_0 %idx %uint_6
%122 = OpLoad %v3float %121
%125 = OpAccessChain %_ptr_Uniform_v3int %ub %uint_0 %uint_0 %idx %uint_7
%126 = OpLoad %v3int %125
%128 = OpAccessChain %_ptr_Uniform_v3uint %ub %uint_0 %uint_0 %idx %uint_8
%129 = OpLoad %v3uint %128
%132 = OpAccessChain %_ptr_Uniform_v4float %ub %uint_0 %uint_0 %idx %uint_9
%133 = OpLoad %v4float %132
%136 = OpAccessChain %_ptr_Uniform_v4int %ub %uint_0 %uint_0 %idx %uint_10
%137 = OpLoad %v4int %136
%140 = OpAccessChain %_ptr_Uniform_v4uint %ub %uint_0 %uint_0 %idx %uint_11
%141 = OpLoad %v4uint %140
%142 = OpFunctionCall %mat2v2float %load_ub_inner_arr_p0_mat2x2_f32 %idx
%146 = OpAccessChain %_ptr_Uniform_mat2v3float %ub %uint_0 %uint_0 %idx %uint_14
%147 = OpLoad %mat2v3float %146
%150 = OpAccessChain %_ptr_Uniform_mat2v4float %ub %uint_0 %uint_0 %idx %uint_15
%151 = OpLoad %mat2v4float %150
%152 = OpFunctionCall %mat3v2float %load_ub_inner_arr_p0_mat3x2_f32 %idx
%156 = OpAccessChain %_ptr_Uniform_mat3v3float %ub %uint_0 %uint_0 %idx %uint_19
%157 = OpLoad %mat3v3float %156
%160 = OpAccessChain %_ptr_Uniform_mat3v4float %ub %uint_0 %uint_0 %idx %uint_20
%161 = OpLoad %mat3v4float %160
%162 = OpFunctionCall %mat4v2float %load_ub_inner_arr_p0_mat4x2_f32 %idx
%166 = OpAccessChain %_ptr_Uniform_mat4v3float %ub %uint_0 %uint_0 %idx %uint_25
%167 = OpLoad %mat4v3float %166
%170 = OpAccessChain %_ptr_Uniform_mat4v4float %ub %uint_0 %uint_0 %idx %uint_26
%171 = OpLoad %mat4v4float %170
%174 = OpAccessChain %_ptr_Uniform__arr_v3float_uint_2 %ub %uint_0 %uint_0 %idx %uint_27
%175 = OpLoad %_arr_v3float_uint_2 %174
OpReturn
OpFunctionEnd
%main = OpFunction %void None %88
%90 = OpLabel
%92 = OpLoad %uint %idx_1
%91 = OpFunctionCall %void %main_inner %92
%main = OpFunction %void None %176
%178 = OpLabel
%180 = OpLoad %uint %idx_1
%179 = OpFunctionCall %void %main_inner %180
OpReturn
OpFunctionEnd

View File

@@ -1,36 +1,57 @@
struct Inner {
a : vec3<i32>,
b : i32,
c : vec3<u32>,
d : u32,
e : vec3<f32>,
f : f32,
g : vec2<i32>,
h : vec2<i32>,
i : mat2x3<f32>,
scalar_f32 : f32,
scalar_i32 : i32,
scalar_u32 : u32,
vec2_f32 : vec2<f32>,
vec2_i32 : vec2<i32>,
vec2_u32 : vec2<u32>,
vec3_f32 : vec3<f32>,
vec3_i32 : vec3<i32>,
vec3_u32 : vec3<u32>,
vec4_f32 : vec4<f32>,
vec4_i32 : vec4<i32>,
vec4_u32 : vec4<u32>,
mat2x2_f32 : mat2x2<f32>,
mat2x3_f32 : mat2x3<f32>,
mat2x4_f32 : mat2x4<f32>,
mat3x2_f32 : mat3x2<f32>,
mat3x3_f32 : mat3x3<f32>,
mat3x4_f32 : mat3x4<f32>,
mat4x2_f32 : mat4x2<f32>,
mat4x3_f32 : mat4x3<f32>,
mat4x4_f32 : mat4x4<f32>,
@align(16)
j : mat3x2<f32>,
@align(16)
k : array<vec4<i32>, 4>,
arr2_vec3_f32 : array<vec3<f32>, 2>,
}
struct S {
arr : array<Inner, 8>,
}
@binding(0) @group(0) var<uniform> s : S;
@binding(0) @group(0) var<uniform> ub : S;
@compute @workgroup_size(1)
fn main(@builtin(local_invocation_index) idx : u32) {
let a = s.arr[idx].a;
let b = s.arr[idx].b;
let c = s.arr[idx].c;
let d = s.arr[idx].d;
let e = s.arr[idx].e;
let f = s.arr[idx].f;
let g = s.arr[idx].g;
let h = s.arr[idx].h;
let i = s.arr[idx].i;
let j = s.arr[idx].j;
let k = s.arr[idx].k;
let scalar_f32 : f32 = ub.arr[idx].scalar_f32;
let scalar_i32 : i32 = ub.arr[idx].scalar_i32;
let scalar_u32 : u32 = ub.arr[idx].scalar_u32;
let vec2_f32 : vec2<f32> = ub.arr[idx].vec2_f32;
let vec2_i32 : vec2<i32> = ub.arr[idx].vec2_i32;
let vec2_u32 : vec2<u32> = ub.arr[idx].vec2_u32;
let vec3_f32 : vec3<f32> = ub.arr[idx].vec3_f32;
let vec3_i32 : vec3<i32> = ub.arr[idx].vec3_i32;
let vec3_u32 : vec3<u32> = ub.arr[idx].vec3_u32;
let vec4_f32 : vec4<f32> = ub.arr[idx].vec4_f32;
let vec4_i32 : vec4<i32> = ub.arr[idx].vec4_i32;
let vec4_u32 : vec4<u32> = ub.arr[idx].vec4_u32;
let mat2x2_f32 : mat2x2<f32> = ub.arr[idx].mat2x2_f32;
let mat2x3_f32 : mat2x3<f32> = ub.arr[idx].mat2x3_f32;
let mat2x4_f32 : mat2x4<f32> = ub.arr[idx].mat2x4_f32;
let mat3x2_f32 : mat3x2<f32> = ub.arr[idx].mat3x2_f32;
let mat3x3_f32 : mat3x3<f32> = ub.arr[idx].mat3x3_f32;
let mat3x4_f32 : mat3x4<f32> = ub.arr[idx].mat3x4_f32;
let mat4x2_f32 : mat4x2<f32> = ub.arr[idx].mat4x2_f32;
let mat4x3_f32 : mat4x3<f32> = ub.arr[idx].mat4x3_f32;
let mat4x4_f32 : mat4x4<f32> = ub.arr[idx].mat4x4_f32;
let arr2_vec3_f32 : array<vec3<f32>, 2> = ub.arr[idx].arr2_vec3_f32;
}

View File

@@ -0,0 +1,86 @@
enable f16;
struct Inner {
scalar_f32 : f32,
scalar_i32 : i32,
scalar_u32 : u32,
scalar_f16 : f16,
vec2_f32 : vec2<f32>,
vec2_i32 : vec2<i32>,
vec2_u32 : vec2<u32>,
vec2_f16 : vec2<f16>,
vec3_f32 : vec3<f32>,
vec3_i32 : vec3<i32>,
vec3_u32 : vec3<u32>,
vec3_f16 : vec3<f16>,
vec4_f32 : vec4<f32>,
vec4_i32 : vec4<i32>,
vec4_u32 : vec4<u32>,
vec4_f16 : vec4<f16>,
mat2x2_f32 : mat2x2<f32>,
mat2x3_f32 : mat2x3<f32>,
mat2x4_f32 : mat2x4<f32>,
mat3x2_f32 : mat3x2<f32>,
mat3x3_f32 : mat3x3<f32>,
mat3x4_f32 : mat3x4<f32>,
mat4x2_f32 : mat4x2<f32>,
mat4x3_f32 : mat4x3<f32>,
mat4x4_f32 : mat4x4<f32>,
mat2x2_f16 : mat2x2<f16>,
mat2x3_f16 : mat2x3<f16>,
mat2x4_f16 : mat2x4<f16>,
mat3x2_f16 : mat3x2<f16>,
mat3x3_f16 : mat3x3<f16>,
mat3x4_f16 : mat3x4<f16>,
mat4x2_f16 : mat4x2<f16>,
mat4x3_f16 : mat4x3<f16>,
mat4x4_f16 : mat4x4<f16>,
@align(16) arr2_vec3_f32 : array<vec3<f32>, 2>,
arr2_mat4x2_f16 : array<mat4x2<f16>, 2>,
};
struct S {
arr : array<Inner, 8>,
};
@binding(0) @group(0) var<uniform> ub : S;
@compute @workgroup_size(1)
fn main(@builtin(local_invocation_index) idx : u32) {
let scalar_f32 : f32 = ub.arr[idx].scalar_f32;
let scalar_i32 : i32 = ub.arr[idx].scalar_i32;
let scalar_u32 : u32 = ub.arr[idx].scalar_u32;
let scalar_f16 : f16 = ub.arr[idx].scalar_f16;
let vec2_f32 : vec2<f32> = ub.arr[idx].vec2_f32;
let vec2_i32 : vec2<i32> = ub.arr[idx].vec2_i32;
let vec2_u32 : vec2<u32> = ub.arr[idx].vec2_u32;
let vec2_f16 : vec2<f16> = ub.arr[idx].vec2_f16;
let vec3_f32 : vec3<f32> = ub.arr[idx].vec3_f32;
let vec3_i32 : vec3<i32> = ub.arr[idx].vec3_i32;
let vec3_u32 : vec3<u32> = ub.arr[idx].vec3_u32;
let vec3_f16 : vec3<f16> = ub.arr[idx].vec3_f16;
let vec4_f32 : vec4<f32> = ub.arr[idx].vec4_f32;
let vec4_i32 : vec4<i32> = ub.arr[idx].vec4_i32;
let vec4_u32 : vec4<u32> = ub.arr[idx].vec4_u32;
let vec4_f16 : vec4<f16> = ub.arr[idx].vec4_f16;
let mat2x2_f32 : mat2x2<f32> = ub.arr[idx].mat2x2_f32;
let mat2x3_f32 : mat2x3<f32> = ub.arr[idx].mat2x3_f32;
let mat2x4_f32 : mat2x4<f32> = ub.arr[idx].mat2x4_f32;
let mat3x2_f32 : mat3x2<f32> = ub.arr[idx].mat3x2_f32;
let mat3x3_f32 : mat3x3<f32> = ub.arr[idx].mat3x3_f32;
let mat3x4_f32 : mat3x4<f32> = ub.arr[idx].mat3x4_f32;
let mat4x2_f32 : mat4x2<f32> = ub.arr[idx].mat4x2_f32;
let mat4x3_f32 : mat4x3<f32> = ub.arr[idx].mat4x3_f32;
let mat4x4_f32 : mat4x4<f32> = ub.arr[idx].mat4x4_f32;
let mat2x2_f16 : mat2x2<f16> = ub.arr[idx].mat2x2_f16;
let mat2x3_f16 : mat2x3<f16> = ub.arr[idx].mat2x3_f16;
let mat2x4_f16 : mat2x4<f16> = ub.arr[idx].mat2x4_f16;
let mat3x2_f16 : mat3x2<f16> = ub.arr[idx].mat3x2_f16;
let mat3x3_f16 : mat3x3<f16> = ub.arr[idx].mat3x3_f16;
let mat3x4_f16 : mat3x4<f16> = ub.arr[idx].mat3x4_f16;
let mat4x2_f16 : mat4x2<f16> = ub.arr[idx].mat4x2_f16;
let mat4x3_f16 : mat4x3<f16> = ub.arr[idx].mat4x3_f16;
let mat4x4_f16 : mat4x4<f16> = ub.arr[idx].mat4x4_f16;
let arr2_vec3_f32 : array<vec3<f32>, 2> = ub.arr[idx].arr2_vec3_f32;
let arr2_mat4x2_f16 : array<mat4x2<f16>, 2> = ub.arr[idx].arr2_mat4x2_f16;
}

View File

@@ -0,0 +1,320 @@
cbuffer cbuffer_ub : register(b0, space0) {
uint4 ub[400];
};
struct tint_symbol_1 {
uint idx : SV_GroupIndex;
};
float2x2 tint_symbol_18(uint4 buffer[400], uint offset) {
const uint scalar_offset = ((offset + 0u)) / 4;
uint4 ubo_load = buffer[scalar_offset / 4];
const uint scalar_offset_1 = ((offset + 8u)) / 4;
uint4 ubo_load_1 = buffer[scalar_offset_1 / 4];
return float2x2(asfloat(((scalar_offset & 2) ? ubo_load.zw : ubo_load.xy)), asfloat(((scalar_offset_1 & 2) ? ubo_load_1.zw : ubo_load_1.xy)));
}
float2x3 tint_symbol_19(uint4 buffer[400], uint offset) {
const uint scalar_offset_2 = ((offset + 0u)) / 4;
const uint scalar_offset_3 = ((offset + 16u)) / 4;
return float2x3(asfloat(buffer[scalar_offset_2 / 4].xyz), asfloat(buffer[scalar_offset_3 / 4].xyz));
}
float2x4 tint_symbol_20(uint4 buffer[400], uint offset) {
const uint scalar_offset_4 = ((offset + 0u)) / 4;
const uint scalar_offset_5 = ((offset + 16u)) / 4;
return float2x4(asfloat(buffer[scalar_offset_4 / 4]), asfloat(buffer[scalar_offset_5 / 4]));
}
float3x2 tint_symbol_21(uint4 buffer[400], uint offset) {
const uint scalar_offset_6 = ((offset + 0u)) / 4;
uint4 ubo_load_2 = buffer[scalar_offset_6 / 4];
const uint scalar_offset_7 = ((offset + 8u)) / 4;
uint4 ubo_load_3 = buffer[scalar_offset_7 / 4];
const uint scalar_offset_8 = ((offset + 16u)) / 4;
uint4 ubo_load_4 = buffer[scalar_offset_8 / 4];
return float3x2(asfloat(((scalar_offset_6 & 2) ? ubo_load_2.zw : ubo_load_2.xy)), asfloat(((scalar_offset_7 & 2) ? ubo_load_3.zw : ubo_load_3.xy)), asfloat(((scalar_offset_8 & 2) ? ubo_load_4.zw : ubo_load_4.xy)));
}
float3x3 tint_symbol_22(uint4 buffer[400], uint offset) {
const uint scalar_offset_9 = ((offset + 0u)) / 4;
const uint scalar_offset_10 = ((offset + 16u)) / 4;
const uint scalar_offset_11 = ((offset + 32u)) / 4;
return float3x3(asfloat(buffer[scalar_offset_9 / 4].xyz), asfloat(buffer[scalar_offset_10 / 4].xyz), asfloat(buffer[scalar_offset_11 / 4].xyz));
}
float3x4 tint_symbol_23(uint4 buffer[400], uint offset) {
const uint scalar_offset_12 = ((offset + 0u)) / 4;
const uint scalar_offset_13 = ((offset + 16u)) / 4;
const uint scalar_offset_14 = ((offset + 32u)) / 4;
return float3x4(asfloat(buffer[scalar_offset_12 / 4]), asfloat(buffer[scalar_offset_13 / 4]), asfloat(buffer[scalar_offset_14 / 4]));
}
float4x2 tint_symbol_24(uint4 buffer[400], uint offset) {
const uint scalar_offset_15 = ((offset + 0u)) / 4;
uint4 ubo_load_5 = buffer[scalar_offset_15 / 4];
const uint scalar_offset_16 = ((offset + 8u)) / 4;
uint4 ubo_load_6 = buffer[scalar_offset_16 / 4];
const uint scalar_offset_17 = ((offset + 16u)) / 4;
uint4 ubo_load_7 = buffer[scalar_offset_17 / 4];
const uint scalar_offset_18 = ((offset + 24u)) / 4;
uint4 ubo_load_8 = buffer[scalar_offset_18 / 4];
return float4x2(asfloat(((scalar_offset_15 & 2) ? ubo_load_5.zw : ubo_load_5.xy)), asfloat(((scalar_offset_16 & 2) ? ubo_load_6.zw : ubo_load_6.xy)), asfloat(((scalar_offset_17 & 2) ? ubo_load_7.zw : ubo_load_7.xy)), asfloat(((scalar_offset_18 & 2) ? ubo_load_8.zw : ubo_load_8.xy)));
}
float4x3 tint_symbol_25(uint4 buffer[400], uint offset) {
const uint scalar_offset_19 = ((offset + 0u)) / 4;
const uint scalar_offset_20 = ((offset + 16u)) / 4;
const uint scalar_offset_21 = ((offset + 32u)) / 4;
const uint scalar_offset_22 = ((offset + 48u)) / 4;
return float4x3(asfloat(buffer[scalar_offset_19 / 4].xyz), asfloat(buffer[scalar_offset_20 / 4].xyz), asfloat(buffer[scalar_offset_21 / 4].xyz), asfloat(buffer[scalar_offset_22 / 4].xyz));
}
float4x4 tint_symbol_26(uint4 buffer[400], uint offset) {
const uint scalar_offset_23 = ((offset + 0u)) / 4;
const uint scalar_offset_24 = ((offset + 16u)) / 4;
const uint scalar_offset_25 = ((offset + 32u)) / 4;
const uint scalar_offset_26 = ((offset + 48u)) / 4;
return float4x4(asfloat(buffer[scalar_offset_23 / 4]), asfloat(buffer[scalar_offset_24 / 4]), asfloat(buffer[scalar_offset_25 / 4]), asfloat(buffer[scalar_offset_26 / 4]));
}
matrix<float16_t, 2, 2> tint_symbol_27(uint4 buffer[400], uint offset) {
const uint scalar_offset_27 = ((offset + 0u)) / 4;
uint ubo_load_9 = buffer[scalar_offset_27 / 4][scalar_offset_27 % 4];
const uint scalar_offset_28 = ((offset + 4u)) / 4;
uint ubo_load_10 = buffer[scalar_offset_28 / 4][scalar_offset_28 % 4];
return matrix<float16_t, 2, 2>(vector<float16_t, 2>(float16_t(f16tof32(ubo_load_9 & 0xFFFF)), float16_t(f16tof32(ubo_load_9 >> 16))), vector<float16_t, 2>(float16_t(f16tof32(ubo_load_10 & 0xFFFF)), float16_t(f16tof32(ubo_load_10 >> 16))));
}
matrix<float16_t, 2, 3> tint_symbol_28(uint4 buffer[400], uint offset) {
const uint scalar_offset_29 = ((offset + 0u)) / 4;
uint4 ubo_load_12 = buffer[scalar_offset_29 / 4];
uint2 ubo_load_11 = ((scalar_offset_29 & 2) ? ubo_load_12.zw : ubo_load_12.xy);
vector<float16_t, 2> ubo_load_11_xz = vector<float16_t, 2>(f16tof32(ubo_load_11 & 0xFFFF));
float16_t ubo_load_11_y = f16tof32(ubo_load_11[0] >> 16);
const uint scalar_offset_30 = ((offset + 8u)) / 4;
uint4 ubo_load_14 = buffer[scalar_offset_30 / 4];
uint2 ubo_load_13 = ((scalar_offset_30 & 2) ? ubo_load_14.zw : ubo_load_14.xy);
vector<float16_t, 2> ubo_load_13_xz = vector<float16_t, 2>(f16tof32(ubo_load_13 & 0xFFFF));
float16_t ubo_load_13_y = f16tof32(ubo_load_13[0] >> 16);
return matrix<float16_t, 2, 3>(vector<float16_t, 3>(ubo_load_11_xz[0], ubo_load_11_y, ubo_load_11_xz[1]), vector<float16_t, 3>(ubo_load_13_xz[0], ubo_load_13_y, ubo_load_13_xz[1]));
}
matrix<float16_t, 2, 4> tint_symbol_29(uint4 buffer[400], uint offset) {
const uint scalar_offset_31 = ((offset + 0u)) / 4;
uint4 ubo_load_16 = buffer[scalar_offset_31 / 4];
uint2 ubo_load_15 = ((scalar_offset_31 & 2) ? ubo_load_16.zw : ubo_load_16.xy);
vector<float16_t, 2> ubo_load_15_xz = vector<float16_t, 2>(f16tof32(ubo_load_15 & 0xFFFF));
vector<float16_t, 2> ubo_load_15_yw = vector<float16_t, 2>(f16tof32(ubo_load_15 >> 16));
const uint scalar_offset_32 = ((offset + 8u)) / 4;
uint4 ubo_load_18 = buffer[scalar_offset_32 / 4];
uint2 ubo_load_17 = ((scalar_offset_32 & 2) ? ubo_load_18.zw : ubo_load_18.xy);
vector<float16_t, 2> ubo_load_17_xz = vector<float16_t, 2>(f16tof32(ubo_load_17 & 0xFFFF));
vector<float16_t, 2> ubo_load_17_yw = vector<float16_t, 2>(f16tof32(ubo_load_17 >> 16));
return matrix<float16_t, 2, 4>(vector<float16_t, 4>(ubo_load_15_xz[0], ubo_load_15_yw[0], ubo_load_15_xz[1], ubo_load_15_yw[1]), vector<float16_t, 4>(ubo_load_17_xz[0], ubo_load_17_yw[0], ubo_load_17_xz[1], ubo_load_17_yw[1]));
}
matrix<float16_t, 3, 2> tint_symbol_30(uint4 buffer[400], uint offset) {
const uint scalar_offset_33 = ((offset + 0u)) / 4;
uint ubo_load_19 = buffer[scalar_offset_33 / 4][scalar_offset_33 % 4];
const uint scalar_offset_34 = ((offset + 4u)) / 4;
uint ubo_load_20 = buffer[scalar_offset_34 / 4][scalar_offset_34 % 4];
const uint scalar_offset_35 = ((offset + 8u)) / 4;
uint ubo_load_21 = buffer[scalar_offset_35 / 4][scalar_offset_35 % 4];
return matrix<float16_t, 3, 2>(vector<float16_t, 2>(float16_t(f16tof32(ubo_load_19 & 0xFFFF)), float16_t(f16tof32(ubo_load_19 >> 16))), vector<float16_t, 2>(float16_t(f16tof32(ubo_load_20 & 0xFFFF)), float16_t(f16tof32(ubo_load_20 >> 16))), vector<float16_t, 2>(float16_t(f16tof32(ubo_load_21 & 0xFFFF)), float16_t(f16tof32(ubo_load_21 >> 16))));
}
matrix<float16_t, 3, 3> tint_symbol_31(uint4 buffer[400], uint offset) {
const uint scalar_offset_36 = ((offset + 0u)) / 4;
uint4 ubo_load_23 = buffer[scalar_offset_36 / 4];
uint2 ubo_load_22 = ((scalar_offset_36 & 2) ? ubo_load_23.zw : ubo_load_23.xy);
vector<float16_t, 2> ubo_load_22_xz = vector<float16_t, 2>(f16tof32(ubo_load_22 & 0xFFFF));
float16_t ubo_load_22_y = f16tof32(ubo_load_22[0] >> 16);
const uint scalar_offset_37 = ((offset + 8u)) / 4;
uint4 ubo_load_25 = buffer[scalar_offset_37 / 4];
uint2 ubo_load_24 = ((scalar_offset_37 & 2) ? ubo_load_25.zw : ubo_load_25.xy);
vector<float16_t, 2> ubo_load_24_xz = vector<float16_t, 2>(f16tof32(ubo_load_24 & 0xFFFF));
float16_t ubo_load_24_y = f16tof32(ubo_load_24[0] >> 16);
const uint scalar_offset_38 = ((offset + 16u)) / 4;
uint4 ubo_load_27 = buffer[scalar_offset_38 / 4];
uint2 ubo_load_26 = ((scalar_offset_38 & 2) ? ubo_load_27.zw : ubo_load_27.xy);
vector<float16_t, 2> ubo_load_26_xz = vector<float16_t, 2>(f16tof32(ubo_load_26 & 0xFFFF));
float16_t ubo_load_26_y = f16tof32(ubo_load_26[0] >> 16);
return matrix<float16_t, 3, 3>(vector<float16_t, 3>(ubo_load_22_xz[0], ubo_load_22_y, ubo_load_22_xz[1]), vector<float16_t, 3>(ubo_load_24_xz[0], ubo_load_24_y, ubo_load_24_xz[1]), vector<float16_t, 3>(ubo_load_26_xz[0], ubo_load_26_y, ubo_load_26_xz[1]));
}
matrix<float16_t, 3, 4> tint_symbol_32(uint4 buffer[400], uint offset) {
const uint scalar_offset_39 = ((offset + 0u)) / 4;
uint4 ubo_load_29 = buffer[scalar_offset_39 / 4];
uint2 ubo_load_28 = ((scalar_offset_39 & 2) ? ubo_load_29.zw : ubo_load_29.xy);
vector<float16_t, 2> ubo_load_28_xz = vector<float16_t, 2>(f16tof32(ubo_load_28 & 0xFFFF));
vector<float16_t, 2> ubo_load_28_yw = vector<float16_t, 2>(f16tof32(ubo_load_28 >> 16));
const uint scalar_offset_40 = ((offset + 8u)) / 4;
uint4 ubo_load_31 = buffer[scalar_offset_40 / 4];
uint2 ubo_load_30 = ((scalar_offset_40 & 2) ? ubo_load_31.zw : ubo_load_31.xy);
vector<float16_t, 2> ubo_load_30_xz = vector<float16_t, 2>(f16tof32(ubo_load_30 & 0xFFFF));
vector<float16_t, 2> ubo_load_30_yw = vector<float16_t, 2>(f16tof32(ubo_load_30 >> 16));
const uint scalar_offset_41 = ((offset + 16u)) / 4;
uint4 ubo_load_33 = buffer[scalar_offset_41 / 4];
uint2 ubo_load_32 = ((scalar_offset_41 & 2) ? ubo_load_33.zw : ubo_load_33.xy);
vector<float16_t, 2> ubo_load_32_xz = vector<float16_t, 2>(f16tof32(ubo_load_32 & 0xFFFF));
vector<float16_t, 2> ubo_load_32_yw = vector<float16_t, 2>(f16tof32(ubo_load_32 >> 16));
return matrix<float16_t, 3, 4>(vector<float16_t, 4>(ubo_load_28_xz[0], ubo_load_28_yw[0], ubo_load_28_xz[1], ubo_load_28_yw[1]), vector<float16_t, 4>(ubo_load_30_xz[0], ubo_load_30_yw[0], ubo_load_30_xz[1], ubo_load_30_yw[1]), vector<float16_t, 4>(ubo_load_32_xz[0], ubo_load_32_yw[0], ubo_load_32_xz[1], ubo_load_32_yw[1]));
}
matrix<float16_t, 4, 2> tint_symbol_33(uint4 buffer[400], uint offset) {
const uint scalar_offset_42 = ((offset + 0u)) / 4;
uint ubo_load_34 = buffer[scalar_offset_42 / 4][scalar_offset_42 % 4];
const uint scalar_offset_43 = ((offset + 4u)) / 4;
uint ubo_load_35 = buffer[scalar_offset_43 / 4][scalar_offset_43 % 4];
const uint scalar_offset_44 = ((offset + 8u)) / 4;
uint ubo_load_36 = buffer[scalar_offset_44 / 4][scalar_offset_44 % 4];
const uint scalar_offset_45 = ((offset + 12u)) / 4;
uint ubo_load_37 = buffer[scalar_offset_45 / 4][scalar_offset_45 % 4];
return matrix<float16_t, 4, 2>(vector<float16_t, 2>(float16_t(f16tof32(ubo_load_34 & 0xFFFF)), float16_t(f16tof32(ubo_load_34 >> 16))), vector<float16_t, 2>(float16_t(f16tof32(ubo_load_35 & 0xFFFF)), float16_t(f16tof32(ubo_load_35 >> 16))), vector<float16_t, 2>(float16_t(f16tof32(ubo_load_36 & 0xFFFF)), float16_t(f16tof32(ubo_load_36 >> 16))), vector<float16_t, 2>(float16_t(f16tof32(ubo_load_37 & 0xFFFF)), float16_t(f16tof32(ubo_load_37 >> 16))));
}
matrix<float16_t, 4, 3> tint_symbol_34(uint4 buffer[400], uint offset) {
const uint scalar_offset_46 = ((offset + 0u)) / 4;
uint4 ubo_load_39 = buffer[scalar_offset_46 / 4];
uint2 ubo_load_38 = ((scalar_offset_46 & 2) ? ubo_load_39.zw : ubo_load_39.xy);
vector<float16_t, 2> ubo_load_38_xz = vector<float16_t, 2>(f16tof32(ubo_load_38 & 0xFFFF));
float16_t ubo_load_38_y = f16tof32(ubo_load_38[0] >> 16);
const uint scalar_offset_47 = ((offset + 8u)) / 4;
uint4 ubo_load_41 = buffer[scalar_offset_47 / 4];
uint2 ubo_load_40 = ((scalar_offset_47 & 2) ? ubo_load_41.zw : ubo_load_41.xy);
vector<float16_t, 2> ubo_load_40_xz = vector<float16_t, 2>(f16tof32(ubo_load_40 & 0xFFFF));
float16_t ubo_load_40_y = f16tof32(ubo_load_40[0] >> 16);
const uint scalar_offset_48 = ((offset + 16u)) / 4;
uint4 ubo_load_43 = buffer[scalar_offset_48 / 4];
uint2 ubo_load_42 = ((scalar_offset_48 & 2) ? ubo_load_43.zw : ubo_load_43.xy);
vector<float16_t, 2> ubo_load_42_xz = vector<float16_t, 2>(f16tof32(ubo_load_42 & 0xFFFF));
float16_t ubo_load_42_y = f16tof32(ubo_load_42[0] >> 16);
const uint scalar_offset_49 = ((offset + 24u)) / 4;
uint4 ubo_load_45 = buffer[scalar_offset_49 / 4];
uint2 ubo_load_44 = ((scalar_offset_49 & 2) ? ubo_load_45.zw : ubo_load_45.xy);
vector<float16_t, 2> ubo_load_44_xz = vector<float16_t, 2>(f16tof32(ubo_load_44 & 0xFFFF));
float16_t ubo_load_44_y = f16tof32(ubo_load_44[0] >> 16);
return matrix<float16_t, 4, 3>(vector<float16_t, 3>(ubo_load_38_xz[0], ubo_load_38_y, ubo_load_38_xz[1]), vector<float16_t, 3>(ubo_load_40_xz[0], ubo_load_40_y, ubo_load_40_xz[1]), vector<float16_t, 3>(ubo_load_42_xz[0], ubo_load_42_y, ubo_load_42_xz[1]), vector<float16_t, 3>(ubo_load_44_xz[0], ubo_load_44_y, ubo_load_44_xz[1]));
}
matrix<float16_t, 4, 4> tint_symbol_35(uint4 buffer[400], uint offset) {
const uint scalar_offset_50 = ((offset + 0u)) / 4;
uint4 ubo_load_47 = buffer[scalar_offset_50 / 4];
uint2 ubo_load_46 = ((scalar_offset_50 & 2) ? ubo_load_47.zw : ubo_load_47.xy);
vector<float16_t, 2> ubo_load_46_xz = vector<float16_t, 2>(f16tof32(ubo_load_46 & 0xFFFF));
vector<float16_t, 2> ubo_load_46_yw = vector<float16_t, 2>(f16tof32(ubo_load_46 >> 16));
const uint scalar_offset_51 = ((offset + 8u)) / 4;
uint4 ubo_load_49 = buffer[scalar_offset_51 / 4];
uint2 ubo_load_48 = ((scalar_offset_51 & 2) ? ubo_load_49.zw : ubo_load_49.xy);
vector<float16_t, 2> ubo_load_48_xz = vector<float16_t, 2>(f16tof32(ubo_load_48 & 0xFFFF));
vector<float16_t, 2> ubo_load_48_yw = vector<float16_t, 2>(f16tof32(ubo_load_48 >> 16));
const uint scalar_offset_52 = ((offset + 16u)) / 4;
uint4 ubo_load_51 = buffer[scalar_offset_52 / 4];
uint2 ubo_load_50 = ((scalar_offset_52 & 2) ? ubo_load_51.zw : ubo_load_51.xy);
vector<float16_t, 2> ubo_load_50_xz = vector<float16_t, 2>(f16tof32(ubo_load_50 & 0xFFFF));
vector<float16_t, 2> ubo_load_50_yw = vector<float16_t, 2>(f16tof32(ubo_load_50 >> 16));
const uint scalar_offset_53 = ((offset + 24u)) / 4;
uint4 ubo_load_53 = buffer[scalar_offset_53 / 4];
uint2 ubo_load_52 = ((scalar_offset_53 & 2) ? ubo_load_53.zw : ubo_load_53.xy);
vector<float16_t, 2> ubo_load_52_xz = vector<float16_t, 2>(f16tof32(ubo_load_52 & 0xFFFF));
vector<float16_t, 2> ubo_load_52_yw = vector<float16_t, 2>(f16tof32(ubo_load_52 >> 16));
return matrix<float16_t, 4, 4>(vector<float16_t, 4>(ubo_load_46_xz[0], ubo_load_46_yw[0], ubo_load_46_xz[1], ubo_load_46_yw[1]), vector<float16_t, 4>(ubo_load_48_xz[0], ubo_load_48_yw[0], ubo_load_48_xz[1], ubo_load_48_yw[1]), vector<float16_t, 4>(ubo_load_50_xz[0], ubo_load_50_yw[0], ubo_load_50_xz[1], ubo_load_50_yw[1]), vector<float16_t, 4>(ubo_load_52_xz[0], ubo_load_52_yw[0], ubo_load_52_xz[1], ubo_load_52_yw[1]));
}
typedef float3 tint_symbol_36_ret[2];
tint_symbol_36_ret tint_symbol_36(uint4 buffer[400], uint offset) {
float3 arr_1[2] = (float3[2])0;
{
for(uint i = 0u; (i < 2u); i = (i + 1u)) {
const uint scalar_offset_54 = ((offset + (i * 16u))) / 4;
arr_1[i] = asfloat(buffer[scalar_offset_54 / 4].xyz);
}
}
return arr_1;
}
typedef matrix<float16_t, 4, 2> tint_symbol_37_ret[2];
tint_symbol_37_ret tint_symbol_37(uint4 buffer[400], uint offset) {
matrix<float16_t, 4, 2> arr_2[2] = (matrix<float16_t, 4, 2>[2])0;
{
for(uint i_1 = 0u; (i_1 < 2u); i_1 = (i_1 + 1u)) {
arr_2[i_1] = tint_symbol_33(buffer, (offset + (i_1 * 16u)));
}
}
return arr_2;
}
void main_inner(uint idx) {
const uint scalar_offset_55 = ((800u * idx)) / 4;
const float scalar_f32 = asfloat(ub[scalar_offset_55 / 4][scalar_offset_55 % 4]);
const uint scalar_offset_56 = (((800u * idx) + 4u)) / 4;
const int scalar_i32 = asint(ub[scalar_offset_56 / 4][scalar_offset_56 % 4]);
const uint scalar_offset_57 = (((800u * idx) + 8u)) / 4;
const uint scalar_u32 = ub[scalar_offset_57 / 4][scalar_offset_57 % 4];
const uint scalar_offset_bytes = (((800u * idx) + 12u));
const uint scalar_offset_index = scalar_offset_bytes / 4;
const float16_t scalar_f16 = float16_t(f16tof32(((ub[scalar_offset_index / 4][scalar_offset_index % 4] >> (scalar_offset_bytes % 4 == 0 ? 0 : 16)) & 0xFFFF)));
const uint scalar_offset_58 = (((800u * idx) + 16u)) / 4;
uint4 ubo_load_54 = ub[scalar_offset_58 / 4];
const float2 vec2_f32 = asfloat(((scalar_offset_58 & 2) ? ubo_load_54.zw : ubo_load_54.xy));
const uint scalar_offset_59 = (((800u * idx) + 24u)) / 4;
uint4 ubo_load_55 = ub[scalar_offset_59 / 4];
const int2 vec2_i32 = asint(((scalar_offset_59 & 2) ? ubo_load_55.zw : ubo_load_55.xy));
const uint scalar_offset_60 = (((800u * idx) + 32u)) / 4;
uint4 ubo_load_56 = ub[scalar_offset_60 / 4];
const uint2 vec2_u32 = ((scalar_offset_60 & 2) ? ubo_load_56.zw : ubo_load_56.xy);
const uint scalar_offset_61 = (((800u * idx) + 40u)) / 4;
uint ubo_load_57 = ub[scalar_offset_61 / 4][scalar_offset_61 % 4];
const vector<float16_t, 2> vec2_f16 = vector<float16_t, 2>(float16_t(f16tof32(ubo_load_57 & 0xFFFF)), float16_t(f16tof32(ubo_load_57 >> 16)));
const uint scalar_offset_62 = (((800u * idx) + 48u)) / 4;
const float3 vec3_f32 = asfloat(ub[scalar_offset_62 / 4].xyz);
const uint scalar_offset_63 = (((800u * idx) + 64u)) / 4;
const int3 vec3_i32 = asint(ub[scalar_offset_63 / 4].xyz);
const uint scalar_offset_64 = (((800u * idx) + 80u)) / 4;
const uint3 vec3_u32 = ub[scalar_offset_64 / 4].xyz;
const uint scalar_offset_65 = (((800u * idx) + 96u)) / 4;
uint4 ubo_load_59 = ub[scalar_offset_65 / 4];
uint2 ubo_load_58 = ((scalar_offset_65 & 2) ? ubo_load_59.zw : ubo_load_59.xy);
vector<float16_t, 2> ubo_load_58_xz = vector<float16_t, 2>(f16tof32(ubo_load_58 & 0xFFFF));
float16_t ubo_load_58_y = f16tof32(ubo_load_58[0] >> 16);
const vector<float16_t, 3> vec3_f16 = vector<float16_t, 3>(ubo_load_58_xz[0], ubo_load_58_y, ubo_load_58_xz[1]);
const uint scalar_offset_66 = (((800u * idx) + 112u)) / 4;
const float4 vec4_f32 = asfloat(ub[scalar_offset_66 / 4]);
const uint scalar_offset_67 = (((800u * idx) + 128u)) / 4;
const int4 vec4_i32 = asint(ub[scalar_offset_67 / 4]);
const uint scalar_offset_68 = (((800u * idx) + 144u)) / 4;
const uint4 vec4_u32 = ub[scalar_offset_68 / 4];
const uint scalar_offset_69 = (((800u * idx) + 160u)) / 4;
uint4 ubo_load_61 = ub[scalar_offset_69 / 4];
uint2 ubo_load_60 = ((scalar_offset_69 & 2) ? ubo_load_61.zw : ubo_load_61.xy);
vector<float16_t, 2> ubo_load_60_xz = vector<float16_t, 2>(f16tof32(ubo_load_60 & 0xFFFF));
vector<float16_t, 2> ubo_load_60_yw = vector<float16_t, 2>(f16tof32(ubo_load_60 >> 16));
const vector<float16_t, 4> vec4_f16 = vector<float16_t, 4>(ubo_load_60_xz[0], ubo_load_60_yw[0], ubo_load_60_xz[1], ubo_load_60_yw[1]);
const float2x2 mat2x2_f32 = tint_symbol_18(ub, ((800u * idx) + 168u));
const float2x3 mat2x3_f32 = tint_symbol_19(ub, ((800u * idx) + 192u));
const float2x4 mat2x4_f32 = tint_symbol_20(ub, ((800u * idx) + 224u));
const float3x2 mat3x2_f32 = tint_symbol_21(ub, ((800u * idx) + 256u));
const float3x3 mat3x3_f32 = tint_symbol_22(ub, ((800u * idx) + 288u));
const float3x4 mat3x4_f32 = tint_symbol_23(ub, ((800u * idx) + 336u));
const float4x2 mat4x2_f32 = tint_symbol_24(ub, ((800u * idx) + 384u));
const float4x3 mat4x3_f32 = tint_symbol_25(ub, ((800u * idx) + 416u));
const float4x4 mat4x4_f32 = tint_symbol_26(ub, ((800u * idx) + 480u));
const matrix<float16_t, 2, 2> mat2x2_f16 = tint_symbol_27(ub, ((800u * idx) + 544u));
const matrix<float16_t, 2, 3> mat2x3_f16 = tint_symbol_28(ub, ((800u * idx) + 552u));
const matrix<float16_t, 2, 4> mat2x4_f16 = tint_symbol_29(ub, ((800u * idx) + 568u));
const matrix<float16_t, 3, 2> mat3x2_f16 = tint_symbol_30(ub, ((800u * idx) + 584u));
const matrix<float16_t, 3, 3> mat3x3_f16 = tint_symbol_31(ub, ((800u * idx) + 600u));
const matrix<float16_t, 3, 4> mat3x4_f16 = tint_symbol_32(ub, ((800u * idx) + 624u));
const matrix<float16_t, 4, 2> mat4x2_f16 = tint_symbol_33(ub, ((800u * idx) + 648u));
const matrix<float16_t, 4, 3> mat4x3_f16 = tint_symbol_34(ub, ((800u * idx) + 664u));
const matrix<float16_t, 4, 4> mat4x4_f16 = tint_symbol_35(ub, ((800u * idx) + 696u));
const float3 arr2_vec3_f32[2] = tint_symbol_36(ub, ((800u * idx) + 736u));
const matrix<float16_t, 4, 2> arr2_mat4x2_f16[2] = tint_symbol_37(ub, ((800u * idx) + 768u));
}
[numthreads(1, 1, 1)]
void main(tint_symbol_1 tint_symbol) {
main_inner(tint_symbol.idx);
return;
}

View File

@@ -0,0 +1,325 @@
SKIP: FAILED
cbuffer cbuffer_ub : register(b0, space0) {
uint4 ub[400];
};
struct tint_symbol_1 {
uint idx : SV_GroupIndex;
};
float2x2 tint_symbol_18(uint4 buffer[400], uint offset) {
const uint scalar_offset = ((offset + 0u)) / 4;
uint4 ubo_load = buffer[scalar_offset / 4];
const uint scalar_offset_1 = ((offset + 8u)) / 4;
uint4 ubo_load_1 = buffer[scalar_offset_1 / 4];
return float2x2(asfloat(((scalar_offset & 2) ? ubo_load.zw : ubo_load.xy)), asfloat(((scalar_offset_1 & 2) ? ubo_load_1.zw : ubo_load_1.xy)));
}
float2x3 tint_symbol_19(uint4 buffer[400], uint offset) {
const uint scalar_offset_2 = ((offset + 0u)) / 4;
const uint scalar_offset_3 = ((offset + 16u)) / 4;
return float2x3(asfloat(buffer[scalar_offset_2 / 4].xyz), asfloat(buffer[scalar_offset_3 / 4].xyz));
}
float2x4 tint_symbol_20(uint4 buffer[400], uint offset) {
const uint scalar_offset_4 = ((offset + 0u)) / 4;
const uint scalar_offset_5 = ((offset + 16u)) / 4;
return float2x4(asfloat(buffer[scalar_offset_4 / 4]), asfloat(buffer[scalar_offset_5 / 4]));
}
float3x2 tint_symbol_21(uint4 buffer[400], uint offset) {
const uint scalar_offset_6 = ((offset + 0u)) / 4;
uint4 ubo_load_2 = buffer[scalar_offset_6 / 4];
const uint scalar_offset_7 = ((offset + 8u)) / 4;
uint4 ubo_load_3 = buffer[scalar_offset_7 / 4];
const uint scalar_offset_8 = ((offset + 16u)) / 4;
uint4 ubo_load_4 = buffer[scalar_offset_8 / 4];
return float3x2(asfloat(((scalar_offset_6 & 2) ? ubo_load_2.zw : ubo_load_2.xy)), asfloat(((scalar_offset_7 & 2) ? ubo_load_3.zw : ubo_load_3.xy)), asfloat(((scalar_offset_8 & 2) ? ubo_load_4.zw : ubo_load_4.xy)));
}
float3x3 tint_symbol_22(uint4 buffer[400], uint offset) {
const uint scalar_offset_9 = ((offset + 0u)) / 4;
const uint scalar_offset_10 = ((offset + 16u)) / 4;
const uint scalar_offset_11 = ((offset + 32u)) / 4;
return float3x3(asfloat(buffer[scalar_offset_9 / 4].xyz), asfloat(buffer[scalar_offset_10 / 4].xyz), asfloat(buffer[scalar_offset_11 / 4].xyz));
}
float3x4 tint_symbol_23(uint4 buffer[400], uint offset) {
const uint scalar_offset_12 = ((offset + 0u)) / 4;
const uint scalar_offset_13 = ((offset + 16u)) / 4;
const uint scalar_offset_14 = ((offset + 32u)) / 4;
return float3x4(asfloat(buffer[scalar_offset_12 / 4]), asfloat(buffer[scalar_offset_13 / 4]), asfloat(buffer[scalar_offset_14 / 4]));
}
float4x2 tint_symbol_24(uint4 buffer[400], uint offset) {
const uint scalar_offset_15 = ((offset + 0u)) / 4;
uint4 ubo_load_5 = buffer[scalar_offset_15 / 4];
const uint scalar_offset_16 = ((offset + 8u)) / 4;
uint4 ubo_load_6 = buffer[scalar_offset_16 / 4];
const uint scalar_offset_17 = ((offset + 16u)) / 4;
uint4 ubo_load_7 = buffer[scalar_offset_17 / 4];
const uint scalar_offset_18 = ((offset + 24u)) / 4;
uint4 ubo_load_8 = buffer[scalar_offset_18 / 4];
return float4x2(asfloat(((scalar_offset_15 & 2) ? ubo_load_5.zw : ubo_load_5.xy)), asfloat(((scalar_offset_16 & 2) ? ubo_load_6.zw : ubo_load_6.xy)), asfloat(((scalar_offset_17 & 2) ? ubo_load_7.zw : ubo_load_7.xy)), asfloat(((scalar_offset_18 & 2) ? ubo_load_8.zw : ubo_load_8.xy)));
}
float4x3 tint_symbol_25(uint4 buffer[400], uint offset) {
const uint scalar_offset_19 = ((offset + 0u)) / 4;
const uint scalar_offset_20 = ((offset + 16u)) / 4;
const uint scalar_offset_21 = ((offset + 32u)) / 4;
const uint scalar_offset_22 = ((offset + 48u)) / 4;
return float4x3(asfloat(buffer[scalar_offset_19 / 4].xyz), asfloat(buffer[scalar_offset_20 / 4].xyz), asfloat(buffer[scalar_offset_21 / 4].xyz), asfloat(buffer[scalar_offset_22 / 4].xyz));
}
float4x4 tint_symbol_26(uint4 buffer[400], uint offset) {
const uint scalar_offset_23 = ((offset + 0u)) / 4;
const uint scalar_offset_24 = ((offset + 16u)) / 4;
const uint scalar_offset_25 = ((offset + 32u)) / 4;
const uint scalar_offset_26 = ((offset + 48u)) / 4;
return float4x4(asfloat(buffer[scalar_offset_23 / 4]), asfloat(buffer[scalar_offset_24 / 4]), asfloat(buffer[scalar_offset_25 / 4]), asfloat(buffer[scalar_offset_26 / 4]));
}
matrix<float16_t, 2, 2> tint_symbol_27(uint4 buffer[400], uint offset) {
const uint scalar_offset_27 = ((offset + 0u)) / 4;
uint ubo_load_9 = buffer[scalar_offset_27 / 4][scalar_offset_27 % 4];
const uint scalar_offset_28 = ((offset + 4u)) / 4;
uint ubo_load_10 = buffer[scalar_offset_28 / 4][scalar_offset_28 % 4];
return matrix<float16_t, 2, 2>(vector<float16_t, 2>(float16_t(f16tof32(ubo_load_9 & 0xFFFF)), float16_t(f16tof32(ubo_load_9 >> 16))), vector<float16_t, 2>(float16_t(f16tof32(ubo_load_10 & 0xFFFF)), float16_t(f16tof32(ubo_load_10 >> 16))));
}
matrix<float16_t, 2, 3> tint_symbol_28(uint4 buffer[400], uint offset) {
const uint scalar_offset_29 = ((offset + 0u)) / 4;
uint4 ubo_load_12 = buffer[scalar_offset_29 / 4];
uint2 ubo_load_11 = ((scalar_offset_29 & 2) ? ubo_load_12.zw : ubo_load_12.xy);
vector<float16_t, 2> ubo_load_11_xz = vector<float16_t, 2>(f16tof32(ubo_load_11 & 0xFFFF));
float16_t ubo_load_11_y = f16tof32(ubo_load_11[0] >> 16);
const uint scalar_offset_30 = ((offset + 8u)) / 4;
uint4 ubo_load_14 = buffer[scalar_offset_30 / 4];
uint2 ubo_load_13 = ((scalar_offset_30 & 2) ? ubo_load_14.zw : ubo_load_14.xy);
vector<float16_t, 2> ubo_load_13_xz = vector<float16_t, 2>(f16tof32(ubo_load_13 & 0xFFFF));
float16_t ubo_load_13_y = f16tof32(ubo_load_13[0] >> 16);
return matrix<float16_t, 2, 3>(vector<float16_t, 3>(ubo_load_11_xz[0], ubo_load_11_y, ubo_load_11_xz[1]), vector<float16_t, 3>(ubo_load_13_xz[0], ubo_load_13_y, ubo_load_13_xz[1]));
}
matrix<float16_t, 2, 4> tint_symbol_29(uint4 buffer[400], uint offset) {
const uint scalar_offset_31 = ((offset + 0u)) / 4;
uint4 ubo_load_16 = buffer[scalar_offset_31 / 4];
uint2 ubo_load_15 = ((scalar_offset_31 & 2) ? ubo_load_16.zw : ubo_load_16.xy);
vector<float16_t, 2> ubo_load_15_xz = vector<float16_t, 2>(f16tof32(ubo_load_15 & 0xFFFF));
vector<float16_t, 2> ubo_load_15_yw = vector<float16_t, 2>(f16tof32(ubo_load_15 >> 16));
const uint scalar_offset_32 = ((offset + 8u)) / 4;
uint4 ubo_load_18 = buffer[scalar_offset_32 / 4];
uint2 ubo_load_17 = ((scalar_offset_32 & 2) ? ubo_load_18.zw : ubo_load_18.xy);
vector<float16_t, 2> ubo_load_17_xz = vector<float16_t, 2>(f16tof32(ubo_load_17 & 0xFFFF));
vector<float16_t, 2> ubo_load_17_yw = vector<float16_t, 2>(f16tof32(ubo_load_17 >> 16));
return matrix<float16_t, 2, 4>(vector<float16_t, 4>(ubo_load_15_xz[0], ubo_load_15_yw[0], ubo_load_15_xz[1], ubo_load_15_yw[1]), vector<float16_t, 4>(ubo_load_17_xz[0], ubo_load_17_yw[0], ubo_load_17_xz[1], ubo_load_17_yw[1]));
}
matrix<float16_t, 3, 2> tint_symbol_30(uint4 buffer[400], uint offset) {
const uint scalar_offset_33 = ((offset + 0u)) / 4;
uint ubo_load_19 = buffer[scalar_offset_33 / 4][scalar_offset_33 % 4];
const uint scalar_offset_34 = ((offset + 4u)) / 4;
uint ubo_load_20 = buffer[scalar_offset_34 / 4][scalar_offset_34 % 4];
const uint scalar_offset_35 = ((offset + 8u)) / 4;
uint ubo_load_21 = buffer[scalar_offset_35 / 4][scalar_offset_35 % 4];
return matrix<float16_t, 3, 2>(vector<float16_t, 2>(float16_t(f16tof32(ubo_load_19 & 0xFFFF)), float16_t(f16tof32(ubo_load_19 >> 16))), vector<float16_t, 2>(float16_t(f16tof32(ubo_load_20 & 0xFFFF)), float16_t(f16tof32(ubo_load_20 >> 16))), vector<float16_t, 2>(float16_t(f16tof32(ubo_load_21 & 0xFFFF)), float16_t(f16tof32(ubo_load_21 >> 16))));
}
matrix<float16_t, 3, 3> tint_symbol_31(uint4 buffer[400], uint offset) {
const uint scalar_offset_36 = ((offset + 0u)) / 4;
uint4 ubo_load_23 = buffer[scalar_offset_36 / 4];
uint2 ubo_load_22 = ((scalar_offset_36 & 2) ? ubo_load_23.zw : ubo_load_23.xy);
vector<float16_t, 2> ubo_load_22_xz = vector<float16_t, 2>(f16tof32(ubo_load_22 & 0xFFFF));
float16_t ubo_load_22_y = f16tof32(ubo_load_22[0] >> 16);
const uint scalar_offset_37 = ((offset + 8u)) / 4;
uint4 ubo_load_25 = buffer[scalar_offset_37 / 4];
uint2 ubo_load_24 = ((scalar_offset_37 & 2) ? ubo_load_25.zw : ubo_load_25.xy);
vector<float16_t, 2> ubo_load_24_xz = vector<float16_t, 2>(f16tof32(ubo_load_24 & 0xFFFF));
float16_t ubo_load_24_y = f16tof32(ubo_load_24[0] >> 16);
const uint scalar_offset_38 = ((offset + 16u)) / 4;
uint4 ubo_load_27 = buffer[scalar_offset_38 / 4];
uint2 ubo_load_26 = ((scalar_offset_38 & 2) ? ubo_load_27.zw : ubo_load_27.xy);
vector<float16_t, 2> ubo_load_26_xz = vector<float16_t, 2>(f16tof32(ubo_load_26 & 0xFFFF));
float16_t ubo_load_26_y = f16tof32(ubo_load_26[0] >> 16);
return matrix<float16_t, 3, 3>(vector<float16_t, 3>(ubo_load_22_xz[0], ubo_load_22_y, ubo_load_22_xz[1]), vector<float16_t, 3>(ubo_load_24_xz[0], ubo_load_24_y, ubo_load_24_xz[1]), vector<float16_t, 3>(ubo_load_26_xz[0], ubo_load_26_y, ubo_load_26_xz[1]));
}
matrix<float16_t, 3, 4> tint_symbol_32(uint4 buffer[400], uint offset) {
const uint scalar_offset_39 = ((offset + 0u)) / 4;
uint4 ubo_load_29 = buffer[scalar_offset_39 / 4];
uint2 ubo_load_28 = ((scalar_offset_39 & 2) ? ubo_load_29.zw : ubo_load_29.xy);
vector<float16_t, 2> ubo_load_28_xz = vector<float16_t, 2>(f16tof32(ubo_load_28 & 0xFFFF));
vector<float16_t, 2> ubo_load_28_yw = vector<float16_t, 2>(f16tof32(ubo_load_28 >> 16));
const uint scalar_offset_40 = ((offset + 8u)) / 4;
uint4 ubo_load_31 = buffer[scalar_offset_40 / 4];
uint2 ubo_load_30 = ((scalar_offset_40 & 2) ? ubo_load_31.zw : ubo_load_31.xy);
vector<float16_t, 2> ubo_load_30_xz = vector<float16_t, 2>(f16tof32(ubo_load_30 & 0xFFFF));
vector<float16_t, 2> ubo_load_30_yw = vector<float16_t, 2>(f16tof32(ubo_load_30 >> 16));
const uint scalar_offset_41 = ((offset + 16u)) / 4;
uint4 ubo_load_33 = buffer[scalar_offset_41 / 4];
uint2 ubo_load_32 = ((scalar_offset_41 & 2) ? ubo_load_33.zw : ubo_load_33.xy);
vector<float16_t, 2> ubo_load_32_xz = vector<float16_t, 2>(f16tof32(ubo_load_32 & 0xFFFF));
vector<float16_t, 2> ubo_load_32_yw = vector<float16_t, 2>(f16tof32(ubo_load_32 >> 16));
return matrix<float16_t, 3, 4>(vector<float16_t, 4>(ubo_load_28_xz[0], ubo_load_28_yw[0], ubo_load_28_xz[1], ubo_load_28_yw[1]), vector<float16_t, 4>(ubo_load_30_xz[0], ubo_load_30_yw[0], ubo_load_30_xz[1], ubo_load_30_yw[1]), vector<float16_t, 4>(ubo_load_32_xz[0], ubo_load_32_yw[0], ubo_load_32_xz[1], ubo_load_32_yw[1]));
}
matrix<float16_t, 4, 2> tint_symbol_33(uint4 buffer[400], uint offset) {
const uint scalar_offset_42 = ((offset + 0u)) / 4;
uint ubo_load_34 = buffer[scalar_offset_42 / 4][scalar_offset_42 % 4];
const uint scalar_offset_43 = ((offset + 4u)) / 4;
uint ubo_load_35 = buffer[scalar_offset_43 / 4][scalar_offset_43 % 4];
const uint scalar_offset_44 = ((offset + 8u)) / 4;
uint ubo_load_36 = buffer[scalar_offset_44 / 4][scalar_offset_44 % 4];
const uint scalar_offset_45 = ((offset + 12u)) / 4;
uint ubo_load_37 = buffer[scalar_offset_45 / 4][scalar_offset_45 % 4];
return matrix<float16_t, 4, 2>(vector<float16_t, 2>(float16_t(f16tof32(ubo_load_34 & 0xFFFF)), float16_t(f16tof32(ubo_load_34 >> 16))), vector<float16_t, 2>(float16_t(f16tof32(ubo_load_35 & 0xFFFF)), float16_t(f16tof32(ubo_load_35 >> 16))), vector<float16_t, 2>(float16_t(f16tof32(ubo_load_36 & 0xFFFF)), float16_t(f16tof32(ubo_load_36 >> 16))), vector<float16_t, 2>(float16_t(f16tof32(ubo_load_37 & 0xFFFF)), float16_t(f16tof32(ubo_load_37 >> 16))));
}
matrix<float16_t, 4, 3> tint_symbol_34(uint4 buffer[400], uint offset) {
const uint scalar_offset_46 = ((offset + 0u)) / 4;
uint4 ubo_load_39 = buffer[scalar_offset_46 / 4];
uint2 ubo_load_38 = ((scalar_offset_46 & 2) ? ubo_load_39.zw : ubo_load_39.xy);
vector<float16_t, 2> ubo_load_38_xz = vector<float16_t, 2>(f16tof32(ubo_load_38 & 0xFFFF));
float16_t ubo_load_38_y = f16tof32(ubo_load_38[0] >> 16);
const uint scalar_offset_47 = ((offset + 8u)) / 4;
uint4 ubo_load_41 = buffer[scalar_offset_47 / 4];
uint2 ubo_load_40 = ((scalar_offset_47 & 2) ? ubo_load_41.zw : ubo_load_41.xy);
vector<float16_t, 2> ubo_load_40_xz = vector<float16_t, 2>(f16tof32(ubo_load_40 & 0xFFFF));
float16_t ubo_load_40_y = f16tof32(ubo_load_40[0] >> 16);
const uint scalar_offset_48 = ((offset + 16u)) / 4;
uint4 ubo_load_43 = buffer[scalar_offset_48 / 4];
uint2 ubo_load_42 = ((scalar_offset_48 & 2) ? ubo_load_43.zw : ubo_load_43.xy);
vector<float16_t, 2> ubo_load_42_xz = vector<float16_t, 2>(f16tof32(ubo_load_42 & 0xFFFF));
float16_t ubo_load_42_y = f16tof32(ubo_load_42[0] >> 16);
const uint scalar_offset_49 = ((offset + 24u)) / 4;
uint4 ubo_load_45 = buffer[scalar_offset_49 / 4];
uint2 ubo_load_44 = ((scalar_offset_49 & 2) ? ubo_load_45.zw : ubo_load_45.xy);
vector<float16_t, 2> ubo_load_44_xz = vector<float16_t, 2>(f16tof32(ubo_load_44 & 0xFFFF));
float16_t ubo_load_44_y = f16tof32(ubo_load_44[0] >> 16);
return matrix<float16_t, 4, 3>(vector<float16_t, 3>(ubo_load_38_xz[0], ubo_load_38_y, ubo_load_38_xz[1]), vector<float16_t, 3>(ubo_load_40_xz[0], ubo_load_40_y, ubo_load_40_xz[1]), vector<float16_t, 3>(ubo_load_42_xz[0], ubo_load_42_y, ubo_load_42_xz[1]), vector<float16_t, 3>(ubo_load_44_xz[0], ubo_load_44_y, ubo_load_44_xz[1]));
}
matrix<float16_t, 4, 4> tint_symbol_35(uint4 buffer[400], uint offset) {
const uint scalar_offset_50 = ((offset + 0u)) / 4;
uint4 ubo_load_47 = buffer[scalar_offset_50 / 4];
uint2 ubo_load_46 = ((scalar_offset_50 & 2) ? ubo_load_47.zw : ubo_load_47.xy);
vector<float16_t, 2> ubo_load_46_xz = vector<float16_t, 2>(f16tof32(ubo_load_46 & 0xFFFF));
vector<float16_t, 2> ubo_load_46_yw = vector<float16_t, 2>(f16tof32(ubo_load_46 >> 16));
const uint scalar_offset_51 = ((offset + 8u)) / 4;
uint4 ubo_load_49 = buffer[scalar_offset_51 / 4];
uint2 ubo_load_48 = ((scalar_offset_51 & 2) ? ubo_load_49.zw : ubo_load_49.xy);
vector<float16_t, 2> ubo_load_48_xz = vector<float16_t, 2>(f16tof32(ubo_load_48 & 0xFFFF));
vector<float16_t, 2> ubo_load_48_yw = vector<float16_t, 2>(f16tof32(ubo_load_48 >> 16));
const uint scalar_offset_52 = ((offset + 16u)) / 4;
uint4 ubo_load_51 = buffer[scalar_offset_52 / 4];
uint2 ubo_load_50 = ((scalar_offset_52 & 2) ? ubo_load_51.zw : ubo_load_51.xy);
vector<float16_t, 2> ubo_load_50_xz = vector<float16_t, 2>(f16tof32(ubo_load_50 & 0xFFFF));
vector<float16_t, 2> ubo_load_50_yw = vector<float16_t, 2>(f16tof32(ubo_load_50 >> 16));
const uint scalar_offset_53 = ((offset + 24u)) / 4;
uint4 ubo_load_53 = buffer[scalar_offset_53 / 4];
uint2 ubo_load_52 = ((scalar_offset_53 & 2) ? ubo_load_53.zw : ubo_load_53.xy);
vector<float16_t, 2> ubo_load_52_xz = vector<float16_t, 2>(f16tof32(ubo_load_52 & 0xFFFF));
vector<float16_t, 2> ubo_load_52_yw = vector<float16_t, 2>(f16tof32(ubo_load_52 >> 16));
return matrix<float16_t, 4, 4>(vector<float16_t, 4>(ubo_load_46_xz[0], ubo_load_46_yw[0], ubo_load_46_xz[1], ubo_load_46_yw[1]), vector<float16_t, 4>(ubo_load_48_xz[0], ubo_load_48_yw[0], ubo_load_48_xz[1], ubo_load_48_yw[1]), vector<float16_t, 4>(ubo_load_50_xz[0], ubo_load_50_yw[0], ubo_load_50_xz[1], ubo_load_50_yw[1]), vector<float16_t, 4>(ubo_load_52_xz[0], ubo_load_52_yw[0], ubo_load_52_xz[1], ubo_load_52_yw[1]));
}
typedef float3 tint_symbol_36_ret[2];
tint_symbol_36_ret tint_symbol_36(uint4 buffer[400], uint offset) {
float3 arr_1[2] = (float3[2])0;
{
for(uint i = 0u; (i < 2u); i = (i + 1u)) {
const uint scalar_offset_54 = ((offset + (i * 16u))) / 4;
arr_1[i] = asfloat(buffer[scalar_offset_54 / 4].xyz);
}
}
return arr_1;
}
typedef matrix<float16_t, 4, 2> tint_symbol_37_ret[2];
tint_symbol_37_ret tint_symbol_37(uint4 buffer[400], uint offset) {
matrix<float16_t, 4, 2> arr_2[2] = (matrix<float16_t, 4, 2>[2])0;
{
for(uint i_1 = 0u; (i_1 < 2u); i_1 = (i_1 + 1u)) {
arr_2[i_1] = tint_symbol_33(buffer, (offset + (i_1 * 16u)));
}
}
return arr_2;
}
void main_inner(uint idx) {
const uint scalar_offset_55 = ((800u * idx)) / 4;
const float scalar_f32 = asfloat(ub[scalar_offset_55 / 4][scalar_offset_55 % 4]);
const uint scalar_offset_56 = (((800u * idx) + 4u)) / 4;
const int scalar_i32 = asint(ub[scalar_offset_56 / 4][scalar_offset_56 % 4]);
const uint scalar_offset_57 = (((800u * idx) + 8u)) / 4;
const uint scalar_u32 = ub[scalar_offset_57 / 4][scalar_offset_57 % 4];
const uint scalar_offset_bytes = (((800u * idx) + 12u));
const uint scalar_offset_index = scalar_offset_bytes / 4;
const float16_t scalar_f16 = float16_t(f16tof32(((ub[scalar_offset_index / 4][scalar_offset_index % 4] >> (scalar_offset_bytes % 4 == 0 ? 0 : 16)) & 0xFFFF)));
const uint scalar_offset_58 = (((800u * idx) + 16u)) / 4;
uint4 ubo_load_54 = ub[scalar_offset_58 / 4];
const float2 vec2_f32 = asfloat(((scalar_offset_58 & 2) ? ubo_load_54.zw : ubo_load_54.xy));
const uint scalar_offset_59 = (((800u * idx) + 24u)) / 4;
uint4 ubo_load_55 = ub[scalar_offset_59 / 4];
const int2 vec2_i32 = asint(((scalar_offset_59 & 2) ? ubo_load_55.zw : ubo_load_55.xy));
const uint scalar_offset_60 = (((800u * idx) + 32u)) / 4;
uint4 ubo_load_56 = ub[scalar_offset_60 / 4];
const uint2 vec2_u32 = ((scalar_offset_60 & 2) ? ubo_load_56.zw : ubo_load_56.xy);
const uint scalar_offset_61 = (((800u * idx) + 40u)) / 4;
uint ubo_load_57 = ub[scalar_offset_61 / 4][scalar_offset_61 % 4];
const vector<float16_t, 2> vec2_f16 = vector<float16_t, 2>(float16_t(f16tof32(ubo_load_57 & 0xFFFF)), float16_t(f16tof32(ubo_load_57 >> 16)));
const uint scalar_offset_62 = (((800u * idx) + 48u)) / 4;
const float3 vec3_f32 = asfloat(ub[scalar_offset_62 / 4].xyz);
const uint scalar_offset_63 = (((800u * idx) + 64u)) / 4;
const int3 vec3_i32 = asint(ub[scalar_offset_63 / 4].xyz);
const uint scalar_offset_64 = (((800u * idx) + 80u)) / 4;
const uint3 vec3_u32 = ub[scalar_offset_64 / 4].xyz;
const uint scalar_offset_65 = (((800u * idx) + 96u)) / 4;
uint4 ubo_load_59 = ub[scalar_offset_65 / 4];
uint2 ubo_load_58 = ((scalar_offset_65 & 2) ? ubo_load_59.zw : ubo_load_59.xy);
vector<float16_t, 2> ubo_load_58_xz = vector<float16_t, 2>(f16tof32(ubo_load_58 & 0xFFFF));
float16_t ubo_load_58_y = f16tof32(ubo_load_58[0] >> 16);
const vector<float16_t, 3> vec3_f16 = vector<float16_t, 3>(ubo_load_58_xz[0], ubo_load_58_y, ubo_load_58_xz[1]);
const uint scalar_offset_66 = (((800u * idx) + 112u)) / 4;
const float4 vec4_f32 = asfloat(ub[scalar_offset_66 / 4]);
const uint scalar_offset_67 = (((800u * idx) + 128u)) / 4;
const int4 vec4_i32 = asint(ub[scalar_offset_67 / 4]);
const uint scalar_offset_68 = (((800u * idx) + 144u)) / 4;
const uint4 vec4_u32 = ub[scalar_offset_68 / 4];
const uint scalar_offset_69 = (((800u * idx) + 160u)) / 4;
uint4 ubo_load_61 = ub[scalar_offset_69 / 4];
uint2 ubo_load_60 = ((scalar_offset_69 & 2) ? ubo_load_61.zw : ubo_load_61.xy);
vector<float16_t, 2> ubo_load_60_xz = vector<float16_t, 2>(f16tof32(ubo_load_60 & 0xFFFF));
vector<float16_t, 2> ubo_load_60_yw = vector<float16_t, 2>(f16tof32(ubo_load_60 >> 16));
const vector<float16_t, 4> vec4_f16 = vector<float16_t, 4>(ubo_load_60_xz[0], ubo_load_60_yw[0], ubo_load_60_xz[1], ubo_load_60_yw[1]);
const float2x2 mat2x2_f32 = tint_symbol_18(ub, ((800u * idx) + 168u));
const float2x3 mat2x3_f32 = tint_symbol_19(ub, ((800u * idx) + 192u));
const float2x4 mat2x4_f32 = tint_symbol_20(ub, ((800u * idx) + 224u));
const float3x2 mat3x2_f32 = tint_symbol_21(ub, ((800u * idx) + 256u));
const float3x3 mat3x3_f32 = tint_symbol_22(ub, ((800u * idx) + 288u));
const float3x4 mat3x4_f32 = tint_symbol_23(ub, ((800u * idx) + 336u));
const float4x2 mat4x2_f32 = tint_symbol_24(ub, ((800u * idx) + 384u));
const float4x3 mat4x3_f32 = tint_symbol_25(ub, ((800u * idx) + 416u));
const float4x4 mat4x4_f32 = tint_symbol_26(ub, ((800u * idx) + 480u));
const matrix<float16_t, 2, 2> mat2x2_f16 = tint_symbol_27(ub, ((800u * idx) + 544u));
const matrix<float16_t, 2, 3> mat2x3_f16 = tint_symbol_28(ub, ((800u * idx) + 552u));
const matrix<float16_t, 2, 4> mat2x4_f16 = tint_symbol_29(ub, ((800u * idx) + 568u));
const matrix<float16_t, 3, 2> mat3x2_f16 = tint_symbol_30(ub, ((800u * idx) + 584u));
const matrix<float16_t, 3, 3> mat3x3_f16 = tint_symbol_31(ub, ((800u * idx) + 600u));
const matrix<float16_t, 3, 4> mat3x4_f16 = tint_symbol_32(ub, ((800u * idx) + 624u));
const matrix<float16_t, 4, 2> mat4x2_f16 = tint_symbol_33(ub, ((800u * idx) + 648u));
const matrix<float16_t, 4, 3> mat4x3_f16 = tint_symbol_34(ub, ((800u * idx) + 664u));
const matrix<float16_t, 4, 4> mat4x4_f16 = tint_symbol_35(ub, ((800u * idx) + 696u));
const float3 arr2_vec3_f32[2] = tint_symbol_36(ub, ((800u * idx) + 736u));
const matrix<float16_t, 4, 2> arr2_mat4x2_f16[2] = tint_symbol_37(ub, ((800u * idx) + 768u));
}
[numthreads(1, 1, 1)]
void main(tint_symbol_1 tint_symbol) {
main_inner(tint_symbol.idx);
return;
}
FXC validation failure:
D:\Projects\RampUp\dawn\test\tint\buffer\Shader@0x00000183446E4210(81,8-16): error X3000: syntax error: unexpected token 'float16_t'

View File

@@ -0,0 +1,268 @@
#version 310 es
#extension GL_AMD_gpu_shader_half_float : require
struct mat4x2_f16_4 {
f16vec2 col0;
f16vec2 col1;
f16vec2 col2;
f16vec2 col3;
};
struct Inner {
float scalar_f32;
int scalar_i32;
uint scalar_u32;
float16_t scalar_f16;
vec2 vec2_f32;
ivec2 vec2_i32;
uvec2 vec2_u32;
f16vec2 vec2_f16;
uint pad;
vec3 vec3_f32;
uint pad_1;
ivec3 vec3_i32;
uint pad_2;
uvec3 vec3_u32;
uint pad_3;
f16vec3 vec3_f16;
uint pad_4;
uint pad_5;
vec4 vec4_f32;
ivec4 vec4_i32;
uvec4 vec4_u32;
f16vec4 vec4_f16;
mat2 mat2x2_f32;
uint pad_6;
uint pad_7;
mat2x3 mat2x3_f32;
mat2x4 mat2x4_f32;
mat3x2 mat3x2_f32;
uint pad_8;
uint pad_9;
mat3 mat3x3_f32;
mat3x4 mat3x4_f32;
mat4x2 mat4x2_f32;
mat4x3 mat4x3_f32;
mat4 mat4x4_f32;
f16mat2 mat2x2_f16;
f16mat2x3 mat2x3_f16;
f16mat2x4 mat2x4_f16;
f16mat3x2 mat3x2_f16;
uint pad_10;
f16mat3 mat3x3_f16;
f16mat3x4 mat3x4_f16;
f16mat4x2 mat4x2_f16;
f16mat4x3 mat4x3_f16;
f16mat4 mat4x4_f16;
uint pad_11;
uint pad_12;
vec3 arr2_vec3_f32[2];
f16mat4x2 arr2_mat4x2_f16[2];
};
struct Inner_std140 {
float scalar_f32;
int scalar_i32;
uint scalar_u32;
float16_t scalar_f16;
vec2 vec2_f32;
ivec2 vec2_i32;
uvec2 vec2_u32;
f16vec2 vec2_f16;
uint pad;
vec3 vec3_f32;
uint pad_1;
ivec3 vec3_i32;
uint pad_2;
uvec3 vec3_u32;
uint pad_3;
f16vec3 vec3_f16;
uint pad_4;
uint pad_5;
vec4 vec4_f32;
ivec4 vec4_i32;
uvec4 vec4_u32;
f16vec4 vec4_f16;
vec2 mat2x2_f32_0;
vec2 mat2x2_f32_1;
uint pad_6;
uint pad_7;
mat2x3 mat2x3_f32;
mat2x4 mat2x4_f32;
vec2 mat3x2_f32_0;
vec2 mat3x2_f32_1;
vec2 mat3x2_f32_2;
uint pad_8;
uint pad_9;
mat3 mat3x3_f32;
mat3x4 mat3x4_f32;
vec2 mat4x2_f32_0;
vec2 mat4x2_f32_1;
vec2 mat4x2_f32_2;
vec2 mat4x2_f32_3;
mat4x3 mat4x3_f32;
mat4 mat4x4_f32;
f16vec2 mat2x2_f16_0;
f16vec2 mat2x2_f16_1;
f16vec3 mat2x3_f16_0;
f16vec3 mat2x3_f16_1;
f16vec4 mat2x4_f16_0;
f16vec4 mat2x4_f16_1;
f16vec2 mat3x2_f16_0;
f16vec2 mat3x2_f16_1;
f16vec2 mat3x2_f16_2;
uint pad_10;
f16vec3 mat3x3_f16_0;
f16vec3 mat3x3_f16_1;
f16vec3 mat3x3_f16_2;
f16vec4 mat3x4_f16_0;
f16vec4 mat3x4_f16_1;
f16vec4 mat3x4_f16_2;
f16vec2 mat4x2_f16_0;
f16vec2 mat4x2_f16_1;
f16vec2 mat4x2_f16_2;
f16vec2 mat4x2_f16_3;
f16vec3 mat4x3_f16_0;
f16vec3 mat4x3_f16_1;
f16vec3 mat4x3_f16_2;
f16vec3 mat4x3_f16_3;
f16vec4 mat4x4_f16_0;
f16vec4 mat4x4_f16_1;
f16vec4 mat4x4_f16_2;
f16vec4 mat4x4_f16_3;
uint pad_11;
uint pad_12;
vec3 arr2_vec3_f32[2];
mat4x2_f16_4 arr2_mat4x2_f16[2];
};
struct S {
Inner arr[8];
};
struct S_std140 {
Inner_std140 arr[8];
};
layout(binding = 0, std140) uniform ub_block_std140_ubo {
S_std140 inner;
} ub;
mat2 load_ub_inner_arr_p0_mat2x2_f32(uint p0) {
uint s_save = p0;
return mat2(ub.inner.arr[s_save].mat2x2_f32_0, ub.inner.arr[s_save].mat2x2_f32_1);
}
mat3x2 load_ub_inner_arr_p0_mat3x2_f32(uint p0) {
uint s_save_1 = p0;
return mat3x2(ub.inner.arr[s_save_1].mat3x2_f32_0, ub.inner.arr[s_save_1].mat3x2_f32_1, ub.inner.arr[s_save_1].mat3x2_f32_2);
}
mat4x2 load_ub_inner_arr_p0_mat4x2_f32(uint p0) {
uint s_save_2 = p0;
return mat4x2(ub.inner.arr[s_save_2].mat4x2_f32_0, ub.inner.arr[s_save_2].mat4x2_f32_1, ub.inner.arr[s_save_2].mat4x2_f32_2, ub.inner.arr[s_save_2].mat4x2_f32_3);
}
f16mat2 load_ub_inner_arr_p0_mat2x2_f16(uint p0) {
uint s_save_3 = p0;
return f16mat2(ub.inner.arr[s_save_3].mat2x2_f16_0, ub.inner.arr[s_save_3].mat2x2_f16_1);
}
f16mat2x3 load_ub_inner_arr_p0_mat2x3_f16(uint p0) {
uint s_save_4 = p0;
return f16mat2x3(ub.inner.arr[s_save_4].mat2x3_f16_0, ub.inner.arr[s_save_4].mat2x3_f16_1);
}
f16mat2x4 load_ub_inner_arr_p0_mat2x4_f16(uint p0) {
uint s_save_5 = p0;
return f16mat2x4(ub.inner.arr[s_save_5].mat2x4_f16_0, ub.inner.arr[s_save_5].mat2x4_f16_1);
}
f16mat3x2 load_ub_inner_arr_p0_mat3x2_f16(uint p0) {
uint s_save_6 = p0;
return f16mat3x2(ub.inner.arr[s_save_6].mat3x2_f16_0, ub.inner.arr[s_save_6].mat3x2_f16_1, ub.inner.arr[s_save_6].mat3x2_f16_2);
}
f16mat3 load_ub_inner_arr_p0_mat3x3_f16(uint p0) {
uint s_save_7 = p0;
return f16mat3(ub.inner.arr[s_save_7].mat3x3_f16_0, ub.inner.arr[s_save_7].mat3x3_f16_1, ub.inner.arr[s_save_7].mat3x3_f16_2);
}
f16mat3x4 load_ub_inner_arr_p0_mat3x4_f16(uint p0) {
uint s_save_8 = p0;
return f16mat3x4(ub.inner.arr[s_save_8].mat3x4_f16_0, ub.inner.arr[s_save_8].mat3x4_f16_1, ub.inner.arr[s_save_8].mat3x4_f16_2);
}
f16mat4x2 load_ub_inner_arr_p0_mat4x2_f16(uint p0) {
uint s_save_9 = p0;
return f16mat4x2(ub.inner.arr[s_save_9].mat4x2_f16_0, ub.inner.arr[s_save_9].mat4x2_f16_1, ub.inner.arr[s_save_9].mat4x2_f16_2, ub.inner.arr[s_save_9].mat4x2_f16_3);
}
f16mat4x3 load_ub_inner_arr_p0_mat4x3_f16(uint p0) {
uint s_save_10 = p0;
return f16mat4x3(ub.inner.arr[s_save_10].mat4x3_f16_0, ub.inner.arr[s_save_10].mat4x3_f16_1, ub.inner.arr[s_save_10].mat4x3_f16_2, ub.inner.arr[s_save_10].mat4x3_f16_3);
}
f16mat4 load_ub_inner_arr_p0_mat4x4_f16(uint p0) {
uint s_save_11 = p0;
return f16mat4(ub.inner.arr[s_save_11].mat4x4_f16_0, ub.inner.arr[s_save_11].mat4x4_f16_1, ub.inner.arr[s_save_11].mat4x4_f16_2, ub.inner.arr[s_save_11].mat4x4_f16_3);
}
f16mat4x2 conv_mat4x2_f16(mat4x2_f16_4 val) {
return f16mat4x2(val.col0, val.col1, val.col2, val.col3);
}
f16mat4x2[2] conv_arr2_mat4x2_f16(mat4x2_f16_4 val[2]) {
f16mat4x2 arr[2] = f16mat4x2[2](f16mat4x2(0.0hf, 0.0hf, 0.0hf, 0.0hf, 0.0hf, 0.0hf, 0.0hf, 0.0hf), f16mat4x2(0.0hf, 0.0hf, 0.0hf, 0.0hf, 0.0hf, 0.0hf, 0.0hf, 0.0hf));
{
for(uint i = 0u; (i < 2u); i = (i + 1u)) {
arr[i] = conv_mat4x2_f16(val[i]);
}
}
return arr;
}
void tint_symbol(uint idx) {
float scalar_f32 = ub.inner.arr[idx].scalar_f32;
int scalar_i32 = ub.inner.arr[idx].scalar_i32;
uint scalar_u32 = ub.inner.arr[idx].scalar_u32;
float16_t scalar_f16 = ub.inner.arr[idx].scalar_f16;
vec2 vec2_f32 = ub.inner.arr[idx].vec2_f32;
ivec2 vec2_i32 = ub.inner.arr[idx].vec2_i32;
uvec2 vec2_u32 = ub.inner.arr[idx].vec2_u32;
f16vec2 vec2_f16 = ub.inner.arr[idx].vec2_f16;
vec3 vec3_f32 = ub.inner.arr[idx].vec3_f32;
ivec3 vec3_i32 = ub.inner.arr[idx].vec3_i32;
uvec3 vec3_u32 = ub.inner.arr[idx].vec3_u32;
f16vec3 vec3_f16 = ub.inner.arr[idx].vec3_f16;
vec4 vec4_f32 = ub.inner.arr[idx].vec4_f32;
ivec4 vec4_i32 = ub.inner.arr[idx].vec4_i32;
uvec4 vec4_u32 = ub.inner.arr[idx].vec4_u32;
f16vec4 vec4_f16 = ub.inner.arr[idx].vec4_f16;
mat2 mat2x2_f32 = load_ub_inner_arr_p0_mat2x2_f32(uint(idx));
mat2x3 mat2x3_f32 = ub.inner.arr[idx].mat2x3_f32;
mat2x4 mat2x4_f32 = ub.inner.arr[idx].mat2x4_f32;
mat3x2 mat3x2_f32 = load_ub_inner_arr_p0_mat3x2_f32(uint(idx));
mat3 mat3x3_f32 = ub.inner.arr[idx].mat3x3_f32;
mat3x4 mat3x4_f32 = ub.inner.arr[idx].mat3x4_f32;
mat4x2 mat4x2_f32 = load_ub_inner_arr_p0_mat4x2_f32(uint(idx));
mat4x3 mat4x3_f32 = ub.inner.arr[idx].mat4x3_f32;
mat4 mat4x4_f32 = ub.inner.arr[idx].mat4x4_f32;
f16mat2 mat2x2_f16 = load_ub_inner_arr_p0_mat2x2_f16(uint(idx));
f16mat2x3 mat2x3_f16 = load_ub_inner_arr_p0_mat2x3_f16(uint(idx));
f16mat2x4 mat2x4_f16 = load_ub_inner_arr_p0_mat2x4_f16(uint(idx));
f16mat3x2 mat3x2_f16 = load_ub_inner_arr_p0_mat3x2_f16(uint(idx));
f16mat3 mat3x3_f16 = load_ub_inner_arr_p0_mat3x3_f16(uint(idx));
f16mat3x4 mat3x4_f16 = load_ub_inner_arr_p0_mat3x4_f16(uint(idx));
f16mat4x2 mat4x2_f16 = load_ub_inner_arr_p0_mat4x2_f16(uint(idx));
f16mat4x3 mat4x3_f16 = load_ub_inner_arr_p0_mat4x3_f16(uint(idx));
f16mat4 mat4x4_f16 = load_ub_inner_arr_p0_mat4x4_f16(uint(idx));
vec3 arr2_vec3_f32[2] = ub.inner.arr[idx].arr2_vec3_f32;
f16mat4x2 arr2_mat4x2_f16[2] = conv_arr2_mat4x2_f16(ub.inner.arr[idx].arr2_mat4x2_f16);
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
void main() {
tint_symbol(gl_LocalInvocationIndex);
return;
}

View File

@@ -0,0 +1,113 @@
#include <metal_stdlib>
using namespace metal;
template<typename T, size_t N>
struct tint_array {
const constant T& operator[](size_t i) const constant { return elements[i]; }
device T& operator[](size_t i) device { return elements[i]; }
const device T& operator[](size_t i) const device { return elements[i]; }
thread T& operator[](size_t i) thread { return elements[i]; }
const thread T& operator[](size_t i) const thread { return elements[i]; }
threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
T elements[N];
};
struct Inner {
/* 0x0000 */ float scalar_f32;
/* 0x0004 */ int scalar_i32;
/* 0x0008 */ uint scalar_u32;
/* 0x000c */ half scalar_f16;
/* 0x000e */ tint_array<int8_t, 2> tint_pad;
/* 0x0010 */ float2 vec2_f32;
/* 0x0018 */ int2 vec2_i32;
/* 0x0020 */ uint2 vec2_u32;
/* 0x0028 */ half2 vec2_f16;
/* 0x002c */ tint_array<int8_t, 4> tint_pad_1;
/* 0x0030 */ packed_float3 vec3_f32;
/* 0x003c */ tint_array<int8_t, 4> tint_pad_2;
/* 0x0040 */ packed_int3 vec3_i32;
/* 0x004c */ tint_array<int8_t, 4> tint_pad_3;
/* 0x0050 */ packed_uint3 vec3_u32;
/* 0x005c */ tint_array<int8_t, 4> tint_pad_4;
/* 0x0060 */ packed_half3 vec3_f16;
/* 0x0066 */ tint_array<int8_t, 10> tint_pad_5;
/* 0x0070 */ float4 vec4_f32;
/* 0x0080 */ int4 vec4_i32;
/* 0x0090 */ uint4 vec4_u32;
/* 0x00a0 */ half4 vec4_f16;
/* 0x00a8 */ float2x2 mat2x2_f32;
/* 0x00b8 */ tint_array<int8_t, 8> tint_pad_6;
/* 0x00c0 */ float2x3 mat2x3_f32;
/* 0x00e0 */ float2x4 mat2x4_f32;
/* 0x0100 */ float3x2 mat3x2_f32;
/* 0x0118 */ tint_array<int8_t, 8> tint_pad_7;
/* 0x0120 */ float3x3 mat3x3_f32;
/* 0x0150 */ float3x4 mat3x4_f32;
/* 0x0180 */ float4x2 mat4x2_f32;
/* 0x01a0 */ float4x3 mat4x3_f32;
/* 0x01e0 */ float4x4 mat4x4_f32;
/* 0x0220 */ half2x2 mat2x2_f16;
/* 0x0228 */ half2x3 mat2x3_f16;
/* 0x0238 */ half2x4 mat2x4_f16;
/* 0x0248 */ half3x2 mat3x2_f16;
/* 0x0254 */ tint_array<int8_t, 4> tint_pad_8;
/* 0x0258 */ half3x3 mat3x3_f16;
/* 0x0270 */ half3x4 mat3x4_f16;
/* 0x0288 */ half4x2 mat4x2_f16;
/* 0x0298 */ half4x3 mat4x3_f16;
/* 0x02b8 */ half4x4 mat4x4_f16;
/* 0x02d8 */ tint_array<int8_t, 8> tint_pad_9;
/* 0x02e0 */ tint_array<float3, 2> arr2_vec3_f32;
/* 0x0300 */ tint_array<half4x2, 2> arr2_mat4x2_f16;
};
struct S {
/* 0x0000 */ tint_array<Inner, 8> arr;
};
void tint_symbol_inner(uint idx, const constant S* const tint_symbol_1) {
float const scalar_f32 = (*(tint_symbol_1)).arr[idx].scalar_f32;
int const scalar_i32 = (*(tint_symbol_1)).arr[idx].scalar_i32;
uint const scalar_u32 = (*(tint_symbol_1)).arr[idx].scalar_u32;
half const scalar_f16 = (*(tint_symbol_1)).arr[idx].scalar_f16;
float2 const vec2_f32 = (*(tint_symbol_1)).arr[idx].vec2_f32;
int2 const vec2_i32 = (*(tint_symbol_1)).arr[idx].vec2_i32;
uint2 const vec2_u32 = (*(tint_symbol_1)).arr[idx].vec2_u32;
half2 const vec2_f16 = (*(tint_symbol_1)).arr[idx].vec2_f16;
float3 const vec3_f32 = float3((*(tint_symbol_1)).arr[idx].vec3_f32);
int3 const vec3_i32 = int3((*(tint_symbol_1)).arr[idx].vec3_i32);
uint3 const vec3_u32 = uint3((*(tint_symbol_1)).arr[idx].vec3_u32);
half3 const vec3_f16 = half3((*(tint_symbol_1)).arr[idx].vec3_f16);
float4 const vec4_f32 = (*(tint_symbol_1)).arr[idx].vec4_f32;
int4 const vec4_i32 = (*(tint_symbol_1)).arr[idx].vec4_i32;
uint4 const vec4_u32 = (*(tint_symbol_1)).arr[idx].vec4_u32;
half4 const vec4_f16 = (*(tint_symbol_1)).arr[idx].vec4_f16;
float2x2 const mat2x2_f32 = (*(tint_symbol_1)).arr[idx].mat2x2_f32;
float2x3 const mat2x3_f32 = (*(tint_symbol_1)).arr[idx].mat2x3_f32;
float2x4 const mat2x4_f32 = (*(tint_symbol_1)).arr[idx].mat2x4_f32;
float3x2 const mat3x2_f32 = (*(tint_symbol_1)).arr[idx].mat3x2_f32;
float3x3 const mat3x3_f32 = (*(tint_symbol_1)).arr[idx].mat3x3_f32;
float3x4 const mat3x4_f32 = (*(tint_symbol_1)).arr[idx].mat3x4_f32;
float4x2 const mat4x2_f32 = (*(tint_symbol_1)).arr[idx].mat4x2_f32;
float4x3 const mat4x3_f32 = (*(tint_symbol_1)).arr[idx].mat4x3_f32;
float4x4 const mat4x4_f32 = (*(tint_symbol_1)).arr[idx].mat4x4_f32;
half2x2 const mat2x2_f16 = (*(tint_symbol_1)).arr[idx].mat2x2_f16;
half2x3 const mat2x3_f16 = (*(tint_symbol_1)).arr[idx].mat2x3_f16;
half2x4 const mat2x4_f16 = (*(tint_symbol_1)).arr[idx].mat2x4_f16;
half3x2 const mat3x2_f16 = (*(tint_symbol_1)).arr[idx].mat3x2_f16;
half3x3 const mat3x3_f16 = (*(tint_symbol_1)).arr[idx].mat3x3_f16;
half3x4 const mat3x4_f16 = (*(tint_symbol_1)).arr[idx].mat3x4_f16;
half4x2 const mat4x2_f16 = (*(tint_symbol_1)).arr[idx].mat4x2_f16;
half4x3 const mat4x3_f16 = (*(tint_symbol_1)).arr[idx].mat4x3_f16;
half4x4 const mat4x4_f16 = (*(tint_symbol_1)).arr[idx].mat4x4_f16;
tint_array<float3, 2> const arr2_vec3_f32 = (*(tint_symbol_1)).arr[idx].arr2_vec3_f32;
tint_array<half4x2, 2> const arr2_mat4x2_f16 = (*(tint_symbol_1)).arr[idx].arr2_mat4x2_f16;
}
kernel void tint_symbol(const constant S* tint_symbol_2 [[buffer(0)]], uint idx [[thread_index_in_threadgroup]]) {
tint_symbol_inner(idx, tint_symbol_2);
return;
}

View File

@@ -0,0 +1,638 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
; Bound: 450
; Schema: 0
OpCapability Shader
OpCapability Float16
OpCapability UniformAndStorageBuffer16BitAccess
OpCapability StorageBuffer16BitAccess
OpCapability StorageInputOutput16
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %main "main" %idx_1
OpExecutionMode %main LocalSize 1 1 1
OpName %idx_1 "idx_1"
OpName %ub_block_std140 "ub_block_std140"
OpMemberName %ub_block_std140 0 "inner"
OpName %S_std140 "S_std140"
OpMemberName %S_std140 0 "arr"
OpName %Inner_std140 "Inner_std140"
OpMemberName %Inner_std140 0 "scalar_f32"
OpMemberName %Inner_std140 1 "scalar_i32"
OpMemberName %Inner_std140 2 "scalar_u32"
OpMemberName %Inner_std140 3 "scalar_f16"
OpMemberName %Inner_std140 4 "vec2_f32"
OpMemberName %Inner_std140 5 "vec2_i32"
OpMemberName %Inner_std140 6 "vec2_u32"
OpMemberName %Inner_std140 7 "vec2_f16"
OpMemberName %Inner_std140 8 "vec3_f32"
OpMemberName %Inner_std140 9 "vec3_i32"
OpMemberName %Inner_std140 10 "vec3_u32"
OpMemberName %Inner_std140 11 "vec3_f16"
OpMemberName %Inner_std140 12 "vec4_f32"
OpMemberName %Inner_std140 13 "vec4_i32"
OpMemberName %Inner_std140 14 "vec4_u32"
OpMemberName %Inner_std140 15 "vec4_f16"
OpMemberName %Inner_std140 16 "mat2x2_f32_0"
OpMemberName %Inner_std140 17 "mat2x2_f32_1"
OpMemberName %Inner_std140 18 "mat2x3_f32"
OpMemberName %Inner_std140 19 "mat2x4_f32"
OpMemberName %Inner_std140 20 "mat3x2_f32_0"
OpMemberName %Inner_std140 21 "mat3x2_f32_1"
OpMemberName %Inner_std140 22 "mat3x2_f32_2"
OpMemberName %Inner_std140 23 "mat3x3_f32"
OpMemberName %Inner_std140 24 "mat3x4_f32"
OpMemberName %Inner_std140 25 "mat4x2_f32_0"
OpMemberName %Inner_std140 26 "mat4x2_f32_1"
OpMemberName %Inner_std140 27 "mat4x2_f32_2"
OpMemberName %Inner_std140 28 "mat4x2_f32_3"
OpMemberName %Inner_std140 29 "mat4x3_f32"
OpMemberName %Inner_std140 30 "mat4x4_f32"
OpMemberName %Inner_std140 31 "mat2x2_f16_0"
OpMemberName %Inner_std140 32 "mat2x2_f16_1"
OpMemberName %Inner_std140 33 "mat2x3_f16_0"
OpMemberName %Inner_std140 34 "mat2x3_f16_1"
OpMemberName %Inner_std140 35 "mat2x4_f16_0"
OpMemberName %Inner_std140 36 "mat2x4_f16_1"
OpMemberName %Inner_std140 37 "mat3x2_f16_0"
OpMemberName %Inner_std140 38 "mat3x2_f16_1"
OpMemberName %Inner_std140 39 "mat3x2_f16_2"
OpMemberName %Inner_std140 40 "mat3x3_f16_0"
OpMemberName %Inner_std140 41 "mat3x3_f16_1"
OpMemberName %Inner_std140 42 "mat3x3_f16_2"
OpMemberName %Inner_std140 43 "mat3x4_f16_0"
OpMemberName %Inner_std140 44 "mat3x4_f16_1"
OpMemberName %Inner_std140 45 "mat3x4_f16_2"
OpMemberName %Inner_std140 46 "mat4x2_f16_0"
OpMemberName %Inner_std140 47 "mat4x2_f16_1"
OpMemberName %Inner_std140 48 "mat4x2_f16_2"
OpMemberName %Inner_std140 49 "mat4x2_f16_3"
OpMemberName %Inner_std140 50 "mat4x3_f16_0"
OpMemberName %Inner_std140 51 "mat4x3_f16_1"
OpMemberName %Inner_std140 52 "mat4x3_f16_2"
OpMemberName %Inner_std140 53 "mat4x3_f16_3"
OpMemberName %Inner_std140 54 "mat4x4_f16_0"
OpMemberName %Inner_std140 55 "mat4x4_f16_1"
OpMemberName %Inner_std140 56 "mat4x4_f16_2"
OpMemberName %Inner_std140 57 "mat4x4_f16_3"
OpMemberName %Inner_std140 58 "arr2_vec3_f32"
OpMemberName %Inner_std140 59 "arr2_mat4x2_f16"
OpName %mat4x2_f16_4 "mat4x2_f16_4"
OpMemberName %mat4x2_f16_4 0 "col0"
OpMemberName %mat4x2_f16_4 1 "col1"
OpMemberName %mat4x2_f16_4 2 "col2"
OpMemberName %mat4x2_f16_4 3 "col3"
OpName %ub "ub"
OpName %load_ub_inner_arr_p0_mat2x2_f32 "load_ub_inner_arr_p0_mat2x2_f32"
OpName %p0 "p0"
OpName %load_ub_inner_arr_p0_mat3x2_f32 "load_ub_inner_arr_p0_mat3x2_f32"
OpName %p0_0 "p0"
OpName %load_ub_inner_arr_p0_mat4x2_f32 "load_ub_inner_arr_p0_mat4x2_f32"
OpName %p0_1 "p0"
OpName %load_ub_inner_arr_p0_mat2x2_f16 "load_ub_inner_arr_p0_mat2x2_f16"
OpName %p0_2 "p0"
OpName %load_ub_inner_arr_p0_mat2x3_f16 "load_ub_inner_arr_p0_mat2x3_f16"
OpName %p0_3 "p0"
OpName %load_ub_inner_arr_p0_mat2x4_f16 "load_ub_inner_arr_p0_mat2x4_f16"
OpName %p0_4 "p0"
OpName %load_ub_inner_arr_p0_mat3x2_f16 "load_ub_inner_arr_p0_mat3x2_f16"
OpName %p0_5 "p0"
OpName %load_ub_inner_arr_p0_mat3x3_f16 "load_ub_inner_arr_p0_mat3x3_f16"
OpName %p0_6 "p0"
OpName %load_ub_inner_arr_p0_mat3x4_f16 "load_ub_inner_arr_p0_mat3x4_f16"
OpName %p0_7 "p0"
OpName %load_ub_inner_arr_p0_mat4x2_f16 "load_ub_inner_arr_p0_mat4x2_f16"
OpName %p0_8 "p0"
OpName %load_ub_inner_arr_p0_mat4x3_f16 "load_ub_inner_arr_p0_mat4x3_f16"
OpName %p0_9 "p0"
OpName %load_ub_inner_arr_p0_mat4x4_f16 "load_ub_inner_arr_p0_mat4x4_f16"
OpName %p0_10 "p0"
OpName %conv_mat4x2_f16 "conv_mat4x2_f16"
OpName %val "val"
OpName %conv_arr2_mat4x2_f16 "conv_arr2_mat4x2_f16"
OpName %val_0 "val"
OpName %arr "arr"
OpName %i "i"
OpName %var_for_index "var_for_index"
OpName %main_inner "main_inner"
OpName %idx "idx"
OpName %main "main"
OpDecorate %idx_1 BuiltIn LocalInvocationIndex
OpDecorate %ub_block_std140 Block
OpMemberDecorate %ub_block_std140 0 Offset 0
OpMemberDecorate %S_std140 0 Offset 0
OpMemberDecorate %Inner_std140 0 Offset 0
OpMemberDecorate %Inner_std140 1 Offset 4
OpMemberDecorate %Inner_std140 2 Offset 8
OpMemberDecorate %Inner_std140 3 Offset 12
OpMemberDecorate %Inner_std140 4 Offset 16
OpMemberDecorate %Inner_std140 5 Offset 24
OpMemberDecorate %Inner_std140 6 Offset 32
OpMemberDecorate %Inner_std140 7 Offset 40
OpMemberDecorate %Inner_std140 8 Offset 48
OpMemberDecorate %Inner_std140 9 Offset 64
OpMemberDecorate %Inner_std140 10 Offset 80
OpMemberDecorate %Inner_std140 11 Offset 96
OpMemberDecorate %Inner_std140 12 Offset 112
OpMemberDecorate %Inner_std140 13 Offset 128
OpMemberDecorate %Inner_std140 14 Offset 144
OpMemberDecorate %Inner_std140 15 Offset 160
OpMemberDecorate %Inner_std140 16 Offset 168
OpMemberDecorate %Inner_std140 17 Offset 176
OpMemberDecorate %Inner_std140 18 Offset 192
OpMemberDecorate %Inner_std140 18 ColMajor
OpMemberDecorate %Inner_std140 18 MatrixStride 16
OpMemberDecorate %Inner_std140 19 Offset 224
OpMemberDecorate %Inner_std140 19 ColMajor
OpMemberDecorate %Inner_std140 19 MatrixStride 16
OpMemberDecorate %Inner_std140 20 Offset 256
OpMemberDecorate %Inner_std140 21 Offset 264
OpMemberDecorate %Inner_std140 22 Offset 272
OpMemberDecorate %Inner_std140 23 Offset 288
OpMemberDecorate %Inner_std140 23 ColMajor
OpMemberDecorate %Inner_std140 23 MatrixStride 16
OpMemberDecorate %Inner_std140 24 Offset 336
OpMemberDecorate %Inner_std140 24 ColMajor
OpMemberDecorate %Inner_std140 24 MatrixStride 16
OpMemberDecorate %Inner_std140 25 Offset 384
OpMemberDecorate %Inner_std140 26 Offset 392
OpMemberDecorate %Inner_std140 27 Offset 400
OpMemberDecorate %Inner_std140 28 Offset 408
OpMemberDecorate %Inner_std140 29 Offset 416
OpMemberDecorate %Inner_std140 29 ColMajor
OpMemberDecorate %Inner_std140 29 MatrixStride 16
OpMemberDecorate %Inner_std140 30 Offset 480
OpMemberDecorate %Inner_std140 30 ColMajor
OpMemberDecorate %Inner_std140 30 MatrixStride 16
OpMemberDecorate %Inner_std140 31 Offset 544
OpMemberDecorate %Inner_std140 32 Offset 548
OpMemberDecorate %Inner_std140 33 Offset 552
OpMemberDecorate %Inner_std140 34 Offset 560
OpMemberDecorate %Inner_std140 35 Offset 568
OpMemberDecorate %Inner_std140 36 Offset 576
OpMemberDecorate %Inner_std140 37 Offset 584
OpMemberDecorate %Inner_std140 38 Offset 588
OpMemberDecorate %Inner_std140 39 Offset 592
OpMemberDecorate %Inner_std140 40 Offset 600
OpMemberDecorate %Inner_std140 41 Offset 608
OpMemberDecorate %Inner_std140 42 Offset 616
OpMemberDecorate %Inner_std140 43 Offset 624
OpMemberDecorate %Inner_std140 44 Offset 632
OpMemberDecorate %Inner_std140 45 Offset 640
OpMemberDecorate %Inner_std140 46 Offset 648
OpMemberDecorate %Inner_std140 47 Offset 652
OpMemberDecorate %Inner_std140 48 Offset 656
OpMemberDecorate %Inner_std140 49 Offset 660
OpMemberDecorate %Inner_std140 50 Offset 664
OpMemberDecorate %Inner_std140 51 Offset 672
OpMemberDecorate %Inner_std140 52 Offset 680
OpMemberDecorate %Inner_std140 53 Offset 688
OpMemberDecorate %Inner_std140 54 Offset 696
OpMemberDecorate %Inner_std140 55 Offset 704
OpMemberDecorate %Inner_std140 56 Offset 712
OpMemberDecorate %Inner_std140 57 Offset 720
OpMemberDecorate %Inner_std140 58 Offset 736
OpDecorate %_arr_v3float_uint_2 ArrayStride 16
OpMemberDecorate %Inner_std140 59 Offset 768
OpMemberDecorate %mat4x2_f16_4 0 Offset 0
OpMemberDecorate %mat4x2_f16_4 1 Offset 4
OpMemberDecorate %mat4x2_f16_4 2 Offset 8
OpMemberDecorate %mat4x2_f16_4 3 Offset 12
OpDecorate %_arr_mat4x2_f16_4_uint_2 ArrayStride 16
OpDecorate %_arr_Inner_std140_uint_8 ArrayStride 800
OpDecorate %ub NonWritable
OpDecorate %ub Binding 0
OpDecorate %ub DescriptorSet 0
OpDecorate %_arr_mat4v2half_uint_2 ArrayStride 16
%uint = OpTypeInt 32 0
%_ptr_Input_uint = OpTypePointer Input %uint
%idx_1 = OpVariable %_ptr_Input_uint Input
%float = OpTypeFloat 32
%int = OpTypeInt 32 1
%half = OpTypeFloat 16
%v2float = OpTypeVector %float 2
%v2int = OpTypeVector %int 2
%v2uint = OpTypeVector %uint 2
%v2half = OpTypeVector %half 2
%v3float = OpTypeVector %float 3
%v3int = OpTypeVector %int 3
%v3uint = OpTypeVector %uint 3
%v3half = OpTypeVector %half 3
%v4float = OpTypeVector %float 4
%v4int = OpTypeVector %int 4
%v4uint = OpTypeVector %uint 4
%v4half = OpTypeVector %half 4
%mat2v3float = OpTypeMatrix %v3float 2
%mat2v4float = OpTypeMatrix %v4float 2
%mat3v3float = OpTypeMatrix %v3float 3
%mat3v4float = OpTypeMatrix %v4float 3
%mat4v3float = OpTypeMatrix %v3float 4
%mat4v4float = OpTypeMatrix %v4float 4
%uint_2 = OpConstant %uint 2
%_arr_v3float_uint_2 = OpTypeArray %v3float %uint_2
%mat4x2_f16_4 = OpTypeStruct %v2half %v2half %v2half %v2half
%_arr_mat4x2_f16_4_uint_2 = OpTypeArray %mat4x2_f16_4 %uint_2
%Inner_std140 = OpTypeStruct %float %int %uint %half %v2float %v2int %v2uint %v2half %v3float %v3int %v3uint %v3half %v4float %v4int %v4uint %v4half %v2float %v2float %mat2v3float %mat2v4float %v2float %v2float %v2float %mat3v3float %mat3v4float %v2float %v2float %v2float %v2float %mat4v3float %mat4v4float %v2half %v2half %v3half %v3half %v4half %v4half %v2half %v2half %v2half %v3half %v3half %v3half %v4half %v4half %v4half %v2half %v2half %v2half %v2half %v3half %v3half %v3half %v3half %v4half %v4half %v4half %v4half %_arr_v3float_uint_2 %_arr_mat4x2_f16_4_uint_2
%uint_8 = OpConstant %uint 8
%_arr_Inner_std140_uint_8 = OpTypeArray %Inner_std140 %uint_8
%S_std140 = OpTypeStruct %_arr_Inner_std140_uint_8
%ub_block_std140 = OpTypeStruct %S_std140
%_ptr_Uniform_ub_block_std140 = OpTypePointer Uniform %ub_block_std140
%ub = OpVariable %_ptr_Uniform_ub_block_std140 Uniform
%mat2v2float = OpTypeMatrix %v2float 2
%36 = OpTypeFunction %mat2v2float %uint
%uint_0 = OpConstant %uint 0
%_ptr_Uniform_Inner_std140 = OpTypePointer Uniform %Inner_std140
%uint_16 = OpConstant %uint 16
%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
%uint_17 = OpConstant %uint 17
%mat3v2float = OpTypeMatrix %v2float 3
%55 = OpTypeFunction %mat3v2float %uint
%uint_20 = OpConstant %uint 20
%uint_21 = OpConstant %uint 21
%uint_22 = OpConstant %uint 22
%mat4v2float = OpTypeMatrix %v2float 4
%75 = OpTypeFunction %mat4v2float %uint
%uint_25 = OpConstant %uint 25
%uint_26 = OpConstant %uint 26
%uint_27 = OpConstant %uint 27
%uint_28 = OpConstant %uint 28
%mat2v2half = OpTypeMatrix %v2half 2
%99 = OpTypeFunction %mat2v2half %uint
%uint_31 = OpConstant %uint 31
%_ptr_Uniform_v2half = OpTypePointer Uniform %v2half
%uint_32 = OpConstant %uint 32
%mat2v3half = OpTypeMatrix %v3half 2
%116 = OpTypeFunction %mat2v3half %uint
%uint_33 = OpConstant %uint 33
%_ptr_Uniform_v3half = OpTypePointer Uniform %v3half
%uint_34 = OpConstant %uint 34
%mat2v4half = OpTypeMatrix %v4half 2
%133 = OpTypeFunction %mat2v4half %uint
%uint_35 = OpConstant %uint 35
%_ptr_Uniform_v4half = OpTypePointer Uniform %v4half
%uint_36 = OpConstant %uint 36
%mat3v2half = OpTypeMatrix %v2half 3
%150 = OpTypeFunction %mat3v2half %uint
%uint_37 = OpConstant %uint 37
%uint_38 = OpConstant %uint 38
%uint_39 = OpConstant %uint 39
%mat3v3half = OpTypeMatrix %v3half 3
%170 = OpTypeFunction %mat3v3half %uint
%uint_40 = OpConstant %uint 40
%uint_41 = OpConstant %uint 41
%uint_42 = OpConstant %uint 42
%mat3v4half = OpTypeMatrix %v4half 3
%190 = OpTypeFunction %mat3v4half %uint
%uint_43 = OpConstant %uint 43
%uint_44 = OpConstant %uint 44
%uint_45 = OpConstant %uint 45
%mat4v2half = OpTypeMatrix %v2half 4
%210 = OpTypeFunction %mat4v2half %uint
%uint_46 = OpConstant %uint 46
%uint_47 = OpConstant %uint 47
%uint_48 = OpConstant %uint 48
%uint_49 = OpConstant %uint 49
%mat4v3half = OpTypeMatrix %v3half 4
%234 = OpTypeFunction %mat4v3half %uint
%uint_50 = OpConstant %uint 50
%uint_51 = OpConstant %uint 51
%uint_52 = OpConstant %uint 52
%uint_53 = OpConstant %uint 53
%mat4v4half = OpTypeMatrix %v4half 4
%258 = OpTypeFunction %mat4v4half %uint
%uint_54 = OpConstant %uint 54
%uint_55 = OpConstant %uint 55
%uint_56 = OpConstant %uint 56
%uint_57 = OpConstant %uint 57
%282 = OpTypeFunction %mat4v2half %mat4x2_f16_4
%_arr_mat4v2half_uint_2 = OpTypeArray %mat4v2half %uint_2
%291 = OpTypeFunction %_arr_mat4v2half_uint_2 %_arr_mat4x2_f16_4_uint_2
%_ptr_Function__arr_mat4v2half_uint_2 = OpTypePointer Function %_arr_mat4v2half_uint_2
%298 = OpConstantNull %_arr_mat4v2half_uint_2
%_ptr_Function_uint = OpTypePointer Function %uint
%301 = OpConstantNull %uint
%bool = OpTypeBool
%_ptr_Function__arr_mat4x2_f16_4_uint_2 = OpTypePointer Function %_arr_mat4x2_f16_4_uint_2
%314 = OpConstantNull %_arr_mat4x2_f16_4_uint_2
%_ptr_Function_mat4v2half = OpTypePointer Function %mat4v2half
%_ptr_Function_mat4x2_f16_4 = OpTypePointer Function %mat4x2_f16_4
%uint_1 = OpConstant %uint 1
%void = OpTypeVoid
%327 = OpTypeFunction %void %uint
%_ptr_Uniform_float = OpTypePointer Uniform %float
%_ptr_Uniform_int = OpTypePointer Uniform %int
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
%uint_3 = OpConstant %uint 3
%_ptr_Uniform_half = OpTypePointer Uniform %half
%uint_4 = OpConstant %uint 4
%uint_5 = OpConstant %uint 5
%_ptr_Uniform_v2int = OpTypePointer Uniform %v2int
%uint_6 = OpConstant %uint 6
%_ptr_Uniform_v2uint = OpTypePointer Uniform %v2uint
%uint_7 = OpConstant %uint 7
%_ptr_Uniform_v3float = OpTypePointer Uniform %v3float
%uint_9 = OpConstant %uint 9
%_ptr_Uniform_v3int = OpTypePointer Uniform %v3int
%uint_10 = OpConstant %uint 10
%_ptr_Uniform_v3uint = OpTypePointer Uniform %v3uint
%uint_11 = OpConstant %uint 11
%uint_12 = OpConstant %uint 12
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
%uint_13 = OpConstant %uint 13
%_ptr_Uniform_v4int = OpTypePointer Uniform %v4int
%uint_14 = OpConstant %uint 14
%_ptr_Uniform_v4uint = OpTypePointer Uniform %v4uint
%uint_15 = OpConstant %uint 15
%uint_18 = OpConstant %uint 18
%_ptr_Uniform_mat2v3float = OpTypePointer Uniform %mat2v3float
%uint_19 = OpConstant %uint 19
%_ptr_Uniform_mat2v4float = OpTypePointer Uniform %mat2v4float
%uint_23 = OpConstant %uint 23
%_ptr_Uniform_mat3v3float = OpTypePointer Uniform %mat3v3float
%uint_24 = OpConstant %uint 24
%_ptr_Uniform_mat3v4float = OpTypePointer Uniform %mat3v4float
%uint_29 = OpConstant %uint 29
%_ptr_Uniform_mat4v3float = OpTypePointer Uniform %mat4v3float
%uint_30 = OpConstant %uint 30
%_ptr_Uniform_mat4v4float = OpTypePointer Uniform %mat4v4float
%uint_58 = OpConstant %uint 58
%_ptr_Uniform__arr_v3float_uint_2 = OpTypePointer Uniform %_arr_v3float_uint_2
%uint_59 = OpConstant %uint 59
%_ptr_Uniform__arr_mat4x2_f16_4_uint_2 = OpTypePointer Uniform %_arr_mat4x2_f16_4_uint_2
%445 = OpTypeFunction %void
%load_ub_inner_arr_p0_mat2x2_f32 = OpFunction %mat2v2float None %36
%p0 = OpFunctionParameter %uint
%40 = OpLabel
%44 = OpAccessChain %_ptr_Uniform_Inner_std140 %ub %uint_0 %uint_0 %p0
%48 = OpAccessChain %_ptr_Uniform_v2float %44 %uint_16
%49 = OpLoad %v2float %48
%52 = OpAccessChain %_ptr_Uniform_v2float %44 %uint_17
%53 = OpLoad %v2float %52
%54 = OpCompositeConstruct %mat2v2float %49 %53
OpReturnValue %54
OpFunctionEnd
%load_ub_inner_arr_p0_mat3x2_f32 = OpFunction %mat3v2float None %55
%p0_0 = OpFunctionParameter %uint
%59 = OpLabel
%61 = OpAccessChain %_ptr_Uniform_Inner_std140 %ub %uint_0 %uint_0 %p0_0
%64 = OpAccessChain %_ptr_Uniform_v2float %61 %uint_20
%65 = OpLoad %v2float %64
%68 = OpAccessChain %_ptr_Uniform_v2float %61 %uint_21
%69 = OpLoad %v2float %68
%72 = OpAccessChain %_ptr_Uniform_v2float %61 %uint_22
%73 = OpLoad %v2float %72
%74 = OpCompositeConstruct %mat3v2float %65 %69 %73
OpReturnValue %74
OpFunctionEnd
%load_ub_inner_arr_p0_mat4x2_f32 = OpFunction %mat4v2float None %75
%p0_1 = OpFunctionParameter %uint
%79 = OpLabel
%81 = OpAccessChain %_ptr_Uniform_Inner_std140 %ub %uint_0 %uint_0 %p0_1
%84 = OpAccessChain %_ptr_Uniform_v2float %81 %uint_25
%85 = OpLoad %v2float %84
%88 = OpAccessChain %_ptr_Uniform_v2float %81 %uint_26
%89 = OpLoad %v2float %88
%92 = OpAccessChain %_ptr_Uniform_v2float %81 %uint_27
%93 = OpLoad %v2float %92
%96 = OpAccessChain %_ptr_Uniform_v2float %81 %uint_28
%97 = OpLoad %v2float %96
%98 = OpCompositeConstruct %mat4v2float %85 %89 %93 %97
OpReturnValue %98
OpFunctionEnd
%load_ub_inner_arr_p0_mat2x2_f16 = OpFunction %mat2v2half None %99
%p0_2 = OpFunctionParameter %uint
%103 = OpLabel
%105 = OpAccessChain %_ptr_Uniform_Inner_std140 %ub %uint_0 %uint_0 %p0_2
%109 = OpAccessChain %_ptr_Uniform_v2half %105 %uint_31
%110 = OpLoad %v2half %109
%113 = OpAccessChain %_ptr_Uniform_v2half %105 %uint_32
%114 = OpLoad %v2half %113
%115 = OpCompositeConstruct %mat2v2half %110 %114
OpReturnValue %115
OpFunctionEnd
%load_ub_inner_arr_p0_mat2x3_f16 = OpFunction %mat2v3half None %116
%p0_3 = OpFunctionParameter %uint
%120 = OpLabel
%122 = OpAccessChain %_ptr_Uniform_Inner_std140 %ub %uint_0 %uint_0 %p0_3
%126 = OpAccessChain %_ptr_Uniform_v3half %122 %uint_33
%127 = OpLoad %v3half %126
%130 = OpAccessChain %_ptr_Uniform_v3half %122 %uint_34
%131 = OpLoad %v3half %130
%132 = OpCompositeConstruct %mat2v3half %127 %131
OpReturnValue %132
OpFunctionEnd
%load_ub_inner_arr_p0_mat2x4_f16 = OpFunction %mat2v4half None %133
%p0_4 = OpFunctionParameter %uint
%137 = OpLabel
%139 = OpAccessChain %_ptr_Uniform_Inner_std140 %ub %uint_0 %uint_0 %p0_4
%143 = OpAccessChain %_ptr_Uniform_v4half %139 %uint_35
%144 = OpLoad %v4half %143
%147 = OpAccessChain %_ptr_Uniform_v4half %139 %uint_36
%148 = OpLoad %v4half %147
%149 = OpCompositeConstruct %mat2v4half %144 %148
OpReturnValue %149
OpFunctionEnd
%load_ub_inner_arr_p0_mat3x2_f16 = OpFunction %mat3v2half None %150
%p0_5 = OpFunctionParameter %uint
%154 = OpLabel
%156 = OpAccessChain %_ptr_Uniform_Inner_std140 %ub %uint_0 %uint_0 %p0_5
%159 = OpAccessChain %_ptr_Uniform_v2half %156 %uint_37
%160 = OpLoad %v2half %159
%163 = OpAccessChain %_ptr_Uniform_v2half %156 %uint_38
%164 = OpLoad %v2half %163
%167 = OpAccessChain %_ptr_Uniform_v2half %156 %uint_39
%168 = OpLoad %v2half %167
%169 = OpCompositeConstruct %mat3v2half %160 %164 %168
OpReturnValue %169
OpFunctionEnd
%load_ub_inner_arr_p0_mat3x3_f16 = OpFunction %mat3v3half None %170
%p0_6 = OpFunctionParameter %uint
%174 = OpLabel
%176 = OpAccessChain %_ptr_Uniform_Inner_std140 %ub %uint_0 %uint_0 %p0_6
%179 = OpAccessChain %_ptr_Uniform_v3half %176 %uint_40
%180 = OpLoad %v3half %179
%183 = OpAccessChain %_ptr_Uniform_v3half %176 %uint_41
%184 = OpLoad %v3half %183
%187 = OpAccessChain %_ptr_Uniform_v3half %176 %uint_42
%188 = OpLoad %v3half %187
%189 = OpCompositeConstruct %mat3v3half %180 %184 %188
OpReturnValue %189
OpFunctionEnd
%load_ub_inner_arr_p0_mat3x4_f16 = OpFunction %mat3v4half None %190
%p0_7 = OpFunctionParameter %uint
%194 = OpLabel
%196 = OpAccessChain %_ptr_Uniform_Inner_std140 %ub %uint_0 %uint_0 %p0_7
%199 = OpAccessChain %_ptr_Uniform_v4half %196 %uint_43
%200 = OpLoad %v4half %199
%203 = OpAccessChain %_ptr_Uniform_v4half %196 %uint_44
%204 = OpLoad %v4half %203
%207 = OpAccessChain %_ptr_Uniform_v4half %196 %uint_45
%208 = OpLoad %v4half %207
%209 = OpCompositeConstruct %mat3v4half %200 %204 %208
OpReturnValue %209
OpFunctionEnd
%load_ub_inner_arr_p0_mat4x2_f16 = OpFunction %mat4v2half None %210
%p0_8 = OpFunctionParameter %uint
%214 = OpLabel
%216 = OpAccessChain %_ptr_Uniform_Inner_std140 %ub %uint_0 %uint_0 %p0_8
%219 = OpAccessChain %_ptr_Uniform_v2half %216 %uint_46
%220 = OpLoad %v2half %219
%223 = OpAccessChain %_ptr_Uniform_v2half %216 %uint_47
%224 = OpLoad %v2half %223
%227 = OpAccessChain %_ptr_Uniform_v2half %216 %uint_48
%228 = OpLoad %v2half %227
%231 = OpAccessChain %_ptr_Uniform_v2half %216 %uint_49
%232 = OpLoad %v2half %231
%233 = OpCompositeConstruct %mat4v2half %220 %224 %228 %232
OpReturnValue %233
OpFunctionEnd
%load_ub_inner_arr_p0_mat4x3_f16 = OpFunction %mat4v3half None %234
%p0_9 = OpFunctionParameter %uint
%238 = OpLabel
%240 = OpAccessChain %_ptr_Uniform_Inner_std140 %ub %uint_0 %uint_0 %p0_9
%243 = OpAccessChain %_ptr_Uniform_v3half %240 %uint_50
%244 = OpLoad %v3half %243
%247 = OpAccessChain %_ptr_Uniform_v3half %240 %uint_51
%248 = OpLoad %v3half %247
%251 = OpAccessChain %_ptr_Uniform_v3half %240 %uint_52
%252 = OpLoad %v3half %251
%255 = OpAccessChain %_ptr_Uniform_v3half %240 %uint_53
%256 = OpLoad %v3half %255
%257 = OpCompositeConstruct %mat4v3half %244 %248 %252 %256
OpReturnValue %257
OpFunctionEnd
%load_ub_inner_arr_p0_mat4x4_f16 = OpFunction %mat4v4half None %258
%p0_10 = OpFunctionParameter %uint
%262 = OpLabel
%264 = OpAccessChain %_ptr_Uniform_Inner_std140 %ub %uint_0 %uint_0 %p0_10
%267 = OpAccessChain %_ptr_Uniform_v4half %264 %uint_54
%268 = OpLoad %v4half %267
%271 = OpAccessChain %_ptr_Uniform_v4half %264 %uint_55
%272 = OpLoad %v4half %271
%275 = OpAccessChain %_ptr_Uniform_v4half %264 %uint_56
%276 = OpLoad %v4half %275
%279 = OpAccessChain %_ptr_Uniform_v4half %264 %uint_57
%280 = OpLoad %v4half %279
%281 = OpCompositeConstruct %mat4v4half %268 %272 %276 %280
OpReturnValue %281
OpFunctionEnd
%conv_mat4x2_f16 = OpFunction %mat4v2half None %282
%val = OpFunctionParameter %mat4x2_f16_4
%285 = OpLabel
%286 = OpCompositeExtract %v2half %val 0
%287 = OpCompositeExtract %v2half %val 1
%288 = OpCompositeExtract %v2half %val 2
%289 = OpCompositeExtract %v2half %val 3
%290 = OpCompositeConstruct %mat4v2half %286 %287 %288 %289
OpReturnValue %290
OpFunctionEnd
%conv_arr2_mat4x2_f16 = OpFunction %_arr_mat4v2half_uint_2 None %291
%val_0 = OpFunctionParameter %_arr_mat4x2_f16_4_uint_2
%295 = OpLabel
%arr = OpVariable %_ptr_Function__arr_mat4v2half_uint_2 Function %298
%i = OpVariable %_ptr_Function_uint Function %301
%var_for_index = OpVariable %_ptr_Function__arr_mat4x2_f16_4_uint_2 Function %314
OpBranch %302
%302 = OpLabel
OpLoopMerge %303 %304 None
OpBranch %305
%305 = OpLabel
%307 = OpLoad %uint %i
%308 = OpULessThan %bool %307 %uint_2
%306 = OpLogicalNot %bool %308
OpSelectionMerge %310 None
OpBranchConditional %306 %311 %310
%311 = OpLabel
OpBranch %303
%310 = OpLabel
OpStore %var_for_index %val_0
%315 = OpLoad %uint %i
%317 = OpAccessChain %_ptr_Function_mat4v2half %arr %315
%319 = OpLoad %uint %i
%321 = OpAccessChain %_ptr_Function_mat4x2_f16_4 %var_for_index %319
%322 = OpLoad %mat4x2_f16_4 %321
%318 = OpFunctionCall %mat4v2half %conv_mat4x2_f16 %322
OpStore %317 %318
OpBranch %304
%304 = OpLabel
%323 = OpLoad %uint %i
%325 = OpIAdd %uint %323 %uint_1
OpStore %i %325
OpBranch %302
%303 = OpLabel
%326 = OpLoad %_arr_mat4v2half_uint_2 %arr
OpReturnValue %326
OpFunctionEnd
%main_inner = OpFunction %void None %327
%idx = OpFunctionParameter %uint
%331 = OpLabel
%333 = OpAccessChain %_ptr_Uniform_float %ub %uint_0 %uint_0 %idx %uint_0
%334 = OpLoad %float %333
%336 = OpAccessChain %_ptr_Uniform_int %ub %uint_0 %uint_0 %idx %uint_1
%337 = OpLoad %int %336
%339 = OpAccessChain %_ptr_Uniform_uint %ub %uint_0 %uint_0 %idx %uint_2
%340 = OpLoad %uint %339
%343 = OpAccessChain %_ptr_Uniform_half %ub %uint_0 %uint_0 %idx %uint_3
%344 = OpLoad %half %343
%346 = OpAccessChain %_ptr_Uniform_v2float %ub %uint_0 %uint_0 %idx %uint_4
%347 = OpLoad %v2float %346
%350 = OpAccessChain %_ptr_Uniform_v2int %ub %uint_0 %uint_0 %idx %uint_5
%351 = OpLoad %v2int %350
%354 = OpAccessChain %_ptr_Uniform_v2uint %ub %uint_0 %uint_0 %idx %uint_6
%355 = OpLoad %v2uint %354
%357 = OpAccessChain %_ptr_Uniform_v2half %ub %uint_0 %uint_0 %idx %uint_7
%358 = OpLoad %v2half %357
%360 = OpAccessChain %_ptr_Uniform_v3float %ub %uint_0 %uint_0 %idx %uint_8
%361 = OpLoad %v3float %360
%364 = OpAccessChain %_ptr_Uniform_v3int %ub %uint_0 %uint_0 %idx %uint_9
%365 = OpLoad %v3int %364
%368 = OpAccessChain %_ptr_Uniform_v3uint %ub %uint_0 %uint_0 %idx %uint_10
%369 = OpLoad %v3uint %368
%371 = OpAccessChain %_ptr_Uniform_v3half %ub %uint_0 %uint_0 %idx %uint_11
%372 = OpLoad %v3half %371
%375 = OpAccessChain %_ptr_Uniform_v4float %ub %uint_0 %uint_0 %idx %uint_12
%376 = OpLoad %v4float %375
%379 = OpAccessChain %_ptr_Uniform_v4int %ub %uint_0 %uint_0 %idx %uint_13
%380 = OpLoad %v4int %379
%383 = OpAccessChain %_ptr_Uniform_v4uint %ub %uint_0 %uint_0 %idx %uint_14
%384 = OpLoad %v4uint %383
%386 = OpAccessChain %_ptr_Uniform_v4half %ub %uint_0 %uint_0 %idx %uint_15
%387 = OpLoad %v4half %386
%388 = OpFunctionCall %mat2v2float %load_ub_inner_arr_p0_mat2x2_f32 %idx
%392 = OpAccessChain %_ptr_Uniform_mat2v3float %ub %uint_0 %uint_0 %idx %uint_18
%393 = OpLoad %mat2v3float %392
%396 = OpAccessChain %_ptr_Uniform_mat2v4float %ub %uint_0 %uint_0 %idx %uint_19
%397 = OpLoad %mat2v4float %396
%398 = OpFunctionCall %mat3v2float %load_ub_inner_arr_p0_mat3x2_f32 %idx
%402 = OpAccessChain %_ptr_Uniform_mat3v3float %ub %uint_0 %uint_0 %idx %uint_23
%403 = OpLoad %mat3v3float %402
%406 = OpAccessChain %_ptr_Uniform_mat3v4float %ub %uint_0 %uint_0 %idx %uint_24
%407 = OpLoad %mat3v4float %406
%408 = OpFunctionCall %mat4v2float %load_ub_inner_arr_p0_mat4x2_f32 %idx
%412 = OpAccessChain %_ptr_Uniform_mat4v3float %ub %uint_0 %uint_0 %idx %uint_29
%413 = OpLoad %mat4v3float %412
%416 = OpAccessChain %_ptr_Uniform_mat4v4float %ub %uint_0 %uint_0 %idx %uint_30
%417 = OpLoad %mat4v4float %416
%418 = OpFunctionCall %mat2v2half %load_ub_inner_arr_p0_mat2x2_f16 %idx
%420 = OpFunctionCall %mat2v3half %load_ub_inner_arr_p0_mat2x3_f16 %idx
%422 = OpFunctionCall %mat2v4half %load_ub_inner_arr_p0_mat2x4_f16 %idx
%424 = OpFunctionCall %mat3v2half %load_ub_inner_arr_p0_mat3x2_f16 %idx
%426 = OpFunctionCall %mat3v3half %load_ub_inner_arr_p0_mat3x3_f16 %idx
%428 = OpFunctionCall %mat3v4half %load_ub_inner_arr_p0_mat3x4_f16 %idx
%430 = OpFunctionCall %mat4v2half %load_ub_inner_arr_p0_mat4x2_f16 %idx
%432 = OpFunctionCall %mat4v3half %load_ub_inner_arr_p0_mat4x3_f16 %idx
%434 = OpFunctionCall %mat4v4half %load_ub_inner_arr_p0_mat4x4_f16 %idx
%438 = OpAccessChain %_ptr_Uniform__arr_v3float_uint_2 %ub %uint_0 %uint_0 %idx %uint_58
%439 = OpLoad %_arr_v3float_uint_2 %438
%443 = OpAccessChain %_ptr_Uniform__arr_mat4x2_f16_4_uint_2 %ub %uint_0 %uint_0 %idx %uint_59
%444 = OpLoad %_arr_mat4x2_f16_4_uint_2 %443
%440 = OpFunctionCall %_arr_mat4v2half_uint_2 %conv_arr2_mat4x2_f16 %444
OpReturn
OpFunctionEnd
%main = OpFunction %void None %445
%447 = OpLabel
%449 = OpLoad %uint %idx_1
%448 = OpFunctionCall %void %main_inner %449
OpReturn
OpFunctionEnd

View File

@@ -0,0 +1,87 @@
enable f16;
struct Inner {
scalar_f32 : f32,
scalar_i32 : i32,
scalar_u32 : u32,
scalar_f16 : f16,
vec2_f32 : vec2<f32>,
vec2_i32 : vec2<i32>,
vec2_u32 : vec2<u32>,
vec2_f16 : vec2<f16>,
vec3_f32 : vec3<f32>,
vec3_i32 : vec3<i32>,
vec3_u32 : vec3<u32>,
vec3_f16 : vec3<f16>,
vec4_f32 : vec4<f32>,
vec4_i32 : vec4<i32>,
vec4_u32 : vec4<u32>,
vec4_f16 : vec4<f16>,
mat2x2_f32 : mat2x2<f32>,
mat2x3_f32 : mat2x3<f32>,
mat2x4_f32 : mat2x4<f32>,
mat3x2_f32 : mat3x2<f32>,
mat3x3_f32 : mat3x3<f32>,
mat3x4_f32 : mat3x4<f32>,
mat4x2_f32 : mat4x2<f32>,
mat4x3_f32 : mat4x3<f32>,
mat4x4_f32 : mat4x4<f32>,
mat2x2_f16 : mat2x2<f16>,
mat2x3_f16 : mat2x3<f16>,
mat2x4_f16 : mat2x4<f16>,
mat3x2_f16 : mat3x2<f16>,
mat3x3_f16 : mat3x3<f16>,
mat3x4_f16 : mat3x4<f16>,
mat4x2_f16 : mat4x2<f16>,
mat4x3_f16 : mat4x3<f16>,
mat4x4_f16 : mat4x4<f16>,
@align(16)
arr2_vec3_f32 : array<vec3<f32>, 2>,
arr2_mat4x2_f16 : array<mat4x2<f16>, 2>,
}
struct S {
arr : array<Inner, 8>,
}
@binding(0) @group(0) var<uniform> ub : S;
@compute @workgroup_size(1)
fn main(@builtin(local_invocation_index) idx : u32) {
let scalar_f32 : f32 = ub.arr[idx].scalar_f32;
let scalar_i32 : i32 = ub.arr[idx].scalar_i32;
let scalar_u32 : u32 = ub.arr[idx].scalar_u32;
let scalar_f16 : f16 = ub.arr[idx].scalar_f16;
let vec2_f32 : vec2<f32> = ub.arr[idx].vec2_f32;
let vec2_i32 : vec2<i32> = ub.arr[idx].vec2_i32;
let vec2_u32 : vec2<u32> = ub.arr[idx].vec2_u32;
let vec2_f16 : vec2<f16> = ub.arr[idx].vec2_f16;
let vec3_f32 : vec3<f32> = ub.arr[idx].vec3_f32;
let vec3_i32 : vec3<i32> = ub.arr[idx].vec3_i32;
let vec3_u32 : vec3<u32> = ub.arr[idx].vec3_u32;
let vec3_f16 : vec3<f16> = ub.arr[idx].vec3_f16;
let vec4_f32 : vec4<f32> = ub.arr[idx].vec4_f32;
let vec4_i32 : vec4<i32> = ub.arr[idx].vec4_i32;
let vec4_u32 : vec4<u32> = ub.arr[idx].vec4_u32;
let vec4_f16 : vec4<f16> = ub.arr[idx].vec4_f16;
let mat2x2_f32 : mat2x2<f32> = ub.arr[idx].mat2x2_f32;
let mat2x3_f32 : mat2x3<f32> = ub.arr[idx].mat2x3_f32;
let mat2x4_f32 : mat2x4<f32> = ub.arr[idx].mat2x4_f32;
let mat3x2_f32 : mat3x2<f32> = ub.arr[idx].mat3x2_f32;
let mat3x3_f32 : mat3x3<f32> = ub.arr[idx].mat3x3_f32;
let mat3x4_f32 : mat3x4<f32> = ub.arr[idx].mat3x4_f32;
let mat4x2_f32 : mat4x2<f32> = ub.arr[idx].mat4x2_f32;
let mat4x3_f32 : mat4x3<f32> = ub.arr[idx].mat4x3_f32;
let mat4x4_f32 : mat4x4<f32> = ub.arr[idx].mat4x4_f32;
let mat2x2_f16 : mat2x2<f16> = ub.arr[idx].mat2x2_f16;
let mat2x3_f16 : mat2x3<f16> = ub.arr[idx].mat2x3_f16;
let mat2x4_f16 : mat2x4<f16> = ub.arr[idx].mat2x4_f16;
let mat3x2_f16 : mat3x2<f16> = ub.arr[idx].mat3x2_f16;
let mat3x3_f16 : mat3x3<f16> = ub.arr[idx].mat3x3_f16;
let mat3x4_f16 : mat3x4<f16> = ub.arr[idx].mat3x4_f16;
let mat4x2_f16 : mat4x2<f16> = ub.arr[idx].mat4x2_f16;
let mat4x3_f16 : mat4x3<f16> = ub.arr[idx].mat4x3_f16;
let mat4x4_f16 : mat4x4<f16> = ub.arr[idx].mat4x4_f16;
let arr2_vec3_f32 : array<vec3<f32>, 2> = ub.arr[idx].arr2_vec3_f32;
let arr2_mat4x2_f16 : array<mat4x2<f16>, 2> = ub.arr[idx].arr2_mat4x2_f16;
}