xref: /aosp_15_r20/external/skia/tests/sksl/compute/MatrixMultiply.asm.comp (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1               OpCapability Shader
2          %1 = OpExtInstImport "GLSL.std.450"
3               OpMemoryModel Logical GLSL450
4               OpEntryPoint GLCompute %main "main" %sk_GlobalInvocationID
5               OpExecutionMode %main LocalSize 16 16 1
6               OpName %sizeBuffer "sizeBuffer"
7               OpMemberName %sizeBuffer 0 "sizes"
8               OpName %inputs1 "inputs1"
9               OpMemberName %inputs1 0 "data1"
10               OpName %inputs2 "inputs2"
11               OpMemberName %inputs2 0 "data2"
12               OpName %result "result"
13               OpMemberName %result 0 "resultData"
14               OpName %sk_GlobalInvocationID "sk_GlobalInvocationID"
15               OpName %main "main"
16               OpName %resultCell "resultCell"
17               OpName %result_0 "result"
18               OpName %i "i"
19               OpName %a "a"
20               OpName %b "b"
21               OpName %index "index"
22               OpDecorate %_runtimearr_v2int ArrayStride 8
23               OpMemberDecorate %sizeBuffer 0 Offset 0
24               OpDecorate %sizeBuffer BufferBlock
25               OpDecorate %3 Binding 0
26               OpDecorate %3 DescriptorSet 0
27               OpDecorate %_runtimearr_float ArrayStride 4
28               OpMemberDecorate %inputs1 0 Offset 0
29               OpDecorate %inputs1 BufferBlock
30               OpDecorate %9 Binding 1
31               OpDecorate %9 DescriptorSet 0
32               OpMemberDecorate %inputs2 0 Offset 0
33               OpDecorate %inputs2 BufferBlock
34               OpDecorate %14 Binding 2
35               OpDecorate %14 DescriptorSet 0
36               OpMemberDecorate %result 0 Offset 0
37               OpDecorate %result BufferBlock
38               OpDecorate %17 Binding 3
39               OpDecorate %17 DescriptorSet 0
40               OpDecorate %sk_GlobalInvocationID BuiltIn GlobalInvocationId
41        %int = OpTypeInt 32 1
42      %v2int = OpTypeVector %int 2
43%_runtimearr_v2int = OpTypeRuntimeArray %v2int
44 %sizeBuffer = OpTypeStruct %_runtimearr_v2int
45%_ptr_Uniform_sizeBuffer = OpTypePointer Uniform %sizeBuffer
46          %3 = OpVariable %_ptr_Uniform_sizeBuffer Uniform
47      %float = OpTypeFloat 32
48%_runtimearr_float = OpTypeRuntimeArray %float
49    %inputs1 = OpTypeStruct %_runtimearr_float
50%_ptr_Uniform_inputs1 = OpTypePointer Uniform %inputs1
51          %9 = OpVariable %_ptr_Uniform_inputs1 Uniform
52    %inputs2 = OpTypeStruct %_runtimearr_float
53%_ptr_Uniform_inputs2 = OpTypePointer Uniform %inputs2
54         %14 = OpVariable %_ptr_Uniform_inputs2 Uniform
55     %result = OpTypeStruct %_runtimearr_float
56%_ptr_Uniform_result = OpTypePointer Uniform %result
57         %17 = OpVariable %_ptr_Uniform_result Uniform
58       %uint = OpTypeInt 32 0
59     %v3uint = OpTypeVector %uint 3
60%_ptr_Input_v3uint = OpTypePointer Input %v3uint
61%sk_GlobalInvocationID = OpVariable %_ptr_Input_v3uint Input
62       %void = OpTypeVoid
63         %25 = OpTypeFunction %void
64      %int_0 = OpConstant %int 0
65%_ptr_Uniform_v2int = OpTypePointer Uniform %v2int
66      %int_1 = OpConstant %int 1
67      %int_2 = OpConstant %int 2
68%_ptr_Function_v2int = OpTypePointer Function %v2int
69%_ptr_Function_float = OpTypePointer Function %float
70    %float_0 = OpConstant %float 0
71%_ptr_Function_int = OpTypePointer Function %int
72       %bool = OpTypeBool
73%_ptr_Uniform_float = OpTypePointer Uniform %float
74       %main = OpFunction %void None %25
75         %26 = OpLabel
76 %resultCell = OpVariable %_ptr_Function_v2int Function
77   %result_0 = OpVariable %_ptr_Function_float Function
78          %i = OpVariable %_ptr_Function_int Function
79          %a = OpVariable %_ptr_Function_int Function
80          %b = OpVariable %_ptr_Function_int Function
81      %index = OpVariable %_ptr_Function_int Function
82         %28 = OpAccessChain %_ptr_Uniform_v2int %3 %int_0 %int_0
83         %30 = OpLoad %v2int %28
84         %31 = OpCompositeExtract %int %30 0
85         %33 = OpAccessChain %_ptr_Uniform_v2int %3 %int_0 %int_1
86         %34 = OpLoad %v2int %33
87         %35 = OpCompositeExtract %int %34 1
88         %36 = OpCompositeConstruct %v2int %31 %35
89         %38 = OpAccessChain %_ptr_Uniform_v2int %3 %int_0 %int_2
90               OpStore %38 %36
91         %41 = OpLoad %v3uint %sk_GlobalInvocationID
92         %42 = OpCompositeExtract %uint %41 0
93         %43 = OpBitcast %int %42
94         %44 = OpLoad %v3uint %sk_GlobalInvocationID
95         %45 = OpCompositeExtract %uint %44 1
96         %46 = OpBitcast %int %45
97         %47 = OpCompositeConstruct %v2int %43 %46
98               OpStore %resultCell %47
99               OpStore %result_0 %float_0
100               OpStore %i %int_0
101               OpBranch %53
102         %53 = OpLabel
103               OpLoopMerge %57 %56 None
104               OpBranch %54
105         %54 = OpLabel
106         %58 = OpLoad %int %i
107         %59 = OpAccessChain %_ptr_Uniform_v2int %3 %int_0 %int_0
108         %60 = OpLoad %v2int %59
109         %61 = OpCompositeExtract %int %60 1
110         %62 = OpSLessThan %bool %58 %61
111               OpBranchConditional %62 %55 %57
112         %55 = OpLabel
113         %65 = OpLoad %int %i
114         %66 = OpLoad %v2int %resultCell
115         %67 = OpCompositeExtract %int %66 0
116         %68 = OpAccessChain %_ptr_Uniform_v2int %3 %int_0 %int_0
117         %69 = OpLoad %v2int %68
118         %70 = OpCompositeExtract %int %69 1
119         %71 = OpIMul %int %67 %70
120         %72 = OpIAdd %int %65 %71
121               OpStore %a %72
122         %74 = OpLoad %v2int %resultCell
123         %75 = OpCompositeExtract %int %74 1
124         %76 = OpLoad %int %i
125         %77 = OpAccessChain %_ptr_Uniform_v2int %3 %int_0 %int_1
126         %78 = OpLoad %v2int %77
127         %79 = OpCompositeExtract %int %78 1
128         %80 = OpIMul %int %76 %79
129         %81 = OpIAdd %int %75 %80
130               OpStore %b %81
131         %82 = OpLoad %float %result_0
132         %83 = OpAccessChain %_ptr_Uniform_float %9 %int_0 %72
133         %85 = OpLoad %float %83
134         %86 = OpAccessChain %_ptr_Uniform_float %14 %int_0 %81
135         %87 = OpLoad %float %86
136         %88 = OpFMul %float %85 %87
137         %89 = OpFAdd %float %82 %88
138               OpStore %result_0 %89
139               OpBranch %56
140         %56 = OpLabel
141         %90 = OpLoad %int %i
142         %91 = OpIAdd %int %90 %int_1
143               OpStore %i %91
144               OpBranch %53
145         %57 = OpLabel
146         %93 = OpLoad %v2int %resultCell
147         %94 = OpCompositeExtract %int %93 1
148         %95 = OpLoad %v2int %resultCell
149         %96 = OpCompositeExtract %int %95 0
150         %97 = OpAccessChain %_ptr_Uniform_v2int %3 %int_0 %int_1
151         %98 = OpLoad %v2int %97
152         %99 = OpCompositeExtract %int %98 1
153        %100 = OpIMul %int %96 %99
154        %101 = OpIAdd %int %94 %100
155               OpStore %index %101
156        %102 = OpLoad %float %result_0
157        %103 = OpAccessChain %_ptr_Uniform_float %17 %int_0 %101
158               OpStore %103 %102
159               OpReturn
160               OpFunctionEnd
161