/*-------------------------------------------------------------------------
 * drawElements Internal Test Module
 * ---------------------------------
 *
 * Copyright 2015 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 *//*!
 * \file
 * \brief Texture format tests.
 *//*--------------------------------------------------------------------*/

#include "ditTextureFormatTests.hpp"
#include "tcuTestLog.hpp"

#include "rrRenderer.hpp"
#include "tcuTextureUtil.hpp"
#include "tcuVectorUtil.hpp"
#include "tcuFormatUtil.hpp"

#include "deRandom.hpp"
#include "deArrayUtil.hpp"
#include "deStringUtil.hpp"
#include "deUniquePtr.hpp"

#include <sstream>

namespace dit
{

namespace
{

using std::string;
using std::vector;

using tcu::TestLog;
using tcu::TextureFormat;
using tcu::TextureChannelClass;
using tcu::TextureAccessType;
using tcu::PixelBufferAccess;
using tcu::ConstPixelBufferAccess;
using tcu::Vector;
using tcu::IVec3;

// Test data

static const deUint8 s_snormInt8In[] =
{
	0x1b, 0x23, 0xc5, 0x09,
	0xb4, 0xbf, 0xbf, 0x24,
	0x1a, 0x8a, 0xdb, 0x96,
	0xc0, 0xa1, 0xde, 0x78,
};
static const deUint32 s_snormInt8FloatRef[] =
{
	0x3e59b367, 0x3e8d1a34, 0xbeeddbb7, 0x3d912245,
	0xbf193265, 0xbf03060c, 0xbf03060c, 0x3e912245,
	0x3e51a347, 0xbf6ddbb7, 0xbe952a55, 0xbf55ab57,
	0xbf010204, 0xbf3f7efe, 0xbe891224, 0x3f71e3c8,
};
static const deUint32 s_snormInt8UintRef[] =
{
	0x0000001b, 0x00000023, 0xffffffc5, 0x00000009,
	0xffffffb4, 0xffffffbf, 0xffffffbf, 0x00000024,
	0x0000001a, 0xffffff8a, 0xffffffdb, 0xffffff96,
	0xffffffc0, 0xffffffa1, 0xffffffde, 0x00000078,
};
static const deUint32 s_snormInt8IntRef[] =
{
	0x0000001b, 0x00000023, 0xffffffc5, 0x00000009,
	0xffffffb4, 0xffffffbf, 0xffffffbf, 0x00000024,
	0x0000001a, 0xffffff8a, 0xffffffdb, 0xffffff96,
	0xffffffc0, 0xffffffa1, 0xffffffde, 0x00000078,
};

static const deUint8 s_snormInt16In[] =
{
	0xa0, 0xe9, 0xaa, 0x30,
	0x16, 0x61, 0x37, 0xa2,
	0x23, 0x4c, 0x46, 0xac,
	0x8b, 0xf9, 0x36, 0x3e,
	0x92, 0x7c, 0x96, 0x81,
	0xc5, 0xb2, 0x95, 0x6e,
	0x4f, 0x1e, 0xbc, 0x49,
	0x14, 0x6c, 0x3c, 0x61,
};
static const deUint32 s_snormInt16FloatRef[] =
{
	0xbe330166, 0x3ec2a985, 0x3f422d84, 0xbf3b9377,
	0x3f184731, 0xbf27754f, 0xbd4ea19d, 0x3ef8d9f2,
	0x3f7925f2, 0xbf7cd5fa, 0xbf1a7735, 0x3f5d2bba,
	0x3e7279e5, 0x3f137927, 0x3f5829b0, 0x3f427985,
};
static const deUint32 s_snormInt16UintRef[] =
{
	0xffffe9a0, 0x000030aa, 0x00006116, 0xffffa237,
	0x00004c23, 0xffffac46, 0xfffff98b, 0x00003e36,
	0x00007c92, 0xffff8196, 0xffffb2c5, 0x00006e95,
	0x00001e4f, 0x000049bc, 0x00006c14, 0x0000613c,
};
static const deUint32 s_snormInt16IntRef[] =
{
	0xffffe9a0, 0x000030aa, 0x00006116, 0xffffa237,
	0x00004c23, 0xffffac46, 0xfffff98b, 0x00003e36,
	0x00007c92, 0xffff8196, 0xffffb2c5, 0x00006e95,
	0x00001e4f, 0x000049bc, 0x00006c14, 0x0000613c,
};

static const deUint8 s_snormInt32In[] =
{
	0xba, 0x2c, 0x02, 0xea,
	0x75, 0x59, 0x74, 0x48,
	0x32, 0xad, 0xb0, 0xda,
	0x0b, 0xf7, 0x6f, 0x49,
	0x98, 0x9b, 0x76, 0x66,
	0x79, 0x7d, 0x69, 0x33,
	0xb5, 0x74, 0x61, 0xa4,
	0x4c, 0xcd, 0x5c, 0x20,
	0xc3, 0xba, 0x90, 0xfc,
	0xe3, 0x17, 0xd0, 0x89,
	0x28, 0x61, 0x5d, 0xb0,
	0x5d, 0xc9, 0xad, 0xc9,
	0xfc, 0x8c, 0x48, 0x3c,
	0x11, 0x13, 0x40, 0x27,
	0xe4, 0x88, 0x27, 0x4f,
	0x52, 0xa2, 0x54, 0x50,
};
static const deUint32 s_snormInt32FloatRef[] =
{
	0xbe2fee9a, 0x3f10e8b3, 0xbe953d4b, 0x3f12dfee,
	0x3f4ced37, 0x3ecda5f6, 0xbf373d17, 0x3e817335,
	0xbcdbd14f, 0xbf6c5fd0, 0xbf1f453e, 0xbed948db,
	0x3ef12234, 0x3e9d004c, 0x3f1e4f12, 0x3f20a945,
};
static const deUint32 s_snormInt32UintRef[] =
{
	0xea022cba, 0x48745975, 0xdab0ad32, 0x496ff70b,
	0x66769b98, 0x33697d79, 0xa46174b5, 0x205ccd4c,
	0xfc90bac3, 0x89d017e3, 0xb05d6128, 0xc9adc95d,
	0x3c488cfc, 0x27401311, 0x4f2788e4, 0x5054a252,
};
static const deUint32 s_snormInt32IntRef[] =
{
	0xea022cba, 0x48745975, 0xdab0ad32, 0x496ff70b,
	0x66769b98, 0x33697d79, 0xa46174b5, 0x205ccd4c,
	0xfc90bac3, 0x89d017e3, 0xb05d6128, 0xc9adc95d,
	0x3c488cfc, 0x27401311, 0x4f2788e4, 0x5054a252,
};

static const deUint8 s_unormInt8In[] =
{
	0x90, 0xa0, 0xa9, 0x26,
	0x24, 0xc4, 0xa1, 0xa5,
	0xdb, 0x0e, 0x09, 0x7a,
	0x7f, 0x3d, 0xf2, 0x1f,
};
static const deUint32 s_unormInt8FloatRef[] =
{
	0x3f109091, 0x3f20a0a1, 0x3f29a9aa, 0x3e189899,
	0x3e109091, 0x3f44c4c5, 0x3f21a1a2, 0x3f25a5a6,
	0x3f5bdbdc, 0x3d60e0e1, 0x3d109091, 0x3ef4f4f5,
	0x3efefeff, 0x3e74f4f5, 0x3f72f2f3, 0x3df8f8f9,
};
static const deUint32 s_unormInt8UintRef[] =
{
	0x00000090, 0x000000a0, 0x000000a9, 0x00000026,
	0x00000024, 0x000000c4, 0x000000a1, 0x000000a5,
	0x000000db, 0x0000000e, 0x00000009, 0x0000007a,
	0x0000007f, 0x0000003d, 0x000000f2, 0x0000001f,
};
static const deUint32 s_unormInt8IntRef[] =
{
	0x00000090, 0x000000a0, 0x000000a9, 0x00000026,
	0x00000024, 0x000000c4, 0x000000a1, 0x000000a5,
	0x000000db, 0x0000000e, 0x00000009, 0x0000007a,
	0x0000007f, 0x0000003d, 0x000000f2, 0x0000001f,
};

static const deUint8 s_unormInt16In[] =
{
	0xb6, 0x85, 0xf0, 0x1a,
	0xbc, 0x76, 0x5b, 0x59,
	0xf8, 0x74, 0x80, 0x6c,
	0xb1, 0x80, 0x4a, 0xdc,
	0xeb, 0x61, 0xa3, 0x12,
	0xf6, 0x65, 0x6b, 0x25,
	0x29, 0xe0, 0xe3, 0x0d,
	0x3a, 0xac, 0xa7, 0x97,
};
static const deUint32 s_unormInt16FloatRef[] =
{
	0x3f05b686, 0x3dd780d8, 0x3eed78ed, 0x3eb2b6b3,
	0x3ee9f0ea, 0x3ed900d9, 0x3f00b181, 0x3f5c4adc,
	0x3ec3d6c4, 0x3d951895, 0x3ecbeccc, 0x3e15ac96,
	0x3f6029e0, 0x3d5e30de, 0x3f2c3aac, 0x3f17a798,
};
static const deUint32 s_unormInt16UintRef[] =
{
	0x000085b6, 0x00001af0, 0x000076bc, 0x0000595b,
	0x000074f8, 0x00006c80, 0x000080b1, 0x0000dc4a,
	0x000061eb, 0x000012a3, 0x000065f6, 0x0000256b,
	0x0000e029, 0x00000de3, 0x0000ac3a, 0x000097a7,
};
static const deUint32 s_unormInt16IntRef[] =
{
	0x000085b6, 0x00001af0, 0x000076bc, 0x0000595b,
	0x000074f8, 0x00006c80, 0x000080b1, 0x0000dc4a,
	0x000061eb, 0x000012a3, 0x000065f6, 0x0000256b,
	0x0000e029, 0x00000de3, 0x0000ac3a, 0x000097a7,
};

static const deUint8 s_unormInt24In[] =
{
	0xea, 0x65, 0x31, 0xb3,
	0x53, 0x62, 0x02, 0xf1,
	0xda, 0x3c, 0xaf, 0x31,
	0x35, 0xd6, 0x1f, 0xe4,
	0xfa, 0x3b, 0xb9, 0x48,
	0x73, 0x9a, 0xde, 0x6b,
	0x3e, 0xa5, 0x15, 0x90,
	0x95, 0xc2, 0x56, 0x8b,
	0xd2, 0x14, 0xd5, 0xe5,
	0xd0, 0x7b, 0x9f, 0x74,
	0x79, 0x58, 0x86, 0xa9,
	0xc0, 0xdf, 0xb6, 0xb4,
};
static const deUint32 s_unormInt24FloatRef[] =
{
	0x3e4597a9, 0x3ec4a767, 0x3f5af103, 0x3e46bcf1,
	0x3dfeb1a9, 0x3e6feb91, 0x3ee69173, 0x3ed7bd35,
	0x3dad29f1, 0x3f429591, 0x3f528b57, 0x3f65d515,
	0x3f1f7bd1, 0x3eb0f2e9, 0x3f40a987, 0x3f34b6e0,
};
static const deUint32 s_unormInt24UintRef[] =
{
	0x003165ea, 0x006253b3, 0x00daf102, 0x0031af3c,
	0x001fd635, 0x003bfae4, 0x007348b9, 0x006bde9a,
	0x0015a53e, 0x00c29590, 0x00d28b56, 0x00e5d514,
	0x009f7bd0, 0x00587974, 0x00c0a986, 0x00b4b6df,
};
static const deUint32 s_unormInt24IntRef[] =
{
	0x003165ea, 0x006253b3, 0x00daf102, 0x0031af3c,
	0x001fd635, 0x003bfae4, 0x007348b9, 0x006bde9a,
	0x0015a53e, 0x00c29590, 0x00d28b56, 0x00e5d514,
	0x009f7bd0, 0x00587974, 0x00c0a986, 0x00b4b6df,
};

static const deUint8 s_unormInt32In[] =
{
	0x45, 0x7d, 0xe1, 0x55,
	0xd2, 0xcb, 0xc5, 0x17,
	0x64, 0x87, 0x84, 0x50,
	0x37, 0x60, 0x54, 0xa1,
	0xa8, 0x7e, 0xea, 0x98,
	0x1a, 0xd1, 0xb4, 0x70,
	0x2d, 0xcb, 0xff, 0x13,
	0x3d, 0xd7, 0x3c, 0xe4,
	0x94, 0xd6, 0xb4, 0xf7,
	0x01, 0x58, 0x32, 0x9d,
	0x91, 0x2b, 0x49, 0x1f,
	0xd0, 0xca, 0x3d, 0x05,
	0x14, 0x5a, 0x95, 0xd0,
	0xfd, 0x64, 0x33, 0xd3,
	0x73, 0x87, 0xa5, 0xf9,
	0x6d, 0xc8, 0x39, 0x03,
};
static const deUint32 s_unormInt32FloatRef[] =
{
	0x3eabc2fb, 0x3dbe2e5f, 0x3ea1090f, 0x3f215460,
	0x3f18ea7f, 0x3ee169a2, 0x3d9ffe59, 0x3f643cd7,
	0x3f77b4d7, 0x3f1d3258, 0x3dfa495d, 0x3ca7b95a,
	0x3f50955a, 0x3f533365, 0x3f79a587, 0x3c4e721b,
};
static const deUint32 s_unormInt32UintRef[] =
{
	0x55e17d45, 0x17c5cbd2, 0x50848764, 0xa1546037,
	0x98ea7ea8, 0x70b4d11a, 0x13ffcb2d, 0xe43cd73d,
	0xf7b4d694, 0x9d325801, 0x1f492b91, 0x053dcad0,
	0xd0955a14, 0xd33364fd, 0xf9a58773, 0x0339c86d,
};
static const deUint32 s_unormInt32IntRef[] =
{
	0x55e17d45, 0x17c5cbd2, 0x50848764, 0xa1546037,
	0x98ea7ea8, 0x70b4d11a, 0x13ffcb2d, 0xe43cd73d,
	0xf7b4d694, 0x9d325801, 0x1f492b91, 0x053dcad0,
	0xd0955a14, 0xd33364fd, 0xf9a58773, 0x0339c86d,
};

static const deUint8 s_unormByte44In[] =
{
	0xdb, 0xa8, 0x29, 0x2d,
};
static const deUint32 s_unormByte44FloatRef[] =
{
	0x3f5dddde, 0x3f3bbbbc, 0x00000000, 0x3f800000,
	0x3f2aaaab, 0x3f088889, 0x00000000, 0x3f800000,
	0x3e088889, 0x3f19999a, 0x00000000, 0x3f800000,
	0x3e088889, 0x3f5dddde, 0x00000000, 0x3f800000,
};
static const deUint32 s_unormByte44IntRef[] =
{
	0x0000000d, 0x0000000b, 0x00000000, 0x00000001,
	0x0000000a, 0x00000008, 0x00000000, 0x00000001,
	0x00000002, 0x00000009, 0x00000000, 0x00000001,
	0x00000002, 0x0000000d, 0x00000000, 0x00000001,
};
static const deUint32 s_unsignedByte44FloatRef[] =
{
	0x41500000, 0x41300000, 0x00000000, 0x3f800000,
	0x41200000, 0x41000000, 0x00000000, 0x3f800000,
	0x40000000, 0x41100000, 0x00000000, 0x3f800000,
	0x40000000, 0x41500000, 0x00000000, 0x3f800000,
};

static const deUint8 s_unormShort565In[] =
{
	0xea, 0x7e, 0xcc, 0x28,
	0x38, 0xce, 0x8f, 0x16,
};
static const deUint32 s_unormShort565FloatRef[] =
{
	0x3ef7bdef, 0x3f5f7df8, 0x3ea5294a, 0x3f800000,
	0x3e25294a, 0x3dc30c31, 0x3ec6318c, 0x3f800000,
	0x3f4e739d, 0x3f471c72, 0x3f46318c, 0x3f800000,
	0x3d842108, 0x3f534d35, 0x3ef7bdef, 0x3f800000,
};
static const deUint32 s_unormShort565IntRef[] =
{
	0x0000000f, 0x00000037, 0x0000000a, 0x00000001,
	0x00000005, 0x00000006, 0x0000000c, 0x00000001,
	0x00000019, 0x00000031, 0x00000018, 0x00000001,
	0x00000002, 0x00000034, 0x0000000f, 0x00000001,
};
static const deUint32 s_unsignedShort565FloatRef[] =
{
	0x41700000, 0x425c0000, 0x41200000, 0x3f800000,
	0x40a00000, 0x40c00000, 0x41400000, 0x3f800000,
	0x41c80000, 0x42440000, 0x41c00000, 0x3f800000,
	0x40000000, 0x42500000, 0x41700000, 0x3f800000,
};

static const deUint8 s_unormShort555In[] =
{
	0x02, 0xea, 0x89, 0x13,
	0x94, 0x5a, 0x5b, 0x60,
};
static const deUint32 s_unormShort555FloatRef[] =
{
	0x3f56b5ad, 0x3f042108, 0x3d842108, 0x3f800000,
	0x3e042108, 0x3f6739ce, 0x3e94a529, 0x3f800000,
	0x3f35ad6b, 0x3f25294a, 0x3f25294a, 0x3f800000,
	0x3f46318c, 0x3d842108, 0x3f5ef7be, 0x3f800000,
};
static const deUint32 s_unormShort555IntRef[] =
{
	0x0000001a, 0x00000010, 0x00000002, 0x00000001,
	0x00000004, 0x0000001c, 0x00000009, 0x00000001,
	0x00000016, 0x00000014, 0x00000014, 0x00000001,
	0x00000018, 0x00000002, 0x0000001b, 0x00000001,
};

static const deUint8 s_unormShort4444In[] =
{
	0x19, 0xdb, 0xa8, 0xa8,
	0x72, 0x29, 0xb4, 0x2d,
};
static const deUint32 s_unormShort4444FloatRef[] =
{
	0x3f5dddde, 0x3f3bbbbc, 0x3d888889, 0x3f19999a,
	0x3f2aaaab, 0x3f088889, 0x3f2aaaab, 0x3f088889,
	0x3e088889, 0x3f19999a, 0x3eeeeeef, 0x3e088889,
	0x3e088889, 0x3f5dddde, 0x3f3bbbbc, 0x3e888889,
};
static const deUint32 s_unormShort4444IntRef[] =
{
	0x0000000d, 0x0000000b, 0x00000001, 0x00000009,
	0x0000000a, 0x00000008, 0x0000000a, 0x00000008,
	0x00000002, 0x00000009, 0x00000007, 0x00000002,
	0x00000002, 0x0000000d, 0x0000000b, 0x00000004,
};
static const deUint32 s_unsignedShort4444FloatRef[] =
{
	0x41500000, 0x41300000, 0x3f800000, 0x41100000,
	0x41200000, 0x41000000, 0x41200000, 0x41000000,
	0x40000000, 0x41100000, 0x40e00000, 0x40000000,
	0x40000000, 0x41500000, 0x41300000, 0x40800000,
};

static const deUint8 s_unormShort5551In[] =
{
	0x13, 0x89, 0x6f, 0x3c,
	0xae, 0xe9, 0xf2, 0xd9,
};
static const deUint32 s_unormShort5551FloatRef[] =
{
	0x3f0c6319, 0x3e042108, 0x3e94a529, 0x3f800000,
	0x3e6739ce, 0x3f0c6319, 0x3f3def7c, 0x3f800000,
	0x3f6f7bdf, 0x3e46318c, 0x3f3def7c, 0x00000000,
	0x3f5ef7be, 0x3e6739ce, 0x3f4e739d, 0x00000000,
};
static const deUint32 s_unormShort5551IntRef[] =
{
	0x00000011, 0x00000004, 0x00000009, 0x00000001,
	0x00000007, 0x00000011, 0x00000017, 0x00000001,
	0x0000001d, 0x00000006, 0x00000017, 0x00000000,
	0x0000001b, 0x00000007, 0x00000019, 0x00000000,
};
static const deUint32 s_unsignedShort5551FloatRef[] =
{
	0x41880000, 0x40800000, 0x41100000, 0x3f800000,
	0x40e00000, 0x41880000, 0x41b80000, 0x3f800000,
	0x41e80000, 0x40c00000, 0x41b80000, 0x00000000,
	0x41d80000, 0x40e00000, 0x41c80000, 0x00000000,
};

static const deUint8 s_unormShort1555In[] =
{
	0xf8, 0xc5, 0x1f, 0x6c,
	0xf0, 0x2f, 0xf2, 0x95,
};
static const deUint32 s_unormShort1555FloatRef[] =
{
	0x3f800000, 0x3f0c6319, 0x3ef7bdef, 0x3f46318c,
	0x00000000, 0x3f5ef7be, 0x00000000, 0x3f800000,
	0x00000000, 0x3eb5ad6b, 0x3f800000, 0x3f042108,
	0x3f800000, 0x3e25294a, 0x3ef7bdef, 0x3f14a529,
};
static const deUint32 s_unormShort1555IntRef[] =
{
	0x00000001, 0x00000011, 0x0000000f, 0x00000018,
	0x00000000, 0x0000001b, 0x00000000, 0x0000001f,
	0x00000000, 0x0000000b, 0x0000001f, 0x00000010,
	0x00000001, 0x00000005, 0x0000000f, 0x00000012,
};

static const deUint8 s_unormInt101010In[] =
{
	0x81, 0xb3, 0x67, 0x51,
	0xa9, 0x00, 0x34, 0xc5,
	0xf0, 0x2f, 0xf2, 0x95,
	0xf8, 0xc5, 0x1f, 0x6c,
};
static const deUint32 s_unormInt101010FloatRef[] =
{
	0x3ea2a8aa, 0x3f1ee7ba, 0x3e60380e, 0x3f800000,
	0x3f45314c, 0x3f50340d, 0x3d282a0b, 0x3f800000,
	0x3f15e579, 0x3f48b22d, 0x3f7f3fd0, 0x3f800000,
	0x3ed8360e, 0x3efe3f90, 0x3ebf2fcc, 0x3f800000,
};
static const deUint32 s_unormInt101010IntRef[] =
{
	0x00000145, 0x0000027b, 0x000000e0, 0x00000001,
	0x00000314, 0x00000340, 0x0000002a, 0x00000001,
	0x00000257, 0x00000322, 0x000003fc, 0x00000001,
	0x000001b0, 0x000001fc, 0x0000017e, 0x00000001,
};

static const deUint8 s_unormInt1010102RevIn[] =
{
	0xfd, 0xc6, 0xf5, 0xc4,
	0x32, 0xa8, 0xfd, 0x7d,
	0xe7, 0x3f, 0x10, 0xd0,
	0x86, 0x0d, 0x66, 0xd0,
};
static const deUint32 s_unormInt1010102RevFloatRef[] =
{
	0x3f3f6fdc, 0x3eb8ae2c, 0x3d9e278a, 0x3f800000,
	0x3d48320d, 0x3f5ab6ae, 0x3f77fdff, 0x3eaaaaab,
	0x3f79fe80, 0x3c703c0f, 0x3e80a028, 0x3f800000,
	0x3ec330cc, 0x3ec1b06c, 0x3e8320c8, 0x3f800000,
};
static const deUint32 s_unormInt1010102RevIntRef[] =
{
	0x000002fd, 0x00000171, 0x0000004f, 0x00000003,
	0x00000032, 0x0000036a, 0x000003df, 0x00000001,
	0x000003e7, 0x0000000f, 0x00000101, 0x00000003,
	0x00000186, 0x00000183, 0x00000106, 0x00000003,
};
static const deUint32 s_snormInt1010102RevFloatRef[] =
{
	0xbf01c0e0, 0x3f38dc6e, 0x3e1e4f28, 0xbf800000,
	0x3dc86432, 0xbe964b26, 0xbd844221, 0x3f800000,
	0xbd486432, 0x3cf0783c, 0x3f00c060, 0xbf800000,
	0x3f4361b1, 0x3f41e0f0, 0x3f0341a1, 0xbf800000,
};
static const deUint32 s_snormInt1010102RevIntRef[] =
{
	0xfffffefd, 0x00000171, 0x0000004f, 0xffffffff,
	0x00000032, 0xffffff6a, 0xffffffdf, 0x00000001,
	0xffffffe7, 0x0000000f, 0x00000101, 0xffffffff,
	0x00000186, 0x00000183, 0x00000106, 0xffffffff,
};

static const deUint8 s_unsignedInt1010102RevIn[] =
{
	0xb8, 0x4c, 0xfd, 0x00,
	0x65, 0x7f, 0xb2, 0x4e,
	0x11, 0x3e, 0x03, 0x23,
	0xae, 0xc9, 0xdd, 0xa2,
};
static const deUint32 s_unsignedInt1010102RevFloatRef[] =
{
	0x43380000, 0x4454c000, 0x41700000, 0x00000000,
	0x44594000, 0x431f0000, 0x436b0000, 0x3f800000,
	0x44044000, 0x434f0000, 0x440c0000, 0x00000000,
	0x43d70000, 0x445c8000, 0x440b4000, 0x40000000,
};
static const deUint32 s_unsignedInt1010102RevIntRef[] =
{
	0x000000b8, 0x00000353, 0x0000000f, 0x00000000,
	0x00000365, 0x0000009f, 0x000000eb, 0x00000001,
	0x00000211, 0x000000cf, 0x00000230, 0x00000000,
	0x000001ae, 0x00000372, 0x0000022d, 0x00000002,
};
static const deUint32 s_signedInt1010102RevFloatRef[] =
{
	0x43380000, 0x4f7fffff, 0x41700000, 0x00000000,
	0x4f7fffff, 0x431f0000, 0x436b0000, 0x3f800000,
	0x4f7ffffe, 0x434f0000, 0x4f7ffffe, 0x00000000,
	0x43d70000, 0x4f7fffff, 0x4f7ffffe, 0x4f800000,
};
static const deUint32 s_signedInt1010102RevIntRef[] =
{
	0x000000b8, 0xffffff53, 0x0000000f, 0x00000000,
	0xffffff65, 0x0000009f, 0x000000eb, 0x00000001,
	0xfffffe11, 0x000000cf, 0xfffffe30, 0x00000000,
	0x000001ae, 0xffffff72, 0xfffffe2d, 0xfffffffe,
};

static const deUint8 s_unsignedInt11f11f10fRevIn[] =
{
	0x8e, 0x1b, 0x81, 0x45,
	0xcf, 0x47, 0x50, 0x29,
	0xff, 0x5e, 0x8e, 0x93,
	0x95, 0x07, 0x45, 0x4a,
};
static const deUint32 s_unsignedInt11f11f10fRevFloatRef[] =
{
	0x3f1c0000, 0x380c0000, 0x3c580000, 0x3f800000,
	0x7fffffff, 0x3c100000, 0x3a940000, 0x3f800000,
	0x45fe0000, 0x3b960000, 0x41380000, 0x3f800000,
	0x472a0000, 0x39400000, 0x3ca40000, 0x3f800000,
};

static const deUint8 s_unsignedInt999E5RevIn[] =
{
	0x88, 0x8b, 0x50, 0x34,
	0x2b, 0x2f, 0xe2, 0x92,
	0x95, 0x7f, 0xeb, 0x18,
	0x6b, 0xe2, 0x27, 0x30,
};
static const deUint32 s_unsignedInt999E5RevFloatRef[] =
{
	0x3ac40000, 0x398a0000, 0x3a8a0000, 0x3f800000,
	0x40958000, 0x408b8000, 0x40380000, 0x3f800000,
	0x394a8000, 0x395f8000, 0x37e80000, 0x3f800000,
	0x39d60000, 0x3af88000, 0x38100000, 0x3f800000,
};

static const deUint8 s_unsignedInt1688In[] =
{
	0x02, 0x50, 0x91, 0x85,
	0xcc, 0xe2, 0xfd, 0xc8,
	0x62, 0xeb, 0x0f, 0xe6,
	0x95, 0x27, 0x26, 0x24,
};
static const deUint32 s_unsignedInt1688FloatRef[] =
{
	0x3f059186, 0x00000000, 0x00000000, 0x3f800000,
	0x3f48fdc9, 0x00000000, 0x00000000, 0x3f800000,
	0x3f660fe6, 0x00000000, 0x00000000, 0x3f800000,
	0x3e109891, 0x00000000, 0x00000000, 0x3f800000,
};
static const deUint32 s_unsignedInt1688UintRef[] =
{
	0x00000002, 0x00000000, 0x00000000, 0x00000001,
	0x000000cc, 0x00000000, 0x00000000, 0x00000001,
	0x00000062, 0x00000000, 0x00000000, 0x00000001,
	0x00000095, 0x00000000, 0x00000000, 0x00000001,
};

static const deUint8 s_unsignedInt248In[] =
{
	0xea, 0x7e, 0xcc, 0x28,
	0x38, 0xce, 0x8f, 0x16,
	0x3e, 0x4f, 0xe2, 0xfd,
	0x74, 0x5e, 0xf2, 0x30,
};
static const deUint32 s_unsignedInt248FloatRef[] =
{
	0x3e2331f9, 0x00000000, 0x00000000, 0x3f800000,
	0x3db47e71, 0x00000000, 0x00000000, 0x3f800000,
	0x3f7de250, 0x00000000, 0x00000000, 0x3f800000,
	0x3e43c979, 0x00000000, 0x00000000, 0x3f800000,
};
static const deUint32 s_unsignedInt248UintRef[] =
{
	0x000000ea, 0x00000000, 0x00000000, 0x00000001,
	0x00000038, 0x00000000, 0x00000000, 0x00000001,
	0x0000003e, 0x00000000, 0x00000000, 0x00000001,
	0x00000074, 0x00000000, 0x00000000, 0x00000001,
};

static const deUint8 s_unsignedInt248RevIn[] =
{
	0x7e, 0xcc, 0x28, 0xea,
	0xce, 0x8f, 0x16, 0x38,
	0x4f, 0xe2, 0xfd, 0x3e,
	0x5e, 0xf2, 0x30, 0x74,
};
static const deUint32 s_unsignedInt248RevFloatRef[] =
{
	0x3e2331f9, 0x00000000, 0x00000000, 0x3f800000,
	0x3db47e71, 0x00000000, 0x00000000, 0x3f800000,
	0x3f7de250, 0x00000000, 0x00000000, 0x3f800000,
	0x3e43c979, 0x00000000, 0x00000000, 0x3f800000,
};
static const deUint32 s_unsignedInt248RevUintRef[] =
{
	0x000000ea, 0x00000000, 0x00000000, 0x00000001,
	0x00000038, 0x00000000, 0x00000000, 0x00000001,
	0x0000003e, 0x00000000, 0x00000000, 0x00000001,
	0x00000074, 0x00000000, 0x00000000, 0x00000001,
};

static const deUint8 s_signedInt8In[] =
{
	0x3a, 0x5b, 0x6d, 0x6a,
	0x44, 0x56, 0x6b, 0x21,
	0x6a, 0x0b, 0x24, 0xd9,
	0xd4, 0xb4, 0xda, 0x97,
};
static const deUint32 s_signedInt8FloatRef[] =
{
	0x42680000, 0x42b60000, 0x42da0000, 0x42d40000,
	0x42880000, 0x42ac0000, 0x42d60000, 0x42040000,
	0x42d40000, 0x41300000, 0x42100000, 0xc21c0000,
	0xc2300000, 0xc2980000, 0xc2180000, 0xc2d20000,
};
static const deUint32 s_signedInt8UintRef[] =
{
	0x0000003a, 0x0000005b, 0x0000006d, 0x0000006a,
	0x00000044, 0x00000056, 0x0000006b, 0x00000021,
	0x0000006a, 0x0000000b, 0x00000024, 0xffffffd9,
	0xffffffd4, 0xffffffb4, 0xffffffda, 0xffffff97,
};
static const deUint32 s_signedInt8IntRef[] =
{
	0x0000003a, 0x0000005b, 0x0000006d, 0x0000006a,
	0x00000044, 0x00000056, 0x0000006b, 0x00000021,
	0x0000006a, 0x0000000b, 0x00000024, 0xffffffd9,
	0xffffffd4, 0xffffffb4, 0xffffffda, 0xffffff97,
};

static const deUint8 s_signedInt16In[] =
{
	0xf1, 0xdd, 0xcd, 0xc3,
	0x1c, 0xb6, 0x6f, 0x74,
	0x19, 0x13, 0x25, 0xed,
	0x16, 0xce, 0x0d, 0x0f,
	0x5c, 0xf4, 0x3c, 0xa3,
	0x6d, 0x25, 0x65, 0x6d,
	0xae, 0x5d, 0x88, 0xfa,
	0x86, 0x3e, 0x6a, 0x91,
};
static const deUint32 s_signedInt16FloatRef[] =
{
	0xc6083c00, 0xc670cc00, 0xc693c800, 0x46e8de00,
	0x4598c800, 0xc596d800, 0xc647a800, 0x4570d000,
	0xc53a4000, 0xc6b98800, 0x4615b400, 0x46daca00,
	0x46bb5c00, 0xc4af0000, 0x467a1800, 0xc6dd2c00,
};
static const deUint32 s_signedInt16UintRef[] =
{
	0xffffddf1, 0xffffc3cd, 0xffffb61c, 0x0000746f,
	0x00001319, 0xffffed25, 0xffffce16, 0x00000f0d,
	0xfffff45c, 0xffffa33c, 0x0000256d, 0x00006d65,
	0x00005dae, 0xfffffa88, 0x00003e86, 0xffff916a,
};
static const deUint32 s_signedInt16IntRef[] =
{
	0xffffddf1, 0xffffc3cd, 0xffffb61c, 0x0000746f,
	0x00001319, 0xffffed25, 0xffffce16, 0x00000f0d,
	0xfffff45c, 0xffffa33c, 0x0000256d, 0x00006d65,
	0x00005dae, 0xfffffa88, 0x00003e86, 0xffff916a,
};

static const deUint8 s_signedInt32In[] =
{
	0xc6, 0x7e, 0x50, 0x2a,
	0xec, 0x0f, 0x9b, 0x44,
	0x4d, 0xa9, 0x77, 0x0d,
	0x69, 0x4c, 0xd3, 0x76,
	0xf0, 0xb7, 0xde, 0x6b,
	0x4e, 0xe2, 0xb1, 0x58,
	0xa8, 0x9c, 0xfc, 0x6d,
	0x75, 0x8f, 0x3c, 0x7f,
	0xf3, 0x19, 0x14, 0x97,
	0xf0, 0x87, 0x5c, 0x11,
	0x95, 0x32, 0xab, 0x7a,
	0x03, 0x2b, 0xdf, 0x52,
	0x68, 0x84, 0xd9, 0x91,
	0xec, 0x2a, 0xf1, 0xd0,
	0xf7, 0x73, 0x8f, 0x0a,
	0x62, 0xd2, 0x76, 0xfd,
};
static const deUint32 s_signedInt32FloatRef[] =
{
	0x4e2941fb, 0x4e893620, 0x4d577a95, 0x4eeda699,
	0x4ed7bd70, 0x4eb163c5, 0x4edbf939, 0x4efe791f,
	0xced1d7cc, 0x4d8ae440, 0x4ef55665, 0x4ea5be56,
	0xcedc4cf7, 0xce3c3b54, 0x4d28f73f, 0xcc224b68,
};
static const deUint32 s_signedInt32UintRef[] =
{
	0x2a507ec6, 0x449b0fec, 0x0d77a94d, 0x76d34c69,
	0x6bdeb7f0, 0x58b1e24e, 0x6dfc9ca8, 0x7f3c8f75,
	0x971419f3, 0x115c87f0, 0x7aab3295, 0x52df2b03,
	0x91d98468, 0xd0f12aec, 0x0a8f73f7, 0xfd76d262,
};
static const deUint32 s_signedInt32IntRef[] =
{
	0x2a507ec6, 0x449b0fec, 0x0d77a94d, 0x76d34c69,
	0x6bdeb7f0, 0x58b1e24e, 0x6dfc9ca8, 0x7f3c8f75,
	0x971419f3, 0x115c87f0, 0x7aab3295, 0x52df2b03,
	0x91d98468, 0xd0f12aec, 0x0a8f73f7, 0xfd76d262,
};

static const deUint8 s_unsignedInt8In[] =
{
	0x68, 0xa6, 0x99, 0x6e,
	0x13, 0x90, 0x0f, 0x40,
	0x34, 0x76, 0x05, 0x9a,
	0x6c, 0x9c, 0x1d, 0x6a,
};
static const deUint32 s_unsignedInt8FloatRef[] =
{
	0x42d00000, 0x43260000, 0x43190000, 0x42dc0000,
	0x41980000, 0x43100000, 0x41700000, 0x42800000,
	0x42500000, 0x42ec0000, 0x40a00000, 0x431a0000,
	0x42d80000, 0x431c0000, 0x41e80000, 0x42d40000,
};
static const deUint32 s_unsignedInt8UintRef[] =
{
	0x00000068, 0x000000a6, 0x00000099, 0x0000006e,
	0x00000013, 0x00000090, 0x0000000f, 0x00000040,
	0x00000034, 0x00000076, 0x00000005, 0x0000009a,
	0x0000006c, 0x0000009c, 0x0000001d, 0x0000006a,
};
static const deUint32 s_unsignedInt8IntRef[] =
{
	0x00000068, 0x000000a6, 0x00000099, 0x0000006e,
	0x00000013, 0x00000090, 0x0000000f, 0x00000040,
	0x00000034, 0x00000076, 0x00000005, 0x0000009a,
	0x0000006c, 0x0000009c, 0x0000001d, 0x0000006a,
};

static const deUint8 s_unsignedInt16In[] =
{
	0xa5, 0x62, 0x98, 0x7c,
	0x13, 0x21, 0xc8, 0xf4,
	0x78, 0x0b, 0x9f, 0xc2,
	0x92, 0x1c, 0xa9, 0x25,
	0x86, 0xea, 0x1f, 0x1c,
	0x41, 0xf7, 0xe2, 0x2e,
	0x38, 0x69, 0xf2, 0x6d,
	0x01, 0xec, 0x7f, 0xc5,
};
static const deUint32 s_unsignedInt16FloatRef[] =
{
	0x46c54a00, 0x46f93000, 0x46044c00, 0x4774c800,
	0x45378000, 0x47429f00, 0x45e49000, 0x4616a400,
	0x476a8600, 0x45e0f800, 0x47774100, 0x463b8800,
	0x46d27000, 0x46dbe400, 0x476c0100, 0x47457f00,
};
static const deUint32 s_unsignedInt16UintRef[] =
{
	0x000062a5, 0x00007c98, 0x00002113, 0x0000f4c8,
	0x00000b78, 0x0000c29f, 0x00001c92, 0x000025a9,
	0x0000ea86, 0x00001c1f, 0x0000f741, 0x00002ee2,
	0x00006938, 0x00006df2, 0x0000ec01, 0x0000c57f,
};
static const deUint32 s_unsignedInt16IntRef[] =
{
	0x000062a5, 0x00007c98, 0x00002113, 0x0000f4c8,
	0x00000b78, 0x0000c29f, 0x00001c92, 0x000025a9,
	0x0000ea86, 0x00001c1f, 0x0000f741, 0x00002ee2,
	0x00006938, 0x00006df2, 0x0000ec01, 0x0000c57f,
};

static const deUint8 s_unsignedInt24In[] =
{
	0xa8, 0x11, 0x00, 0xc8,
	0xe5, 0x07, 0xd3, 0x6d,
	0x0a, 0xc7, 0xe4, 0x42,
	0x2d, 0xf7, 0x5d, 0x9c,
	0x2e, 0x18, 0xfd, 0xa4,
	0x9e, 0x90, 0x0c, 0x31,
	0x06, 0x04, 0xc4, 0xc2,
	0xde, 0xfe, 0x7c, 0x1d,
	0x57, 0x37, 0x4a, 0xf2,
	0xe2, 0xf3, 0x74, 0x8e,
	0x8f, 0xd6, 0x73, 0xc4,
	0x91, 0xa0, 0x49, 0xe3,
};
static const deUint32 s_unsignedInt24FloatRef[] =
{
	0x458d4000, 0x48fcb900, 0x4926dd30, 0x4a85c98e,
	0x4abbee5a, 0x49c174e0, 0x4b1ea4fd, 0x4a443240,
	0x4b440406, 0x4b7edec2, 0x4aae3af8, 0x4b724a37,
	0x4ae9e7c4, 0x4b568f8e, 0x4b11c473, 0x4b6349a0,
};
static const deUint32 s_unsignedInt24UintRef[] =
{
	0x000011a8, 0x0007e5c8, 0x000a6dd3, 0x0042e4c7,
	0x005df72d, 0x00182e9c, 0x009ea4fd, 0x00310c90,
	0x00c40406, 0x00fedec2, 0x00571d7c, 0x00f24a37,
	0x0074f3e2, 0x00d68f8e, 0x0091c473, 0x00e349a0,
};
static const deUint32 s_unsignedInt24IntRef[] =
{
	0x000011a8, 0x0007e5c8, 0x000a6dd3, 0x0042e4c7,
	0x005df72d, 0x00182e9c, 0x009ea4fd, 0x00310c90,
	0x00c40406, 0x00fedec2, 0x00571d7c, 0x00f24a37,
	0x0074f3e2, 0x00d68f8e, 0x0091c473, 0x00e349a0,
};

static const deUint8 s_unsignedInt32In[] =
{
	0x90, 0xb0, 0x00, 0xa8,
	0xd8, 0x42, 0x5b, 0xae,
	0x40, 0x70, 0x38, 0x2a,
	0x92, 0x76, 0xd8, 0x70,
	0x04, 0x0d, 0x67, 0x87,
	0x9c, 0xdd, 0xb1, 0xeb,
	0xfc, 0x37, 0xe6, 0x40,
	0x24, 0x9c, 0x6a, 0x0f,
	0x09, 0x0e, 0xb6, 0x2f,
	0x31, 0x95, 0x43, 0x22,
	0x24, 0xde, 0x70, 0x2a,
	0x05, 0xa2, 0x84, 0x38,
	0x16, 0x9f, 0x65, 0x0e,
	0xb2, 0x99, 0x84, 0x6d,
	0xef, 0x86, 0x94, 0xf0,
	0x25, 0x9d, 0xf9, 0x67,
};
static const deUint32 s_unsignedInt32FloatRef[] =
{
	0x4f2800b1, 0x4f2e5b43, 0x4e28e1c1, 0x4ee1b0ed,
	0x4f07670d, 0x4f6bb1de, 0x4e81cc70, 0x4d76a9c2,
	0x4e3ed838, 0x4e090e55, 0x4e29c379, 0x4e621288,
	0x4d6659f1, 0x4edb0933, 0x4f709487, 0x4ecff33a,
};
static const deUint32 s_unsignedInt32UintRef[] =
{
	0xa800b090, 0xae5b42d8, 0x2a387040, 0x70d87692,
	0x87670d04, 0xebb1dd9c, 0x40e637fc, 0x0f6a9c24,
	0x2fb60e09, 0x22439531, 0x2a70de24, 0x3884a205,
	0x0e659f16, 0x6d8499b2, 0xf09486ef, 0x67f99d25,
};
static const deUint32 s_unsignedInt32IntRef[] =
{
	0xa800b090, 0xae5b42d8, 0x2a387040, 0x70d87692,
	0x87670d04, 0xebb1dd9c, 0x40e637fc, 0x0f6a9c24,
	0x2fb60e09, 0x22439531, 0x2a70de24, 0x3884a205,
	0x0e659f16, 0x6d8499b2, 0xf09486ef, 0x67f99d25,
};

static const deUint8 s_Int64In[] =
{
	0x90, 0xb0, 0x00, 0x78, 0x01, 0x00, 0x00, 0x00,
	0x40, 0x70, 0x38, 0x2a, 0x01, 0x01, 0x00, 0x00,
	0x04, 0x0d, 0x67, 0x87, 0x01, 0x01, 0x01, 0x00,
	0xfc, 0x37, 0xe6, 0x40, 0x01, 0x01, 0x01, 0x01,
	0x09, 0x0e, 0xb6, 0x2f, 0x02, 0x01, 0x01, 0x01,
	0x24, 0xde, 0x70, 0x2a, 0x01, 0x02, 0x01, 0x01,
	0x16, 0x9f, 0x65, 0x0e, 0x01, 0x01, 0x02, 0x01,
	0xef, 0x86, 0x94, 0x72, 0x01, 0x01, 0x01, 0x02,
	0xc6, 0x7e, 0x50, 0x2a, 0x01, 0x00, 0x00, 0x00,
	0x4d, 0xa9, 0x77, 0x0d, 0x01, 0x01, 0x00, 0x00,
	0xf0, 0xb7, 0xde, 0x6b, 0x01, 0x01, 0x01, 0x00,
	0xa8, 0x9c, 0xfc, 0x6d, 0x01, 0x01, 0x01, 0x01,
	0xf3, 0x19, 0x14, 0x97, 0x02, 0x01, 0x01, 0x01,
	0x95, 0x32, 0xab, 0x7a, 0x01, 0x02, 0x01, 0x01,
	0x68, 0x84, 0xd9, 0x71, 0x01, 0x01, 0x02, 0x01,
	0xf7, 0x73, 0x8f, 0x0a, 0x01, 0x01, 0x01, 0x02,
};

static const deUint32 s_Int64FloatRef[] =
{
	0x4fbc0058, 0x5380951c, 0x578080c4, 0x5b808081,
	0x5b808081, 0x5b808101, 0x5b810081, 0x5c004040,
	0x4f95283f, 0x538086bc, 0x578080b6, 0x5b808081,
	0x5b808081, 0x5b808101, 0x5b810081, 0x5c004040,
};

static const deUint32 s_Int64IntRef[] =
{
	0x7800b090, 0x2a387040, 0x87670d04, 0x40e637fc,
	0x2fb60e09, 0x2a70de24, 0x0e659f16, 0x729486ef,
	0x2a507ec6, 0x0d77a94d, 0x6bdeb7f0, 0x6dfc9ca8,
	0x971419f3, 0x7aab3295, 0x71d98468, 0x0a8f73f7,
};

static const deUint8 s_halfFloatIn[] =
{
	0x2b, 0x74, 0x6a, 0x5d,
	0x1c, 0xb2, 0x9a, 0x4d,
	0xad, 0x55, 0x22, 0x01,
	0xce, 0x2d, 0x97, 0x0d,
	0x71, 0x31, 0x42, 0x2b,
	0xeb, 0x26, 0xc7, 0x16,
	0x94, 0xd2, 0x22, 0x79,
	0x89, 0xbd, 0xff, 0xbc,
};
static const deUint32 s_halfFloatFloatRef[] =
{
	0x46856000, 0x43ad4000, 0xbe438000, 0x41b34000,
	0x42b5a000, 0x37910000, 0x3db9c000, 0x39b2e000,
	0x3e2e2000, 0x3d684000, 0x3cdd6000, 0x3ad8e000,
	0xc2528000, 0x47244000, 0xbfb12000, 0xbf9fe000,
};
static const deUint32 s_halfFloatUintRef[] =
{
	0x000042b0, 0x0000015a, 0x00000000, 0x00000016,
	0x0000005a, 0x00000000, 0x00000000, 0x00000000,
	0x00000000, 0x00000000, 0x00000000, 0x00000000,
	0xffffffcc, 0x0000a440, 0xffffffff, 0xffffffff,
};
static const deUint32 s_halfFloatIntRef[] =
{
	0x000042b0, 0x0000015a, 0x00000000, 0x00000016,
	0x0000005a, 0x00000000, 0x00000000, 0x00000000,
	0x00000000, 0x00000000, 0x00000000, 0x00000000,
	0xffffffcc, 0x0000a440, 0xffffffff, 0xffffffff,
};

static const deUint8 s_floatIn[] =
{
	0x92, 0xac, 0x68, 0x36,
	0x9f, 0x42, 0x0b, 0x6e,
	0x67, 0xcf, 0x0f, 0x20,
	0x22, 0x6c, 0xe4, 0x0f,
	0xb3, 0x72, 0xc8, 0x8a,
	0x4b, 0x99, 0xc3, 0xb0,
	0xbd, 0x78, 0x5c, 0x16,
	0x1c, 0xce, 0xb7, 0x4e,
	0x15, 0xdf, 0x37, 0xfd,
	0xeb, 0x32, 0xe9, 0x47,
	0x68, 0x1a, 0xaa, 0xd0,
	0xb9, 0xba, 0x77, 0xe7,
	0x81, 0x0a, 0x42, 0x5a,
	0xb0, 0x5a, 0xee, 0x06,
	0x77, 0xb4, 0x7b, 0x57,
	0xf5, 0x35, 0xac, 0x56,
};
static const deUint32 s_floatFloatRef[] =
{
	0x3668ac92, 0x6e0b429f, 0x200fcf67, 0x0fe46c22,
	0x8ac872b3, 0xb0c3994b, 0x165c78bd, 0x4eb7ce1c,
	0xfd37df15, 0x47e932eb, 0xd0aa1a68, 0xe777bab9,
	0x5a420a81, 0x06ee5ab0, 0x577bb477, 0x56ac35f5,
};
static const deUint32 s_floatUintRef[] =
{
	0x00000000, 0x80000000, 0x00000000, 0x00000000,
	0x00000000, 0x00000000, 0x00000000, 0x5be70e00,
	0x80000000, 0x0001d265, 0x80000000, 0x80000000,
	0x80000000, 0x00000000, 0x80000000, 0x80000000,
};
static const deUint32 s_floatIntRef[] =
{
	0x00000000, 0x80000000, 0x00000000, 0x00000000,
	0x00000000, 0x00000000, 0x00000000, 0x5be70e00,
	0x80000000, 0x0001d265, 0x80000000, 0x80000000,
	0x80000000, 0x00000000, 0x80000000, 0x80000000,
};

static const deUint8 s_float64In[] =
{
	0xbd, 0xb6, 0xc3, 0xd2,
	0xf6, 0x62, 0x29, 0xd9,
	0x2f, 0xc2, 0x46, 0x18,
	0x6b, 0x0d, 0x0a, 0x53,
	0x6d, 0x0c, 0xf3, 0x80,
	0xbd, 0xa9, 0x12, 0x89,
	0x6b, 0x9f, 0x3d, 0xdd,
	0xb3, 0x91, 0xee, 0xf5,
	0x92, 0xac, 0x68, 0x36,
	0x9f, 0x42, 0x0b, 0x6e,
	0x67, 0xcf, 0x0f, 0x20,
	0x22, 0x6c, 0xe4, 0x0f,
	0xb3, 0x72, 0xc8, 0x8a,
	0x4b, 0x99, 0xc3, 0xb0,
	0xbd, 0x78, 0x5c, 0x16,
	0x1c, 0xce, 0xb7, 0x4e,
	0x15, 0xdf, 0x37, 0xfd,
	0xeb, 0x32, 0xe9, 0x47,
	0x68, 0x1a, 0xaa, 0xd0,
	0xb9, 0xba, 0x77, 0xe7,
	0x81, 0x0a, 0x42, 0x5a,
	0xb0, 0x5a, 0xee, 0x06,
	0x77, 0xb4, 0x7b, 0x57,
	0xf5, 0x35, 0xac, 0x56,
	0x2b, 0x74, 0x6a, 0x5d,
	0x1c, 0xb2, 0x9a, 0x4d,
	0xad, 0x55, 0x22, 0x01,
	0xce, 0x2d, 0x97, 0x0d,
	0x71, 0x31, 0x42, 0x2b,
	0xeb, 0x26, 0xc7, 0x16,
	0x94, 0xd2, 0x22, 0x79,
	0x89, 0xbd, 0xff, 0xbc,
};
static const deUint32 s_float64FloatRef[] =
{
	0xff800000, 0x7f800000, 0x80000000, 0xff800000,
	0x7f800000, 0x00000000, 0x80000000, 0x7f800000,
	0x7f499760, 0xff800000, 0x00000000, 0x7f800000,
	0x7f800000, 0x00000000, 0x00000000, 0xa7fdec4c,
};
static const deUint32 s_float64IntRef[] =
{
	0x80000000, 0x80000000, 0x00000000, 0x80000000,
	0x80000000, 0x00000000, 0x00000000, 0x80000000,
	0x80000000, 0x80000000, 0x00000000, 0x80000000,
	0x80000000, 0x00000000, 0x00000000, 0x00000000,
};

static const deUint8 s_floatUnsignedInt248RevIn[] =
{
	0xbd, 0xb6, 0xc3, 0xd2,
	0xf6, 0x62, 0x29, 0xd9,
	0x2f, 0xc2, 0x46, 0x18,
	0x6b, 0x0d, 0x0a, 0x53,
	0x6d, 0x0c, 0xf3, 0x80,
	0xbd, 0xa9, 0x12, 0x89,
	0x6b, 0x9f, 0x3d, 0xdd,
	0xb3, 0x91, 0xee, 0xf5,
};
static const deUint32 s_floatUnsignedInt248RevFloatRef[] =
{
	0xd2c3b6bd, 0x00000000, 0x00000000, 0x3f800000,
	0x1846c22f, 0x00000000, 0x00000000, 0x3f800000,
	0x80f30c6d, 0x00000000, 0x00000000, 0x3f800000,
	0xdd3d9f6b, 0x00000000, 0x00000000, 0x3f800000,
};
static const deUint32 s_floatUnsignedInt248RevUintRef[] =
{
	0x000000f6, 0x00000000, 0x00000000, 0x00000001,
	0x0000006b, 0x00000000, 0x00000000, 0x00000001,
	0x000000bd, 0x00000000, 0x00000000, 0x00000001,
	0x000000b3, 0x00000000, 0x00000000, 0x00000001,
};

static const deUint8 s_unormShort10In[] =
{
	0x80, 0x84, 0x40, 0x3b,
	0x40, 0xfd, 0x80, 0x1a,
	0x80, 0x0c, 0x80, 0x15,
	0x40, 0x11, 0x80, 0xc3,
	0x80, 0xc8, 0x80, 0xd5,
	0xc0, 0xf9, 0x00, 0x0a,
	0xc0, 0x39, 0x40, 0xd5,
	0xc0, 0x4d, 0xc0, 0x26
};
static const deUint32 s_unormShort10FloatRef[] =
{
	0x3f04a128, 0x3e6d3b4f,
	0x3f7d7f60, 0x3dd4350d,
	0x3d48320d, 0x3dac2b0b,
	0x3d8a2289, 0x3f43b0ec,
	0x3f48b22d, 0x3f55b56d,
	0x3f79fe80, 0x3d20280a,
	0x3e6739ce, 0x3f55755d,
	0x3e9ba6ea, 0x3e1b26ca
};
static const deUint32 s_unormShort10UintRef[] =
{
	0x212, 0x0ed, 0x3f5, 0x06a,
	0x032, 0x056, 0x045, 0x30e,
	0x322, 0x356, 0x3e7, 0x028,
	0x0e7, 0x355, 0x137, 0x09b,
};
static const deUint32 s_unormShort10IntRef[] =
{
	0x212, 0x0ed, 0x3f5, 0x06a,
	0x032, 0x056, 0x045, 0x30e,
	0x322, 0x356, 0x3e7, 0x028,
	0x0e7, 0x355, 0x137, 0x09b,
};

static const deUint8 s_unormShort12In[] =
{
	0x30, 0x46, 0xf0, 0x38,
	0x90, 0x85, 0xf0, 0x88,
	0x90, 0x92, 0x30, 0x5d,
	0x30, 0x3a, 0x00, 0xc9,
	0x00, 0x64, 0xb0, 0x9b,
	0x20, 0x71, 0xd0, 0x5b,
	0xa0, 0xc5, 0x70, 0x27,
	0x30, 0x0b, 0xa0, 0x53
};
static const deUint32 s_unormShort12FloatRef[] =
{
	0x3e8c68c7, 0x3e63ce3d,
	0x3f05985a, 0x3f08f890,
	0x3f12992a, 0x3eba6ba7,
	0x3e68ce8d, 0x3f490c91,
	0x3ec80c81, 0x3f1bb9bc,
	0x3ee24e25, 0x3eb7ab7b,
	0x3f45ac5b, 0x3e1dc9dd,
	0x3d330b31, 0x3ea74a75
};
static const deUint32 s_unormShort12UintRef[] =
{
	0x463, 0x38f,
	0x859, 0x88f,
	0x929, 0x5d3,
	0x3a3, 0xc90,
	0x640, 0x9bb,
	0x712, 0x5bd,
	0xc5a, 0x277,
	0x0b3, 0x53a
};
static const deUint32 s_unormShort12IntRef[] =
{
	0x463, 0x38f,
	0x859, 0x88f,
	0x929, 0x5d3,
	0x3a3, 0xc90,
	0x640, 0x9bb,
	0x712, 0x5bd,
	0xc5a, 0x277,
	0x0b3, 0x53a
};

// \todo [2015-10-12 pyry] Collapse duplicate ref arrays

static const struct
{
	const deUint8*		input;
	const int			inputSize;
	const deUint32*		floatRef;
	const deUint32*		intRef;
	const deUint32*		uintRef;
} s_formatData[] =
{
	{ s_snormInt8In,				DE_LENGTH_OF_ARRAY(s_snormInt8In),					s_snormInt8FloatRef,				s_snormInt8IntRef,				s_snormInt8UintRef				},
	{ s_snormInt16In,				DE_LENGTH_OF_ARRAY(s_snormInt16In),					s_snormInt16FloatRef,				s_snormInt16IntRef,				s_snormInt16UintRef				},
	{ s_snormInt32In,				DE_LENGTH_OF_ARRAY(s_snormInt32In),					s_snormInt32FloatRef,				s_snormInt32IntRef,				s_snormInt32UintRef				},
	{ s_unormInt8In,				DE_LENGTH_OF_ARRAY(s_unormInt8In),					s_unormInt8FloatRef,				s_unormInt8IntRef,				s_unormInt8UintRef				},
	{ s_unormInt16In,				DE_LENGTH_OF_ARRAY(s_unormInt16In),					s_unormInt16FloatRef,				s_unormInt16IntRef,				s_unormInt16UintRef				},
	{ s_unormInt24In,				DE_LENGTH_OF_ARRAY(s_unormInt24In),					s_unormInt24FloatRef,				s_unormInt24IntRef,				s_unormInt24UintRef				},
	{ s_unormInt32In,				DE_LENGTH_OF_ARRAY(s_unormInt32In),					s_unormInt32FloatRef,				s_unormInt32IntRef,				s_unormInt32UintRef				},
	{ s_unormByte44In,				DE_LENGTH_OF_ARRAY(s_unormByte44In),				s_unormByte44FloatRef,				s_unormByte44IntRef,			s_unormByte44IntRef				},
	{ s_unormShort565In,			DE_LENGTH_OF_ARRAY(s_unormShort565In),				s_unormShort565FloatRef,			s_unormShort565IntRef,			s_unormShort565IntRef,			},
	{ s_unormShort555In,			DE_LENGTH_OF_ARRAY(s_unormShort555In),				s_unormShort555FloatRef,			s_unormShort555IntRef,			s_unormShort555IntRef,			},
	{ s_unormShort4444In,			DE_LENGTH_OF_ARRAY(s_unormShort4444In),				s_unormShort4444FloatRef,			s_unormShort4444IntRef,			s_unormShort4444IntRef,			},
	{ s_unormShort5551In,			DE_LENGTH_OF_ARRAY(s_unormShort5551In),				s_unormShort5551FloatRef,			s_unormShort5551IntRef,			s_unormShort5551IntRef,			},
	{ s_unormShort1555In,			DE_LENGTH_OF_ARRAY(s_unormShort1555In),				s_unormShort1555FloatRef,			s_unormShort1555IntRef,			s_unormShort1555IntRef,			},
	{ s_unormInt101010In,			DE_LENGTH_OF_ARRAY(s_unormInt101010In),				s_unormInt101010FloatRef,			s_unormInt101010IntRef,			s_unormInt101010IntRef			},

	// \note Same input data & int reference used for {U,S}NORM_INT_1010102_REV
	{ s_unormInt1010102RevIn,		DE_LENGTH_OF_ARRAY(s_unormInt1010102RevIn),			s_snormInt1010102RevFloatRef,		s_snormInt1010102RevIntRef,		s_snormInt1010102RevIntRef		},
	{ s_unormInt1010102RevIn,		DE_LENGTH_OF_ARRAY(s_unormInt1010102RevIn),			s_unormInt1010102RevFloatRef,		s_unormInt1010102RevIntRef,		s_unormInt1010102RevIntRef		},

	// \note UNSIGNED_BYTE_* and UNSIGNED_SHORT_* re-use input data and integer reference values from UNORM_* cases
	{ s_unormByte44In,				DE_LENGTH_OF_ARRAY(s_unormByte44In),				s_unsignedByte44FloatRef,			s_unormByte44IntRef,			s_unormByte44IntRef				},
	{ s_unormShort565In,			DE_LENGTH_OF_ARRAY(s_unormShort565In),				s_unsignedShort565FloatRef,			s_unormShort565IntRef,			s_unormShort565IntRef,			},
	{ s_unormShort4444In,			DE_LENGTH_OF_ARRAY(s_unormShort4444In),				s_unsignedShort4444FloatRef,		s_unormShort4444IntRef,			s_unormShort4444IntRef,			},
	{ s_unormShort5551In,			DE_LENGTH_OF_ARRAY(s_unormShort5551In),				s_unsignedShort5551FloatRef,		s_unormShort5551IntRef,			s_unormShort5551IntRef,			},

	// \note (UN)SIGNED_INT_1010102_REV formats use same input data
	{ s_unsignedInt1010102RevIn,	DE_LENGTH_OF_ARRAY(s_unsignedInt1010102RevIn),		s_signedInt1010102RevFloatRef,		s_signedInt1010102RevIntRef,	s_signedInt1010102RevIntRef		},
	{ s_unsignedInt1010102RevIn,	DE_LENGTH_OF_ARRAY(s_unsignedInt1010102RevIn),		s_unsignedInt1010102RevFloatRef,	s_unsignedInt1010102RevIntRef,	s_unsignedInt1010102RevIntRef	},

	{ s_unsignedInt11f11f10fRevIn,	DE_LENGTH_OF_ARRAY(s_unsignedInt11f11f10fRevIn),	s_unsignedInt11f11f10fRevFloatRef,	DE_NULL,						DE_NULL							},
	{ s_unsignedInt999E5RevIn,		DE_LENGTH_OF_ARRAY(s_unsignedInt999E5RevIn),		s_unsignedInt999E5RevFloatRef,		DE_NULL,						DE_NULL							},
	{ s_unsignedInt1688In,			DE_LENGTH_OF_ARRAY(s_unsignedInt1688In),			s_unsignedInt1688FloatRef,			DE_NULL,						s_unsignedInt1688UintRef		},
	{ s_unsignedInt248In,			DE_LENGTH_OF_ARRAY(s_unsignedInt248In),				s_unsignedInt248FloatRef,			DE_NULL,						s_unsignedInt248UintRef			},
	{ s_unsignedInt248RevIn,		DE_LENGTH_OF_ARRAY(s_unsignedInt248RevIn),			s_unsignedInt248RevFloatRef,		DE_NULL,						s_unsignedInt248RevUintRef		},
	{ s_signedInt8In,				DE_LENGTH_OF_ARRAY(s_signedInt8In),					s_signedInt8FloatRef,				s_signedInt8IntRef,				s_signedInt8UintRef				},
	{ s_signedInt16In,				DE_LENGTH_OF_ARRAY(s_signedInt16In),				s_signedInt16FloatRef,				s_signedInt16IntRef,			s_signedInt16UintRef			},
	{ s_signedInt32In,				DE_LENGTH_OF_ARRAY(s_signedInt32In),				s_signedInt32FloatRef,				s_signedInt32IntRef,			s_signedInt32UintRef			},
	{ s_Int64In,					DE_LENGTH_OF_ARRAY(s_Int64In),						s_Int64FloatRef,					s_Int64IntRef,					s_Int64IntRef					},
	{ s_unsignedInt8In,				DE_LENGTH_OF_ARRAY(s_unsignedInt8In),				s_unsignedInt8FloatRef,				s_unsignedInt8IntRef,			s_unsignedInt8UintRef			},
	{ s_unsignedInt16In,			DE_LENGTH_OF_ARRAY(s_unsignedInt16In),				s_unsignedInt16FloatRef,			s_unsignedInt16IntRef,			s_unsignedInt16UintRef			},
	{ s_unsignedInt24In,			DE_LENGTH_OF_ARRAY(s_unsignedInt24In),				s_unsignedInt24FloatRef,			s_unsignedInt24IntRef,			s_unsignedInt24UintRef			},
	{ s_unsignedInt32In,			DE_LENGTH_OF_ARRAY(s_unsignedInt32In),				s_unsignedInt32FloatRef,			s_unsignedInt32IntRef,			s_unsignedInt32UintRef			},
	{ s_Int64In,					DE_LENGTH_OF_ARRAY(s_Int64In),						s_Int64FloatRef,					s_Int64IntRef,					s_Int64IntRef					},

	{ s_halfFloatIn,				DE_LENGTH_OF_ARRAY(s_halfFloatIn),					s_halfFloatFloatRef,				s_halfFloatIntRef,				s_halfFloatUintRef				},
	{ s_floatIn,					DE_LENGTH_OF_ARRAY(s_floatIn),						s_floatFloatRef,					s_floatIntRef,					s_floatUintRef					},
	{ s_float64In,					DE_LENGTH_OF_ARRAY(s_float64In),					s_float64FloatRef,					s_float64IntRef,				s_float64IntRef					},
	{ s_floatUnsignedInt248RevIn,	DE_LENGTH_OF_ARRAY(s_floatUnsignedInt248RevIn),		s_floatUnsignedInt248RevFloatRef,	DE_NULL,						s_floatUnsignedInt248RevUintRef	},

	{ s_unormShort10In,				DE_LENGTH_OF_ARRAY(s_unormShort10In),				s_unormShort10FloatRef,				s_unormShort10IntRef,			s_unormShort10UintRef			},
	{ s_unormShort12In,				DE_LENGTH_OF_ARRAY(s_unormShort12In),				s_unormShort12FloatRef,				s_unormShort12IntRef,			s_unormShort12UintRef			},

	{ s_unsignedInt8In,				DE_LENGTH_OF_ARRAY(s_unsignedInt8In),				s_unsignedInt8FloatRef,				s_unsignedInt8IntRef,			s_unsignedInt8UintRef			},
	{ s_unsignedInt16In,			DE_LENGTH_OF_ARRAY(s_unsignedInt16In),				s_unsignedInt16FloatRef,			s_unsignedInt16IntRef,			s_unsignedInt16UintRef			},
	{ s_signedInt8In,				DE_LENGTH_OF_ARRAY(s_signedInt8In),					s_signedInt8FloatRef,				s_signedInt8IntRef,				s_signedInt8UintRef				},
	{ s_signedInt16In,				DE_LENGTH_OF_ARRAY(s_signedInt16In),				s_signedInt16FloatRef,				s_signedInt16IntRef,			s_signedInt16UintRef			},
	{ s_unsignedInt1010102RevIn,	DE_LENGTH_OF_ARRAY(s_unsignedInt1010102RevIn),		s_unsignedInt1010102RevFloatRef,	s_unsignedInt1010102RevIntRef,	s_unsignedInt1010102RevIntRef	},
	{ s_unsignedInt1010102RevIn,	DE_LENGTH_OF_ARRAY(s_unsignedInt1010102RevIn),		s_signedInt1010102RevFloatRef,		s_signedInt1010102RevIntRef,	s_signedInt1010102RevIntRef		}
};
DE_STATIC_ASSERT(DE_LENGTH_OF_ARRAY(s_formatData) == TextureFormat::CHANNELTYPE_LAST);

TextureFormat getBaseFormat (TextureFormat format)
{
	const TextureFormat::ChannelOrder baseOrders[] = { TextureFormat::RGBA, TextureFormat::RGB, TextureFormat::DS };

	for (int baseOrderNdx = 0; baseOrderNdx < DE_LENGTH_OF_ARRAY(baseOrders); baseOrderNdx++)
	{
		const TextureFormat	curBaseFmt	(baseOrders[baseOrderNdx], format.type);
		if (isValid(curBaseFmt))
			return curBaseFmt;
	}

	return format;
}

ConstPixelBufferAccess getInputAccess (TextureFormat format)
{
	const TextureFormat	inputFormat		= getBaseFormat(format);
	const int			inputPixelSize	= getPixelSize(inputFormat);
	const int			numPixels		= s_formatData[format.type].inputSize / inputPixelSize;

	DE_ASSERT(numPixels == 4);
	DE_ASSERT(numPixels*inputPixelSize == s_formatData[format.type].inputSize);

	return ConstPixelBufferAccess(format, IVec3(numPixels, 1, 1), IVec3(inputPixelSize, 0, 0), s_formatData[format.type].input);
}

template<typename T>
const deUint32* getRawReference (TextureFormat format);

template<>
const deUint32* getRawReference<float> (TextureFormat format)
{
	return s_formatData[format.type].floatRef;
}

template<>
const deUint32* getRawReference<deInt32> (TextureFormat format)
{
	return s_formatData[format.type].intRef;
}

template<>
const deUint32* getRawReference<deUint32> (TextureFormat format)
{
	return s_formatData[format.type].uintRef;
}

template<typename T>
void getReferenceValues (TextureFormat storageFormat, TextureFormat viewFormat, vector<Vector<T, 4> >& dst)
{
	const int					numPixels	= getInputAccess(storageFormat).getWidth();
	const deUint32* const		rawValues	= getRawReference<T>(storageFormat);
	const tcu::TextureSwizzle&	swizzle		= tcu::getChannelReadSwizzle(viewFormat.order);

	dst.resize(numPixels);

	for (int pixelNdx = 0; pixelNdx < numPixels; pixelNdx++)
	{
		const deUint32*	srcPixPtr	= rawValues + pixelNdx*4;
		T*				dstPixPtr	= (T*)&dst[pixelNdx];

		for (int c = 0; c < 4; c++)
		{
			switch (swizzle.components[c])
			{
				case tcu::TextureSwizzle::CHANNEL_0:
				case tcu::TextureSwizzle::CHANNEL_1:
				case tcu::TextureSwizzle::CHANNEL_2:
				case tcu::TextureSwizzle::CHANNEL_3:
					deMemcpy(dstPixPtr + c, srcPixPtr + (int)swizzle.components[c], sizeof(deUint32));
					break;

				case tcu::TextureSwizzle::CHANNEL_ZERO:
					dstPixPtr[c] = T(0);
					break;

				case tcu::TextureSwizzle::CHANNEL_ONE:
					dstPixPtr[c] = T(1);
					break;

				default:
					DE_FATAL("Unknown swizzle");
			}
		}
	}
}

template<typename T>
bool componentEqual (T a, T b)
{
	return a == b;
}

template<>
bool componentEqual<float> (float a, float b)
{
	return (a == b) || (deFloatIsNaN(a) && deFloatIsNaN(b));
}

template<typename T, int Size>
bool allComponentsEqual (const Vector<T, Size>& a, const Vector<T, Size>& b)
{
	for (int ndx = 0; ndx < Size; ndx++)
	{
		if (!componentEqual(a[ndx], b[ndx]))
			return false;
	}

	return true;
}

template<typename T>
void copyPixels (const ConstPixelBufferAccess& src, const PixelBufferAccess& dst)
{
	for (int ndx = 0; ndx < src.getWidth(); ndx++)
		dst.setPixel(src.getPixelT<T>(ndx, 0, 0), ndx, 0, 0);
}

void copyGetSetDepth (const ConstPixelBufferAccess& src, const PixelBufferAccess& dst)
{
	for (int ndx = 0; ndx < src.getWidth(); ndx++)
		dst.setPixDepth(src.getPixDepth(ndx, 0, 0), ndx, 0, 0);
}

void copyGetSetStencil (const ConstPixelBufferAccess& src, const PixelBufferAccess& dst)
{
	for (int ndx = 0; ndx < src.getWidth(); ndx++)
		dst.setPixStencil(src.getPixStencil(ndx, 0, 0), ndx, 0, 0);
}

void copyPixels (const ConstPixelBufferAccess& src, const PixelBufferAccess& dst)
{
	switch (getTextureChannelClass(dst.getFormat().type))
	{
		case tcu::TEXTURECHANNELCLASS_FLOATING_POINT:
		case tcu::TEXTURECHANNELCLASS_SIGNED_FIXED_POINT:
		case tcu::TEXTURECHANNELCLASS_UNSIGNED_FIXED_POINT:
			copyPixels<float>(src, dst);
			break;

		case tcu::TEXTURECHANNELCLASS_SIGNED_INTEGER:
			copyPixels<deInt32>(src, dst);
			break;

		case tcu::TEXTURECHANNELCLASS_UNSIGNED_INTEGER:
			copyPixels<deUint32>(src, dst);
			break;

		default:
			DE_FATAL("Unknown channel class");
	}
}

const char* getTextureAccessTypeDescription (TextureAccessType type)
{
	static const char* s_desc[] =
	{
		"floating-point",
		"signed integer",
		"unsigned integer"
	};
	return de::getSizedArrayElement<tcu::TEXTUREACCESSTYPE_LAST>(s_desc, type);
}

template<typename T>
TextureAccessType getTextureAccessType (void);

template<>
TextureAccessType getTextureAccessType<float> (void)
{
	return tcu::TEXTUREACCESSTYPE_FLOAT;
}

template<>
TextureAccessType getTextureAccessType<deInt32> (void)
{
	return tcu::TEXTUREACCESSTYPE_SIGNED_INT;
}

template<>
TextureAccessType getTextureAccessType<deUint32> (void)
{
	return tcu::TEXTUREACCESSTYPE_UNSIGNED_INT;
}

static std::string getCaseName (TextureFormat format)
{
	std::ostringstream str;

	str << format.type << "_" << format.order;

	return de::toLower(str.str());
}

class TextureFormatCase : public tcu::TestCase
{
public:
	TextureFormatCase (tcu::TestContext& testCtx, TextureFormat format)
		: tcu::TestCase	(testCtx, getCaseName(format).c_str(), "")
		, m_format		(format)
	{
		DE_ASSERT(isValid(format));
	}

protected:
	template<typename T>
	void verifyRead (const ConstPixelBufferAccess& src)
	{
		const int				numPixels	= src.getWidth();
		vector<Vector<T, 4> >	res			(numPixels);
		vector<Vector<T, 4> >	ref;

		m_testCtx.getLog()
			<< TestLog::Message << "Verifying " << getTextureAccessTypeDescription(getTextureAccessType<T>()) << " access" << TestLog::EndMessage;

		for (int ndx = 0; ndx < numPixels; ndx++)
			res[ndx] = src.getPixelT<T>(ndx, 0, 0);

		// \note m_format != src.getFormat() for DS formats, and we specifically need to
		//		 use the combined format as storage format to get right reference values.
		getReferenceValues<T>(m_format, src.getFormat(), ref);

		for (int pixelNdx = 0; pixelNdx < numPixels; pixelNdx++)
		{
			if (!allComponentsEqual(res[pixelNdx], ref[pixelNdx]))
			{
				m_testCtx.getLog()
					<< TestLog::Message << "ERROR: at pixel " << pixelNdx << ": expected " << ref[pixelNdx] << ", got " << res[pixelNdx] << TestLog::EndMessage;

				m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Comparison failed");
			}
		}
	}

