xref: /aosp_15_r20/external/deqp/framework/opengl/gluShaderUtil.hpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
1*35238bceSAndroid Build Coastguard Worker #ifndef _GLUSHADERUTIL_HPP
2*35238bceSAndroid Build Coastguard Worker #define _GLUSHADERUTIL_HPP
3*35238bceSAndroid Build Coastguard Worker /*-------------------------------------------------------------------------
4*35238bceSAndroid Build Coastguard Worker  * drawElements Quality Program OpenGL ES Utilities
5*35238bceSAndroid Build Coastguard Worker  * ------------------------------------------------
6*35238bceSAndroid Build Coastguard Worker  *
7*35238bceSAndroid Build Coastguard Worker  * Copyright 2014 The Android Open Source Project
8*35238bceSAndroid Build Coastguard Worker  *
9*35238bceSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
10*35238bceSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
11*35238bceSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
12*35238bceSAndroid Build Coastguard Worker  *
13*35238bceSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
14*35238bceSAndroid Build Coastguard Worker  *
15*35238bceSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
16*35238bceSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
17*35238bceSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18*35238bceSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
19*35238bceSAndroid Build Coastguard Worker  * limitations under the License.
20*35238bceSAndroid Build Coastguard Worker  *
21*35238bceSAndroid Build Coastguard Worker  *//*!
22*35238bceSAndroid Build Coastguard Worker  * \file
23*35238bceSAndroid Build Coastguard Worker  * \brief Shader utilities.
24*35238bceSAndroid Build Coastguard Worker  *//*--------------------------------------------------------------------*/
25*35238bceSAndroid Build Coastguard Worker 
26*35238bceSAndroid Build Coastguard Worker #include "tcuDefs.hpp"
27*35238bceSAndroid Build Coastguard Worker #include "deInt32.h"
28*35238bceSAndroid Build Coastguard Worker #include "gluRenderContext.hpp"
29*35238bceSAndroid Build Coastguard Worker #include "tcuVector.hpp"
30*35238bceSAndroid Build Coastguard Worker #include "tcuVector.hpp"
31*35238bceSAndroid Build Coastguard Worker #include "tcuMatrix.hpp"
32*35238bceSAndroid Build Coastguard Worker 
33*35238bceSAndroid Build Coastguard Worker namespace glu
34*35238bceSAndroid Build Coastguard Worker {
35*35238bceSAndroid Build Coastguard Worker 
36*35238bceSAndroid Build Coastguard Worker // ShadingLanguageVersion
37*35238bceSAndroid Build Coastguard Worker 
38*35238bceSAndroid Build Coastguard Worker enum GLSLVersion
39*35238bceSAndroid Build Coastguard Worker {
40*35238bceSAndroid Build Coastguard Worker     GLSL_VERSION_100_ES = 0, //!< GLSL ES 1.0
41*35238bceSAndroid Build Coastguard Worker     GLSL_VERSION_300_ES,     //!< GLSL ES 3.0
42*35238bceSAndroid Build Coastguard Worker     GLSL_VERSION_310_ES,     //!< GLSL ES 3.1
43*35238bceSAndroid Build Coastguard Worker     GLSL_VERSION_320_ES,     //!< GLSL ES 3.2
44*35238bceSAndroid Build Coastguard Worker 
45*35238bceSAndroid Build Coastguard Worker     GLSL_VERSION_130, //!< GLSL 1.3
46*35238bceSAndroid Build Coastguard Worker     GLSL_VERSION_140, //!< GLSL 1.4
47*35238bceSAndroid Build Coastguard Worker     GLSL_VERSION_150, //!< GLSL 1.5
48*35238bceSAndroid Build Coastguard Worker     GLSL_VERSION_330, //!< GLSL 3.0
49*35238bceSAndroid Build Coastguard Worker     GLSL_VERSION_400, //!< GLSL 4.0
50*35238bceSAndroid Build Coastguard Worker     GLSL_VERSION_410, //!< GLSL 4.1
51*35238bceSAndroid Build Coastguard Worker     GLSL_VERSION_420, //!< GLSL 4.2
52*35238bceSAndroid Build Coastguard Worker     GLSL_VERSION_430, //!< GLSL 4.3
53*35238bceSAndroid Build Coastguard Worker     GLSL_VERSION_440, //!< GLSL 4.4
54*35238bceSAndroid Build Coastguard Worker     GLSL_VERSION_450, //!< GLSL 4.5
55*35238bceSAndroid Build Coastguard Worker     GLSL_VERSION_460, //!< GLSL 4.6
56*35238bceSAndroid Build Coastguard Worker 
57*35238bceSAndroid Build Coastguard Worker     GLSL_VERSION_LAST
58*35238bceSAndroid Build Coastguard Worker };
59*35238bceSAndroid Build Coastguard Worker 
60*35238bceSAndroid Build Coastguard Worker const char *getGLSLVersionName(GLSLVersion version);
61*35238bceSAndroid Build Coastguard Worker const char *getGLSLVersionDeclaration(GLSLVersion version);
62*35238bceSAndroid Build Coastguard Worker bool glslVersionUsesInOutQualifiers(GLSLVersion version);
63*35238bceSAndroid Build Coastguard Worker bool glslVersionIsES(GLSLVersion version);
64*35238bceSAndroid Build Coastguard Worker bool isGLSLVersionSupported(ContextType type, GLSLVersion version);
65*35238bceSAndroid Build Coastguard Worker GLSLVersion getContextTypeGLSLVersion(ContextType type);
66*35238bceSAndroid Build Coastguard Worker 
67*35238bceSAndroid Build Coastguard Worker // ShaderType
68*35238bceSAndroid Build Coastguard Worker 
69*35238bceSAndroid Build Coastguard Worker enum ShaderType
70*35238bceSAndroid Build Coastguard Worker {
71*35238bceSAndroid Build Coastguard Worker     SHADERTYPE_VERTEX = 0,
72*35238bceSAndroid Build Coastguard Worker     SHADERTYPE_FRAGMENT,
73*35238bceSAndroid Build Coastguard Worker     SHADERTYPE_GEOMETRY,
74*35238bceSAndroid Build Coastguard Worker     SHADERTYPE_TESSELLATION_CONTROL,
75*35238bceSAndroid Build Coastguard Worker     SHADERTYPE_TESSELLATION_EVALUATION,
76*35238bceSAndroid Build Coastguard Worker     SHADERTYPE_COMPUTE,
77*35238bceSAndroid Build Coastguard Worker 
78*35238bceSAndroid Build Coastguard Worker     SHADERTYPE_RAYGEN,
79*35238bceSAndroid Build Coastguard Worker     SHADERTYPE_ANY_HIT,
80*35238bceSAndroid Build Coastguard Worker     SHADERTYPE_CLOSEST_HIT,
81*35238bceSAndroid Build Coastguard Worker     SHADERTYPE_MISS,
82*35238bceSAndroid Build Coastguard Worker     SHADERTYPE_INTERSECTION,
83*35238bceSAndroid Build Coastguard Worker     SHADERTYPE_CALLABLE,
84*35238bceSAndroid Build Coastguard Worker 
85*35238bceSAndroid Build Coastguard Worker     SHADERTYPE_TASK,
86*35238bceSAndroid Build Coastguard Worker     SHADERTYPE_MESH,
87*35238bceSAndroid Build Coastguard Worker 
88*35238bceSAndroid Build Coastguard Worker     SHADERTYPE_LAST
89*35238bceSAndroid Build Coastguard Worker };
90*35238bceSAndroid Build Coastguard Worker 
91*35238bceSAndroid Build Coastguard Worker const char *getShaderTypeName(ShaderType shaderType);
92*35238bceSAndroid Build Coastguard Worker std::string getShaderTypePostfix(ShaderType shaderType);
93*35238bceSAndroid Build Coastguard Worker 
94*35238bceSAndroid Build Coastguard Worker // Precision
95*35238bceSAndroid Build Coastguard Worker 
96*35238bceSAndroid Build Coastguard Worker enum Precision
97*35238bceSAndroid Build Coastguard Worker {
98*35238bceSAndroid Build Coastguard Worker     PRECISION_LOWP = 0,
99*35238bceSAndroid Build Coastguard Worker     PRECISION_MEDIUMP,
100*35238bceSAndroid Build Coastguard Worker     PRECISION_HIGHP,
101*35238bceSAndroid Build Coastguard Worker 
102*35238bceSAndroid Build Coastguard Worker     PRECISION_LAST
103*35238bceSAndroid Build Coastguard Worker };
104*35238bceSAndroid Build Coastguard Worker 
105*35238bceSAndroid Build Coastguard Worker const char *getPrecisionName(Precision precision);
106*35238bceSAndroid Build Coastguard Worker std::string getPrecisionPostfix(Precision precision);
107*35238bceSAndroid Build Coastguard Worker 
108*35238bceSAndroid Build Coastguard Worker // DataType
109*35238bceSAndroid Build Coastguard Worker 
110*35238bceSAndroid Build Coastguard Worker enum DataType
111*35238bceSAndroid Build Coastguard Worker {
112*35238bceSAndroid Build Coastguard Worker     TYPE_INVALID = 0,
113*35238bceSAndroid Build Coastguard Worker 
114*35238bceSAndroid Build Coastguard Worker     TYPE_FLOAT,
115*35238bceSAndroid Build Coastguard Worker     TYPE_FLOAT_VEC2,
116*35238bceSAndroid Build Coastguard Worker     TYPE_FLOAT_VEC3,
117*35238bceSAndroid Build Coastguard Worker     TYPE_FLOAT_VEC4,
118*35238bceSAndroid Build Coastguard Worker     TYPE_FLOAT_MAT2,
119*35238bceSAndroid Build Coastguard Worker     TYPE_FLOAT_MAT2X3,
120*35238bceSAndroid Build Coastguard Worker     TYPE_FLOAT_MAT2X4,
121*35238bceSAndroid Build Coastguard Worker     TYPE_FLOAT_MAT3X2,
122*35238bceSAndroid Build Coastguard Worker     TYPE_FLOAT_MAT3,
123*35238bceSAndroid Build Coastguard Worker     TYPE_FLOAT_MAT3X4,
124*35238bceSAndroid Build Coastguard Worker     TYPE_FLOAT_MAT4X2,
125*35238bceSAndroid Build Coastguard Worker     TYPE_FLOAT_MAT4X3,
126*35238bceSAndroid Build Coastguard Worker     TYPE_FLOAT_MAT4,
127*35238bceSAndroid Build Coastguard Worker 
128*35238bceSAndroid Build Coastguard Worker     TYPE_DOUBLE,
129*35238bceSAndroid Build Coastguard Worker     TYPE_DOUBLE_VEC2,
130*35238bceSAndroid Build Coastguard Worker     TYPE_DOUBLE_VEC3,
131*35238bceSAndroid Build Coastguard Worker     TYPE_DOUBLE_VEC4,
132*35238bceSAndroid Build Coastguard Worker     TYPE_DOUBLE_MAT2,
133*35238bceSAndroid Build Coastguard Worker     TYPE_DOUBLE_MAT2X3,
134*35238bceSAndroid Build Coastguard Worker     TYPE_DOUBLE_MAT2X4,
135*35238bceSAndroid Build Coastguard Worker     TYPE_DOUBLE_MAT3X2,
136*35238bceSAndroid Build Coastguard Worker     TYPE_DOUBLE_MAT3,
137*35238bceSAndroid Build Coastguard Worker     TYPE_DOUBLE_MAT3X4,
138*35238bceSAndroid Build Coastguard Worker     TYPE_DOUBLE_MAT4X2,
139*35238bceSAndroid Build Coastguard Worker     TYPE_DOUBLE_MAT4X3,
140*35238bceSAndroid Build Coastguard Worker     TYPE_DOUBLE_MAT4,
141*35238bceSAndroid Build Coastguard Worker 
142*35238bceSAndroid Build Coastguard Worker     TYPE_INT,
143*35238bceSAndroid Build Coastguard Worker     TYPE_INT_VEC2,
144*35238bceSAndroid Build Coastguard Worker     TYPE_INT_VEC3,
145*35238bceSAndroid Build Coastguard Worker     TYPE_INT_VEC4,
146*35238bceSAndroid Build Coastguard Worker 
147*35238bceSAndroid Build Coastguard Worker     TYPE_UINT,
148*35238bceSAndroid Build Coastguard Worker     TYPE_UINT_VEC2,
149*35238bceSAndroid Build Coastguard Worker     TYPE_UINT_VEC3,
150*35238bceSAndroid Build Coastguard Worker     TYPE_UINT_VEC4,
151*35238bceSAndroid Build Coastguard Worker 
152*35238bceSAndroid Build Coastguard Worker     TYPE_BOOL,
153*35238bceSAndroid Build Coastguard Worker     TYPE_BOOL_VEC2,
154*35238bceSAndroid Build Coastguard Worker     TYPE_BOOL_VEC3,
155*35238bceSAndroid Build Coastguard Worker     TYPE_BOOL_VEC4,
156*35238bceSAndroid Build Coastguard Worker 
157*35238bceSAndroid Build Coastguard Worker     TYPE_SAMPLER_1D,
158*35238bceSAndroid Build Coastguard Worker     TYPE_SAMPLER_2D,
159*35238bceSAndroid Build Coastguard Worker     TYPE_SAMPLER_CUBE,
160*35238bceSAndroid Build Coastguard Worker     TYPE_SAMPLER_1D_ARRAY,
161*35238bceSAndroid Build Coastguard Worker     TYPE_SAMPLER_2D_ARRAY,
162*35238bceSAndroid Build Coastguard Worker     TYPE_SAMPLER_3D,
163*35238bceSAndroid Build Coastguard Worker     TYPE_SAMPLER_CUBE_ARRAY,
164*35238bceSAndroid Build Coastguard Worker 
165*35238bceSAndroid Build Coastguard Worker     TYPE_SAMPLER_1D_SHADOW,
166*35238bceSAndroid Build Coastguard Worker     TYPE_SAMPLER_2D_SHADOW,
167*35238bceSAndroid Build Coastguard Worker     TYPE_SAMPLER_CUBE_SHADOW,
168*35238bceSAndroid Build Coastguard Worker     TYPE_SAMPLER_1D_ARRAY_SHADOW,
169*35238bceSAndroid Build Coastguard Worker     TYPE_SAMPLER_2D_ARRAY_SHADOW,
170*35238bceSAndroid Build Coastguard Worker     TYPE_SAMPLER_CUBE_ARRAY_SHADOW,
171*35238bceSAndroid Build Coastguard Worker 
172*35238bceSAndroid Build Coastguard Worker     TYPE_INT_SAMPLER_1D,
173*35238bceSAndroid Build Coastguard Worker     TYPE_INT_SAMPLER_2D,
174*35238bceSAndroid Build Coastguard Worker     TYPE_INT_SAMPLER_CUBE,
175*35238bceSAndroid Build Coastguard Worker     TYPE_INT_SAMPLER_1D_ARRAY,
176*35238bceSAndroid Build Coastguard Worker     TYPE_INT_SAMPLER_2D_ARRAY,
177*35238bceSAndroid Build Coastguard Worker     TYPE_INT_SAMPLER_3D,
178*35238bceSAndroid Build Coastguard Worker     TYPE_INT_SAMPLER_CUBE_ARRAY,
179*35238bceSAndroid Build Coastguard Worker 
180*35238bceSAndroid Build Coastguard Worker     TYPE_UINT_SAMPLER_1D,
181*35238bceSAndroid Build Coastguard Worker     TYPE_UINT_SAMPLER_2D,
182*35238bceSAndroid Build Coastguard Worker     TYPE_UINT_SAMPLER_CUBE,
183*35238bceSAndroid Build Coastguard Worker     TYPE_UINT_SAMPLER_1D_ARRAY,
184*35238bceSAndroid Build Coastguard Worker     TYPE_UINT_SAMPLER_2D_ARRAY,
185*35238bceSAndroid Build Coastguard Worker     TYPE_UINT_SAMPLER_3D,
186*35238bceSAndroid Build Coastguard Worker     TYPE_UINT_SAMPLER_CUBE_ARRAY,
187*35238bceSAndroid Build Coastguard Worker 
188*35238bceSAndroid Build Coastguard Worker     TYPE_SAMPLER_2D_MULTISAMPLE,
189*35238bceSAndroid Build Coastguard Worker     TYPE_INT_SAMPLER_2D_MULTISAMPLE,
190*35238bceSAndroid Build Coastguard Worker     TYPE_UINT_SAMPLER_2D_MULTISAMPLE,
191*35238bceSAndroid Build Coastguard Worker 
192*35238bceSAndroid Build Coastguard Worker     TYPE_IMAGE_2D,
193*35238bceSAndroid Build Coastguard Worker     TYPE_IMAGE_CUBE,
194*35238bceSAndroid Build Coastguard Worker     TYPE_IMAGE_2D_ARRAY,
195*35238bceSAndroid Build Coastguard Worker     TYPE_IMAGE_3D,
196*35238bceSAndroid Build Coastguard Worker     TYPE_IMAGE_CUBE_ARRAY,
197*35238bceSAndroid Build Coastguard Worker 
198*35238bceSAndroid Build Coastguard Worker     TYPE_INT_IMAGE_2D,
199*35238bceSAndroid Build Coastguard Worker     TYPE_INT_IMAGE_CUBE,
200*35238bceSAndroid Build Coastguard Worker     TYPE_INT_IMAGE_2D_ARRAY,
201*35238bceSAndroid Build Coastguard Worker     TYPE_INT_IMAGE_3D,
202*35238bceSAndroid Build Coastguard Worker     TYPE_INT_IMAGE_CUBE_ARRAY,
203*35238bceSAndroid Build Coastguard Worker 
204*35238bceSAndroid Build Coastguard Worker     TYPE_UINT_IMAGE_2D,
205*35238bceSAndroid Build Coastguard Worker     TYPE_UINT_IMAGE_CUBE,
206*35238bceSAndroid Build Coastguard Worker     TYPE_UINT_IMAGE_2D_ARRAY,
207*35238bceSAndroid Build Coastguard Worker     TYPE_UINT_IMAGE_3D,
208*35238bceSAndroid Build Coastguard Worker     TYPE_UINT_IMAGE_CUBE_ARRAY,
209*35238bceSAndroid Build Coastguard Worker 
210*35238bceSAndroid Build Coastguard Worker     TYPE_UINT_ATOMIC_COUNTER,
211*35238bceSAndroid Build Coastguard Worker 
212*35238bceSAndroid Build Coastguard Worker     TYPE_SAMPLER_BUFFER,
213*35238bceSAndroid Build Coastguard Worker     TYPE_INT_SAMPLER_BUFFER,
214*35238bceSAndroid Build Coastguard Worker     TYPE_UINT_SAMPLER_BUFFER,
215*35238bceSAndroid Build Coastguard Worker 
216*35238bceSAndroid Build Coastguard Worker     TYPE_SAMPLER_2D_MULTISAMPLE_ARRAY,
217*35238bceSAndroid Build Coastguard Worker     TYPE_INT_SAMPLER_2D_MULTISAMPLE_ARRAY,
218*35238bceSAndroid Build Coastguard Worker     TYPE_UINT_SAMPLER_2D_MULTISAMPLE_ARRAY,
219*35238bceSAndroid Build Coastguard Worker 
220*35238bceSAndroid Build Coastguard Worker     TYPE_IMAGE_BUFFER,
221*35238bceSAndroid Build Coastguard Worker     TYPE_INT_IMAGE_BUFFER,
222*35238bceSAndroid Build Coastguard Worker     TYPE_UINT_IMAGE_BUFFER,
223*35238bceSAndroid Build Coastguard Worker 
224*35238bceSAndroid Build Coastguard Worker     TYPE_UINT8,
225*35238bceSAndroid Build Coastguard Worker     TYPE_UINT8_VEC2,
226*35238bceSAndroid Build Coastguard Worker     TYPE_UINT8_VEC3,
227*35238bceSAndroid Build Coastguard Worker     TYPE_UINT8_VEC4,
228*35238bceSAndroid Build Coastguard Worker 
229*35238bceSAndroid Build Coastguard Worker     TYPE_INT8,
230*35238bceSAndroid Build Coastguard Worker     TYPE_INT8_VEC2,
231*35238bceSAndroid Build Coastguard Worker     TYPE_INT8_VEC3,
232*35238bceSAndroid Build Coastguard Worker     TYPE_INT8_VEC4,
233*35238bceSAndroid Build Coastguard Worker 
234*35238bceSAndroid Build Coastguard Worker     TYPE_UINT16,
235*35238bceSAndroid Build Coastguard Worker     TYPE_UINT16_VEC2,
236*35238bceSAndroid Build Coastguard Worker     TYPE_UINT16_VEC3,
237*35238bceSAndroid Build Coastguard Worker     TYPE_UINT16_VEC4,
238*35238bceSAndroid Build Coastguard Worker 
239*35238bceSAndroid Build Coastguard Worker     TYPE_INT16,
240*35238bceSAndroid Build Coastguard Worker     TYPE_INT16_VEC2,
241*35238bceSAndroid Build Coastguard Worker     TYPE_INT16_VEC3,
242*35238bceSAndroid Build Coastguard Worker     TYPE_INT16_VEC4,
243*35238bceSAndroid Build Coastguard Worker 
244*35238bceSAndroid Build Coastguard Worker     TYPE_FLOAT16,
245*35238bceSAndroid Build Coastguard Worker     TYPE_FLOAT16_VEC2,
246*35238bceSAndroid Build Coastguard Worker     TYPE_FLOAT16_VEC3,
247*35238bceSAndroid Build Coastguard Worker     TYPE_FLOAT16_VEC4,
248*35238bceSAndroid Build Coastguard Worker     TYPE_FLOAT16_MAT2,
249*35238bceSAndroid Build Coastguard Worker     TYPE_FLOAT16_MAT2X3,
250*35238bceSAndroid Build Coastguard Worker     TYPE_FLOAT16_MAT2X4,
251*35238bceSAndroid Build Coastguard Worker     TYPE_FLOAT16_MAT3X2,
252*35238bceSAndroid Build Coastguard Worker     TYPE_FLOAT16_MAT3,
253*35238bceSAndroid Build Coastguard Worker     TYPE_FLOAT16_MAT3X4,
254*35238bceSAndroid Build Coastguard Worker     TYPE_FLOAT16_MAT4X2,
255*35238bceSAndroid Build Coastguard Worker     TYPE_FLOAT16_MAT4X3,
256*35238bceSAndroid Build Coastguard Worker     TYPE_FLOAT16_MAT4,
257*35238bceSAndroid Build Coastguard Worker 
258*35238bceSAndroid Build Coastguard Worker     TYPE_LAST
259*35238bceSAndroid Build Coastguard Worker };
260*35238bceSAndroid Build Coastguard Worker 
261*35238bceSAndroid Build Coastguard Worker const char *getDataTypeName(DataType dataType);
262*35238bceSAndroid Build Coastguard Worker int getDataTypeScalarSize(DataType dataType);
263*35238bceSAndroid Build Coastguard Worker DataType getDataTypeScalarType(DataType dataType);
264*35238bceSAndroid Build Coastguard Worker DataType getDataTypeFloat16Scalars(DataType dataType);
265*35238bceSAndroid Build Coastguard Worker DataType getDataTypeFloatScalars(DataType dataType);
266*35238bceSAndroid Build Coastguard Worker DataType getDataTypeDoubleScalars(DataType dataType);
267*35238bceSAndroid Build Coastguard Worker DataType getDataTypeVector(DataType scalarType, int size);
268*35238bceSAndroid Build Coastguard Worker DataType getDataTypeFloatVec(int vecSize);
269*35238bceSAndroid Build Coastguard Worker DataType getDataTypeIntVec(int vecSize);
270*35238bceSAndroid Build Coastguard Worker DataType getDataTypeUintVec(int vecSize);
271*35238bceSAndroid Build Coastguard Worker DataType getDataTypeBoolVec(int vecSize);
272*35238bceSAndroid Build Coastguard Worker DataType getDataTypeMatrix(int numCols, int numRows);
273*35238bceSAndroid Build Coastguard Worker DataType getDataTypeFromGLType(uint32_t glType);
274*35238bceSAndroid Build Coastguard Worker 
isDataTypeFloat16OrVec(DataType dataType)275*35238bceSAndroid Build Coastguard Worker inline bool isDataTypeFloat16OrVec(DataType dataType)
276*35238bceSAndroid Build Coastguard Worker {
277*35238bceSAndroid Build Coastguard Worker     return (dataType >= TYPE_FLOAT16) && (dataType <= TYPE_FLOAT16_MAT4);
278*35238bceSAndroid Build Coastguard Worker }
isDataTypeFloatOrVec(DataType dataType)279*35238bceSAndroid Build Coastguard Worker inline bool isDataTypeFloatOrVec(DataType dataType)
280*35238bceSAndroid Build Coastguard Worker {
281*35238bceSAndroid Build Coastguard Worker     return (dataType >= TYPE_FLOAT) && (dataType <= TYPE_FLOAT_VEC4);
282*35238bceSAndroid Build Coastguard Worker }
isDataTypeFloatType(DataType dataType)283*35238bceSAndroid Build Coastguard Worker inline bool isDataTypeFloatType(DataType dataType)
284*35238bceSAndroid Build Coastguard Worker {
285*35238bceSAndroid Build Coastguard Worker     return (dataType >= TYPE_FLOAT) && (dataType <= TYPE_FLOAT_MAT4);
286*35238bceSAndroid Build Coastguard Worker }
isDataTypeDoubleType(DataType dataType)287*35238bceSAndroid Build Coastguard Worker inline bool isDataTypeDoubleType(DataType dataType)
288*35238bceSAndroid Build Coastguard Worker {
289*35238bceSAndroid Build Coastguard Worker     return (dataType >= TYPE_DOUBLE) && (dataType <= TYPE_DOUBLE_MAT4);
290*35238bceSAndroid Build Coastguard Worker }
isDataTypeDoubleOrDVec(DataType dataType)291*35238bceSAndroid Build Coastguard Worker inline bool isDataTypeDoubleOrDVec(DataType dataType)
292*35238bceSAndroid Build Coastguard Worker {
293*35238bceSAndroid Build Coastguard Worker     return (dataType >= TYPE_DOUBLE) && (dataType <= TYPE_DOUBLE_VEC4);
294*35238bceSAndroid Build Coastguard Worker }
isDataTypeMatrix(DataType dataType)295*35238bceSAndroid Build Coastguard Worker inline bool isDataTypeMatrix(DataType dataType)
296*35238bceSAndroid Build Coastguard Worker {
297*35238bceSAndroid Build Coastguard Worker     return ((dataType >= TYPE_FLOAT_MAT2) && (dataType <= TYPE_FLOAT_MAT4)) ||
298*35238bceSAndroid Build Coastguard Worker            ((dataType >= TYPE_DOUBLE_MAT2) && (dataType <= TYPE_DOUBLE_MAT4)) ||
299*35238bceSAndroid Build Coastguard Worker            ((dataType >= TYPE_FLOAT16_MAT2) && (dataType <= TYPE_FLOAT16_MAT4));
300*35238bceSAndroid Build Coastguard Worker }
isDataTypeIntOrIVec(DataType dataType)301*35238bceSAndroid Build Coastguard Worker inline bool isDataTypeIntOrIVec(DataType dataType)
302*35238bceSAndroid Build Coastguard Worker {
303*35238bceSAndroid Build Coastguard Worker     return (dataType >= TYPE_INT) && (dataType <= TYPE_INT_VEC4);
304*35238bceSAndroid Build Coastguard Worker }
isDataTypeUintOrUVec(DataType dataType)305*35238bceSAndroid Build Coastguard Worker inline bool isDataTypeUintOrUVec(DataType dataType)
306*35238bceSAndroid Build Coastguard Worker {
307*35238bceSAndroid Build Coastguard Worker     return (dataType >= TYPE_UINT) && (dataType <= TYPE_UINT_VEC4);
308*35238bceSAndroid Build Coastguard Worker }
isDataTypeIntOrIVec8Bit(DataType dataType)309*35238bceSAndroid Build Coastguard Worker inline bool isDataTypeIntOrIVec8Bit(DataType dataType)
310*35238bceSAndroid Build Coastguard Worker {
311*35238bceSAndroid Build Coastguard Worker     return (dataType >= TYPE_INT8) && (dataType <= TYPE_INT8_VEC4);
312*35238bceSAndroid Build Coastguard Worker }
isDataTypeUintOrUVec8Bit(DataType dataType)313*35238bceSAndroid Build Coastguard Worker inline bool isDataTypeUintOrUVec8Bit(DataType dataType)
314*35238bceSAndroid Build Coastguard Worker {
315*35238bceSAndroid Build Coastguard Worker     return (dataType >= TYPE_UINT8) && (dataType <= TYPE_UINT8_VEC4);
316*35238bceSAndroid Build Coastguard Worker }
isDataTypeIntOrIVec16Bit(DataType dataType)317*35238bceSAndroid Build Coastguard Worker inline bool isDataTypeIntOrIVec16Bit(DataType dataType)
318*35238bceSAndroid Build Coastguard Worker {
319*35238bceSAndroid Build Coastguard Worker     return (dataType >= TYPE_INT16) && (dataType <= TYPE_INT16_VEC4);
320*35238bceSAndroid Build Coastguard Worker }
isDataTypeUintOrUVec16Bit(DataType dataType)321*35238bceSAndroid Build Coastguard Worker inline bool isDataTypeUintOrUVec16Bit(DataType dataType)
322*35238bceSAndroid Build Coastguard Worker {
323*35238bceSAndroid Build Coastguard Worker     return (dataType >= TYPE_UINT16) && (dataType <= TYPE_UINT16_VEC4);
324*35238bceSAndroid Build Coastguard Worker }
isDataTypeBoolOrBVec(DataType dataType)325*35238bceSAndroid Build Coastguard Worker inline bool isDataTypeBoolOrBVec(DataType dataType)
326*35238bceSAndroid Build Coastguard Worker {
327*35238bceSAndroid Build Coastguard Worker     return (dataType >= TYPE_BOOL) && (dataType <= TYPE_BOOL_VEC4);
328*35238bceSAndroid Build Coastguard Worker }
isDataTypeScalar(DataType dataType)329*35238bceSAndroid Build Coastguard Worker inline bool isDataTypeScalar(DataType dataType)
330*35238bceSAndroid Build Coastguard Worker {
331*35238bceSAndroid Build Coastguard Worker     return (dataType == TYPE_FLOAT) || (dataType == TYPE_DOUBLE) || (dataType == TYPE_INT) || (dataType == TYPE_UINT) ||
332*35238bceSAndroid Build Coastguard Worker            (dataType == TYPE_BOOL) || (dataType == TYPE_UINT8) || (dataType == TYPE_INT8) ||
333*35238bceSAndroid Build Coastguard Worker            (dataType == TYPE_UINT16) || (dataType == TYPE_INT16) || (dataType == TYPE_FLOAT16);
334*35238bceSAndroid Build Coastguard Worker }
isDataTypeVector(DataType dataType)335*35238bceSAndroid Build Coastguard Worker inline bool isDataTypeVector(DataType dataType)
336*35238bceSAndroid Build Coastguard Worker {
337*35238bceSAndroid Build Coastguard Worker     return deInRange32(dataType, TYPE_FLOAT_VEC2, TYPE_FLOAT_VEC4) ||
338*35238bceSAndroid Build Coastguard Worker            deInRange32(dataType, TYPE_DOUBLE_VEC2, TYPE_DOUBLE_VEC4) ||
339*35238bceSAndroid Build Coastguard Worker            deInRange32(dataType, TYPE_INT_VEC2, TYPE_INT_VEC4) ||
340*35238bceSAndroid Build Coastguard Worker            deInRange32(dataType, TYPE_UINT_VEC2, TYPE_UINT_VEC4) ||
341*35238bceSAndroid Build Coastguard Worker            deInRange32(dataType, TYPE_BOOL_VEC2, TYPE_BOOL_VEC4) ||
342*35238bceSAndroid Build Coastguard Worker            deInRange32(dataType, TYPE_UINT8_VEC2, TYPE_UINT8_VEC4) ||
343*35238bceSAndroid Build Coastguard Worker            deInRange32(dataType, TYPE_INT8_VEC2, TYPE_INT8_VEC4) ||
344*35238bceSAndroid Build Coastguard Worker            deInRange32(dataType, TYPE_UINT16_VEC2, TYPE_UINT16_VEC4) ||
345*35238bceSAndroid Build Coastguard Worker            deInRange32(dataType, TYPE_INT16_VEC2, TYPE_INT16_VEC4) ||
346*35238bceSAndroid Build Coastguard Worker            deInRange32(dataType, TYPE_FLOAT16_VEC2, TYPE_FLOAT16_VEC4);
347*35238bceSAndroid Build Coastguard Worker }
isDataTypeScalarOrVector(DataType dataType)348*35238bceSAndroid Build Coastguard Worker inline bool isDataTypeScalarOrVector(DataType dataType)
349*35238bceSAndroid Build Coastguard Worker {
350*35238bceSAndroid Build Coastguard Worker     return deInRange32(dataType, TYPE_FLOAT, TYPE_FLOAT_VEC4) || deInRange32(dataType, TYPE_DOUBLE, TYPE_DOUBLE_VEC4) ||
351*35238bceSAndroid Build Coastguard Worker            deInRange32(dataType, TYPE_INT, TYPE_INT_VEC4) || deInRange32(dataType, TYPE_UINT, TYPE_UINT_VEC4) ||
352*35238bceSAndroid Build Coastguard Worker            deInRange32(dataType, TYPE_BOOL, TYPE_BOOL_VEC4) || deInRange32(dataType, TYPE_UINT8, TYPE_UINT8_VEC4) ||
353*35238bceSAndroid Build Coastguard Worker            deInRange32(dataType, TYPE_INT8, TYPE_INT8_VEC4) || deInRange32(dataType, TYPE_UINT16, TYPE_UINT16_VEC4) ||
354*35238bceSAndroid Build Coastguard Worker            deInRange32(dataType, TYPE_INT16, TYPE_INT16_VEC4) || deInRange32(dataType, TYPE_FLOAT16, TYPE_FLOAT16_VEC4);
355*35238bceSAndroid Build Coastguard Worker }
isDataTypeSampler(DataType dataType)356*35238bceSAndroid Build Coastguard Worker inline bool isDataTypeSampler(DataType dataType)
357*35238bceSAndroid Build Coastguard Worker {
358*35238bceSAndroid Build Coastguard Worker     return (dataType >= TYPE_SAMPLER_1D) && (dataType <= TYPE_UINT_SAMPLER_2D_MULTISAMPLE);
359*35238bceSAndroid Build Coastguard Worker }
isDataTypeImage(DataType dataType)360*35238bceSAndroid Build Coastguard Worker inline bool isDataTypeImage(DataType dataType)
361*35238bceSAndroid Build Coastguard Worker {
362*35238bceSAndroid Build Coastguard Worker     return (dataType >= TYPE_IMAGE_2D) && (dataType <= TYPE_UINT_IMAGE_3D);
363*35238bceSAndroid Build Coastguard Worker }
isDataTypeSamplerMultisample(DataType dataType)364*35238bceSAndroid Build Coastguard Worker inline bool isDataTypeSamplerMultisample(DataType dataType)
365*35238bceSAndroid Build Coastguard Worker {
366*35238bceSAndroid Build Coastguard Worker     return (dataType >= TYPE_SAMPLER_2D_MULTISAMPLE) && (dataType <= TYPE_UINT_SAMPLER_2D_MULTISAMPLE);
367*35238bceSAndroid Build Coastguard Worker }
isDataTypeAtomicCounter(DataType dataType)368*35238bceSAndroid Build Coastguard Worker inline bool isDataTypeAtomicCounter(DataType dataType)
369*35238bceSAndroid Build Coastguard Worker {
370*35238bceSAndroid Build Coastguard Worker     return dataType == TYPE_UINT_ATOMIC_COUNTER;
371*35238bceSAndroid Build Coastguard Worker }
isDataTypeSamplerBuffer(DataType dataType)372*35238bceSAndroid Build Coastguard Worker inline bool isDataTypeSamplerBuffer(DataType dataType)
373*35238bceSAndroid Build Coastguard Worker {
374*35238bceSAndroid Build Coastguard Worker     return (dataType >= TYPE_SAMPLER_BUFFER) && (dataType <= TYPE_UINT_SAMPLER_BUFFER);
375*35238bceSAndroid Build Coastguard Worker }
isDataTypeSamplerMSArray(DataType dataType)376*35238bceSAndroid Build Coastguard Worker inline bool isDataTypeSamplerMSArray(DataType dataType)
377*35238bceSAndroid Build Coastguard Worker {
378*35238bceSAndroid Build Coastguard Worker     return (dataType >= TYPE_SAMPLER_2D_MULTISAMPLE_ARRAY) && (dataType <= TYPE_UINT_SAMPLER_2D_MULTISAMPLE_ARRAY);
379*35238bceSAndroid Build Coastguard Worker }
isDataTypeImageBuffer(DataType dataType)380*35238bceSAndroid Build Coastguard Worker inline bool isDataTypeImageBuffer(DataType dataType)
381*35238bceSAndroid Build Coastguard Worker {
382*35238bceSAndroid Build Coastguard Worker     return (dataType >= TYPE_IMAGE_BUFFER) && (dataType <= TYPE_UINT_IMAGE_BUFFER);
383*35238bceSAndroid Build Coastguard Worker }
isDataTypeExplicitPrecision(DataType dataType)384*35238bceSAndroid Build Coastguard Worker inline bool isDataTypeExplicitPrecision(DataType dataType)
385*35238bceSAndroid Build Coastguard Worker {
386*35238bceSAndroid Build Coastguard Worker     return deInRange32(dataType, TYPE_UINT8, TYPE_UINT8_VEC4) || deInRange32(dataType, TYPE_INT8, TYPE_INT8_VEC4) ||
387*35238bceSAndroid Build Coastguard Worker            deInRange32(dataType, TYPE_UINT16, TYPE_UINT16_VEC4) || deInRange32(dataType, TYPE_INT16, TYPE_INT16_VEC4) ||
388*35238bceSAndroid Build Coastguard Worker            deInRange32(dataType, TYPE_FLOAT16, TYPE_FLOAT16_MAT4) ||
389*35238bceSAndroid Build Coastguard Worker            deInRange32(dataType, TYPE_DOUBLE, TYPE_DOUBLE_MAT4);
390*35238bceSAndroid Build Coastguard Worker }
dataTypeSupportsPrecisionModifier(DataType dataType)391*35238bceSAndroid Build Coastguard Worker inline bool dataTypeSupportsPrecisionModifier(DataType dataType)
392*35238bceSAndroid Build Coastguard Worker {
393*35238bceSAndroid Build Coastguard Worker     return !isDataTypeBoolOrBVec(dataType) && !isDataTypeExplicitPrecision(dataType);
394*35238bceSAndroid Build Coastguard Worker }
395*35238bceSAndroid Build Coastguard Worker 
396*35238bceSAndroid Build Coastguard Worker int getDataTypeMatrixNumRows(DataType dataType);
397*35238bceSAndroid Build Coastguard Worker int getDataTypeMatrixNumColumns(DataType dataType);
398*35238bceSAndroid Build Coastguard Worker DataType getDataTypeMatrixColumnType(DataType dataType);
399*35238bceSAndroid Build Coastguard Worker 
400*35238bceSAndroid Build Coastguard Worker int getDataTypeNumLocations(DataType dataType);
401*35238bceSAndroid Build Coastguard Worker int getDataTypeNumComponents(DataType dataType);
402*35238bceSAndroid Build Coastguard Worker 
403*35238bceSAndroid Build Coastguard Worker template <typename T>
404*35238bceSAndroid Build Coastguard Worker struct DataTypeTraits;
405*35238bceSAndroid Build Coastguard Worker 
406*35238bceSAndroid Build Coastguard Worker template <>
407*35238bceSAndroid Build Coastguard Worker struct DataTypeTraits<uint16_t>
408*35238bceSAndroid Build Coastguard Worker {
409*35238bceSAndroid Build Coastguard Worker     enum
410*35238bceSAndroid Build Coastguard Worker     {
411*35238bceSAndroid Build Coastguard Worker         DATATYPE = TYPE_FLOAT16
412*35238bceSAndroid Build Coastguard Worker     };
413*35238bceSAndroid Build Coastguard Worker };
414*35238bceSAndroid Build Coastguard Worker template <>
415*35238bceSAndroid Build Coastguard Worker struct DataTypeTraits<float>
416*35238bceSAndroid Build Coastguard Worker {
417*35238bceSAndroid Build Coastguard Worker     enum
418*35238bceSAndroid Build Coastguard Worker     {
419*35238bceSAndroid Build Coastguard Worker         DATATYPE = TYPE_FLOAT
420*35238bceSAndroid Build Coastguard Worker     };
421*35238bceSAndroid Build Coastguard Worker };
422*35238bceSAndroid Build Coastguard Worker template <>
423*35238bceSAndroid Build Coastguard Worker struct DataTypeTraits<double>
424*35238bceSAndroid Build Coastguard Worker {
425*35238bceSAndroid Build Coastguard Worker     enum
426*35238bceSAndroid Build Coastguard Worker     {
427*35238bceSAndroid Build Coastguard Worker         DATATYPE = TYPE_DOUBLE
428*35238bceSAndroid Build Coastguard Worker     };
429*35238bceSAndroid Build Coastguard Worker };
430*35238bceSAndroid Build Coastguard Worker template <>
431*35238bceSAndroid Build Coastguard Worker struct DataTypeTraits<bool>
432*35238bceSAndroid Build Coastguard Worker {
433*35238bceSAndroid Build Coastguard Worker     enum
434*35238bceSAndroid Build Coastguard Worker     {
435*35238bceSAndroid Build Coastguard Worker         DATATYPE = TYPE_BOOL
436*35238bceSAndroid Build Coastguard Worker     };
437*35238bceSAndroid Build Coastguard Worker };
438*35238bceSAndroid Build Coastguard Worker template <>
439*35238bceSAndroid Build Coastguard Worker struct DataTypeTraits<int>
440*35238bceSAndroid Build Coastguard Worker {
441*35238bceSAndroid Build Coastguard Worker     enum
442*35238bceSAndroid Build Coastguard Worker     {
443*35238bceSAndroid Build Coastguard Worker         DATATYPE = TYPE_INT
444*35238bceSAndroid Build Coastguard Worker     };
445*35238bceSAndroid Build Coastguard Worker };
446*35238bceSAndroid Build Coastguard Worker template <>
447*35238bceSAndroid Build Coastguard Worker struct DataTypeTraits<uint32_t>
448*35238bceSAndroid Build Coastguard Worker {
449*35238bceSAndroid Build Coastguard Worker     enum
450*35238bceSAndroid Build Coastguard Worker     {
451*35238bceSAndroid Build Coastguard Worker         DATATYPE = TYPE_UINT
452*35238bceSAndroid Build Coastguard Worker     };
453*35238bceSAndroid Build Coastguard Worker };
454*35238bceSAndroid Build Coastguard Worker template <>
455*35238bceSAndroid Build Coastguard Worker struct DataTypeTraits<tcu::Mat2>
456*35238bceSAndroid Build Coastguard Worker {
457*35238bceSAndroid Build Coastguard Worker     enum
458*35238bceSAndroid Build Coastguard Worker     {
459*35238bceSAndroid Build Coastguard Worker         DATATYPE = TYPE_FLOAT_MAT2
460*35238bceSAndroid Build Coastguard Worker     };
461*35238bceSAndroid Build Coastguard Worker };
462*35238bceSAndroid Build Coastguard Worker template <>
463*35238bceSAndroid Build Coastguard Worker struct DataTypeTraits<tcu::Mat2x3>
464*35238bceSAndroid Build Coastguard Worker {
465*35238bceSAndroid Build Coastguard Worker     enum
466*35238bceSAndroid Build Coastguard Worker     {
467*35238bceSAndroid Build Coastguard Worker         DATATYPE = TYPE_FLOAT_MAT2X3
468*35238bceSAndroid Build Coastguard Worker     };
469*35238bceSAndroid Build Coastguard Worker };
470*35238bceSAndroid Build Coastguard Worker template <>
471*35238bceSAndroid Build Coastguard Worker struct DataTypeTraits<tcu::Mat2x4>
472*35238bceSAndroid Build Coastguard Worker {
473*35238bceSAndroid Build Coastguard Worker     enum
474*35238bceSAndroid Build Coastguard Worker     {
475*35238bceSAndroid Build Coastguard Worker         DATATYPE = TYPE_FLOAT_MAT2X4
476*35238bceSAndroid Build Coastguard Worker     };
477*35238bceSAndroid Build Coastguard Worker };
478*35238bceSAndroid Build Coastguard Worker template <>
479*35238bceSAndroid Build Coastguard Worker struct DataTypeTraits<tcu::Mat3x2>
480*35238bceSAndroid Build Coastguard Worker {
481*35238bceSAndroid Build Coastguard Worker     enum
482*35238bceSAndroid Build Coastguard Worker     {
483*35238bceSAndroid Build Coastguard Worker         DATATYPE = TYPE_FLOAT_MAT3X2
484*35238bceSAndroid Build Coastguard Worker     };
485*35238bceSAndroid Build Coastguard Worker };
486*35238bceSAndroid Build Coastguard Worker template <>
487*35238bceSAndroid Build Coastguard Worker struct DataTypeTraits<tcu::Mat3>
488*35238bceSAndroid Build Coastguard Worker {
489*35238bceSAndroid Build Coastguard Worker     enum
490*35238bceSAndroid Build Coastguard Worker     {
491*35238bceSAndroid Build Coastguard Worker         DATATYPE = TYPE_FLOAT_MAT3
492*35238bceSAndroid Build Coastguard Worker     };
493*35238bceSAndroid Build Coastguard Worker };
494*35238bceSAndroid Build Coastguard Worker template <>
495*35238bceSAndroid Build Coastguard Worker struct DataTypeTraits<tcu::Mat3x4>
496*35238bceSAndroid Build Coastguard Worker {
497*35238bceSAndroid Build Coastguard Worker     enum
498*35238bceSAndroid Build Coastguard Worker     {
499*35238bceSAndroid Build Coastguard Worker         DATATYPE = TYPE_FLOAT_MAT3X4
500*35238bceSAndroid Build Coastguard Worker     };
501*35238bceSAndroid Build Coastguard Worker };
502*35238bceSAndroid Build Coastguard Worker template <>
503*35238bceSAndroid Build Coastguard Worker struct DataTypeTraits<tcu::Mat4x2>
504*35238bceSAndroid Build Coastguard Worker {
505*35238bceSAndroid Build Coastguard Worker     enum
506*35238bceSAndroid Build Coastguard Worker     {
507*35238bceSAndroid Build Coastguard Worker         DATATYPE = TYPE_FLOAT_MAT4X2
508*35238bceSAndroid Build Coastguard Worker     };
509*35238bceSAndroid Build Coastguard Worker };
510*35238bceSAndroid Build Coastguard Worker template <>
511*35238bceSAndroid Build Coastguard Worker struct DataTypeTraits<tcu::Mat4x3>
512*35238bceSAndroid Build Coastguard Worker {
513*35238bceSAndroid Build Coastguard Worker     enum
514*35238bceSAndroid Build Coastguard Worker     {
515*35238bceSAndroid Build Coastguard Worker         DATATYPE = TYPE_FLOAT_MAT4X3
516*35238bceSAndroid Build Coastguard Worker     };
517*35238bceSAndroid Build Coastguard Worker };
518*35238bceSAndroid Build Coastguard Worker template <>
519*35238bceSAndroid Build Coastguard Worker struct DataTypeTraits<tcu::Mat4>
520*35238bceSAndroid Build Coastguard Worker {
521*35238bceSAndroid Build Coastguard Worker     enum
522*35238bceSAndroid Build Coastguard Worker     {
523*35238bceSAndroid Build Coastguard Worker         DATATYPE = TYPE_FLOAT_MAT4
524*35238bceSAndroid Build Coastguard Worker     };
525*35238bceSAndroid Build Coastguard Worker };
526*35238bceSAndroid Build Coastguard Worker template <>
527*35238bceSAndroid Build Coastguard Worker struct DataTypeTraits<tcu::Mat2_16b>
528*35238bceSAndroid Build Coastguard Worker {
529*35238bceSAndroid Build Coastguard Worker     enum
530*35238bceSAndroid Build Coastguard Worker     {
531*35238bceSAndroid Build Coastguard Worker         DATATYPE = TYPE_FLOAT16_MAT2
532*35238bceSAndroid Build Coastguard Worker     };
533*35238bceSAndroid Build Coastguard Worker };
534*35238bceSAndroid Build Coastguard Worker template <>
535*35238bceSAndroid Build Coastguard Worker struct DataTypeTraits<tcu::Mat2x3_16b>
536*35238bceSAndroid Build Coastguard Worker {
537*35238bceSAndroid Build Coastguard Worker     enum
538*35238bceSAndroid Build Coastguard Worker     {
539*35238bceSAndroid Build Coastguard Worker         DATATYPE = TYPE_FLOAT16_MAT2X3
540*35238bceSAndroid Build Coastguard Worker     };
541*35238bceSAndroid Build Coastguard Worker };
542*35238bceSAndroid Build Coastguard Worker template <>
543*35238bceSAndroid Build Coastguard Worker struct DataTypeTraits<tcu::Mat2x4_16b>
544*35238bceSAndroid Build Coastguard Worker {
545*35238bceSAndroid Build Coastguard Worker     enum
546*35238bceSAndroid Build Coastguard Worker     {
547*35238bceSAndroid Build Coastguard Worker         DATATYPE = TYPE_FLOAT16_MAT2X4
548*35238bceSAndroid Build Coastguard Worker     };
549*35238bceSAndroid Build Coastguard Worker };
550*35238bceSAndroid Build Coastguard Worker template <>
551*35238bceSAndroid Build Coastguard Worker struct DataTypeTraits<tcu::Mat3x2_16b>
552*35238bceSAndroid Build Coastguard Worker {
553*35238bceSAndroid Build Coastguard Worker     enum
554*35238bceSAndroid Build Coastguard Worker     {
555*35238bceSAndroid Build Coastguard Worker         DATATYPE = TYPE_FLOAT16_MAT3X2
556*35238bceSAndroid Build Coastguard Worker     };
557*35238bceSAndroid Build Coastguard Worker };
558*35238bceSAndroid Build Coastguard Worker template <>
559*35238bceSAndroid Build Coastguard Worker struct DataTypeTraits<tcu::Mat3_16b>
560*35238bceSAndroid Build Coastguard Worker {
561*35238bceSAndroid Build Coastguard Worker     enum
562*35238bceSAndroid Build Coastguard Worker     {
563*35238bceSAndroid Build Coastguard Worker         DATATYPE = TYPE_FLOAT16_MAT3
564*35238bceSAndroid Build Coastguard Worker     };
565*35238bceSAndroid Build Coastguard Worker };
566*35238bceSAndroid Build Coastguard Worker template <>
567*35238bceSAndroid Build Coastguard Worker struct DataTypeTraits<tcu::Mat3x4_16b>
568*35238bceSAndroid Build Coastguard Worker {
569*35238bceSAndroid Build Coastguard Worker     enum
570*35238bceSAndroid Build Coastguard Worker     {
571*35238bceSAndroid Build Coastguard Worker         DATATYPE = TYPE_FLOAT16_MAT3X4
572*35238bceSAndroid Build Coastguard Worker     };
573*35238bceSAndroid Build Coastguard Worker };
574*35238bceSAndroid Build Coastguard Worker template <>
575*35238bceSAndroid Build Coastguard Worker struct DataTypeTraits<tcu::Mat4x2_16b>
576*35238bceSAndroid Build Coastguard Worker {
577*35238bceSAndroid Build Coastguard Worker     enum
578*35238bceSAndroid Build Coastguard Worker     {
579*35238bceSAndroid Build Coastguard Worker         DATATYPE = TYPE_FLOAT16_MAT4X2
580*35238bceSAndroid Build Coastguard Worker     };
581*35238bceSAndroid Build Coastguard Worker };
582*35238bceSAndroid Build Coastguard Worker template <>
583*35238bceSAndroid Build Coastguard Worker struct DataTypeTraits<tcu::Mat4x3_16b>
584*35238bceSAndroid Build Coastguard Worker {
585*35238bceSAndroid Build Coastguard Worker     enum
586*35238bceSAndroid Build Coastguard Worker     {
587*35238bceSAndroid Build Coastguard Worker         DATATYPE = TYPE_FLOAT16_MAT4X3
588*35238bceSAndroid Build Coastguard Worker     };
589*35238bceSAndroid Build Coastguard Worker };
590*35238bceSAndroid Build Coastguard Worker template <>
591*35238bceSAndroid Build Coastguard Worker struct DataTypeTraits<tcu::Mat4_16b>
592*35238bceSAndroid Build Coastguard Worker {
593*35238bceSAndroid Build Coastguard Worker     enum
594*35238bceSAndroid Build Coastguard Worker     {
595*35238bceSAndroid Build Coastguard Worker         DATATYPE = TYPE_FLOAT16_MAT4
596*35238bceSAndroid Build Coastguard Worker     };
597*35238bceSAndroid Build Coastguard Worker };
598*35238bceSAndroid Build Coastguard Worker template <>
599*35238bceSAndroid Build Coastguard Worker struct DataTypeTraits<tcu::Matrix2d>
600*35238bceSAndroid Build Coastguard Worker {
601*35238bceSAndroid Build Coastguard Worker     enum
602*35238bceSAndroid Build Coastguard Worker     {
603*35238bceSAndroid Build Coastguard Worker         DATATYPE = TYPE_DOUBLE_MAT2
604*35238bceSAndroid Build Coastguard Worker     };
605*35238bceSAndroid Build Coastguard Worker };
606*35238bceSAndroid Build Coastguard Worker template <>
607*35238bceSAndroid Build Coastguard Worker struct DataTypeTraits<tcu::Matrix3d>
608*35238bceSAndroid Build Coastguard Worker {
609*35238bceSAndroid Build Coastguard Worker     enum
610*35238bceSAndroid Build Coastguard Worker     {
611*35238bceSAndroid Build Coastguard Worker         DATATYPE = TYPE_DOUBLE_MAT3
612*35238bceSAndroid Build Coastguard Worker     };
613*35238bceSAndroid Build Coastguard Worker };
614*35238bceSAndroid Build Coastguard Worker template <>
615*35238bceSAndroid Build Coastguard Worker struct DataTypeTraits<tcu::Matrix4d>
616*35238bceSAndroid Build Coastguard Worker {
617*35238bceSAndroid Build Coastguard Worker     enum
618*35238bceSAndroid Build Coastguard Worker     {
619*35238bceSAndroid Build Coastguard Worker         DATATYPE = TYPE_DOUBLE_MAT4
620*35238bceSAndroid Build Coastguard Worker     };
621*35238bceSAndroid Build Coastguard Worker };
622*35238bceSAndroid Build Coastguard Worker template <>
623*35238bceSAndroid Build Coastguard Worker struct DataTypeTraits<tcu::Mat2x3d>
624*35238bceSAndroid Build Coastguard Worker {
625*35238bceSAndroid Build Coastguard Worker     enum
626*35238bceSAndroid Build Coastguard Worker     {
627*35238bceSAndroid Build Coastguard Worker         DATATYPE = TYPE_DOUBLE_MAT2X3
628*35238bceSAndroid Build Coastguard Worker     };
629*35238bceSAndroid Build Coastguard Worker };
630*35238bceSAndroid Build Coastguard Worker template <>
631*35238bceSAndroid Build Coastguard Worker struct DataTypeTraits<tcu::Mat2x4d>
632*35238bceSAndroid Build Coastguard Worker {
633*35238bceSAndroid Build Coastguard Worker     enum
634*35238bceSAndroid Build Coastguard Worker     {
635*35238bceSAndroid Build Coastguard Worker         DATATYPE = TYPE_DOUBLE_MAT2X4
636*35238bceSAndroid Build Coastguard Worker     };
637*35238bceSAndroid Build Coastguard Worker };
638*35238bceSAndroid Build Coastguard Worker template <>
639*35238bceSAndroid Build Coastguard Worker struct DataTypeTraits<tcu::Mat3x2d>
640*35238bceSAndroid Build Coastguard Worker {
641*35238bceSAndroid Build Coastguard Worker     enum
642*35238bceSAndroid Build Coastguard Worker     {
643*35238bceSAndroid Build Coastguard Worker         DATATYPE = TYPE_DOUBLE_MAT3X2
644*35238bceSAndroid Build Coastguard Worker     };
645*35238bceSAndroid Build Coastguard Worker };
646*35238bceSAndroid Build Coastguard Worker template <>
647*35238bceSAndroid Build Coastguard Worker struct DataTypeTraits<tcu::Mat3x4d>
648*35238bceSAndroid Build Coastguard Worker {
649*35238bceSAndroid Build Coastguard Worker     enum
650*35238bceSAndroid Build Coastguard Worker     {
651*35238bceSAndroid Build Coastguard Worker         DATATYPE = TYPE_DOUBLE_MAT3X4
652*35238bceSAndroid Build Coastguard Worker     };
653*35238bceSAndroid Build Coastguard Worker };
654*35238bceSAndroid Build Coastguard Worker template <>
655*35238bceSAndroid Build Coastguard Worker struct DataTypeTraits<tcu::Mat4x2d>
656*35238bceSAndroid Build Coastguard Worker {
657*35238bceSAndroid Build Coastguard Worker     enum
658*35238bceSAndroid Build Coastguard Worker     {
659*35238bceSAndroid Build Coastguard Worker         DATATYPE = TYPE_DOUBLE_MAT4X2
660*35238bceSAndroid Build Coastguard Worker     };
661*35238bceSAndroid Build Coastguard Worker };
662*35238bceSAndroid Build Coastguard Worker template <>
663*35238bceSAndroid Build Coastguard Worker struct DataTypeTraits<tcu::Mat4x3d>
664*35238bceSAndroid Build Coastguard Worker {
665*35238bceSAndroid Build Coastguard Worker     enum
666*35238bceSAndroid Build Coastguard Worker     {
667*35238bceSAndroid Build Coastguard Worker         DATATYPE = TYPE_DOUBLE_MAT4X3
668*35238bceSAndroid Build Coastguard Worker     };
669*35238bceSAndroid Build Coastguard Worker };
670*35238bceSAndroid Build Coastguard Worker 
671*35238bceSAndroid Build Coastguard Worker template <typename T, int Size>
672*35238bceSAndroid Build Coastguard Worker struct DataTypeTraits<tcu::Vector<T, Size>>
673*35238bceSAndroid Build Coastguard Worker {
674*35238bceSAndroid Build Coastguard Worker     DE_STATIC_ASSERT(TYPE_FLOAT_VEC4 == TYPE_FLOAT + 3);
675*35238bceSAndroid Build Coastguard Worker     DE_STATIC_ASSERT(TYPE_INT_VEC4 == TYPE_INT + 3);
676*35238bceSAndroid Build Coastguard Worker     DE_STATIC_ASSERT(TYPE_UINT_VEC4 == TYPE_UINT + 3);
677*35238bceSAndroid Build Coastguard Worker     DE_STATIC_ASSERT(TYPE_BOOL_VEC4 == TYPE_BOOL + 3);
678*35238bceSAndroid Build Coastguard Worker     DE_STATIC_ASSERT(TYPE_DOUBLE_VEC4 == TYPE_DOUBLE + 3);
679*35238bceSAndroid Build Coastguard Worker     enum
680*35238bceSAndroid Build Coastguard Worker     {
681*35238bceSAndroid Build Coastguard Worker         DATATYPE = DataTypeTraits<T>::DATATYPE + Size - 1
682*35238bceSAndroid Build Coastguard Worker     };
683*35238bceSAndroid Build Coastguard Worker };
684*35238bceSAndroid Build Coastguard Worker 
685*35238bceSAndroid Build Coastguard Worker template <typename T>
dataTypeOf(void)686*35238bceSAndroid Build Coastguard Worker inline DataType dataTypeOf(void)
687*35238bceSAndroid Build Coastguard Worker {
688*35238bceSAndroid Build Coastguard Worker     return DataType(DataTypeTraits<T>::DATATYPE);
689*35238bceSAndroid Build Coastguard Worker }
690*35238bceSAndroid Build Coastguard Worker 
691*35238bceSAndroid Build Coastguard Worker } // namespace glu
692*35238bceSAndroid Build Coastguard Worker 
693*35238bceSAndroid Build Coastguard Worker #endif // _GLUSHADERUTIL_HPP
694