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 Texture format utilities.
223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "gluTextureUtil.hpp"
253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "gluRenderContext.hpp"
263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "gluContextInfo.hpp"
273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuTextureUtil.hpp"
283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuFormatUtil.hpp"
293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "glwEnums.hpp"
303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
313c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace glu
323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
343c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing std::string;
353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*!
373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Map tcu::TextureFormat to GL pixel transfer format.
383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Maps generic texture format description to GL pixel transfer format.
403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * If no mapping is found, throws tcu::InternalError.
413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \param texFormat Generic texture format.
433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \return GL pixel transfer format.
443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
453c827367444ee418f129b2c238299f49d3264554Jarkko PoyryTransferFormat getTransferFormat (tcu::TextureFormat texFormat)
463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	using tcu::TextureFormat;
483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	deUint32	format	= GL_NONE;
503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	deUint32	type	= GL_NONE;
513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	bool		isInt	= false;
523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	switch (texFormat.type)
543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TextureFormat::SIGNED_INT8:
563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TextureFormat::SIGNED_INT16:
573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TextureFormat::SIGNED_INT32:
583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TextureFormat::UNSIGNED_INT8:
593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TextureFormat::UNSIGNED_INT16:
603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TextureFormat::UNSIGNED_INT32:
613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TextureFormat::UNSIGNED_INT_1010102_REV:
623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isInt = true;
633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			break;
643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		default:
663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			isInt = false;
673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			break;
683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	switch (texFormat.order)
713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TextureFormat::A:		format = GL_ALPHA;								break;
733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TextureFormat::L:		format = GL_LUMINANCE;							break;
743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TextureFormat::LA:		format = GL_LUMINANCE_ALPHA;					break;
753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TextureFormat::R:		format = isInt ? GL_RED_INTEGER		: GL_RED;	break;
763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TextureFormat::RG:		format = isInt ? GL_RG_INTEGER		: GL_RG;	break;
773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TextureFormat::RGB:	format = isInt ? GL_RGB_INTEGER		: GL_RGB;	break;
783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TextureFormat::RGBA:	format = isInt ? GL_RGBA_INTEGER	: GL_RGBA;	break;
798bf16f28be688a52f616aa830f95a94c53144cc3Jarkko Pöyry		case TextureFormat::sR:		format = GL_RED;								break;
808bf16f28be688a52f616aa830f95a94c53144cc3Jarkko Pöyry		case TextureFormat::sRG:	format = GL_RG;									break;
813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TextureFormat::sRGB:	format = GL_RGB;								break;
823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TextureFormat::sRGBA:	format = GL_RGBA;								break;
833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TextureFormat::D:		format = GL_DEPTH_COMPONENT;					break;
843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TextureFormat::DS:		format = GL_DEPTH_STENCIL;						break;
853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TextureFormat::S:		format = GL_STENCIL_INDEX;						break;
863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8708abab445908d076888f3f61f3264a826bcd665cJarkko Pöyry		case TextureFormat::BGRA:
8808abab445908d076888f3f61f3264a826bcd665cJarkko Pöyry			DE_ASSERT(!isInt);
8908abab445908d076888f3f61f3264a826bcd665cJarkko Pöyry			format = GL_BGRA;
9008abab445908d076888f3f61f3264a826bcd665cJarkko Pöyry			break;
9108abab445908d076888f3f61f3264a826bcd665cJarkko Pöyry
923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		default:
933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			DE_ASSERT(false);
943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	switch (texFormat.type)
973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TextureFormat::SNORM_INT8:						type = GL_BYTE;								break;
993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TextureFormat::SNORM_INT16:					type = GL_SHORT;							break;
1003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TextureFormat::UNORM_INT8:						type = GL_UNSIGNED_BYTE;					break;
1013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TextureFormat::UNORM_INT16:					type = GL_UNSIGNED_SHORT;					break;
1023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TextureFormat::UNORM_SHORT_565:				type = GL_UNSIGNED_SHORT_5_6_5;				break;
1033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TextureFormat::UNORM_SHORT_4444:				type = GL_UNSIGNED_SHORT_4_4_4_4;			break;
1043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TextureFormat::UNORM_SHORT_5551:				type = GL_UNSIGNED_SHORT_5_5_5_1;			break;
1053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TextureFormat::SIGNED_INT8:					type = GL_BYTE;								break;
1063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TextureFormat::SIGNED_INT16:					type = GL_SHORT;							break;
1073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TextureFormat::SIGNED_INT32:					type = GL_INT;								break;
1083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TextureFormat::UNSIGNED_INT8:					type = GL_UNSIGNED_BYTE;					break;
1093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TextureFormat::UNSIGNED_INT16:					type = GL_UNSIGNED_SHORT;					break;
1103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TextureFormat::UNSIGNED_INT32:					type = GL_UNSIGNED_INT;						break;
1113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TextureFormat::FLOAT:							type = GL_FLOAT;							break;
1123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TextureFormat::UNORM_INT_101010:				type = GL_UNSIGNED_INT_2_10_10_10_REV;		break;
1133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TextureFormat::UNORM_INT_1010102_REV:			type = GL_UNSIGNED_INT_2_10_10_10_REV;		break;
1143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TextureFormat::UNSIGNED_INT_1010102_REV:		type = GL_UNSIGNED_INT_2_10_10_10_REV;		break;
1153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TextureFormat::UNSIGNED_INT_11F_11F_10F_REV:	type = GL_UNSIGNED_INT_10F_11F_11F_REV;		break;
1163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TextureFormat::UNSIGNED_INT_999_E5_REV:		type = GL_UNSIGNED_INT_5_9_9_9_REV;			break;
1173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TextureFormat::HALF_FLOAT:						type = GL_HALF_FLOAT;						break;
1183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TextureFormat::FLOAT_UNSIGNED_INT_24_8_REV:	type = GL_FLOAT_32_UNSIGNED_INT_24_8_REV;	break;
1193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case TextureFormat::UNSIGNED_INT_24_8:				type = texFormat.order == TextureFormat::D
1203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry																 ? GL_UNSIGNED_INT
1213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry																 : GL_UNSIGNED_INT_24_8;				break;
1223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		default:
1243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			throw tcu::InternalError("Can't map texture format to GL transfer format");
1253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
1263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	return TransferFormat(format, type);
1283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
1293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*!
1313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Map tcu::TextureFormat to GL internal sized format.
1323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
1333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Maps generic texture format description to GL internal format.
1343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * If no mapping is found, throws tcu::InternalError.
1353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
1363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \param texFormat Generic texture format.
1373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \return GL sized internal format.
1383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
1393c827367444ee418f129b2c238299f49d3264554Jarkko PoyrydeUint32 getInternalFormat (tcu::TextureFormat texFormat)
1403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_STATIC_ASSERT(tcu::TextureFormat::CHANNELORDER_LAST < (1<<16));
1423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_STATIC_ASSERT(tcu::TextureFormat::CHANNELTYPE_LAST < (1<<16));
1433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define PACK_FMT(ORDER, TYPE) ((int(ORDER) << 16) | int(TYPE))
1453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define FMT_CASE(ORDER, TYPE) PACK_FMT(tcu::TextureFormat::ORDER, tcu::TextureFormat::TYPE)
1463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	switch (PACK_FMT(texFormat.order, texFormat.type))
1483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
1493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RGBA,		UNORM_SHORT_5551):				return GL_RGB5_A1;
1503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RGBA,		UNORM_SHORT_4444):				return GL_RGBA4;
1513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RGB,		UNORM_SHORT_565):				return GL_RGB565;
1523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(D,		UNORM_INT16):					return GL_DEPTH_COMPONENT16;
1533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(S,		UNSIGNED_INT8):					return GL_STENCIL_INDEX8;
1543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RGBA,		FLOAT):							return GL_RGBA32F;
1563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RGBA,		SIGNED_INT32):					return GL_RGBA32I;
1573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RGBA,		UNSIGNED_INT32):				return GL_RGBA32UI;
1583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RGBA,		UNORM_INT16):					return GL_RGBA16;
1593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RGBA,		SNORM_INT16):					return GL_RGBA16_SNORM;
1603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RGBA,		HALF_FLOAT):					return GL_RGBA16F;
1613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RGBA,		SIGNED_INT16):					return GL_RGBA16I;
1623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RGBA,		UNSIGNED_INT16):				return GL_RGBA16UI;
1633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RGBA,		UNORM_INT8):					return GL_RGBA8;
1643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RGBA,		SIGNED_INT8):					return GL_RGBA8I;
1653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RGBA,		UNSIGNED_INT8):					return GL_RGBA8UI;
1663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(sRGBA,	UNORM_INT8):					return GL_SRGB8_ALPHA8;
1673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RGBA,		UNORM_INT_1010102_REV):			return GL_RGB10_A2;
1683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RGBA,		UNSIGNED_INT_1010102_REV):		return GL_RGB10_A2UI;
1693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RGBA,		SNORM_INT8):					return GL_RGBA8_SNORM;
1703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RGB,		UNORM_INT8):					return GL_RGB8;
1723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RGB,		UNSIGNED_INT_11F_11F_10F_REV):	return GL_R11F_G11F_B10F;
1733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RGB,		FLOAT):							return GL_RGB32F;
1743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RGB,		SIGNED_INT32):					return GL_RGB32I;
1753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RGB,		UNSIGNED_INT32):				return GL_RGB32UI;
1763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RGB,		UNORM_INT16):					return GL_RGB16;
1773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RGB,		SNORM_INT16):					return GL_RGB16_SNORM;
1783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RGB,		HALF_FLOAT):					return GL_RGB16F;
1793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RGB,		SIGNED_INT16):					return GL_RGB16I;
1803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RGB,		UNSIGNED_INT16):				return GL_RGB16UI;
1813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RGB,		SNORM_INT8):					return GL_RGB8_SNORM;
1823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RGB,		SIGNED_INT8):					return GL_RGB8I;
1833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RGB,		UNSIGNED_INT8):					return GL_RGB8UI;
1843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(sRGB,		UNORM_INT8):					return GL_SRGB8;
1853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RGB,		UNSIGNED_INT_999_E5_REV):		return GL_RGB9_E5;
1863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RGB,		UNORM_INT_1010102_REV):			return GL_RGB10;
1873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RG,		FLOAT):							return GL_RG32F;
1893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RG,		SIGNED_INT32):					return GL_RG32I;
1903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RG,		UNSIGNED_INT32):				return GL_RG32UI;
1913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RG,		UNORM_INT16):					return GL_RG16;
1923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RG,		SNORM_INT16):					return GL_RG16_SNORM;
1933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RG,		HALF_FLOAT):					return GL_RG16F;
1943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RG,		SIGNED_INT16):					return GL_RG16I;
1953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RG,		UNSIGNED_INT16):				return GL_RG16UI;
1963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RG,		UNORM_INT8):					return GL_RG8;
1973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RG,		SIGNED_INT8):					return GL_RG8I;
1983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RG,		UNSIGNED_INT8):					return GL_RG8UI;
1993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(RG,		SNORM_INT8):					return GL_RG8_SNORM;
2008bf16f28be688a52f616aa830f95a94c53144cc3Jarkko Pöyry		case FMT_CASE(sRG,		UNORM_INT8):					return GL_SRG8_EXT;
2013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(R,		FLOAT):							return GL_R32F;
2033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(R,		SIGNED_INT32):					return GL_R32I;
2043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(R,		UNSIGNED_INT32):				return GL_R32UI;
2053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(R,		UNORM_INT16):					return GL_R16;
2063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(R,		SNORM_INT16):					return GL_R16_SNORM;
2073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(R,		HALF_FLOAT):					return GL_R16F;
2083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(R,		SIGNED_INT16):					return GL_R16I;
2093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(R,		UNSIGNED_INT16):				return GL_R16UI;
2103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(R,		UNORM_INT8):					return GL_R8;
2113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(R,		SIGNED_INT8):					return GL_R8I;
2123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(R,		UNSIGNED_INT8):					return GL_R8UI;
2133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(R,		SNORM_INT8):					return GL_R8_SNORM;
2148bf16f28be688a52f616aa830f95a94c53144cc3Jarkko Pöyry		case FMT_CASE(sR,		UNORM_INT8):					return GL_SR8_EXT;
2153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(D,		FLOAT):							return GL_DEPTH_COMPONENT32F;
2173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(D,		UNSIGNED_INT_24_8):				return GL_DEPTH_COMPONENT24;
2183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(D,		UNSIGNED_INT32):				return GL_DEPTH_COMPONENT32;
2193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(DS,		FLOAT_UNSIGNED_INT_24_8_REV):	return GL_DEPTH32F_STENCIL8;
2203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case FMT_CASE(DS,		UNSIGNED_INT_24_8):				return GL_DEPTH24_STENCIL8;
2213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		default:
2233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			throw tcu::InternalError("Can't map texture format to GL internal format");
2243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
2253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
2263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*!
2283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Map generic compressed format to GL compressed format enum.
2293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
2303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Maps generic compressed format to GL compressed format enum value.
2313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * If no mapping is found, throws tcu::InternalError.
2323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
2333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \param format Generic compressed format.
2343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \return GL compressed texture format.
2353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
236becd5d53015521acf7536ba754de326d8b1da2f3Mika IsojärvideUint32 getGLFormat (tcu::CompressedTexFormat format)
2373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
2383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	switch (format)
2393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
240becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi		case tcu::COMPRESSEDTEXFORMAT_ETC1_RGB8:						return GL_ETC1_RGB8_OES;
241becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi		case tcu::COMPRESSEDTEXFORMAT_EAC_R11:							return GL_COMPRESSED_R11_EAC;
242becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi		case tcu::COMPRESSEDTEXFORMAT_EAC_SIGNED_R11:					return GL_COMPRESSED_SIGNED_R11_EAC;
243becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi		case tcu::COMPRESSEDTEXFORMAT_EAC_RG11:							return GL_COMPRESSED_RG11_EAC;
244becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi		case tcu::COMPRESSEDTEXFORMAT_EAC_SIGNED_RG11:					return GL_COMPRESSED_SIGNED_RG11_EAC;
245becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi		case tcu::COMPRESSEDTEXFORMAT_ETC2_RGB8:						return GL_COMPRESSED_RGB8_ETC2;
246becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi		case tcu::COMPRESSEDTEXFORMAT_ETC2_SRGB8:						return GL_COMPRESSED_SRGB8_ETC2;
247becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi		case tcu::COMPRESSEDTEXFORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1:	return GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2;
248becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi		case tcu::COMPRESSEDTEXFORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1:	return GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2;
249becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi		case tcu::COMPRESSEDTEXFORMAT_ETC2_EAC_RGBA8:					return GL_COMPRESSED_RGBA8_ETC2_EAC;
250becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi		case tcu::COMPRESSEDTEXFORMAT_ETC2_EAC_SRGB8_ALPHA8:			return GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC;
2513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
252becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi		case tcu::COMPRESSEDTEXFORMAT_ASTC_4x4_RGBA:					return GL_COMPRESSED_RGBA_ASTC_4x4_KHR;
253becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi		case tcu::COMPRESSEDTEXFORMAT_ASTC_5x4_RGBA:					return GL_COMPRESSED_RGBA_ASTC_5x4_KHR;
254becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi		case tcu::COMPRESSEDTEXFORMAT_ASTC_5x5_RGBA:					return GL_COMPRESSED_RGBA_ASTC_5x5_KHR;
255becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi		case tcu::COMPRESSEDTEXFORMAT_ASTC_6x5_RGBA:					return GL_COMPRESSED_RGBA_ASTC_6x5_KHR;
256becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi		case tcu::COMPRESSEDTEXFORMAT_ASTC_6x6_RGBA:					return GL_COMPRESSED_RGBA_ASTC_6x6_KHR;
257becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi		case tcu::COMPRESSEDTEXFORMAT_ASTC_8x5_RGBA:					return GL_COMPRESSED_RGBA_ASTC_8x5_KHR;
258becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi		case tcu::COMPRESSEDTEXFORMAT_ASTC_8x6_RGBA:					return GL_COMPRESSED_RGBA_ASTC_8x6_KHR;
259becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi		case tcu::COMPRESSEDTEXFORMAT_ASTC_8x8_RGBA:					return GL_COMPRESSED_RGBA_ASTC_8x8_KHR;
260becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi		case tcu::COMPRESSEDTEXFORMAT_ASTC_10x5_RGBA:					return GL_COMPRESSED_RGBA_ASTC_10x5_KHR;
261becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi		case tcu::COMPRESSEDTEXFORMAT_ASTC_10x6_RGBA:					return GL_COMPRESSED_RGBA_ASTC_10x6_KHR;
262becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi		case tcu::COMPRESSEDTEXFORMAT_ASTC_10x8_RGBA:					return GL_COMPRESSED_RGBA_ASTC_10x8_KHR;
263becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi		case tcu::COMPRESSEDTEXFORMAT_ASTC_10x10_RGBA:					return GL_COMPRESSED_RGBA_ASTC_10x10_KHR;
264becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi		case tcu::COMPRESSEDTEXFORMAT_ASTC_12x10_RGBA:					return GL_COMPRESSED_RGBA_ASTC_12x10_KHR;
265becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi		case tcu::COMPRESSEDTEXFORMAT_ASTC_12x12_RGBA:					return GL_COMPRESSED_RGBA_ASTC_12x12_KHR;
266becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi		case tcu::COMPRESSEDTEXFORMAT_ASTC_4x4_SRGB8_ALPHA8:			return GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR;
267becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi		case tcu::COMPRESSEDTEXFORMAT_ASTC_5x4_SRGB8_ALPHA8:			return GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR;
268becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi		case tcu::COMPRESSEDTEXFORMAT_ASTC_5x5_SRGB8_ALPHA8:			return GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR;
269becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi		case tcu::COMPRESSEDTEXFORMAT_ASTC_6x5_SRGB8_ALPHA8:			return GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR;
270becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi		case tcu::COMPRESSEDTEXFORMAT_ASTC_6x6_SRGB8_ALPHA8:			return GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR;
271becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi		case tcu::COMPRESSEDTEXFORMAT_ASTC_8x5_SRGB8_ALPHA8:			return GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR;
272becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi		case tcu::COMPRESSEDTEXFORMAT_ASTC_8x6_SRGB8_ALPHA8:			return GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR;
273becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi		case tcu::COMPRESSEDTEXFORMAT_ASTC_8x8_SRGB8_ALPHA8:			return GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR;
274becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi		case tcu::COMPRESSEDTEXFORMAT_ASTC_10x5_SRGB8_ALPHA8:			return GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR;
275becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi		case tcu::COMPRESSEDTEXFORMAT_ASTC_10x6_SRGB8_ALPHA8:			return GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR;
276becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi		case tcu::COMPRESSEDTEXFORMAT_ASTC_10x8_SRGB8_ALPHA8:			return GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR;
277becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi		case tcu::COMPRESSEDTEXFORMAT_ASTC_10x10_SRGB8_ALPHA8:			return GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR;
278becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi		case tcu::COMPRESSEDTEXFORMAT_ASTC_12x10_SRGB8_ALPHA8:			return GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR;
279becd5d53015521acf7536ba754de326d8b1da2f3Mika Isojärvi		case tcu::COMPRESSEDTEXFORMAT_ASTC_12x12_SRGB8_ALPHA8:			return GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR;
2803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		default:
2823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			throw tcu::InternalError("Can't map compressed format to GL format");
2833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
2843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
2853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
286b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi/*--------------------------------------------------------------------*//*!
287b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi * \brief Map compressed GL format to generic compressed format.
288b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi *
289b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi * Maps compressed GL format to generic compressed format.
290b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi * If no mapping is found, throws tcu::InternalError.
291b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi *
292b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi * \param GL compressed texture format.
293b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi * \return format Generic compressed format.
294b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi *//*--------------------------------------------------------------------*/
295b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvitcu::CompressedTexFormat mapGLCompressedTexFormat (deUint32 format)
296b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi{
297b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi	switch (format)
298b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi	{
299b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi		case GL_ETC1_RGB8_OES:								return tcu::COMPRESSEDTEXFORMAT_ETC1_RGB8;
300b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi		case GL_COMPRESSED_R11_EAC:							return tcu::COMPRESSEDTEXFORMAT_EAC_R11;
301b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi		case GL_COMPRESSED_SIGNED_R11_EAC:					return tcu::COMPRESSEDTEXFORMAT_EAC_SIGNED_R11;
302b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi		case GL_COMPRESSED_RG11_EAC:						return tcu::COMPRESSEDTEXFORMAT_EAC_RG11;
303b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi		case GL_COMPRESSED_SIGNED_RG11_EAC:					return tcu::COMPRESSEDTEXFORMAT_EAC_SIGNED_RG11;
304b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi		case GL_COMPRESSED_RGB8_ETC2:						return tcu::COMPRESSEDTEXFORMAT_ETC2_RGB8;
305b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi		case GL_COMPRESSED_SRGB8_ETC2:						return tcu::COMPRESSEDTEXFORMAT_ETC2_SRGB8;
306b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi		case GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:	return tcu::COMPRESSEDTEXFORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1;
307b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi		case GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:	return tcu::COMPRESSEDTEXFORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1;
308b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi		case GL_COMPRESSED_RGBA8_ETC2_EAC:					return tcu::COMPRESSEDTEXFORMAT_ETC2_EAC_RGBA8;
309b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi		case GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:			return tcu::COMPRESSEDTEXFORMAT_ETC2_EAC_SRGB8_ALPHA8;
310b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi
311b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi		case GL_COMPRESSED_RGBA_ASTC_4x4_KHR:				return tcu::COMPRESSEDTEXFORMAT_ASTC_4x4_RGBA;
312b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi		case GL_COMPRESSED_RGBA_ASTC_5x4_KHR:				return tcu::COMPRESSEDTEXFORMAT_ASTC_5x4_RGBA;
313b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi		case GL_COMPRESSED_RGBA_ASTC_5x5_KHR:				return tcu::COMPRESSEDTEXFORMAT_ASTC_5x5_RGBA;
314b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi		case GL_COMPRESSED_RGBA_ASTC_6x5_KHR:				return tcu::COMPRESSEDTEXFORMAT_ASTC_6x5_RGBA;
315b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi		case GL_COMPRESSED_RGBA_ASTC_6x6_KHR:				return tcu::COMPRESSEDTEXFORMAT_ASTC_6x6_RGBA;
316b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi		case GL_COMPRESSED_RGBA_ASTC_8x5_KHR:				return tcu::COMPRESSEDTEXFORMAT_ASTC_8x5_RGBA;
317b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi		case GL_COMPRESSED_RGBA_ASTC_8x6_KHR:				return tcu::COMPRESSEDTEXFORMAT_ASTC_8x6_RGBA;
318b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi		case GL_COMPRESSED_RGBA_ASTC_8x8_KHR:				return tcu::COMPRESSEDTEXFORMAT_ASTC_8x8_RGBA;
319b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi		case GL_COMPRESSED_RGBA_ASTC_10x5_KHR:				return tcu::COMPRESSEDTEXFORMAT_ASTC_10x5_RGBA;
320b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi		case GL_COMPRESSED_RGBA_ASTC_10x6_KHR:				return tcu::COMPRESSEDTEXFORMAT_ASTC_10x6_RGBA;
321b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi		case GL_COMPRESSED_RGBA_ASTC_10x8_KHR:				return tcu::COMPRESSEDTEXFORMAT_ASTC_10x8_RGBA;
322b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi		case GL_COMPRESSED_RGBA_ASTC_10x10_KHR:				return tcu::COMPRESSEDTEXFORMAT_ASTC_10x10_RGBA;
323b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi		case GL_COMPRESSED_RGBA_ASTC_12x10_KHR:				return tcu::COMPRESSEDTEXFORMAT_ASTC_12x10_RGBA;
324b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi		case GL_COMPRESSED_RGBA_ASTC_12x12_KHR:				return tcu::COMPRESSEDTEXFORMAT_ASTC_12x12_RGBA;
325b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:		return tcu::COMPRESSEDTEXFORMAT_ASTC_4x4_SRGB8_ALPHA8;
326b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:		return tcu::COMPRESSEDTEXFORMAT_ASTC_5x4_SRGB8_ALPHA8;
327b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:		return tcu::COMPRESSEDTEXFORMAT_ASTC_5x5_SRGB8_ALPHA8;
328b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:		return tcu::COMPRESSEDTEXFORMAT_ASTC_6x5_SRGB8_ALPHA8;
329b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:		return tcu::COMPRESSEDTEXFORMAT_ASTC_6x6_SRGB8_ALPHA8;
330b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:		return tcu::COMPRESSEDTEXFORMAT_ASTC_8x5_SRGB8_ALPHA8;
331b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:		return tcu::COMPRESSEDTEXFORMAT_ASTC_8x6_SRGB8_ALPHA8;
332b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:		return tcu::COMPRESSEDTEXFORMAT_ASTC_8x8_SRGB8_ALPHA8;
333b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:		return tcu::COMPRESSEDTEXFORMAT_ASTC_10x5_SRGB8_ALPHA8;
334b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:		return tcu::COMPRESSEDTEXFORMAT_ASTC_10x6_SRGB8_ALPHA8;
335b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:		return tcu::COMPRESSEDTEXFORMAT_ASTC_10x8_SRGB8_ALPHA8;
336b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:		return tcu::COMPRESSEDTEXFORMAT_ASTC_10x10_SRGB8_ALPHA8;
337b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:		return tcu::COMPRESSEDTEXFORMAT_ASTC_12x10_SRGB8_ALPHA8;
338b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:		return tcu::COMPRESSEDTEXFORMAT_ASTC_12x12_SRGB8_ALPHA8;
339b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi
340b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi		default:
341b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi			throw tcu::InternalError("Can't map compressed GL format to compressed format");
342b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi	}
343b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi}
344b0f5bf50aa6a56357da18ee3147612fbaca19ab8Mika Isojärvi
345238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyrybool isCompressedFormat (deUint32 internalFormat)
346238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry{
347238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry	switch (internalFormat)
348238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry	{
349238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry		case GL_ETC1_RGB8_OES:
350238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry		case GL_COMPRESSED_R11_EAC:
351238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry		case GL_COMPRESSED_SIGNED_R11_EAC:
352238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry		case GL_COMPRESSED_RG11_EAC:
353238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry		case GL_COMPRESSED_SIGNED_RG11_EAC:
354238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry		case GL_COMPRESSED_RGB8_ETC2:
355238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry		case GL_COMPRESSED_SRGB8_ETC2:
356238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry		case GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:
357238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry		case GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:
358238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry		case GL_COMPRESSED_RGBA8_ETC2_EAC:
359238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry		case GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:
360238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry		case GL_COMPRESSED_RGBA_ASTC_4x4_KHR:
361238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry		case GL_COMPRESSED_RGBA_ASTC_5x4_KHR:
362238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry		case GL_COMPRESSED_RGBA_ASTC_5x5_KHR:
363238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry		case GL_COMPRESSED_RGBA_ASTC_6x5_KHR:
364238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry		case GL_COMPRESSED_RGBA_ASTC_6x6_KHR:
365238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry		case GL_COMPRESSED_RGBA_ASTC_8x5_KHR:
366238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry		case GL_COMPRESSED_RGBA_ASTC_8x6_KHR:
367238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry		case GL_COMPRESSED_RGBA_ASTC_8x8_KHR:
368238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry		case GL_COMPRESSED_RGBA_ASTC_10x5_KHR:
369238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry		case GL_COMPRESSED_RGBA_ASTC_10x6_KHR:
370238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry		case GL_COMPRESSED_RGBA_ASTC_10x8_KHR:
371238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry		case GL_COMPRESSED_RGBA_ASTC_10x10_KHR:
372238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry		case GL_COMPRESSED_RGBA_ASTC_12x10_KHR:
373238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry		case GL_COMPRESSED_RGBA_ASTC_12x12_KHR:
374238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:
375238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:
376238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:
377238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:
378238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:
379238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:
380238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:
381238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:
382238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:
383238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:
384238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:
385238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:
386238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:
387238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry		case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:
388238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry			return true;
389238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry
390238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry		default:
391238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry			return false;
392238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry	}
393238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry}
394238d2aee289b3bc19b059ddbfc9e83892be1d8a6Jarkko Pöyry
3953c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic tcu::TextureFormat::ChannelType mapGLChannelType (deUint32 dataType, bool normalized)
3963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
3973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	// \note Normalized bit is ignored where it doesn't apply.
3983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	using tcu::TextureFormat;
3993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	switch (dataType)
4013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
4023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_UNSIGNED_BYTE:					return normalized ? TextureFormat::UNORM_INT8	: TextureFormat::UNSIGNED_INT8;
4033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_BYTE:							return normalized ? TextureFormat::SNORM_INT8	: TextureFormat::SIGNED_INT8;
4043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_UNSIGNED_SHORT:					return normalized ? TextureFormat::UNORM_INT16	: TextureFormat::UNSIGNED_INT16;
4053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_SHORT:							return normalized ? TextureFormat::SNORM_INT16	: TextureFormat::SIGNED_INT16;
4063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_UNSIGNED_INT:					return normalized ? TextureFormat::UNORM_INT32	: TextureFormat::UNSIGNED_INT32;
4073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_INT:							return normalized ? TextureFormat::SNORM_INT32	: TextureFormat::SIGNED_INT32;
4083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_FLOAT:							return TextureFormat::FLOAT;
4093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_UNSIGNED_SHORT_4_4_4_4:			return TextureFormat::UNORM_SHORT_4444;
4103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_UNSIGNED_SHORT_5_5_5_1:			return TextureFormat::UNORM_SHORT_5551;
4113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_UNSIGNED_SHORT_5_6_5:			return TextureFormat::UNORM_SHORT_565;
4123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_HALF_FLOAT:						return TextureFormat::HALF_FLOAT;
4133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_UNSIGNED_INT_2_10_10_10_REV:	return normalized ? TextureFormat::UNORM_INT_1010102_REV : TextureFormat::UNSIGNED_INT_1010102_REV;
4143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_UNSIGNED_INT_10F_11F_11F_REV:	return TextureFormat::UNSIGNED_INT_11F_11F_10F_REV;
4153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_UNSIGNED_INT_24_8:				return TextureFormat::UNSIGNED_INT_24_8;
4163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_FLOAT_32_UNSIGNED_INT_24_8_REV:	return TextureFormat::FLOAT_UNSIGNED_INT_24_8_REV;
4173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_UNSIGNED_INT_5_9_9_9_REV:		return TextureFormat::UNSIGNED_INT_999_E5_REV;
4183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		default:
4203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			DE_ASSERT(false);
4213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return TextureFormat::CHANNELTYPE_LAST;
4223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
4233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
4243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*!
4263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Map GL pixel transfer format to tcu::TextureFormat.
4273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
4283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * If no mapping is found, throws tcu::InternalError.
4293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
4303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \param format	GL pixel format.
4313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \param dataType	GL data type.
4323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \return Generic texture format.
4333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
4343c827367444ee418f129b2c238299f49d3264554Jarkko Poyrytcu::TextureFormat mapGLTransferFormat (deUint32 format, deUint32 dataType)
4353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
4363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	using tcu::TextureFormat;
4373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	switch (format)
4383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
4393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_ALPHA:				return TextureFormat(TextureFormat::A,		mapGLChannelType(dataType, true));
4403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_LUMINANCE:			return TextureFormat(TextureFormat::L,		mapGLChannelType(dataType, true));
4413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_LUMINANCE_ALPHA:	return TextureFormat(TextureFormat::LA,		mapGLChannelType(dataType, true));
4423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGB:				return TextureFormat(TextureFormat::RGB,	mapGLChannelType(dataType, true));
4433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGBA:				return TextureFormat(TextureFormat::RGBA,	mapGLChannelType(dataType, true));
4443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_BGRA:				return TextureFormat(TextureFormat::BGRA,	mapGLChannelType(dataType, true));
4453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RG:					return TextureFormat(TextureFormat::RG,		mapGLChannelType(dataType, true));
4463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RED:				return TextureFormat(TextureFormat::R,		mapGLChannelType(dataType, true));
4473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGBA_INTEGER:		return TextureFormat(TextureFormat::RGBA,	mapGLChannelType(dataType, false));
4483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGB_INTEGER:		return TextureFormat(TextureFormat::RGB,	mapGLChannelType(dataType, false));
4493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RG_INTEGER:			return TextureFormat(TextureFormat::RG,		mapGLChannelType(dataType, false));
4503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RED_INTEGER:		return TextureFormat(TextureFormat::R,		mapGLChannelType(dataType, false));
4513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_DEPTH_COMPONENT:	return TextureFormat(TextureFormat::D,		mapGLChannelType(dataType, true));
4533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_DEPTH_STENCIL:		return TextureFormat(TextureFormat::DS,		mapGLChannelType(dataType, true));
4543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		default:
4563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			throw tcu::InternalError(string("Can't map GL pixel format (") + tcu::toHex(format).toString() + ", " + tcu::toHex(dataType).toString() + ") to texture format");
4573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
4583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
4593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*!
4613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Map GL internal texture format to tcu::TextureFormat.
4623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
4633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * If no mapping is found, throws tcu::InternalError.
4643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
4653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \param internalFormat Sized internal format.
4663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \return Generic texture format.
4673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
4683c827367444ee418f129b2c238299f49d3264554Jarkko Poyrytcu::TextureFormat mapGLInternalFormat (deUint32 internalFormat)
4693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
4703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	using tcu::TextureFormat;
4713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	switch (internalFormat)
4723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
4733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGB5_A1:			return TextureFormat(TextureFormat::RGBA,	TextureFormat::UNORM_SHORT_5551);
4743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGBA4:				return TextureFormat(TextureFormat::RGBA,	TextureFormat::UNORM_SHORT_4444);
4753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGB565:				return TextureFormat(TextureFormat::RGB,	TextureFormat::UNORM_SHORT_565);
4763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_DEPTH_COMPONENT16:	return TextureFormat(TextureFormat::D,		TextureFormat::UNORM_INT16);
4773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_STENCIL_INDEX8:		return TextureFormat(TextureFormat::S,		TextureFormat::UNSIGNED_INT8);
4783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGBA32F:			return TextureFormat(TextureFormat::RGBA,	TextureFormat::FLOAT);
4803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGBA32I:			return TextureFormat(TextureFormat::RGBA,	TextureFormat::SIGNED_INT32);
4813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGBA32UI:			return TextureFormat(TextureFormat::RGBA,	TextureFormat::UNSIGNED_INT32);
4823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGBA16:				return TextureFormat(TextureFormat::RGBA,	TextureFormat::UNORM_INT16);
4833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGBA16_SNORM:		return TextureFormat(TextureFormat::RGBA,	TextureFormat::SNORM_INT16);
4843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGBA16F:			return TextureFormat(TextureFormat::RGBA,	TextureFormat::HALF_FLOAT);
4853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGBA16I:			return TextureFormat(TextureFormat::RGBA,	TextureFormat::SIGNED_INT16);
4863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGBA16UI:			return TextureFormat(TextureFormat::RGBA,	TextureFormat::UNSIGNED_INT16);
4873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGBA8:				return TextureFormat(TextureFormat::RGBA,	TextureFormat::UNORM_INT8);
4883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGBA8I:				return TextureFormat(TextureFormat::RGBA,	TextureFormat::SIGNED_INT8);
4893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGBA8UI:			return TextureFormat(TextureFormat::RGBA,	TextureFormat::UNSIGNED_INT8);
4903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_SRGB8_ALPHA8:		return TextureFormat(TextureFormat::sRGBA,	TextureFormat::UNORM_INT8);
4913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGB10_A2:			return TextureFormat(TextureFormat::RGBA,	TextureFormat::UNORM_INT_1010102_REV);
4923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGB10_A2UI:			return TextureFormat(TextureFormat::RGBA,	TextureFormat::UNSIGNED_INT_1010102_REV);
4933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGBA8_SNORM:		return TextureFormat(TextureFormat::RGBA,	TextureFormat::SNORM_INT8);
4943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGB8:				return TextureFormat(TextureFormat::RGB,	TextureFormat::UNORM_INT8);
4963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_R11F_G11F_B10F:		return TextureFormat(TextureFormat::RGB,	TextureFormat::UNSIGNED_INT_11F_11F_10F_REV);
4973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGB32F:				return TextureFormat(TextureFormat::RGB,	TextureFormat::FLOAT);
4983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGB32I:				return TextureFormat(TextureFormat::RGB,	TextureFormat::SIGNED_INT32);
4993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGB32UI:			return TextureFormat(TextureFormat::RGB,	TextureFormat::UNSIGNED_INT32);
5003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGB16:				return TextureFormat(TextureFormat::RGB,	TextureFormat::UNORM_INT16);
5013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGB16_SNORM:		return TextureFormat(TextureFormat::RGB,	TextureFormat::SNORM_INT16);
5023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGB16F:				return TextureFormat(TextureFormat::RGB,	TextureFormat::HALF_FLOAT);
5033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGB16I:				return TextureFormat(TextureFormat::RGB,	TextureFormat::SIGNED_INT16);
5043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGB16UI:			return TextureFormat(TextureFormat::RGB,	TextureFormat::UNSIGNED_INT16);
5053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGB8_SNORM:			return TextureFormat(TextureFormat::RGB,	TextureFormat::SNORM_INT8);
5063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGB8I:				return TextureFormat(TextureFormat::RGB,	TextureFormat::SIGNED_INT8);
5073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGB8UI:				return TextureFormat(TextureFormat::RGB,	TextureFormat::UNSIGNED_INT8);
5083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_SRGB8:				return TextureFormat(TextureFormat::sRGB,	TextureFormat::UNORM_INT8);
5093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGB9_E5:			return TextureFormat(TextureFormat::RGB,	TextureFormat::UNSIGNED_INT_999_E5_REV);
5103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGB10:				return TextureFormat(TextureFormat::RGB,	TextureFormat::UNORM_INT_1010102_REV);
5113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RG32F:				return TextureFormat(TextureFormat::RG,		TextureFormat::FLOAT);
5133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RG32I:				return TextureFormat(TextureFormat::RG,		TextureFormat::SIGNED_INT32);
5143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RG32UI:				return TextureFormat(TextureFormat::RG,		TextureFormat::UNSIGNED_INT32);
5153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RG16:				return TextureFormat(TextureFormat::RG,		TextureFormat::UNORM_INT16);
5163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RG16_SNORM:			return TextureFormat(TextureFormat::RG,		TextureFormat::SNORM_INT16);
5173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RG16F:				return TextureFormat(TextureFormat::RG,		TextureFormat::HALF_FLOAT);
5183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RG16I:				return TextureFormat(TextureFormat::RG,		TextureFormat::SIGNED_INT16);
5193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RG16UI:				return TextureFormat(TextureFormat::RG,		TextureFormat::UNSIGNED_INT16);
5203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RG8:				return TextureFormat(TextureFormat::RG,		TextureFormat::UNORM_INT8);
5213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RG8I:				return TextureFormat(TextureFormat::RG,		TextureFormat::SIGNED_INT8);
5223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RG8UI:				return TextureFormat(TextureFormat::RG,		TextureFormat::UNSIGNED_INT8);
5233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RG8_SNORM:			return TextureFormat(TextureFormat::RG,		TextureFormat::SNORM_INT8);
5248bf16f28be688a52f616aa830f95a94c53144cc3Jarkko Pöyry		case GL_SRG8_EXT:			return TextureFormat(TextureFormat::sRG,	TextureFormat::UNORM_INT8);
5253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_R32F:				return TextureFormat(TextureFormat::R,		TextureFormat::FLOAT);
5273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_R32I:				return TextureFormat(TextureFormat::R,		TextureFormat::SIGNED_INT32);
5283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_R32UI:				return TextureFormat(TextureFormat::R,		TextureFormat::UNSIGNED_INT32);
5293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_R16:				return TextureFormat(TextureFormat::R,		TextureFormat::UNORM_INT16);
5303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_R16_SNORM:			return TextureFormat(TextureFormat::R,		TextureFormat::SNORM_INT16);
5313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_R16F:				return TextureFormat(TextureFormat::R,		TextureFormat::HALF_FLOAT);
5323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_R16I:				return TextureFormat(TextureFormat::R,		TextureFormat::SIGNED_INT16);
5333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_R16UI:				return TextureFormat(TextureFormat::R,		TextureFormat::UNSIGNED_INT16);
5343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_R8:					return TextureFormat(TextureFormat::R,		TextureFormat::UNORM_INT8);
5353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_R8I:				return TextureFormat(TextureFormat::R,		TextureFormat::SIGNED_INT8);
5363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_R8UI:				return TextureFormat(TextureFormat::R,		TextureFormat::UNSIGNED_INT8);
5373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_R8_SNORM:			return TextureFormat(TextureFormat::R,		TextureFormat::SNORM_INT8);
5388bf16f28be688a52f616aa830f95a94c53144cc3Jarkko Pöyry		case GL_SR8_EXT:			return TextureFormat(TextureFormat::sR,		TextureFormat::UNORM_INT8);
5393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_DEPTH_COMPONENT32F:	return TextureFormat(TextureFormat::D,		TextureFormat::FLOAT);
5413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_DEPTH_COMPONENT24:	return TextureFormat(TextureFormat::D,		TextureFormat::UNSIGNED_INT_24_8);
5423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_DEPTH_COMPONENT32:	return TextureFormat(TextureFormat::D,		TextureFormat::UNSIGNED_INT32);
5433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_DEPTH32F_STENCIL8:	return TextureFormat(TextureFormat::DS,		TextureFormat::FLOAT_UNSIGNED_INT_24_8_REV);
5443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_DEPTH24_STENCIL8:	return TextureFormat(TextureFormat::DS,		TextureFormat::UNSIGNED_INT_24_8);
5453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		default:
5473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			throw tcu::InternalError(string("Can't map GL sized internal format (") + tcu::toHex(internalFormat).toString() + ") to texture format");
5483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
5493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
5503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5513c827367444ee418f129b2c238299f49d3264554Jarkko Poyrybool isGLInternalColorFormatFilterable (deUint32 format)
5523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
5533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	switch (format)
5543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
5553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_R8:
5563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_R8_SNORM:
5573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RG8:
5583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RG8_SNORM:
5593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGB8:
5603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGB8_SNORM:
5613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGB565:
5623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGBA4:
5633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGB5_A1:
5643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGBA8:
5653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGBA8_SNORM:
5663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGB10_A2:
5678bf16f28be688a52f616aa830f95a94c53144cc3Jarkko Pöyry		case GL_SR8_EXT:
5688bf16f28be688a52f616aa830f95a94c53144cc3Jarkko Pöyry		case GL_SRG8_EXT:
5693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_SRGB8:
5703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_SRGB8_ALPHA8:
5713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_R16F:
5723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RG16F:
5733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGB16F:
5743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGBA16F:
5753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_R11F_G11F_B10F:
5763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGB9_E5:
5773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return true;
5783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGB10_A2UI:
5803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_R32F:
5813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RG32F:
5823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGB32F:
5833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGBA32F:
5843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_R8I:
5853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_R8UI:
5863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_R16I:
5873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_R16UI:
5883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_R32I:
5893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_R32UI:
5903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RG8I:
5913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RG8UI:
5923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RG16I:
5933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RG16UI:
5943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RG32I:
5953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RG32UI:
5963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGB8I:
5973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGB8UI:
5983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGB16I:
5993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGB16UI:
6003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGB32I:
6013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGB32UI:
6023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGBA8I:
6033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGBA8UI:
6043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGBA16I:
6053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGBA16UI:
6063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGBA32I:
6073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGBA32UI:
6083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return false;
6093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		default:
6113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			DE_ASSERT(false);
6123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return false;
6133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
6143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
6153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6163c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic inline tcu::Sampler::WrapMode mapGLWrapMode (deUint32 wrapMode)
6173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
6183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	switch (wrapMode)
6193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
6203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_CLAMP_TO_EDGE:		return tcu::Sampler::CLAMP_TO_EDGE;
6213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_CLAMP_TO_BORDER:	return tcu::Sampler::CLAMP_TO_BORDER;
6223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_REPEAT:				return tcu::Sampler::REPEAT_GL;
6233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_MIRRORED_REPEAT:	return tcu::Sampler::MIRRORED_REPEAT_GL;
6243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		default:
6253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			throw tcu::InternalError("Can't map GL wrap mode " + tcu::toHex(wrapMode).toString());
6263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
6273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
6283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
629834954305bcda8cf3eab410710fdd5e18bf81ecfJarkko Pöyrystatic inline tcu::Sampler::FilterMode mapGLMinFilterMode (deUint32 filterMode)
6303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
6313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	switch (filterMode)
6323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
6333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_NEAREST:				return tcu::Sampler::NEAREST;
6343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_LINEAR:					return tcu::Sampler::LINEAR;
6353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_NEAREST_MIPMAP_NEAREST:	return tcu::Sampler::NEAREST_MIPMAP_NEAREST;
6363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_NEAREST_MIPMAP_LINEAR:	return tcu::Sampler::NEAREST_MIPMAP_LINEAR;
6373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_LINEAR_MIPMAP_NEAREST:	return tcu::Sampler::LINEAR_MIPMAP_NEAREST;
6383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_LINEAR_MIPMAP_LINEAR:	return tcu::Sampler::LINEAR_MIPMAP_LINEAR;
6393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		default:
640834954305bcda8cf3eab410710fdd5e18bf81ecfJarkko Pöyry			throw tcu::InternalError("Can't map GL min filter mode" + tcu::toHex(filterMode).toString());
641834954305bcda8cf3eab410710fdd5e18bf81ecfJarkko Pöyry	}
642834954305bcda8cf3eab410710fdd5e18bf81ecfJarkko Pöyry}
643834954305bcda8cf3eab410710fdd5e18bf81ecfJarkko Pöyry
644834954305bcda8cf3eab410710fdd5e18bf81ecfJarkko Pöyrystatic inline tcu::Sampler::FilterMode mapGLMagFilterMode (deUint32 filterMode)
645834954305bcda8cf3eab410710fdd5e18bf81ecfJarkko Pöyry{
646834954305bcda8cf3eab410710fdd5e18bf81ecfJarkko Pöyry	switch (filterMode)
647834954305bcda8cf3eab410710fdd5e18bf81ecfJarkko Pöyry	{
648834954305bcda8cf3eab410710fdd5e18bf81ecfJarkko Pöyry		case GL_NEAREST:				return tcu::Sampler::NEAREST;
649834954305bcda8cf3eab410710fdd5e18bf81ecfJarkko Pöyry		case GL_LINEAR:					return tcu::Sampler::LINEAR;
650834954305bcda8cf3eab410710fdd5e18bf81ecfJarkko Pöyry		default:
651834954305bcda8cf3eab410710fdd5e18bf81ecfJarkko Pöyry			throw tcu::InternalError("Can't map GL mag filter mode" + tcu::toHex(filterMode).toString());
6523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
6533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
6543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*!
6563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Map GL sampler parameters to tcu::Sampler.
6573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
6583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * If no mapping is found, throws tcu::InternalError.
6593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
6603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \param wrapS		S-component wrap mode
6613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \param minFilter	Minification filter mode
6623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \param magFilter	Magnification filter mode
6633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \return Sampler description.
6643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
6653c827367444ee418f129b2c238299f49d3264554Jarkko Poyrytcu::Sampler mapGLSampler (deUint32 wrapS, deUint32 minFilter, deUint32 magFilter)
6663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
6673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	return mapGLSampler(wrapS, wrapS, wrapS, minFilter, magFilter);
6683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
6693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*!
6723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Map GL sampler parameters to tcu::Sampler.
6733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
6743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * If no mapping is found, throws tcu::InternalError.
6753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
6763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \param wrapS		S-component wrap mode
6773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \param wrapT		T-component wrap mode
6783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \param minFilter	Minification filter mode
6793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \param magFilter	Magnification filter mode
6803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \return Sampler description.
6813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
6823c827367444ee418f129b2c238299f49d3264554Jarkko Poyrytcu::Sampler mapGLSampler (deUint32 wrapS, deUint32 wrapT, deUint32 minFilter, deUint32 magFilter)
6833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
6843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	return mapGLSampler(wrapS, wrapT, wrapS, minFilter, magFilter);
6853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
6863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*!
6883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Map GL sampler parameters to tcu::Sampler.
6893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
6903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * If no mapping is found, throws tcu::InternalError.
6913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
6923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \param wrapS		S-component wrap mode
6933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \param wrapT		T-component wrap mode
6943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \param wrapR		R-component wrap mode
6953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \param minFilter	Minification filter mode
6963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \param magFilter	Magnification filter mode
6973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \return Sampler description.
6983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
6993c827367444ee418f129b2c238299f49d3264554Jarkko Poyrytcu::Sampler mapGLSampler (deUint32 wrapS, deUint32 wrapT, deUint32 wrapR, deUint32 minFilter, deUint32 magFilter)
7003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
7013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	return tcu::Sampler(mapGLWrapMode(wrapS), mapGLWrapMode(wrapT), mapGLWrapMode(wrapR),
702834954305bcda8cf3eab410710fdd5e18bf81ecfJarkko Pöyry						mapGLMinFilterMode(minFilter), mapGLMagFilterMode(magFilter),
7033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry						0.0f /* lod threshold */,
7043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry						true /* normalized coords */,
7053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry						tcu::Sampler::COMPAREMODE_NONE /* no compare */,
7063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry						0 /* compare channel */,
7073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry						tcu::Vec4(0.0f) /* border color, not used */);
7083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
7093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*!
7113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Map GL compare function to tcu::Sampler::CompareMode.
7123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
7133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * If no mapping is found, throws tcu::InternalError.
7143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
7153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \param mode GL compare mode
7163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \return Compare mode
7173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
7183c827367444ee418f129b2c238299f49d3264554Jarkko Poyrytcu::Sampler::CompareMode mapGLCompareFunc (deUint32 mode)
7193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
7203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	switch (mode)
7213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
7223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_LESS:		return tcu::Sampler::COMPAREMODE_LESS;
7233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_LEQUAL:		return tcu::Sampler::COMPAREMODE_LESS_OR_EQUAL;
7243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_GREATER:	return tcu::Sampler::COMPAREMODE_GREATER;
7253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_GEQUAL:		return tcu::Sampler::COMPAREMODE_GREATER_OR_EQUAL;
7263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_EQUAL:		return tcu::Sampler::COMPAREMODE_EQUAL;
7273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_NOTEQUAL:	return tcu::Sampler::COMPAREMODE_NOT_EQUAL;
7283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_ALWAYS:		return tcu::Sampler::COMPAREMODE_ALWAYS;
7293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_NEVER:		return tcu::Sampler::COMPAREMODE_NEVER;
7303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		default:
7313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			throw tcu::InternalError("Can't map GL compare mode " + tcu::toHex(mode).toString());
7323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
7333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
7343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*!
7363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Get GL wrap mode.
7373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
7383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * If no mapping is found, throws tcu::InternalError.
7393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
7403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \param wrapMode Wrap mode
7413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \return GL wrap mode
7423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
7433c827367444ee418f129b2c238299f49d3264554Jarkko PoyrydeUint32 getGLWrapMode (tcu::Sampler::WrapMode wrapMode)
7443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
7453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_ASSERT(wrapMode != tcu::Sampler::WRAPMODE_LAST);
7463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	switch (wrapMode)
7473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
7483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::Sampler::CLAMP_TO_EDGE:		return GL_CLAMP_TO_EDGE;
7493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::Sampler::CLAMP_TO_BORDER:		return GL_CLAMP_TO_BORDER;
7503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::Sampler::REPEAT_GL:			return GL_REPEAT;
7513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::Sampler::MIRRORED_REPEAT_GL:	return GL_MIRRORED_REPEAT;
7523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		default:
7533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			throw tcu::InternalError("Can't map wrap mode");
7543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
7553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
7563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*!
7583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Get GL filter mode.
7593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
7603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * If no mapping is found, throws tcu::InternalError.
7613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
7623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \param filterMode Filter mode
7633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \return GL filter mode
7643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
7653c827367444ee418f129b2c238299f49d3264554Jarkko PoyrydeUint32 getGLFilterMode (tcu::Sampler::FilterMode filterMode)
7663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
7673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_ASSERT(filterMode != tcu::Sampler::FILTERMODE_LAST);
7683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	switch (filterMode)
7693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
7703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::Sampler::NEAREST:					return GL_NEAREST;
7713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::Sampler::LINEAR:					return GL_LINEAR;
7723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::Sampler::NEAREST_MIPMAP_NEAREST:	return GL_NEAREST_MIPMAP_NEAREST;
7733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::Sampler::NEAREST_MIPMAP_LINEAR:	return GL_NEAREST_MIPMAP_LINEAR;
7743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::Sampler::LINEAR_MIPMAP_NEAREST:	return GL_LINEAR_MIPMAP_NEAREST;
7753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::Sampler::LINEAR_MIPMAP_LINEAR:	return GL_LINEAR_MIPMAP_LINEAR;
7763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		default:
7773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			throw tcu::InternalError("Can't map filter mode");
7783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
7793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
7803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*!
7823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Get GL compare mode.
7833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
7843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * If no mapping is found, throws tcu::InternalError.
7853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
7863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \param compareMode Compare mode
7873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \return GL compare mode
7883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
7893c827367444ee418f129b2c238299f49d3264554Jarkko PoyrydeUint32 getGLCompareFunc (tcu::Sampler::CompareMode compareMode)
7903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
7913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_ASSERT(compareMode != tcu::Sampler::COMPAREMODE_NONE);
7923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	switch (compareMode)
7933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
7943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::Sampler::COMPAREMODE_NONE:				return GL_NONE;
7953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::Sampler::COMPAREMODE_LESS:				return GL_LESS;
7963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::Sampler::COMPAREMODE_LESS_OR_EQUAL:		return GL_LEQUAL;
7973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::Sampler::COMPAREMODE_GREATER:				return GL_GREATER;
7983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::Sampler::COMPAREMODE_GREATER_OR_EQUAL:	return GL_GEQUAL;
7993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::Sampler::COMPAREMODE_EQUAL:				return GL_EQUAL;
8003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::Sampler::COMPAREMODE_NOT_EQUAL:			return GL_NOTEQUAL;
8013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::Sampler::COMPAREMODE_ALWAYS:				return GL_ALWAYS;
8023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::Sampler::COMPAREMODE_NEVER:				return GL_NEVER;
8033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		default:
8043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			throw tcu::InternalError("Can't map compare mode");
8053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
8063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
8073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*!
8093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Get GL cube face.
8103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
8113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * If no mapping is found, throws tcu::InternalError.
8123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
8133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \param face Cube face
8143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \return GL cube face
8153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
8163c827367444ee418f129b2c238299f49d3264554Jarkko PoyrydeUint32 getGLCubeFace (tcu::CubeFace face)
8173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
8183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_ASSERT(face != tcu::CUBEFACE_LAST);
8193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	switch (face)
8203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
8213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::CUBEFACE_NEGATIVE_X:	return GL_TEXTURE_CUBE_MAP_NEGATIVE_X;
8223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::CUBEFACE_POSITIVE_X:	return GL_TEXTURE_CUBE_MAP_POSITIVE_X;
8233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::CUBEFACE_NEGATIVE_Y:	return GL_TEXTURE_CUBE_MAP_NEGATIVE_Y;
8243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::CUBEFACE_POSITIVE_Y:	return GL_TEXTURE_CUBE_MAP_POSITIVE_Y;
8253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::CUBEFACE_NEGATIVE_Z:	return GL_TEXTURE_CUBE_MAP_NEGATIVE_Z;
8263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::CUBEFACE_POSITIVE_Z:	return GL_TEXTURE_CUBE_MAP_POSITIVE_Z;
8273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		default:
8283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			throw tcu::InternalError("Can't map cube face");
8293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
8303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
8313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
83207b89ce0885a4a9e02b7057d45a4260d24740ba9Mika Isojärvitcu::CubeFace getCubeFaceFromGL (deUint32 face)
83307b89ce0885a4a9e02b7057d45a4260d24740ba9Mika Isojärvi{
83407b89ce0885a4a9e02b7057d45a4260d24740ba9Mika Isojärvi	switch (face)
83507b89ce0885a4a9e02b7057d45a4260d24740ba9Mika Isojärvi	{
83607b89ce0885a4a9e02b7057d45a4260d24740ba9Mika Isojärvi		case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:	return tcu::CUBEFACE_NEGATIVE_X;
83707b89ce0885a4a9e02b7057d45a4260d24740ba9Mika Isojärvi		case GL_TEXTURE_CUBE_MAP_POSITIVE_X:	return tcu::CUBEFACE_POSITIVE_X;
83807b89ce0885a4a9e02b7057d45a4260d24740ba9Mika Isojärvi		case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:	return tcu::CUBEFACE_NEGATIVE_Y;
83907b89ce0885a4a9e02b7057d45a4260d24740ba9Mika Isojärvi		case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:	return tcu::CUBEFACE_POSITIVE_Y;
84007b89ce0885a4a9e02b7057d45a4260d24740ba9Mika Isojärvi		case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:	return tcu::CUBEFACE_NEGATIVE_Z;
84107b89ce0885a4a9e02b7057d45a4260d24740ba9Mika Isojärvi		case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:	return tcu::CUBEFACE_POSITIVE_Z;
84207b89ce0885a4a9e02b7057d45a4260d24740ba9Mika Isojärvi		default:
84307b89ce0885a4a9e02b7057d45a4260d24740ba9Mika Isojärvi			throw tcu::InternalError("Can't map cube face");
84407b89ce0885a4a9e02b7057d45a4260d24740ba9Mika Isojärvi	}
84507b89ce0885a4a9e02b7057d45a4260d24740ba9Mika Isojärvi}
84607b89ce0885a4a9e02b7057d45a4260d24740ba9Mika Isojärvi
8473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*!
8483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Get GLSL sampler type for texture format.
8493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
8503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * If no mapping is found, glu::TYPE_LAST is returned.
8513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
8523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \param format Texture format
8533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \return GLSL 1D sampler type for format
8543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
8553c827367444ee418f129b2c238299f49d3264554Jarkko PoyryDataType getSampler1DType (tcu::TextureFormat format)
8563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
8573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	using tcu::TextureFormat;
8583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	if (format.order == TextureFormat::D || format.order == TextureFormat::DS)
8603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return TYPE_SAMPLER_1D;
8613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	if (format.order == TextureFormat::S)
8633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return TYPE_LAST;
8643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	switch (tcu::getTextureChannelClass(format.type))
8663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
8673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::TEXTURECHANNELCLASS_FLOATING_POINT:
8683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::TEXTURECHANNELCLASS_SIGNED_FIXED_POINT:
8693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::TEXTURECHANNELCLASS_UNSIGNED_FIXED_POINT:
8703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return glu::TYPE_SAMPLER_1D;
8713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::TEXTURECHANNELCLASS_SIGNED_INTEGER:
8733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return glu::TYPE_INT_SAMPLER_1D;
8743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::TEXTURECHANNELCLASS_UNSIGNED_INTEGER:
8763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return glu::TYPE_UINT_SAMPLER_1D;
8773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		default:
8793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return glu::TYPE_LAST;
8803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
8813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
8823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*!
8843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Get GLSL sampler type for texture format.
8853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
8863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * If no mapping is found, glu::TYPE_LAST is returned.
8873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
8883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \param format Texture format
8893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \return GLSL 2D sampler type for format
8903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
8913c827367444ee418f129b2c238299f49d3264554Jarkko PoyryDataType getSampler2DType (tcu::TextureFormat format)
8923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
8933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	using tcu::TextureFormat;
8943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	if (format.order == TextureFormat::D || format.order == TextureFormat::DS)
8963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return TYPE_SAMPLER_2D;
8973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	if (format.order == TextureFormat::S)
8993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return TYPE_LAST;
9003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	switch (tcu::getTextureChannelClass(format.type))
9023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
9033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::TEXTURECHANNELCLASS_FLOATING_POINT:
9043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::TEXTURECHANNELCLASS_SIGNED_FIXED_POINT:
9053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::TEXTURECHANNELCLASS_UNSIGNED_FIXED_POINT:
9063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return glu::TYPE_SAMPLER_2D;
9073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::TEXTURECHANNELCLASS_SIGNED_INTEGER:
9093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return glu::TYPE_INT_SAMPLER_2D;
9103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::TEXTURECHANNELCLASS_UNSIGNED_INTEGER:
9123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return glu::TYPE_UINT_SAMPLER_2D;
9133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		default:
9153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return glu::TYPE_LAST;
9163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
9173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
9183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*!
9203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Get GLSL sampler type for texture format.
9213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
9223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * If no mapping is found, glu::TYPE_LAST is returned.
9233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
9243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \param format Texture format
9253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \return GLSL cube map sampler type for format
9263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
9273c827367444ee418f129b2c238299f49d3264554Jarkko PoyryDataType getSamplerCubeType (tcu::TextureFormat format)
9283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
9293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	using tcu::TextureFormat;
9303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	if (format.order == TextureFormat::D || format.order == TextureFormat::DS)
9323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return TYPE_SAMPLER_CUBE;
9333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	if (format.order == TextureFormat::S)
9353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return TYPE_LAST;
9363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	switch (tcu::getTextureChannelClass(format.type))
9383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
9393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::TEXTURECHANNELCLASS_FLOATING_POINT:
9403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::TEXTURECHANNELCLASS_SIGNED_FIXED_POINT:
9413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::TEXTURECHANNELCLASS_UNSIGNED_FIXED_POINT:
9423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return glu::TYPE_SAMPLER_CUBE;
9433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::TEXTURECHANNELCLASS_SIGNED_INTEGER:
9453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return glu::TYPE_INT_SAMPLER_CUBE;
9463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::TEXTURECHANNELCLASS_UNSIGNED_INTEGER:
9483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return glu::TYPE_UINT_SAMPLER_CUBE;
9493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		default:
9513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return glu::TYPE_LAST;
9523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
9533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
9543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*!
9563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Get GLSL sampler type for texture format.
9573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
9583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * If no mapping is found, glu::TYPE_LAST is returned.
9593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
9603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \param format Texture format
9613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \return GLSL 2D array sampler type for format
9623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
9633c827367444ee418f129b2c238299f49d3264554Jarkko PoyryDataType getSampler2DArrayType (tcu::TextureFormat format)
9643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
9653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	using tcu::TextureFormat;
9663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	if (format.order == TextureFormat::D || format.order == TextureFormat::DS)
9683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return TYPE_SAMPLER_2D_ARRAY;
9693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	if (format.order == TextureFormat::S)
9713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return TYPE_LAST;
9723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	switch (tcu::getTextureChannelClass(format.type))
9743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
9753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::TEXTURECHANNELCLASS_FLOATING_POINT:
9763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::TEXTURECHANNELCLASS_SIGNED_FIXED_POINT:
9773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::TEXTURECHANNELCLASS_UNSIGNED_FIXED_POINT:
9783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return glu::TYPE_SAMPLER_2D_ARRAY;
9793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::TEXTURECHANNELCLASS_SIGNED_INTEGER:
9813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return glu::TYPE_INT_SAMPLER_2D_ARRAY;
9823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::TEXTURECHANNELCLASS_UNSIGNED_INTEGER:
9843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return glu::TYPE_UINT_SAMPLER_2D_ARRAY;
9853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		default:
9873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return glu::TYPE_LAST;
9883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
9893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
9903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*!
9923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Get GLSL sampler type for texture format.
9933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
9943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * If no mapping is found, glu::TYPE_LAST is returned.
9953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
9963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \param format Texture format
9973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \return GLSL 3D sampler type for format
9983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
9993c827367444ee418f129b2c238299f49d3264554Jarkko PoyryDataType getSampler3DType (tcu::TextureFormat format)
10003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
10013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	using tcu::TextureFormat;
10023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	if (format.order == TextureFormat::D || format.order == TextureFormat::DS)
10043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return TYPE_SAMPLER_3D;
10053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	if (format.order == TextureFormat::S)
10073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return TYPE_LAST;
10083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	switch (tcu::getTextureChannelClass(format.type))
10103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
10113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::TEXTURECHANNELCLASS_FLOATING_POINT:
10123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::TEXTURECHANNELCLASS_SIGNED_FIXED_POINT:
10133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::TEXTURECHANNELCLASS_UNSIGNED_FIXED_POINT:
10143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return glu::TYPE_SAMPLER_3D;
10153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::TEXTURECHANNELCLASS_SIGNED_INTEGER:
10173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return glu::TYPE_INT_SAMPLER_3D;
10183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::TEXTURECHANNELCLASS_UNSIGNED_INTEGER:
10203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return glu::TYPE_UINT_SAMPLER_3D;
10213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		default:
10233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return glu::TYPE_LAST;
10243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
10253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
10263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*!
10283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Get GLSL sampler type for texture format.
10293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
10303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * If no mapping is found, glu::TYPE_LAST is returned.
10313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
10323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \param format Texture format
10333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \return GLSL cube map array sampler type for format
10343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
10353c827367444ee418f129b2c238299f49d3264554Jarkko PoyryDataType getSamplerCubeArrayType (tcu::TextureFormat format)
10363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
10373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	using tcu::TextureFormat;
10383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	if (format.order == TextureFormat::D || format.order == TextureFormat::DS)
10403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return TYPE_SAMPLER_CUBE_ARRAY;
10413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	if (format.order == TextureFormat::S)
10433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return TYPE_LAST;
10443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	switch (tcu::getTextureChannelClass(format.type))
10463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
10473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::TEXTURECHANNELCLASS_FLOATING_POINT:
10483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::TEXTURECHANNELCLASS_SIGNED_FIXED_POINT:
10493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::TEXTURECHANNELCLASS_UNSIGNED_FIXED_POINT:
10503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return glu::TYPE_SAMPLER_CUBE_ARRAY;
10513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::TEXTURECHANNELCLASS_SIGNED_INTEGER:
10533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return glu::TYPE_INT_SAMPLER_CUBE_ARRAY;
10543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case tcu::TEXTURECHANNELCLASS_UNSIGNED_INTEGER:
10563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return glu::TYPE_UINT_SAMPLER_CUBE_ARRAY;
10573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		default:
10593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return glu::TYPE_LAST;
10603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
10613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
10623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10633c827367444ee418f129b2c238299f49d3264554Jarkko Poyryenum RenderableType
10643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
10653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	RENDERABLE_COLOR	= (1<<0),
10663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	RENDERABLE_DEPTH	= (1<<1),
10673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	RENDERABLE_STENCIL	= (1<<2)
10683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
10693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10703c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic deUint32 getRenderableBitsES3 (const ContextInfo& contextInfo, deUint32 internalFormat)
10713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
10723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	switch (internalFormat)
10733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
10743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		// Color-renderable formats
10753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGBA32I:
10763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGBA32UI:
10773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGBA16I:
10783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGBA16UI:
10793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGBA8:
10803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGBA8I:
10813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGBA8UI:
10823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_SRGB8_ALPHA8:
10833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGB10_A2:
10843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGB10_A2UI:
10853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGBA4:
10863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGB5_A1:
10873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGB8:
10883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGB565:
10893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RG32I:
10903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RG32UI:
10913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RG16I:
10923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RG16UI:
10933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RG8:
10943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RG8I:
10953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RG8UI:
10963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_R32I:
10973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_R32UI:
10983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_R16I:
10993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_R16UI:
11003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_R8:
11013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_R8I:
11023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_R8UI:
11033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return RENDERABLE_COLOR;
11043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		// GL_EXT_color_buffer_float
11063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGBA32F:
11073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_R11F_G11F_B10F:
11083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RG32F:
11093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_R32F:
11103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (contextInfo.isExtensionSupported("GL_EXT_color_buffer_float"))
11113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				return RENDERABLE_COLOR;
11123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else
11133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				return 0;
11143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		// GL_EXT_color_buffer_float / GL_EXT_color_buffer_half_float
11163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RGBA16F:
11173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_RG16F:
11183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_R16F:
11193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			if (contextInfo.isExtensionSupported("GL_EXT_color_buffer_float") ||
11203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				contextInfo.isExtensionSupported("GL_EXT_color_buffer_half_float"))
11213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				return RENDERABLE_COLOR;
11223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			else
11233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry				return 0;
11243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		// Depth formats
11263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_DEPTH_COMPONENT32F:
11273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_DEPTH_COMPONENT24:
11283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_DEPTH_COMPONENT16:
11293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return RENDERABLE_DEPTH;
11303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		// Depth+stencil formats
11323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_DEPTH32F_STENCIL8:
11333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_DEPTH24_STENCIL8:
11343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return RENDERABLE_DEPTH|RENDERABLE_STENCIL;
11353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		// Stencil formats
11373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case GL_STENCIL_INDEX8:
11383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return RENDERABLE_STENCIL;
11393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		default:
11413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return 0;
11423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
11433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
11443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*!
11463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Check if sized internal format is color-renderable.
11473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \note Works currently only on ES3 context.
11483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
11493c827367444ee418f129b2c238299f49d3264554Jarkko Poyrybool isSizedFormatColorRenderable (const RenderContext& renderCtx, const ContextInfo& contextInfo, deUint32 sizedFormat)
11503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
11513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	deUint32 renderable = 0;
11523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	if (renderCtx.getType().getAPI() == ApiType::es(3,0))
11543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		renderable = getRenderableBitsES3(contextInfo, sizedFormat);
11553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	else
11563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		throw tcu::InternalError("Context type not supported in query");
11573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	return (renderable & RENDERABLE_COLOR) != 0;
11593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
11603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
116145b7dbbfe93d87336754e8c06380953ec003aeafJarkko Pöyryconst tcu::IVec2 (&getDefaultGatherOffsets (void))[4]
116245b7dbbfe93d87336754e8c06380953ec003aeafJarkko Pöyry{
116345b7dbbfe93d87336754e8c06380953ec003aeafJarkko Pöyry	static const tcu::IVec2 s_defaultOffsets[4] =
116445b7dbbfe93d87336754e8c06380953ec003aeafJarkko Pöyry	{
116545b7dbbfe93d87336754e8c06380953ec003aeafJarkko Pöyry		tcu::IVec2(0, 1),
116645b7dbbfe93d87336754e8c06380953ec003aeafJarkko Pöyry		tcu::IVec2(1, 1),
116745b7dbbfe93d87336754e8c06380953ec003aeafJarkko Pöyry		tcu::IVec2(1, 0),
116845b7dbbfe93d87336754e8c06380953ec003aeafJarkko Pöyry		tcu::IVec2(0, 0),
116945b7dbbfe93d87336754e8c06380953ec003aeafJarkko Pöyry	};
117045b7dbbfe93d87336754e8c06380953ec003aeafJarkko Pöyry	return s_defaultOffsets;
117145b7dbbfe93d87336754e8c06380953ec003aeafJarkko Pöyry}
117245b7dbbfe93d87336754e8c06380953ec003aeafJarkko Pöyry
11733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // glu
1174