sglrReferenceUtils.js (14193B)
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 'use strict'; 25 goog.provide('framework.opengl.simplereference.sglrReferenceUtils'); 26 goog.require('framework.common.tcuFloat'); 27 goog.require('framework.delibs.debase.deMath'); 28 goog.require('framework.referencerenderer.rrDefs'); 29 goog.require('framework.referencerenderer.rrGenericVector'); 30 goog.require('framework.referencerenderer.rrRenderState'); 31 goog.require('framework.referencerenderer.rrRenderer'); 32 goog.require('framework.referencerenderer.rrShaders'); 33 goog.require('framework.referencerenderer.rrVertexAttrib'); 34 35 goog.scope(function() { 36 37 var sglrReferenceUtils = framework.opengl.simplereference.sglrReferenceUtils; 38 var deMath = framework.delibs.debase.deMath; 39 var tcuFloat = framework.common.tcuFloat; 40 var rrGenericVector = framework.referencerenderer.rrGenericVector; 41 var rrVertexAttrib = framework.referencerenderer.rrVertexAttrib; 42 var rrRenderer = framework.referencerenderer.rrRenderer; 43 var rrDefs = framework.referencerenderer.rrDefs; 44 var rrShaders = framework.referencerenderer.rrShaders; 45 var rrRenderState = framework.referencerenderer.rrRenderState; 46 47 /** 48 * @param {number} type (32-bit, unsigend) 49 * @return {rrVertexAttrib.VertexAttribType} 50 * @throws {Error} 51 */ 52 sglrReferenceUtils.mapGLPureIntegerVertexAttributeType = function(type) { 53 switch (type) { 54 case gl.UNSIGNED_BYTE: return rrVertexAttrib.VertexAttribType.PURE_UINT8; 55 case gl.UNSIGNED_SHORT: return rrVertexAttrib.VertexAttribType.PURE_UINT16; 56 case gl.UNSIGNED_INT: return rrVertexAttrib.VertexAttribType.PURE_UINT32; 57 case gl.BYTE: return rrVertexAttrib.VertexAttribType.PURE_INT8; 58 case gl.SHORT: return rrVertexAttrib.VertexAttribType.PURE_INT16; 59 case gl.INT: return rrVertexAttrib.VertexAttribType.PURE_INT32; 60 default: 61 throw new Error('Value to do mapping not compatible'); 62 } 63 }; 64 65 /** 66 * @param {number} type (32-bit, unsigend) 67 * @param {boolean} normalizedInteger 68 * @param {number} size 69 * @return {rrVertexAttrib.VertexAttribType} converted value from type to VertexAttribType 70 * @throws {Error} 71 */ 72 sglrReferenceUtils.mapGLFloatVertexAttributeType = function(type, normalizedInteger, size) { 73 74 /** @type {boolean} */ var useClampingNormalization = true; 75 76 switch (type) { 77 case gl.FLOAT: 78 return rrVertexAttrib.VertexAttribType.FLOAT; 79 case gl.HALF_FLOAT: 80 return rrVertexAttrib.VertexAttribType.HALF; 81 /* Not supported in WebGL 1/2 case gl.FIXED: 82 return rrVertexAttrib.VertexAttribType.FIXED; 83 case gl.DOUBLE: 84 return rrVertexAttrib.VertexAttribType.DOUBLE; */ 85 case gl.UNSIGNED_BYTE: 86 if (!normalizedInteger) 87 return rrVertexAttrib.VertexAttribType.NONPURE_UINT8; 88 else 89 return rrVertexAttrib.VertexAttribType.NONPURE_UNORM8; 90 91 case gl.UNSIGNED_SHORT: 92 if (!normalizedInteger) 93 return rrVertexAttrib.VertexAttribType.NONPURE_UINT16; 94 else 95 return rrVertexAttrib.VertexAttribType.NONPURE_UNORM16; 96 97 case gl.UNSIGNED_INT: 98 if (!normalizedInteger) 99 return rrVertexAttrib.VertexAttribType.NONPURE_UINT32; 100 else 101 return rrVertexAttrib.VertexAttribType.NONPURE_UNORM32; 102 103 case gl.UNSIGNED_INT_2_10_10_10_REV: 104 if (!normalizedInteger) 105 return rrVertexAttrib.VertexAttribType.NONPURE_UINT_2_10_10_10_REV; 106 else 107 return rrVertexAttrib.VertexAttribType.NONPURE_UNORM_2_10_10_10_REV; 108 109 case gl.BYTE: 110 if (!normalizedInteger) 111 return rrVertexAttrib.VertexAttribType.NONPURE_INT8; 112 else if (useClampingNormalization) 113 return rrVertexAttrib.VertexAttribType.NONPURE_SNORM8_CLAMP; 114 else 115 return rrVertexAttrib.VertexAttribType.NONPURE_SNORM8_SCALE; 116 117 case gl.SHORT: 118 if (!normalizedInteger) 119 return rrVertexAttrib.VertexAttribType.NONPURE_INT16; 120 else if (useClampingNormalization) 121 return rrVertexAttrib.VertexAttribType.NONPURE_SNORM16_CLAMP; 122 else 123 return rrVertexAttrib.VertexAttribType.NONPURE_SNORM16_SCALE; 124 125 case gl.INT: 126 if (!normalizedInteger) 127 return rrVertexAttrib.VertexAttribType.NONPURE_INT32; 128 else if (useClampingNormalization) 129 return rrVertexAttrib.VertexAttribType.NONPURE_SNORM32_CLAMP; 130 else 131 return rrVertexAttrib.VertexAttribType.NONPURE_SNORM32_SCALE; 132 133 case gl.INT_2_10_10_10_REV: 134 if (!normalizedInteger) 135 return rrVertexAttrib.VertexAttribType.NONPURE_INT_2_10_10_10_REV; 136 else if (useClampingNormalization) 137 return rrVertexAttrib.VertexAttribType.NONPURE_SNORM_2_10_10_10_REV_CLAMP; 138 else 139 return rrVertexAttrib.VertexAttribType.NONPURE_SNORM_2_10_10_10_REV_SCALE; 140 141 default: 142 throw new Error('Value to do mapping not compatible'); 143 144 } 145 146 }; 147 148 /** 149 * @param {number} size 150 * @return {number} 151 * @throws {Error} 152 */ 153 sglrReferenceUtils.mapGLSize = function(size) { 154 switch (size) { 155 case 1: return 1; 156 case 2: return 2; 157 case 3: return 3; 158 case 4: return 4; 159 /* NOT in GL 160 case gl.BGRA: return 4; 161 */ 162 163 default: 164 throw new Error('Value to do mapping not compatible'); 165 } 166 }; 167 168 /** 169 * @param {number} type (32-bit, unsigned) 170 * @return {rrRenderer.PrimitiveType} 171 * @throws {Error} 172 */ 173 sglrReferenceUtils.mapGLPrimitiveType = function(type) { 174 switch (type) { 175 case gl.TRIANGLES: return rrRenderer.PrimitiveType.TRIANGLES; 176 case gl.TRIANGLE_STRIP: return rrRenderer.PrimitiveType.TRIANGLE_STRIP; 177 case gl.TRIANGLE_FAN: return rrRenderer.PrimitiveType.TRIANGLE_FAN; 178 case gl.LINES: return rrRenderer.PrimitiveType.LINES; 179 case gl.LINE_STRIP: return rrRenderer.PrimitiveType.LINE_STRIP; 180 case gl.LINE_LOOP: return rrRenderer.PrimitiveType.LINE_LOOP; 181 case gl.POINTS: return rrRenderer.PrimitiveType.POINTS; 182 183 default: 184 throw new Error('Value to do mapping not compatible'); 185 } 186 }; 187 188 /** 189 * @param {number} type (32-bit, unsigned) 190 * @return {rrDefs.IndexType} 191 * @throws {Error} 192 */ 193 sglrReferenceUtils.mapGLIndexType = function(type) { 194 switch (type) { 195 case gl.UNSIGNED_BYTE: return rrDefs.IndexType.INDEXTYPE_UINT8; 196 case gl.UNSIGNED_SHORT: return rrDefs.IndexType.INDEXTYPE_UINT16; 197 case gl.UNSIGNED_INT: return rrDefs.IndexType.INDEXTYPE_UINT32; 198 default: 199 throw new Error('Value to do mapping not compatible'); 200 } 201 }; 202 203 /** 204 * @param {number} func (deUint32) 205 * @return {rrRenderState.TestFunc} 206 * @throws {Error} 207 */ 208 sglrReferenceUtils.mapGLTestFunc = function(func) { 209 switch (func) { 210 case gl.ALWAYS: return rrRenderState.TestFunc.ALWAYS; 211 case gl.EQUAL: return rrRenderState.TestFunc.EQUAL; 212 case gl.GEQUAL: return rrRenderState.TestFunc.GEQUAL; 213 case gl.GREATER: return rrRenderState.TestFunc.GREATER; 214 case gl.LEQUAL: return rrRenderState.TestFunc.LEQUAL; 215 case gl.LESS: return rrRenderState.TestFunc.LESS; 216 case gl.NEVER: return rrRenderState.TestFunc.NEVER; 217 case gl.NOTEQUAL: return rrRenderState.TestFunc.NOTEQUAL; 218 default: 219 throw new Error('Value to do mapping not compatible'); 220 } 221 }; 222 223 /** 224 * @param {number} op (deUint32) 225 * @return {rrRenderState.StencilOp} 226 * @throws {Error} 227 */ 228 sglrReferenceUtils.mapGLStencilOp = function(op) { 229 switch (op) { 230 case gl.KEEP: return rrRenderState.StencilOp.KEEP; 231 case gl.ZERO: return rrRenderState.StencilOp.ZERO; 232 case gl.REPLACE: return rrRenderState.StencilOp.REPLACE; 233 case gl.INCR: return rrRenderState.StencilOp.INCR; 234 case gl.DECR: return rrRenderState.StencilOp.DECR; 235 case gl.INCR_WRAP: return rrRenderState.StencilOp.INCR_WRAP; 236 case gl.DECR_WRAP: return rrRenderState.StencilOp.DECR_WRAP; 237 case gl.INVERT: return rrRenderState.StencilOp.INVERT; 238 default: 239 throw new Error('Value to do mapping not compatible'); 240 } 241 }; 242 243 /** 244 * @param {number} equation (deUint32) 245 * @return {rrRenderState.BlendEquation} 246 * @throws {Error} 247 */ 248 sglrReferenceUtils.mapGLBlendEquation = function(equation) { 249 switch (equation) { 250 case gl.FUNC_ADD: return rrRenderState.BlendEquation.ADD; 251 case gl.FUNC_SUBTRACT: return rrRenderState.BlendEquation.SUBTRACT; 252 case gl.FUNC_REVERSE_SUBTRACT: return rrRenderState.BlendEquation.REVERSE_SUBTRACT; 253 case gl.MIN: return rrRenderState.BlendEquation.MIN; 254 case gl.MAX: return rrRenderState.BlendEquation.MAX; 255 default: 256 throw new Error('Value to do mapping not compatible'); 257 } 258 }; 259 260 /** 261 * @param {number} equation (deUint32) 262 * @return {rrRenderState.BlendEquationAdvanced} 263 * @throws {Error} 264 */ 265 /*sglrReferenceUtils.mapGLBlendEquationAdvanced = function(equation) { 266 switch (equation) { 267 case gl.MULTIPLY_KHR: return rrRenderState.BlendEquationAdvanced.MULTIPLY; 268 case gl.SCREEN_KHR: return rrRenderState.BlendEquationAdvanced.SCREEN; 269 case gl.OVERLAY_KHR: return rrRenderState.BlendEquationAdvanced.OVERLAY; 270 case gl.DARKEN_KHR: return rrRenderState.BlendEquationAdvanced.DARKEN; 271 case gl.LIGHTEN_KHR: return rrRenderState.BlendEquationAdvanced.LIGHTEN; 272 case gl.COLORDODGE_KHR: return rrRenderState.BlendEquationAdvanced.COLORDODGE; 273 case gl.COLORBURN_KHR: return rrRenderState.BlendEquationAdvanced.COLORBURN; 274 case gl.HARDLIGHT_KHR: return rrRenderState.BlendEquationAdvanced.HARDLIGHT; 275 case gl.SOFTLIGHT_KHR: return rrRenderState.BlendEquationAdvanced.SOFTLIGHT; 276 case gl.DIFFERENCE_KHR: return rrRenderState.BlendEquationAdvanced.DIFFERENCE; 277 case gl.EXCLUSION_KHR: return rrRenderState.BlendEquationAdvanced.EXCLUSION; 278 case gl.HSL_HUE_KHR: return rrRenderState.BlendEquationAdvanced.HSL_HUE; 279 case gl.HSL_SATURATION_KHR: return rrRenderState.BlendEquationAdvanced.HSL_SATURATION; 280 case gl.HSL_COLOR_KHR: return rrRenderState.BlendEquationAdvanced.HSL_COLOR; 281 case gl.HSL_LUMINOSITY_KHR: return rrRenderState.BlendEquationAdvanced.HSL_LUMINOSITY; 282 default: 283 throw new Error("Value to do mapping not compatible"); 284 } 285 };*/ 286 287 /** 288 * @param {number} func (deUint32) 289 * @return {rrRenderState.BlendFunc} 290 * @throws {Error} 291 */ 292 sglrReferenceUtils.mapGLBlendFunc = function(func) { 293 switch (func) { 294 case gl.ZERO: return rrRenderState.BlendFunc.ZERO; 295 case gl.ONE: return rrRenderState.BlendFunc.ONE; 296 case gl.SRC_COLOR: return rrRenderState.BlendFunc.SRC_COLOR; 297 case gl.ONE_MINUS_SRC_COLOR: return rrRenderState.BlendFunc.ONE_MINUS_SRC_COLOR; 298 case gl.DST_COLOR: return rrRenderState.BlendFunc.DST_COLOR; 299 case gl.ONE_MINUS_DST_COLOR: return rrRenderState.BlendFunc.ONE_MINUS_DST_COLOR; 300 case gl.SRC_ALPHA: return rrRenderState.BlendFunc.SRC_ALPHA; 301 case gl.ONE_MINUS_SRC_ALPHA: return rrRenderState.BlendFunc.ONE_MINUS_SRC_ALPHA; 302 case gl.DST_ALPHA: return rrRenderState.BlendFunc.DST_ALPHA; 303 case gl.ONE_MINUS_DST_ALPHA: return rrRenderState.BlendFunc.ONE_MINUS_DST_ALPHA; 304 case gl.CONSTANT_COLOR: return rrRenderState.BlendFunc.CONSTANT_COLOR; 305 case gl.ONE_MINUS_CONSTANT_COLOR: return rrRenderState.BlendFunc.ONE_MINUS_CONSTANT_COLOR; 306 case gl.CONSTANT_ALPHA: return rrRenderState.BlendFunc.CONSTANT_ALPHA; 307 case gl.ONE_MINUS_CONSTANT_ALPHA: return rrRenderState.BlendFunc.ONE_MINUS_CONSTANT_ALPHA; 308 case gl.SRC_ALPHA_SATURATE: return rrRenderState.BlendFunc.SRC_ALPHA_SATURATE; 309 // case gl.SRC1_COLOR: return rrRenderState.BlendFunc.SRC1_COLOR; 310 // case gl.ONE_MINUS_SRC1_COLOR: return rrRenderState.BlendFunc.ONE_MINUS_SRC1_COLOR; 311 // case gl.SRC1_ALPHA: return rrRenderState.BlendFunc.SRC1_ALPHA; 312 // case gl.ONE_MINUS_SRC1_ALPHA: return rrRenderState.BlendFunc.ONE_MINUS_SRC1_ALPHA; 313 default: 314 throw new Error('Value to do mapping not compatible'); 315 } 316 }; 317 });