13c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*-------------------------------------------------------------------------
23c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * drawElements Quality Program OpenGL ES Utilities
33c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * ------------------------------------------------
43c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
53c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Copyright 2014 The Android Open Source Project
63c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
73c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Licensed under the Apache License, Version 2.0 (the "License");
83c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * you may not use this file except in compliance with the License.
93c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * You may obtain a copy of the License at
103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *      http://www.apache.org/licenses/LICENSE-2.0
123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Unless required by applicable law or agreed to in writing, software
143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * distributed under the License is distributed on an "AS IS" BASIS,
153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * See the License for the specific language governing permissions and
173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * limitations under the License.
183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*!
203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \file
213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Shader utilities.
223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "gluShaderUtil.hpp"
253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "glwEnums.hpp"
26d6148171f88da1301f053e2e0236afc69416137cJarkko Pöyry#include "deArrayUtil.hpp"
273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
283c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace glu
293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// ShadingLanguageVersion
323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
333c827367444ee418f129b2c238299f49d3264554Jarkko Poyryconst char* getGLSLVersionName (GLSLVersion version)
343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	static const char* s_names[] =
363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"GLSL ES 1.0",
383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"GLSL ES 3.0",
393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"GLSL ES 3.1",
403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"GLSL 1.3",
413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"GLSL 1.4",
423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"GLSL 1.5",
433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"GLSL 3.3",
443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"GLSL 4.0",
453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"GLSL 4.1",
463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"GLSL 4.2",
473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"GLSL 4.3",
483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"GLSL 4.4",
493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	};
503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	return de::getSizedArrayElement<GLSL_VERSION_LAST>(s_names, version);
523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
543c827367444ee418f129b2c238299f49d3264554Jarkko Poyryconst char* getGLSLVersionDeclaration (GLSLVersion version)
553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	static const char* s_decl[] =
573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"#version 100",
593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"#version 300 es",
603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"#version 310 es",
613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"#version 130",
623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"#version 140",
633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"#version 150",
643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"#version 330",
653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"#version 400",
663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"#version 410",
673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"#version 420",
683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"#version 430",
693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"#version 440",
703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	};
713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	return de::getSizedArrayElement<GLSL_VERSION_LAST>(s_decl, version);
733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
753c827367444ee418f129b2c238299f49d3264554Jarkko Poyrybool glslVersionUsesInOutQualifiers (GLSLVersion version)
763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	return de::inRange<int>(version, GLSL_VERSION_300_ES, GLSL_VERSION_310_ES) || de::inRange<int>(version, GLSL_VERSION_330, GLSL_VERSION_430);
783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
803c827367444ee418f129b2c238299f49d3264554Jarkko Poyrybool glslVersionIsES (GLSLVersion version)
813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_ASSERT(version != GLSL_VERSION_LAST);
833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	if (version == GLSL_VERSION_100_ES	||
853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		version == GLSL_VERSION_300_ES	||
863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		version == GLSL_VERSION_310_ES)
873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return true;
883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	else
893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return false;
903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// \todo [2014-10-06 pyry] Export this.
933c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic ApiType getMinAPIForGLSLVersion (GLSLVersion version)
943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	static const ApiType s_minApi[] =
963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		ApiType::es(2,0),
983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		ApiType::es(3,0),
993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		ApiType::es(3,1),
1003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		ApiType::core(3,0),
1013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		ApiType::core(3,1),
1023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		ApiType::core(3,2),
1033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		ApiType::core(3,3),
1043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		ApiType::core(4,0),
1053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		ApiType::core(4,1),
1063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		ApiType::core(4,2),
1073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		ApiType::core(4,3),
1083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		ApiType::core(4,4),
1093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	};
1103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	return de::getSizedArrayElement<GLSL_VERSION_LAST>(s_minApi, version);
1123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
1133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1143c827367444ee418f129b2c238299f49d3264554Jarkko Poyrybool isGLSLVersionSupported (ContextType type, GLSLVersion version)
1153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	return contextSupports(type, getMinAPIForGLSLVersion(version));
1173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
1183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1193c827367444ee418f129b2c238299f49d3264554Jarkko PoyryGLSLVersion getContextTypeGLSLVersion (ContextType type)
1203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	// \note From newer to older
1223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	for (int version = GLSL_VERSION_LAST-1; version >= 0; version--)
1233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
1243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		if (isGLSLVersionSupported(type, GLSLVersion(version)))
1253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return GLSLVersion(version);
1263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
1273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_ASSERT(false);
1293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	return GLSL_VERSION_LAST;
1303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
1313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// ShaderType
1333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1343c827367444ee418f129b2c238299f49d3264554Jarkko Poyryconst char* getShaderTypeName (ShaderType shaderType)
1353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	const char* s_names[] =
1373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
1383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"vertex",
1393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"fragment",
1403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"geometry",
1413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"tess_control",
1423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"tess_eval",
1433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"compute",
1443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	};
1453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_STATIC_ASSERT(DE_LENGTH_OF_ARRAY(s_names) == SHADERTYPE_LAST);
1473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_ASSERT(deInBounds32((int)shaderType, 0, SHADERTYPE_LAST));
1483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	return s_names[(int)shaderType];
1493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
1503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// Precision
1523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1533c827367444ee418f129b2c238299f49d3264554Jarkko Poyryconst char* getPrecisionName (Precision precision)
1543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	const char* s_names[] =
1563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
1573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"lowp",
1583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"mediump",
1593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"highp"
1603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	};
1613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_STATIC_ASSERT(DE_LENGTH_OF_ARRAY(s_names) == PRECISION_LAST);
1633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_ASSERT(deInBounds32((int)precision, 0, PRECISION_LAST));
1643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	return s_names[(int)precision];
1653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
1663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// DataType
1683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1693c827367444ee418f129b2c238299f49d3264554Jarkko Poyryconst char* getDataTypeName (DataType dataType)
1703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	const char* s_names[] =
1723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
1733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"invalid",
1743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"float",
1753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"vec2",
1763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"vec3",
1773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"vec4",
1783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"mat2",
1793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"mat2x3",
1803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"mat2x4",
1813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"mat3x2",
1823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"mat3",
1833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"mat3x4",
1843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"mat4x2",
1853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"mat4x3",
1863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"mat4",
1873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"int",
1883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"ivec2",
1893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"ivec3",
1903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"ivec4",
1913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"uint",
1923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"uvec2",
1933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"uvec3",
1943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"uvec4",
1953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"bool",
1963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"bvec2",
1973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"bvec3",
1983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"bvec4",
1993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"sampler1D",
2003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"sampler2D",
2013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"samplerCube",
2023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"sampler2DArray",
2033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"sampler3D",
2043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"samplerCubeArray",
2053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"sampler1DShadow",
2063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"sampler2DShadow",
2073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"samplerCubeShadow",
2083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"sampler2DArrayShadow",
2093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"samplerCubeArrayShadow",
2103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"isampler1D",
2113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"isampler2D",
2123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"isamplerCube",
2133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"isampler2DArray",
2143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"isampler3D",
2153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"isamplerCubeArray",
2163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"usampler1D",
2173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"usampler2D",
2183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"usamplerCube",
2193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"usampler2DArray",
2203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"usampler3D",
2213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"usamplerCubeArray",
2223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"sampler2DMS",
2233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"isampler2DMS",
2243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"usampler2DMS",
2253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"image2D",
2263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"imageCube",
2273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"image2DArray",
2283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"image3D",
2293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"imageCubeArray",
2303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"iimage2D",
2313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"iimageCube",
2323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"iimage2DArray",
2333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"iimage3D",
2343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"iimageCubeArray",
2353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"uimage2D",
2363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"uimageCube",
2373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"uimage2DArray",
2383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"uimage3D",
2393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"uimageCubeArray",
2403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		"atomic_uint",
2413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	};
2423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_STATIC_ASSERT(DE_LENGTH_OF_ARRAY(s_names) == TYPE_LAST);
2443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_ASSERT(deInBounds32((int)dataType, 0, DE_LENGTH_OF_ARRAY(s_names)));
2453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	return s_names[(int)dataType];
2463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
2473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2483c827367444ee418f129b2c238299f49d3264554Jarkko Poyryint getDataTypeScalarSize (DataType dataType)
2493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
2503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	const int s_sizes[] =
2513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
2523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		-1,		// invalid
2533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// float
2543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		2,		// vec2
2553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		3,		// vec3
2563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		4,		// vec4
2573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		4,		// mat2
2583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		6,		// mat2x3
2593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		8,		// mat2x4
2603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		6,		// mat3x2
2613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		9,		// mat3
2623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		12,		// mat3x4
2633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		8,		// mat4x2
2643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		12,		// mat4x3
2653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		16,		// mat4
2663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// int
2673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		2,		// ivec2
2683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		3,		// ivec3
2693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		4,		// ivec4
2703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// uint
2713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		2,		// uvec2
2723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		3,		// uvec3
2733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		4,		// uvec4
2743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// bool
2753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		2,		// bvec2
2763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		3,		// bvec3
2773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		4,		// bvec4
2783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// sampler1D
2793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// sampler2D
2803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// samplerCube
2813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// sampler2DArray
2823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// sampler3D
2833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// samplerCubeArray
2843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// sampler1DShadow
2853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// sampler2DShadow
2863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// samplerCubeShadow
2873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// sampler2DArrayShadow
2883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// samplerCubeArrayShadow
2893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// isampler1D
2903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// isampler2D
2913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// isamplerCube
2923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// isampler2DArray
2933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// isampler3D
2943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// isamplerCubeArray
2953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// usampler1D
2963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// usampler2D
2973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// usamplerCube
2983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// usampler2DArray
2993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// usampler3D
3003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// usamplerCubeArray
3013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// sampler2DMS
3023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// isampler2DMS
3033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// usampler2DMS
3043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// image2D
3053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// imageCube
3063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// image2DArray
3073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// image3D
3083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// imageCubeArray
3093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// iimage2D
3103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// iimageCube
3113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// iimage2DArray
3123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// iimage3D
3133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// iimageCubeArray
3143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// uimage2D
3153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// uimageCube
3163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// uimage2DArray
3173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// uimage3D
3183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// uimageCubeArray
3193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		1,		// atomic_uint
3203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	};
3213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_STATIC_ASSERT(DE_LENGTH_OF_ARRAY(s_sizes) == TYPE_LAST);
3233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_ASSERT(deInBounds32((int)dataType, 0, DE_LENGTH_OF_ARRAY(s_sizes)));
3243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	return s_sizes[(int)dataType];
3253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
3263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3273c827367444ee418f129b2c238299f49d3264554Jarkko PoyryDataType getDataTypeScalarType (DataType dataType)
3283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
3293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	const DataType s_scalarTypes[] =
3303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
3313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// invalid
3323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_FLOAT,			// float
3333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_FLOAT,			// vec2
3343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_FLOAT,			// vec3
3353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_FLOAT,			// vec4
3363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_FLOAT,			// mat2
3373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_FLOAT,			// mat2x3
3383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_FLOAT,			// mat2x4
3393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_FLOAT,			// mat3x2
3403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_FLOAT,			// mat3
3413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_FLOAT,			// mat3x4
3423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_FLOAT,			// mat4x2
3433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_FLOAT,			// mat4x3
3443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_FLOAT,			// mat4
3453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INT,			// int
3463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INT,			// ivec2
3473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INT,			// ivec3
3483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INT,			// ivec4
3493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_UINT,			// uint
3503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_UINT,			// uvec2
3513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_UINT,			// uvec3
3523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_UINT,			// uvec4
3533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_BOOL,			// bool
3543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_BOOL,			// bvec2
3553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_BOOL,			// bvec3
3563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_BOOL,			// bvec4
3573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_SAMPLER_1D,					// sampler1D
3583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_SAMPLER_2D,					// sampler2D
3593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_SAMPLER_CUBE,					// samplerCube
3603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_SAMPLER_2D_ARRAY,				// sampler2DArray
3613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_SAMPLER_3D,					// sampler3D
3623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_SAMPLER_CUBE_ARRAY,			// samplerCubeArray
3633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_SAMPLER_1D_SHADOW,				// sampler1DShadow
3643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_SAMPLER_2D_SHADOW,				// sampler2DShadow
3653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_SAMPLER_CUBE_SHADOW,			// samplerCubeShadow
3663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_SAMPLER_2D_ARRAY_SHADOW,		// sampler2DArrayShadow
3673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_SAMPLER_CUBE_ARRAY_SHADOW,		// samplerCubeArrayShadow
3683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INT_SAMPLER_1D,				// isampler1D
3693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INT_SAMPLER_2D,				// isampler2D
3703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INT_SAMPLER_CUBE,				// isamplerCube
3713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INT_SAMPLER_2D_ARRAY,			// isampler2DArray
3723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INT_SAMPLER_3D,				// isampler3D
3733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INT_SAMPLER_CUBE_ARRAY,		// isamplerCubeArray
3743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_UINT_SAMPLER_1D,				// usampler1D
3753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_UINT_SAMPLER_2D,				// usampler2D
3763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_UINT_SAMPLER_CUBE,				// usamplerCube
3773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_UINT_SAMPLER_2D_ARRAY,			// usampler2DArray
3783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_UINT_SAMPLER_3D,				// usampler3D
3793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_UINT_SAMPLER_CUBE_ARRAY,		// usamplerCubeArray
3803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_SAMPLER_2D_MULTISAMPLE,		// sampler2DMS
3813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INT_SAMPLER_2D_MULTISAMPLE,	// isampler2DMS
3823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_UINT_SAMPLER_2D_MULTISAMPLE,	// usampler2DMS
3833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_IMAGE_2D,						// image2D
3843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_IMAGE_CUBE,					// imageCube
3853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_IMAGE_2D_ARRAY,				// image2DArray
3863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_IMAGE_3D,						// image3D
3873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_IMAGE_CUBE_ARRAY,				// imageCubeArray
3883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INT_IMAGE_2D,					// iimage2D
3893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INT_IMAGE_CUBE,				// iimageCube
3903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INT_IMAGE_2D_ARRAY,			// iimage2DArray
3913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INT_IMAGE_3D,					// iimage3D
3923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INT_IMAGE_CUBE_ARRAY,			// iimageCubeArray
3933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_UINT_IMAGE_2D,					// uimage2D
3943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_UINT_IMAGE_CUBE,				// uimageCube
3953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_UINT_IMAGE_2D_ARRAY,			// uimage2DArray
3963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_UINT_IMAGE_3D,					// uimage3D
3973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_UINT_IMAGE_CUBE_ARRAY,			// uimageCubeArray
3983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_UINT_ATOMIC_COUNTER,			// atomic_uint
3993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	};
4003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_STATIC_ASSERT(DE_LENGTH_OF_ARRAY(s_scalarTypes) == TYPE_LAST);
4023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_ASSERT(deInBounds32((int)dataType, 0, DE_LENGTH_OF_ARRAY(s_scalarTypes)));
4033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	return s_scalarTypes[(int)dataType];
4043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
4053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4063c827367444ee418f129b2c238299f49d3264554Jarkko PoyryDataType getDataTypeFloatScalars (DataType dataType)
4073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
4083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	const DataType s_floatTypes[] =
4093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
4103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// invalid
4113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_FLOAT,			// float
4123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_FLOAT_VEC2,	// vec2
4133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_FLOAT_VEC3,	// vec3
4143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_FLOAT_VEC4,	// vec4
4153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_FLOAT_MAT2,	// mat2
4163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_FLOAT_MAT2X3,	// mat2x3
4173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_FLOAT_MAT2X4,	// mat2x4
4183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_FLOAT_MAT3X2,	// mat3x2
4193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_FLOAT_MAT3,	// mat3
4203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_FLOAT_MAT3X4,	// mat3x4
4213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_FLOAT_MAT4X2,	// mat4x2
4223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_FLOAT_MAT4X3,	// mat4x3
4233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_FLOAT_MAT4,	// mat4
4243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_FLOAT,			// int
4253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_FLOAT_VEC2,	// ivec2
4263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_FLOAT_VEC3,	// ivec3
4273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_FLOAT_VEC4,	// ivec4
4283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_FLOAT,			// uint
4293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_FLOAT_VEC2,	// uvec2
4303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_FLOAT_VEC3,	// uvec3
4313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_FLOAT_VEC4,	// uvec4
4323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_FLOAT,			// bool
4333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_FLOAT_VEC2,	// bvec2
4343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_FLOAT_VEC3,	// bvec3
4353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_FLOAT_VEC4,	// bvec4
4363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// sampler1D
4373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// sampler2D
4383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// samplerCube
4393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// sampler2DArray
4403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// sampler3D
4413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// samplerCubeArray
4423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// sampler1DShadow
4433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// sampler2DShadow
4443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// samplerCubeShadow
4453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// sampler2DArrayShadow
4463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// samplerCubeArrayShadow
4473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// isampler1D
4483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// isampler2D
4493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// isamplerCube
4503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// isampler2DArray
4513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// isampler3D
4523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// isamplerCubeArray
4533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// usampler1D
4543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// usampler2D
4553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// usamplerCube
4563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// usampler2DArray
4573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// usampler3D
4583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// usamplerCubeArray
4593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// sampler2DMS
4603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// isampler2DMS
4613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// usampler2DMS
4623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// image2D
4633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// imageCube
4643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// image2DArray
4653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// image3D
4663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// imageCubeArray
4673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// iimage2D
4683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// iimageCube
4693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// iimage2DArray
4703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// iimage3D
4713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// iimageCubeArray
4723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// uimage2D
4733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// uimageCube
4743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// uimage2DArray
4753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// uimage3D
4763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// uimageCubeArray
4773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TYPE_INVALID,		// atomic_uint
4783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	};
4793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_STATIC_ASSERT(DE_LENGTH_OF_ARRAY(s_floatTypes) == TYPE_LAST);
4813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_ASSERT(deInBounds32((int)dataType, 0, DE_LENGTH_OF_ARRAY(s_floatTypes)));
4823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	return s_floatTypes[(int)dataType];
4833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
4843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4853c827367444ee418f129b2c238299f49d3264554Jarkko PoyryDataType getDataTypeVector (DataType scalarType, int size)
4863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
4873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_ASSERT(deInRange32(size, 1, 4));
4883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	switch (scalarType)
4893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
4903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TYPE_FLOAT:
4913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TYPE_INT:
4923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TYPE_UINT:
4933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TYPE_BOOL:
4943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return (DataType)((int)scalarType + size - 1);
4953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		default:
4963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return TYPE_INVALID;
4973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
4983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
4993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5003c827367444ee418f129b2c238299f49d3264554Jarkko PoyryDataType getDataTypeFloatVec (int vecSize)
5013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
5023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	return getDataTypeVector(TYPE_FLOAT, vecSize);
5033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
5043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5053c827367444ee418f129b2c238299f49d3264554Jarkko PoyryDataType getDataTypeIntVec (int vecSize)
5063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
5073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	return getDataTypeVector(TYPE_INT, vecSize);
5083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
5093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5103c827367444ee418f129b2c238299f49d3264554Jarkko PoyryDataType getDataTypeUintVec (int vecSize)
5113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
5123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	return getDataTypeVector(TYPE_UINT, vecSize);
5133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
5143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5153c827367444ee418f129b2c238299f49d3264554Jarkko PoyryDataType getDataTypeBoolVec (int vecSize)
5163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
5173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	return getDataTypeVector(TYPE_BOOL, vecSize);
5183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
5193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5203c827367444ee418f129b2c238299f49d3264554Jarkko PoyryDataType getDataTypeMatrix (int numCols, int numRows)
5213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
5223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_ASSERT(de::inRange(numCols, 2, 4) && de::inRange(numRows, 2, 4));
5233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	return (DataType)((int)TYPE_FLOAT_MAT2 + (numCols-2)*3 + (numRows-2));
5243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
5253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5263c827367444ee418f129b2c238299f49d3264554Jarkko Poyryint getDataTypeMatrixNumRows (DataType dataType)
5273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
5283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	switch (dataType)
5293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
5303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TYPE_FLOAT_MAT2:	return 2;
5313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TYPE_FLOAT_MAT2X3:	return 3;
5323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TYPE_FLOAT_MAT2X4:	return 4;
5333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TYPE_FLOAT_MAT3X2:	return 2;
5343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TYPE_FLOAT_MAT3:	return 3;
5353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TYPE_FLOAT_MAT3X4:	return 4;
5363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TYPE_FLOAT_MAT4X2:	return 2;
5373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TYPE_FLOAT_MAT4X3:	return 3;
5383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TYPE_FLOAT_MAT4:	return 4;
5393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		default:
5403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			DE_ASSERT(false);
5413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return 0;
5423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
5433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
5443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5453c827367444ee418f129b2c238299f49d3264554Jarkko Poyryint getDataTypeMatrixNumColumns (DataType dataType)
5463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
5473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	switch (dataType)
5483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
5493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TYPE_FLOAT_MAT2:	return 2;
5503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TYPE_FLOAT_MAT2X3:	return 2;
5513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TYPE_FLOAT_MAT2X4:	return 2;
5523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TYPE_FLOAT_MAT3X2:	return 3;
5533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TYPE_FLOAT_MAT3:	return 3;
5543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TYPE_FLOAT_MAT3X4:	return 3;
5553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TYPE_FLOAT_MAT4X2:	return 4;
5563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TYPE_FLOAT_MAT4X3:	return 4;
5573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TYPE_FLOAT_MAT4:	return 4;
5583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		default:
5593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			DE_ASSERT(false);
5603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return 0;
5613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
5623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
5633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5643c827367444ee418f129b2c238299f49d3264554Jarkko Poyryint	getDataTypeNumLocations	(DataType dataType)
5653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
5663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	if (isDataTypeScalarOrVector(dataType))
5673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return 1;
5683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	else if (isDataTypeMatrix(dataType))
5693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return getDataTypeMatrixNumColumns(dataType);
5703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_ASSERT(!"Illegal datatype.");
5723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	return 0;
5733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
5743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5753c827367444ee418f129b2c238299f49d3264554Jarkko Poyryint	getDataTypeNumComponents (DataType dataType)
5763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
5773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	if (isDataTypeScalarOrVector(dataType))
5783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return getDataTypeScalarSize(dataType);
5793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	else if (isDataTypeMatrix(dataType))
5803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return getDataTypeMatrixNumRows(dataType);
5813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_ASSERT(!"Illegal datatype.");
5833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	return 0;
5843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
5853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5863c827367444ee418f129b2c238299f49d3264554Jarkko PoyryDataType getDataTypeFromGLType (deUint32 glType)
5873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
5883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	switch (glType)
5893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
5903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_FLOAT:									return TYPE_FLOAT;
5913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_FLOAT_VEC2:								return TYPE_FLOAT_VEC2;
5923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_FLOAT_VEC3:								return TYPE_FLOAT_VEC3;
5933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_FLOAT_VEC4:								return TYPE_FLOAT_VEC4;
5943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_FLOAT_MAT2:								return TYPE_FLOAT_MAT2;
5963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_FLOAT_MAT2x3:							return TYPE_FLOAT_MAT2X3;
5973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_FLOAT_MAT2x4:							return TYPE_FLOAT_MAT2X4;
5983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_FLOAT_MAT3x2:							return TYPE_FLOAT_MAT3X2;
6003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_FLOAT_MAT3:								return TYPE_FLOAT_MAT3;
6013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_FLOAT_MAT3x4:							return TYPE_FLOAT_MAT3X4;
6023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_FLOAT_MAT4x2:							return TYPE_FLOAT_MAT4X2;
6043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_FLOAT_MAT4x3:							return TYPE_FLOAT_MAT4X3;
6053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_FLOAT_MAT4:								return TYPE_FLOAT_MAT4;
6063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_INT:									return TYPE_INT;
6083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_INT_VEC2:								return TYPE_INT_VEC2;
6093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_INT_VEC3:								return TYPE_INT_VEC3;
6103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_INT_VEC4:								return TYPE_INT_VEC4;
6113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_UNSIGNED_INT:							return TYPE_UINT;
6133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_UNSIGNED_INT_VEC2:						return TYPE_UINT_VEC2;
6143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_UNSIGNED_INT_VEC3:						return TYPE_UINT_VEC3;
6153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_UNSIGNED_INT_VEC4:						return TYPE_UINT_VEC4;
6163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_BOOL:									return TYPE_BOOL;
6183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_BOOL_VEC2:								return TYPE_BOOL_VEC2;
6193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_BOOL_VEC3:								return TYPE_BOOL_VEC3;
6203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_BOOL_VEC4:								return TYPE_BOOL_VEC4;
6213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_SAMPLER_1D:								return TYPE_SAMPLER_1D;
6233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_SAMPLER_2D:								return TYPE_SAMPLER_2D;
6243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_SAMPLER_CUBE:							return TYPE_SAMPLER_CUBE;
6253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_SAMPLER_2D_ARRAY:						return TYPE_SAMPLER_2D_ARRAY;
6263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_SAMPLER_3D:								return TYPE_SAMPLER_3D;
6273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_SAMPLER_CUBE_MAP_ARRAY:					return TYPE_SAMPLER_CUBE_ARRAY;
6283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_SAMPLER_1D_SHADOW:						return TYPE_SAMPLER_1D_SHADOW;
6303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_SAMPLER_2D_SHADOW:						return TYPE_SAMPLER_2D_SHADOW;
6313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_SAMPLER_CUBE_SHADOW:					return TYPE_SAMPLER_CUBE_SHADOW;
6323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_SAMPLER_2D_ARRAY_SHADOW:				return TYPE_SAMPLER_2D_ARRAY_SHADOW;
6333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW:			return TYPE_SAMPLER_CUBE_ARRAY_SHADOW;
6343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_INT_SAMPLER_1D:							return TYPE_INT_SAMPLER_1D;
6363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_INT_SAMPLER_2D:							return TYPE_INT_SAMPLER_2D;
6373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_INT_SAMPLER_CUBE:						return TYPE_INT_SAMPLER_CUBE;
6383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_INT_SAMPLER_2D_ARRAY:					return TYPE_INT_SAMPLER_2D_ARRAY;
6393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_INT_SAMPLER_3D:							return TYPE_INT_SAMPLER_3D;
6403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_INT_SAMPLER_CUBE_MAP_ARRAY:				return TYPE_INT_SAMPLER_CUBE_ARRAY;
6413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_UNSIGNED_INT_SAMPLER_1D:				return TYPE_UINT_SAMPLER_1D;
6433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_UNSIGNED_INT_SAMPLER_2D:				return TYPE_UINT_SAMPLER_2D;
6443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_UNSIGNED_INT_SAMPLER_CUBE:				return TYPE_UINT_SAMPLER_CUBE;
6453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_UNSIGNED_INT_SAMPLER_2D_ARRAY:			return TYPE_UINT_SAMPLER_2D_ARRAY;
6463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_UNSIGNED_INT_SAMPLER_3D:				return TYPE_UINT_SAMPLER_3D;
6473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY:	return TYPE_UINT_SAMPLER_CUBE_ARRAY;
6483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_SAMPLER_2D_MULTISAMPLE:					return TYPE_SAMPLER_2D_MULTISAMPLE;
6503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_INT_SAMPLER_2D_MULTISAMPLE:				return TYPE_INT_SAMPLER_2D_MULTISAMPLE;
6513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE:	return TYPE_UINT_SAMPLER_2D_MULTISAMPLE;
6523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_IMAGE_2D:								return TYPE_IMAGE_2D;
6543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_IMAGE_CUBE:								return TYPE_IMAGE_CUBE;
6553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_IMAGE_2D_ARRAY:							return TYPE_IMAGE_2D_ARRAY;
6563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_IMAGE_3D:								return TYPE_IMAGE_3D;
6573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_INT_IMAGE_2D:							return TYPE_INT_IMAGE_2D;
6583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_INT_IMAGE_CUBE:							return TYPE_INT_IMAGE_CUBE;
6593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_INT_IMAGE_2D_ARRAY:						return TYPE_INT_IMAGE_2D_ARRAY;
6603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_INT_IMAGE_3D:							return TYPE_INT_IMAGE_3D;
6613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_UNSIGNED_INT_IMAGE_2D:					return TYPE_UINT_IMAGE_2D;
6623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_UNSIGNED_INT_IMAGE_CUBE:				return TYPE_UINT_IMAGE_CUBE;
6633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_UNSIGNED_INT_IMAGE_2D_ARRAY:			return TYPE_UINT_IMAGE_2D_ARRAY;
6643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_UNSIGNED_INT_IMAGE_3D:					return TYPE_UINT_IMAGE_3D;
6653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_UNSIGNED_INT_ATOMIC_COUNTER:			return TYPE_UINT_ATOMIC_COUNTER;
6673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		default:
6693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return TYPE_LAST;
6703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
6713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
6723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // glu
674