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

Timothy Arceri tarceri at itsqueeze.com
Fri Jun 30 05:01:31 UTC 2017


On 30/06/17 14:49, Timothy Arceri wrote:
> 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?

For the record, a quick grep shows that all the extensions used in this 
test are covered in piglit at least in some form.

> 
> 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__
> -
> 


More information about the Piglit mailing list