[Piglit] [RFC] glean: remove pixel formats test

Timothy Arceri tarceri at itsqueeze.com
Fri Jun 30 04:49:14 UTC 2017


In the bug for porting glean tests to piglit this is
listed as "covered by Piglit" "Check & Remove".

Since that list was made we also now have a public CTS.

This is another of the extra slow glean tests. Can we
assume this is all covered and remove?

https://bugs.freedesktop.org/show_bug.cgi?id=65676
---
 tests/all.py                  |    1 -
 tests/glean/CMakeLists.gl.txt |    1 -
 tests/glean/tpixelformats.cpp | 1675 -----------------------------------------
 tests/glean/tpixelformats.h   |   98 ---
 4 files changed, 1775 deletions(-)
 delete mode 100644 tests/glean/tpixelformats.cpp
 delete mode 100644 tests/glean/tpixelformats.h

diff --git a/tests/all.py b/tests/all.py
index 4d19da1..c5d0672 100644
--- a/tests/all.py
+++ b/tests/all.py
@@ -292,21 +292,20 @@ for basedir in [os.path.join(TESTS_DIR, 'apitrace', 'traces')]:
 MSAA_SAMPLE_COUNTS = ['2', '4', '6', '8', '16', '32']
 
 with profile.test_list.group_manager(GleanTest, 'glean') as g:
     g('basic')
     g('api2')
     g('makeCurrent')
     g('bufferObject')
     g('depthStencil')
     g('fbo')
     g('getString')
-    g('pixelFormats')
     g('pointSprite')
     # exactRGBA is not included intentionally, because it's too strict and
     # the equivalent functionality is covered by other tests
     g('shaderAPI')
     g('texCombine')
     g('texCube')
     g('texEnv')
     g('texgen')
     g('texCombine4')
     g('texture_srgb')