	void verifyRead (const ConstPixelBufferAccess& src)
	{
		// \todo [2016-08-04 pyry] Overflow in float->int conversion is not defined and
		//						   produces different results depending on arch.
		const bool	isFloat32Or64	= src.getFormat().type == tcu::TextureFormat::FLOAT ||
									  src.getFormat().type == tcu::TextureFormat::FLOAT64;

		if (isAccessValid(src.getFormat(), tcu::TEXTUREACCESSTYPE_FLOAT))
			verifyRead<float>(src);

		if (isAccessValid(src.getFormat(), tcu::TEXTUREACCESSTYPE_UNSIGNED_INT) && !isFloat32Or64)
			verifyRead<deUint32>(src);

		if (isAccessValid(src.getFormat(), tcu::TEXTUREACCESSTYPE_SIGNED_INT) && !isFloat32Or64)
			verifyRead<deInt32>(src);
	}

	void verifyGetPixDepth (const ConstPixelBufferAccess& refAccess, const ConstPixelBufferAccess& combinedAccess)
	{
		m_testCtx.getLog()
			<< TestLog::Message << "Verifying getPixDepth()" << TestLog::EndMessage;

		for (int pixelNdx = 0; pixelNdx < refAccess.getWidth(); pixelNdx++)
		{
			const float		ref		= refAccess.getPixel(pixelNdx, 0, 0).x();
			const float		res		= combinedAccess.getPixDepth(pixelNdx, 0, 0);

			if (!componentEqual(res, ref))
			{
				m_testCtx.getLog()
					<< TestLog::Message << "ERROR: at pixel " << pixelNdx << ": expected " << ref << ", got " << res << TestLog::EndMessage;

				m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Comparison failed");
			}
		}
	}

