[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