1*c8dee2aaSAndroid Build Coastguard Worker /*
2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2022 Google Inc.
3*c8dee2aaSAndroid Build Coastguard Worker *
4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be
5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file.
6*c8dee2aaSAndroid Build Coastguard Worker */
7*c8dee2aaSAndroid Build Coastguard Worker
8*c8dee2aaSAndroid Build Coastguard Worker #include "src/core/SkSLTypeShared.h"
9*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/graphite/Uniform.h"
10*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/graphite/UniformManager.h"
11*c8dee2aaSAndroid Build Coastguard Worker #include "tests/Test.h"
12*c8dee2aaSAndroid Build Coastguard Worker
13*c8dee2aaSAndroid Build Coastguard Worker using namespace skgpu::graphite;
14*c8dee2aaSAndroid Build Coastguard Worker
15*c8dee2aaSAndroid Build Coastguard Worker namespace {
16*c8dee2aaSAndroid Build Coastguard Worker
17*c8dee2aaSAndroid Build Coastguard Worker // Used to test the exact alignment and size of an individual type. Returns the alignment and size
18*c8dee2aaSAndroid Build Coastguard Worker // as a pair.
19*c8dee2aaSAndroid Build Coastguard Worker struct AlignmentAndSize {
20*c8dee2aaSAndroid Build Coastguard Worker int alignment;
21*c8dee2aaSAndroid Build Coastguard Worker int size;
22*c8dee2aaSAndroid Build Coastguard Worker };
calculate_alignment_and_size(Layout layout,SkSLType type,int arrayCount=Uniform::kNonArray)23*c8dee2aaSAndroid Build Coastguard Worker static AlignmentAndSize calculate_alignment_and_size(Layout layout,
24*c8dee2aaSAndroid Build Coastguard Worker SkSLType type,
25*c8dee2aaSAndroid Build Coastguard Worker int arrayCount = Uniform::kNonArray) {
26*c8dee2aaSAndroid Build Coastguard Worker // Set the start offset at 1 to force alignment.
27*c8dee2aaSAndroid Build Coastguard Worker constexpr int kStart = 1;
28*c8dee2aaSAndroid Build Coastguard Worker auto calc = UniformOffsetCalculator::ForTopLevel(layout, kStart);
29*c8dee2aaSAndroid Build Coastguard Worker int alignment = calc.advanceOffset(type, arrayCount);
30*c8dee2aaSAndroid Build Coastguard Worker return {alignment, calc.size() - alignment};
31*c8dee2aaSAndroid Build Coastguard Worker }
32*c8dee2aaSAndroid Build Coastguard Worker
calculate_struct_alignment_and_size(Layout layout,std::initializer_list<SkSLType> fields,int arrayCount=Uniform::kNonArray)33*c8dee2aaSAndroid Build Coastguard Worker static AlignmentAndSize calculate_struct_alignment_and_size(
34*c8dee2aaSAndroid Build Coastguard Worker Layout layout,
35*c8dee2aaSAndroid Build Coastguard Worker std::initializer_list<SkSLType> fields,
36*c8dee2aaSAndroid Build Coastguard Worker int arrayCount = Uniform::kNonArray) {
37*c8dee2aaSAndroid Build Coastguard Worker // Set the start offset at 1 to force alignment.
38*c8dee2aaSAndroid Build Coastguard Worker constexpr int kStart = 1;
39*c8dee2aaSAndroid Build Coastguard Worker auto outer = UniformOffsetCalculator::ForTopLevel(layout, kStart);
40*c8dee2aaSAndroid Build Coastguard Worker
41*c8dee2aaSAndroid Build Coastguard Worker auto substruct = UniformOffsetCalculator::ForStruct(layout);
42*c8dee2aaSAndroid Build Coastguard Worker for (SkSLType f : fields) {
43*c8dee2aaSAndroid Build Coastguard Worker substruct.advanceOffset(f);
44*c8dee2aaSAndroid Build Coastguard Worker }
45*c8dee2aaSAndroid Build Coastguard Worker
46*c8dee2aaSAndroid Build Coastguard Worker int alignment = outer.advanceStruct(substruct, arrayCount);
47*c8dee2aaSAndroid Build Coastguard Worker SkASSERT(alignment == substruct.requiredAlignment());
48*c8dee2aaSAndroid Build Coastguard Worker return {alignment, outer.size() - alignment};
49*c8dee2aaSAndroid Build Coastguard Worker }
50*c8dee2aaSAndroid Build Coastguard Worker
51*c8dee2aaSAndroid Build Coastguard Worker #define EXPECT(type, expectedAlignment, expectedSize) \
52*c8dee2aaSAndroid Build Coastguard Worker do { \
53*c8dee2aaSAndroid Build Coastguard Worker auto [alignment, size] = calculate_alignment_and_size(kLayout, type); \
54*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(r, \
55*c8dee2aaSAndroid Build Coastguard Worker alignment == expectedAlignment, \
56*c8dee2aaSAndroid Build Coastguard Worker "incorrect alignment for type '%s': expected %d, found %d", \
57*c8dee2aaSAndroid Build Coastguard Worker SkSLTypeString(type), \
58*c8dee2aaSAndroid Build Coastguard Worker expectedAlignment, \
59*c8dee2aaSAndroid Build Coastguard Worker alignment); \
60*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(r, \
61*c8dee2aaSAndroid Build Coastguard Worker size == expectedSize, \
62*c8dee2aaSAndroid Build Coastguard Worker "incorrect size for type '%s': expected %d, found %d", \
63*c8dee2aaSAndroid Build Coastguard Worker SkSLTypeString(type), \
64*c8dee2aaSAndroid Build Coastguard Worker expectedSize, \
65*c8dee2aaSAndroid Build Coastguard Worker size); \
66*c8dee2aaSAndroid Build Coastguard Worker } while (0)
67*c8dee2aaSAndroid Build Coastguard Worker
68*c8dee2aaSAndroid Build Coastguard Worker #define EXPECT_ARRAY(type, expectedAlignment, expectedStride, expectedSize) \
69*c8dee2aaSAndroid Build Coastguard Worker do { \
70*c8dee2aaSAndroid Build Coastguard Worker auto [alignment, size] = calculate_alignment_and_size(kLayout, type, kCount); \
71*c8dee2aaSAndroid Build Coastguard Worker int stride = size / kCount; \
72*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(r, \
73*c8dee2aaSAndroid Build Coastguard Worker alignment == expectedAlignment, \
74*c8dee2aaSAndroid Build Coastguard Worker "incorrect alignment for type '%s': expected %d, found %d", \
75*c8dee2aaSAndroid Build Coastguard Worker SkSLTypeString(type), \
76*c8dee2aaSAndroid Build Coastguard Worker expectedAlignment, \
77*c8dee2aaSAndroid Build Coastguard Worker alignment); \
78*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(r, \
79*c8dee2aaSAndroid Build Coastguard Worker size == expectedSize, \
80*c8dee2aaSAndroid Build Coastguard Worker "incorrect size for type '%s': expected %d, found %d", \
81*c8dee2aaSAndroid Build Coastguard Worker SkSLTypeString(type), \
82*c8dee2aaSAndroid Build Coastguard Worker expectedSize, \
83*c8dee2aaSAndroid Build Coastguard Worker size); \
84*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(r, \
85*c8dee2aaSAndroid Build Coastguard Worker stride == expectedStride, \
86*c8dee2aaSAndroid Build Coastguard Worker "incorrect stride for type '%s': expected %d, found %d", \
87*c8dee2aaSAndroid Build Coastguard Worker SkSLTypeString(type), \
88*c8dee2aaSAndroid Build Coastguard Worker expectedStride, \
89*c8dee2aaSAndroid Build Coastguard Worker stride); \
90*c8dee2aaSAndroid Build Coastguard Worker } while (0)
91*c8dee2aaSAndroid Build Coastguard Worker
92*c8dee2aaSAndroid Build Coastguard Worker #define EXPECT_STRUCT(expectedAlignment, expectedSize, ...) \
93*c8dee2aaSAndroid Build Coastguard Worker do { \
94*c8dee2aaSAndroid Build Coastguard Worker auto [alignment, size] = calculate_struct_alignment_and_size( \
95*c8dee2aaSAndroid Build Coastguard Worker kLayout, {__VA_ARGS__}); \
96*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(r, \
97*c8dee2aaSAndroid Build Coastguard Worker alignment == expectedAlignment, \
98*c8dee2aaSAndroid Build Coastguard Worker "incorrect alignment for struct: expected %d, found %d", \
99*c8dee2aaSAndroid Build Coastguard Worker expectedAlignment, \
100*c8dee2aaSAndroid Build Coastguard Worker alignment); \
101*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(r, \
102*c8dee2aaSAndroid Build Coastguard Worker size == expectedSize, \
103*c8dee2aaSAndroid Build Coastguard Worker "incorrect size for struct: expected %d, found %d", \
104*c8dee2aaSAndroid Build Coastguard Worker expectedSize, \
105*c8dee2aaSAndroid Build Coastguard Worker size); \
106*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(r, \
107*c8dee2aaSAndroid Build Coastguard Worker size % alignment == 0, \
108*c8dee2aaSAndroid Build Coastguard Worker "struct size must be a multiple of alignment"); \
109*c8dee2aaSAndroid Build Coastguard Worker } while (0)
110*c8dee2aaSAndroid Build Coastguard Worker
111*c8dee2aaSAndroid Build Coastguard Worker #define EXPECT_STRUCT_ARRAY(expectedAlignment, expectedStride, ...) \
112*c8dee2aaSAndroid Build Coastguard Worker do { \
113*c8dee2aaSAndroid Build Coastguard Worker auto [alignment, size] = calculate_struct_alignment_and_size( \
114*c8dee2aaSAndroid Build Coastguard Worker kLayout, {__VA_ARGS__}, kCount); \
115*c8dee2aaSAndroid Build Coastguard Worker int stride = size / kCount; \
116*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(r, \
117*c8dee2aaSAndroid Build Coastguard Worker alignment == expectedAlignment, \
118*c8dee2aaSAndroid Build Coastguard Worker "incorrect alignment for struct: expected %d, found %d", \
119*c8dee2aaSAndroid Build Coastguard Worker expectedAlignment, \
120*c8dee2aaSAndroid Build Coastguard Worker alignment); \
121*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(r, \
122*c8dee2aaSAndroid Build Coastguard Worker size == kCount * expectedStride, \
123*c8dee2aaSAndroid Build Coastguard Worker "incorrect size for struct array: expected %d, found %d", \
124*c8dee2aaSAndroid Build Coastguard Worker kCount * expectedStride, \
125*c8dee2aaSAndroid Build Coastguard Worker size); \
126*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(r, \
127*c8dee2aaSAndroid Build Coastguard Worker stride == expectedStride, \
128*c8dee2aaSAndroid Build Coastguard Worker "incorrect stride for struct: expected %d, found %d", \
129*c8dee2aaSAndroid Build Coastguard Worker expectedStride, \
130*c8dee2aaSAndroid Build Coastguard Worker stride); \
131*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(r, \
132*c8dee2aaSAndroid Build Coastguard Worker stride % alignment == 0, \
133*c8dee2aaSAndroid Build Coastguard Worker "struct stride must be a multiple of alignment"); \
134*c8dee2aaSAndroid Build Coastguard Worker } while (0)
135*c8dee2aaSAndroid Build Coastguard Worker
DEF_GRAPHITE_TEST(UniformOffsetCalculatorMetalBasicTypesTest,r,CtsEnforcement::kApiLevel_V)136*c8dee2aaSAndroid Build Coastguard Worker DEF_GRAPHITE_TEST(UniformOffsetCalculatorMetalBasicTypesTest, r, CtsEnforcement::kApiLevel_V) {
137*c8dee2aaSAndroid Build Coastguard Worker constexpr Layout kLayout = Layout::kMetal;
138*c8dee2aaSAndroid Build Coastguard Worker
139*c8dee2aaSAndroid Build Coastguard Worker // scalars: int, float, half (unsigned types are disallowed)
140*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kInt, /*alignment=*/4, /*size=*/4);
141*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kFloat, /*alignment=*/4, /*size=*/4);
142*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kHalf, /*alignment=*/2, /*size=*/2);
143*c8dee2aaSAndroid Build Coastguard Worker
144*c8dee2aaSAndroid Build Coastguard Worker // int2, float2, half2
145*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kInt2, /*alignment=*/8, /*size=*/8);
146*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kFloat2, /*alignment=*/8, /*size=*/8);
147*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kHalf2, /*alignment=*/4, /*size=*/4);
148*c8dee2aaSAndroid Build Coastguard Worker
149*c8dee2aaSAndroid Build Coastguard Worker // int3, float3, half3 (unlike std430, size is also rounded up)
150*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kInt3, /*alignment=*/16, /*size=*/16);
151*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kFloat3, /*alignment=*/16, /*size=*/16);
152*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kHalf3, /*alignment=*/8, /*size=*/8);
153*c8dee2aaSAndroid Build Coastguard Worker
154*c8dee2aaSAndroid Build Coastguard Worker // int4, float4, half4
155*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kInt4, /*alignment=*/16, /*size=*/16);
156*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kFloat4, /*alignment=*/16, /*size=*/16);
157*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kHalf4, /*alignment=*/8, /*size=*/8);
158*c8dee2aaSAndroid Build Coastguard Worker
159*c8dee2aaSAndroid Build Coastguard Worker // float2x2, half2x2
160*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kFloat2x2, /*alignment=*/8, /*size=*/16);
161*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kHalf2x2, /*alignment=*/4, /*size=*/8);
162*c8dee2aaSAndroid Build Coastguard Worker
163*c8dee2aaSAndroid Build Coastguard Worker // float3x3, half3x3
164*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kFloat3x3, /*alignment=*/16, /*size=*/48);
165*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kHalf3x3, /*alignment=*/8, /*size=*/24);
166*c8dee2aaSAndroid Build Coastguard Worker
167*c8dee2aaSAndroid Build Coastguard Worker // float4x4, half4x4
168*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kFloat4x4, /*alignment=*/16, /*size=*/64);
169*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kHalf4x4, /*alignment=*/8, /*size=*/32);
170*c8dee2aaSAndroid Build Coastguard Worker }
171*c8dee2aaSAndroid Build Coastguard Worker
DEF_GRAPHITE_TEST(UniformOffsetCalculatorMetalArrayTest,r,CtsEnforcement::kApiLevel_V)172*c8dee2aaSAndroid Build Coastguard Worker DEF_GRAPHITE_TEST(UniformOffsetCalculatorMetalArrayTest, r, CtsEnforcement::kApiLevel_V) {
173*c8dee2aaSAndroid Build Coastguard Worker constexpr Layout kLayout = Layout::kMetal;
174*c8dee2aaSAndroid Build Coastguard Worker constexpr int kCount = 3;
175*c8dee2aaSAndroid Build Coastguard Worker
176*c8dee2aaSAndroid Build Coastguard Worker // int[3], float[3], half[3]
177*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kInt, /*alignment=*/4, /*stride=*/4, /*size=*/12);
178*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kFloat, /*alignment=*/4, /*stride=*/4, /*size=*/12);
179*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kHalf, /*alignment=*/2, /*stride=*/2, /*size=*/6);
180*c8dee2aaSAndroid Build Coastguard Worker
181*c8dee2aaSAndroid Build Coastguard Worker // int2[3], float2[3], half2[3]
182*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kInt2, /*alignment=*/8, /*stride=*/8, /*size=*/24);
183*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kFloat2, /*alignment=*/8, /*stride=*/8, /*size=*/24);
184*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kHalf2, /*alignment=*/4, /*stride=*/4, /*size=*/12);
185*c8dee2aaSAndroid Build Coastguard Worker
186*c8dee2aaSAndroid Build Coastguard Worker // int3[3], float3[3], half3[3]
187*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kInt3, /*alignment=*/16, /*stride=*/16, /*size=*/48);
188*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kFloat3, /*alignment=*/16, /*stride=*/16, /*size=*/48);
189*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kHalf3, /*alignment=*/8, /*stride=*/8, /*size=*/24);
190*c8dee2aaSAndroid Build Coastguard Worker
191*c8dee2aaSAndroid Build Coastguard Worker // int4[3], float4[3], half4[3]
192*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kInt4, /*alignment=*/16, /*stride=*/16, /*size=*/48);
193*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kFloat4, /*alignment=*/16, /*stride=*/16, /*size=*/48);
194*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kHalf4, /*alignment=*/8, /*stride=*/8, /*size=*/24);
195*c8dee2aaSAndroid Build Coastguard Worker
196*c8dee2aaSAndroid Build Coastguard Worker // float2x2[3], half2x2[3]
197*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kFloat2x2, /*alignment=*/8, /*stride=*/16, /*size=*/48);
198*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kHalf2x2, /*alignment=*/4, /*stride=*/8, /*size=*/24);
199*c8dee2aaSAndroid Build Coastguard Worker
200*c8dee2aaSAndroid Build Coastguard Worker // float3x3[3], half3x3[3]
201*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kFloat3x3, /*alignment=*/16, /*stride=*/48, /*size=*/144);
202*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kHalf3x3, /*alignment=*/8, /*stride=*/24, /*size=*/72);
203*c8dee2aaSAndroid Build Coastguard Worker
204*c8dee2aaSAndroid Build Coastguard Worker // float4x4[3], half4x4[3]
205*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kFloat4x4, /*alignment=*/16, /*stride=*/64, /*size=*/192);
206*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kHalf4x4, /*alignment=*/8, /*stride=*/32, /*size=*/96);
207*c8dee2aaSAndroid Build Coastguard Worker }
208*c8dee2aaSAndroid Build Coastguard Worker
DEF_GRAPHITE_TEST(UniformOffsetCalculatorMetalStructTest,r,CtsEnforcement::kNextRelease)209*c8dee2aaSAndroid Build Coastguard Worker DEF_GRAPHITE_TEST(UniformOffsetCalculatorMetalStructTest, r, CtsEnforcement::kNextRelease) {
210*c8dee2aaSAndroid Build Coastguard Worker constexpr Layout kLayout = Layout::kMetal;
211*c8dee2aaSAndroid Build Coastguard Worker constexpr int kCount = 3;
212*c8dee2aaSAndroid Build Coastguard Worker
213*c8dee2aaSAndroid Build Coastguard Worker EXPECT_STRUCT(/*alignment=*/16, /*size=*/32, /*fields=*/SkSLType::kFloat4,
214*c8dee2aaSAndroid Build Coastguard Worker SkSLType::kFloat3);
215*c8dee2aaSAndroid Build Coastguard Worker EXPECT_STRUCT(/*alignment=*/16, /*size=*/32, /*fields=*/SkSLType::kFloat3,
216*c8dee2aaSAndroid Build Coastguard Worker SkSLType::kFloat);
217*c8dee2aaSAndroid Build Coastguard Worker EXPECT_STRUCT(/*alignment=*/8, /*size=*/16, /*fields=*/SkSLType::kFloat,
218*c8dee2aaSAndroid Build Coastguard Worker SkSLType::kFloat2);
219*c8dee2aaSAndroid Build Coastguard Worker EXPECT_STRUCT(/*alignment=*/4, /*size=*/4, /*fields=*/SkSLType::kFloat);
220*c8dee2aaSAndroid Build Coastguard Worker EXPECT_STRUCT(/*alignment=*/4, /*size=*/12, /*fields=*/SkSLType::kFloat,
221*c8dee2aaSAndroid Build Coastguard Worker SkSLType::kFloat,
222*c8dee2aaSAndroid Build Coastguard Worker SkSLType::kInt);
223*c8dee2aaSAndroid Build Coastguard Worker EXPECT_STRUCT(/*alignment=*/4, /*size=*/8, /*fields=*/SkSLType::kHalf2,
224*c8dee2aaSAndroid Build Coastguard Worker SkSLType::kInt);
225*c8dee2aaSAndroid Build Coastguard Worker
226*c8dee2aaSAndroid Build Coastguard Worker EXPECT_STRUCT_ARRAY(/*alignment=*/16, /*stride=*/32, /*fields=*/SkSLType::kFloat4,
227*c8dee2aaSAndroid Build Coastguard Worker SkSLType::kFloat3);
228*c8dee2aaSAndroid Build Coastguard Worker EXPECT_STRUCT_ARRAY(/*alignment=*/8, /*stride=*/16, /*fields=*/SkSLType::kFloat,
229*c8dee2aaSAndroid Build Coastguard Worker SkSLType::kFloat2);
230*c8dee2aaSAndroid Build Coastguard Worker EXPECT_STRUCT_ARRAY(/*alignment=*/4, /*stride=*/4, /*fields=*/SkSLType::kFloat);
231*c8dee2aaSAndroid Build Coastguard Worker EXPECT_STRUCT_ARRAY(/*alignment=*/4, /*stride=*/12, /*fields=*/SkSLType::kFloat,
232*c8dee2aaSAndroid Build Coastguard Worker SkSLType::kFloat,
233*c8dee2aaSAndroid Build Coastguard Worker SkSLType::kInt);
234*c8dee2aaSAndroid Build Coastguard Worker EXPECT_STRUCT_ARRAY(/*alignment=*/4, /*stride=*/8, /*fields=*/SkSLType::kHalf2,
235*c8dee2aaSAndroid Build Coastguard Worker SkSLType::kInt);
236*c8dee2aaSAndroid Build Coastguard Worker }
237*c8dee2aaSAndroid Build Coastguard Worker
DEF_GRAPHITE_TEST(UniformOffsetCalculatorStd430BasicTypesTest,r,CtsEnforcement::kApiLevel_V)238*c8dee2aaSAndroid Build Coastguard Worker DEF_GRAPHITE_TEST(UniformOffsetCalculatorStd430BasicTypesTest, r, CtsEnforcement::kApiLevel_V) {
239*c8dee2aaSAndroid Build Coastguard Worker constexpr Layout kLayout = Layout::kStd430;
240*c8dee2aaSAndroid Build Coastguard Worker
241*c8dee2aaSAndroid Build Coastguard Worker // scalars: int, float, half (unsigned types are disallowed)
242*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kInt, /*alignment=*/4, /*size=*/4);
243*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kFloat, /*alignment=*/4, /*size=*/4);
244*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kHalf, /*alignment=*/4, /*size=*/4);
245*c8dee2aaSAndroid Build Coastguard Worker
246*c8dee2aaSAndroid Build Coastguard Worker // int2, float2, half2
247*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kInt2, /*alignment=*/8, /*size=*/8);
248*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kFloat2, /*alignment=*/8, /*size=*/8);
249*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kHalf2, /*alignment=*/8, /*size=*/8);
250*c8dee2aaSAndroid Build Coastguard Worker
251*c8dee2aaSAndroid Build Coastguard Worker // int3, float3, half3 (size is not rounded up for non-arrays of vec3s)
252*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kInt3, /*alignment=*/16, /*size=*/12);
253*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kFloat3, /*alignment=*/16, /*size=*/12);
254*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kHalf3, /*alignment=*/16, /*size=*/12);
255*c8dee2aaSAndroid Build Coastguard Worker
256*c8dee2aaSAndroid Build Coastguard Worker // int4, float4, half4
257*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kInt4, /*alignment=*/16, /*size=*/16);
258*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kFloat4, /*alignment=*/16, /*size=*/16);
259*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kHalf4, /*alignment=*/16, /*size=*/16);
260*c8dee2aaSAndroid Build Coastguard Worker
261*c8dee2aaSAndroid Build Coastguard Worker // float2x2, half2x2
262*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kFloat2x2, /*alignment=*/8, /*size=*/16);
263*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kHalf2x2, /*alignment=*/8, /*size=*/16);
264*c8dee2aaSAndroid Build Coastguard Worker
265*c8dee2aaSAndroid Build Coastguard Worker // float3x3, half3x3
266*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kFloat3x3, /*alignment=*/16, /*size=*/48);
267*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kHalf3x3, /*alignment=*/16, /*size=*/48);
268*c8dee2aaSAndroid Build Coastguard Worker
269*c8dee2aaSAndroid Build Coastguard Worker // float4x4, half4x4
270*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kFloat4x4, /*alignment=*/16, /*size=*/64);
271*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kHalf4x4, /*alignment=*/16, /*size=*/64);
272*c8dee2aaSAndroid Build Coastguard Worker }
273*c8dee2aaSAndroid Build Coastguard Worker
DEF_GRAPHITE_TEST(UniformOffsetCalculatorStd430ArrayTest,r,CtsEnforcement::kApiLevel_V)274*c8dee2aaSAndroid Build Coastguard Worker DEF_GRAPHITE_TEST(UniformOffsetCalculatorStd430ArrayTest, r, CtsEnforcement::kApiLevel_V) {
275*c8dee2aaSAndroid Build Coastguard Worker constexpr Layout kLayout = Layout::kStd430;
276*c8dee2aaSAndroid Build Coastguard Worker constexpr int kCount = 3;
277*c8dee2aaSAndroid Build Coastguard Worker
278*c8dee2aaSAndroid Build Coastguard Worker // int[3], float[3], half[3]
279*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kInt, /*alignment=*/4, /*stride=*/4, /*size=*/12);
280*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kFloat, /*alignment=*/4, /*stride=*/4, /*size=*/12);
281*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kHalf, /*alignment=*/4, /*stride=*/4, /*size=*/12);
282*c8dee2aaSAndroid Build Coastguard Worker
283*c8dee2aaSAndroid Build Coastguard Worker // int2[3], float2[3], half2[3]
284*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kInt2, /*alignment=*/8, /*stride=*/8, /*size=*/24);
285*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kFloat2, /*alignment=*/8, /*stride=*/8, /*size=*/24);
286*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kHalf2, /*alignment=*/8, /*stride=*/8, /*size=*/24);
287*c8dee2aaSAndroid Build Coastguard Worker
288*c8dee2aaSAndroid Build Coastguard Worker // int3[3], float3[3], half3[3] (stride is rounded up in arrays)
289*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kInt3, /*alignment=*/16, /*stride=*/16, /*size=*/48);
290*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kFloat3, /*alignment=*/16, /*stride=*/16, /*size=*/48);
291*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kHalf3, /*alignment=*/16, /*stride=*/16, /*size=*/48);
292*c8dee2aaSAndroid Build Coastguard Worker
293*c8dee2aaSAndroid Build Coastguard Worker // int4[3], float4[3], half4[3]
294*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kInt4, /*alignment=*/16, /*stride=*/16, /*size=*/48);
295*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kFloat4, /*alignment=*/16, /*stride=*/16, /*size=*/48);
296*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kHalf4, /*alignment=*/16, /*stride=*/16, /*size=*/48);
297*c8dee2aaSAndroid Build Coastguard Worker
298*c8dee2aaSAndroid Build Coastguard Worker // float2x2[3], half2x2[3]
299*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kFloat2x2, /*alignment=*/8, /*stride=*/16, /*size=*/48);
300*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kHalf2x2, /*alignment=*/8, /*stride=*/16, /*size=*/48);
301*c8dee2aaSAndroid Build Coastguard Worker
302*c8dee2aaSAndroid Build Coastguard Worker // float3x3[3], half3x3[3]
303*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kFloat3x3, /*alignment=*/16, /*stride=*/48, /*size=*/144);
304*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kHalf3x3, /*alignment=*/16, /*stride=*/48, /*size=*/144);
305*c8dee2aaSAndroid Build Coastguard Worker
306*c8dee2aaSAndroid Build Coastguard Worker // float4x4[3], half4x4[3]
307*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kFloat4x4, /*alignment=*/16, /*stride=*/64, /*size=*/192);
308*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kHalf4x4, /*alignment=*/16, /*stride=*/64, /*size=*/192);
309*c8dee2aaSAndroid Build Coastguard Worker }
310*c8dee2aaSAndroid Build Coastguard Worker
DEF_GRAPHITE_TEST(UniformOffsetCalculatorStd430StructTest,r,CtsEnforcement::kNextRelease)311*c8dee2aaSAndroid Build Coastguard Worker DEF_GRAPHITE_TEST(UniformOffsetCalculatorStd430StructTest, r, CtsEnforcement::kNextRelease) {
312*c8dee2aaSAndroid Build Coastguard Worker constexpr Layout kLayout = Layout::kStd430;
313*c8dee2aaSAndroid Build Coastguard Worker constexpr int kCount = 3;
314*c8dee2aaSAndroid Build Coastguard Worker
315*c8dee2aaSAndroid Build Coastguard Worker EXPECT_STRUCT(/*alignment=*/16, /*size=*/32, /*fields=*/SkSLType::kFloat4,
316*c8dee2aaSAndroid Build Coastguard Worker SkSLType::kFloat3);
317*c8dee2aaSAndroid Build Coastguard Worker EXPECT_STRUCT(/*alignment=*/16, /*size=*/16, /*fields=*/SkSLType::kFloat3,
318*c8dee2aaSAndroid Build Coastguard Worker SkSLType::kFloat);
319*c8dee2aaSAndroid Build Coastguard Worker EXPECT_STRUCT(/*alignment=*/8, /*size=*/16, /*fields=*/SkSLType::kFloat,
320*c8dee2aaSAndroid Build Coastguard Worker SkSLType::kFloat2);
321*c8dee2aaSAndroid Build Coastguard Worker EXPECT_STRUCT(/*alignment=*/4, /*size=*/4, /*fields=*/SkSLType::kFloat);
322*c8dee2aaSAndroid Build Coastguard Worker EXPECT_STRUCT(/*alignment=*/4, /*size=*/12, /*fields=*/SkSLType::kFloat,
323*c8dee2aaSAndroid Build Coastguard Worker SkSLType::kFloat,
324*c8dee2aaSAndroid Build Coastguard Worker SkSLType::kInt);
325*c8dee2aaSAndroid Build Coastguard Worker EXPECT_STRUCT(/*alignment=*/8, /*size=*/16, /*fields=*/SkSLType::kHalf2,
326*c8dee2aaSAndroid Build Coastguard Worker SkSLType::kInt);
327*c8dee2aaSAndroid Build Coastguard Worker
328*c8dee2aaSAndroid Build Coastguard Worker EXPECT_STRUCT_ARRAY(/*alignment=*/16, /*stride=*/32, /*fields=*/SkSLType::kFloat4,
329*c8dee2aaSAndroid Build Coastguard Worker SkSLType::kFloat3);
330*c8dee2aaSAndroid Build Coastguard Worker EXPECT_STRUCT_ARRAY(/*alignment=*/8, /*stride=*/16, /*fields=*/SkSLType::kFloat,
331*c8dee2aaSAndroid Build Coastguard Worker SkSLType::kFloat2);
332*c8dee2aaSAndroid Build Coastguard Worker EXPECT_STRUCT_ARRAY(/*alignment=*/4, /*stride=*/4, /*fields=*/SkSLType::kFloat);
333*c8dee2aaSAndroid Build Coastguard Worker EXPECT_STRUCT_ARRAY(/*alignment=*/4, /*stride=*/12, /*fields=*/SkSLType::kFloat,
334*c8dee2aaSAndroid Build Coastguard Worker SkSLType::kFloat,
335*c8dee2aaSAndroid Build Coastguard Worker SkSLType::kInt);
336*c8dee2aaSAndroid Build Coastguard Worker EXPECT_STRUCT_ARRAY(/*alignment=*/8, /*stride=*/16, /*fields=*/SkSLType::kHalf2,
337*c8dee2aaSAndroid Build Coastguard Worker SkSLType::kInt);
338*c8dee2aaSAndroid Build Coastguard Worker }
339*c8dee2aaSAndroid Build Coastguard Worker
DEF_GRAPHITE_TEST(UniformOffsetCalculatorStd140BasicTypesTest,r,CtsEnforcement::kApiLevel_V)340*c8dee2aaSAndroid Build Coastguard Worker DEF_GRAPHITE_TEST(UniformOffsetCalculatorStd140BasicTypesTest, r, CtsEnforcement::kApiLevel_V) {
341*c8dee2aaSAndroid Build Coastguard Worker constexpr Layout kLayout = Layout::kStd140;
342*c8dee2aaSAndroid Build Coastguard Worker
343*c8dee2aaSAndroid Build Coastguard Worker // scalars: int, float, half (unsigned types are disallowed)
344*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kInt, /*alignment=*/4, /*size=*/4);
345*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kFloat, /*alignment=*/4, /*size=*/4);
346*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kHalf, /*alignment=*/4, /*size=*/4);
347*c8dee2aaSAndroid Build Coastguard Worker
348*c8dee2aaSAndroid Build Coastguard Worker // int2, float2, half2
349*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kInt2, /*alignment=*/8, /*size=*/8);
350*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kFloat2, /*alignment=*/8, /*size=*/8);
351*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kHalf2, /*alignment=*/8, /*size=*/8);
352*c8dee2aaSAndroid Build Coastguard Worker
353*c8dee2aaSAndroid Build Coastguard Worker // int3, float3, half3 (size is not rounded up for non-arrays of vec3s)
354*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kInt3, /*alignment=*/16, /*size=*/12);
355*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kFloat3, /*alignment=*/16, /*size=*/12);
356*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kHalf3, /*alignment=*/16, /*size=*/12);
357*c8dee2aaSAndroid Build Coastguard Worker
358*c8dee2aaSAndroid Build Coastguard Worker // int4, float4, half4
359*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kInt4, /*alignment=*/16, /*size=*/16);
360*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kFloat4, /*alignment=*/16, /*size=*/16);
361*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kHalf4, /*alignment=*/16, /*size=*/16);
362*c8dee2aaSAndroid Build Coastguard Worker
363*c8dee2aaSAndroid Build Coastguard Worker // float2x2, half2x2
364*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kFloat2x2, /*alignment=*/16, /*size=*/32);
365*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kHalf2x2, /*alignment=*/16, /*size=*/32);
366*c8dee2aaSAndroid Build Coastguard Worker
367*c8dee2aaSAndroid Build Coastguard Worker // float3x3, half3x3
368*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kFloat3x3, /*alignment=*/16, /*size=*/48);
369*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kHalf3x3, /*alignment=*/16, /*size=*/48);
370*c8dee2aaSAndroid Build Coastguard Worker
371*c8dee2aaSAndroid Build Coastguard Worker // float4x4, half4x4
372*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kFloat4x4, /*alignment=*/16, /*size=*/64);
373*c8dee2aaSAndroid Build Coastguard Worker EXPECT(SkSLType::kHalf4x4, /*alignment=*/16, /*size=*/64);
374*c8dee2aaSAndroid Build Coastguard Worker }
375*c8dee2aaSAndroid Build Coastguard Worker
DEF_GRAPHITE_TEST(UniformOffsetCalculatorStd140ArrayTest,r,CtsEnforcement::kApiLevel_V)376*c8dee2aaSAndroid Build Coastguard Worker DEF_GRAPHITE_TEST(UniformOffsetCalculatorStd140ArrayTest, r, CtsEnforcement::kApiLevel_V) {
377*c8dee2aaSAndroid Build Coastguard Worker constexpr Layout kLayout = Layout::kStd140;
378*c8dee2aaSAndroid Build Coastguard Worker constexpr int kCount = 3;
379*c8dee2aaSAndroid Build Coastguard Worker
380*c8dee2aaSAndroid Build Coastguard Worker // int[3], float[3], half[3]
381*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kInt, /*alignment=*/16, /*stride=*/16, /*size=*/48);
382*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kFloat, /*alignment=*/16, /*stride=*/16, /*size=*/48);
383*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kHalf, /*alignment=*/16, /*stride=*/16, /*size=*/48);
384*c8dee2aaSAndroid Build Coastguard Worker
385*c8dee2aaSAndroid Build Coastguard Worker // int2[3], float2[3], half2[3]
386*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kInt2, /*alignment=*/16, /*stride=*/16, /*size=*/48);
387*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kFloat2, /*alignment=*/16, /*stride=*/16, /*size=*/48);
388*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kHalf2, /*alignment=*/16, /*stride=*/16, /*size=*/48);
389*c8dee2aaSAndroid Build Coastguard Worker
390*c8dee2aaSAndroid Build Coastguard Worker // int3[3], float3[3], half3[3]
391*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kInt3, /*alignment=*/16, /*stride=*/16, /*size=*/48);
392*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kFloat3, /*alignment=*/16, /*stride=*/16, /*size=*/48);
393*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kHalf3, /*alignment=*/16, /*stride=*/16, /*size=*/48);
394*c8dee2aaSAndroid Build Coastguard Worker
395*c8dee2aaSAndroid Build Coastguard Worker // int4[3], float4[3], half4[3]
396*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kInt4, /*alignment=*/16, /*stride=*/16, /*size=*/48);
397*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kFloat4, /*alignment=*/16, /*stride=*/16, /*size=*/48);
398*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kHalf4, /*alignment=*/16, /*stride=*/16, /*size=*/48);
399*c8dee2aaSAndroid Build Coastguard Worker
400*c8dee2aaSAndroid Build Coastguard Worker // float2x2[3], half2x2[3]
401*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kFloat2x2, /*alignment=*/16, /*stride=*/32, /*size=*/96);
402*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kHalf2x2, /*alignment=*/16, /*stride=*/32, /*size=*/96);
403*c8dee2aaSAndroid Build Coastguard Worker
404*c8dee2aaSAndroid Build Coastguard Worker // float3x3[3], half3x3[3]
405*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kFloat3x3, /*alignment=*/16, /*stride=*/48, /*size=*/144);
406*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kHalf3x3, /*alignment=*/16, /*stride=*/48, /*size=*/144);
407*c8dee2aaSAndroid Build Coastguard Worker
408*c8dee2aaSAndroid Build Coastguard Worker // float4x4[3], half4x4[3]
409*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kFloat4x4, /*alignment=*/16, /*stride=*/64, /*size=*/192);
410*c8dee2aaSAndroid Build Coastguard Worker EXPECT_ARRAY(SkSLType::kHalf4x4, /*alignment=*/16, /*stride=*/64, /*size=*/192);
411*c8dee2aaSAndroid Build Coastguard Worker }
412*c8dee2aaSAndroid Build Coastguard Worker
DEF_GRAPHITE_TEST(UniformOffsetCalculatorStd140StructTest,r,CtsEnforcement::kNextRelease)413*c8dee2aaSAndroid Build Coastguard Worker DEF_GRAPHITE_TEST(UniformOffsetCalculatorStd140StructTest, r, CtsEnforcement::kNextRelease) {
414*c8dee2aaSAndroid Build Coastguard Worker constexpr Layout kLayout = Layout::kStd140;
415*c8dee2aaSAndroid Build Coastguard Worker constexpr int kCount = 3;
416*c8dee2aaSAndroid Build Coastguard Worker
417*c8dee2aaSAndroid Build Coastguard Worker EXPECT_STRUCT(/*alignment=*/16, /*size=*/32, /*fields=*/SkSLType::kFloat4,
418*c8dee2aaSAndroid Build Coastguard Worker SkSLType::kFloat3);
419*c8dee2aaSAndroid Build Coastguard Worker EXPECT_STRUCT(/*alignment=*/16, /*size=*/16, /*fields=*/SkSLType::kFloat3,
420*c8dee2aaSAndroid Build Coastguard Worker SkSLType::kFloat);
421*c8dee2aaSAndroid Build Coastguard Worker EXPECT_STRUCT(/*alignment=*/16, /*size=*/16, /*fields=*/SkSLType::kFloat,
422*c8dee2aaSAndroid Build Coastguard Worker SkSLType::kFloat2);
423*c8dee2aaSAndroid Build Coastguard Worker EXPECT_STRUCT(/*alignment=*/16, /*size=*/16, /*fields=*/SkSLType::kFloat);
424*c8dee2aaSAndroid Build Coastguard Worker EXPECT_STRUCT(/*alignment=*/16, /*size=*/16, /*fields=*/SkSLType::kFloat,
425*c8dee2aaSAndroid Build Coastguard Worker SkSLType::kFloat,
426*c8dee2aaSAndroid Build Coastguard Worker SkSLType::kInt);
427*c8dee2aaSAndroid Build Coastguard Worker EXPECT_STRUCT(/*alignment=*/16, /*size=*/16, /*fields=*/SkSLType::kHalf2,
428*c8dee2aaSAndroid Build Coastguard Worker SkSLType::kInt);
429*c8dee2aaSAndroid Build Coastguard Worker
430*c8dee2aaSAndroid Build Coastguard Worker EXPECT_STRUCT_ARRAY(/*alignment=*/16, /*stride=*/32, /*fields=*/SkSLType::kFloat4,
431*c8dee2aaSAndroid Build Coastguard Worker SkSLType::kFloat3);
432*c8dee2aaSAndroid Build Coastguard Worker EXPECT_STRUCT_ARRAY(/*alignment=*/16, /*stride=*/16, /*fields=*/SkSLType::kFloat,
433*c8dee2aaSAndroid Build Coastguard Worker SkSLType::kFloat2);
434*c8dee2aaSAndroid Build Coastguard Worker EXPECT_STRUCT_ARRAY(/*alignment=*/16, /*stride=*/16, /*fields=*/SkSLType::kFloat);
435*c8dee2aaSAndroid Build Coastguard Worker EXPECT_STRUCT_ARRAY(/*alignment=*/16, /*stride=*/16, /*fields=*/SkSLType::kFloat,
436*c8dee2aaSAndroid Build Coastguard Worker SkSLType::kFloat,
437*c8dee2aaSAndroid Build Coastguard Worker SkSLType::kInt);
438*c8dee2aaSAndroid Build Coastguard Worker EXPECT_STRUCT_ARRAY(/*alignment=*/16, /*stride=*/16, /*fields=*/SkSLType::kHalf2,
439*c8dee2aaSAndroid Build Coastguard Worker SkSLType::kInt);
440*c8dee2aaSAndroid Build Coastguard Worker }
441*c8dee2aaSAndroid Build Coastguard Worker
442*c8dee2aaSAndroid Build Coastguard Worker } // namespace
443