	void verifyGetPixStencil (const ConstPixelBufferAccess& refAccess, const ConstPixelBufferAccess& combinedAccess)
	{
		m_testCtx.getLog()
			<< TestLog::Message << "Verifying getPixStencil()" << TestLog::EndMessage;

		for (int pixelNdx = 0; pixelNdx < refAccess.getWidth(); pixelNdx++)
		{
			const int	ref		= refAccess.getPixelInt(pixelNdx, 0, 0).x();
			const int	res		= combinedAccess.getPixStencil(pixelNdx, 0, 0);

			if (!componentEqual(res, ref))
			{
				m_testCtx.getLog()
					<< TestLog::Message << "ERROR: at pixel " << pixelNdx << ": expected " << ref << ", got " << res << TestLog::EndMessage;

				m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Comparison failed");
			}
		}
	}

	void verifyInfoQueries (void)
	{
		const tcu::TextureChannelClass	chnClass	= tcu::getTextureChannelClass(m_format.type);
		const tcu::TextureFormatInfo	fmtInfo		= tcu::getTextureFormatInfo(m_format);

		if (tcu::isCombinedDepthStencilType(m_format.type))
			TCU_CHECK(chnClass == tcu::TEXTURECHANNELCLASS_LAST);
		else
			TCU_CHECK(de::inBounds(chnClass, (tcu::TextureChannelClass)0, tcu::TEXTURECHANNELCLASS_LAST));

		DE_UNREF(fmtInfo);
	}

