Home | History | Annotate | Download | only in simplereference
      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 
     32 rr::VertexAttribType mapGLPureIntegerVertexAttributeType (deUint32 type)
     33 {
     34 	switch (type)
     35 	{
     36 		case GL_UNSIGNED_BYTE:					return rr::VERTEXATTRIBTYPE_PURE_UINT8;
     37 		case GL_UNSIGNED_SHORT:					return rr::VERTEXATTRIBTYPE_PURE_UINT16;
     38 		case GL_UNSIGNED_INT:					return rr::VERTEXATTRIBTYPE_PURE_UINT32;
     39 		case GL_BYTE:							return rr::VERTEXATTRIBTYPE_PURE_INT8;
     40 		case GL_SHORT:							return rr::VERTEXATTRIBTYPE_PURE_INT16;
     41 		case GL_INT:							return rr::VERTEXATTRIBTYPE_PURE_INT32;
     42 		default:
     43 			DE_ASSERT(false);
     44 			return rr::VERTEXATTRIBTYPE_LAST;
     45 	}
     46 }
     47 
     48 rr::VertexAttribType mapGLFloatVertexAttributeType (deUint32 type, bool normalizedInteger, int size, glu::ContextType ctxType)
     49 {
     50 	const bool useClampingNormalization	= (ctxType.getProfile() == glu::PROFILE_ES && ctxType.getMajorVersion() >= 3) ||
     51 										  (ctxType.getMajorVersion() == 4 && ctxType.getMinorVersion() >= 2);
     52 	const bool bgraComponentOrder		= (size == GL_BGRA);
     53 
     54 	switch (type)
     55 	{
     56 		case GL_FLOAT:
     57 			return rr::VERTEXATTRIBTYPE_FLOAT;
     58 
     59 		case GL_HALF_FLOAT:
     60 			return rr::VERTEXATTRIBTYPE_HALF;
     61 
     62 		case GL_FIXED:
     63 			return rr::VERTEXATTRIBTYPE_FIXED;
     64 
     65 		case GL_DOUBLE:
     66 			return rr::VERTEXATTRIBTYPE_DOUBLE;
     67 
     68 		case GL_UNSIGNED_BYTE:
     69 			if (!normalizedInteger)
     70 				return rr::VERTEXATTRIBTYPE_NONPURE_UINT8;
     71 			else
     72 				return (!bgraComponentOrder) ? (rr::VERTEXATTRIBTYPE_NONPURE_UNORM8) : (rr::VERTEXATTRIBTYPE_NONPURE_UNORM8_BGRA);
     73 
     74 		case GL_UNSIGNED_SHORT:
     75 			if (!normalizedInteger)
     76 				return rr::VERTEXATTRIBTYPE_NONPURE_UINT16;
     77 			else
     78 				return rr::VERTEXATTRIBTYPE_NONPURE_UNORM16;
     79 
     80 		case GL_UNSIGNED_INT:
     81 			if (!normalizedInteger)
     82 				return rr::VERTEXATTRIBTYPE_NONPURE_UINT32;
     83 			else
     84 				return rr::VERTEXATTRIBTYPE_NONPURE_UNORM32;
     85 
     86 		case GL_UNSIGNED_INT_2_10_10_10_REV:
     87 			if (!normalizedInteger)
     88 				return rr::VERTEXATTRIBTYPE_NONPURE_UINT_2_10_10_10_REV;
     89 			else
     90 				return (!bgraComponentOrder) ? (rr::VERTEXATTRIBTYPE_NONPURE_UNORM_2_10_10_10_REV) : (rr::VERTEXATTRIBTYPE_NONPURE_UNORM_2_10_10_10_REV_BGRA);
     91 
     92 		case GL_BYTE:
     93 			if (!normalizedInteger)
     94 				return rr::VERTEXATTRIBTYPE_NONPURE_INT8;
     95 			else if (useClampingNormalization)
     96 				return rr::VERTEXATTRIBTYPE_NONPURE_SNORM8_CLAMP;
     97 			else
     98 				return rr::VERTEXATTRIBTYPE_NONPURE_SNORM8_SCALE;
     99 
    100 		case GL_SHORT:
    101 			if (!normalizedInteger)
    102 				return rr::VERTEXATTRIBTYPE_NONPURE_INT16;
    103 			else if (useClampingNormalization)
    104 				return rr::VERTEXATTRIBTYPE_NONPURE_SNORM16_CLAMP;
    105 			else
    106 				return rr::VERTEXATTRIBTYPE_NONPURE_SNORM16_SCALE;
    107 
    108 		case GL_INT:
    109 			if (!normalizedInteger)
    110 				return rr::VERTEXATTRIBTYPE_NONPURE_INT32;
    111 			else if (useClampingNormalization)
    112 				return rr::VERTEXATTRIBTYPE_NONPURE_SNORM32_CLAMP;
    113 			else
    114 				return rr::VERTEXATTRIBTYPE_NONPURE_SNORM32_SCALE;
    115 
    116 		case GL_INT_2_10_10_10_REV:
    117 			if (!normalizedInteger)
    118 				return rr::VERTEXATTRIBTYPE_NONPURE_INT_2_10_10_10_REV;
    119 			else if (useClampingNormalization)
    120 				return (!bgraComponentOrder) ? (rr::VERTEXATTRIBTYPE_NONPURE_SNORM_2_10_10_10_REV_CLAMP) : (rr::VERTEXATTRIBTYPE_NONPURE_SNORM_2_10_10_10_REV_CLAMP_BGRA);
    121 			else
    122 				return (!bgraComponentOrder) ? (rr::VERTEXATTRIBTYPE_NONPURE_SNORM_2_10_10_10_REV_SCALE) : (rr::VERTEXATTRIBTYPE_NONPURE_SNORM_2_10_10_10_REV_SCALE_BGRA);
    123 
    124 		default:
    125 			DE_ASSERT(false);
    126 			return rr::VERTEXATTRIBTYPE_LAST;
    127 	}
    128 }
    129 
    130 int mapGLSize (int size)
    131 {
    132 	switch (size)
    133 	{
    134 		case 1:			return 1;
    135 		case 2:			return 2;
    136 		case 3:			return 3;
    137 		case 4:			return 4;
    138 		case GL_BGRA:	return 4;
    139 
    140 		default:
    141 			DE_ASSERT(false);
    142 			return 0;
    143 	}
    144 }
    145 
    146 rr::PrimitiveType mapGLPrimitiveType (deUint32 type)
    147 {
    148 	switch (type)
    149 	{
    150 		case GL_TRIANGLES:					return rr::PRIMITIVETYPE_TRIANGLES;
    151 		case GL_TRIANGLE_STRIP:				return rr::PRIMITIVETYPE_TRIANGLE_STRIP;
    152 		case GL_TRIANGLE_FAN:				return rr::PRIMITIVETYPE_TRIANGLE_FAN;
    153 		case GL_LINES:						return rr::PRIMITIVETYPE_LINES;
    154 		case GL_LINE_STRIP:					return rr::PRIMITIVETYPE_LINE_STRIP;
    155 		case GL_LINE_LOOP:					return rr::PRIMITIVETYPE_LINE_LOOP;
    156 		case GL_POINTS:						return rr::PRIMITIVETYPE_POINTS;
    157 		case GL_LINES_ADJACENCY:			return rr::PRIMITIVETYPE_LINES_ADJACENCY;
    158 		case GL_LINE_STRIP_ADJACENCY:		return rr::PRIMITIVETYPE_LINE_STRIP_ADJACENCY;
    159 		case GL_TRIANGLES_ADJACENCY:		return rr::PRIMITIVETYPE_TRIANGLES_ADJACENCY;
    160 		case GL_TRIANGLE_STRIP_ADJACENCY:	return rr::PRIMITIVETYPE_TRIANGLE_STRIP_ADJACENCY;
    161 		default:
    162 			DE_ASSERT(false);
    163 			return rr::PRIMITIVETYPE_LAST;
    164 	}
    165 }
    166 
    167 rr::IndexType mapGLIndexType (deUint32 type)
    168 {
    169 	switch (type)
    170 	{
    171 		case GL_UNSIGNED_BYTE:	return rr::INDEXTYPE_UINT8;
    172 		case GL_UNSIGNED_SHORT:	return rr::INDEXTYPE_UINT16;
    173 		case GL_UNSIGNED_INT:	return rr::INDEXTYPE_UINT32;
    174 		default:
    175 			DE_ASSERT(false);
    176 			return rr::INDEXTYPE_LAST;
    177 	}
    178 }
    179 
    180 
    181 rr::GeometryShaderOutputType mapGLGeometryShaderOutputType (deUint32 primitive)
    182 {
    183 	switch (primitive)
    184 	{
    185 		case GL_POINTS:				return rr::GEOMETRYSHADEROUTPUTTYPE_POINTS;
    186 		case GL_LINE_STRIP:			return rr::GEOMETRYSHADEROUTPUTTYPE_LINE_STRIP;
    187 		case GL_TRIANGLE_STRIP:		return rr::GEOMETRYSHADEROUTPUTTYPE_TRIANGLE_STRIP;
    188 		default:
    189 			DE_ASSERT(DE_FALSE);
    190 			return rr::GEOMETRYSHADEROUTPUTTYPE_LAST;
    191 	}
    192 }
    193 
    194 rr::GeometryShaderInputType mapGLGeometryShaderInputType (deUint32 primitive)
    195 {
    196 	switch (primitive)
    197 	{
    198 		case GL_POINTS:						return rr::GEOMETRYSHADERINPUTTYPE_POINTS;
    199 		case GL_LINES:						return rr::GEOMETRYSHADERINPUTTYPE_LINES;
    200 		case GL_LINE_STRIP:					return rr::GEOMETRYSHADERINPUTTYPE_LINES;
    201 		case GL_LINE_LOOP:					return rr::GEOMETRYSHADERINPUTTYPE_LINES;
    202 		case GL_TRIANGLES:					return rr::GEOMETRYSHADERINPUTTYPE_TRIANGLES;
    203 		case GL_TRIANGLE_STRIP:				return rr::GEOMETRYSHADERINPUTTYPE_TRIANGLES;
    204 		case GL_TRIANGLE_FAN:				return rr::GEOMETRYSHADERINPUTTYPE_TRIANGLES;
    205 		case GL_LINES_ADJACENCY:			return rr::GEOMETRYSHADERINPUTTYPE_LINES_ADJACENCY;
    206 		case GL_LINE_STRIP_ADJACENCY:		return rr::GEOMETRYSHADERINPUTTYPE_LINES_ADJACENCY;
    207 		case GL_TRIANGLES_ADJACENCY:		return rr::GEOMETRYSHADERINPUTTYPE_TRIANGLES_ADJACENCY;
    208 		case GL_TRIANGLE_STRIP_ADJACENCY:	return rr::GEOMETRYSHADERINPUTTYPE_TRIANGLES_ADJACENCY;
    209 		default:
    210 			DE_ASSERT(DE_FALSE);
    211 			return rr::GEOMETRYSHADERINPUTTYPE_LAST;
    212 	}
    213 }
    214 
    215 rr::TestFunc mapGLTestFunc (deUint32 func)
    216 {
    217 	switch (func)
    218 	{
    219 		case GL_ALWAYS:		return rr::TESTFUNC_ALWAYS;
    220 		case GL_EQUAL:		return rr::TESTFUNC_EQUAL;
    221 		case GL_GEQUAL:		return rr::TESTFUNC_GEQUAL;
    222 		case GL_GREATER:	return rr::TESTFUNC_GREATER;
    223 		case GL_LEQUAL:		return rr::TESTFUNC_LEQUAL;
    224 		case GL_LESS:		return rr::TESTFUNC_LESS;
    225 		case GL_NEVER:		return rr::TESTFUNC_NEVER;
    226 		case GL_NOTEQUAL:	return rr::TESTFUNC_NOTEQUAL;
    227 		default:
    228 			DE_ASSERT(false);
    229 			return rr::TESTFUNC_LAST;
    230 	}
    231 }
    232 
    233 rr::StencilOp mapGLStencilOp (deUint32 op)
    234 {
    235 	switch (op)
    236 	{
    237 		case GL_KEEP:		return rr::STENCILOP_KEEP;
    238 		case GL_ZERO:		return rr::STENCILOP_ZERO;
    239 		case GL_REPLACE:	return rr::STENCILOP_REPLACE;
    240 		case GL_INCR:		return rr::STENCILOP_INCR;
    241 		case GL_DECR:		return rr::STENCILOP_DECR;
    242 		case GL_INCR_WRAP:	return rr::STENCILOP_INCR_WRAP;
    243 		case GL_DECR_WRAP:	return rr::STENCILOP_DECR_WRAP;
    244 		case GL_INVERT:		return rr::STENCILOP_INVERT;
    245 		default:
    246 			DE_ASSERT(false);
    247 			return rr::STENCILOP_LAST;
    248 	}
    249 }
    250 
    251 rr::BlendEquation mapGLBlendEquation (deUint32 equation)
    252 {
    253 	switch (equation)
    254 	{
    255 		case GL_FUNC_ADD:				return rr::BLENDEQUATION_ADD;
    256 		case GL_FUNC_SUBTRACT:			return rr::BLENDEQUATION_SUBTRACT;
    257 		case GL_FUNC_REVERSE_SUBTRACT:	return rr::BLENDEQUATION_REVERSE_SUBTRACT;
    258 		case GL_MIN:					return rr::BLENDEQUATION_MIN;
    259 		case GL_MAX:					return rr::BLENDEQUATION_MAX;
    260 		default:
    261 			DE_ASSERT(false);
    262 			return rr::BLENDEQUATION_LAST;
    263 	}
    264 }
    265 
    266 rr::BlendEquationAdvanced mapGLBlendEquationAdvanced (deUint32 equation)
    267 {
    268 	switch (equation)
    269 	{
    270 		case GL_MULTIPLY_KHR:		return rr::BLENDEQUATION_ADVANCED_MULTIPLY;
    271 		case GL_SCREEN_KHR:			return rr::BLENDEQUATION_ADVANCED_SCREEN;
    272 		case GL_OVERLAY_KHR:		return rr::BLENDEQUATION_ADVANCED_OVERLAY;
    273 		case GL_DARKEN_KHR:			return rr::BLENDEQUATION_ADVANCED_DARKEN;
    274 		case GL_LIGHTEN_KHR:		return rr::BLENDEQUATION_ADVANCED_LIGHTEN;
    275 		case GL_COLORDODGE_KHR:		return rr::BLENDEQUATION_ADVANCED_COLORDODGE;
    276 		case GL_COLORBURN_KHR:		return rr::BLENDEQUATION_ADVANCED_COLORBURN;
    277 		case GL_HARDLIGHT_KHR:		return rr::BLENDEQUATION_ADVANCED_HARDLIGHT;
    278 		case GL_SOFTLIGHT_KHR:		return rr::BLENDEQUATION_ADVANCED_SOFTLIGHT;
    279 		case GL_DIFFERENCE_KHR:		return rr::BLENDEQUATION_ADVANCED_DIFFERENCE;
    280 		case GL_EXCLUSION_KHR:		return rr::BLENDEQUATION_ADVANCED_EXCLUSION;
    281 		case GL_HSL_HUE_KHR:		return rr::BLENDEQUATION_ADVANCED_HSL_HUE;
    282 		case GL_HSL_SATURATION_KHR:	return rr::BLENDEQUATION_ADVANCED_HSL_SATURATION;
    283 		case GL_HSL_COLOR_KHR:		return rr::BLENDEQUATION_ADVANCED_HSL_COLOR;
    284 		case GL_HSL_LUMINOSITY_KHR:	return rr::BLENDEQUATION_ADVANCED_HSL_LUMINOSITY;
    285 		default:
    286 			DE_ASSERT(false);
    287 			return rr::BLENDEQUATION_ADVANCED_LAST;
    288 	}
    289 }
    290 
    291 rr::BlendFunc mapGLBlendFunc (deUint32 func)
    292 {
    293 	switch (func)
    294 	{
    295 		case GL_ZERO:						return rr::BLENDFUNC_ZERO;
    296 		case GL_ONE:						return rr::BLENDFUNC_ONE;
    297 		case GL_SRC_COLOR:					return rr::BLENDFUNC_SRC_COLOR;
    298 		case GL_ONE_MINUS_SRC_COLOR:		return rr::BLENDFUNC_ONE_MINUS_SRC_COLOR;
    299 		case GL_DST_COLOR:					return rr::BLENDFUNC_DST_COLOR;
    300 		case GL_ONE_MINUS_DST_COLOR:		return rr::BLENDFUNC_ONE_MINUS_DST_COLOR;
    301 		case GL_SRC_ALPHA:					return rr::BLENDFUNC_SRC_ALPHA;
    302 		case GL_ONE_MINUS_SRC_ALPHA:		return rr::BLENDFUNC_ONE_MINUS_SRC_ALPHA;
    303 		case GL_DST_ALPHA:					return rr::BLENDFUNC_DST_ALPHA;
    304 		case GL_ONE_MINUS_DST_ALPHA:		return rr::BLENDFUNC_ONE_MINUS_DST_ALPHA;
    305 		case GL_CONSTANT_COLOR:				return rr::BLENDFUNC_CONSTANT_COLOR;
    306 		case GL_ONE_MINUS_CONSTANT_COLOR:	return rr::BLENDFUNC_ONE_MINUS_CONSTANT_COLOR;
    307 		case GL_CONSTANT_ALPHA:				return rr::BLENDFUNC_CONSTANT_ALPHA;
    308 		case GL_ONE_MINUS_CONSTANT_ALPHA:	return rr::BLENDFUNC_ONE_MINUS_CONSTANT_ALPHA;
    309 		case GL_SRC_ALPHA_SATURATE:			return rr::BLENDFUNC_SRC_ALPHA_SATURATE;
    310 		case GL_SRC1_COLOR:					return rr::BLENDFUNC_SRC1_COLOR;
    311 		case GL_ONE_MINUS_SRC1_COLOR:		return rr::BLENDFUNC_ONE_MINUS_SRC1_COLOR;
    312 		case GL_SRC1_ALPHA:					return rr::BLENDFUNC_SRC1_ALPHA;
    313 		case GL_ONE_MINUS_SRC1_ALPHA:		return rr::BLENDFUNC_ONE_MINUS_SRC1_ALPHA;
    314 		default:
    315 			DE_ASSERT(false);
    316 			return rr::BLENDFUNC_LAST;
    317 	}
    318 }
    319 
    320 } // rr_util
    321 } // sglr
    322