1 /*-------------------------------------------------------------------------
2 * drawElements Quality Program OpenGL ES Utilities
3 * ------------------------------------------------
4 *
5 * Copyright 2014 The Android Open Source Project
6 *
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 *
19 *//*!
20 * \file
21 * \brief Reference context utils
22 *//*--------------------------------------------------------------------*/
23
24 #include "sglrReferenceUtils.hpp"
25 #include "glwEnums.hpp"
26
27 namespace sglr
28 {
29 namespace rr_util
30 {
31
mapGLPureIntegerVertexAttributeType(uint32_t type)32 rr::VertexAttribType mapGLPureIntegerVertexAttributeType(uint32_t type)
33 {
34 switch (type)
35 {
36 case GL_UNSIGNED_BYTE:
37 return rr::VERTEXATTRIBTYPE_PURE_UINT8;
38 case GL_UNSIGNED_SHORT:
39 return rr::VERTEXATTRIBTYPE_PURE_UINT16;
40 case GL_UNSIGNED_INT:
41 return rr::VERTEXATTRIBTYPE_PURE_UINT32;
42 case GL_BYTE:
43 return rr::VERTEXATTRIBTYPE_PURE_INT8;
44 case GL_SHORT:
45 return rr::VERTEXATTRIBTYPE_PURE_INT16;
46 case GL_INT:
47 return rr::VERTEXATTRIBTYPE_PURE_INT32;
48 default:
49 DE_ASSERT(false);
50 return rr::VERTEXATTRIBTYPE_LAST;
51 }
52 }
53
mapGLFloatVertexAttributeType(uint32_t type,bool normalizedInteger,int size,glu::ContextType ctxType)54 rr::VertexAttribType mapGLFloatVertexAttributeType(uint32_t type, bool normalizedInteger, int size,
55 glu::ContextType ctxType)
56 {
57 const bool useClampingNormalization = (ctxType.getProfile() == glu::PROFILE_ES && ctxType.getMajorVersion() >= 3) ||
58 (ctxType.getMajorVersion() == 4 && ctxType.getMinorVersion() >= 2);
59 const bool bgraComponentOrder = (size == GL_BGRA);
60
61 switch (type)
62 {
63 case GL_FLOAT:
64 return rr::VERTEXATTRIBTYPE_FLOAT;
65
66 case GL_HALF_FLOAT:
67 return rr::VERTEXATTRIBTYPE_HALF;
68
69 case GL_FIXED:
70 return rr::VERTEXATTRIBTYPE_FIXED;
71
72 case GL_DOUBLE:
73 return rr::VERTEXATTRIBTYPE_DOUBLE;
74
75 case GL_UNSIGNED_BYTE:
76 if (!normalizedInteger)
77 return rr::VERTEXATTRIBTYPE_NONPURE_UINT8;
78 else
79 return (!bgraComponentOrder) ? (rr::VERTEXATTRIBTYPE_NONPURE_UNORM8) :
80 (rr::VERTEXATTRIBTYPE_NONPURE_UNORM8_BGRA);
81
82 case GL_UNSIGNED_SHORT:
83 if (!normalizedInteger)
84 return rr::VERTEXATTRIBTYPE_NONPURE_UINT16;
85 else
86 return rr::VERTEXATTRIBTYPE_NONPURE_UNORM16;
87
88 case GL_UNSIGNED_INT:
89 if (!normalizedInteger)
90 return rr::VERTEXATTRIBTYPE_NONPURE_UINT32;
91 else
92 return rr::VERTEXATTRIBTYPE_NONPURE_UNORM32;
93
94 case GL_UNSIGNED_INT_2_10_10_10_REV:
95 if (!normalizedInteger)
96 return rr::VERTEXATTRIBTYPE_NONPURE_UINT_2_10_10_10_REV;
97 else
98 return (!bgraComponentOrder) ? (rr::VERTEXATTRIBTYPE_NONPURE_UNORM_2_10_10_10_REV) :
99 (rr::VERTEXATTRIBTYPE_NONPURE_UNORM_2_10_10_10_REV_BGRA);
100
101 case GL_BYTE:
102 if (!normalizedInteger)
103 return rr::VERTEXATTRIBTYPE_NONPURE_INT8;
104 else if (useClampingNormalization)
105 return rr::VERTEXATTRIBTYPE_NONPURE_SNORM8_CLAMP;
106 else
107 return rr::VERTEXATTRIBTYPE_NONPURE_SNORM8_SCALE;
108
109 case GL_SHORT:
110 if (!normalizedInteger)
111 return rr::VERTEXATTRIBTYPE_NONPURE_INT16;
112 else if (useClampingNormalization)
113 return rr::VERTEXATTRIBTYPE_NONPURE_SNORM16_CLAMP;
114 else
115 return rr::VERTEXATTRIBTYPE_NONPURE_SNORM16_SCALE;
116
117 case GL_INT:
118 if (!normalizedInteger)
119 return rr::VERTEXATTRIBTYPE_NONPURE_INT32;
120 else if (useClampingNormalization)
121 return rr::VERTEXATTRIBTYPE_NONPURE_SNORM32_CLAMP;
122 else
123 return rr::VERTEXATTRIBTYPE_NONPURE_SNORM32_SCALE;
124
125 case GL_INT_2_10_10_10_REV:
126 if (!normalizedInteger)
127 return rr::VERTEXATTRIBTYPE_NONPURE_INT_2_10_10_10_REV;
128 else if (useClampingNormalization)
129 return (!bgraComponentOrder) ? (rr::VERTEXATTRIBTYPE_NONPURE_SNORM_2_10_10_10_REV_CLAMP) :
130 (rr::VERTEXATTRIBTYPE_NONPURE_SNORM_2_10_10_10_REV_CLAMP_BGRA);
131 else
132 return (!bgraComponentOrder) ? (rr::VERTEXATTRIBTYPE_NONPURE_SNORM_2_10_10_10_REV_SCALE) :
133 (rr::VERTEXATTRIBTYPE_NONPURE_SNORM_2_10_10_10_REV_SCALE_BGRA);
134
135 default:
136 DE_ASSERT(false);
137 return rr::VERTEXATTRIBTYPE_LAST;
138 }
139 }
140
mapGLSize(int size)141 int mapGLSize(int size)
142 {
143 switch (size)
144 {
145 case 1:
146 return 1;
147 case 2:
148 return 2;
149 case 3:
150 return 3;
151 case 4:
152 return 4;
153 case GL_BGRA:
154 return 4;
155
156 default:
157 DE_ASSERT(false);
158 return 0;
159 }
160 }
161
mapGLPrimitiveType(uint32_t type)162 rr::PrimitiveType mapGLPrimitiveType(uint32_t type)
163 {
164 switch (type)
165 {
166 case GL_TRIANGLES:
167 return rr::PRIMITIVETYPE_TRIANGLES;
168 case GL_TRIANGLE_STRIP:
169 return rr::PRIMITIVETYPE_TRIANGLE_STRIP;
170 case GL_TRIANGLE_FAN:
171 return rr::PRIMITIVETYPE_TRIANGLE_FAN;
172 case GL_LINES:
173 return rr::PRIMITIVETYPE_LINES;
174 case GL_LINE_STRIP:
175 return rr::PRIMITIVETYPE_LINE_STRIP;
176 case GL_LINE_LOOP:
177 return rr::PRIMITIVETYPE_LINE_LOOP;
178 case GL_POINTS:
179 return rr::PRIMITIVETYPE_POINTS;
180 case GL_LINES_ADJACENCY:
181 return rr::PRIMITIVETYPE_LINES_ADJACENCY;
182 case GL_LINE_STRIP_ADJACENCY:
183 return rr::PRIMITIVETYPE_LINE_STRIP_ADJACENCY;
184 case GL_TRIANGLES_ADJACENCY:
185 return rr::PRIMITIVETYPE_TRIANGLES_ADJACENCY;
186 case GL_TRIANGLE_STRIP_ADJACENCY:
187 return rr::PRIMITIVETYPE_TRIANGLE_STRIP_ADJACENCY;
188 default:
189 DE_ASSERT(false);
190 return rr::PRIMITIVETYPE_LAST;
191 }
192 }
193
mapGLIndexType(uint32_t type)194 rr::IndexType mapGLIndexType(uint32_t type)
195 {
196 switch (type)
197 {
198 case GL_UNSIGNED_BYTE:
199 return rr::INDEXTYPE_UINT8;
200 case GL_UNSIGNED_SHORT:
201 return rr::INDEXTYPE_UINT16;
202 case GL_UNSIGNED_INT:
203 return rr::INDEXTYPE_UINT32;
204 default:
205 DE_ASSERT(false);
206 return rr::INDEXTYPE_LAST;
207 }
208 }
209
mapGLGeometryShaderOutputType(uint32_t primitive)210 rr::GeometryShaderOutputType mapGLGeometryShaderOutputType(uint32_t primitive)
211 {
212 switch (primitive)
213 {
214 case GL_POINTS:
215 return rr::GEOMETRYSHADEROUTPUTTYPE_POINTS;
216 case GL_LINE_STRIP:
217 return rr::GEOMETRYSHADEROUTPUTTYPE_LINE_STRIP;
218 case GL_TRIANGLE_STRIP:
219 return rr::GEOMETRYSHADEROUTPUTTYPE_TRIANGLE_STRIP;
220 default:
221 DE_ASSERT(false);
222 return rr::GEOMETRYSHADEROUTPUTTYPE_LAST;
223 }
224 }
225
mapGLGeometryShaderInputType(uint32_t primitive)226 rr::GeometryShaderInputType mapGLGeometryShaderInputType(uint32_t primitive)
227 {
228 switch (primitive)
229 {
230 case GL_POINTS:
231 return rr::GEOMETRYSHADERINPUTTYPE_POINTS;
232 case GL_LINES:
233 return rr::GEOMETRYSHADERINPUTTYPE_LINES;
234 case GL_LINE_STRIP:
235 return rr::GEOMETRYSHADERINPUTTYPE_LINES;
236 case GL_LINE_LOOP:
237 return rr::GEOMETRYSHADERINPUTTYPE_LINES;
238 case GL_TRIANGLES:
239 return rr::GEOMETRYSHADERINPUTTYPE_TRIANGLES;
240 case GL_TRIANGLE_STRIP:
241 return rr::GEOMETRYSHADERINPUTTYPE_TRIANGLES;
242 case GL_TRIANGLE_FAN:
243 return rr::GEOMETRYSHADERINPUTTYPE_TRIANGLES;
244 case GL_LINES_ADJACENCY:
245 return rr::GEOMETRYSHADERINPUTTYPE_LINES_ADJACENCY;
246 case GL_LINE_STRIP_ADJACENCY:
247 return rr::GEOMETRYSHADERINPUTTYPE_LINES_ADJACENCY;
248 case GL_TRIANGLES_ADJACENCY:
249 return rr::GEOMETRYSHADERINPUTTYPE_TRIANGLES_ADJACENCY;
250 case GL_TRIANGLE_STRIP_ADJACENCY:
251 return rr::GEOMETRYSHADERINPUTTYPE_TRIANGLES_ADJACENCY;
252 default:
253 DE_ASSERT(false);
254 return rr::GEOMETRYSHADERINPUTTYPE_LAST;
255 }
256 }
257
mapGLTestFunc(uint32_t func)258 rr::TestFunc mapGLTestFunc(uint32_t func)
259 {
260 switch (func)
261 {
262 case GL_ALWAYS:
263 return rr::TESTFUNC_ALWAYS;
264 case GL_EQUAL:
265 return rr::TESTFUNC_EQUAL;
266 case GL_GEQUAL:
267 return rr::TESTFUNC_GEQUAL;
268 case GL_GREATER:
269 return rr::TESTFUNC_GREATER;
270 case GL_LEQUAL:
271 return rr::TESTFUNC_LEQUAL;
272 case GL_LESS:
273 return rr::TESTFUNC_LESS;
274 case GL_NEVER:
275 return rr::TESTFUNC_NEVER;
276 case GL_NOTEQUAL:
277 return rr::TESTFUNC_NOTEQUAL;
278 default:
279 DE_ASSERT(false);
280 return rr::TESTFUNC_LAST;
281 }
282 }
283
mapGLStencilOp(uint32_t op)284 rr::StencilOp mapGLStencilOp(uint32_t op)
285 {
286 switch (op)
287 {
288 case GL_KEEP:
289 return rr::STENCILOP_KEEP;
290 case GL_ZERO:
291 return rr::STENCILOP_ZERO;
292 case GL_REPLACE:
293 return rr::STENCILOP_REPLACE;
294 case GL_INCR:
295 return rr::STENCILOP_INCR;
296 case GL_DECR:
297 return rr::STENCILOP_DECR;
298 case GL_INCR_WRAP:
299 return rr::STENCILOP_INCR_WRAP;
300 case GL_DECR_WRAP:
301 return rr::STENCILOP_DECR_WRAP;
302 case GL_INVERT:
303 return rr::STENCILOP_INVERT;
304 default:
305 DE_ASSERT(false);
306 return rr::STENCILOP_LAST;
307 }
308 }
309
mapGLBlendEquation(uint32_t equation)310 rr::BlendEquation mapGLBlendEquation(uint32_t equation)
311 {
312 switch (equation)
313 {
314 case GL_FUNC_ADD:
315 return rr::BLENDEQUATION_ADD;
316 case GL_FUNC_SUBTRACT:
317 return rr::BLENDEQUATION_SUBTRACT;
318 case GL_FUNC_REVERSE_SUBTRACT:
319 return rr::BLENDEQUATION_REVERSE_SUBTRACT;
320 case GL_MIN:
321 return rr::BLENDEQUATION_MIN;
322 case GL_MAX:
323 return rr::BLENDEQUATION_MAX;
324 default:
325 DE_ASSERT(false);
326 return rr::BLENDEQUATION_LAST;
327 }
328 }
329
mapGLBlendEquationAdvanced(uint32_t equation)330 rr::BlendEquationAdvanced mapGLBlendEquationAdvanced(uint32_t equation)
331 {
332 switch (equation)
333 {
334 case GL_MULTIPLY_KHR:
335 return rr::BLENDEQUATION_ADVANCED_MULTIPLY;
336 case GL_SCREEN_KHR:
337 return rr::BLENDEQUATION_ADVANCED_SCREEN;
338 case GL_OVERLAY_KHR:
339 return rr::BLENDEQUATION_ADVANCED_OVERLAY;
340 case GL_DARKEN_KHR:
341 return rr::BLENDEQUATION_ADVANCED_DARKEN;
342 case GL_LIGHTEN_KHR:
343 return rr::BLENDEQUATION_ADVANCED_LIGHTEN;
344 case GL_COLORDODGE_KHR:
345 return rr::BLENDEQUATION_ADVANCED_COLORDODGE;
346 case GL_COLORBURN_KHR:
347 return rr::BLENDEQUATION_ADVANCED_COLORBURN;
348 case GL_HARDLIGHT_KHR:
349 return rr::BLENDEQUATION_ADVANCED_HARDLIGHT;
350 case GL_SOFTLIGHT_KHR:
351 return rr::BLENDEQUATION_ADVANCED_SOFTLIGHT;
352 case GL_DIFFERENCE_KHR:
353 return rr::BLENDEQUATION_ADVANCED_DIFFERENCE;
354 case GL_EXCLUSION_KHR:
355 return rr::BLENDEQUATION_ADVANCED_EXCLUSION;
356 case GL_HSL_HUE_KHR:
357 return rr::BLENDEQUATION_ADVANCED_HSL_HUE;
358 case GL_HSL_SATURATION_KHR:
359 return rr::BLENDEQUATION_ADVANCED_HSL_SATURATION;
360 case GL_HSL_COLOR_KHR:
361 return rr::BLENDEQUATION_ADVANCED_HSL_COLOR;
362 case GL_HSL_LUMINOSITY_KHR:
363 return rr::BLENDEQUATION_ADVANCED_HSL_LUMINOSITY;
364 default:
365 DE_ASSERT(false);
366 return rr::BLENDEQUATION_ADVANCED_LAST;
367 }
368 }
369
mapGLBlendFunc(uint32_t func)370 rr::BlendFunc mapGLBlendFunc(uint32_t func)
371 {
372 switch (func)
373 {
374 case GL_ZERO:
375 return rr::BLENDFUNC_ZERO;
376 case GL_ONE:
377 return rr::BLENDFUNC_ONE;
378 case GL_SRC_COLOR:
379 return rr::BLENDFUNC_SRC_COLOR;
380 case GL_ONE_MINUS_SRC_COLOR:
381 return rr::BLENDFUNC_ONE_MINUS_SRC_COLOR;
382 case GL_DST_COLOR:
383 return rr::BLENDFUNC_DST_COLOR;
384 case GL_ONE_MINUS_DST_COLOR:
385 return rr::BLENDFUNC_ONE_MINUS_DST_COLOR;
386 case GL_SRC_ALPHA:
387 return rr::BLENDFUNC_SRC_ALPHA;
388 case GL_ONE_MINUS_SRC_ALPHA:
389 return rr::BLENDFUNC_ONE_MINUS_SRC_ALPHA;
390 case GL_DST_ALPHA:
391 return rr::BLENDFUNC_DST_ALPHA;
392 case GL_ONE_MINUS_DST_ALPHA:
393 return rr::BLENDFUNC_ONE_MINUS_DST_ALPHA;
394 case GL_CONSTANT_COLOR:
395 return rr::BLENDFUNC_CONSTANT_COLOR;
396 case GL_ONE_MINUS_CONSTANT_COLOR:
397 return rr::BLENDFUNC_ONE_MINUS_CONSTANT_COLOR;
398 case GL_CONSTANT_ALPHA:
399 return rr::BLENDFUNC_CONSTANT_ALPHA;
400 case GL_ONE_MINUS_CONSTANT_ALPHA:
401 return rr::BLENDFUNC_ONE_MINUS_CONSTANT_ALPHA;
402 case GL_SRC_ALPHA_SATURATE:
403 return rr::BLENDFUNC_SRC_ALPHA_SATURATE;
404 case GL_SRC1_COLOR:
405 return rr::BLENDFUNC_SRC1_COLOR;
406 case GL_ONE_MINUS_SRC1_COLOR:
407 return rr::BLENDFUNC_ONE_MINUS_SRC1_COLOR;
408 case GL_SRC1_ALPHA:
409 return rr::BLENDFUNC_SRC1_ALPHA;
410 case GL_ONE_MINUS_SRC1_ALPHA:
411 return rr::BLENDFUNC_ONE_MINUS_SRC1_ALPHA;
412 default:
413 DE_ASSERT(false);
414 return rr::BLENDFUNC_LAST;
415 }
416 }
417
418 } // namespace rr_util
419 } // namespace sglr
420