mirror of
https://github.com/gfx-rs/wgpu.git
synced 2026-04-22 03:02:01 -04:00
Simplify `naga::back::spv::LocalType` to have only one variant for representing pointers, and use the SPIR-V type as the base type, so that `LocalType` values are equal when the SPIR-V pointer types they map to would be equal as well. This avoids emitting multiple `OpTypePointer` instructions, which SPIR-V would interpret as distinct types, for equivalent Naga IR pointer types. Change the `get_pointer_type_id` utility function accordingly, and adjust its callers. Change `LocalType::from_inner` into `Writer::localtype_from_inner`, so that it can call `Writer` methods to build base types. Adjust users.
1067 lines
26 KiB
Plaintext
1067 lines
26 KiB
Plaintext
; SPIR-V
|
|
; Version: 1.1
|
|
; Generator: rspirv
|
|
; Bound: 402
|
|
OpCapability Shader
|
|
OpExtension "SPV_KHR_storage_buffer_storage_class"
|
|
%1 = OpExtInstImport "GLSL.std.450"
|
|
OpMemoryModel Logical GLSL450
|
|
OpEntryPoint Vertex %311 "foo_vert" %306 %309
|
|
OpEntryPoint Fragment %363 "foo_frag" %362
|
|
OpEntryPoint GLCompute %381 "assign_through_ptr"
|
|
OpEntryPoint GLCompute %392 "assign_to_ptr_components"
|
|
OpExecutionMode %363 OriginUpperLeft
|
|
OpExecutionMode %381 LocalSize 1 1 1
|
|
OpExecutionMode %392 LocalSize 1 1 1
|
|
%3 = OpString "access.wgsl"
|
|
OpSource Unknown 0 %3 "// This snapshot tests accessing various containers, dereferencing pointers.
|
|
|
|
struct GlobalConst {
|
|
a: u32,
|
|
b: vec3<u32>,
|
|
c: i32,
|
|
}
|
|
// tests msl padding insertion for global constants
|
|
var<private> global_const: GlobalConst = GlobalConst(0u, vec3<u32>(0u, 0u, 0u), 0);
|
|
|
|
struct AlignedWrapper {
|
|
\t@align(8) value: i32
|
|
}
|
|
|
|
struct Bar {
|
|
\t_matrix: mat4x3<f32>,
|
|
\tmatrix_array: array<mat2x2<f32>, 2>,
|
|
\tatom: atomic<i32>,
|
|
\tatom_arr: array<atomic<i32>, 10>,
|
|
\tarr: array<vec2<u32>, 2>,
|
|
\tdata: array<AlignedWrapper>,
|
|
}
|
|
|
|
@group(0) @binding(0)
|
|
var<storage,read_write> bar: Bar;
|
|
|
|
struct Baz {
|
|
\tm: mat3x2<f32>,
|
|
}
|
|
|
|
@group(0) @binding(1)
|
|
var<uniform> baz: Baz;
|
|
|
|
@group(0) @binding(2)
|
|
var<storage,read_write> qux: vec2<i32>;
|
|
|
|
fn test_matrix_within_struct_accesses() {
|
|
\tvar idx = 1;
|
|
|
|
idx--;
|
|
|
|
\t// loads
|
|
let l0 = baz.m;
|
|
let l1 = baz.m[0];
|
|
let l2 = baz.m[idx];
|
|
let l3 = baz.m[0][1];
|
|
let l4 = baz.m[0][idx];
|
|
let l5 = baz.m[idx][1];
|
|
let l6 = baz.m[idx][idx];
|
|
|
|
var t = Baz(mat3x2<f32>(vec2<f32>(1.0), vec2<f32>(2.0), vec2<f32>(3.0)));
|
|
|
|
idx++;
|
|
|
|
\t// stores
|
|
t.m = mat3x2<f32>(vec2<f32>(6.0), vec2<f32>(5.0), vec2<f32>(4.0));
|
|
t.m[0] = vec2<f32>(9.0);
|
|
t.m[idx] = vec2<f32>(90.0);
|
|
t.m[0][1] = 10.0;
|
|
t.m[0][idx] = 20.0;
|
|
t.m[idx][1] = 30.0;
|
|
t.m[idx][idx] = 40.0;
|
|
}
|
|
|
|
struct MatCx2InArray {
|
|
\tam: array<mat4x2<f32>, 2>,
|
|
}
|
|
|
|
@group(0) @binding(3)
|
|
var<uniform> nested_mat_cx2: MatCx2InArray;
|
|
|
|
fn test_matrix_within_array_within_struct_accesses() {
|
|
\tvar idx = 1;
|
|
|
|
idx--;
|
|
|
|
\t// loads
|
|
let l0 = nested_mat_cx2.am;
|
|
let l1 = nested_mat_cx2.am[0];
|
|
let l2 = nested_mat_cx2.am[0][0];
|
|
let l3 = nested_mat_cx2.am[0][idx];
|
|
let l4 = nested_mat_cx2.am[0][0][1];
|
|
let l5 = nested_mat_cx2.am[0][0][idx];
|
|
let l6 = nested_mat_cx2.am[0][idx][1];
|
|
let l7 = nested_mat_cx2.am[0][idx][idx];
|
|
|
|
var t = MatCx2InArray(array<mat4x2<f32>, 2>());
|
|
|
|
idx++;
|
|
|
|
\t// stores
|
|
t.am = array<mat4x2<f32>, 2>();
|
|
t.am[0] = mat4x2<f32>(vec2<f32>(8.0), vec2<f32>(7.0), vec2<f32>(6.0), vec2<f32>(5.0));
|
|
t.am[0][0] = vec2<f32>(9.0);
|
|
t.am[0][idx] = vec2<f32>(90.0);
|
|
t.am[0][0][1] = 10.0;
|
|
t.am[0][0][idx] = 20.0;
|
|
t.am[0][idx][1] = 30.0;
|
|
t.am[0][idx][idx] = 40.0;
|
|
}
|
|
|
|
fn read_from_private(foo: ptr<function, f32>) -> f32 {
|
|
return *foo;
|
|
}
|
|
|
|
fn test_arr_as_arg(a: array<array<f32, 10>, 5>) -> f32 {
|
|
return a[4][9];
|
|
}
|
|
|
|
@vertex
|
|
fn foo_vert(@builtin(vertex_index) vi: u32) -> @builtin(position) vec4<f32> {
|
|
var foo: f32 = 0.0;
|
|
// We should check that backed doesn't skip this expression
|
|
let baz: f32 = foo;
|
|
foo = 1.0;
|
|
|
|
\ttest_matrix_within_struct_accesses();
|
|
\ttest_matrix_within_array_within_struct_accesses();
|
|
|
|
// test storage loads
|
|
\tlet _matrix = bar._matrix;
|
|
\tlet arr = bar.arr;
|
|
\tlet index = 3u;
|
|
\tlet b = bar._matrix[index].x;
|
|
\tlet a = bar.data[arrayLength(&bar.data) - 2u].value;
|
|
\tlet c = qux;
|
|
|
|
\t// test pointer types
|
|
\tlet data_pointer: ptr<storage, i32, read_write> = &bar.data[0].value;
|
|
\tlet foo_value = read_from_private(&foo);
|
|
|
|
\t// test array indexing
|
|
\tvar c2 = array<i32, 5>(a, i32(b), 3, 4, 5);
|
|
\tc2[vi + 1u] = 42;
|
|
\tlet value = c2[vi];
|
|
|
|
\ttest_arr_as_arg(array<array<f32, 10>, 5>());
|
|
|
|
\treturn vec4<f32>(_matrix * vec4<f32>(vec4<i32>(value)), 2.0);
|
|
}
|
|
|
|
@fragment
|
|
fn foo_frag() -> @location(0) vec4<f32> {
|
|
\t// test storage stores
|
|
\tbar._matrix[1].z = 1.0;
|
|
\tbar._matrix = mat4x3<f32>(vec3<f32>(0.0), vec3<f32>(1.0), vec3<f32>(2.0), vec3<f32>(3.0));
|
|
\tbar.arr = array<vec2<u32>, 2>(vec2<u32>(0u), vec2<u32>(1u));
|
|
\tbar.data[1].value = 1;
|
|
\tqux = vec2<i32>();
|
|
|
|
\treturn vec4<f32>(0.0);
|
|
}
|
|
|
|
fn assign_through_ptr_fn(p: ptr<function, u32>) {
|
|
*p = 42u;
|
|
}
|
|
|
|
fn assign_array_through_ptr_fn(foo: ptr<function, array<vec4<f32>, 2>>) {
|
|
*foo = array<vec4<f32>, 2>(vec4(1.0), vec4(2.0));
|
|
}
|
|
|
|
@compute @workgroup_size(1)
|
|
fn assign_through_ptr() {
|
|
var val = 33u;
|
|
assign_through_ptr_fn(&val);
|
|
|
|
\tvar arr = array<vec4<f32>, 2>(vec4(6.0), vec4(7.0));
|
|
assign_array_through_ptr_fn(&arr);
|
|
}
|
|
|
|
struct AssignToMember {
|
|
x: u32,
|
|
}
|
|
|
|
fn fetch_arg_ptr_member(p: ptr<function, AssignToMember>) -> u32 {
|
|
return (*p).x;
|
|
}
|
|
|
|
fn assign_to_arg_ptr_member(p: ptr<function, AssignToMember>) {
|
|
(*p).x = 10u;
|
|
}
|
|
|
|
fn fetch_arg_ptr_array_element(p: ptr<function, array<u32, 4>>) -> u32 {
|
|
return (*p)[1];
|
|
}
|
|
|
|
fn assign_to_arg_ptr_array_element(p: ptr<function, array<u32, 4>>) {
|
|
(*p)[1] = 10u;
|
|
}
|
|
|
|
@compute @workgroup_size(1)
|
|
fn assign_to_ptr_components() {
|
|
var s1: AssignToMember;
|
|
assign_to_arg_ptr_member(&s1);
|
|
fetch_arg_ptr_member(&s1);
|
|
|
|
var a1: array<u32, 4>;
|
|
assign_to_arg_ptr_array_element(&a1);
|
|
fetch_arg_ptr_array_element(&a1);
|
|
}
|
|
|
|
fn index_ptr(value: bool) -> bool {
|
|
var a = array<bool, 1>(value);
|
|
let p = &a;
|
|
return p[0];
|
|
}
|
|
|
|
struct S { m: i32 };
|
|
|
|
fn member_ptr() -> i32 {
|
|
var s: S = S(42);
|
|
let p = &s;
|
|
return p.m;
|
|
}
|
|
|
|
struct Inner { delicious: i32 }
|
|
|
|
struct Outer { om_nom_nom: Inner, thing: u32 }
|
|
|
|
fn let_members_of_members() -> i32 {
|
|
let thing = Outer();
|
|
|
|
let inner = thing.om_nom_nom;
|
|
let delishus = inner.delicious;
|
|
|
|
if (thing.thing != u32(delishus)) {
|
|
// LOL
|
|
}
|
|
|
|
return thing.om_nom_nom.delicious;
|
|
}
|
|
|
|
fn var_members_of_members() -> i32 {
|
|
var thing = Outer();
|
|
|
|
var inner = thing.om_nom_nom;
|
|
var delishus = inner.delicious;
|
|
|
|
if (thing.thing != u32(delishus)) {
|
|
// LOL
|
|
}
|
|
|
|
return thing.om_nom_nom.delicious;
|
|
}
|
|
"
|
|
OpMemberName %7 0 "a"
|
|
OpMemberName %7 1 "b"
|
|
OpMemberName %7 2 "c"
|
|
OpName %7 "GlobalConst"
|
|
OpMemberName %8 0 "value"
|
|
OpName %8 "AlignedWrapper"
|
|
OpMemberName %21 0 "_matrix"
|
|
OpMemberName %21 1 "matrix_array"
|
|
OpMemberName %21 2 "atom"
|
|
OpMemberName %21 3 "atom_arr"
|
|
OpMemberName %21 4 "arr"
|
|
OpMemberName %21 5 "data"
|
|
OpName %21 "Bar"
|
|
OpMemberName %23 0 "m"
|
|
OpName %23 "Baz"
|
|
OpMemberName %27 0 "am"
|
|
OpName %27 "MatCx2InArray"
|
|
OpMemberName %37 0 "x"
|
|
OpName %37 "AssignToMember"
|
|
OpMemberName %45 0 "m"
|
|
OpName %45 "S"
|
|
OpMemberName %46 0 "delicious"
|
|
OpName %46 "Inner"
|
|
OpMemberName %47 0 "om_nom_nom"
|
|
OpMemberName %47 1 "thing"
|
|
OpName %47 "Outer"
|
|
OpName %52 "global_const"
|
|
OpName %54 "bar"
|
|
OpName %56 "baz"
|
|
OpName %59 "qux"
|
|
OpName %62 "nested_mat_cx2"
|
|
OpName %66 "test_matrix_within_struct_accesses"
|
|
OpName %94 "idx"
|
|
OpName %96 "t"
|
|
OpName %140 "test_matrix_within_array_within_struct_accesses"
|
|
OpName %150 "idx"
|
|
OpName %151 "t"
|
|
OpName %197 "foo"
|
|
OpName %198 "read_from_private"
|
|
OpName %203 "a"
|
|
OpName %204 "test_arr_as_arg"
|
|
OpName %210 "p"
|
|
OpName %211 "assign_through_ptr_fn"
|
|
OpName %216 "foo"
|
|
OpName %217 "assign_array_through_ptr_fn"
|
|
OpName %224 "p"
|
|
OpName %225 "fetch_arg_ptr_member"
|
|
OpName %231 "p"
|
|
OpName %232 "assign_to_arg_ptr_member"
|
|
OpName %237 "p"
|
|
OpName %238 "fetch_arg_ptr_array_element"
|
|
OpName %244 "p"
|
|
OpName %245 "assign_to_arg_ptr_array_element"
|
|
OpName %250 "value"
|
|
OpName %251 "index_ptr"
|
|
OpName %253 "a"
|
|
OpName %262 "member_ptr"
|
|
OpName %266 "s"
|
|
OpName %272 "let_members_of_members"
|
|
OpName %284 "var_members_of_members"
|
|
OpName %285 "thing"
|
|
OpName %287 "inner"
|
|
OpName %290 "delishus"
|
|
OpName %306 "vi"
|
|
OpName %311 "foo_vert"
|
|
OpName %322 "foo"
|
|
OpName %323 "c2"
|
|
OpName %363 "foo_frag"
|
|
OpName %381 "assign_through_ptr"
|
|
OpName %386 "val"
|
|
OpName %387 "arr"
|
|
OpName %392 "assign_to_ptr_components"
|
|
OpName %393 "s1"
|
|
OpName %395 "a1"
|
|
OpMemberDecorate %7 0 Offset 0
|
|
OpMemberDecorate %7 1 Offset 16
|
|
OpMemberDecorate %7 2 Offset 28
|
|
OpMemberDecorate %8 0 Offset 0
|
|
OpDecorate %14 ArrayStride 16
|
|
OpDecorate %16 ArrayStride 4
|
|
OpDecorate %19 ArrayStride 8
|
|
OpDecorate %20 ArrayStride 8
|
|
OpMemberDecorate %21 0 Offset 0
|
|
OpMemberDecorate %21 0 ColMajor
|
|
OpMemberDecorate %21 0 MatrixStride 16
|
|
OpMemberDecorate %21 1 Offset 64
|
|
OpMemberDecorate %21 1 ColMajor
|
|
OpMemberDecorate %21 1 MatrixStride 8
|
|
OpMemberDecorate %21 2 Offset 96
|
|
OpMemberDecorate %21 3 Offset 100
|
|
OpMemberDecorate %21 4 Offset 144
|
|
OpMemberDecorate %21 5 Offset 160
|
|
OpDecorate %21 Block
|
|
OpMemberDecorate %23 0 Offset 0
|
|
OpMemberDecorate %23 0 ColMajor
|
|
OpMemberDecorate %23 0 MatrixStride 8
|
|
OpDecorate %26 ArrayStride 32
|
|
OpMemberDecorate %27 0 Offset 0
|
|
OpMemberDecorate %27 0 ColMajor
|
|
OpMemberDecorate %27 0 MatrixStride 8
|
|
OpDecorate %29 ArrayStride 4
|
|
OpDecorate %30 ArrayStride 40
|
|
OpDecorate %33 ArrayStride 4
|
|
OpDecorate %35 ArrayStride 16
|
|
OpMemberDecorate %37 0 Offset 0
|
|
OpDecorate %39 ArrayStride 4
|
|
OpDecorate %43 ArrayStride 1
|
|
OpMemberDecorate %45 0 Offset 0
|
|
OpMemberDecorate %46 0 Offset 0
|
|
OpMemberDecorate %47 0 Offset 0
|
|
OpMemberDecorate %47 1 Offset 4
|
|
OpDecorate %54 DescriptorSet 0
|
|
OpDecorate %54 Binding 0
|
|
OpDecorate %56 DescriptorSet 0
|
|
OpDecorate %56 Binding 1
|
|
OpDecorate %57 Block
|
|
OpMemberDecorate %57 0 Offset 0
|
|
OpDecorate %59 DescriptorSet 0
|
|
OpDecorate %59 Binding 2
|
|
OpDecorate %60 Block
|
|
OpMemberDecorate %60 0 Offset 0
|
|
OpDecorate %62 DescriptorSet 0
|
|
OpDecorate %62 Binding 3
|
|
OpDecorate %63 Block
|
|
OpMemberDecorate %63 0 Offset 0
|
|
OpDecorate %306 BuiltIn VertexIndex
|
|
OpDecorate %309 BuiltIn Position
|
|
OpDecorate %362 Location 0
|
|
%2 = OpTypeVoid
|
|
%4 = OpTypeInt 32 0
|
|
%5 = OpTypeVector %4 3
|
|
%6 = OpTypeInt 32 1
|
|
%7 = OpTypeStruct %4 %5 %6
|
|
%8 = OpTypeStruct %6
|
|
%9 = OpTypeFloat 32
|
|
%11 = OpTypeVector %9 3
|
|
%10 = OpTypeMatrix %11 4
|
|
%13 = OpTypeVector %9 2
|
|
%12 = OpTypeMatrix %13 2
|
|
%15 = OpConstant %4 2
|
|
%14 = OpTypeArray %12 %15
|
|
%17 = OpConstant %4 10
|
|
%16 = OpTypeArray %6 %17
|
|
%18 = OpTypeVector %4 2
|
|
%19 = OpTypeArray %18 %15
|
|
%20 = OpTypeRuntimeArray %8
|
|
%21 = OpTypeStruct %10 %14 %6 %16 %19 %20
|
|
%22 = OpTypeMatrix %13 3
|
|
%23 = OpTypeStruct %22
|
|
%24 = OpTypeVector %6 2
|
|
%25 = OpTypeMatrix %13 4
|
|
%26 = OpTypeArray %25 %15
|
|
%27 = OpTypeStruct %26
|
|
%28 = OpTypePointer Function %9
|
|
%29 = OpTypeArray %9 %17
|
|
%31 = OpConstant %4 5
|
|
%30 = OpTypeArray %29 %31
|
|
%32 = OpTypeVector %9 4
|
|
%33 = OpTypeArray %6 %31
|
|
%34 = OpTypePointer Function %4
|
|
%35 = OpTypeArray %32 %15
|
|
%36 = OpTypePointer Function %35
|
|
%37 = OpTypeStruct %4
|
|
%38 = OpTypePointer Function %37
|
|
%40 = OpConstant %4 4
|
|
%39 = OpTypeArray %4 %40
|
|
%41 = OpTypePointer Function %39
|
|
%42 = OpTypeBool
|
|
%44 = OpConstant %4 1
|
|
%43 = OpTypeArray %42 %44
|
|
%45 = OpTypeStruct %6
|
|
%46 = OpTypeStruct %6
|
|
%47 = OpTypeStruct %46 %4
|
|
%48 = OpConstant %4 0
|
|
%49 = OpConstantComposite %5 %48 %48 %48
|
|
%50 = OpConstant %6 0
|
|
%51 = OpConstantComposite %7 %48 %49 %50
|
|
%53 = OpTypePointer Private %7
|
|
%52 = OpVariable %53 Private %51
|
|
%55 = OpTypePointer StorageBuffer %21
|
|
%54 = OpVariable %55 StorageBuffer
|
|
%57 = OpTypeStruct %23
|
|
%58 = OpTypePointer Uniform %57
|
|
%56 = OpVariable %58 Uniform
|
|
%60 = OpTypeStruct %24
|
|
%61 = OpTypePointer StorageBuffer %60
|
|
%59 = OpVariable %61 StorageBuffer
|
|
%63 = OpTypeStruct %27
|
|
%64 = OpTypePointer Uniform %63
|
|
%62 = OpVariable %64 Uniform
|
|
%67 = OpTypeFunction %2
|
|
%68 = OpTypePointer Uniform %23
|
|
%70 = OpConstant %6 1
|
|
%71 = OpConstant %9 1.0
|
|
%72 = OpConstantComposite %13 %71 %71
|
|
%73 = OpConstant %9 2.0
|
|
%74 = OpConstantComposite %13 %73 %73
|
|
%75 = OpConstant %9 3.0
|
|
%76 = OpConstantComposite %13 %75 %75
|
|
%77 = OpConstantComposite %22 %72 %74 %76
|
|
%78 = OpConstantComposite %23 %77
|
|
%79 = OpConstant %9 6.0
|
|
%80 = OpConstantComposite %13 %79 %79
|
|
%81 = OpConstant %9 5.0
|
|
%82 = OpConstantComposite %13 %81 %81
|
|
%83 = OpConstant %9 4.0
|
|
%84 = OpConstantComposite %13 %83 %83
|
|
%85 = OpConstantComposite %22 %80 %82 %84
|
|
%86 = OpConstant %9 9.0
|
|
%87 = OpConstantComposite %13 %86 %86
|
|
%88 = OpConstant %9 90.0
|
|
%89 = OpConstantComposite %13 %88 %88
|
|
%90 = OpConstant %9 10.0
|
|
%91 = OpConstant %9 20.0
|
|
%92 = OpConstant %9 30.0
|
|
%93 = OpConstant %9 40.0
|
|
%95 = OpTypePointer Function %6
|
|
%97 = OpTypePointer Function %23
|
|
%101 = OpTypePointer Uniform %22
|
|
%104 = OpTypePointer Uniform %13
|
|
%110 = OpTypePointer Uniform %9
|
|
%125 = OpTypePointer Function %22
|
|
%127 = OpTypePointer Function %13
|
|
%141 = OpTypePointer Uniform %27
|
|
%143 = OpConstantNull %26
|
|
%144 = OpConstantComposite %27 %143
|
|
%145 = OpConstant %9 8.0
|
|
%146 = OpConstantComposite %13 %145 %145
|
|
%147 = OpConstant %9 7.0
|
|
%148 = OpConstantComposite %13 %147 %147
|
|
%149 = OpConstantComposite %25 %146 %148 %80 %82
|
|
%152 = OpTypePointer Function %27
|
|
%156 = OpTypePointer Uniform %26
|
|
%159 = OpTypePointer Uniform %25
|
|
%181 = OpTypePointer Function %26
|
|
%183 = OpTypePointer Function %25
|
|
%199 = OpTypeFunction %9 %28
|
|
%205 = OpTypeFunction %9 %30
|
|
%212 = OpTypeFunction %2 %34
|
|
%213 = OpConstant %4 42
|
|
%218 = OpTypeFunction %2 %36
|
|
%219 = OpConstantComposite %32 %71 %71 %71 %71
|
|
%220 = OpConstantComposite %32 %73 %73 %73 %73
|
|
%221 = OpConstantComposite %35 %219 %220
|
|
%226 = OpTypeFunction %4 %38
|
|
%233 = OpTypeFunction %2 %38
|
|
%239 = OpTypeFunction %4 %41
|
|
%246 = OpTypeFunction %2 %41
|
|
%252 = OpTypeFunction %42 %42
|
|
%254 = OpTypePointer Function %43
|
|
%255 = OpConstantNull %43
|
|
%258 = OpTypePointer Function %42
|
|
%263 = OpTypeFunction %6
|
|
%264 = OpConstant %6 42
|
|
%265 = OpConstantComposite %45 %264
|
|
%267 = OpTypePointer Function %45
|
|
%273 = OpConstantNull %47
|
|
%286 = OpTypePointer Function %47
|
|
%288 = OpTypePointer Function %46
|
|
%289 = OpConstantNull %46
|
|
%291 = OpConstantNull %6
|
|
%307 = OpTypePointer Input %4
|
|
%306 = OpVariable %307 Input
|
|
%310 = OpTypePointer Output %32
|
|
%309 = OpVariable %310 Output
|
|
%313 = OpTypePointer StorageBuffer %24
|
|
%316 = OpConstant %9 0.0
|
|
%317 = OpConstant %4 3
|
|
%318 = OpConstant %6 3
|
|
%319 = OpConstant %6 4
|
|
%320 = OpConstant %6 5
|
|
%321 = OpConstantNull %30
|
|
%324 = OpTypePointer Function %33
|
|
%325 = OpConstantNull %33
|
|
%330 = OpTypePointer StorageBuffer %10
|
|
%333 = OpTypePointer StorageBuffer %19
|
|
%336 = OpTypePointer StorageBuffer %11
|
|
%337 = OpTypePointer StorageBuffer %9
|
|
%340 = OpTypePointer StorageBuffer %20
|
|
%343 = OpTypePointer StorageBuffer %8
|
|
%344 = OpTypePointer StorageBuffer %6
|
|
%356 = OpTypeVector %6 4
|
|
%362 = OpVariable %310 Output
|
|
%365 = OpConstantComposite %11 %316 %316 %316
|
|
%366 = OpConstantComposite %11 %71 %71 %71
|
|
%367 = OpConstantComposite %11 %73 %73 %73
|
|
%368 = OpConstantComposite %11 %75 %75 %75
|
|
%369 = OpConstantComposite %10 %365 %366 %367 %368
|
|
%370 = OpConstantComposite %18 %48 %48
|
|
%371 = OpConstantComposite %18 %44 %44
|
|
%372 = OpConstantComposite %19 %370 %371
|
|
%373 = OpConstantNull %24
|
|
%374 = OpConstantComposite %32 %316 %316 %316 %316
|
|
%382 = OpConstant %4 33
|
|
%383 = OpConstantComposite %32 %79 %79 %79 %79
|
|
%384 = OpConstantComposite %32 %147 %147 %147 %147
|
|
%385 = OpConstantComposite %35 %383 %384
|
|
%394 = OpConstantNull %37
|
|
%396 = OpConstantNull %39
|
|
%66 = OpFunction %2 None %67
|
|
%65 = OpLabel
|
|
%94 = OpVariable %95 Function %70
|
|
%96 = OpVariable %97 Function %78
|
|
%69 = OpAccessChain %68 %56 %48
|
|
OpBranch %98
|
|
%98 = OpLabel
|
|
OpLine %3 40 5
|
|
%99 = OpLoad %6 %94
|
|
%100 = OpISub %6 %99 %70
|
|
OpLine %3 40 5
|
|
OpStore %94 %100
|
|
OpLine %3 43 14
|
|
%102 = OpAccessChain %101 %69 %48
|
|
%103 = OpLoad %22 %102
|
|
OpLine %3 44 14
|
|
OpLine %3 44 14
|
|
%105 = OpAccessChain %104 %69 %48 %48
|
|
%106 = OpLoad %13 %105
|
|
OpLine %3 45 14
|
|
%107 = OpLoad %6 %94
|
|
%108 = OpAccessChain %104 %69 %48 %107
|
|
%109 = OpLoad %13 %108
|
|
OpLine %3 46 14
|
|
OpLine %3 46 14
|
|
OpLine %3 46 14
|
|
%111 = OpAccessChain %110 %69 %48 %48 %44
|
|
%112 = OpLoad %9 %111
|
|
OpLine %3 47 14
|
|
OpLine %3 47 14
|
|
%113 = OpLoad %6 %94
|
|
%114 = OpAccessChain %110 %69 %48 %48 %113
|
|
%115 = OpLoad %9 %114
|
|
OpLine %3 48 14
|
|
%116 = OpLoad %6 %94
|
|
OpLine %3 48 14
|
|
%117 = OpAccessChain %110 %69 %48 %116 %44
|
|
%118 = OpLoad %9 %117
|
|
OpLine %3 49 14
|
|
%119 = OpLoad %6 %94
|
|
%120 = OpLoad %6 %94
|
|
%121 = OpAccessChain %110 %69 %48 %119 %120
|
|
%122 = OpLoad %9 %121
|
|
OpLine %3 51 29
|
|
OpLine %3 51 45
|
|
OpLine %3 51 13
|
|
OpLine %3 53 5
|
|
%123 = OpLoad %6 %94
|
|
%124 = OpIAdd %6 %123 %70
|
|
OpLine %3 53 5
|
|
OpStore %94 %124
|
|
OpLine %3 56 5
|
|
OpLine %3 56 23
|
|
OpLine %3 56 39
|
|
OpLine %3 56 11
|
|
OpLine %3 56 5
|
|
%126 = OpAccessChain %125 %96 %48
|
|
OpStore %126 %85
|
|
OpLine %3 57 5
|
|
OpLine %3 57 5
|
|
OpLine %3 57 14
|
|
OpLine %3 57 5
|
|
%128 = OpAccessChain %127 %96 %48 %48
|
|
OpStore %128 %87
|
|
OpLine %3 58 5
|
|
%129 = OpLoad %6 %94
|
|
OpLine %3 58 16
|
|
OpLine %3 58 5
|
|
%130 = OpAccessChain %127 %96 %48 %129
|
|
OpStore %130 %89
|
|
OpLine %3 59 5
|
|
OpLine %3 59 5
|
|
OpLine %3 59 5
|
|
OpLine %3 59 5
|
|
%131 = OpAccessChain %28 %96 %48 %48 %44
|
|
OpStore %131 %90
|
|
OpLine %3 60 5
|
|
OpLine %3 60 5
|
|
%132 = OpLoad %6 %94
|
|
OpLine %3 60 5
|
|
%133 = OpAccessChain %28 %96 %48 %48 %132
|
|
OpStore %133 %91
|
|
OpLine %3 61 5
|
|
%134 = OpLoad %6 %94
|
|
OpLine %3 61 5
|
|
OpLine %3 61 5
|
|
%135 = OpAccessChain %28 %96 %48 %134 %44
|
|
OpStore %135 %92
|
|
OpLine %3 62 5
|
|
%136 = OpLoad %6 %94
|
|
%137 = OpLoad %6 %94
|
|
OpLine %3 62 5
|
|
%138 = OpAccessChain %28 %96 %48 %136 %137
|
|
OpStore %138 %93
|
|
OpReturn
|
|
OpFunctionEnd
|
|
%140 = OpFunction %2 None %67
|
|
%139 = OpLabel
|
|
%150 = OpVariable %95 Function %70
|
|
%151 = OpVariable %152 Function %144
|
|
%142 = OpAccessChain %141 %62 %48
|
|
OpBranch %153
|
|
%153 = OpLabel
|
|
OpLine %3 75 5
|
|
%154 = OpLoad %6 %150
|
|
%155 = OpISub %6 %154 %70
|
|
OpLine %3 75 5
|
|
OpStore %150 %155
|
|
OpLine %3 78 14
|
|
%157 = OpAccessChain %156 %142 %48
|
|
%158 = OpLoad %26 %157
|
|
OpLine %3 79 14
|
|
OpLine %3 79 14
|
|
%160 = OpAccessChain %159 %142 %48 %48
|
|
%161 = OpLoad %25 %160
|
|
OpLine %3 80 14
|
|
OpLine %3 80 14
|
|
OpLine %3 80 14
|
|
%162 = OpAccessChain %104 %142 %48 %48 %48
|
|
%163 = OpLoad %13 %162
|
|
OpLine %3 81 14
|
|
OpLine %3 81 14
|
|
%164 = OpLoad %6 %150
|
|
%165 = OpAccessChain %104 %142 %48 %48 %164
|
|
%166 = OpLoad %13 %165
|
|
OpLine %3 82 14
|
|
OpLine %3 82 14
|
|
OpLine %3 82 14
|
|
OpLine %3 82 14
|
|
%167 = OpAccessChain %110 %142 %48 %48 %48 %44
|
|
%168 = OpLoad %9 %167
|
|
OpLine %3 83 14
|
|
OpLine %3 83 14
|
|
OpLine %3 83 14
|
|
%169 = OpLoad %6 %150
|
|
%170 = OpAccessChain %110 %142 %48 %48 %48 %169
|
|
%171 = OpLoad %9 %170
|
|
OpLine %3 84 14
|
|
OpLine %3 84 14
|
|
%172 = OpLoad %6 %150
|
|
OpLine %3 84 14
|
|
%173 = OpAccessChain %110 %142 %48 %48 %172 %44
|
|
%174 = OpLoad %9 %173
|
|
OpLine %3 85 14
|
|
OpLine %3 85 14
|
|
%175 = OpLoad %6 %150
|
|
%176 = OpLoad %6 %150
|
|
%177 = OpAccessChain %110 %142 %48 %48 %175 %176
|
|
%178 = OpLoad %9 %177
|
|
OpLine %3 87 13
|
|
OpLine %3 89 5
|
|
%179 = OpLoad %6 %150
|
|
%180 = OpIAdd %6 %179 %70
|
|
OpLine %3 89 5
|
|
OpStore %150 %180
|
|
OpLine %3 92 5
|
|
OpLine %3 92 5
|
|
%182 = OpAccessChain %181 %151 %48
|
|
OpStore %182 %143
|
|
OpLine %3 93 5
|
|
OpLine %3 93 5
|
|
OpLine %3 93 27
|
|
OpLine %3 93 43
|
|
OpLine %3 93 59
|
|
OpLine %3 93 15
|
|
OpLine %3 93 5
|
|
%184 = OpAccessChain %183 %151 %48 %48
|
|
OpStore %184 %149
|
|
OpLine %3 94 5
|
|
OpLine %3 94 5
|
|
OpLine %3 94 5
|
|
OpLine %3 94 18
|
|
OpLine %3 94 5
|
|
%185 = OpAccessChain %127 %151 %48 %48 %48
|
|
OpStore %185 %87
|
|
OpLine %3 95 5
|
|
OpLine %3 95 5
|
|
%186 = OpLoad %6 %150
|
|
OpLine %3 95 20
|
|
OpLine %3 95 5
|
|
%187 = OpAccessChain %127 %151 %48 %48 %186
|
|
OpStore %187 %89
|
|
OpLine %3 96 5
|
|
OpLine %3 96 5
|
|
OpLine %3 96 5
|
|
OpLine %3 96 5
|
|
OpLine %3 96 5
|
|
%188 = OpAccessChain %28 %151 %48 %48 %48 %44
|
|
OpStore %188 %90
|
|
OpLine %3 97 5
|
|
OpLine %3 97 5
|
|
OpLine %3 97 5
|
|
%189 = OpLoad %6 %150
|
|
OpLine %3 97 5
|
|
%190 = OpAccessChain %28 %151 %48 %48 %48 %189
|
|
OpStore %190 %91
|
|
OpLine %3 98 5
|
|
OpLine %3 98 5
|
|
%191 = OpLoad %6 %150
|
|
OpLine %3 98 5
|
|
OpLine %3 98 5
|
|
%192 = OpAccessChain %28 %151 %48 %48 %191 %44
|
|
OpStore %192 %92
|
|
OpLine %3 99 5
|
|
OpLine %3 99 5
|
|
%193 = OpLoad %6 %150
|
|
%194 = OpLoad %6 %150
|
|
OpLine %3 99 5
|
|
%195 = OpAccessChain %28 %151 %48 %48 %193 %194
|
|
OpStore %195 %93
|
|
OpReturn
|
|
OpFunctionEnd
|
|
%198 = OpFunction %9 None %199
|
|
%197 = OpFunctionParameter %28
|
|
%196 = OpLabel
|
|
OpBranch %200
|
|
%200 = OpLabel
|
|
OpLine %3 102 22
|
|
%201 = OpLoad %9 %197
|
|
OpReturnValue %201
|
|
OpFunctionEnd
|
|
%204 = OpFunction %9 None %205
|
|
%203 = OpFunctionParameter %30
|
|
%202 = OpLabel
|
|
OpBranch %206
|
|
%206 = OpLabel
|
|
OpLine %3 107 12
|
|
%207 = OpCompositeExtract %29 %203 4
|
|
OpLine %3 107 12
|
|
%208 = OpCompositeExtract %9 %207 9
|
|
OpReturnValue %208
|
|
OpFunctionEnd
|
|
%211 = OpFunction %2 None %212
|
|
%210 = OpFunctionParameter %34
|
|
%209 = OpLabel
|
|
OpBranch %214
|
|
%214 = OpLabel
|
|
OpLine %3 155 5
|
|
OpStore %210 %213
|
|
OpReturn
|
|
OpFunctionEnd
|
|
%217 = OpFunction %2 None %218
|
|
%216 = OpFunctionParameter %36
|
|
%215 = OpLabel
|
|
OpBranch %222
|
|
%222 = OpLabel
|
|
OpLine %3 159 32
|
|
OpLine %3 159 43
|
|
OpLine %3 159 32
|
|
OpLine %3 159 12
|
|
OpLine %3 159 5
|
|
OpStore %216 %221
|
|
OpReturn
|
|
OpFunctionEnd
|
|
%225 = OpFunction %4 None %226
|
|
%224 = OpFunctionParameter %38
|
|
%223 = OpLabel
|
|
OpBranch %227
|
|
%227 = OpLabel
|
|
OpLine %3 176 10
|
|
%228 = OpAccessChain %34 %224 %48
|
|
%229 = OpLoad %4 %228
|
|
OpReturnValue %229
|
|
OpFunctionEnd
|
|
%232 = OpFunction %2 None %233
|
|
%231 = OpFunctionParameter %38
|
|
%230 = OpLabel
|
|
OpBranch %234
|
|
%234 = OpLabel
|
|
OpLine %3 180 3
|
|
OpLine %3 180 3
|
|
%235 = OpAccessChain %34 %231 %48
|
|
OpStore %235 %17
|
|
OpReturn
|
|
OpFunctionEnd
|
|
%238 = OpFunction %4 None %239
|
|
%237 = OpFunctionParameter %41
|
|
%236 = OpLabel
|
|
OpBranch %240
|
|
%240 = OpLabel
|
|
OpLine %3 184 10
|
|
%241 = OpAccessChain %34 %237 %44
|
|
%242 = OpLoad %4 %241
|
|
OpReturnValue %242
|
|
OpFunctionEnd
|
|
%245 = OpFunction %2 None %246
|
|
%244 = OpFunctionParameter %41
|
|
%243 = OpLabel
|
|
OpBranch %247
|
|
%247 = OpLabel
|
|
OpLine %3 188 3
|
|
OpLine %3 188 3
|
|
%248 = OpAccessChain %34 %244 %44
|
|
OpStore %248 %17
|
|
OpReturn
|
|
OpFunctionEnd
|
|
%251 = OpFunction %42 None %252
|
|
%250 = OpFunctionParameter %42
|
|
%249 = OpLabel
|
|
%253 = OpVariable %254 Function %255
|
|
OpBranch %256
|
|
%256 = OpLabel
|
|
OpLine %3 203 13
|
|
%257 = OpCompositeConstruct %43 %250
|
|
OpLine %3 203 5
|
|
OpStore %253 %257
|
|
OpLine %3 205 12
|
|
%259 = OpAccessChain %258 %253 %48
|
|
%260 = OpLoad %42 %259
|
|
OpReturnValue %260
|
|
OpFunctionEnd
|
|
%262 = OpFunction %6 None %263
|
|
%261 = OpLabel
|
|
%266 = OpVariable %267 Function %265
|
|
OpBranch %268
|
|
%268 = OpLabel
|
|
OpLine %3 211 16
|
|
OpLine %3 213 12
|
|
%269 = OpAccessChain %95 %266 %48
|
|
%270 = OpLoad %6 %269
|
|
OpReturnValue %270
|
|
OpFunctionEnd
|
|
%272 = OpFunction %6 None %263
|
|
%271 = OpLabel
|
|
OpBranch %274
|
|
%274 = OpLabel
|
|
OpLine %3 223 17
|
|
%275 = OpCompositeExtract %46 %273 0
|
|
OpLine %3 224 20
|
|
%276 = OpCompositeExtract %6 %275 0
|
|
OpLine %3 226 9
|
|
%277 = OpCompositeExtract %4 %273 1
|
|
%278 = OpBitcast %4 %276
|
|
%279 = OpINotEqual %42 %277 %278
|
|
OpLine %3 226 5
|
|
OpSelectionMerge %280 None
|
|
OpBranchConditional %279 %280 %280
|
|
%280 = OpLabel
|
|
OpLine %3 230 12
|
|
%281 = OpCompositeExtract %46 %273 0
|
|
%282 = OpCompositeExtract %6 %281 0
|
|
OpReturnValue %282
|
|
OpFunctionEnd
|
|
%284 = OpFunction %6 None %263
|
|
%283 = OpLabel
|
|
%285 = OpVariable %286 Function %273
|
|
%287 = OpVariable %288 Function %289
|
|
%290 = OpVariable %95 Function %291
|
|
OpBranch %292
|
|
%292 = OpLabel
|
|
OpLine %3 236 17
|
|
%293 = OpAccessChain %288 %285 %48
|
|
%294 = OpLoad %46 %293
|
|
OpLine %3 236 5
|
|
OpStore %287 %294
|
|
OpLine %3 237 20
|
|
%295 = OpAccessChain %95 %287 %48
|
|
%296 = OpLoad %6 %295
|
|
OpLine %3 237 5
|
|
OpStore %290 %296
|
|
OpLine %3 239 9
|
|
%297 = OpAccessChain %34 %285 %44
|
|
%298 = OpLoad %4 %297
|
|
%299 = OpLoad %6 %290
|
|
%300 = OpBitcast %4 %299
|
|
%301 = OpINotEqual %42 %298 %300
|
|
OpLine %3 239 5
|
|
OpSelectionMerge %302 None
|
|
OpBranchConditional %301 %302 %302
|
|
%302 = OpLabel
|
|
OpLine %3 243 12
|
|
%303 = OpAccessChain %95 %285 %48 %48
|
|
%304 = OpLoad %6 %303
|
|
OpReturnValue %304
|
|
OpFunctionEnd
|
|
%311 = OpFunction %2 None %67
|
|
%305 = OpLabel
|
|
%322 = OpVariable %28 Function %316
|
|
%323 = OpVariable %324 Function %325
|
|
%308 = OpLoad %4 %306
|
|
%312 = OpAccessChain %68 %56 %48
|
|
%314 = OpAccessChain %313 %59 %48
|
|
%315 = OpAccessChain %141 %62 %48
|
|
OpBranch %326
|
|
%326 = OpLabel
|
|
OpLine %3 1 1
|
|
%327 = OpLoad %9 %322
|
|
OpLine %3 115 5
|
|
OpStore %322 %71
|
|
OpLine %3 117 2
|
|
%328 = OpFunctionCall %2 %66
|
|
OpLine %3 118 2
|
|
%329 = OpFunctionCall %2 %140
|
|
OpLine %3 121 16
|
|
%331 = OpAccessChain %330 %54 %48
|
|
%332 = OpLoad %10 %331
|
|
OpLine %3 122 12
|
|
%334 = OpAccessChain %333 %54 %40
|
|
%335 = OpLoad %19 %334
|
|
OpLine %3 124 10
|
|
%338 = OpAccessChain %337 %54 %48 %317 %48
|
|
%339 = OpLoad %9 %338
|
|
OpLine %3 125 10
|
|
OpLine %3 125 19
|
|
%341 = OpArrayLength %4 %54 5
|
|
OpLine %3 125 10
|
|
%342 = OpISub %4 %341 %15
|
|
%345 = OpAccessChain %344 %54 %31 %342 %48
|
|
%346 = OpLoad %6 %345
|
|
OpLine %3 126 10
|
|
%347 = OpLoad %24 %314
|
|
OpLine %3 129 53
|
|
OpLine %3 129 53
|
|
OpLine %3 130 18
|
|
%348 = OpFunctionCall %9 %198 %322
|
|
OpLine %3 133 28
|
|
%349 = OpConvertFToS %6 %339
|
|
OpLine %3 133 11
|
|
%350 = OpCompositeConstruct %33 %346 %349 %318 %319 %320
|
|
OpLine %3 133 2
|
|
OpStore %323 %350
|
|
OpLine %3 134 2
|
|
%351 = OpIAdd %4 %308 %44
|
|
OpLine %3 134 2
|
|
%352 = OpAccessChain %95 %323 %351
|
|
OpStore %352 %264
|
|
OpLine %3 135 14
|
|
%353 = OpAccessChain %95 %323 %308
|
|
%354 = OpLoad %6 %353
|
|
OpLine %3 137 2
|
|
%355 = OpFunctionCall %9 %204 %321
|
|
OpLine %3 139 19
|
|
%357 = OpCompositeConstruct %356 %354 %354 %354 %354
|
|
%358 = OpConvertSToF %32 %357
|
|
%359 = OpMatrixTimesVector %11 %332 %358
|
|
OpLine %3 139 9
|
|
%360 = OpCompositeConstruct %32 %359 %73
|
|
OpStore %309 %360
|
|
OpReturn
|
|
OpFunctionEnd
|
|
%363 = OpFunction %2 None %67
|
|
%361 = OpLabel
|
|
%364 = OpAccessChain %313 %59 %48
|
|
OpBranch %375
|
|
%375 = OpLabel
|
|
OpLine %3 145 2
|
|
OpLine %3 145 2
|
|
OpLine %3 145 2
|
|
%376 = OpAccessChain %337 %54 %48 %44 %15
|
|
OpStore %376 %71
|
|
OpLine %3 146 2
|
|
OpLine %3 146 28
|
|
OpLine %3 146 44
|
|
OpLine %3 146 60
|
|
OpLine %3 146 16
|
|
OpLine %3 146 2
|
|
%377 = OpAccessChain %330 %54 %48
|
|
OpStore %377 %369
|
|
OpLine %3 147 2
|
|
OpLine %3 147 32
|
|
OpLine %3 147 12
|
|
OpLine %3 147 2
|
|
%378 = OpAccessChain %333 %54 %40
|
|
OpStore %378 %372
|
|
OpLine %3 148 2
|
|
OpLine %3 148 2
|
|
OpLine %3 148 2
|
|
%379 = OpAccessChain %344 %54 %31 %44 %48
|
|
OpStore %379 %70
|
|
OpLine %3 149 2
|
|
OpStore %364 %373
|
|
OpLine %3 151 9
|
|
OpStore %362 %374
|
|
OpReturn
|
|
OpFunctionEnd
|
|
%381 = OpFunction %2 None %67
|
|
%380 = OpLabel
|
|
%386 = OpVariable %34 Function %382
|
|
%387 = OpVariable %36 Function %385
|
|
OpBranch %388
|
|
%388 = OpLabel
|
|
OpLine %3 165 5
|
|
%389 = OpFunctionCall %2 %211 %386
|
|
OpLine %3 167 32
|
|
OpLine %3 167 43
|
|
OpLine %3 167 32
|
|
OpLine %3 167 12
|
|
OpLine %3 168 5
|
|
%390 = OpFunctionCall %2 %217 %387
|
|
OpReturn
|
|
OpFunctionEnd
|
|
%392 = OpFunction %2 None %67
|
|
%391 = OpLabel
|
|
%393 = OpVariable %38 Function %394
|
|
%395 = OpVariable %41 Function %396
|
|
OpBranch %397
|
|
%397 = OpLabel
|
|
OpLine %3 194 4
|
|
%398 = OpFunctionCall %2 %232 %393
|
|
OpLine %3 195 4
|
|
%399 = OpFunctionCall %4 %225 %393
|
|
OpLine %3 198 4
|
|
%400 = OpFunctionCall %2 %245 %395
|
|
OpLine %3 199 4
|
|
%401 = OpFunctionCall %4 %238 %395
|
|
OpReturn
|
|
OpFunctionEnd |