xref: /aosp_15_r20/external/deqp/framework/opengl/simplereference/sglrReferenceUtils.cpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
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