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 27namespace sglr 28{ 29namespace rr_util 30{ 31 32rr::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 48rr::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 130int 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 146rr::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 167rr::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 181rr::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 194rr::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 215rr::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 233rr::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 251rr::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 266rr::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 291rr::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