	const TextureFormat		m_format;
};

class ColorFormatCase : public TextureFormatCase
{
public:
	ColorFormatCase (tcu::TestContext& testCtx, TextureFormat format)
		: TextureFormatCase(testCtx, format)
	{
		DE_ASSERT(format.order != TextureFormat::D &&
				  format.order != TextureFormat::S &&
				  format.order != TextureFormat::DS);
	}

	IterateResult iterate (void)
	{
		const ConstPixelBufferAccess	inputAccess		= getInputAccess(m_format);
		vector<deUint8>					tmpMem			(getPixelSize(inputAccess.getFormat())*inputAccess.getWidth());
		const PixelBufferAccess			tmpAccess		(inputAccess.getFormat(), inputAccess.getWidth(), 1, 1, &tmpMem[0]);

		m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");

		verifyInfoQueries();

		verifyRead(inputAccess);

		// \todo [2015-10-12 pyry] Handle lossy conversion with *NORM_INT32
		if (m_format.type != TextureFormat::UNORM_INT32 && m_format.type != TextureFormat::SNORM_INT32)
		{
			m_testCtx.getLog() << TestLog::Message << "Copying with getPixel() -> setPixel()" << TestLog::EndMessage;
			copyPixels(inputAccess, tmpAccess);
			verifyRead(tmpAccess);
		}

		return STOP;
	}
};

class DepthFormatCase : public TextureFormatCase
{
public:
	DepthFormatCase (tcu::TestContext& testCtx, TextureFormat format)
		: TextureFormatCase(testCtx, format)
	{
		DE_ASSERT(format.order == TextureFormat::D);
	}

