You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
322 lines
11 KiB
322 lines
11 KiB
/*-------------------------------------------------------------------------
|
|
* drawElements Quality Program OpenGL ES Utilities
|
|
* ------------------------------------------------
|
|
*
|
|
* Copyright 2014 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*
|
|
*//*!
|
|
* \file
|
|
* \brief Reference context utils
|
|
*//*--------------------------------------------------------------------*/
|
|
|
|
#include "sglrReferenceUtils.hpp"
|
|
#include "glwEnums.hpp"
|
|
|
|
namespace sglr
|
|
{
|
|
namespace rr_util
|
|
{
|
|
|
|
rr::VertexAttribType mapGLPureIntegerVertexAttributeType (deUint32 type)
|
|
{
|
|
switch (type)
|
|
{
|
|
case GL_UNSIGNED_BYTE: return rr::VERTEXATTRIBTYPE_PURE_UINT8;
|
|
case GL_UNSIGNED_SHORT: return rr::VERTEXATTRIBTYPE_PURE_UINT16;
|
|
case GL_UNSIGNED_INT: return rr::VERTEXATTRIBTYPE_PURE_UINT32;
|
|
case GL_BYTE: return rr::VERTEXATTRIBTYPE_PURE_INT8;
|
|
case GL_SHORT: return rr::VERTEXATTRIBTYPE_PURE_INT16;
|
|
case GL_INT: return rr::VERTEXATTRIBTYPE_PURE_INT32;
|
|
default:
|
|
DE_ASSERT(false);
|
|
return rr::VERTEXATTRIBTYPE_LAST;
|
|
}
|
|
}
|
|
|
|
rr::VertexAttribType mapGLFloatVertexAttributeType (deUint32 type, bool normalizedInteger, int size, glu::ContextType ctxType)
|
|
{
|
|
const bool useClampingNormalization = (ctxType.getProfile() == glu::PROFILE_ES && ctxType.getMajorVersion() >= 3) ||
|
|
(ctxType.getMajorVersion() == 4 && ctxType.getMinorVersion() >= 2);
|
|
const bool bgraComponentOrder = (size == GL_BGRA);
|
|
|
|
switch (type)
|
|
{
|
|
case GL_FLOAT:
|
|
return rr::VERTEXATTRIBTYPE_FLOAT;
|
|
|
|
case GL_HALF_FLOAT:
|
|
return rr::VERTEXATTRIBTYPE_HALF;
|
|
|
|
case GL_FIXED:
|
|
return rr::VERTEXATTRIBTYPE_FIXED;
|
|
|
|
case GL_DOUBLE:
|
|
return rr::VERTEXATTRIBTYPE_DOUBLE;
|
|
|
|
case GL_UNSIGNED_BYTE:
|
|
if (!normalizedInteger)
|
|
return rr::VERTEXATTRIBTYPE_NONPURE_UINT8;
|
|
else
|
|
return (!bgraComponentOrder) ? (rr::VERTEXATTRIBTYPE_NONPURE_UNORM8) : (rr::VERTEXATTRIBTYPE_NONPURE_UNORM8_BGRA);
|
|
|
|
case GL_UNSIGNED_SHORT:
|
|
if (!normalizedInteger)
|
|
return rr::VERTEXATTRIBTYPE_NONPURE_UINT16;
|
|
else
|
|
return rr::VERTEXATTRIBTYPE_NONPURE_UNORM16;
|
|
|
|
case GL_UNSIGNED_INT:
|
|
if (!normalizedInteger)
|
|
return rr::VERTEXATTRIBTYPE_NONPURE_UINT32;
|
|
else
|
|
return rr::VERTEXATTRIBTYPE_NONPURE_UNORM32;
|
|
|
|
case GL_UNSIGNED_INT_2_10_10_10_REV:
|
|
if (!normalizedInteger)
|
|
return rr::VERTEXATTRIBTYPE_NONPURE_UINT_2_10_10_10_REV;
|
|
else
|
|
return (!bgraComponentOrder) ? (rr::VERTEXATTRIBTYPE_NONPURE_UNORM_2_10_10_10_REV) : (rr::VERTEXATTRIBTYPE_NONPURE_UNORM_2_10_10_10_REV_BGRA);
|
|
|
|
case GL_BYTE:
|
|
if (!normalizedInteger)
|
|
return rr::VERTEXATTRIBTYPE_NONPURE_INT8;
|
|
else if (useClampingNormalization)
|
|
return rr::VERTEXATTRIBTYPE_NONPURE_SNORM8_CLAMP;
|
|
else
|
|
return rr::VERTEXATTRIBTYPE_NONPURE_SNORM8_SCALE;
|
|
|
|
case GL_SHORT:
|
|
if (!normalizedInteger)
|
|
return rr::VERTEXATTRIBTYPE_NONPURE_INT16;
|
|
else if (useClampingNormalization)
|
|
return rr::VERTEXATTRIBTYPE_NONPURE_SNORM16_CLAMP;
|
|
else
|
|
return rr::VERTEXATTRIBTYPE_NONPURE_SNORM16_SCALE;
|
|
|
|
case GL_INT:
|
|
if (!normalizedInteger)
|
|
return rr::VERTEXATTRIBTYPE_NONPURE_INT32;
|
|
else if (useClampingNormalization)
|
|
return rr::VERTEXATTRIBTYPE_NONPURE_SNORM32_CLAMP;
|
|
else
|
|
return rr::VERTEXATTRIBTYPE_NONPURE_SNORM32_SCALE;
|
|
|
|
case GL_INT_2_10_10_10_REV:
|
|
if (!normalizedInteger)
|
|
return rr::VERTEXATTRIBTYPE_NONPURE_INT_2_10_10_10_REV;
|
|
else if (useClampingNormalization)
|
|
return (!bgraComponentOrder) ? (rr::VERTEXATTRIBTYPE_NONPURE_SNORM_2_10_10_10_REV_CLAMP) : (rr::VERTEXATTRIBTYPE_NONPURE_SNORM_2_10_10_10_REV_CLAMP_BGRA);
|
|
else
|
|
return (!bgraComponentOrder) ? (rr::VERTEXATTRIBTYPE_NONPURE_SNORM_2_10_10_10_REV_SCALE) : (rr::VERTEXATTRIBTYPE_NONPURE_SNORM_2_10_10_10_REV_SCALE_BGRA);
|
|
|
|
default:
|
|
DE_ASSERT(false);
|
|
return rr::VERTEXATTRIBTYPE_LAST;
|
|
}
|
|
}
|
|
|
|
int mapGLSize (int size)
|
|
{
|
|
switch (size)
|
|
{
|
|
case 1: return 1;
|
|
case 2: return 2;
|
|
case 3: return 3;
|
|
case 4: return 4;
|
|
case GL_BGRA: return 4;
|
|
|
|
default:
|
|
DE_ASSERT(false);
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
rr::PrimitiveType mapGLPrimitiveType (deUint32 type)
|
|
{
|
|
switch (type)
|
|
{
|
|
case GL_TRIANGLES: return rr::PRIMITIVETYPE_TRIANGLES;
|
|
case GL_TRIANGLE_STRIP: return rr::PRIMITIVETYPE_TRIANGLE_STRIP;
|
|
case GL_TRIANGLE_FAN: return rr::PRIMITIVETYPE_TRIANGLE_FAN;
|
|
case GL_LINES: return rr::PRIMITIVETYPE_LINES;
|
|
case GL_LINE_STRIP: return rr::PRIMITIVETYPE_LINE_STRIP;
|
|
case GL_LINE_LOOP: return rr::PRIMITIVETYPE_LINE_LOOP;
|
|
case GL_POINTS: return rr::PRIMITIVETYPE_POINTS;
|
|
case GL_LINES_ADJACENCY: return rr::PRIMITIVETYPE_LINES_ADJACENCY;
|
|
case GL_LINE_STRIP_ADJACENCY: return rr::PRIMITIVETYPE_LINE_STRIP_ADJACENCY;
|
|
case GL_TRIANGLES_ADJACENCY: return rr::PRIMITIVETYPE_TRIANGLES_ADJACENCY;
|
|
case GL_TRIANGLE_STRIP_ADJACENCY: return rr::PRIMITIVETYPE_TRIANGLE_STRIP_ADJACENCY;
|
|
default:
|
|
DE_ASSERT(false);
|
|
return rr::PRIMITIVETYPE_LAST;
|
|
}
|
|
}
|
|
|
|
rr::IndexType mapGLIndexType (deUint32 type)
|
|
{
|
|
switch (type)
|
|
{
|
|
case GL_UNSIGNED_BYTE: return rr::INDEXTYPE_UINT8;
|
|
case GL_UNSIGNED_SHORT: return rr::INDEXTYPE_UINT16;
|
|
case GL_UNSIGNED_INT: return rr::INDEXTYPE_UINT32;
|
|
default:
|
|
DE_ASSERT(false);
|
|
return rr::INDEXTYPE_LAST;
|
|
}
|
|
}
|
|
|
|
|
|
rr::GeometryShaderOutputType mapGLGeometryShaderOutputType (deUint32 primitive)
|
|
{
|
|
switch (primitive)
|
|
{
|
|
case GL_POINTS: return rr::GEOMETRYSHADEROUTPUTTYPE_POINTS;
|
|
case GL_LINE_STRIP: return rr::GEOMETRYSHADEROUTPUTTYPE_LINE_STRIP;
|
|
case GL_TRIANGLE_STRIP: return rr::GEOMETRYSHADEROUTPUTTYPE_TRIANGLE_STRIP;
|
|
default:
|
|
DE_ASSERT(DE_FALSE);
|
|
return rr::GEOMETRYSHADEROUTPUTTYPE_LAST;
|
|
}
|
|
}
|
|
|
|
rr::GeometryShaderInputType mapGLGeometryShaderInputType (deUint32 primitive)
|
|
{
|
|
switch (primitive)
|
|
{
|
|
case GL_POINTS: return rr::GEOMETRYSHADERINPUTTYPE_POINTS;
|
|
case GL_LINES: return rr::GEOMETRYSHADERINPUTTYPE_LINES;
|
|
case GL_LINE_STRIP: return rr::GEOMETRYSHADERINPUTTYPE_LINES;
|
|
case GL_LINE_LOOP: return rr::GEOMETRYSHADERINPUTTYPE_LINES;
|
|
case GL_TRIANGLES: return rr::GEOMETRYSHADERINPUTTYPE_TRIANGLES;
|
|
case GL_TRIANGLE_STRIP: return rr::GEOMETRYSHADERINPUTTYPE_TRIANGLES;
|
|
case GL_TRIANGLE_FAN: return rr::GEOMETRYSHADERINPUTTYPE_TRIANGLES;
|
|
case GL_LINES_ADJACENCY: return rr::GEOMETRYSHADERINPUTTYPE_LINES_ADJACENCY;
|
|
case GL_LINE_STRIP_ADJACENCY: return rr::GEOMETRYSHADERINPUTTYPE_LINES_ADJACENCY;
|
|
case GL_TRIANGLES_ADJACENCY: return rr::GEOMETRYSHADERINPUTTYPE_TRIANGLES_ADJACENCY;
|
|
case GL_TRIANGLE_STRIP_ADJACENCY: return rr::GEOMETRYSHADERINPUTTYPE_TRIANGLES_ADJACENCY;
|
|
default:
|
|
DE_ASSERT(DE_FALSE);
|
|
return rr::GEOMETRYSHADERINPUTTYPE_LAST;
|
|
}
|
|
}
|
|
|
|
rr::TestFunc mapGLTestFunc (deUint32 func)
|
|
{
|
|
switch (func)
|
|
{
|
|
case GL_ALWAYS: return rr::TESTFUNC_ALWAYS;
|
|
case GL_EQUAL: return rr::TESTFUNC_EQUAL;
|
|
case GL_GEQUAL: return rr::TESTFUNC_GEQUAL;
|
|
case GL_GREATER: return rr::TESTFUNC_GREATER;
|
|
case GL_LEQUAL: return rr::TESTFUNC_LEQUAL;
|
|
case GL_LESS: return rr::TESTFUNC_LESS;
|
|
case GL_NEVER: return rr::TESTFUNC_NEVER;
|
|
case GL_NOTEQUAL: return rr::TESTFUNC_NOTEQUAL;
|
|
default:
|
|
DE_ASSERT(false);
|
|
return rr::TESTFUNC_LAST;
|
|
}
|
|
}
|
|
|
|
rr::StencilOp mapGLStencilOp (deUint32 op)
|
|
{
|
|
switch (op)
|
|
{
|
|
case GL_KEEP: return rr::STENCILOP_KEEP;
|
|
case GL_ZERO: return rr::STENCILOP_ZERO;
|
|
case GL_REPLACE: return rr::STENCILOP_REPLACE;
|
|
case GL_INCR: return rr::STENCILOP_INCR;
|
|
case GL_DECR: return rr::STENCILOP_DECR;
|
|
case GL_INCR_WRAP: return rr::STENCILOP_INCR_WRAP;
|
|
case GL_DECR_WRAP: return rr::STENCILOP_DECR_WRAP;
|
|
case GL_INVERT: return rr::STENCILOP_INVERT;
|
|
default:
|
|
DE_ASSERT(false);
|
|
return rr::STENCILOP_LAST;
|
|
}
|
|
}
|
|
|
|
rr::BlendEquation mapGLBlendEquation (deUint32 equation)
|
|
{
|
|
switch (equation)
|
|
{
|
|
case GL_FUNC_ADD: return rr::BLENDEQUATION_ADD;
|
|
case GL_FUNC_SUBTRACT: return rr::BLENDEQUATION_SUBTRACT;
|
|
case GL_FUNC_REVERSE_SUBTRACT: return rr::BLENDEQUATION_REVERSE_SUBTRACT;
|
|
case GL_MIN: return rr::BLENDEQUATION_MIN;
|
|
case GL_MAX: return rr::BLENDEQUATION_MAX;
|
|
default:
|
|
DE_ASSERT(false);
|
|
return rr::BLENDEQUATION_LAST;
|
|
}
|
|
}
|
|
|
|
rr::BlendEquationAdvanced mapGLBlendEquationAdvanced (deUint32 equation)
|
|
{
|
|
switch (equation)
|
|
{
|
|
case GL_MULTIPLY_KHR: return rr::BLENDEQUATION_ADVANCED_MULTIPLY;
|
|
case GL_SCREEN_KHR: return rr::BLENDEQUATION_ADVANCED_SCREEN;
|
|
case GL_OVERLAY_KHR: return rr::BLENDEQUATION_ADVANCED_OVERLAY;
|
|
case GL_DARKEN_KHR: return rr::BLENDEQUATION_ADVANCED_DARKEN;
|
|
case GL_LIGHTEN_KHR: return rr::BLENDEQUATION_ADVANCED_LIGHTEN;
|
|
case GL_COLORDODGE_KHR: return rr::BLENDEQUATION_ADVANCED_COLORDODGE;
|
|
case GL_COLORBURN_KHR: return rr::BLENDEQUATION_ADVANCED_COLORBURN;
|
|
case GL_HARDLIGHT_KHR: return rr::BLENDEQUATION_ADVANCED_HARDLIGHT;
|
|
case GL_SOFTLIGHT_KHR: return rr::BLENDEQUATION_ADVANCED_SOFTLIGHT;
|
|
case GL_DIFFERENCE_KHR: return rr::BLENDEQUATION_ADVANCED_DIFFERENCE;
|
|
case GL_EXCLUSION_KHR: return rr::BLENDEQUATION_ADVANCED_EXCLUSION;
|
|
case GL_HSL_HUE_KHR: return rr::BLENDEQUATION_ADVANCED_HSL_HUE;
|
|
case GL_HSL_SATURATION_KHR: return rr::BLENDEQUATION_ADVANCED_HSL_SATURATION;
|
|
case GL_HSL_COLOR_KHR: return rr::BLENDEQUATION_ADVANCED_HSL_COLOR;
|
|
case GL_HSL_LUMINOSITY_KHR: return rr::BLENDEQUATION_ADVANCED_HSL_LUMINOSITY;
|
|
default:
|
|
DE_ASSERT(false);
|
|
return rr::BLENDEQUATION_ADVANCED_LAST;
|
|
}
|
|
}
|
|
|
|
rr::BlendFunc mapGLBlendFunc (deUint32 func)
|
|
{
|
|
switch (func)
|
|
{
|
|
case GL_ZERO: return rr::BLENDFUNC_ZERO;
|
|
case GL_ONE: return rr::BLENDFUNC_ONE;
|
|
case GL_SRC_COLOR: return rr::BLENDFUNC_SRC_COLOR;
|
|
case GL_ONE_MINUS_SRC_COLOR: return rr::BLENDFUNC_ONE_MINUS_SRC_COLOR;
|
|
case GL_DST_COLOR: return rr::BLENDFUNC_DST_COLOR;
|
|
case GL_ONE_MINUS_DST_COLOR: return rr::BLENDFUNC_ONE_MINUS_DST_COLOR;
|
|
case GL_SRC_ALPHA: return rr::BLENDFUNC_SRC_ALPHA;
|
|
case GL_ONE_MINUS_SRC_ALPHA: return rr::BLENDFUNC_ONE_MINUS_SRC_ALPHA;
|
|
case GL_DST_ALPHA: return rr::BLENDFUNC_DST_ALPHA;
|
|
case GL_ONE_MINUS_DST_ALPHA: return rr::BLENDFUNC_ONE_MINUS_DST_ALPHA;
|
|
case GL_CONSTANT_COLOR: return rr::BLENDFUNC_CONSTANT_COLOR;
|
|
case GL_ONE_MINUS_CONSTANT_COLOR: return rr::BLENDFUNC_ONE_MINUS_CONSTANT_COLOR;
|
|
case GL_CONSTANT_ALPHA: return rr::BLENDFUNC_CONSTANT_ALPHA;
|
|
case GL_ONE_MINUS_CONSTANT_ALPHA: return rr::BLENDFUNC_ONE_MINUS_CONSTANT_ALPHA;
|
|
case GL_SRC_ALPHA_SATURATE: return rr::BLENDFUNC_SRC_ALPHA_SATURATE;
|
|
case GL_SRC1_COLOR: return rr::BLENDFUNC_SRC1_COLOR;
|
|
case GL_ONE_MINUS_SRC1_COLOR: return rr::BLENDFUNC_ONE_MINUS_SRC1_COLOR;
|
|
case GL_SRC1_ALPHA: return rr::BLENDFUNC_SRC1_ALPHA;
|
|
case GL_ONE_MINUS_SRC1_ALPHA: return rr::BLENDFUNC_ONE_MINUS_SRC1_ALPHA;
|
|
default:
|
|
DE_ASSERT(false);
|
|
return rr::BLENDFUNC_LAST;
|
|
}
|
|
}
|
|
|
|
} // rr_util
|
|
} // sglr
|