• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2016 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #include "SkSLContext.h"
9 #include "SkSLMemoryLayout.h"
10 
11 #include "Test.h"
12 
DEF_TEST(SkSLMemoryLayout140Test,r)13 DEF_TEST(SkSLMemoryLayout140Test, r) {
14     SkSL::Context context;
15     SkSL::MemoryLayout layout(SkSL::MemoryLayout::k140_Standard);
16 
17     // basic types
18     REPORTER_ASSERT(r,  4 == layout.size(*context.fFloat_Type));
19     REPORTER_ASSERT(r,  8 == layout.size(*context.fFloat2_Type));
20     REPORTER_ASSERT(r, 12 == layout.size(*context.fFloat3_Type));
21     REPORTER_ASSERT(r, 16 == layout.size(*context.fFloat4_Type));
22     REPORTER_ASSERT(r,  4 == layout.size(*context.fInt_Type));
23     REPORTER_ASSERT(r,  8 == layout.size(*context.fInt2_Type));
24     REPORTER_ASSERT(r, 12 == layout.size(*context.fInt3_Type));
25     REPORTER_ASSERT(r, 16 == layout.size(*context.fInt4_Type));
26     REPORTER_ASSERT(r,  1 == layout.size(*context.fBool_Type));
27     REPORTER_ASSERT(r,  2 == layout.size(*context.fBool2_Type));
28     REPORTER_ASSERT(r,  3 == layout.size(*context.fBool3_Type));
29     REPORTER_ASSERT(r,  4 == layout.size(*context.fBool4_Type));
30     REPORTER_ASSERT(r, 32 == layout.size(*context.fFloat2x2_Type));
31     REPORTER_ASSERT(r, 32 == layout.size(*context.fFloat2x4_Type));
32     REPORTER_ASSERT(r, 48 == layout.size(*context.fFloat3x3_Type));
33     REPORTER_ASSERT(r, 64 == layout.size(*context.fFloat4x2_Type));
34     REPORTER_ASSERT(r, 64 == layout.size(*context.fFloat4x4_Type));
35     REPORTER_ASSERT(r,  4 == layout.alignment(*context.fFloat_Type));
36     REPORTER_ASSERT(r,  8 == layout.alignment(*context.fFloat2_Type));
37     REPORTER_ASSERT(r, 16 == layout.alignment(*context.fFloat3_Type));
38     REPORTER_ASSERT(r, 16 == layout.alignment(*context.fFloat4_Type));
39     REPORTER_ASSERT(r,  4 == layout.alignment(*context.fInt_Type));
40     REPORTER_ASSERT(r,  8 == layout.alignment(*context.fInt2_Type));
41     REPORTER_ASSERT(r, 16 == layout.alignment(*context.fInt3_Type));
42     REPORTER_ASSERT(r, 16 == layout.alignment(*context.fInt4_Type));
43     REPORTER_ASSERT(r,  1 == layout.alignment(*context.fBool_Type));
44     REPORTER_ASSERT(r,  2 == layout.alignment(*context.fBool2_Type));
45     REPORTER_ASSERT(r,  4 == layout.alignment(*context.fBool3_Type));
46     REPORTER_ASSERT(r,  4 == layout.alignment(*context.fBool4_Type));
47     REPORTER_ASSERT(r, 16 == layout.alignment(*context.fFloat2x2_Type));
48     REPORTER_ASSERT(r, 16 == layout.alignment(*context.fFloat2x4_Type));
49     REPORTER_ASSERT(r, 16 == layout.alignment(*context.fFloat3x3_Type));
50     REPORTER_ASSERT(r, 16 == layout.alignment(*context.fFloat4x2_Type));
51     REPORTER_ASSERT(r, 16 == layout.alignment(*context.fFloat4x4_Type));
52 
53     // struct 1
54     std::vector<SkSL::Type::Field> fields1;
55     fields1.emplace_back(SkSL::Modifiers(), SkSL::StringFragment("a"), context.fFloat3_Type.get());
56     SkSL::Type s1(-1, SkSL::String("s1"), fields1);
57     REPORTER_ASSERT(r, 16 == layout.size(s1));
58     REPORTER_ASSERT(r, 16 == layout.alignment(s1));
59 
60     fields1.emplace_back(SkSL::Modifiers(), SkSL::StringFragment("b"), context.fFloat_Type.get());
61     SkSL::Type s2(-1, SkSL::String("s2"), fields1);
62     REPORTER_ASSERT(r, 16 == layout.size(s2));
63     REPORTER_ASSERT(r, 16 == layout.alignment(s2));
64 
65     fields1.emplace_back(SkSL::Modifiers(), SkSL::StringFragment("c"), context.fBool_Type.get());
66     SkSL::Type s3(-1, SkSL::String("s3"), fields1);
67     REPORTER_ASSERT(r, 32 == layout.size(s3));
68     REPORTER_ASSERT(r, 16 == layout.alignment(s3));
69 
70     // struct 2
71     std::vector<SkSL::Type::Field> fields2;
72     fields2.emplace_back(SkSL::Modifiers(), SkSL::StringFragment("a"), context.fInt_Type.get());
73     SkSL::Type s4(-1, SkSL::String("s4"), fields2);
74     REPORTER_ASSERT(r, 16 == layout.size(s4));
75     REPORTER_ASSERT(r, 16 == layout.alignment(s4));
76 
77     fields2.emplace_back(SkSL::Modifiers(), SkSL::StringFragment("b"), context.fFloat3_Type.get());
78     SkSL::Type s5(-1, SkSL::String("s5"), fields2);
79     REPORTER_ASSERT(r, 32 == layout.size(s5));
80     REPORTER_ASSERT(r, 16 == layout.alignment(s5));
81 
82     // arrays
83     SkSL::Type array1(SkSL::String("float[4]"), SkSL::Type::kArray_Kind, *context.fFloat_Type, 4);
84     REPORTER_ASSERT(r, 64 == layout.size(array1));
85     REPORTER_ASSERT(r, 16 == layout.alignment(array1));
86     REPORTER_ASSERT(r, 16 == layout.stride(array1));
87 
88     SkSL::Type array2(SkSL::String("float4[4]"), SkSL::Type::kArray_Kind, *context.fFloat4_Type, 4);
89     REPORTER_ASSERT(r, 64 == layout.size(array2));
90     REPORTER_ASSERT(r, 16 == layout.alignment(array2));
91     REPORTER_ASSERT(r, 16 == layout.stride(array2));
92 }
93 
DEF_TEST(SkSLMemoryLayout430Test,r)94 DEF_TEST(SkSLMemoryLayout430Test, r) {
95     SkSL::Context context;
96     SkSL::MemoryLayout layout(SkSL::MemoryLayout::k430_Standard);
97 
98     // basic types
99     REPORTER_ASSERT(r,  4 == layout.size(*context.fFloat_Type));
100     REPORTER_ASSERT(r,  8 == layout.size(*context.fFloat2_Type));
101     REPORTER_ASSERT(r, 12 == layout.size(*context.fFloat3_Type));
102     REPORTER_ASSERT(r, 16 == layout.size(*context.fFloat4_Type));
103     REPORTER_ASSERT(r,  4 == layout.size(*context.fInt_Type));
104     REPORTER_ASSERT(r,  8 == layout.size(*context.fInt2_Type));
105     REPORTER_ASSERT(r, 12 == layout.size(*context.fInt3_Type));
106     REPORTER_ASSERT(r, 16 == layout.size(*context.fInt4_Type));
107     REPORTER_ASSERT(r,  1 == layout.size(*context.fBool_Type));
108     REPORTER_ASSERT(r,  2 == layout.size(*context.fBool2_Type));
109     REPORTER_ASSERT(r,  3 == layout.size(*context.fBool3_Type));
110     REPORTER_ASSERT(r,  4 == layout.size(*context.fBool4_Type));
111     REPORTER_ASSERT(r, 16 == layout.size(*context.fFloat2x2_Type));
112     REPORTER_ASSERT(r, 32 == layout.size(*context.fFloat2x4_Type));
113     REPORTER_ASSERT(r, 48 == layout.size(*context.fFloat3x3_Type));
114     REPORTER_ASSERT(r, 32 == layout.size(*context.fFloat4x2_Type));
115     REPORTER_ASSERT(r, 64 == layout.size(*context.fFloat4x4_Type));
116     REPORTER_ASSERT(r,  4 == layout.alignment(*context.fFloat_Type));
117     REPORTER_ASSERT(r,  8 == layout.alignment(*context.fFloat2_Type));
118     REPORTER_ASSERT(r, 16 == layout.alignment(*context.fFloat3_Type));
119     REPORTER_ASSERT(r, 16 == layout.alignment(*context.fFloat4_Type));
120     REPORTER_ASSERT(r,  4 == layout.alignment(*context.fInt_Type));
121     REPORTER_ASSERT(r,  8 == layout.alignment(*context.fInt2_Type));
122     REPORTER_ASSERT(r, 16 == layout.alignment(*context.fInt3_Type));
123     REPORTER_ASSERT(r, 16 == layout.alignment(*context.fInt4_Type));
124     REPORTER_ASSERT(r,  1 == layout.alignment(*context.fBool_Type));
125     REPORTER_ASSERT(r,  2 == layout.alignment(*context.fBool2_Type));
126     REPORTER_ASSERT(r,  4 == layout.alignment(*context.fBool3_Type));
127     REPORTER_ASSERT(r,  4 == layout.alignment(*context.fBool4_Type));
128     REPORTER_ASSERT(r,  8 == layout.alignment(*context.fFloat2x2_Type));
129     REPORTER_ASSERT(r, 16 == layout.alignment(*context.fFloat2x4_Type));
130     REPORTER_ASSERT(r, 16 == layout.alignment(*context.fFloat3x3_Type));
131     REPORTER_ASSERT(r,  8 == layout.alignment(*context.fFloat4x2_Type));
132     REPORTER_ASSERT(r, 16 == layout.alignment(*context.fFloat4x4_Type));
133 
134     // struct 1
135     std::vector<SkSL::Type::Field> fields1;
136     fields1.emplace_back(SkSL::Modifiers(), SkSL::StringFragment("a"), context.fFloat3_Type.get());
137     SkSL::Type s1(-1, SkSL::String("s1"), fields1);
138     REPORTER_ASSERT(r, 16 == layout.size(s1));
139     REPORTER_ASSERT(r, 16 == layout.alignment(s1));
140 
141     fields1.emplace_back(SkSL::Modifiers(), SkSL::StringFragment("b"), context.fFloat_Type.get());
142     SkSL::Type s2(-1, SkSL::String("s2"), fields1);
143     REPORTER_ASSERT(r, 16 == layout.size(s2));
144     REPORTER_ASSERT(r, 16 == layout.alignment(s2));
145 
146     fields1.emplace_back(SkSL::Modifiers(), SkSL::StringFragment("c"), context.fBool_Type.get());
147     SkSL::Type s3(-1, SkSL::String("s3"), fields1);
148     REPORTER_ASSERT(r, 32 == layout.size(s3));
149     REPORTER_ASSERT(r, 16 == layout.alignment(s3));
150 
151     // struct 2
152     std::vector<SkSL::Type::Field> fields2;
153     fields2.emplace_back(SkSL::Modifiers(), SkSL::StringFragment("a"), context.fInt_Type.get());
154     SkSL::Type s4(-1, SkSL::String("s4"), fields2);
155     REPORTER_ASSERT(r, 4 == layout.size(s4));
156     REPORTER_ASSERT(r, 4 == layout.alignment(s4));
157 
158     fields2.emplace_back(SkSL::Modifiers(), SkSL::StringFragment("b"), context.fFloat3_Type.get());
159     SkSL::Type s5(-1, SkSL::String("s5"), fields2);
160     REPORTER_ASSERT(r, 32 == layout.size(s5));
161     REPORTER_ASSERT(r, 16 == layout.alignment(s5));
162 
163     // arrays
164     SkSL::Type array1(SkSL::String("float[4]"), SkSL::Type::kArray_Kind, *context.fFloat_Type, 4);
165     REPORTER_ASSERT(r, 16 == layout.size(array1));
166     REPORTER_ASSERT(r, 4 == layout.alignment(array1));
167     REPORTER_ASSERT(r, 4 == layout.stride(array1));
168 
169     SkSL::Type array2(SkSL::String("float4[4]"), SkSL::Type::kArray_Kind, *context.fFloat4_Type, 4);
170     REPORTER_ASSERT(r, 64 == layout.size(array2));
171     REPORTER_ASSERT(r, 16 == layout.alignment(array2));
172     REPORTER_ASSERT(r, 16 == layout.stride(array2));
173 }
174