	IterateResult iterate (void)
	{
		const ConstPixelBufferAccess	inputAccess			= getInputAccess(m_format);
		vector<deUint8>					tmpMem				(getPixelSize(inputAccess.getFormat())*inputAccess.getWidth());
		const PixelBufferAccess			tmpAccess			(inputAccess.getFormat(), inputAccess.getWidth(), 1, 1, &tmpMem[0]);
		const ConstPixelBufferAccess	inputDepthAccess	= getEffectiveDepthStencilAccess(inputAccess, tcu::Sampler::MODE_DEPTH);
		const PixelBufferAccess			tmpDepthAccess		= getEffectiveDepthStencilAccess(tmpAccess, tcu::Sampler::MODE_DEPTH);

		m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");

		verifyInfoQueries();

		verifyRead(inputDepthAccess);

		m_testCtx.getLog() << TestLog::Message << "Copying with getPixel() -> setPixel()" << TestLog::EndMessage;
		copyPixels(inputDepthAccess, tmpDepthAccess);
		verifyRead(tmpDepthAccess);

		verifyGetPixDepth(inputDepthAccess, inputAccess);

		m_testCtx.getLog() << TestLog::Message << "Copying both depth getPixDepth() -> setPixDepth()" << TestLog::EndMessage;
		tcu::clear(tmpDepthAccess, tcu::Vec4(0.0f));
		copyGetSetDepth(inputAccess, tmpAccess);
		verifyGetPixDepth(tmpDepthAccess, tmpAccess);

		return STOP;
	}
};

class StencilFormatCase : public TextureFormatCase
{
public:
	StencilFormatCase (tcu::TestContext& testCtx, TextureFormat format)
		: TextureFormatCase(testCtx, format)
	{
		DE_ASSERT(format.order == TextureFormat::S);
	}

