e2e tests: generate missing expected files
Change-Id: I6b4aee4bb08b0f4c02c015f469edc24be1623fc3 Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/73340 Kokoro: Kokoro <noreply+kokoro@google.com> Reviewed-by: James Price <jrprice@google.com> Commit-Queue: Antonio Maiorano <amaiorano@google.com>
This commit is contained in:
parent
667bc2d929
commit
a9d6c34d86
|
@ -0,0 +1,16 @@
|
||||||
|
[numthreads(1, 1, 1)]
|
||||||
|
void unused_entry_point() {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct A {
|
||||||
|
int a;
|
||||||
|
};
|
||||||
|
struct B {
|
||||||
|
int b;
|
||||||
|
};
|
||||||
|
|
||||||
|
B f(A a) {
|
||||||
|
const B tint_symbol = (B)0;
|
||||||
|
return tint_symbol;
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
; SPIR-V
|
||||||
|
; Version: 1.3
|
||||||
|
; Generator: Google Tint Compiler; 0
|
||||||
|
; Bound: 13
|
||||||
|
; Schema: 0
|
||||||
|
OpCapability Shader
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
|
||||||
|
OpExecutionMode %unused_entry_point LocalSize 1 1 1
|
||||||
|
OpName %unused_entry_point "unused_entry_point"
|
||||||
|
OpName %B "B"
|
||||||
|
OpMemberName %B 0 "b"
|
||||||
|
OpName %A "A"
|
||||||
|
OpMemberName %A 0 "a"
|
||||||
|
OpName %f "f"
|
||||||
|
OpName %a "a"
|
||||||
|
OpMemberDecorate %B 0 Offset 0
|
||||||
|
OpMemberDecorate %A 0 Offset 0
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%1 = OpTypeFunction %void
|
||||||
|
%int = OpTypeInt 32 1
|
||||||
|
%B = OpTypeStruct %int
|
||||||
|
%A = OpTypeStruct %int
|
||||||
|
%5 = OpTypeFunction %B %A
|
||||||
|
%12 = OpConstantNull %B
|
||||||
|
%unused_entry_point = OpFunction %void None %1
|
||||||
|
%4 = OpLabel
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
||||||
|
%f = OpFunction %B None %5
|
||||||
|
%a = OpFunctionParameter %A
|
||||||
|
%11 = OpLabel
|
||||||
|
OpReturnValue %12
|
||||||
|
OpFunctionEnd
|
|
@ -0,0 +1,11 @@
|
||||||
|
struct A {
|
||||||
|
a : i32;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct B {
|
||||||
|
b : i32;
|
||||||
|
};
|
||||||
|
|
||||||
|
fn f(a : A) -> B {
|
||||||
|
return B();
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
cbuffer cbuffer_ubo : register(b0, space0) {
|
||||||
|
uint4 ubo[1];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct S {
|
||||||
|
int data[64];
|
||||||
|
};
|
||||||
|
|
||||||
|
RWByteAddressBuffer result : register(u1, space0);
|
||||||
|
|
||||||
|
[numthreads(1, 1, 1)]
|
||||||
|
void f() {
|
||||||
|
S s = (S)0;
|
||||||
|
{
|
||||||
|
int tint_symbol_2[64] = s.data;
|
||||||
|
tint_symbol_2[asint(ubo[0].x)] = 1;
|
||||||
|
s.data = tint_symbol_2;
|
||||||
|
}
|
||||||
|
result.Store(0u, asuint(s.data[3]));
|
||||||
|
return;
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
cbuffer cbuffer_ubo : register(b0, space0) {
|
||||||
|
uint4 ubo[1];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct S {
|
||||||
|
int data[64];
|
||||||
|
};
|
||||||
|
|
||||||
|
RWByteAddressBuffer result : register(u1, space0);
|
||||||
|
|
||||||
|
void x(inout S p) {
|
||||||
|
{
|
||||||
|
int tint_symbol_2[64] = p.data;
|
||||||
|
tint_symbol_2[asint(ubo[0].x)] = 1;
|
||||||
|
p.data = tint_symbol_2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[numthreads(1, 1, 1)]
|
||||||
|
void f() {
|
||||||
|
S s = (S)0;
|
||||||
|
x(s);
|
||||||
|
result.Store(0u, asuint(s.data[3]));
|
||||||
|
return;
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
cbuffer cbuffer_ubo : register(b0, space0) {
|
||||||
|
uint4 ubo[1];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct S {
|
||||||
|
int data[64];
|
||||||
|
};
|
||||||
|
|
||||||
|
RWByteAddressBuffer result : register(u1, space0);
|
||||||
|
static S s = (S)0;
|
||||||
|
|
||||||
|
[numthreads(1, 1, 1)]
|
||||||
|
void f() {
|
||||||
|
{
|
||||||
|
int tint_symbol_2[64] = s.data;
|
||||||
|
tint_symbol_2[asint(ubo[0].x)] = 1;
|
||||||
|
s.data = tint_symbol_2;
|
||||||
|
}
|
||||||
|
result.Store(0u, asuint(s.data[3]));
|
||||||
|
return;
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
cbuffer cbuffer_ubo : register(b0, space0) {
|
||||||
|
uint4 ubo[1];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct S {
|
||||||
|
int data[64];
|
||||||
|
};
|
||||||
|
|
||||||
|
RWByteAddressBuffer result : register(u1, space0);
|
||||||
|
static S s = (S)0;
|
||||||
|
|
||||||
|
void x(inout S p) {
|
||||||
|
{
|
||||||
|
int tint_symbol_2[64] = p.data;
|
||||||
|
tint_symbol_2[asint(ubo[0].x)] = 1;
|
||||||
|
p.data = tint_symbol_2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[numthreads(1, 1, 1)]
|
||||||
|
void f() {
|
||||||
|
x(s);
|
||||||
|
result.Store(0u, asuint(s.data[3]));
|
||||||
|
return;
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
#include <metal_stdlib>
|
||||||
|
|
||||||
|
using namespace metal;
|
||||||
|
|
||||||
|
template<typename T, int N, int M>
|
||||||
|
inline vec<T, M> operator*(matrix<T, N, M> lhs, packed_vec<T, N> rhs) {
|
||||||
|
return lhs * vec<T, N>(rhs);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T, int N, int M>
|
||||||
|
inline vec<T, N> operator*(packed_vec<T, M> lhs, matrix<T, N, M> rhs) {
|
||||||
|
return vec<T, M>(lhs) * rhs;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Simulation {
|
||||||
|
/* 0x0000 */ uint i;
|
||||||
|
};
|
||||||
|
struct tint_array_wrapper {
|
||||||
|
/* 0x0000 */ float3 arr[8];
|
||||||
|
};
|
||||||
|
struct Particle {
|
||||||
|
/* 0x0000 */ tint_array_wrapper position;
|
||||||
|
/* 0x0080 */ float lifetime;
|
||||||
|
/* 0x0084 */ int8_t tint_pad[12];
|
||||||
|
/* 0x0090 */ float4 color;
|
||||||
|
/* 0x00a0 */ packed_float3 velocity;
|
||||||
|
/* 0x00ac */ int8_t tint_pad_1[4];
|
||||||
|
};
|
||||||
|
struct Particles {
|
||||||
|
/* 0x0000 */ Particle p[1];
|
||||||
|
};
|
||||||
|
|
||||||
|
kernel void tint_symbol(const device Particles* tint_symbol_1 [[buffer(1)]], const constant Simulation* tint_symbol_2 [[buffer(0)]]) {
|
||||||
|
Particle particle = (*(tint_symbol_1)).p[0];
|
||||||
|
particle.position.arr[(*(tint_symbol_2)).i] = particle.position.arr[(*(tint_symbol_2)).i];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,78 @@
|
||||||
|
; SPIR-V
|
||||||
|
; Version: 1.3
|
||||||
|
; Generator: Google Tint Compiler; 0
|
||||||
|
; Bound: 37
|
||||||
|
; Schema: 0
|
||||||
|
OpCapability Shader
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint GLCompute %main "main"
|
||||||
|
OpExecutionMode %main LocalSize 1 1 1
|
||||||
|
OpName %Particles "Particles"
|
||||||
|
OpMemberName %Particles 0 "p"
|
||||||
|
OpName %Particle "Particle"
|
||||||
|
OpMemberName %Particle 0 "position"
|
||||||
|
OpMemberName %Particle 1 "lifetime"
|
||||||
|
OpMemberName %Particle 2 "color"
|
||||||
|
OpMemberName %Particle 3 "velocity"
|
||||||
|
OpName %particles "particles"
|
||||||
|
OpName %Simulation "Simulation"
|
||||||
|
OpMemberName %Simulation 0 "i"
|
||||||
|
OpName %sim "sim"
|
||||||
|
OpName %main "main"
|
||||||
|
OpName %particle "particle"
|
||||||
|
OpDecorate %Particles Block
|
||||||
|
OpMemberDecorate %Particles 0 Offset 0
|
||||||
|
OpMemberDecorate %Particle 0 Offset 0
|
||||||
|
OpDecorate %_arr_v3float_uint_8 ArrayStride 16
|
||||||
|
OpMemberDecorate %Particle 1 Offset 128
|
||||||
|
OpMemberDecorate %Particle 2 Offset 144
|
||||||
|
OpMemberDecorate %Particle 3 Offset 160
|
||||||
|
OpDecorate %_runtimearr_Particle ArrayStride 176
|
||||||
|
OpDecorate %particles NonWritable
|
||||||
|
OpDecorate %particles DescriptorSet 1
|
||||||
|
OpDecorate %particles Binding 3
|
||||||
|
OpDecorate %Simulation Block
|
||||||
|
OpMemberDecorate %Simulation 0 Offset 0
|
||||||
|
OpDecorate %sim NonWritable
|
||||||
|
OpDecorate %sim DescriptorSet 1
|
||||||
|
OpDecorate %sim Binding 4
|
||||||
|
%float = OpTypeFloat 32
|
||||||
|
%v3float = OpTypeVector %float 3
|
||||||
|
%uint = OpTypeInt 32 0
|
||||||
|
%uint_8 = OpConstant %uint 8
|
||||||
|
%_arr_v3float_uint_8 = OpTypeArray %v3float %uint_8
|
||||||
|
%v4float = OpTypeVector %float 4
|
||||||
|
%Particle = OpTypeStruct %_arr_v3float_uint_8 %float %v4float %v3float
|
||||||
|
%_runtimearr_Particle = OpTypeRuntimeArray %Particle
|
||||||
|
%Particles = OpTypeStruct %_runtimearr_Particle
|
||||||
|
%_ptr_StorageBuffer_Particles = OpTypePointer StorageBuffer %Particles
|
||||||
|
%particles = OpVariable %_ptr_StorageBuffer_Particles StorageBuffer
|
||||||
|
%Simulation = OpTypeStruct %uint
|
||||||
|
%_ptr_Uniform_Simulation = OpTypePointer Uniform %Simulation
|
||||||
|
%sim = OpVariable %_ptr_Uniform_Simulation Uniform
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%15 = OpTypeFunction %void
|
||||||
|
%uint_0 = OpConstant %uint 0
|
||||||
|
%int = OpTypeInt 32 1
|
||||||
|
%int_0 = OpConstant %int 0
|
||||||
|
%_ptr_StorageBuffer_Particle = OpTypePointer StorageBuffer %Particle
|
||||||
|
%_ptr_Function_Particle = OpTypePointer Function %Particle
|
||||||
|
%27 = OpConstantNull %Particle
|
||||||
|
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
|
||||||
|
%_ptr_Function_v3float = OpTypePointer Function %v3float
|
||||||
|
%main = OpFunction %void None %15
|
||||||
|
%18 = OpLabel
|
||||||
|
%particle = OpVariable %_ptr_Function_Particle Function %27
|
||||||
|
%23 = OpAccessChain %_ptr_StorageBuffer_Particle %particles %uint_0 %int_0
|
||||||
|
%24 = OpLoad %Particle %23
|
||||||
|
OpStore %particle %24
|
||||||
|
%29 = OpAccessChain %_ptr_Uniform_uint %sim %uint_0
|
||||||
|
%30 = OpLoad %uint %29
|
||||||
|
%32 = OpAccessChain %_ptr_Function_v3float %particle %uint_0 %30
|
||||||
|
%33 = OpAccessChain %_ptr_Uniform_uint %sim %uint_0
|
||||||
|
%34 = OpLoad %uint %33
|
||||||
|
%35 = OpAccessChain %_ptr_Function_v3float %particle %uint_0 %34
|
||||||
|
%36 = OpLoad %v3float %35
|
||||||
|
OpStore %32 %36
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
|
@ -0,0 +1,24 @@
|
||||||
|
struct Simulation {
|
||||||
|
i : u32;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Particle {
|
||||||
|
position : array<vec3<f32>, 8>;
|
||||||
|
lifetime : f32;
|
||||||
|
color : vec4<f32>;
|
||||||
|
velocity : vec3<f32>;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Particles {
|
||||||
|
p : array<Particle>;
|
||||||
|
};
|
||||||
|
|
||||||
|
[[group(1), binding(3)]] var<storage, read> particles : Particles;
|
||||||
|
|
||||||
|
[[group(1), binding(4)]] var<uniform> sim : Simulation;
|
||||||
|
|
||||||
|
[[stage(compute), workgroup_size(1)]]
|
||||||
|
fn main() {
|
||||||
|
var particle = particles.p[0];
|
||||||
|
particle.position[sim.i] = particle.position[sim.i];
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,21 @@
|
||||||
|
cbuffer cbuffer_constants : register(b0, space1) {
|
||||||
|
uint4 constants[1];
|
||||||
|
};
|
||||||
|
|
||||||
|
RWByteAddressBuffer result : register(u1, space1);
|
||||||
|
|
||||||
|
struct S {
|
||||||
|
uint data[3];
|
||||||
|
};
|
||||||
|
|
||||||
|
static S s = (S)0;
|
||||||
|
|
||||||
|
[numthreads(1, 1, 1)]
|
||||||
|
void main() {
|
||||||
|
{
|
||||||
|
uint tint_symbol_1[3] = s.data;
|
||||||
|
tint_symbol_1[constants[0].x] = 0u;
|
||||||
|
s.data = tint_symbol_1;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
#include <metal_stdlib>
|
||||||
|
|
||||||
|
using namespace metal;
|
||||||
|
struct Uniforms {
|
||||||
|
/* 0x0000 */ uint i;
|
||||||
|
};
|
||||||
|
struct InnerS {
|
||||||
|
int v;
|
||||||
|
};
|
||||||
|
struct tint_array_wrapper {
|
||||||
|
InnerS arr[8];
|
||||||
|
};
|
||||||
|
struct OuterS {
|
||||||
|
tint_array_wrapper a1;
|
||||||
|
};
|
||||||
|
|
||||||
|
kernel void tint_symbol(const constant Uniforms* tint_symbol_1 [[buffer(0)]]) {
|
||||||
|
InnerS v = {};
|
||||||
|
OuterS s1 = {};
|
||||||
|
for(int i = 0; (i < 4); i = as_type<int>((as_type<uint>(i) + as_type<uint>(1)))) {
|
||||||
|
s1.a1.arr[(*(tint_symbol_1)).i] = v;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,84 @@
|
||||||
|
; SPIR-V
|
||||||
|
; Version: 1.3
|
||||||
|
; Generator: Google Tint Compiler; 0
|
||||||
|
; Bound: 44
|
||||||
|
; Schema: 0
|
||||||
|
OpCapability Shader
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint GLCompute %main "main"
|
||||||
|
OpExecutionMode %main LocalSize 1 1 1
|
||||||
|
OpName %Uniforms "Uniforms"
|
||||||
|
OpMemberName %Uniforms 0 "i"
|
||||||
|
OpName %uniforms "uniforms"
|
||||||
|
OpName %main "main"
|
||||||
|
OpName %InnerS "InnerS"
|
||||||
|
OpMemberName %InnerS 0 "v"
|
||||||
|
OpName %v "v"
|
||||||
|
OpName %OuterS "OuterS"
|
||||||
|
OpMemberName %OuterS 0 "a1"
|
||||||
|
OpName %s1 "s1"
|
||||||
|
OpName %i "i"
|
||||||
|
OpDecorate %Uniforms Block
|
||||||
|
OpMemberDecorate %Uniforms 0 Offset 0
|
||||||
|
OpDecorate %uniforms NonWritable
|
||||||
|
OpDecorate %uniforms DescriptorSet 1
|
||||||
|
OpDecorate %uniforms Binding 4
|
||||||
|
OpMemberDecorate %InnerS 0 Offset 0
|
||||||
|
OpMemberDecorate %OuterS 0 Offset 0
|
||||||
|
OpDecorate %_arr_InnerS_uint_8 ArrayStride 4
|
||||||
|
%uint = OpTypeInt 32 0
|
||||||
|
%Uniforms = OpTypeStruct %uint
|
||||||
|
%_ptr_Uniform_Uniforms = OpTypePointer Uniform %Uniforms
|
||||||
|
%uniforms = OpVariable %_ptr_Uniform_Uniforms Uniform
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%5 = OpTypeFunction %void
|
||||||
|
%int = OpTypeInt 32 1
|
||||||
|
%InnerS = OpTypeStruct %int
|
||||||
|
%_ptr_Function_InnerS = OpTypePointer Function %InnerS
|
||||||
|
%13 = OpConstantNull %InnerS
|
||||||
|
%uint_8 = OpConstant %uint 8
|
||||||
|
%_arr_InnerS_uint_8 = OpTypeArray %InnerS %uint_8
|
||||||
|
%OuterS = OpTypeStruct %_arr_InnerS_uint_8
|
||||||
|
%_ptr_Function_OuterS = OpTypePointer Function %OuterS
|
||||||
|
%19 = OpConstantNull %OuterS
|
||||||
|
%int_0 = OpConstant %int 0
|
||||||
|
%_ptr_Function_int = OpTypePointer Function %int
|
||||||
|
%23 = OpConstantNull %int
|
||||||
|
%int_4 = OpConstant %int 4
|
||||||
|
%bool = OpTypeBool
|
||||||
|
%uint_0 = OpConstant %uint 0
|
||||||
|
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
|
||||||
|
%int_1 = OpConstant %int 1
|
||||||
|
%main = OpFunction %void None %5
|
||||||
|
%8 = OpLabel
|
||||||
|
%v = OpVariable %_ptr_Function_InnerS Function %13
|
||||||
|
%s1 = OpVariable %_ptr_Function_OuterS Function %19
|
||||||
|
%i = OpVariable %_ptr_Function_int Function %23
|
||||||
|
OpStore %i %int_0
|
||||||
|
OpBranch %24
|
||||||
|
%24 = OpLabel
|
||||||
|
OpLoopMerge %25 %26 None
|
||||||
|
OpBranch %27
|
||||||
|
%27 = OpLabel
|
||||||
|
%29 = OpLoad %int %i
|
||||||
|
%31 = OpSLessThan %bool %29 %int_4
|
||||||
|
%28 = OpLogicalNot %bool %31
|
||||||
|
OpSelectionMerge %33 None
|
||||||
|
OpBranchConditional %28 %34 %33
|
||||||
|
%34 = OpLabel
|
||||||
|
OpBranch %25
|
||||||
|
%33 = OpLabel
|
||||||
|
%37 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_0
|
||||||
|
%38 = OpLoad %uint %37
|
||||||
|
%39 = OpAccessChain %_ptr_Function_InnerS %s1 %uint_0 %38
|
||||||
|
%40 = OpLoad %InnerS %v
|
||||||
|
OpStore %39 %40
|
||||||
|
OpBranch %26
|
||||||
|
%26 = OpLabel
|
||||||
|
%41 = OpLoad %int %i
|
||||||
|
%43 = OpIAdd %int %41 %int_1
|
||||||
|
OpStore %i %43
|
||||||
|
OpBranch %24
|
||||||
|
%25 = OpLabel
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
|
@ -0,0 +1,22 @@
|
||||||
|
struct Uniforms {
|
||||||
|
i : u32;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct InnerS {
|
||||||
|
v : i32;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct OuterS {
|
||||||
|
a1 : array<InnerS, 8>;
|
||||||
|
};
|
||||||
|
|
||||||
|
[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
|
||||||
|
|
||||||
|
[[stage(compute), workgroup_size(1)]]
|
||||||
|
fn main() {
|
||||||
|
var v : InnerS;
|
||||||
|
var s1 : OuterS;
|
||||||
|
for(var i : i32 = 0; (i < 4); i = (i + 1)) {
|
||||||
|
s1.a1[uniforms.i] = v;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
#include <metal_stdlib>
|
||||||
|
|
||||||
|
using namespace metal;
|
||||||
|
struct Uniforms {
|
||||||
|
/* 0x0000 */ uint i;
|
||||||
|
};
|
||||||
|
struct InnerS {
|
||||||
|
int v;
|
||||||
|
};
|
||||||
|
struct tint_array_wrapper {
|
||||||
|
InnerS arr[8];
|
||||||
|
};
|
||||||
|
struct OuterS {
|
||||||
|
tint_array_wrapper a1;
|
||||||
|
};
|
||||||
|
|
||||||
|
kernel void tint_symbol(const constant Uniforms* tint_symbol_1 [[buffer(0)]]) {
|
||||||
|
InnerS v = {};
|
||||||
|
OuterS s1 = {};
|
||||||
|
for(int i = 0; (i < 4); s1.a1.arr[(*(tint_symbol_1)).i] = v) {
|
||||||
|
i = as_type<int>((as_type<uint>(i) + as_type<uint>(1)));
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,84 @@
|
||||||
|
; SPIR-V
|
||||||
|
; Version: 1.3
|
||||||
|
; Generator: Google Tint Compiler; 0
|
||||||
|
; Bound: 44
|
||||||
|
; Schema: 0
|
||||||
|
OpCapability Shader
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint GLCompute %main "main"
|
||||||
|
OpExecutionMode %main LocalSize 1 1 1
|
||||||
|
OpName %Uniforms "Uniforms"
|
||||||
|
OpMemberName %Uniforms 0 "i"
|
||||||
|
OpName %uniforms "uniforms"
|
||||||
|
OpName %main "main"
|
||||||
|
OpName %InnerS "InnerS"
|
||||||
|
OpMemberName %InnerS 0 "v"
|
||||||
|
OpName %v "v"
|
||||||
|
OpName %OuterS "OuterS"
|
||||||
|
OpMemberName %OuterS 0 "a1"
|
||||||
|
OpName %s1 "s1"
|
||||||
|
OpName %i "i"
|
||||||
|
OpDecorate %Uniforms Block
|
||||||
|
OpMemberDecorate %Uniforms 0 Offset 0
|
||||||
|
OpDecorate %uniforms NonWritable
|
||||||
|
OpDecorate %uniforms DescriptorSet 1
|
||||||
|
OpDecorate %uniforms Binding 4
|
||||||
|
OpMemberDecorate %InnerS 0 Offset 0
|
||||||
|
OpMemberDecorate %OuterS 0 Offset 0
|
||||||
|
OpDecorate %_arr_InnerS_uint_8 ArrayStride 4
|
||||||
|
%uint = OpTypeInt 32 0
|
||||||
|
%Uniforms = OpTypeStruct %uint
|
||||||
|
%_ptr_Uniform_Uniforms = OpTypePointer Uniform %Uniforms
|
||||||
|
%uniforms = OpVariable %_ptr_Uniform_Uniforms Uniform
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%5 = OpTypeFunction %void
|
||||||
|
%int = OpTypeInt 32 1
|
||||||
|
%InnerS = OpTypeStruct %int
|
||||||
|
%_ptr_Function_InnerS = OpTypePointer Function %InnerS
|
||||||
|
%13 = OpConstantNull %InnerS
|
||||||
|
%uint_8 = OpConstant %uint 8
|
||||||
|
%_arr_InnerS_uint_8 = OpTypeArray %InnerS %uint_8
|
||||||
|
%OuterS = OpTypeStruct %_arr_InnerS_uint_8
|
||||||
|
%_ptr_Function_OuterS = OpTypePointer Function %OuterS
|
||||||
|
%19 = OpConstantNull %OuterS
|
||||||
|
%int_0 = OpConstant %int 0
|
||||||
|
%_ptr_Function_int = OpTypePointer Function %int
|
||||||
|
%23 = OpConstantNull %int
|
||||||
|
%int_4 = OpConstant %int 4
|
||||||
|
%bool = OpTypeBool
|
||||||
|
%int_1 = OpConstant %int 1
|
||||||
|
%uint_0 = OpConstant %uint 0
|
||||||
|
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
|
||||||
|
%main = OpFunction %void None %5
|
||||||
|
%8 = OpLabel
|
||||||
|
%v = OpVariable %_ptr_Function_InnerS Function %13
|
||||||
|
%s1 = OpVariable %_ptr_Function_OuterS Function %19
|
||||||
|
%i = OpVariable %_ptr_Function_int Function %23
|
||||||
|
OpStore %i %int_0
|
||||||
|
OpBranch %24
|
||||||
|
%24 = OpLabel
|
||||||
|
OpLoopMerge %25 %26 None
|
||||||
|
OpBranch %27
|
||||||
|
%27 = OpLabel
|
||||||
|
%29 = OpLoad %int %i
|
||||||
|
%31 = OpSLessThan %bool %29 %int_4
|
||||||
|
%28 = OpLogicalNot %bool %31
|
||||||
|
OpSelectionMerge %33 None
|
||||||
|
OpBranchConditional %28 %34 %33
|
||||||
|
%34 = OpLabel
|
||||||
|
OpBranch %25
|
||||||
|
%33 = OpLabel
|
||||||
|
%35 = OpLoad %int %i
|
||||||
|
%37 = OpIAdd %int %35 %int_1
|
||||||
|
OpStore %i %37
|
||||||
|
OpBranch %26
|
||||||
|
%26 = OpLabel
|
||||||
|
%40 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_0
|
||||||
|
%41 = OpLoad %uint %40
|
||||||
|
%42 = OpAccessChain %_ptr_Function_InnerS %s1 %uint_0 %41
|
||||||
|
%43 = OpLoad %InnerS %v
|
||||||
|
OpStore %42 %43
|
||||||
|
OpBranch %24
|
||||||
|
%25 = OpLabel
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
|
@ -0,0 +1,22 @@
|
||||||
|
struct Uniforms {
|
||||||
|
i : u32;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct InnerS {
|
||||||
|
v : i32;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct OuterS {
|
||||||
|
a1 : array<InnerS, 8>;
|
||||||
|
};
|
||||||
|
|
||||||
|
[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
|
||||||
|
|
||||||
|
[[stage(compute), workgroup_size(1)]]
|
||||||
|
fn main() {
|
||||||
|
var v : InnerS;
|
||||||
|
var s1 : OuterS;
|
||||||
|
for(var i : i32 = 0; (i < 4); s1.a1[uniforms.i] = v) {
|
||||||
|
i = (i + 1);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
#include <metal_stdlib>
|
||||||
|
|
||||||
|
using namespace metal;
|
||||||
|
struct Uniforms {
|
||||||
|
/* 0x0000 */ uint i;
|
||||||
|
};
|
||||||
|
struct InnerS {
|
||||||
|
int v;
|
||||||
|
};
|
||||||
|
struct tint_array_wrapper {
|
||||||
|
InnerS arr[8];
|
||||||
|
};
|
||||||
|
struct OuterS {
|
||||||
|
tint_array_wrapper a1;
|
||||||
|
};
|
||||||
|
|
||||||
|
kernel void tint_symbol(const constant Uniforms* tint_symbol_1 [[buffer(0)]]) {
|
||||||
|
InnerS v = {};
|
||||||
|
OuterS s1 = {};
|
||||||
|
int i = 0;
|
||||||
|
for(s1.a1.arr[(*(tint_symbol_1)).i] = v; (i < 4); i = as_type<int>((as_type<uint>(i) + as_type<uint>(1)))) {
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,84 @@
|
||||||
|
; SPIR-V
|
||||||
|
; Version: 1.3
|
||||||
|
; Generator: Google Tint Compiler; 0
|
||||||
|
; Bound: 44
|
||||||
|
; Schema: 0
|
||||||
|
OpCapability Shader
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint GLCompute %main "main"
|
||||||
|
OpExecutionMode %main LocalSize 1 1 1
|
||||||
|
OpName %Uniforms "Uniforms"
|
||||||
|
OpMemberName %Uniforms 0 "i"
|
||||||
|
OpName %uniforms "uniforms"
|
||||||
|
OpName %main "main"
|
||||||
|
OpName %InnerS "InnerS"
|
||||||
|
OpMemberName %InnerS 0 "v"
|
||||||
|
OpName %v "v"
|
||||||
|
OpName %OuterS "OuterS"
|
||||||
|
OpMemberName %OuterS 0 "a1"
|
||||||
|
OpName %s1 "s1"
|
||||||
|
OpName %i "i"
|
||||||
|
OpDecorate %Uniforms Block
|
||||||
|
OpMemberDecorate %Uniforms 0 Offset 0
|
||||||
|
OpDecorate %uniforms NonWritable
|
||||||
|
OpDecorate %uniforms DescriptorSet 1
|
||||||
|
OpDecorate %uniforms Binding 4
|
||||||
|
OpMemberDecorate %InnerS 0 Offset 0
|
||||||
|
OpMemberDecorate %OuterS 0 Offset 0
|
||||||
|
OpDecorate %_arr_InnerS_uint_8 ArrayStride 4
|
||||||
|
%uint = OpTypeInt 32 0
|
||||||
|
%Uniforms = OpTypeStruct %uint
|
||||||
|
%_ptr_Uniform_Uniforms = OpTypePointer Uniform %Uniforms
|
||||||
|
%uniforms = OpVariable %_ptr_Uniform_Uniforms Uniform
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%5 = OpTypeFunction %void
|
||||||
|
%int = OpTypeInt 32 1
|
||||||
|
%InnerS = OpTypeStruct %int
|
||||||
|
%_ptr_Function_InnerS = OpTypePointer Function %InnerS
|
||||||
|
%13 = OpConstantNull %InnerS
|
||||||
|
%uint_8 = OpConstant %uint 8
|
||||||
|
%_arr_InnerS_uint_8 = OpTypeArray %InnerS %uint_8
|
||||||
|
%OuterS = OpTypeStruct %_arr_InnerS_uint_8
|
||||||
|
%_ptr_Function_OuterS = OpTypePointer Function %OuterS
|
||||||
|
%19 = OpConstantNull %OuterS
|
||||||
|
%int_0 = OpConstant %int 0
|
||||||
|
%_ptr_Function_int = OpTypePointer Function %int
|
||||||
|
%23 = OpConstantNull %int
|
||||||
|
%uint_0 = OpConstant %uint 0
|
||||||
|
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
|
||||||
|
%int_4 = OpConstant %int 4
|
||||||
|
%bool = OpTypeBool
|
||||||
|
%int_1 = OpConstant %int 1
|
||||||
|
%main = OpFunction %void None %5
|
||||||
|
%8 = OpLabel
|
||||||
|
%v = OpVariable %_ptr_Function_InnerS Function %13
|
||||||
|
%s1 = OpVariable %_ptr_Function_OuterS Function %19
|
||||||
|
%i = OpVariable %_ptr_Function_int Function %23
|
||||||
|
OpStore %i %int_0
|
||||||
|
%26 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_0
|
||||||
|
%27 = OpLoad %uint %26
|
||||||
|
%28 = OpAccessChain %_ptr_Function_InnerS %s1 %uint_0 %27
|
||||||
|
%29 = OpLoad %InnerS %v
|
||||||
|
OpStore %28 %29
|
||||||
|
OpBranch %30
|
||||||
|
%30 = OpLabel
|
||||||
|
OpLoopMerge %31 %32 None
|
||||||
|
OpBranch %33
|
||||||
|
%33 = OpLabel
|
||||||
|
%35 = OpLoad %int %i
|
||||||
|
%37 = OpSLessThan %bool %35 %int_4
|
||||||
|
%34 = OpLogicalNot %bool %37
|
||||||
|
OpSelectionMerge %39 None
|
||||||
|
OpBranchConditional %34 %40 %39
|
||||||
|
%40 = OpLabel
|
||||||
|
OpBranch %31
|
||||||
|
%39 = OpLabel
|
||||||
|
OpBranch %32
|
||||||
|
%32 = OpLabel
|
||||||
|
%41 = OpLoad %int %i
|
||||||
|
%43 = OpIAdd %int %41 %int_1
|
||||||
|
OpStore %i %43
|
||||||
|
OpBranch %30
|
||||||
|
%31 = OpLabel
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
|
@ -0,0 +1,22 @@
|
||||||
|
struct Uniforms {
|
||||||
|
i : u32;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct InnerS {
|
||||||
|
v : i32;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct OuterS {
|
||||||
|
a1 : array<InnerS, 8>;
|
||||||
|
};
|
||||||
|
|
||||||
|
[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
|
||||||
|
|
||||||
|
[[stage(compute), workgroup_size(1)]]
|
||||||
|
fn main() {
|
||||||
|
var v : InnerS;
|
||||||
|
var s1 : OuterS;
|
||||||
|
var i : i32 = 0;
|
||||||
|
for(s1.a1[uniforms.i] = v; (i < 4); i = (i + 1)) {
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,36 @@
|
||||||
|
#include <metal_stdlib>
|
||||||
|
|
||||||
|
using namespace metal;
|
||||||
|
struct Uniforms {
|
||||||
|
/* 0x0000 */ uint i;
|
||||||
|
/* 0x0004 */ uint j;
|
||||||
|
};
|
||||||
|
struct InnerS {
|
||||||
|
int v;
|
||||||
|
};
|
||||||
|
struct tint_array_wrapper {
|
||||||
|
InnerS arr[8];
|
||||||
|
};
|
||||||
|
struct S1 {
|
||||||
|
tint_array_wrapper a2;
|
||||||
|
};
|
||||||
|
struct tint_array_wrapper_1 {
|
||||||
|
S1 arr[8];
|
||||||
|
};
|
||||||
|
struct OuterS {
|
||||||
|
tint_array_wrapper_1 a1;
|
||||||
|
};
|
||||||
|
|
||||||
|
uint getNextIndex(thread uint* const tint_symbol_1) {
|
||||||
|
*(tint_symbol_1) = (*(tint_symbol_1) + 1u);
|
||||||
|
return *(tint_symbol_1);
|
||||||
|
}
|
||||||
|
|
||||||
|
kernel void tint_symbol(const constant Uniforms* tint_symbol_3 [[buffer(0)]]) {
|
||||||
|
thread uint tint_symbol_2 = 0u;
|
||||||
|
InnerS v = {};
|
||||||
|
OuterS s = {};
|
||||||
|
s.a1.arr[getNextIndex(&(tint_symbol_2))].a2.arr[(*(tint_symbol_3)).j] = v;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,79 @@
|
||||||
|
; SPIR-V
|
||||||
|
; Version: 1.3
|
||||||
|
; Generator: Google Tint Compiler; 0
|
||||||
|
; Bound: 39
|
||||||
|
; Schema: 0
|
||||||
|
OpCapability Shader
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint GLCompute %main "main"
|
||||||
|
OpExecutionMode %main LocalSize 1 1 1
|
||||||
|
OpName %nextIndex "nextIndex"
|
||||||
|
OpName %Uniforms "Uniforms"
|
||||||
|
OpMemberName %Uniforms 0 "i"
|
||||||
|
OpMemberName %Uniforms 1 "j"
|
||||||
|
OpName %uniforms "uniforms"
|
||||||
|
OpName %getNextIndex "getNextIndex"
|
||||||
|
OpName %main "main"
|
||||||
|
OpName %InnerS "InnerS"
|
||||||
|
OpMemberName %InnerS 0 "v"
|
||||||
|
OpName %v "v"
|
||||||
|
OpName %OuterS "OuterS"
|
||||||
|
OpMemberName %OuterS 0 "a1"
|
||||||
|
OpName %S1 "S1"
|
||||||
|
OpMemberName %S1 0 "a2"
|
||||||
|
OpName %s "s"
|
||||||
|
OpDecorate %Uniforms Block
|
||||||
|
OpMemberDecorate %Uniforms 0 Offset 0
|
||||||
|
OpMemberDecorate %Uniforms 1 Offset 4
|
||||||
|
OpDecorate %uniforms NonWritable
|
||||||
|
OpDecorate %uniforms DescriptorSet 1
|
||||||
|
OpDecorate %uniforms Binding 4
|
||||||
|
OpMemberDecorate %InnerS 0 Offset 0
|
||||||
|
OpMemberDecorate %OuterS 0 Offset 0
|
||||||
|
OpMemberDecorate %S1 0 Offset 0
|
||||||
|
OpDecorate %_arr_InnerS_uint_8 ArrayStride 4
|
||||||
|
OpDecorate %_arr_S1_uint_8 ArrayStride 32
|
||||||
|
%uint = OpTypeInt 32 0
|
||||||
|
%_ptr_Private_uint = OpTypePointer Private %uint
|
||||||
|
%4 = OpConstantNull %uint
|
||||||
|
%nextIndex = OpVariable %_ptr_Private_uint Private %4
|
||||||
|
%Uniforms = OpTypeStruct %uint %uint
|
||||||
|
%_ptr_Uniform_Uniforms = OpTypePointer Uniform %Uniforms
|
||||||
|
%uniforms = OpVariable %_ptr_Uniform_Uniforms Uniform
|
||||||
|
%8 = OpTypeFunction %uint
|
||||||
|
%uint_1 = OpConstant %uint 1
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%15 = OpTypeFunction %void
|
||||||
|
%int = OpTypeInt 32 1
|
||||||
|
%InnerS = OpTypeStruct %int
|
||||||
|
%_ptr_Function_InnerS = OpTypePointer Function %InnerS
|
||||||
|
%23 = OpConstantNull %InnerS
|
||||||
|
%uint_8 = OpConstant %uint 8
|
||||||
|
%_arr_InnerS_uint_8 = OpTypeArray %InnerS %uint_8
|
||||||
|
%S1 = OpTypeStruct %_arr_InnerS_uint_8
|
||||||
|
%_arr_S1_uint_8 = OpTypeArray %S1 %uint_8
|
||||||
|
%OuterS = OpTypeStruct %_arr_S1_uint_8
|
||||||
|
%_ptr_Function_OuterS = OpTypePointer Function %OuterS
|
||||||
|
%31 = OpConstantNull %OuterS
|
||||||
|
%uint_0 = OpConstant %uint 0
|
||||||
|
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
|
||||||
|
%getNextIndex = OpFunction %uint None %8
|
||||||
|
%10 = OpLabel
|
||||||
|
%11 = OpLoad %uint %nextIndex
|
||||||
|
%13 = OpIAdd %uint %11 %uint_1
|
||||||
|
OpStore %nextIndex %13
|
||||||
|
%14 = OpLoad %uint %nextIndex
|
||||||
|
OpReturnValue %14
|
||||||
|
OpFunctionEnd
|
||||||
|
%main = OpFunction %void None %15
|
||||||
|
%18 = OpLabel
|
||||||
|
%v = OpVariable %_ptr_Function_InnerS Function %23
|
||||||
|
%s = OpVariable %_ptr_Function_OuterS Function %31
|
||||||
|
%33 = OpFunctionCall %uint %getNextIndex
|
||||||
|
%35 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_1
|
||||||
|
%36 = OpLoad %uint %35
|
||||||
|
%37 = OpAccessChain %_ptr_Function_InnerS %s %uint_0 %33 %uint_0 %36
|
||||||
|
%38 = OpLoad %InnerS %v
|
||||||
|
OpStore %37 %38
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
|
@ -0,0 +1,32 @@
|
||||||
|
struct Uniforms {
|
||||||
|
i : u32;
|
||||||
|
j : u32;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct InnerS {
|
||||||
|
v : i32;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct S1 {
|
||||||
|
a2 : array<InnerS, 8>;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct OuterS {
|
||||||
|
a1 : array<S1, 8>;
|
||||||
|
};
|
||||||
|
|
||||||
|
var<private> nextIndex : u32;
|
||||||
|
|
||||||
|
fn getNextIndex() -> u32 {
|
||||||
|
nextIndex = (nextIndex + 1u);
|
||||||
|
return nextIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
|
||||||
|
|
||||||
|
[[stage(compute), workgroup_size(1)]]
|
||||||
|
fn main() {
|
||||||
|
var v : InnerS;
|
||||||
|
var s : OuterS;
|
||||||
|
s.a1[getNextIndex()].a2[uniforms.j] = v;
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
#include <metal_stdlib>
|
||||||
|
|
||||||
|
using namespace metal;
|
||||||
|
struct Uniforms {
|
||||||
|
/* 0x0000 */ uint i;
|
||||||
|
};
|
||||||
|
struct InnerS {
|
||||||
|
int v;
|
||||||
|
};
|
||||||
|
struct tint_array_wrapper {
|
||||||
|
InnerS arr[8];
|
||||||
|
};
|
||||||
|
struct OuterS {
|
||||||
|
tint_array_wrapper a1;
|
||||||
|
};
|
||||||
|
|
||||||
|
kernel void tint_symbol(const constant Uniforms* tint_symbol_1 [[buffer(0)]]) {
|
||||||
|
InnerS v = {};
|
||||||
|
OuterS s1 = {};
|
||||||
|
s1.a1.arr[(*(tint_symbol_1)).i] = v;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,55 @@
|
||||||
|
; SPIR-V
|
||||||
|
; Version: 1.3
|
||||||
|
; Generator: Google Tint Compiler; 0
|
||||||
|
; Bound: 26
|
||||||
|
; Schema: 0
|
||||||
|
OpCapability Shader
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint GLCompute %main "main"
|
||||||
|
OpExecutionMode %main LocalSize 1 1 1
|
||||||
|
OpName %Uniforms "Uniforms"
|
||||||
|
OpMemberName %Uniforms 0 "i"
|
||||||
|
OpName %uniforms "uniforms"
|
||||||
|
OpName %main "main"
|
||||||
|
OpName %InnerS "InnerS"
|
||||||
|
OpMemberName %InnerS 0 "v"
|
||||||
|
OpName %v "v"
|
||||||
|
OpName %OuterS "OuterS"
|
||||||
|
OpMemberName %OuterS 0 "a1"
|
||||||
|
OpName %s1 "s1"
|
||||||
|
OpDecorate %Uniforms Block
|
||||||
|
OpMemberDecorate %Uniforms 0 Offset 0
|
||||||
|
OpDecorate %uniforms NonWritable
|
||||||
|
OpDecorate %uniforms DescriptorSet 1
|
||||||
|
OpDecorate %uniforms Binding 4
|
||||||
|
OpMemberDecorate %InnerS 0 Offset 0
|
||||||
|
OpMemberDecorate %OuterS 0 Offset 0
|
||||||
|
OpDecorate %_arr_InnerS_uint_8 ArrayStride 4
|
||||||
|
%uint = OpTypeInt 32 0
|
||||||
|
%Uniforms = OpTypeStruct %uint
|
||||||
|
%_ptr_Uniform_Uniforms = OpTypePointer Uniform %Uniforms
|
||||||
|
%uniforms = OpVariable %_ptr_Uniform_Uniforms Uniform
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%5 = OpTypeFunction %void
|
||||||
|
%int = OpTypeInt 32 1
|
||||||
|
%InnerS = OpTypeStruct %int
|
||||||
|
%_ptr_Function_InnerS = OpTypePointer Function %InnerS
|
||||||
|
%13 = OpConstantNull %InnerS
|
||||||
|
%uint_8 = OpConstant %uint 8
|
||||||
|
%_arr_InnerS_uint_8 = OpTypeArray %InnerS %uint_8
|
||||||
|
%OuterS = OpTypeStruct %_arr_InnerS_uint_8
|
||||||
|
%_ptr_Function_OuterS = OpTypePointer Function %OuterS
|
||||||
|
%19 = OpConstantNull %OuterS
|
||||||
|
%uint_0 = OpConstant %uint 0
|
||||||
|
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
|
||||||
|
%main = OpFunction %void None %5
|
||||||
|
%8 = OpLabel
|
||||||
|
%v = OpVariable %_ptr_Function_InnerS Function %13
|
||||||
|
%s1 = OpVariable %_ptr_Function_OuterS Function %19
|
||||||
|
%22 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_0
|
||||||
|
%23 = OpLoad %uint %22
|
||||||
|
%24 = OpAccessChain %_ptr_Function_InnerS %s1 %uint_0 %23
|
||||||
|
%25 = OpLoad %InnerS %v
|
||||||
|
OpStore %24 %25
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
|
@ -0,0 +1,20 @@
|
||||||
|
struct Uniforms {
|
||||||
|
i : u32;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct InnerS {
|
||||||
|
v : i32;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct OuterS {
|
||||||
|
a1 : array<InnerS, 8>;
|
||||||
|
};
|
||||||
|
|
||||||
|
[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
|
||||||
|
|
||||||
|
[[stage(compute), workgroup_size(1)]]
|
||||||
|
fn main() {
|
||||||
|
var v : InnerS;
|
||||||
|
var s1 : OuterS;
|
||||||
|
s1.a1[uniforms.i] = v;
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
#include <metal_stdlib>
|
||||||
|
|
||||||
|
using namespace metal;
|
||||||
|
struct Uniforms {
|
||||||
|
/* 0x0000 */ uint i;
|
||||||
|
/* 0x0004 */ uint j;
|
||||||
|
};
|
||||||
|
struct InnerS {
|
||||||
|
int v;
|
||||||
|
};
|
||||||
|
struct tint_array_wrapper_1 {
|
||||||
|
InnerS arr[8];
|
||||||
|
};
|
||||||
|
struct tint_array_wrapper {
|
||||||
|
tint_array_wrapper_1 arr[8];
|
||||||
|
};
|
||||||
|
struct OuterS {
|
||||||
|
tint_array_wrapper a1;
|
||||||
|
};
|
||||||
|
|
||||||
|
kernel void tint_symbol(const constant Uniforms* tint_symbol_1 [[buffer(0)]]) {
|
||||||
|
InnerS v = {};
|
||||||
|
OuterS s1 = {};
|
||||||
|
s1.a1.arr[(*(tint_symbol_1)).i].arr[(*(tint_symbol_1)).j] = v;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,62 @@
|
||||||
|
; SPIR-V
|
||||||
|
; Version: 1.3
|
||||||
|
; Generator: Google Tint Compiler; 0
|
||||||
|
; Bound: 30
|
||||||
|
; Schema: 0
|
||||||
|
OpCapability Shader
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint GLCompute %main "main"
|
||||||
|
OpExecutionMode %main LocalSize 1 1 1
|
||||||
|
OpName %Uniforms "Uniforms"
|
||||||
|
OpMemberName %Uniforms 0 "i"
|
||||||
|
OpMemberName %Uniforms 1 "j"
|
||||||
|
OpName %uniforms "uniforms"
|
||||||
|
OpName %main "main"
|
||||||
|
OpName %InnerS "InnerS"
|
||||||
|
OpMemberName %InnerS 0 "v"
|
||||||
|
OpName %v "v"
|
||||||
|
OpName %OuterS "OuterS"
|
||||||
|
OpMemberName %OuterS 0 "a1"
|
||||||
|
OpName %s1 "s1"
|
||||||
|
OpDecorate %Uniforms Block
|
||||||
|
OpMemberDecorate %Uniforms 0 Offset 0
|
||||||
|
OpMemberDecorate %Uniforms 1 Offset 4
|
||||||
|
OpDecorate %uniforms NonWritable
|
||||||
|
OpDecorate %uniforms DescriptorSet 1
|
||||||
|
OpDecorate %uniforms Binding 4
|
||||||
|
OpMemberDecorate %InnerS 0 Offset 0
|
||||||
|
OpMemberDecorate %OuterS 0 Offset 0
|
||||||
|
OpDecorate %_arr_InnerS_uint_8 ArrayStride 4
|
||||||
|
OpDecorate %_arr__arr_InnerS_uint_8_uint_8 ArrayStride 32
|
||||||
|
%uint = OpTypeInt 32 0
|
||||||
|
%Uniforms = OpTypeStruct %uint %uint
|
||||||
|
%_ptr_Uniform_Uniforms = OpTypePointer Uniform %Uniforms
|
||||||
|
%uniforms = OpVariable %_ptr_Uniform_Uniforms Uniform
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%5 = OpTypeFunction %void
|
||||||
|
%int = OpTypeInt 32 1
|
||||||
|
%InnerS = OpTypeStruct %int
|
||||||
|
%_ptr_Function_InnerS = OpTypePointer Function %InnerS
|
||||||
|
%13 = OpConstantNull %InnerS
|
||||||
|
%uint_8 = OpConstant %uint 8
|
||||||
|
%_arr_InnerS_uint_8 = OpTypeArray %InnerS %uint_8
|
||||||
|
%_arr__arr_InnerS_uint_8_uint_8 = OpTypeArray %_arr_InnerS_uint_8 %uint_8
|
||||||
|
%OuterS = OpTypeStruct %_arr__arr_InnerS_uint_8_uint_8
|
||||||
|
%_ptr_Function_OuterS = OpTypePointer Function %OuterS
|
||||||
|
%20 = OpConstantNull %OuterS
|
||||||
|
%uint_0 = OpConstant %uint 0
|
||||||
|
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
|
||||||
|
%uint_1 = OpConstant %uint 1
|
||||||
|
%main = OpFunction %void None %5
|
||||||
|
%8 = OpLabel
|
||||||
|
%v = OpVariable %_ptr_Function_InnerS Function %13
|
||||||
|
%s1 = OpVariable %_ptr_Function_OuterS Function %20
|
||||||
|
%23 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_0
|
||||||
|
%24 = OpLoad %uint %23
|
||||||
|
%26 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_1
|
||||||
|
%27 = OpLoad %uint %26
|
||||||
|
%28 = OpAccessChain %_ptr_Function_InnerS %s1 %uint_0 %24 %27
|
||||||
|
%29 = OpLoad %InnerS %v
|
||||||
|
OpStore %28 %29
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
|
@ -0,0 +1,21 @@
|
||||||
|
struct Uniforms {
|
||||||
|
i : u32;
|
||||||
|
j : u32;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct InnerS {
|
||||||
|
v : i32;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct OuterS {
|
||||||
|
a1 : array<array<InnerS, 8>, 8>;
|
||||||
|
};
|
||||||
|
|
||||||
|
[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
|
||||||
|
|
||||||
|
[[stage(compute), workgroup_size(1)]]
|
||||||
|
fn main() {
|
||||||
|
var v : InnerS;
|
||||||
|
var s1 : OuterS;
|
||||||
|
s1.a1[uniforms.i][uniforms.j] = v;
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
#include <metal_stdlib>
|
||||||
|
|
||||||
|
using namespace metal;
|
||||||
|
struct Uniforms {
|
||||||
|
/* 0x0000 */ uint i;
|
||||||
|
};
|
||||||
|
struct InnerS {
|
||||||
|
int v;
|
||||||
|
};
|
||||||
|
struct S1 {
|
||||||
|
InnerS s2;
|
||||||
|
};
|
||||||
|
struct tint_array_wrapper {
|
||||||
|
S1 arr[8];
|
||||||
|
};
|
||||||
|
struct OuterS {
|
||||||
|
tint_array_wrapper a1;
|
||||||
|
};
|
||||||
|
|
||||||
|
kernel void tint_symbol(const constant Uniforms* tint_symbol_1 [[buffer(0)]]) {
|
||||||
|
InnerS v = {};
|
||||||
|
OuterS s1 = {};
|
||||||
|
s1.a1.arr[(*(tint_symbol_1)).i].s2 = v;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
; SPIR-V
|
||||||
|
; Version: 1.3
|
||||||
|
; Generator: Google Tint Compiler; 0
|
||||||
|
; Bound: 27
|
||||||
|
; Schema: 0
|
||||||
|
OpCapability Shader
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint GLCompute %main "main"
|
||||||
|
OpExecutionMode %main LocalSize 1 1 1
|
||||||
|
OpName %Uniforms "Uniforms"
|
||||||
|
OpMemberName %Uniforms 0 "i"
|
||||||
|
OpName %uniforms "uniforms"
|
||||||
|
OpName %main "main"
|
||||||
|
OpName %InnerS "InnerS"
|
||||||
|
OpMemberName %InnerS 0 "v"
|
||||||
|
OpName %v "v"
|
||||||
|
OpName %OuterS "OuterS"
|
||||||
|
OpMemberName %OuterS 0 "a1"
|
||||||
|
OpName %S1 "S1"
|
||||||
|
OpMemberName %S1 0 "s2"
|
||||||
|
OpName %s1 "s1"
|
||||||
|
OpDecorate %Uniforms Block
|
||||||
|
OpMemberDecorate %Uniforms 0 Offset 0
|
||||||
|
OpDecorate %uniforms NonWritable
|
||||||
|
OpDecorate %uniforms DescriptorSet 1
|
||||||
|
OpDecorate %uniforms Binding 4
|
||||||
|
OpMemberDecorate %InnerS 0 Offset 0
|
||||||
|
OpMemberDecorate %OuterS 0 Offset 0
|
||||||
|
OpMemberDecorate %S1 0 Offset 0
|
||||||
|
OpDecorate %_arr_S1_uint_8 ArrayStride 4
|
||||||
|
%uint = OpTypeInt 32 0
|
||||||
|
%Uniforms = OpTypeStruct %uint
|
||||||
|
%_ptr_Uniform_Uniforms = OpTypePointer Uniform %Uniforms
|
||||||
|
%uniforms = OpVariable %_ptr_Uniform_Uniforms Uniform
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%5 = OpTypeFunction %void
|
||||||
|
%int = OpTypeInt 32 1
|
||||||
|
%InnerS = OpTypeStruct %int
|
||||||
|
%_ptr_Function_InnerS = OpTypePointer Function %InnerS
|
||||||
|
%13 = OpConstantNull %InnerS
|
||||||
|
%S1 = OpTypeStruct %InnerS
|
||||||
|
%uint_8 = OpConstant %uint 8
|
||||||
|
%_arr_S1_uint_8 = OpTypeArray %S1 %uint_8
|
||||||
|
%OuterS = OpTypeStruct %_arr_S1_uint_8
|
||||||
|
%_ptr_Function_OuterS = OpTypePointer Function %OuterS
|
||||||
|
%20 = OpConstantNull %OuterS
|
||||||
|
%uint_0 = OpConstant %uint 0
|
||||||
|
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
|
||||||
|
%main = OpFunction %void None %5
|
||||||
|
%8 = OpLabel
|
||||||
|
%v = OpVariable %_ptr_Function_InnerS Function %13
|
||||||
|
%s1 = OpVariable %_ptr_Function_OuterS Function %20
|
||||||
|
%23 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_0
|
||||||
|
%24 = OpLoad %uint %23
|
||||||
|
%25 = OpAccessChain %_ptr_Function_InnerS %s1 %uint_0 %24 %uint_0
|
||||||
|
%26 = OpLoad %InnerS %v
|
||||||
|
OpStore %25 %26
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
|
@ -0,0 +1,24 @@
|
||||||
|
struct Uniforms {
|
||||||
|
i : u32;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct InnerS {
|
||||||
|
v : i32;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct S1 {
|
||||||
|
s2 : InnerS;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct OuterS {
|
||||||
|
a1 : array<S1, 8>;
|
||||||
|
};
|
||||||
|
|
||||||
|
[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
|
||||||
|
|
||||||
|
[[stage(compute), workgroup_size(1)]]
|
||||||
|
fn main() {
|
||||||
|
var v : InnerS;
|
||||||
|
var s1 : OuterS;
|
||||||
|
s1.a1[uniforms.i].s2 = v;
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
#include <metal_stdlib>
|
||||||
|
|
||||||
|
using namespace metal;
|
||||||
|
struct Uniforms {
|
||||||
|
/* 0x0000 */ uint i;
|
||||||
|
/* 0x0004 */ uint j;
|
||||||
|
};
|
||||||
|
struct InnerS {
|
||||||
|
int v;
|
||||||
|
};
|
||||||
|
struct tint_array_wrapper {
|
||||||
|
InnerS arr[8];
|
||||||
|
};
|
||||||
|
struct S1 {
|
||||||
|
tint_array_wrapper a2;
|
||||||
|
};
|
||||||
|
struct tint_array_wrapper_1 {
|
||||||
|
S1 arr[8];
|
||||||
|
};
|
||||||
|
struct OuterS {
|
||||||
|
tint_array_wrapper_1 a1;
|
||||||
|
};
|
||||||
|
|
||||||
|
kernel void tint_symbol(const constant Uniforms* tint_symbol_1 [[buffer(0)]]) {
|
||||||
|
InnerS v = {};
|
||||||
|
OuterS s = {};
|
||||||
|
s.a1.arr[(*(tint_symbol_1)).i].a2.arr[(*(tint_symbol_1)).j] = v;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,66 @@
|
||||||
|
; SPIR-V
|
||||||
|
; Version: 1.3
|
||||||
|
; Generator: Google Tint Compiler; 0
|
||||||
|
; Bound: 31
|
||||||
|
; Schema: 0
|
||||||
|
OpCapability Shader
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint GLCompute %main "main"
|
||||||
|
OpExecutionMode %main LocalSize 1 1 1
|
||||||
|
OpName %Uniforms "Uniforms"
|
||||||
|
OpMemberName %Uniforms 0 "i"
|
||||||
|
OpMemberName %Uniforms 1 "j"
|
||||||
|
OpName %uniforms "uniforms"
|
||||||
|
OpName %main "main"
|
||||||
|
OpName %InnerS "InnerS"
|
||||||
|
OpMemberName %InnerS 0 "v"
|
||||||
|
OpName %v "v"
|
||||||
|
OpName %OuterS "OuterS"
|
||||||
|
OpMemberName %OuterS 0 "a1"
|
||||||
|
OpName %S1 "S1"
|
||||||
|
OpMemberName %S1 0 "a2"
|
||||||
|
OpName %s "s"
|
||||||
|
OpDecorate %Uniforms Block
|
||||||
|
OpMemberDecorate %Uniforms 0 Offset 0
|
||||||
|
OpMemberDecorate %Uniforms 1 Offset 4
|
||||||
|
OpDecorate %uniforms NonWritable
|
||||||
|
OpDecorate %uniforms DescriptorSet 1
|
||||||
|
OpDecorate %uniforms Binding 4
|
||||||
|
OpMemberDecorate %InnerS 0 Offset 0
|
||||||
|
OpMemberDecorate %OuterS 0 Offset 0
|
||||||
|
OpMemberDecorate %S1 0 Offset 0
|
||||||
|
OpDecorate %_arr_InnerS_uint_8 ArrayStride 4
|
||||||
|
OpDecorate %_arr_S1_uint_8 ArrayStride 32
|
||||||
|
%uint = OpTypeInt 32 0
|
||||||
|
%Uniforms = OpTypeStruct %uint %uint
|
||||||
|
%_ptr_Uniform_Uniforms = OpTypePointer Uniform %Uniforms
|
||||||
|
%uniforms = OpVariable %_ptr_Uniform_Uniforms Uniform
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%5 = OpTypeFunction %void
|
||||||
|
%int = OpTypeInt 32 1
|
||||||
|
%InnerS = OpTypeStruct %int
|
||||||
|
%_ptr_Function_InnerS = OpTypePointer Function %InnerS
|
||||||
|
%13 = OpConstantNull %InnerS
|
||||||
|
%uint_8 = OpConstant %uint 8
|
||||||
|
%_arr_InnerS_uint_8 = OpTypeArray %InnerS %uint_8
|
||||||
|
%S1 = OpTypeStruct %_arr_InnerS_uint_8
|
||||||
|
%_arr_S1_uint_8 = OpTypeArray %S1 %uint_8
|
||||||
|
%OuterS = OpTypeStruct %_arr_S1_uint_8
|
||||||
|
%_ptr_Function_OuterS = OpTypePointer Function %OuterS
|
||||||
|
%21 = OpConstantNull %OuterS
|
||||||
|
%uint_0 = OpConstant %uint 0
|
||||||
|
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
|
||||||
|
%uint_1 = OpConstant %uint 1
|
||||||
|
%main = OpFunction %void None %5
|
||||||
|
%8 = OpLabel
|
||||||
|
%v = OpVariable %_ptr_Function_InnerS Function %13
|
||||||
|
%s = OpVariable %_ptr_Function_OuterS Function %21
|
||||||
|
%24 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_0
|
||||||
|
%25 = OpLoad %uint %24
|
||||||
|
%27 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_1
|
||||||
|
%28 = OpLoad %uint %27
|
||||||
|
%29 = OpAccessChain %_ptr_Function_InnerS %s %uint_0 %25 %uint_0 %28
|
||||||
|
%30 = OpLoad %InnerS %v
|
||||||
|
OpStore %29 %30
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
|
@ -0,0 +1,25 @@
|
||||||
|
struct Uniforms {
|
||||||
|
i : u32;
|
||||||
|
j : u32;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct InnerS {
|
||||||
|
v : i32;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct S1 {
|
||||||
|
a2 : array<InnerS, 8>;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct OuterS {
|
||||||
|
a1 : array<S1, 8>;
|
||||||
|
};
|
||||||
|
|
||||||
|
[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
|
||||||
|
|
||||||
|
[[stage(compute), workgroup_size(1)]]
|
||||||
|
fn main() {
|
||||||
|
var v : InnerS;
|
||||||
|
var s : OuterS;
|
||||||
|
s.a1[uniforms.i].a2[uniforms.j] = v;
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
#include <metal_stdlib>
|
||||||
|
|
||||||
|
using namespace metal;
|
||||||
|
struct Uniforms {
|
||||||
|
/* 0x0000 */ uint i;
|
||||||
|
};
|
||||||
|
struct InnerS {
|
||||||
|
/* 0x0000 */ int v;
|
||||||
|
};
|
||||||
|
struct OuterS {
|
||||||
|
/* 0x0000 */ InnerS a1[1];
|
||||||
|
};
|
||||||
|
|
||||||
|
kernel void tint_symbol(device OuterS* tint_symbol_1 [[buffer(1)]], const constant Uniforms* tint_symbol_2 [[buffer(0)]]) {
|
||||||
|
InnerS v = {};
|
||||||
|
(*(tint_symbol_1)).a1[(*(tint_symbol_2)).i] = v;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,57 @@
|
||||||
|
; SPIR-V
|
||||||
|
; Version: 1.3
|
||||||
|
; Generator: Google Tint Compiler; 0
|
||||||
|
; Bound: 25
|
||||||
|
; Schema: 0
|
||||||
|
OpCapability Shader
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint GLCompute %main "main"
|
||||||
|
OpExecutionMode %main LocalSize 1 1 1
|
||||||
|
OpName %Uniforms "Uniforms"
|
||||||
|
OpMemberName %Uniforms 0 "i"
|
||||||
|
OpName %uniforms "uniforms"
|
||||||
|
OpName %OuterS "OuterS"
|
||||||
|
OpMemberName %OuterS 0 "a1"
|
||||||
|
OpName %InnerS "InnerS"
|
||||||
|
OpMemberName %InnerS 0 "v"
|
||||||
|
OpName %s1 "s1"
|
||||||
|
OpName %main "main"
|
||||||
|
OpName %v "v"
|
||||||
|
OpDecorate %Uniforms Block
|
||||||
|
OpMemberDecorate %Uniforms 0 Offset 0
|
||||||
|
OpDecorate %uniforms NonWritable
|
||||||
|
OpDecorate %uniforms DescriptorSet 1
|
||||||
|
OpDecorate %uniforms Binding 4
|
||||||
|
OpDecorate %OuterS Block
|
||||||
|
OpMemberDecorate %OuterS 0 Offset 0
|
||||||
|
OpMemberDecorate %InnerS 0 Offset 0
|
||||||
|
OpDecorate %_runtimearr_InnerS ArrayStride 4
|
||||||
|
OpDecorate %s1 Binding 0
|
||||||
|
OpDecorate %s1 DescriptorSet 0
|
||||||
|
%uint = OpTypeInt 32 0
|
||||||
|
%Uniforms = OpTypeStruct %uint
|
||||||
|
%_ptr_Uniform_Uniforms = OpTypePointer Uniform %Uniforms
|
||||||
|
%uniforms = OpVariable %_ptr_Uniform_Uniforms Uniform
|
||||||
|
%int = OpTypeInt 32 1
|
||||||
|
%InnerS = OpTypeStruct %int
|
||||||
|
%_runtimearr_InnerS = OpTypeRuntimeArray %InnerS
|
||||||
|
%OuterS = OpTypeStruct %_runtimearr_InnerS
|
||||||
|
%_ptr_StorageBuffer_OuterS = OpTypePointer StorageBuffer %OuterS
|
||||||
|
%s1 = OpVariable %_ptr_StorageBuffer_OuterS StorageBuffer
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%11 = OpTypeFunction %void
|
||||||
|
%_ptr_Function_InnerS = OpTypePointer Function %InnerS
|
||||||
|
%17 = OpConstantNull %InnerS
|
||||||
|
%uint_0 = OpConstant %uint 0
|
||||||
|
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
|
||||||
|
%_ptr_StorageBuffer_InnerS = OpTypePointer StorageBuffer %InnerS
|
||||||
|
%main = OpFunction %void None %11
|
||||||
|
%14 = OpLabel
|
||||||
|
%v = OpVariable %_ptr_Function_InnerS Function %17
|
||||||
|
%20 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_0
|
||||||
|
%21 = OpLoad %uint %20
|
||||||
|
%23 = OpAccessChain %_ptr_StorageBuffer_InnerS %s1 %uint_0 %21
|
||||||
|
%24 = OpLoad %InnerS %v
|
||||||
|
OpStore %23 %24
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
|
@ -0,0 +1,21 @@
|
||||||
|
struct Uniforms {
|
||||||
|
i : u32;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct InnerS {
|
||||||
|
v : i32;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct OuterS {
|
||||||
|
a1 : array<InnerS>;
|
||||||
|
};
|
||||||
|
|
||||||
|
[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
|
||||||
|
|
||||||
|
[[binding(0), group(0)]] var<storage, read_write> s1 : OuterS;
|
||||||
|
|
||||||
|
[[stage(compute), workgroup_size(1)]]
|
||||||
|
fn main() {
|
||||||
|
var v : InnerS;
|
||||||
|
s1.a1[uniforms.i] = v;
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
#include <metal_stdlib>
|
||||||
|
|
||||||
|
using namespace metal;
|
||||||
|
struct Uniforms {
|
||||||
|
/* 0x0000 */ uint i;
|
||||||
|
/* 0x0004 */ uint j;
|
||||||
|
};
|
||||||
|
struct InnerS {
|
||||||
|
/* 0x0000 */ int v;
|
||||||
|
};
|
||||||
|
struct tint_array_wrapper {
|
||||||
|
/* 0x0000 */ InnerS arr[8];
|
||||||
|
};
|
||||||
|
struct S1 {
|
||||||
|
/* 0x0000 */ tint_array_wrapper a2;
|
||||||
|
};
|
||||||
|
struct OuterS {
|
||||||
|
/* 0x0000 */ S1 a1[1];
|
||||||
|
};
|
||||||
|
|
||||||
|
kernel void tint_symbol(device OuterS* tint_symbol_1 [[buffer(1)]], const constant Uniforms* tint_symbol_2 [[buffer(0)]]) {
|
||||||
|
InnerS v = {};
|
||||||
|
(*(tint_symbol_1)).a1[(*(tint_symbol_2)).i].a2.arr[(*(tint_symbol_2)).j] = v;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,69 @@
|
||||||
|
; SPIR-V
|
||||||
|
; Version: 1.3
|
||||||
|
; Generator: Google Tint Compiler; 0
|
||||||
|
; Bound: 31
|
||||||
|
; Schema: 0
|
||||||
|
OpCapability Shader
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint GLCompute %main "main"
|
||||||
|
OpExecutionMode %main LocalSize 1 1 1
|
||||||
|
OpName %Uniforms "Uniforms"
|
||||||
|
OpMemberName %Uniforms 0 "i"
|
||||||
|
OpMemberName %Uniforms 1 "j"
|
||||||
|
OpName %uniforms "uniforms"
|
||||||
|
OpName %OuterS "OuterS"
|
||||||
|
OpMemberName %OuterS 0 "a1"
|
||||||
|
OpName %S1 "S1"
|
||||||
|
OpMemberName %S1 0 "a2"
|
||||||
|
OpName %InnerS "InnerS"
|
||||||
|
OpMemberName %InnerS 0 "v"
|
||||||
|
OpName %s "s"
|
||||||
|
OpName %main "main"
|
||||||
|
OpName %v "v"
|
||||||
|
OpDecorate %Uniforms Block
|
||||||
|
OpMemberDecorate %Uniforms 0 Offset 0
|
||||||
|
OpMemberDecorate %Uniforms 1 Offset 4
|
||||||
|
OpDecorate %uniforms NonWritable
|
||||||
|
OpDecorate %uniforms DescriptorSet 1
|
||||||
|
OpDecorate %uniforms Binding 4
|
||||||
|
OpDecorate %OuterS Block
|
||||||
|
OpMemberDecorate %OuterS 0 Offset 0
|
||||||
|
OpMemberDecorate %S1 0 Offset 0
|
||||||
|
OpMemberDecorate %InnerS 0 Offset 0
|
||||||
|
OpDecorate %_arr_InnerS_uint_8 ArrayStride 4
|
||||||
|
OpDecorate %_runtimearr_S1 ArrayStride 32
|
||||||
|
OpDecorate %s Binding 0
|
||||||
|
OpDecorate %s DescriptorSet 0
|
||||||
|
%uint = OpTypeInt 32 0
|
||||||
|
%Uniforms = OpTypeStruct %uint %uint
|
||||||
|
%_ptr_Uniform_Uniforms = OpTypePointer Uniform %Uniforms
|
||||||
|
%uniforms = OpVariable %_ptr_Uniform_Uniforms Uniform
|
||||||
|
%int = OpTypeInt 32 1
|
||||||
|
%InnerS = OpTypeStruct %int
|
||||||
|
%uint_8 = OpConstant %uint 8
|
||||||
|
%_arr_InnerS_uint_8 = OpTypeArray %InnerS %uint_8
|
||||||
|
%S1 = OpTypeStruct %_arr_InnerS_uint_8
|
||||||
|
%_runtimearr_S1 = OpTypeRuntimeArray %S1
|
||||||
|
%OuterS = OpTypeStruct %_runtimearr_S1
|
||||||
|
%_ptr_StorageBuffer_OuterS = OpTypePointer StorageBuffer %OuterS
|
||||||
|
%s = OpVariable %_ptr_StorageBuffer_OuterS StorageBuffer
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%14 = OpTypeFunction %void
|
||||||
|
%_ptr_Function_InnerS = OpTypePointer Function %InnerS
|
||||||
|
%20 = OpConstantNull %InnerS
|
||||||
|
%uint_0 = OpConstant %uint 0
|
||||||
|
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
|
||||||
|
%uint_1 = OpConstant %uint 1
|
||||||
|
%_ptr_StorageBuffer_InnerS = OpTypePointer StorageBuffer %InnerS
|
||||||
|
%main = OpFunction %void None %14
|
||||||
|
%17 = OpLabel
|
||||||
|
%v = OpVariable %_ptr_Function_InnerS Function %20
|
||||||
|
%23 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_0
|
||||||
|
%24 = OpLoad %uint %23
|
||||||
|
%26 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_1
|
||||||
|
%27 = OpLoad %uint %26
|
||||||
|
%29 = OpAccessChain %_ptr_StorageBuffer_InnerS %s %uint_0 %24 %uint_0 %27
|
||||||
|
%30 = OpLoad %InnerS %v
|
||||||
|
OpStore %29 %30
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
|
@ -0,0 +1,26 @@
|
||||||
|
struct Uniforms {
|
||||||
|
i : u32;
|
||||||
|
j : u32;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct InnerS {
|
||||||
|
v : i32;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct S1 {
|
||||||
|
a2 : array<InnerS, 8>;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct OuterS {
|
||||||
|
a1 : array<S1>;
|
||||||
|
};
|
||||||
|
|
||||||
|
[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
|
||||||
|
|
||||||
|
[[binding(0), group(0)]] var<storage, read_write> s : OuterS;
|
||||||
|
|
||||||
|
[[stage(compute), workgroup_size(1)]]
|
||||||
|
fn main() {
|
||||||
|
var v : InnerS;
|
||||||
|
s.a1[uniforms.i].a2[uniforms.j] = v;
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
#include <metal_stdlib>
|
||||||
|
|
||||||
|
using namespace metal;
|
||||||
|
struct Uniforms {
|
||||||
|
/* 0x0000 */ uint i;
|
||||||
|
};
|
||||||
|
struct OuterS {
|
||||||
|
float2x4 m1;
|
||||||
|
};
|
||||||
|
|
||||||
|
kernel void tint_symbol(const constant Uniforms* tint_symbol_1 [[buffer(0)]]) {
|
||||||
|
OuterS s1 = {};
|
||||||
|
s1.m1[(*(tint_symbol_1)).i] = float4(1.0f);
|
||||||
|
s1.m1[(*(tint_symbol_1)).i][(*(tint_symbol_1)).i] = 1.0f;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,57 @@
|
||||||
|
; SPIR-V
|
||||||
|
; Version: 1.3
|
||||||
|
; Generator: Google Tint Compiler; 0
|
||||||
|
; Bound: 30
|
||||||
|
; Schema: 0
|
||||||
|
OpCapability Shader
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint GLCompute %main "main"
|
||||||
|
OpExecutionMode %main LocalSize 1 1 1
|
||||||
|
OpName %Uniforms "Uniforms"
|
||||||
|
OpMemberName %Uniforms 0 "i"
|
||||||
|
OpName %uniforms "uniforms"
|
||||||
|
OpName %main "main"
|
||||||
|
OpName %OuterS "OuterS"
|
||||||
|
OpMemberName %OuterS 0 "m1"
|
||||||
|
OpName %s1 "s1"
|
||||||
|
OpDecorate %Uniforms Block
|
||||||
|
OpMemberDecorate %Uniforms 0 Offset 0
|
||||||
|
OpDecorate %uniforms NonWritable
|
||||||
|
OpDecorate %uniforms DescriptorSet 1
|
||||||
|
OpDecorate %uniforms Binding 4
|
||||||
|
OpMemberDecorate %OuterS 0 Offset 0
|
||||||
|
OpMemberDecorate %OuterS 0 ColMajor
|
||||||
|
OpMemberDecorate %OuterS 0 MatrixStride 16
|
||||||
|
%uint = OpTypeInt 32 0
|
||||||
|
%Uniforms = OpTypeStruct %uint
|
||||||
|
%_ptr_Uniform_Uniforms = OpTypePointer Uniform %Uniforms
|
||||||
|
%uniforms = OpVariable %_ptr_Uniform_Uniforms Uniform
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%5 = OpTypeFunction %void
|
||||||
|
%float = OpTypeFloat 32
|
||||||
|
%v4float = OpTypeVector %float 4
|
||||||
|
%mat2v4float = OpTypeMatrix %v4float 2
|
||||||
|
%OuterS = OpTypeStruct %mat2v4float
|
||||||
|
%_ptr_Function_OuterS = OpTypePointer Function %OuterS
|
||||||
|
%15 = OpConstantNull %OuterS
|
||||||
|
%uint_0 = OpConstant %uint 0
|
||||||
|
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
|
||||||
|
%_ptr_Function_v4float = OpTypePointer Function %v4float
|
||||||
|
%float_1 = OpConstant %float 1
|
||||||
|
%23 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
|
||||||
|
%_ptr_Function_float = OpTypePointer Function %float
|
||||||
|
%main = OpFunction %void None %5
|
||||||
|
%8 = OpLabel
|
||||||
|
%s1 = OpVariable %_ptr_Function_OuterS Function %15
|
||||||
|
%18 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_0
|
||||||
|
%19 = OpLoad %uint %18
|
||||||
|
%21 = OpAccessChain %_ptr_Function_v4float %s1 %uint_0 %19
|
||||||
|
OpStore %21 %23
|
||||||
|
%24 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_0
|
||||||
|
%25 = OpLoad %uint %24
|
||||||
|
%26 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_0
|
||||||
|
%27 = OpLoad %uint %26
|
||||||
|
%29 = OpAccessChain %_ptr_Function_float %s1 %uint_0 %25 %27
|
||||||
|
OpStore %29 %float_1
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
|
@ -0,0 +1,16 @@
|
||||||
|
struct Uniforms {
|
||||||
|
i : u32;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct OuterS {
|
||||||
|
m1 : mat2x4<f32>;
|
||||||
|
};
|
||||||
|
|
||||||
|
[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
|
||||||
|
|
||||||
|
[[stage(compute), workgroup_size(1)]]
|
||||||
|
fn main() {
|
||||||
|
var s1 : OuterS;
|
||||||
|
s1.m1[uniforms.i] = vec4<f32>(1.0);
|
||||||
|
s1.m1[uniforms.i][uniforms.i] = 1.0;
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
#include <metal_stdlib>
|
||||||
|
|
||||||
|
using namespace metal;
|
||||||
|
struct Uniforms {
|
||||||
|
/* 0x0000 */ uint i;
|
||||||
|
};
|
||||||
|
struct InnerS {
|
||||||
|
int v;
|
||||||
|
};
|
||||||
|
struct tint_array_wrapper {
|
||||||
|
InnerS arr[8];
|
||||||
|
};
|
||||||
|
struct OuterS {
|
||||||
|
tint_array_wrapper a1;
|
||||||
|
tint_array_wrapper a2;
|
||||||
|
};
|
||||||
|
|
||||||
|
kernel void tint_symbol(const constant Uniforms* tint_symbol_1 [[buffer(0)]]) {
|
||||||
|
InnerS v = {};
|
||||||
|
OuterS s1 = {};
|
||||||
|
s1.a1.arr[(*(tint_symbol_1)).i] = v;
|
||||||
|
s1.a2.arr[(*(tint_symbol_1)).i] = v;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,63 @@
|
||||||
|
; SPIR-V
|
||||||
|
; Version: 1.3
|
||||||
|
; Generator: Google Tint Compiler; 0
|
||||||
|
; Bound: 31
|
||||||
|
; Schema: 0
|
||||||
|
OpCapability Shader
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint GLCompute %main "main"
|
||||||
|
OpExecutionMode %main LocalSize 1 1 1
|
||||||
|
OpName %Uniforms "Uniforms"
|
||||||
|
OpMemberName %Uniforms 0 "i"
|
||||||
|
OpName %uniforms "uniforms"
|
||||||
|
OpName %main "main"
|
||||||
|
OpName %InnerS "InnerS"
|
||||||
|
OpMemberName %InnerS 0 "v"
|
||||||
|
OpName %v "v"
|
||||||
|
OpName %OuterS "OuterS"
|
||||||
|
OpMemberName %OuterS 0 "a1"
|
||||||
|
OpMemberName %OuterS 1 "a2"
|
||||||
|
OpName %s1 "s1"
|
||||||
|
OpDecorate %Uniforms Block
|
||||||
|
OpMemberDecorate %Uniforms 0 Offset 0
|
||||||
|
OpDecorate %uniforms NonWritable
|
||||||
|
OpDecorate %uniforms DescriptorSet 1
|
||||||
|
OpDecorate %uniforms Binding 4
|
||||||
|
OpMemberDecorate %InnerS 0 Offset 0
|
||||||
|
OpMemberDecorate %OuterS 0 Offset 0
|
||||||
|
OpDecorate %_arr_InnerS_uint_8 ArrayStride 4
|
||||||
|
OpMemberDecorate %OuterS 1 Offset 32
|
||||||
|
%uint = OpTypeInt 32 0
|
||||||
|
%Uniforms = OpTypeStruct %uint
|
||||||
|
%_ptr_Uniform_Uniforms = OpTypePointer Uniform %Uniforms
|
||||||
|
%uniforms = OpVariable %_ptr_Uniform_Uniforms Uniform
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%5 = OpTypeFunction %void
|
||||||
|
%int = OpTypeInt 32 1
|
||||||
|
%InnerS = OpTypeStruct %int
|
||||||
|
%_ptr_Function_InnerS = OpTypePointer Function %InnerS
|
||||||
|
%13 = OpConstantNull %InnerS
|
||||||
|
%uint_8 = OpConstant %uint 8
|
||||||
|
%_arr_InnerS_uint_8 = OpTypeArray %InnerS %uint_8
|
||||||
|
%OuterS = OpTypeStruct %_arr_InnerS_uint_8 %_arr_InnerS_uint_8
|
||||||
|
%_ptr_Function_OuterS = OpTypePointer Function %OuterS
|
||||||
|
%19 = OpConstantNull %OuterS
|
||||||
|
%uint_0 = OpConstant %uint 0
|
||||||
|
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
|
||||||
|
%uint_1 = OpConstant %uint 1
|
||||||
|
%main = OpFunction %void None %5
|
||||||
|
%8 = OpLabel
|
||||||
|
%v = OpVariable %_ptr_Function_InnerS Function %13
|
||||||
|
%s1 = OpVariable %_ptr_Function_OuterS Function %19
|
||||||
|
%22 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_0
|
||||||
|
%23 = OpLoad %uint %22
|
||||||
|
%24 = OpAccessChain %_ptr_Function_InnerS %s1 %uint_0 %23
|
||||||
|
%25 = OpLoad %InnerS %v
|
||||||
|
OpStore %24 %25
|
||||||
|
%27 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_0
|
||||||
|
%28 = OpLoad %uint %27
|
||||||
|
%29 = OpAccessChain %_ptr_Function_InnerS %s1 %uint_1 %28
|
||||||
|
%30 = OpLoad %InnerS %v
|
||||||
|
OpStore %29 %30
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
|
@ -0,0 +1,22 @@
|
||||||
|
struct Uniforms {
|
||||||
|
i : u32;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct InnerS {
|
||||||
|
v : i32;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct OuterS {
|
||||||
|
a1 : array<InnerS, 8>;
|
||||||
|
a2 : array<InnerS, 8>;
|
||||||
|
};
|
||||||
|
|
||||||
|
[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
|
||||||
|
|
||||||
|
[[stage(compute), workgroup_size(1)]]
|
||||||
|
fn main() {
|
||||||
|
var v : InnerS;
|
||||||
|
var s1 : OuterS;
|
||||||
|
s1.a1[uniforms.i] = v;
|
||||||
|
s1.a2[uniforms.i] = v;
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
#include <metal_stdlib>
|
||||||
|
|
||||||
|
using namespace metal;
|
||||||
|
struct Uniforms {
|
||||||
|
/* 0x0000 */ uint i;
|
||||||
|
};
|
||||||
|
struct InnerS {
|
||||||
|
int v;
|
||||||
|
};
|
||||||
|
struct tint_array_wrapper {
|
||||||
|
InnerS arr[8];
|
||||||
|
};
|
||||||
|
struct S1 {
|
||||||
|
tint_array_wrapper a;
|
||||||
|
};
|
||||||
|
struct OuterS {
|
||||||
|
S1 s2;
|
||||||
|
};
|
||||||
|
|
||||||
|
kernel void tint_symbol(const constant Uniforms* tint_symbol_1 [[buffer(0)]]) {
|
||||||
|
InnerS v = {};
|
||||||
|
OuterS s1 = {};
|
||||||
|
s1.s2.a.arr[(*(tint_symbol_1)).i] = v;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
; SPIR-V
|
||||||
|
; Version: 1.3
|
||||||
|
; Generator: Google Tint Compiler; 0
|
||||||
|
; Bound: 27
|
||||||
|
; Schema: 0
|
||||||
|
OpCapability Shader
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint GLCompute %main "main"
|
||||||
|
OpExecutionMode %main LocalSize 1 1 1
|
||||||
|
OpName %Uniforms "Uniforms"
|
||||||
|
OpMemberName %Uniforms 0 "i"
|
||||||
|
OpName %uniforms "uniforms"
|
||||||
|
OpName %main "main"
|
||||||
|
OpName %InnerS "InnerS"
|
||||||
|
OpMemberName %InnerS 0 "v"
|
||||||
|
OpName %v "v"
|
||||||
|
OpName %OuterS "OuterS"
|
||||||
|
OpMemberName %OuterS 0 "s2"
|
||||||
|
OpName %S1 "S1"
|
||||||
|
OpMemberName %S1 0 "a"
|
||||||
|
OpName %s1 "s1"
|
||||||
|
OpDecorate %Uniforms Block
|
||||||
|
OpMemberDecorate %Uniforms 0 Offset 0
|
||||||
|
OpDecorate %uniforms NonWritable
|
||||||
|
OpDecorate %uniforms DescriptorSet 1
|
||||||
|
OpDecorate %uniforms Binding 4
|
||||||
|
OpMemberDecorate %InnerS 0 Offset 0
|
||||||
|
OpMemberDecorate %OuterS 0 Offset 0
|
||||||
|
OpMemberDecorate %S1 0 Offset 0
|
||||||
|
OpDecorate %_arr_InnerS_uint_8 ArrayStride 4
|
||||||
|
%uint = OpTypeInt 32 0
|
||||||
|
%Uniforms = OpTypeStruct %uint
|
||||||
|
%_ptr_Uniform_Uniforms = OpTypePointer Uniform %Uniforms
|
||||||
|
%uniforms = OpVariable %_ptr_Uniform_Uniforms Uniform
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%5 = OpTypeFunction %void
|
||||||
|
%int = OpTypeInt 32 1
|
||||||
|
%InnerS = OpTypeStruct %int
|
||||||
|
%_ptr_Function_InnerS = OpTypePointer Function %InnerS
|
||||||
|
%13 = OpConstantNull %InnerS
|
||||||
|
%uint_8 = OpConstant %uint 8
|
||||||
|
%_arr_InnerS_uint_8 = OpTypeArray %InnerS %uint_8
|
||||||
|
%S1 = OpTypeStruct %_arr_InnerS_uint_8
|
||||||
|
%OuterS = OpTypeStruct %S1
|
||||||
|
%_ptr_Function_OuterS = OpTypePointer Function %OuterS
|
||||||
|
%20 = OpConstantNull %OuterS
|
||||||
|
%uint_0 = OpConstant %uint 0
|
||||||
|
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
|
||||||
|
%main = OpFunction %void None %5
|
||||||
|
%8 = OpLabel
|
||||||
|
%v = OpVariable %_ptr_Function_InnerS Function %13
|
||||||
|
%s1 = OpVariable %_ptr_Function_OuterS Function %20
|
||||||
|
%23 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_0
|
||||||
|
%24 = OpLoad %uint %23
|
||||||
|
%25 = OpAccessChain %_ptr_Function_InnerS %s1 %uint_0 %uint_0 %24
|
||||||
|
%26 = OpLoad %InnerS %v
|
||||||
|
OpStore %25 %26
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
|
@ -0,0 +1,24 @@
|
||||||
|
struct Uniforms {
|
||||||
|
i : u32;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct InnerS {
|
||||||
|
v : i32;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct S1 {
|
||||||
|
a : array<InnerS, 8>;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct OuterS {
|
||||||
|
s2 : S1;
|
||||||
|
};
|
||||||
|
|
||||||
|
[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
|
||||||
|
|
||||||
|
[[stage(compute), workgroup_size(1)]]
|
||||||
|
fn main() {
|
||||||
|
var v : InnerS;
|
||||||
|
var s1 : OuterS;
|
||||||
|
s1.s2.a[uniforms.i] = v;
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
#include <metal_stdlib>
|
||||||
|
|
||||||
|
using namespace metal;
|
||||||
|
struct Uniforms {
|
||||||
|
/* 0x0000 */ uint i;
|
||||||
|
};
|
||||||
|
struct OuterS {
|
||||||
|
float3 v1;
|
||||||
|
};
|
||||||
|
|
||||||
|
kernel void tint_symbol(const constant Uniforms* tint_symbol_1 [[buffer(0)]]) {
|
||||||
|
OuterS s1 = {};
|
||||||
|
s1.v1[(*(tint_symbol_1)).i] = 1.0f;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
; SPIR-V
|
||||||
|
; Version: 1.3
|
||||||
|
; Generator: Google Tint Compiler; 0
|
||||||
|
; Bound: 22
|
||||||
|
; Schema: 0
|
||||||
|
OpCapability Shader
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint GLCompute %main "main"
|
||||||
|
OpExecutionMode %main LocalSize 1 1 1
|
||||||
|
OpName %Uniforms "Uniforms"
|
||||||
|
OpMemberName %Uniforms 0 "i"
|
||||||
|
OpName %uniforms "uniforms"
|
||||||
|
OpName %main "main"
|
||||||
|
OpName %OuterS "OuterS"
|
||||||
|
OpMemberName %OuterS 0 "v1"
|
||||||
|
OpName %s1 "s1"
|
||||||
|
OpDecorate %Uniforms Block
|
||||||
|
OpMemberDecorate %Uniforms 0 Offset 0
|
||||||
|
OpDecorate %uniforms NonWritable
|
||||||
|
OpDecorate %uniforms DescriptorSet 1
|
||||||
|
OpDecorate %uniforms Binding 4
|
||||||
|
OpMemberDecorate %OuterS 0 Offset 0
|
||||||
|
%uint = OpTypeInt 32 0
|
||||||
|
%Uniforms = OpTypeStruct %uint
|
||||||
|
%_ptr_Uniform_Uniforms = OpTypePointer Uniform %Uniforms
|
||||||
|
%uniforms = OpVariable %_ptr_Uniform_Uniforms Uniform
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%5 = OpTypeFunction %void
|
||||||
|
%float = OpTypeFloat 32
|
||||||
|
%v3float = OpTypeVector %float 3
|
||||||
|
%OuterS = OpTypeStruct %v3float
|
||||||
|
%_ptr_Function_OuterS = OpTypePointer Function %OuterS
|
||||||
|
%14 = OpConstantNull %OuterS
|
||||||
|
%uint_0 = OpConstant %uint 0
|
||||||
|
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
|
||||||
|
%_ptr_Function_float = OpTypePointer Function %float
|
||||||
|
%float_1 = OpConstant %float 1
|
||||||
|
%main = OpFunction %void None %5
|
||||||
|
%8 = OpLabel
|
||||||
|
%s1 = OpVariable %_ptr_Function_OuterS Function %14
|
||||||
|
%17 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_0
|
||||||
|
%18 = OpLoad %uint %17
|
||||||
|
%20 = OpAccessChain %_ptr_Function_float %s1 %uint_0 %18
|
||||||
|
OpStore %20 %float_1
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
|
@ -0,0 +1,15 @@
|
||||||
|
struct Uniforms {
|
||||||
|
i : u32;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct OuterS {
|
||||||
|
v1 : vec3<f32>;
|
||||||
|
};
|
||||||
|
|
||||||
|
[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
|
||||||
|
|
||||||
|
[[stage(compute), workgroup_size(1)]]
|
||||||
|
fn main() {
|
||||||
|
var s1 : OuterS;
|
||||||
|
s1.v1[uniforms.i] = 1.0;
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
#include <metal_stdlib>
|
||||||
|
|
||||||
|
using namespace metal;
|
||||||
|
struct Uniforms {
|
||||||
|
/* 0x0000 */ uint i;
|
||||||
|
};
|
||||||
|
struct tint_array_wrapper {
|
||||||
|
uint arr[8];
|
||||||
|
};
|
||||||
|
struct OuterS {
|
||||||
|
tint_array_wrapper a1;
|
||||||
|
};
|
||||||
|
|
||||||
|
uint f(uint i) {
|
||||||
|
return (i + 1u);
|
||||||
|
}
|
||||||
|
|
||||||
|
kernel void tint_symbol(const constant Uniforms* tint_symbol_1 [[buffer(0)]]) {
|
||||||
|
OuterS s1 = {};
|
||||||
|
float3 v = 0.0f;
|
||||||
|
v[s1.a1.arr[(*(tint_symbol_1)).i]] = 1.0f;
|
||||||
|
v[f(s1.a1.arr[(*(tint_symbol_1)).i])] = 1.0f;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,73 @@
|
||||||
|
; SPIR-V
|
||||||
|
; Version: 1.3
|
||||||
|
; Generator: Google Tint Compiler; 0
|
||||||
|
; Bound: 42
|
||||||
|
; Schema: 0
|
||||||
|
OpCapability Shader
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint GLCompute %main "main"
|
||||||
|
OpExecutionMode %main LocalSize 1 1 1
|
||||||
|
OpName %Uniforms "Uniforms"
|
||||||
|
OpMemberName %Uniforms 0 "i"
|
||||||
|
OpName %uniforms "uniforms"
|
||||||
|
OpName %f "f"
|
||||||
|
OpName %i "i"
|
||||||
|
OpName %main "main"
|
||||||
|
OpName %OuterS "OuterS"
|
||||||
|
OpMemberName %OuterS 0 "a1"
|
||||||
|
OpName %s1 "s1"
|
||||||
|
OpName %v "v"
|
||||||
|
OpDecorate %Uniforms Block
|
||||||
|
OpMemberDecorate %Uniforms 0 Offset 0
|
||||||
|
OpDecorate %uniforms NonWritable
|
||||||
|
OpDecorate %uniforms DescriptorSet 1
|
||||||
|
OpDecorate %uniforms Binding 4
|
||||||
|
OpMemberDecorate %OuterS 0 Offset 0
|
||||||
|
OpDecorate %_arr_uint_uint_8 ArrayStride 4
|
||||||
|
%uint = OpTypeInt 32 0
|
||||||
|
%Uniforms = OpTypeStruct %uint
|
||||||
|
%_ptr_Uniform_Uniforms = OpTypePointer Uniform %Uniforms
|
||||||
|
%uniforms = OpVariable %_ptr_Uniform_Uniforms Uniform
|
||||||
|
%5 = OpTypeFunction %uint %uint
|
||||||
|
%uint_1 = OpConstant %uint 1
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%11 = OpTypeFunction %void
|
||||||
|
%uint_8 = OpConstant %uint 8
|
||||||
|
%_arr_uint_uint_8 = OpTypeArray %uint %uint_8
|
||||||
|
%OuterS = OpTypeStruct %_arr_uint_uint_8
|
||||||
|
%_ptr_Function_OuterS = OpTypePointer Function %OuterS
|
||||||
|
%20 = OpConstantNull %OuterS
|
||||||
|
%float = OpTypeFloat 32
|
||||||
|
%v3float = OpTypeVector %float 3
|
||||||
|
%_ptr_Function_v3float = OpTypePointer Function %v3float
|
||||||
|
%25 = OpConstantNull %v3float
|
||||||
|
%uint_0 = OpConstant %uint 0
|
||||||
|
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
|
||||||
|
%_ptr_Function_uint = OpTypePointer Function %uint
|
||||||
|
%_ptr_Function_float = OpTypePointer Function %float
|
||||||
|
%float_1 = OpConstant %float 1
|
||||||
|
%f = OpFunction %uint None %5
|
||||||
|
%i = OpFunctionParameter %uint
|
||||||
|
%8 = OpLabel
|
||||||
|
%10 = OpIAdd %uint %i %uint_1
|
||||||
|
OpReturnValue %10
|
||||||
|
OpFunctionEnd
|
||||||
|
%main = OpFunction %void None %11
|
||||||
|
%14 = OpLabel
|
||||||
|
%s1 = OpVariable %_ptr_Function_OuterS Function %20
|
||||||
|
%v = OpVariable %_ptr_Function_v3float Function %25
|
||||||
|
%28 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_0
|
||||||
|
%29 = OpLoad %uint %28
|
||||||
|
%31 = OpAccessChain %_ptr_Function_uint %s1 %uint_0 %29
|
||||||
|
%32 = OpLoad %uint %31
|
||||||
|
%34 = OpAccessChain %_ptr_Function_float %v %32
|
||||||
|
OpStore %34 %float_1
|
||||||
|
%37 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_0
|
||||||
|
%38 = OpLoad %uint %37
|
||||||
|
%39 = OpAccessChain %_ptr_Function_uint %s1 %uint_0 %38
|
||||||
|
%40 = OpLoad %uint %39
|
||||||
|
%36 = OpFunctionCall %uint %f %40
|
||||||
|
%41 = OpAccessChain %_ptr_Function_float %v %36
|
||||||
|
OpStore %41 %float_1
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
|
@ -0,0 +1,21 @@
|
||||||
|
struct Uniforms {
|
||||||
|
i : u32;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct OuterS {
|
||||||
|
a1 : array<u32, 8>;
|
||||||
|
};
|
||||||
|
|
||||||
|
[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
|
||||||
|
|
||||||
|
fn f(i : u32) -> u32 {
|
||||||
|
return (i + 1u);
|
||||||
|
}
|
||||||
|
|
||||||
|
[[stage(compute), workgroup_size(1)]]
|
||||||
|
fn main() {
|
||||||
|
var s1 : OuterS;
|
||||||
|
var v : vec3<f32>;
|
||||||
|
v[s1.a1[uniforms.i]] = 1.0;
|
||||||
|
v[f(s1.a1[uniforms.i])] = 1.0;
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
#include <metal_stdlib>
|
||||||
|
|
||||||
|
using namespace metal;
|
||||||
|
struct Uniforms {
|
||||||
|
/* 0x0000 */ uint i;
|
||||||
|
};
|
||||||
|
struct InnerS {
|
||||||
|
int v;
|
||||||
|
};
|
||||||
|
struct tint_array_wrapper {
|
||||||
|
InnerS arr[8];
|
||||||
|
};
|
||||||
|
struct OuterS {
|
||||||
|
tint_array_wrapper a1;
|
||||||
|
};
|
||||||
|
|
||||||
|
kernel void tint_symbol(const constant Uniforms* tint_symbol_1 [[buffer(0)]]) {
|
||||||
|
InnerS v = {};
|
||||||
|
OuterS s1 = {};
|
||||||
|
uint const p_save = (*(tint_symbol_1)).i;
|
||||||
|
s1.a1.arr[p_save] = v;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,55 @@
|
||||||
|
; SPIR-V
|
||||||
|
; Version: 1.3
|
||||||
|
; Generator: Google Tint Compiler; 0
|
||||||
|
; Bound: 26
|
||||||
|
; Schema: 0
|
||||||
|
OpCapability Shader
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint GLCompute %main "main"
|
||||||
|
OpExecutionMode %main LocalSize 1 1 1
|
||||||
|
OpName %Uniforms "Uniforms"
|
||||||
|
OpMemberName %Uniforms 0 "i"
|
||||||
|
OpName %uniforms "uniforms"
|
||||||
|
OpName %main "main"
|
||||||
|
OpName %InnerS "InnerS"
|
||||||
|
OpMemberName %InnerS 0 "v"
|
||||||
|
OpName %v "v"
|
||||||
|
OpName %OuterS "OuterS"
|
||||||
|
OpMemberName %OuterS 0 "a1"
|
||||||
|
OpName %s1 "s1"
|
||||||
|
OpDecorate %Uniforms Block
|
||||||
|
OpMemberDecorate %Uniforms 0 Offset 0
|
||||||
|
OpDecorate %uniforms NonWritable
|
||||||
|
OpDecorate %uniforms DescriptorSet 1
|
||||||
|
OpDecorate %uniforms Binding 4
|
||||||
|
OpMemberDecorate %InnerS 0 Offset 0
|
||||||
|
OpMemberDecorate %OuterS 0 Offset 0
|
||||||
|
OpDecorate %_arr_InnerS_uint_8 ArrayStride 4
|
||||||
|
%uint = OpTypeInt 32 0
|
||||||
|
%Uniforms = OpTypeStruct %uint
|
||||||
|
%_ptr_Uniform_Uniforms = OpTypePointer Uniform %Uniforms
|
||||||
|
%uniforms = OpVariable %_ptr_Uniform_Uniforms Uniform
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%5 = OpTypeFunction %void
|
||||||
|
%int = OpTypeInt 32 1
|
||||||
|
%InnerS = OpTypeStruct %int
|
||||||
|
%_ptr_Function_InnerS = OpTypePointer Function %InnerS
|
||||||
|
%13 = OpConstantNull %InnerS
|
||||||
|
%uint_8 = OpConstant %uint 8
|
||||||
|
%_arr_InnerS_uint_8 = OpTypeArray %InnerS %uint_8
|
||||||
|
%OuterS = OpTypeStruct %_arr_InnerS_uint_8
|
||||||
|
%_ptr_Function_OuterS = OpTypePointer Function %OuterS
|
||||||
|
%19 = OpConstantNull %OuterS
|
||||||
|
%uint_0 = OpConstant %uint 0
|
||||||
|
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
|
||||||
|
%main = OpFunction %void None %5
|
||||||
|
%8 = OpLabel
|
||||||
|
%v = OpVariable %_ptr_Function_InnerS Function %13
|
||||||
|
%s1 = OpVariable %_ptr_Function_OuterS Function %19
|
||||||
|
%22 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_0
|
||||||
|
%23 = OpLoad %uint %22
|
||||||
|
%24 = OpAccessChain %_ptr_Function_InnerS %s1 %uint_0 %23
|
||||||
|
%25 = OpLoad %InnerS %v
|
||||||
|
OpStore %24 %25
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
|
@ -0,0 +1,21 @@
|
||||||
|
struct Uniforms {
|
||||||
|
i : u32;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct InnerS {
|
||||||
|
v : i32;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct OuterS {
|
||||||
|
a1 : array<InnerS, 8>;
|
||||||
|
};
|
||||||
|
|
||||||
|
[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
|
||||||
|
|
||||||
|
[[stage(compute), workgroup_size(1)]]
|
||||||
|
fn main() {
|
||||||
|
var v : InnerS;
|
||||||
|
var s1 : OuterS;
|
||||||
|
let p = &(s1.a1[uniforms.i]);
|
||||||
|
*(p) = v;
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
#include <metal_stdlib>
|
||||||
|
|
||||||
|
using namespace metal;
|
||||||
|
struct Uniforms {
|
||||||
|
/* 0x0000 */ uint i;
|
||||||
|
};
|
||||||
|
struct InnerS {
|
||||||
|
int v;
|
||||||
|
};
|
||||||
|
struct tint_array_wrapper {
|
||||||
|
InnerS arr[8];
|
||||||
|
};
|
||||||
|
struct OuterS {
|
||||||
|
tint_array_wrapper a1;
|
||||||
|
};
|
||||||
|
|
||||||
|
void f(thread OuterS* const p, const constant Uniforms* const tint_symbol_1) {
|
||||||
|
InnerS v = {};
|
||||||
|
(*(p)).a1.arr[(*(tint_symbol_1)).i] = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
kernel void tint_symbol(const constant Uniforms* tint_symbol_2 [[buffer(0)]]) {
|
||||||
|
OuterS s1 = {};
|
||||||
|
f(&(s1), tint_symbol_2);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,64 @@
|
||||||
|
; SPIR-V
|
||||||
|
; Version: 1.3
|
||||||
|
; Generator: Google Tint Compiler; 0
|
||||||
|
; Bound: 33
|
||||||
|
; Schema: 0
|
||||||
|
OpCapability Shader
|
||||||
|
OpMemoryModel Logical GLSL450
|
||||||
|
OpEntryPoint GLCompute %main "main"
|
||||||
|
OpExecutionMode %main LocalSize 1 1 1
|
||||||
|
OpName %Uniforms "Uniforms"
|
||||||
|
OpMemberName %Uniforms 0 "i"
|
||||||
|
OpName %uniforms "uniforms"
|
||||||
|
OpName %OuterS "OuterS"
|
||||||
|
OpMemberName %OuterS 0 "a1"
|
||||||
|
OpName %InnerS "InnerS"
|
||||||
|
OpMemberName %InnerS 0 "v"
|
||||||
|
OpName %f "f"
|
||||||
|
OpName %p "p"
|
||||||
|
OpName %v "v"
|
||||||
|
OpName %main "main"
|
||||||
|
OpName %s1 "s1"
|
||||||
|
OpDecorate %Uniforms Block
|
||||||
|
OpMemberDecorate %Uniforms 0 Offset 0
|
||||||
|
OpDecorate %uniforms NonWritable
|
||||||
|
OpDecorate %uniforms DescriptorSet 1
|
||||||
|
OpDecorate %uniforms Binding 4
|
||||||
|
OpMemberDecorate %OuterS 0 Offset 0
|
||||||
|
OpMemberDecorate %InnerS 0 Offset 0
|
||||||
|
OpDecorate %_arr_InnerS_uint_8 ArrayStride 4
|
||||||
|
%uint = OpTypeInt 32 0
|
||||||
|
%Uniforms = OpTypeStruct %uint
|
||||||
|
%_ptr_Uniform_Uniforms = OpTypePointer Uniform %Uniforms
|
||||||
|
%uniforms = OpVariable %_ptr_Uniform_Uniforms Uniform
|
||||||
|
%void = OpTypeVoid
|
||||||
|
%int = OpTypeInt 32 1
|
||||||
|
%InnerS = OpTypeStruct %int
|
||||||
|
%uint_8 = OpConstant %uint 8
|
||||||
|
%_arr_InnerS_uint_8 = OpTypeArray %InnerS %uint_8
|
||||||
|
%OuterS = OpTypeStruct %_arr_InnerS_uint_8
|
||||||
|
%_ptr_Function_OuterS = OpTypePointer Function %OuterS
|
||||||
|
%5 = OpTypeFunction %void %_ptr_Function_OuterS
|
||||||
|
%_ptr_Function_InnerS = OpTypePointer Function %InnerS
|
||||||
|
%18 = OpConstantNull %InnerS
|
||||||
|
%uint_0 = OpConstant %uint 0
|
||||||
|
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
|
||||||
|
%26 = OpTypeFunction %void
|
||||||
|
%30 = OpConstantNull %OuterS
|
||||||
|
%f = OpFunction %void None %5
|
||||||
|
%p = OpFunctionParameter %_ptr_Function_OuterS
|
||||||
|
%15 = OpLabel
|
||||||
|
%v = OpVariable %_ptr_Function_InnerS Function %18
|
||||||
|
%22 = OpAccessChain %_ptr_Uniform_uint %uniforms %uint_0
|
||||||
|
%23 = OpLoad %uint %22
|
||||||
|
%24 = OpAccessChain %_ptr_Function_InnerS %p %uint_0 %23
|
||||||
|
%25 = OpLoad %InnerS %v
|
||||||
|
OpStore %24 %25
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
||||||
|
%main = OpFunction %void None %26
|
||||||
|
%28 = OpLabel
|
||||||
|
%s1 = OpVariable %_ptr_Function_OuterS Function %30
|
||||||
|
%31 = OpFunctionCall %void %f %s1
|
||||||
|
OpReturn
|
||||||
|
OpFunctionEnd
|
|
@ -0,0 +1,24 @@
|
||||||
|
struct Uniforms {
|
||||||
|
i : u32;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct InnerS {
|
||||||
|
v : i32;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct OuterS {
|
||||||
|
a1 : array<InnerS, 8>;
|
||||||
|
};
|
||||||
|
|
||||||
|
[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
|
||||||
|
|
||||||
|
fn f(p : ptr<function, OuterS>) {
|
||||||
|
var v : InnerS;
|
||||||
|
(*(p)).a1[uniforms.i] = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[stage(compute), workgroup_size(1)]]
|
||||||
|
fn main() {
|
||||||
|
var s1 : OuterS;
|
||||||
|
f(&(s1));
|
||||||
|
}
|
Loading…
Reference in New Issue