diff --git a/tests/glean/CMakeLists.gl.txt b/tests/glean/CMakeLists.gl.txt
index 9bbf324..7a9ccb0 100644
--- a/tests/glean/CMakeLists.gl.txt
+++ b/tests/glean/CMakeLists.gl.txt
@@ -27,21 +27,20 @@ piglit_add_executable (glean
 	options.cpp
 	rc.cpp
 	tapi2.cpp
 	tbasic.cpp
 	tbinding.cpp
 	test.cpp
 	tfbo.cpp
 	tfragprog1.cpp
 	tglsl1.cpp
 	tmultitest.cpp
-	tpixelformats.cpp
 	tpointsprite.cpp
 	tshaderapi.cpp
 	ttexcombine.cpp
 	ttexcombine4.cpp
 	ttexcube.cpp
 	ttexenv.cpp
 	ttexgen.cpp
 	ttexture_srgb.cpp
 	ttexunits.cpp
 	tvertarraybgra.cpp
diff --git a/tests/glean/tpixelformats.cpp b/tests/glean/tpixelformats.cpp
deleted file mode 100644
index d9818dc..0000000
--- a/tests/glean/tpixelformats.cpp
+++ /dev/null
@@ -1,1675 +0,0 @@
-// BEGIN_COPYRIGHT -*- glean -*-
-// 
-// Copyright (C) 1999  Allen Akin   All Rights Reserved.
-// 
-// Permission is hereby granted, free of charge, to any person
-// obtaining a copy of this software and associated documentation
-// files (the "Software"), to deal in the Software without
-// restriction, including without limitation the rights to use,
-// copy, modify, merge, publish, distribute, sublicense, and/or
-// sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following
-// conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the
-// Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-// KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-// PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL ALLEN AKIN BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-// AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
-// OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-// 
-// END_COPYRIGHT
-
-
-#include <stdlib.h>
-#include <cassert>
-#include <cmath>
-#include "tpixelformats.h"
-#include "../util/rgb9e5.h"
-#include "piglit-util-gl.h"
-
-
-// Set to 1 to help debug test failures:
-// Also, when a test failure is found, rearrange the order of the
-// formats, types, internformats below so the failure case comes first.
-#define DEBUG 0
-
-
-// just for extra debugging
-// Maybe add fragment program path as a 3rd envMode (below) someday.
-#define USE_FRAG_PROG 0
-
-#define abort() do { printf("%s:%i\n", __FUNCTION__, __LINE__); abort(); } while (0)
-
-namespace GLEAN {
-
-
-struct NameTokenComps {
-	const char *Name;
-	GLenum Token;
-	GLuint Components;
-};
-
-
-static const NameTokenComps Types[] =
-{
-	{ "GL_UNSIGNED_BYTE", GL_UNSIGNED_BYTE, 0 },
-	{ "GL_BYTE", GL_BYTE, 0 },
-	{ "GL_UNSIGNED_INT", GL_UNSIGNED_INT, 0 },
-	{ "GL_SHORT", GL_SHORT, 0 },
-	{ "GL_UNSIGNED_SHORT", GL_UNSIGNED_SHORT, 0 },
-	{ "GL_INT", GL_INT, 0 },
-	{ "GL_FLOAT", GL_FLOAT, 0 },
-	{ "GL_HALF_FLOAT_ARB", GL_HALF_FLOAT_ARB, 0 },
-
-	{ "GL_UNSIGNED_INT_8_8_8_8", GL_UNSIGNED_INT_8_8_8_8, 4 },
-	{ "GL_UNSIGNED_INT_8_8_8_8_REV", GL_UNSIGNED_INT_8_8_8_8_REV, 4 },
-	{ "GL_UNSIGNED_INT_10_10_10_2", GL_UNSIGNED_INT_10_10_10_2, 4 },
-	{ "GL_UNSIGNED_INT_2_10_10_10_REV", GL_UNSIGNED_INT_2_10_10_10_REV, 4 },
-	{ "GL_UNSIGNED_SHORT_5_5_5_1", GL_UNSIGNED_SHORT_5_5_5_1, 4 },
-	{ "GL_UNSIGNED_SHORT_1_5_5_5_REV", GL_UNSIGNED_SHORT_1_5_5_5_REV, 4 },
-	{ "GL_UNSIGNED_SHORT_4_4_4_4", GL_UNSIGNED_SHORT_4_4_4_4, 4 },
-	{ "GL_UNSIGNED_SHORT_4_4_4_4_REV", GL_UNSIGNED_SHORT_4_4_4_4_REV, 4 },
-	{ "GL_UNSIGNED_SHORT_5_6_5", GL_UNSIGNED_SHORT_5_6_5, 3 },
-	{ "GL_UNSIGNED_SHORT_5_6_5_REV", GL_UNSIGNED_SHORT_5_6_5_REV, 3 },
-	{ "GL_UNSIGNED_BYTE_3_3_2", GL_UNSIGNED_BYTE_3_3_2, 3 },
-	{ "GL_UNSIGNED_BYTE_2_3_3_REV", GL_UNSIGNED_BYTE_2_3_3_REV, 3 },
-
-	{ "GL_UNSIGNED_INT_5_9_9_9_REV", GL_UNSIGNED_INT_5_9_9_9_REV, 3 }
-};
-
-#define NUM_TYPES (sizeof(Types) / sizeof(Types[0]))
-
-
-static const NameTokenComps Formats[] =
-{
-	{ "GL_RGBA", GL_RGBA, 4 },
-	{ "GL_BGRA", GL_BGRA, 4 },
-	{ "GL_RGB", GL_RGB, 3 },
-	{ "GL_BGR", GL_BGR, 3 },
-	{ "GL_RED", GL_RED, 1 },
-	{ "GL_GREEN", GL_GREEN, 1 },
-	{ "GL_BLUE", GL_BLUE, 1 },
-	{ "GL_ALPHA", GL_ALPHA, 1 },
-	{ "GL_LUMINANCE", GL_LUMINANCE, 1 },
-	{ "GL_LUMINANCE_ALPHA", GL_LUMINANCE_ALPHA, 2 },
-	{ "GL_ABGR_EXT", GL_ABGR_EXT, 4 },
-	{ "GL_RG", GL_RG, 2 }
-};
-
-#define NUM_FORMATS (sizeof(Formats) / sizeof(Formats[0]))
-
-
-static const NameTokenComps InternalFormats[] =
-{
-	{ "glDrawPixels", 0, 4 },  // special case for glDrawPixels
-
-	{ "4", 4, 4 },
-	{ "GL_RGBA", GL_RGBA, 4 },
-	{ "GL_RGBA2", GL_RGBA2, 4 },
-	{ "GL_RGBA4", GL_RGBA4, 4 },
-	{ "GL_RGB5_A1", GL_RGB5_A1, 4 },
-	{ "GL_RGBA8", GL_RGBA8, 4 },
-	{ "GL_RGB10_A2", GL_RGB10_A2, 4 },
-	{ "GL_RGBA12", GL_RGBA12, 4 },
-	{ "GL_RGBA16", GL_RGBA16, 4 },
-	{ "GL_SRGB_ALPHA_EXT", GL_SRGB_ALPHA_EXT, 4 },
-	{ "GL_SRGB8_ALPHA8_EXT", GL_SRGB8_ALPHA8_EXT, 4 },
-
-	{ "3", 3, 3 },
-	{ "GL_RGB", GL_RGB, 3 },
-	{ "GL_R3_G3_B2", GL_R3_G3_B2, 3 },
-	{ "GL_RGB4", GL_RGB4, 3 },
-	{ "GL_RGB5", GL_RGB5, 3 },
-	{ "GL_RGB8", GL_RGB8, 3 },
-	{ "GL_RGB10", GL_RGB10, 3 },
-	{ "GL_RGB12", GL_RGB12, 3 },
-	{ "GL_RGB16", GL_RGB16, 3 },
-	{ "GL_SRGB_EXT", GL_SRGB_EXT, 3 },
-	{ "GL_SRGB8_EXT", GL_SRGB8_EXT, 3 },
-
-	{ "2", 2, 2 },
-	{ "GL_LUMINANCE_ALPHA", GL_LUMINANCE_ALPHA, 2 },
-	{ "GL_LUMINANCE4_ALPHA4", GL_LUMINANCE4_ALPHA4, 1 },
-	{ "GL_LUMINANCE6_ALPHA2", GL_LUMINANCE6_ALPHA2, 1 },
-	{ "GL_LUMINANCE8_ALPHA8", GL_LUMINANCE8_ALPHA8, 1 },
-	{ "GL_LUMINANCE12_ALPHA4", GL_LUMINANCE12_ALPHA4, 1 },
-	{ "GL_LUMINANCE12_ALPHA12", GL_LUMINANCE12_ALPHA12, 1 },
-	{ "GL_LUMINANCE16_ALPHA16", GL_LUMINANCE16_ALPHA16, 1 },
-	{ "GL_SLUMINANCE_ALPHA_EXT", GL_SLUMINANCE_ALPHA_EXT, 3 },
-	{ "GL_SLUMINANCE8_ALPHA8_EXT", GL_SLUMINANCE8_ALPHA8_EXT, 3 },
-
-	{ "1", 1, 1 },
-	{ "GL_LUMINANCE", GL_LUMINANCE, 1 },
-	{ "GL_LUMINANCE4", GL_LUMINANCE4, 1 },
-	{ "GL_LUMINANCE8", GL_LUMINANCE8, 1 },
-	{ "GL_LUMINANCE12", GL_LUMINANCE12, 1 },
-	{ "GL_LUMINANCE16", GL_LUMINANCE16, 1 },
-	{ "GL_SLUMINANCE_EXT", GL_SLUMINANCE_EXT, 3 },
-	{ "GL_SLUMINANCE8_EXT", GL_SLUMINANCE8_EXT, 3 },
-
-	{ "GL_ALPHA", GL_ALPHA, 1 },
-	{ "GL_ALPHA4", GL_ALPHA4, 1 },
-	{ "GL_ALPHA8", GL_ALPHA8, 1 },
-	{ "GL_ALPHA12", GL_ALPHA12, 1 },
-	{ "GL_ALPHA16", GL_ALPHA16, 1 },
-
-	{ "GL_INTENSITY", GL_INTENSITY, 1 },
-	{ "GL_INTENSITY4", GL_INTENSITY4, 1 },
-	{ "GL_INTENSITY8", GL_INTENSITY8, 1 },
-	{ "GL_INTENSITY12", GL_INTENSITY12, 1 },
-	{ "GL_INTENSITY16", GL_INTENSITY16, 1 },
-
-	{ "GL_RED", GL_RED, 1 },
-	{ "GL_RG", GL_RG, 2 },
-	{ "GL_R8", GL_R8, 1 },
-	{ "GL_RG8", GL_RG8, 2 },
-	{ "GL_R16", GL_R16, 1},
-	{ "GL_RG16", GL_RG16, 2 },
-	{ "GL_R16F", GL_R16F, 1 },
-	{ "GL_RG16F", GL_RG16F, 2 },
-	{ "GL_R32F", GL_R32F, 1},
-	{ "GL_RG32F", GL_RG32F, 2 },
-
-	{ "GL_RED_SNORM", GL_RED_SNORM, 1 },
-	{ "GL_RG_SNORM", GL_RG_SNORM, 2 },
-	{ "GL_RGB_SNORM", GL_RGB_SNORM, 3 },
-	{ "GL_RGBA_SNORM", GL_RGBA_SNORM, 4 },
-	{ "GL_ALPHA_SNORM", GL_ALPHA_SNORM, 1 },
-	{ "GL_LUMINANCE_SNORM", GL_LUMINANCE_SNORM, 1 },
-	{ "GL_LUMINANCE_ALPHA_SNORM", GL_LUMINANCE_ALPHA_SNORM, 2 },
-	{ "GL_INTENSITY_SNORM", GL_INTENSITY_SNORM, 1 },
-
-	{ "GL_R8_SNORM", GL_R8_SNORM, 1 },
-	{ "GL_RG8_SNORM", GL_RG8_SNORM, 2 },
-	{ "GL_RGB8_SNORM", GL_RGB8_SNORM, 3 },
-	{ "GL_RGBA8_SNORM", GL_RGBA8_SNORM, 4 },
-	{ "GL_ALPHA8_SNORM", GL_ALPHA8_SNORM, 1 },
-	{ "GL_LUMINANCE8_SNORM", GL_LUMINANCE8_SNORM, 1 },
-	{ "GL_LUMINANCE8_ALPHA8_SNORM", GL_LUMINANCE8_ALPHA8_SNORM, 2 },
-	{ "GL_INTENSITY8_SNORM", GL_INTENSITY8_SNORM, 1 },
-
-	{ "GL_R16_SNORM", GL_R16_SNORM, 1 },
-	{ "GL_RG16_SNORM", GL_RG16_SNORM, 2 },
-	{ "GL_RGB16_SNORM", GL_RGB16_SNORM, 3 },
-	{ "GL_RGBA16_SNORM", GL_RGBA16_SNORM, 4 },
-	{ "GL_ALPHA16_SNORM", GL_ALPHA16_SNORM, 1 },
-	{ "GL_LUMINANCE16_SNORM", GL_LUMINANCE16_SNORM, 1 },
-	{ "GL_LUMINANCE16_ALPHA16_SNORM", GL_LUMINANCE16_ALPHA16_SNORM, 2 },
-	{ "GL_INTENSITY16_SNORM", GL_INTENSITY16_SNORM, 1 },
-
-	{ "GL_RGB9_E5", GL_RGB9_E5, 3 }
-
-	// XXX maybe add compressed formats too...
-};
-
-#define NUM_INT_FORMATS (sizeof(InternalFormats) / sizeof(InternalFormats[0]))
-
-
-static const char *EnvModes[] = {
-	"GL_REPLACE",
-	"GL_COMBINE_ARB"
-};
-
-
-// Return four bitmasks indicating which bits correspond to the
-// 1st, 2nd, 3rd and 4th components in a packed datatype.
-// Set all masks to zero for non-packed types.
-static void
-ComponentMasks(GLenum datatype, GLuint masks[4])
-{
-	switch (datatype) {
-	case GL_UNSIGNED_BYTE:
-	case GL_BYTE:
-	case GL_UNSIGNED_SHORT:
-	case GL_SHORT:
-	case GL_UNSIGNED_INT:
-	case GL_INT:
-	case GL_FLOAT:
-	case GL_HALF_FLOAT_ARB:
-	case GL_UNSIGNED_INT_5_9_9_9_REV: /* special case, handled separately */
-		masks[0] =
-		masks[1] =
-		masks[2] =
-		masks[3] = 0x0;
-		break;
-	case GL_UNSIGNED_INT_8_8_8_8:
-		masks[0] = 0xff000000;
-		masks[1] = 0x00ff0000;
-		masks[2] = 0x0000ff00;
-		masks[3] = 0x000000ff;
-		break;
-	case GL_UNSIGNED_INT_8_8_8_8_REV:
-		masks[0] = 0x000000ff;
-		masks[1] = 0x0000ff00;
-		masks[2] = 0x00ff0000;
-		masks[3] = 0xff000000;
-		break;
-	case GL_UNSIGNED_INT_10_10_10_2:
-		masks[0] = 0xffc00000;
-		masks[1] = 0x003ff000;
-		masks[2] = 0x00000ffc;
-		masks[3] = 0x00000003;
-		break;
-	case GL_UNSIGNED_INT_2_10_10_10_REV:
-		masks[0] = 0x000003ff;
-		masks[1] = 0x000ffc00;
-		masks[2] = 0x3ff00000;
-		masks[3] = 0xc0000000;
-		break;
-	case GL_UNSIGNED_SHORT_5_5_5_1:
-		masks[0] = 0xf800;
-		masks[1] = 0x07c0;
-		masks[2] = 0x003e;
-		masks[3] = 0x0001;
-		break;
-	case GL_UNSIGNED_SHORT_1_5_5_5_REV:
-		masks[0] = 0x001f;
-		masks[1] = 0x03e0;
-		masks[2] = 0x7c00;
-		masks[3] = 0x8000;
-		break;
-	case GL_UNSIGNED_SHORT_4_4_4_4:
-		masks[0] = 0xf000;
-		masks[1] = 0x0f00;
-		masks[2] = 0x00f0;
-		masks[3] = 0x000f;
-		break;
-	case GL_UNSIGNED_SHORT_4_4_4_4_REV:
-		masks[0] = 0x000f;
-		masks[1] = 0x00f0;
-		masks[2] = 0x0f00;
-		masks[3] = 0xf000;
-		break;
-	case GL_UNSIGNED_SHORT_5_6_5:
-		masks[0] = 0xf800;
-		masks[1] = 0x07e0;
-		masks[2] = 0x001f;
-		masks[3] = 0;
-		break;
-	case GL_UNSIGNED_SHORT_5_6_5_REV:
-		masks[0] = 0x001f;
-		masks[1] = 0x07e0;
-		masks[2] = 0xf800;
-		masks[3] = 0;
-		break;
-	case GL_UNSIGNED_BYTE_3_3_2:
-		masks[0] = 0xe0;
-		masks[1] = 0x1c;
-		masks[2] = 0x03;
-		masks[3] = 0;
-		break;
-	case GL_UNSIGNED_BYTE_2_3_3_REV:
-		masks[0] = 0x07;
-		masks[1] = 0x38;
-		masks[2] = 0xc0;
-		masks[3] = 0;
-		break;
-	default:
-		abort();
-	}
-}
-
-
-// Return four values indicating the ordering of the Red, Green, Blue and
-// Alpha components for the given image format.
-// For example: GL_BGRA = {2, 1, 0, 3}.
-static void
-ComponentPositions(GLenum format, GLint pos[4])
-{
-	switch (format) {
-	case GL_RGBA:
-		pos[0] = 0;
-		pos[1] = 1;
-		pos[2] = 2;
-		pos[3] = 3;
-		break;
-	case GL_BGRA:
-		pos[0] = 2;
-		pos[1] = 1;
-		pos[2] = 0;
-		pos[3] = 3;
-		break;
-	case GL_RGB:
-		pos[0] = 0;
-		pos[1] = 1;
-		pos[2] = 2;
-		pos[3] = -1;
-		break;
-	case GL_BGR:
-		pos[0] = 2;
-		pos[1] = 1;
-		pos[2] = 0;
-		pos[3] = -1;
-		break;
-	case GL_LUMINANCE:
-		pos[0] = 0;
-		pos[1] = -1;
-		pos[2] = -1;
-		pos[3] = -1;
-		break;
-	case GL_LUMINANCE_ALPHA:
-		pos[0] = 0;
-		pos[1] = -1;
-		pos[2] = -1;
-		pos[3] = 1;
-		break;
-	case GL_RED:
-		pos[0] = 0;
-		pos[1] = -1;
-		pos[2] = -1;
-		pos[3] = -1;
-		break;
-	case GL_GREEN:
-		pos[0] = -1;
-		pos[1] = 0;
-		pos[2] = -1;
-		pos[3] = -1;
-		break;
-	case GL_BLUE:
-		pos[0] = -1;
-		pos[1] = -1;
-		pos[2] = 0;
-		pos[3] = -1;
-		break;
-	case GL_ALPHA:
-		pos[0] = -1;
-		pos[1] = -1;
-		pos[2] = -1;
-		pos[3] = 0;
-		break;
-	case GL_ABGR_EXT:
-		pos[0] = 3;
-		pos[1] = 2;
-		pos[2] = 1;
-		pos[3] = 0;
-		break;
-	case GL_RG:
-		pos[0] = 0;
-		pos[1] = 1;
-		pos[2] = -1;
-		pos[3] = -1;
-		break;
-	default:
-		abort();
-	}
-}
-
-
-// Given a texture internal format, return the corresponding base format.
-static GLenum
-BaseTextureFormat(GLint intFormat)
-{
-	switch (intFormat) {
-	case 0:
-		return 0;  // for glDrawPixels
-	case GL_ALPHA:
-	case GL_ALPHA4:
-	case GL_ALPHA8:
-	case GL_ALPHA12:
-	case GL_ALPHA16:
-	case GL_ALPHA_SNORM:
-	case GL_ALPHA8_SNORM:
-	case GL_ALPHA16_SNORM:
-		return GL_ALPHA;
-	case 1:
-	case GL_LUMINANCE:
-	case GL_LUMINANCE4:
-	case GL_LUMINANCE8:
-	case GL_LUMINANCE12:
-	case GL_LUMINANCE16:
-	case GL_LUMINANCE_SNORM:
-	case GL_LUMINANCE8_SNORM:
-	case GL_LUMINANCE16_SNORM:
-		return GL_LUMINANCE;
-	case 2:
-	case GL_LUMINANCE_ALPHA:
-	case GL_LUMINANCE4_ALPHA4:
-	case GL_LUMINANCE6_ALPHA2:
-	case GL_LUMINANCE8_ALPHA8:
-	case GL_LUMINANCE12_ALPHA4:
-	case GL_LUMINANCE12_ALPHA12:
-	case GL_LUMINANCE16_ALPHA16:
-	case GL_LUMINANCE_ALPHA_SNORM:
-	case GL_LUMINANCE8_ALPHA8_SNORM:
-	case GL_LUMINANCE16_ALPHA16_SNORM:
-		return GL_LUMINANCE_ALPHA;
-	case GL_INTENSITY:
-	case GL_INTENSITY4:
-	case GL_INTENSITY8:
-	case GL_INTENSITY12:
-	case GL_INTENSITY16:
-	case GL_INTENSITY_SNORM:
-	case GL_INTENSITY8_SNORM:
-	case GL_INTENSITY16_SNORM:
-		return GL_INTENSITY;
-
-	case GL_RED:
-	case GL_R8:
-	case GL_R16:
-	case GL_R16F:
-	case GL_R32F:
-	case GL_RED_SNORM:
-	case GL_R8_SNORM:
-	case GL_R16_SNORM:
-		return GL_RED;
-
-	case GL_RG:
-	case GL_RG8:
-	case GL_RG16:
-	case GL_RG16F:
-	case GL_RG32F:
-	case GL_RG_SNORM:
-	case GL_RG8_SNORM:
-	case GL_RG16_SNORM:
-		return GL_RG;
-
-	case 3:
-	case GL_RGB:
-	case GL_R3_G3_B2:
-	case GL_RGB4:
-	case GL_RGB5:
-	case GL_RGB8:
-	case GL_RGB10:
-	case GL_RGB12:
-	case GL_RGB16:
-	case GL_RGB_SNORM:
-	case GL_RGB8_SNORM:
-	case GL_RGB16_SNORM:
-	case GL_RGB9_E5:
-		return GL_RGB;
-	case 4:
-	case GL_RGBA:
-	case GL_RGBA2:
-	case GL_RGBA4:
-	case GL_RGB5_A1:
-	case GL_RGBA8:
-	case GL_RGB10_A2:
-	case GL_RGBA12:
-	case GL_RGBA16:
-	case GL_RGBA_SNORM:
-	case GL_RGBA8_SNORM:
-	case GL_RGBA16_SNORM:
-		return GL_RGBA;
-
-	case GL_SRGB_EXT:
-	case GL_SRGB8_EXT:
-	case GL_COMPRESSED_SRGB_EXT:
-	case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT:
-		return GL_RGB;
-	case GL_SRGB_ALPHA_EXT:
-	case GL_SRGB8_ALPHA8_EXT:
-	case GL_COMPRESSED_SRGB_ALPHA_EXT:
-	case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:
-	case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:
-	case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:
-		return GL_RGBA;
-	case GL_SLUMINANCE_ALPHA_EXT:
-	case GL_SLUMINANCE8_ALPHA8_EXT:
-	case GL_COMPRESSED_SLUMINANCE_EXT:
-	case GL_COMPRESSED_SLUMINANCE_ALPHA_EXT:
-		return GL_LUMINANCE_ALPHA;
-	case GL_SLUMINANCE_EXT:
-	case GL_SLUMINANCE8_EXT:
-		return GL_LUMINANCE;
-	default:
-		abort();
-	}
-}
-
-
-
-
-// Return number components in the given datatype.  This is 3 or 4 for
-// packed types and zero for non-packed types
-// Ex: GL_UNSIGNED_SHORT_5_5_5_1 = 4
-// Ex: GL_INT = 0
-static int
-NumberOfComponentsInPackedType(GLenum datatype)
-{
-	for (unsigned i = 0; i < NUM_TYPES; i++) {
-		if (Types[i].Token == datatype)
-			return Types[i].Components;
-	}
-	abort();
-}
-
-
-static int
-IsPackedType(GLenum datatype)
-{
-	return NumberOfComponentsInPackedType(datatype) > 0;
-}
-
-
-// Return number components in the given image format.
-// Ex: GL_BGR = 3
-static int
-NumberOfComponentsInFormat(GLenum format)
-{
-	for (unsigned i = 0; i < NUM_FORMATS; i++) {
-		if (Formats[i].Token == format)
-			return Formats[i].Components;
-	}
-	abort();
-}
-
-
-// Return size, in bytes, of given datatype.
-static int
-SizeofType(GLenum datatype)
-{
-	switch (datatype) {
-	case GL_UNSIGNED_INT_10_10_10_2:
-	case GL_UNSIGNED_INT_2_10_10_10_REV:
-	case GL_UNSIGNED_INT_8_8_8_8:
-	case GL_UNSIGNED_INT_8_8_8_8_REV:
-	case GL_UNSIGNED_INT_5_9_9_9_REV:
-	case GL_UNSIGNED_INT:
-	case GL_INT:
-	case GL_FLOAT:
-		return 4;
-	case GL_UNSIGNED_SHORT_5_5_5_1:
-	case GL_UNSIGNED_SHORT_1_5_5_5_REV:
-	case GL_UNSIGNED_SHORT_4_4_4_4:
-	case GL_UNSIGNED_SHORT_4_4_4_4_REV:
-	case GL_UNSIGNED_SHORT_5_6_5:
-	case GL_UNSIGNED_SHORT_5_6_5_REV:
-	case GL_UNSIGNED_SHORT:
-	case GL_SHORT:
-	case GL_HALF_FLOAT_ARB:
-		return 2;
-	case GL_UNSIGNED_BYTE_3_3_2:
-	case GL_UNSIGNED_BYTE_2_3_3_REV:
-	case GL_UNSIGNED_BYTE:
-	case GL_BYTE:
-		return 1;
-	default:
-		abort();
-	}
-}
-
-
-// Check if the given image format and datatype are compatible.
-// Also check for types/formats defined by GL extensions here.
-bool
-PixelFormatsTest::CompatibleFormatAndType(GLenum format, GLenum datatype) const
-{
-	// Special case: GL_BGR can't be used with packed types!
-	// This has to do with putting the most color bits in red and green,
-	// not blue.
-	if (format == GL_BGR && IsPackedType(datatype))
-		return false;
-
-	if (datatype == GL_HALF_FLOAT_ARB && !haveHalfFloat)
-		return false;
-
-	if (format == GL_ABGR_EXT && !haveABGR)
-		return false;
-
-	// Special case: GL_ABGR_EXT can't be used with packed types
-	// because the packed formats specs (which were all written after the
-	// GL_EXT_abgr) explicitly say that the packed formats can only be used
-	// with GL_RGB, GL_BGR, GL_RGBA, or GL_BGRA and do not mention
-	// GL_ABGR_EXT.
-	if (format == GL_ABGR_EXT && IsPackedType(datatype))
-		return false;
-
-	if (format == GL_RG && !haveRG)
-		return false;
-
-	if (datatype == GL_UNSIGNED_INT_5_9_9_9_REV && !haveTexSharedExp)
-		return false;
-
-	const int formatComps = NumberOfComponentsInFormat(format);
-	const int typeComps = NumberOfComponentsInPackedType(datatype);
-	return formatComps == typeComps || typeComps == 0;
-}
-
-
-bool
-PixelFormatsTest::SupportedIntFormat(GLint intFormat) const
-{
-	switch (intFormat) {
-	case GL_SRGB_ALPHA_EXT:
-	case GL_SRGB8_ALPHA8_EXT:
-	case GL_SRGB_EXT:
-	case GL_SRGB8_EXT:
-	case GL_SLUMINANCE_ALPHA_EXT:
-	case GL_SLUMINANCE8_ALPHA8_EXT:
-	case GL_SLUMINANCE_EXT:
-	case GL_SLUMINANCE8_EXT:
-		return haveSRGB;
-	case GL_RED:
-	case GL_RG:
-	case GL_R8:
-	case GL_RG8:
-	case GL_R16:
-	case GL_RG16:
-		return haveRG;
-	case GL_R16F:
-	case GL_RG16F:
-	case GL_R32F:
-	case GL_RG32F:
-		return haveRG && haveFloat;
-	case GL_RED_SNORM:
-	case GL_R8_SNORM:
-	case GL_R16_SNORM:
-	case GL_RG_SNORM:
-	case GL_RG8_SNORM:
-	case GL_RG16_SNORM:
-	case GL_RGB_SNORM:
-	case GL_RGB8_SNORM:
-	case GL_RGB16_SNORM:
-	case GL_RGBA_SNORM:
-	case GL_RGBA8_SNORM:
-	case GL_RGBA16_SNORM:
-	case GL_ALPHA_SNORM:
-	case GL_ALPHA8_SNORM:
-	case GL_ALPHA16_SNORM:
-	case GL_LUMINANCE_SNORM:
-	case GL_LUMINANCE8_SNORM:
-	case GL_LUMINANCE16_SNORM:
-	case GL_LUMINANCE_ALPHA_SNORM:
-	case GL_LUMINANCE8_ALPHA8_SNORM:
-	case GL_LUMINANCE16_ALPHA16_SNORM:
-	case GL_INTENSITY_SNORM:
-	case GL_INTENSITY8_SNORM:
-	case GL_INTENSITY16_SNORM:
-		return haveSnorm;
-	case GL_RGB9_E5:
-		return haveTexSharedExp;
-	default:
-
-		return true;
-	}
-}
-
-
-// Determine if the ith pixel is in the upper-right quadrant of the
-// rectangle of size 'width' x 'height'.
-static bool
-IsUpperRight(int i, int width, int height)
-{
-	const int y = i / width, x = i % width;
-	return (x >= width / 2 && y >= height / 2);
-}
-
-
-
-// Create an image buffer and fill it so that a single image channel is
-// the max value (1.0) while the other channels are zero.  For example,
-// if fillComponent==2 and we're filling a four-component image, the
-// pixels will be (0, 0, max, 0).
-//
-// We always leave the upper-right quadrant black/zero.  This is to help
-// detect any image conversion issues related to stride, packing, etc.
-static GLubyte *
-MakeImage(int width, int height, GLenum format, GLenum type,
-		  int fillComponent)
-{
-	assert(fillComponent < 4);
-
-	if (type == GL_UNSIGNED_INT_5_9_9_9_REV) {
-		GLubyte *image = new GLubyte [width * height * 4];
-		int i;
-
-		assert(format == GL_RGB);
-
-		GLuint *ui = (GLuint *) image;
-		for (i = 0; i < width * height; i++) {
-			float p[3] = {0, 0, 0};
-
-			if (!IsUpperRight(i, width, height))
-				p[fillComponent] =  1;
-
-			ui[i] = float3_to_rgb9e5(p);
-		}
-
-		return image;
-	}
-	else if (IsPackedType(type)) {
-		const int bpp = SizeofType(type);
-		GLubyte *image = new GLubyte [width * height * bpp];
-		GLuint masks[4];
-		int pos[4];
-		int i;
-
-		ComponentMasks(type, masks);
-		ComponentPositions(format, pos);
-
-		const GLuint value = masks[fillComponent];
-
-		switch (bpp) {
-		case 1:
-			for (i = 0; i < width * height; i++) {
-				if (IsUpperRight(i, width, height))
-					image[i] = 0;
-				else
-					image[i] = (GLubyte) value;
-			}
-			break;
-		case 2:
-			{
-				GLushort *image16 = (GLushort *) image;
-				for (i = 0; i < width * height; i++) {
-					if (IsUpperRight(i, width, height))
-						image16[i] = 0;
-					else
-						image16[i] = (GLushort) value;
-				}
-			}
-			break;
-		case 4:
-			{
-				GLuint *image32 = (GLuint *) image;
-				for (i = 0; i < width * height; i++) {
-					if (IsUpperRight(i, width, height))
-						image32[i] = 0;
-					else
-						image32[i] = (GLuint) value;
-				}
-			}
-			break;
-		default:
-			abort();
-		}
-
-		return image;
-	}
-	else {
-		const int comps = NumberOfComponentsInFormat(format);
-		const int bpp = comps * SizeofType(type);
-		assert(bpp > 0);
-		GLubyte *image = new GLubyte [width * height * bpp];
-		int i;
-
-		switch (type) {
-		case GL_UNSIGNED_BYTE:
-			for (i = 0; i < width * height * comps; i++) {
-				if (i % comps == fillComponent && !IsUpperRight(i/comps, width, height))
-					image[i] = 0xff;
-				else
-					image[i] = 0x0;
-			}
-			break;
-		case GL_BYTE:
-			{
-				GLbyte *b = (GLbyte *) image;
-				for (i = 0; i < width * height * comps; i++) {
-					if (i % comps == fillComponent && !IsUpperRight(i/comps, width, height))
-						b[i] = 0x7f;
-					else
-						b[i] = 0x0;
-				}
-			}
-			break;
-		case GL_UNSIGNED_SHORT:
-			{
-				GLushort *us = (GLushort *) image;
-				for (i = 0; i < width * height * comps; i++) {
-					if (i % comps == fillComponent && !IsUpperRight(i/comps, width, height))
-						us[i] = 0xffff;
-					else
-						us[i] = 0x0;
-				}
-			}
-			break;
-		case GL_SHORT:
-			{
-				GLshort *s = (GLshort *) image;
-				for (i = 0; i < width * height * comps; i++) {
-					if (i % comps == fillComponent && !IsUpperRight(i/comps, width, height))
-						s[i] = 0x7fff;
-					else
-						s[i] = 0x0;
-				}
-			}
-			break;
-		case GL_UNSIGNED_INT:
-			{
-				GLuint *ui = (GLuint *) image;
-				for (i = 0; i < width * height * comps; i++) {
-					if (i % comps == fillComponent && !IsUpperRight(i/comps, width, height))
-						ui[i] = 0xffffffff;
-					else
-						ui[i] = 0x0;
-				}
-			}
-			break;
-		case GL_INT:
-			{
-				GLint *in = (GLint *) image;
-				for (i = 0; i < width * height * comps; i++) {
-					if (i % comps == fillComponent && !IsUpperRight(i/comps, width, height))
-						in[i] = 0x7fffffff;
-					else
-						in[i] = 0x0;
-				}
-			}
-			break;
-		case GL_FLOAT:
-			{
-				GLfloat *f = (GLfloat *) image;
-				for (i = 0; i < width * height * comps; i++) {
-					if (i % comps == fillComponent && !IsUpperRight(i/comps, width, height))
-						f[i] = 1.0;
-					else
-						f[i] = 0.0;
-				}
-			}
-			break;
-		case GL_HALF_FLOAT_ARB:
-			{
-				GLhalfARB *f = (GLhalfARB *) image;
-				for (i = 0; i < width * height * comps; i++) {
-					if (i % comps == fillComponent && !IsUpperRight(i/comps, width, height))
-						f[i] = 0x3c00;  /* == 1.0 */
-					else
-						f[i] = 0;
-				}
-			}
-			break;
-		default:
-			abort();
-		}
-		return image;
-	}
-}
-
-
-bool
-PixelFormatsTest::CheckError(const char *where) const
-{
-	GLint err = glGetError();
-	if (err) {
-		char msg[1000];
-		sprintf(msg, "GL Error: %s (0x%x) in %s\n",
-				piglit_get_gl_error_name(err), err, where);
-		env->log << msg;
-		return true;
-	}
-	return false;
-}
-
-
-// Draw the given image, either as a texture quad or glDrawPixels.
-// Return true for success, false if GL error detected.
-bool
-PixelFormatsTest::DrawImage(int width, int height,
-							GLenum format, GLenum type, GLint intFormat,
-							const GLubyte *image) const
-{
-	if (intFormat) {
-		glEnable(GL_TEXTURE_2D);
-		glViewport(0, 0, width, height);
-		glTexImage2D(GL_TEXTURE_2D, 0, intFormat, width, height, 0,
-					 format, type, image);
-		if (CheckError("glTexImage2D"))
-			return false;
-#if USE_FRAG_PROG
-		glEnable(GL_FRAGMENT_PROGRAM_ARB);
-#endif
-		glBegin(GL_POLYGON);
-		glTexCoord2f(0, 0);  glVertex2f(-1, -1);
-		glTexCoord2f(1, 0);  glVertex2f(1, -1);
-		glTexCoord2f(1, 1);  glVertex2f(1, 1);
-		glTexCoord2f(0, 1);  glVertex2f(-1, 1);
-		glEnd();
-		glDisable(GL_TEXTURE_2D);
-#if USE_FRAG_PROG
-		glDisable(GL_FRAGMENT_PROGRAM_ARB);
-#endif
-	}
-	else {
-		// glDrawPixels
-		glDrawPixels(width, height, format, type, image);
-		if (CheckError("glDrawPixels"))
-			return false;
-	}
-	return true;
-}
-
-
-static bool
-ColorsEqual(const GLubyte img[4], const GLubyte expected[4])
-{
-	const int tolerance = 1;
-	if ((abs(img[0] - expected[0]) > tolerance) ||
-		(abs(img[1] - expected[1]) > tolerance) ||
-		(abs(img[2] - expected[2]) > tolerance) ||
-		(abs(img[3] - expected[3]) > tolerance)) {
-		return false;
-	}
-	else {
-		return true;
-	}
-}
-
-
-// Compute the expected RGBA color we're expecting to find with glReadPixels
-// if the texture was defined with the given image format and texture
-// internal format.  'testChan' indicates which of the srcFormat's image
-// channels was set (to 1.0) when the image was filled.
-void
-PixelFormatsTest::ComputeExpected(GLenum srcFormat, int testChan,
-								  GLint intFormat, GLubyte exp[4]) const
-{
-	const GLenum baseIntFormat = BaseTextureFormat(intFormat);
-
-	switch (srcFormat) {
-
-	case GL_RGBA:
-	case GL_BGRA:
-	case GL_ABGR_EXT:
-		assert(testChan < 4);
-		switch (baseIntFormat) {
-		case 0: // == glReadPixels
-			// fallthrough
-		case GL_RGBA:
-			exp[0] = 0;
-			exp[1] = 0;
-			exp[2] = 0;
-			exp[3] = 0;
-			exp[testChan] = 255;
-			break;
-		case GL_RGB:
-			exp[0] = 0;
-			exp[1] = 0;
-			exp[2] = 0;
-			exp[testChan] = 255;
-			exp[3] = defaultAlpha; // fragment alpha or texture alpha
-			break;
-		case GL_RG:
-			exp[0] = 0;
-			exp[1] = 0;
-			exp[testChan] = 255;
-			exp[2] = 0;
-			exp[3] = defaultAlpha; // fragment alpha or texture alpha
-			break;
-		case GL_RED:
-			exp[0] = testChan == 0 ? 255 : 0;
-			exp[1] = 0;
-			exp[2] = 0;
-			exp[3] = defaultAlpha; // fragment alpha or texture alpha
-			break;
-		case GL_ALPHA:
-			exp[0] = 0;
-			exp[1] = 0;
-			exp[2] = 0;
-			exp[3] = testChan == 3 ? 255 : 0;
-			break;
-		case GL_LUMINANCE:
-			exp[0] =
-			exp[1] =
-			exp[2] = testChan == 0 ? 255 : 0;
-			exp[3] = defaultAlpha; // fragment alpha or texture alpha
-			break;
-		case GL_LUMINANCE_ALPHA:
-			exp[0] =
-			exp[1] =
-			exp[2] = testChan == 0 ? 255 : 0;
-			exp[3] = testChan == 3 ? 255 : 0;
-			break;
-		case GL_INTENSITY:
-			exp[0] =
-			exp[1] =
-			exp[2] =
-			exp[3] = testChan == 0 ? 255 : 0;
-			break;
-		default:
-			abort();
-		}
-		break;
-
-	case GL_RGB:
-	case GL_BGR:
-		assert(testChan < 3);
-		switch (baseIntFormat) {
-		case 0:
-		case GL_RGBA:
-			exp[0] = 0;
-			exp[1] = 0;
-			exp[2] = 0;
-			exp[testChan] = 255;
-			exp[3] = 255; // texture's alpha
-			break;
-		case GL_RGB:
-			exp[0] = 0;
-			exp[1] = 0;
-			exp[2] = 0;
-			exp[testChan] = 255;
-			exp[3] = defaultAlpha; // fragment alpha or texture alpha
-			break;
-		case GL_RG:
-			exp[0] = 0;
-			exp[1] = 0;
-			exp[testChan] = 255;
-			exp[2] = 0;
-			exp[3] = defaultAlpha; // fragment alpha or texture alpha
-			break;
-		case GL_RED:
-			exp[0] = testChan == 0 ? 255 : 0;
-			exp[1] = 0;
-			exp[2] = 0;
-			exp[3] = defaultAlpha; // fragment alpha or texture alpha
-			break;
-		case GL_ALPHA:
-			exp[0] = 0;
-			exp[1] = 0;
-			exp[2] = 0;
-			exp[3] = 255; // texture's alpha
-			break;
-		case GL_LUMINANCE:
-			exp[0] =
-			exp[1] =
-			exp[2] = testChan == 0 ? 255 : 0;
-			exp[3] = defaultAlpha; // fragment alpha or texture alpha
-			break;
-		case GL_LUMINANCE_ALPHA:
-			exp[0] =
-			exp[1] =
-			exp[2] = testChan == 0 ? 255 : 0;
-			exp[3] = 255;  // texture's alpha
-			break;
-		case GL_INTENSITY:
-			exp[0] =
-			exp[1] =
-			exp[2] =
-			exp[3] = testChan == 0 ? 255 : 0;
-			break;
-		default:
-			abort();
-		}
-		break;
-
-	case GL_RG:
-		assert(testChan < 2);
-		switch (baseIntFormat) {
-		case 0:
-		case GL_RGBA:
-			exp[0] = 0;
-			exp[1] = 0;
-			exp[testChan] = 255;
-			exp[2] = 0;
-			exp[3] = 255; // texture's alpha
-			break;
-		case GL_RGB:
-			exp[0] = 0;
-			exp[1] = 0;
-			exp[testChan] = 255;
-			exp[2] = 0;
-			exp[3] = defaultAlpha; // fragment alpha or texture alpha
-			break;
-		case GL_RG:
-			exp[0] = 0;
-			exp[1] = 0;
-			exp[testChan] = 255;
-			exp[2] = 0;
-			exp[3] = defaultAlpha; // fragment alpha or texture alpha
-			break;
-		case GL_RED:
-			exp[0] = testChan == 0 ? 255 : 0;
-			exp[1] = 0;
-			exp[2] = 0;
-			exp[3] = defaultAlpha; // fragment alpha or texture alpha
-			break;
-		case GL_ALPHA:
-			exp[0] = 0;
-			exp[1] = 0;
-			exp[2] = 0;
-			exp[3] = 255; // texture's alpha
-			break;
-		case GL_LUMINANCE:
-			exp[0] =
-			exp[1] =
-			exp[2] = testChan == 0 ? 255 : 0;
-			exp[3] = defaultAlpha; // fragment alpha or texture alpha
-			break;
-		case GL_LUMINANCE_ALPHA:
-			exp[0] =
-			exp[1] =
-			exp[2] = testChan == 0 ? 255 : 0;
-			exp[3] = 255;  // texture's alpha
-			break;
-		case GL_INTENSITY:
-			exp[0] =
-			exp[1] =
-			exp[2] =
-			exp[3] = testChan == 0 ? 255 : 0;
-			break;
-		default:
-			abort();
-		}
-		break;
-
-	case GL_RED:
-		assert(testChan == 0);
-		switch (baseIntFormat) {
-		case 0:
-		case GL_RGBA:
-			exp[0] = 255;
-			exp[1] = 0;
-			exp[2] = 0;
-			exp[3] = 255; // texture's alpha
-			break;
-		case GL_RGB:
-			exp[0] = 255;
-			exp[1] = 0;
-			exp[2] = 0;
-			exp[3] = defaultAlpha; // fragment alpha or texture alpha
-			break;
-		case GL_RG:
-			exp[0] = 255;
-			exp[1] = 0;
-			exp[2] = 0;
-			exp[3] = defaultAlpha; // fragment alpha or texture alpha
-			break;
-		case GL_RED:
-			exp[0] = 255;
-			exp[1] = 0;
-			exp[2] = 0;
-			exp[3] = defaultAlpha; // fragment alpha or texture alpha
-			break;
-		case GL_ALPHA:
-			exp[0] = 0;
-			exp[1] = 0;
-			exp[2] = 0;
-			exp[3] = 255; // texture's alpha
-			break;
-		case GL_LUMINANCE:
-			exp[0] =
-			exp[1] =
-			exp[2] = 255;
-			exp[3] = defaultAlpha; // fragment alpha or texture alpha
-			break;
-		case GL_LUMINANCE_ALPHA:
-			exp[0] =
-			exp[1] =
-			exp[2] = 255;
-			exp[3] = 255; // texture's alpha
-			break;
-		case GL_INTENSITY:
-			exp[0] =
-			exp[1] =
-			exp[2] = 255;
-			exp[3] = 255; // texture's alpha
-			break;
-		default:
-			abort();
-		}
-		break;
-
-	case GL_GREEN:
-	case GL_BLUE:
-		assert(testChan == 0);
-		switch (baseIntFormat) {
-		case 0:
-		case GL_RGBA:
-			exp[0] = 0;
-			exp[1] = 255;
-			exp[2] = 0;
-			exp[3] = 255; // texture's alpha
-			break;
-		case GL_RGB:
-			exp[0] = 0;
-			exp[1] = 255;
-			exp[2] = 0;
-			exp[3] = defaultAlpha; // fragment alpha or texture alpha
-			break;
-		case GL_ALPHA:
-			exp[0] = 0;
-			exp[1] = 0;
-			exp[2] = 0;
-			exp[3] = 255; // texture's alpha
-			break;
-		case GL_LUMINANCE:
-			exp[0] =
-			exp[1] =
-			exp[2] = 0;
-			exp[3] = defaultAlpha; // fragment alpha or texture alpha
-			break;
-		case GL_LUMINANCE_ALPHA:
-			exp[0] =
-			exp[1] =
-			exp[2] = 0;
-			exp[3] = 255; // texture's alpha
-			break;
-		case GL_INTENSITY:
-			exp[0] =
-			exp[1] =
-			exp[2] = 0;
-			exp[3] = 0; // texture's alpha
-			break;
-		default:
-			abort();
-		}
-		break;
-
-	case GL_ALPHA:
-		assert(testChan == 0);
-		switch (baseIntFormat) {
-		case 0:
-		case GL_RGBA:
-			exp[0] = 0;
-			exp[1] = 0;
-			exp[2] = 0;
-			exp[3] = 255; // texture's alpha
-			break;
-		case GL_RGB:
-			exp[0] = 0;
-			exp[1] = 0;
-			exp[2] = 0;
-			exp[3] = defaultAlpha; // fragment alpha or texture alpha
-			break;
-		case GL_ALPHA:
-			exp[0] = 0;
-			exp[1] = 0;
-			exp[2] = 0;
-			exp[3] = 255; // texture's alpha
-			break;
-		case GL_LUMINANCE:
-			exp[0] =
-			exp[1] =
-			exp[2] = 0;
-			exp[3] = defaultAlpha; // fragment alpha or texture alpha
-			break;
-		case GL_LUMINANCE_ALPHA:
-			exp[0] =
-			exp[1] =
-			exp[2] = 0;
-			exp[3] = 255; // texture's alpha
-			break;
-		case GL_INTENSITY:
-			exp[0] =
-			exp[1] =
-			exp[2] = 0;
-			exp[3] = defaultAlpha; // fragment alpha or texture alpha
-			break;
-		default:
-			abort();
-		}
-		break;
-
-	case GL_LUMINANCE:
-		assert(testChan == 0);
-		switch (baseIntFormat) {
-		case 0:
-		case GL_RGBA:
-			exp[0] = 255;
-			exp[1] = 255;
-			exp[2] = 255;
-			exp[3] = 255; // texture's alpha
-			break;
-		case GL_RGB:
-			exp[0] = 255;
-			exp[1] = 255;
-			exp[2] = 255;
-			exp[3] = defaultAlpha; // fragment alpha or texture alpha
-			break;
-		case GL_RG:
-			exp[0] = 255;
-			exp[1] = 255;
-			exp[2] = 0;
-			exp[3] = defaultAlpha; // fragment alpha or texture alpha
-			break;
-		case GL_RED:
-			exp[0] = 255;
-			exp[1] = 0;
-			exp[2] = 0;
-			exp[3] = defaultAlpha; // fragment alpha or texture alpha
-			break;
-		case GL_ALPHA:
-			exp[0] = 0;
-			exp[1] = 0;
-			exp[2] = 0;
-			exp[3] = 255; // texture's alpha
-			break;
-		case GL_LUMINANCE:
-			exp[0] = 255;
-			exp[1] = 255;
-			exp[2] = 255;
-			exp[3] = defaultAlpha; // fragment alpha or texture alpha
-			break;
-		case GL_LUMINANCE_ALPHA:
-			exp[0] = 255;
-			exp[1] = 255;
-			exp[2] = 255;
-			exp[3] = 255; // texture's alpha
-			break;
-		case GL_INTENSITY:
-			exp[0] = 255;
-			exp[1] = 255;
-			exp[2] = 255;
-			exp[3] = 255; // texture's alpha
-			break;
-		default:
-			abort();
-		}
-		break;
-
-	case GL_LUMINANCE_ALPHA:
-		assert(testChan < 2);
-		switch (baseIntFormat) {
-		case 0:
-		case GL_RGBA:
-			exp[0] =
-			exp[1] =
-			exp[2] = testChan == 0 ? 255 : 0;
-			exp[3] = testChan == 1 ? 255 : 0;
-			break;
-		case GL_RGB:
-			exp[0] = 
-			exp[1] = 
-			exp[2] = testChan == 0 ? 255 : 0;
-			exp[3] = defaultAlpha; // fragment alpha or texture alpha
-			break;
-		case GL_RG:
-			exp[0] =
-			exp[1] = testChan == 0 ? 255 : 0;
-			exp[2] = 0;
-			exp[3] = defaultAlpha; // fragment alpha or texture alpha
-			break;
-		case GL_RED:
-			exp[0] = testChan == 0 ? 255 : 0;
-			exp[1] = 0;
-			exp[2] = 0;
-			exp[3] = defaultAlpha; // fragment alpha or texture alpha
-			break;
-		case GL_ALPHA:
-			exp[0] =
-			exp[1] =
-			exp[2] = 0; // fragment color
-			exp[3] = testChan == 1 ? 255 : 0;
-			break;
-		case GL_LUMINANCE:
-			exp[0] = 
-			exp[1] = 
-			exp[2] = testChan == 0 ? 255 : 0;
-			exp[3] = defaultAlpha; // fragment alpha or texture alpha
-			break;
-		case GL_LUMINANCE_ALPHA:
-			exp[0] = testChan == 0 ? 255 : 0;
-			exp[1] = testChan == 0 ? 255 : 0;
-			exp[2] = testChan == 0 ? 255 : 0;
-			exp[3] = testChan == 1 ? 255 : 0;
-			break;
-		case GL_INTENSITY:
-			exp[0] =
-			exp[1] =
-			exp[2] =
-			exp[3] = testChan == 0 ? 255 : 0;
-			break;
-		default:
-			abort();
-		}
-		break;
-
-	default:
-		abort();
-	}
-}
-
-
-// Read framebuffer and check that region [width x height] is the expected
-// solid color, except the upper-right quadrant will always be black/zero.
-// comp: which color channel in src image was set (0 = red, 1 = green,
-//  2 = blue, 3 = alpha), other channels are zero.
-// format is the color format we're testing.
-bool
-PixelFormatsTest::CheckRendering(int width, int height, int comp,
-								 GLenum format, GLint intFormat) const
-{
-	const int checkAlpha = alphaBits > 0;
-	GLubyte *image = new GLubyte [width * height * 4];
-	GLboolean ok = 1;
-	GLubyte expected[4];
-	int i;
-
-	assert(comp >= 0 && comp < 4);
-
-	glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, image);
-	for (i = 0; i < width * height; i += 4) {
-
-		ComputeExpected(format, comp, intFormat, expected);
-		if (IsUpperRight(i/4, width, height)) {
-			expected[0] =
-			expected[1] =
-			expected[2] =
-			expected[3] = 0;
-		}
-
-		if (!checkAlpha) {
-			expected[3] = 0xff;
-		}
-
-		// do the color check
-		if (!ColorsEqual(image+i, expected)) {
-			// report failure info
-			char msg[1000];
-			env->log << name;
-			sprintf(msg, " failed at pixel (%d,%d), color channel %d:\n",
-					i/width, i%width, comp);
-			env->log << msg;
-			sprintf(msg, "  Expected: 0x%02x 0x%02x 0x%02x 0x%02x\n",
-					expected[0], expected[1], expected[2], expected[3]);
-			env->log << msg;
-			sprintf(msg, "  Found:    0x%02x 0x%02x 0x%02x 0x%02x\n", 
-					image[i + 0], image[i + 1], image[i + 2], image[i + 3]);
-			env->log << msg;
-			ok = false;
-			break;
-		}
-	}
-	delete [] image;
-	return ok;
-}
-
-
-
-// Exercise a particular combination of image format, type and internal
-// texture format.
-// Return true for success, false for failure.
-bool
-PixelFormatsTest::TestCombination(GLenum format, GLenum type, GLint intFormat)
-{
-	const int numComps = NumberOfComponentsInFormat(format);
-	const int width = 16;
-	const int height = 16;
-	int colorPos[4];
-	ComponentPositions(format, colorPos);
-
-	for (int comp = 0; comp < numComps; comp++) {
-		if (colorPos[comp] >= 0) {
-			// make original/incoming image
-			const int comp2 = colorPos[comp];
-			GLubyte *image = MakeImage(width, height, format, type, comp2);
-
-			// render with image (texture / glDrawPixels)
-			bool ok = DrawImage(width, height, format, type, intFormat, image);
-
-			if (ok) {
-				// check rendering
-				ok = CheckRendering(width, height, comp, format, intFormat);
-			}
-
-			delete [] image;
-
-			if (!ok) {
-				return false;
-			}
-		}
-	}
-
-	return true;
-}
-
-
-// Per visual setup.
-void
-PixelFormatsTest::setup(void)
-{
-	haveHalfFloat = GLUtils::haveExtensions("GL_ARB_half_float_pixel");
-	haveABGR = GLUtils::haveExtensions("GL_EXT_abgr");
-	haveSRGB = GLUtils::haveExtensions("GL_EXT_texture_sRGB");
-	haveCombine = GLUtils::haveExtensions("GL_ARB_texture_env_combine");
-	haveRG = GLUtils::haveExtensions("GL_ARB_texture_rg");
-	haveFloat = GLUtils::haveExtensions("GL_ARB_texture_float");
-	haveSnorm = GLUtils::haveExtensions("GL_EXT_texture_snorm");
-	haveTexSharedExp = GLUtils::haveExtensions("GL_EXT_texture_shared_exponent");
-
-	glGetIntegerv(GL_ALPHA_BITS, &alphaBits);
-
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
-
-	glDrawBuffer(GL_FRONT);
-	glReadBuffer(GL_FRONT);
-
-	glColor4f(0, 0, 0, 0);
-
-#if USE_FRAG_PROG
-	{
-		PFNGLPROGRAMSTRINGARBPROC glProgramStringARB_func;
-		PFNGLBINDPROGRAMARBPROC glBindProgramARB_func;
-		static const char *progText =
-			"!!ARBfp1.0\n"
-			"TEX result.color, fragment.texcoord[0], texture[0], 2D; \n"
-			"END \n"
-			;
-		glProgramStringARB_func = (PFNGLPROGRAMSTRINGARBPROC)
-			GLUtils::getProcAddress("glProgramStringARB");
-		assert(glProgramStringARB_func);
-		glBindProgramARB_func = (PFNGLBINDPROGRAMARBPROC)
-			GLUtils::getProcAddress("glBindProgramARB");
-		assert(glBindProgramARB_func);
-		glBindProgramARB_func(GL_FRAGMENT_PROGRAM_ARB, 1);
-		glProgramStringARB_func(GL_FRAGMENT_PROGRAM_ARB,
-								GL_PROGRAM_FORMAT_ASCII_ARB,
-								strlen(progText), (const GLubyte *) progText);
-		if (glGetError()) {
-			fprintf(stderr, "Bad fragment program, error: %s\n",
-					(const char *) glGetString(GL_PROGRAM_ERROR_STRING_ARB));
-			exit(0);
-		}
-	}
-#endif
-}
-
-
-
-// Test all possible image formats, types and internal texture formats.
-// Result will indicate number of passes and failures.
-void
-PixelFormatsTest::runOne(MultiTestResult &r, Window &w)
-{
-	int testNum = 0, testStride;
-	(void) w;  // silence warning
-
-	setup();
-
-	if (env->options.quick)
-		testStride = 13;  // a prime number
-	else
-		testStride = 1;
-
-	const unsigned numEnvModes = haveCombine ? 2 : 1;
-
-	for (unsigned envMode = 0; envMode < numEnvModes; envMode++) {
-		if (envMode == 0) {
-			glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
-			// When the texture internal format is GL_LUMINANCE or GL_RGB,
-			// GL_REPLACE takes alpha from the fragment, which we set to zero
-			// with glColor4f(0,0,0,0).
-#if USE_FRAG_PROG
-			defaultAlpha = 255;
-#else
-			defaultAlpha = 0;
-#endif
-		}
-		else {
-			assert(haveCombine);
-			glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
-			glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
-			glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
-			glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
-			glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
-			glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
-			glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
-			// For this GL_COMBINE mode, when sampling a texture that does
-			// not have an alpha channel, alpha is effectively 1.0.
-			defaultAlpha = 255;
-		}
-
-		for (unsigned formatIndex = 0; formatIndex < NUM_FORMATS; formatIndex++) {
-			for (unsigned typeIndex = 0; typeIndex < NUM_TYPES; typeIndex++) {
-
-				if (CompatibleFormatAndType(Formats[formatIndex].Token,
-											Types[typeIndex].Token)) {
-
-					for (unsigned intFormat = 0; intFormat < NUM_INT_FORMATS; intFormat++) {
-
-						if (!SupportedIntFormat(InternalFormats[intFormat].Token))
-							continue;
-
-#if DEBUG
-						env->log << "testing "
-								 << testNum
-								 << ":\n";
-						env->log << "  Format:    " << Formats[formatIndex].Name << "\n";
-						env->log << "  Type:      " << Types[typeIndex].Name << "\n";
-						env->log << "  IntFormat: " << InternalFormats[intFormat].Name << "\n";
-
-#endif
-						bool ok;
-
-						if (testNum % testStride == 0) {
-							ok = TestCombination(Formats[formatIndex].Token,
-												 Types[typeIndex].Token,
-												 InternalFormats[intFormat].Token);
-						}
-						else {
-							// skip
-							ok = true;
-						}
-
-						if (!ok) {
-							// error was reported to log, add format info here:
-							env->log << "  Format: " << Formats[formatIndex].Name << "\n";
-							env->log << "  Type: " << Types[typeIndex].Name << "\n";
-							env->log << "  Internal Format: " << InternalFormats[intFormat].Name << "\n";
-							env->log << "  EnvMode: " << EnvModes[envMode] << "\n";
-							r.numFailed++;
-						}
-						else {
-							r.numPassed++;
-						}
-						testNum++;
-					}
-				}
-			}
-		}
-	}
-
-	r.pass = (r.numFailed == 0);
-}
-
-
-// The test object itself:
-PixelFormatsTest pixelFormatsTest("pixelFormats", "window, rgb",
-				"",
-	"Test that all the various pixel formats/types (like\n"
-	"GL_BGRA/GL_UNSIGNED_SHORT_4_4_4_4_REV) operate correctly.\n"
-	"Test both glTexImage and glDrawPixels.\n"
-	"For textures, also test all the various internal texture formats.\n"
-	"Thousands of combinations are possible!\n"
-	);
-
-
-} // namespace GLEAN
diff --git a/tests/glean/tpixelformats.h b/tests/glean/tpixelformats.h
deleted file mode 100644
index d0edb94..0000000
--- a/tests/glean/tpixelformats.h
+++ /dev/null
@@ -1,98 +0,0 @@
-// BEGIN_COPYRIGHT -*- glean -*-
-// 
-// Copyright (C) 1999  Allen Akin   All Rights Reserved.
-// 
-// Permission is hereby granted, free of charge, to any person
-// obtaining a copy of this software and associated documentation
-// files (the "Software"), to deal in the Software without
-// restriction, including without limitation the rights to use,
-// copy, modify, merge, publish, distribute, sublicense, and/or
-// sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following
-// conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the
-// Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-// KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-// PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL ALLEN AKIN BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-// AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
-// OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-// 
-// END_COPYRIGHT
-
-// Brian Paul  September 2006
-
-#ifndef __tpixelformats_h__
-#define __tpixelformats_h__
-
-#include "tmultitest.h"
-
-namespace GLEAN {
-
-#define windowSize 100
-
-
-class PixelFormatsTest: public MultiTest
-{
-public:
-	PixelFormatsTest(const char* testName, const char* filter,
-					 const char *extensions, const char* description):
-		MultiTest(testName, filter, extensions, description),
-		alphaBits(0),
-		defaultAlpha(0),
-		haveHalfFloat(false),
-		haveABGR(false),
-		haveSRGB(false),
-		haveCombine(false),
-		haveRG(false),
-		haveSnorm(false),
-		haveTexSharedExp(false)
-	{
-	}
-
-	virtual void runOne(MultiTestResult &r, Window &w);
-
-private:
-	int alphaBits;
-	int defaultAlpha;  // depends on texture env mode
-	// extensions
-	bool haveHalfFloat;
-	bool haveABGR;
-	bool haveSRGB;
-	bool haveCombine;
-	bool haveRG;
-	bool haveFloat;
-	bool haveSnorm;
-	bool haveTexSharedExp;
-
-	bool CheckError(const char *where) const;
-
-	bool CompatibleFormatAndType(GLenum format, GLenum datatype) const;
-
-	bool SupportedIntFormat(GLint intFormat) const;
-
-	bool DrawImage(int width, int height,
-				   GLenum format, GLenum type, GLint intFormat,
-				   const GLubyte *image) const;
-
-	void ComputeExpected(GLenum srcFormat, int testChan,
-						 GLint intFormat, GLubyte exp[4]) const;
-
-	bool CheckRendering(int width, int height, int color,
-			    GLenum format, GLint intFormat) const;
-
-	bool TestCombination(GLenum format, GLenum type, GLint intFormat);
-
-	void setup(void);
-};
-
-} // namespace GLEAN
-
-#endif // __tpixelformats_h__
-
-- 
2.9.4



More information about the Piglit mailing list