	IterateResult iterate (void)
	{
		const ConstPixelBufferAccess	inputAccess			= getInputAccess(m_format);
		vector<deUint8>					tmpMem				(getPixelSize(inputAccess.getFormat())*inputAccess.getWidth());
		const PixelBufferAccess			tmpAccess			(inputAccess.getFormat(), inputAccess.getWidth(), 1, 1, &tmpMem[0]);
		const ConstPixelBufferAccess	inputStencilAccess	= getEffectiveDepthStencilAccess(inputAccess, tcu::Sampler::MODE_STENCIL);
		const PixelBufferAccess			tmpStencilAccess	= getEffectiveDepthStencilAccess(tmpAccess, tcu::Sampler::MODE_STENCIL);

		m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");

		verifyInfoQueries();

		verifyRead(inputStencilAccess);

		m_testCtx.getLog() << TestLog::Message << "Copying with getPixel() -> setPixel()" << TestLog::EndMessage;
		copyPixels(inputStencilAccess, tmpStencilAccess);
		verifyRead(tmpStencilAccess);

		verifyGetPixStencil(inputStencilAccess, inputAccess);

		m_testCtx.getLog() << TestLog::Message << "Copying both depth getPixStencil() -> setPixStencil()" << TestLog::EndMessage;
		tcu::clear(tmpStencilAccess, tcu::IVec4(0));
		copyGetSetStencil(inputAccess, tmpAccess);
		verifyGetPixStencil(tmpStencilAccess, tmpAccess);

		return STOP;
	}
};

class DepthStencilFormatCase : public TextureFormatCase
{
public:
	DepthStencilFormatCase (tcu::TestContext& testCtx, TextureFormat format)
		: TextureFormatCase(testCtx, format)
	{
		DE_ASSERT(format.order == TextureFormat::DS);
	}

	IterateResult iterate (void)
	{
		const ConstPixelBufferAccess	inputAccess			= getInputAccess(m_format);
		vector<deUint8>					tmpMem				(getPixelSize(inputAccess.getFormat())*inputAccess.getWidth());
		const PixelBufferAccess			tmpAccess			(inputAccess.getFormat(), inputAccess.getWidth(), 1, 1, &tmpMem[0]);
		const ConstPixelBufferAccess	inputDepthAccess	= getEffectiveDepthStencilAccess(inputAccess, tcu::Sampler::MODE_DEPTH);
		const ConstPixelBufferAccess	inputStencilAccess	= getEffectiveDepthStencilAccess(inputAccess, tcu::Sampler::MODE_STENCIL);
		const PixelBufferAccess			tmpDepthAccess		= getEffectiveDepthStencilAccess(tmpAccess, tcu::Sampler::MODE_DEPTH);
		const PixelBufferAccess			tmpStencilAccess	= getEffectiveDepthStencilAccess(tmpAccess, tcu::Sampler::MODE_STENCIL);

		m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");

		verifyInfoQueries();

		verifyRead(inputDepthAccess);
		verifyRead(inputStencilAccess);

		verifyGetPixDepth(inputDepthAccess, inputAccess);
		verifyGetPixStencil(inputStencilAccess, inputAccess);

		m_testCtx.getLog() << TestLog::Message << "Copying both depth and stencil with getPixel() -> setPixel()" << TestLog::EndMessage;
		copyPixels(inputDepthAccess, tmpDepthAccess);
		copyPixels(inputStencilAccess, tmpStencilAccess);
		verifyRead(tmpDepthAccess);
		verifyRead(tmpStencilAccess);

		m_testCtx.getLog() << TestLog::Message << "Copying both depth and stencil with getPix{Depth,Stencil}() -> setPix{Depth,Stencil}()" << TestLog::EndMessage;
		copyGetSetDepth(inputDepthAccess, tmpDepthAccess);
		copyGetSetStencil(inputStencilAccess, tmpStencilAccess);
		verifyRead(tmpDepthAccess);
		verifyRead(tmpStencilAccess);

		m_testCtx.getLog() << TestLog::Message << "Verifying that clearing depth component with clearDepth() doesn't affect stencil" << TestLog::EndMessage;
		tcu::copy(tmpAccess, inputAccess);
		tcu::clearDepth(tmpAccess, 0.0f);
		verifyRead(tmpStencilAccess);

		m_testCtx.getLog() << TestLog::Message << "Verifying that clearing stencil component with clearStencil() doesn't affect depth" << TestLog::EndMessage;
		tcu::copy(tmpAccess, inputAccess);
		tcu::clearStencil(tmpAccess, 0);
		verifyRead(tmpDepthAccess);

		m_testCtx.getLog() << TestLog::Message << "Verifying that clearing depth component with setPixDepth() doesn't affect stencil" << TestLog::EndMessage;
		tcu::copy(tmpAccess, inputAccess);

		for (int ndx = 0; ndx < tmpAccess.getWidth(); ndx++)
			tmpAccess.setPixDepth(0.0f, ndx, 0, 0);

		verifyRead(tmpStencilAccess);

		m_testCtx.getLog() << TestLog::Message << "Verifying that clearing stencil component with setPixStencil() doesn't affect depth" << TestLog::EndMessage;
		tcu::copy(tmpAccess, inputAccess);

		for (int ndx = 0; ndx < tmpAccess.getWidth(); ndx++)
			tmpAccess.setPixStencil(0, ndx, 0, 0);

		verifyRead(tmpDepthAccess);

		return STOP;
	}
};

} // anonymous

tcu::TestCaseGroup* createTextureFormatTests (tcu::TestContext& testCtx)
{
	de::MovePtr<tcu::TestCaseGroup>	group	(new tcu::TestCaseGroup(testCtx, "texture_format", "Texture format tests"));

	for (int channelType = 0; channelType < TextureFormat::CHANNELTYPE_LAST; channelType++)
	{
		// \todo [2020-04-08] Missing tests for SIGNED_INT64 and UNSIGNED_INT64
		if (TextureFormat::SIGNED_INT64 == channelType || channelType == TextureFormat::UNSIGNED_INT64)
			continue;

		for (int channelOrder = 0; channelOrder < TextureFormat::CHANNELORDER_LAST; channelOrder++)
		{
			const TextureFormat		format		((TextureFormat::ChannelOrder)channelOrder, (TextureFormat::ChannelType)channelType);

			if (!isValid(format))
				continue;

			if (tcu::isSRGB(format))
				continue; // \todo [2015-10-12 pyry] Tests for sRGB formats (need thresholds)

			if (format.order == TextureFormat::DS)
				group->addChild(new DepthStencilFormatCase(testCtx, format));
			else if (format.order == TextureFormat::D)
				group->addChild(new DepthFormatCase(testCtx, format));
			else if (format.order == TextureFormat::S)
				group->addChild(new StencilFormatCase(testCtx, format));
			else
				group->addChild(new ColorFormatCase(testCtx, format));
		}
	}

	return group.release();
}

} // dit
