summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/all.py78
-rw-r--r--tests/glean/CMakeLists.gl.txt11
-rw-r--r--tests/glean/tapi2.cpp890
-rw-r--r--tests/glean/tapi2.h87
-rw-r--r--tests/glean/tbasic.cpp60
-rw-r--r--tests/glean/tbasic.h69
-rw-r--r--tests/glean/tbinding.cpp206
-rw-r--r--tests/glean/tbinding.h73
-rw-r--r--tests/glean/tfbo.cpp1367
-rw-r--r--tests/glean/tfbo.h83
-rw-r--r--tests/glean/tfragprog1.cpp1125
-rw-r--r--tests/glean/tfragprog1.h92
-rw-r--r--tests/glean/tpixelformats.cpp1675
-rw-r--r--tests/glean/tpixelformats.h98
-rw-r--r--tests/glean/tshaderapi.cpp470
-rw-r--r--tests/glean/tshaderapi.h98
-rw-r--r--tests/glean/ttexcube.cpp426
-rw-r--r--tests/glean/ttexcube.h66
-rw-r--r--tests/glean/ttexture_srgb.cpp356
-rw-r--r--tests/glean/ttexture_srgb.h71
-rw-r--r--tests/glean/tvertarraybgra.cpp186
-rw-r--r--tests/glean/tvertarraybgra.h74
-rw-r--r--tests/glean/tvertattrib.cpp1398
-rw-r--r--tests/glean/tvertattrib.h95
-rw-r--r--tests/no_error.py3
-rw-r--r--tests/quick.py4
26 files changed, 3 insertions, 9158 deletions
diff --git a/tests/all.py b/tests/all.py
index c586adc21..67e78c58c 100644
--- a/tests/all.py
+++ b/tests/all.py
@@ -18,7 +18,7 @@ from framework import options
from framework import wflinfo
from framework.profile import TestProfile
from framework.driver_classifier import DriverClassifier
-from framework.test import (PiglitGLTest, GleanTest, PiglitBaseTest,
+from framework.test import (PiglitGLTest, PiglitBaseTest,
GLSLParserTest, GLSLParserNoConfigError)
from framework.test.shader_test import ShaderTest, MultiShaderTest
from .py_modules.constants import TESTS_DIR, GENERATED_TESTS_DIR
@@ -370,82 +370,6 @@ for basedir in [os.path.join(TESTS_DIR, 'apitrace', 'traces')]:
# List of all of the MSAA sample counts we wish to test
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')
- # exactRGBA is not included intentionally, because it's too strict and
- # the equivalent functionality is covered by other tests
- g('shaderAPI')
- g('texCube')
- g('texture_srgb')
- g('vertArrayBGRA')
- g('vertattrib')
-
-glean_fp_tests = ['ABS test',
- 'ADD test',
- 'ADD with saturation',
- 'ADD an immediate',
- 'ADD negative immediate',
- 'ADD negative immediate (2)',
- 'CMP test',
- 'COS test',
- 'COS test 2',
- 'DP3 test',
- 'DP3 test (2)',
- 'DP4 test',
- 'DPH test',
- 'DST test',
- 'EX2 test',
- 'FLR test',
- 'FRC test',
- 'LG2 test',
- 'LIT test 1',
- 'LIT test 2 (degenerate case: 0 ^ 0 -> 1)',
- 'LIT test 3 (case x < 0)',
- 'MAD test',
- 'MAX test',
- 'MIN test',
- 'MOV test',
- 'MUL test',
- 'masked MUL test',
- 'POW test (exponentiation)',
- 'RCP test (reciprocal)',
- 'RCP test 2 (reciprocal)',
- 'RSQ test 1 (reciprocal square root)',
- 'RSQ test 2 (reciprocal square root of negative value)',
- 'SCS test',
- 'SGE test',
- 'SIN test',
- 'SIN test 2',
- 'SLT test',
- 'SUB test (with swizzle)',
- 'SUB with saturation',
- 'SWZ test',
- 'swizzled move test',
- 'swizzled add test',
- 'XPD test 1',
- 'Z-write test',
- 'Divide by zero test',
- 'Infinity and nan test',
- 'ARB_fog_linear test',
- 'Computed fog linear test',
- 'ARB_fog_exp test',
- 'Computed fog exp test',
- 'ARB_fog_exp2 test',
- 'Computed fog exp2 test']
-
-for pairs in [(['fragProg1'], glean_fp_tests)]:
- for prefix, name in itertools.product(*pairs):
- groupname = grouptools.join('glean', '{0}-{1}'.format(prefix, name))
- profile.test_list[groupname] = GleanTest(prefix)
- profile.test_list[groupname].env['PIGLIT_TEST'] = name
-
with profile.test_list.group_manager(PiglitGLTest, 'security') as g:
g(['initialized-texmemory'], run_concurrent=False)
g(['initialized-fbo'], run_concurrent=False)
diff --git a/tests/glean/CMakeLists.gl.txt b/tests/glean/CMakeLists.gl.txt
index 9250dfe26..bd7e441e4 100644
--- a/tests/glean/CMakeLists.gl.txt
+++ b/tests/glean/CMakeLists.gl.txt
@@ -26,19 +26,8 @@ piglit_add_executable (glean
misc.cpp
options.cpp
rc.cpp
- tapi2.cpp
- tbasic.cpp
- tbinding.cpp
test.cpp
- tfbo.cpp
- tfragprog1.cpp
tmultitest.cpp
- tpixelformats.cpp
- tshaderapi.cpp
- ttexcube.cpp
- ttexture_srgb.cpp
- tvertarraybgra.cpp
- tvertattrib.cpp
winsys.cpp
gl.cpp
image_misc.cpp
diff --git a/tests/glean/tapi2.cpp b/tests/glean/tapi2.cpp
deleted file mode 100644
index ab8727931..000000000
--- a/tests/glean/tapi2.cpp
+++ /dev/null
@@ -1,890 +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
-
-// tapi2.h: Test OpenGL 2.x API functions/features
-// Brian Paul 9 March 2007
-
-#define GL_GLEXT_PROTOTYPES
-
-#include <stdlib.h>
-#include <cstring>
-#include <cassert>
-#include <math.h>
-#include "tapi2.h"
-
-
-namespace GLEAN {
-
-bool
-API2Test::setup(void)
-{
- // check that we have OpenGL 2.0
- if (GLUtils::getVersion() < 2.0) {
- //env->log << "OpenGL 2.0 not supported\n";
- return false;
- }
-
- GLenum err = glGetError();
- assert(!err); // should be OK
-
- // setup vertex transform (we'll draw a quad in middle of window)
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glOrtho(-4.0, 4.0, -4.0, 4.0, 0.0, 1.0);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- glDrawBuffer(GL_FRONT);
- glReadBuffer(GL_FRONT);
-
- // compute error tolerances (may need fine-tuning)
- int bufferBits[5];
- glGetIntegerv(GL_RED_BITS, &bufferBits[0]);
- glGetIntegerv(GL_GREEN_BITS, &bufferBits[1]);
- glGetIntegerv(GL_BLUE_BITS, &bufferBits[2]);
- glGetIntegerv(GL_ALPHA_BITS, &bufferBits[3]);
- glGetIntegerv(GL_DEPTH_BITS, &bufferBits[4]);
-
- tolerance[0] = 2.0 / (1 << bufferBits[0]);
- tolerance[1] = 2.0 / (1 << bufferBits[1]);
- tolerance[2] = 2.0 / (1 << bufferBits[2]);
- if (bufferBits[3])
- tolerance[3] = 2.0 / (1 << bufferBits[3]);
- else
- tolerance[3] = 1.0;
- if (bufferBits[4])
- tolerance[4] = 16.0 / (1 << bufferBits[4]);
- else
- tolerance[4] = 1.0;
-
- return true;
-}
-
-
-void
-API2Test::reportFailure(const char *msg, int line) const
-{
- env->log << "FAILURE: " << msg << " (at tapi2.cpp:" << line << ")\n";
-}
-
-
-void
-API2Test::reportFailure(const char *msg, GLenum target, int line) const
-{
- env->log << "FAILURE: " << msg;
- if (target == GL_FRAGMENT_SHADER)
- env->log << " (fragment)";
- else
- env->log << " (vertex)";
- env->log << " (at tapi2.cpp:" << line << ")\n";
-}
-
-
-
-#define REPORT_FAILURE(MSG) reportFailure(MSG, __LINE__)
-#define REPORT_FAILURE_T(MSG, TARGET) reportFailure(MSG, TARGET, __LINE__)
-
-
-// Compare actual and expected colors
-bool
-API2Test::equalColors(const GLfloat act[4], const GLfloat exp[4]) const
-{
- if ((fabsf(act[0] - exp[0]) > tolerance[0]) ||
- (fabsf(act[1] - exp[1]) > tolerance[1]) ||
- (fabsf(act[2] - exp[2]) > tolerance[2]) ||
- (fabsf(act[3] - exp[3]) > tolerance[3]))
- return false;
- else
- return true;
-}
-
-
-// Render test quad w/ current shader program, return RGBA color of quad
-void
-API2Test::renderQuad(GLfloat *pixel) const
-{
- const GLfloat r = 0.62; // XXX draw 16x16 pixel quad
-
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- glBegin(GL_POLYGON);
- glTexCoord2f(0, 0); glVertex2f(-r, -r);
- glTexCoord2f(1, 0); glVertex2f( r, -r);
- glTexCoord2f(1, 1); glVertex2f( r, r);
- glTexCoord2f(0, 1); glVertex2f(-r, r);
- glEnd();
-
- // read a pixel from lower-left corner of rendered quad
- glReadPixels(windowSize / 2 - 2, windowSize / 2 - 2, 1, 1,
- GL_RGBA, GL_FLOAT, pixel);
-}
-
-
-// As above, but use vertex arrays
-// \param attr which vertex attribute array to put colors into
-// \param value 4-component valut to put into the attribute array
-// \param pixel returns the rendered color obtained with glReadPixels
-void
-API2Test::renderQuadWithArrays(GLint attr, const GLfloat value[4],
- GLfloat *pixel) const
-{
- const GLfloat r = 0.62; // XXX draw 16x16 pixel quad
- static const GLfloat vertcoords[4][3] = {
- { -r, -r, 0 }, { r, -r, 0 }, { r, r, 0 }, { -r, r, 0 }
- };
- GLfloat values[4][4];
- GLint i;
- for (i = 0; i < 4; i++) {
- values[i][0] = value[0];
- values[i][1] = value[1];
- values[i][2] = value[2];
- values[i][3] = value[3];
- };
-
- glVertexPointer(3, GL_FLOAT, 0, vertcoords);
- glEnableClientState(GL_VERTEX_ARRAY);
- glVertexAttribPointer(attr, 4, GL_FLOAT, GL_FALSE, 0, values);
- glEnableVertexAttribArray(attr);
-
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- glDrawArrays(GL_POLYGON, 0, 4);
-
- glDisableClientState(GL_VERTEX_ARRAY);
- glDisableVertexAttribArray(attr);
-
- // read a pixel from lower-left corner of rendered quad
- glReadPixels(windowSize / 2 - 2, windowSize / 2 - 2, 1, 1,
- GL_RGBA, GL_FLOAT, pixel);
-}
-
-
-GLuint
-API2Test::loadAndCompileShader(GLenum target, const char *text)
-{
- GLint stat, val;
- GLuint shader = glCreateShader(target);
- if (!shader) {
- REPORT_FAILURE("glCreateShader failed (fragment)");
- return 0;
- }
- glShaderSource(shader, 1,
- (const GLchar **) &text, NULL);
- glCompileShader(shader);
- glGetShaderiv(shader, GL_COMPILE_STATUS, &stat);
- if (!stat) {
- REPORT_FAILURE_T("glShaderSource or glCompileShader failed", target);
- return 0;
- }
- if (!glIsShader(shader)) {
- REPORT_FAILURE("glIsShader failed (fragment)");
- return false;
- }
- glGetShaderiv(shader, GL_SHADER_TYPE, &val);
- if (val != (GLint) target) {
- REPORT_FAILURE_T("glGetShaderiv(GL_SHADER_TYPE) failed", target);
- return 0;
- }
- glGetShaderiv(shader, GL_COMPILE_STATUS, &val);
- if (val != GL_TRUE) {
- REPORT_FAILURE_T("glGetShaderiv(GL_COMPILE_STATUS) failed", target);
- return 0;
- }
- glGetShaderiv(shader, GL_SHADER_SOURCE_LENGTH, &val);
- // Note: some OpenGLs return a 1-char shorter length than strlen(text)
- if (abs(val - (int) strlen(text)) > 1) {
- REPORT_FAILURE_T("glGetShaderiv(GL_SHADER_SOURCE_LENGTH) failed", target);
- return 0;
- }
- return shader;
-}
-
-
-GLuint
-API2Test::createProgram(GLuint vertShader, GLuint fragShader)
-{
- GLuint program = glCreateProgram();
- if (vertShader)
- glAttachShader(program, vertShader);
- if (fragShader)
- glAttachShader(program, fragShader);
- glLinkProgram(program);
- return program;
-}
-
-
-bool
-API2Test::testShaderObjectFuncs(void)
-{
- static const char *vertShaderText =
- "void main() { \n"
- " gl_Position = ftransform(); \n"
- "} \n";
- static const char *fragShaderText =
- "void main() { \n"
- " gl_FragColor = vec4(1.0, 0.5, 0.25, 0.0); \n"
- "} \n";
- GLuint vertShader, fragShader, program;
- GLint stat, val, err;
-
- vertShader = loadAndCompileShader(GL_VERTEX_SHADER, vertShaderText);
- if (!vertShader)
- return false;
- fragShader = loadAndCompileShader(GL_FRAGMENT_SHADER, fragShaderText);
- if (!fragShader)
- return false;
-
-
- program = createProgram(vertShader, fragShader);
- if (!program) {
- REPORT_FAILURE("glCreateProgram failed");
- return false;
- }
- glGetProgramiv(program, GL_LINK_STATUS, &stat);
- if (!stat) {
- REPORT_FAILURE("glLinkProgram failed");
- return false;
- }
- glUseProgram(program);
-
- glGetIntegerv(GL_CURRENT_PROGRAM, &val);
- if (val != (GLint) program) {
- REPORT_FAILURE("glGetInteger(GL_CURRENT_PROGRAM) failed");
- return false;
- }
-
- err = glGetError();
- if (err) {
- REPORT_FAILURE("OpenGL error detected in testShaderFuncs");
- return false;
- }
-
- if (!glIsProgram(program)) {
- REPORT_FAILURE("glIsProgram failed");
- return false;
- }
-
- GLuint objects[2];
- GLsizei count;
- glGetProgramiv(program, GL_ATTACHED_SHADERS, &val);
- if (val != 2) {
- REPORT_FAILURE("glGetProgramiv(GL_ATTACHED_SHADERS) failed");
- return false;
- }
- glGetAttachedShaders(program, 2, &count, objects);
- if (count != 2) {
- REPORT_FAILURE("glGetAttachedShaders failed (wrong count)");
- return false;
- }
- if (objects[0] != vertShader && objects[1] != vertShader) {
- REPORT_FAILURE("glGetAttachedShaders failed (vertex shader missing)");
- return false;
- }
- if (objects[0] != fragShader && objects[1] != fragShader) {
- REPORT_FAILURE("glGetAttachedShaders failed (fragment shader missing)");
- return false;
- }
-
- glValidateProgram(program);
- glGetProgramiv(program, GL_VALIDATE_STATUS, &stat);
- if (!stat) {
- REPORT_FAILURE("glValidateProgram failed");
- return false;
- }
-
- // Delete vertex shader
- glDeleteShader(vertShader);
- if (!glIsShader(vertShader)) {
- // the shader is still attached so the handle should be valid
- REPORT_FAILURE("glIsShader(deleted shader) failed");
- return false;
- }
- glGetShaderiv(vertShader, GL_DELETE_STATUS, &stat);
- if (stat != GL_TRUE) {
- REPORT_FAILURE("Incorrect shader delete status");
- return false;
- }
-
- // Delete fragment shader
- glDeleteShader(fragShader);
-
- // Delete program object
- glDeleteProgram(program);
- if (!glIsProgram(program)) {
- // the program is still in use so the handle should be valid
- REPORT_FAILURE("glIsProgram(deleted program) failed");
- return false;
- }
- glGetProgramiv(program, GL_DELETE_STATUS, &stat);
- if (stat != GL_TRUE) {
- REPORT_FAILURE("Incorrect program delete status");
- return false;
- }
-
- // now unbind the program
- glUseProgram(0);
- stat = glIsProgram(program);
- if (stat) {
- // the program and handle should have really been deleted now
- REPORT_FAILURE("glIsProgram(deleted program) failed");
- return false;
- }
-
- glGetProgramiv(program, GL_DELETE_STATUS, &stat);
- err = glGetError();
- if (!err) {
- // the program and handle should have been deleted now
- // so glGetProgramiv() should have generated an error
- REPORT_FAILURE("glGetProgramiv(deleted program) failed");
- return false;
- }
-
- return true;
-}
-
-
-bool
-API2Test::testUniformfFuncs(void)
-{
- static const char *fragShaderText =
- "uniform float uf1; \n"
- "uniform vec2 uf2; \n"
- "uniform vec3 uf3; \n"
- "uniform vec4 uf4; \n"
- "void main() { \n"
- " gl_FragColor = vec4(uf1, uf2.y, uf3.z, uf4.w); \n"
- "} \n";
- GLuint fragShader, program;
- GLint uf1, uf2, uf3, uf4;
- GLfloat value[4];
-
- fragShader = loadAndCompileShader(GL_FRAGMENT_SHADER, fragShaderText);
- if (!fragShader) {
- return false;
- }
- program = createProgram(0, fragShader);
- if (!program) {
- REPORT_FAILURE("glCreateProgram (uniform test) failed");
- return false;
- }
- glUseProgram(program);
-
- uf1 = glGetUniformLocation(program, "uf1");
- if (uf1 < 0) {
- REPORT_FAILURE("glGetUniform \"uf1\" failed");
- return false;
- }
- uf2 = glGetUniformLocation(program, "uf2");
- if (uf2 < 0) {
- REPORT_FAILURE("glGetUniform \"uf2\" failed");
- return false;
- }
- uf3 = glGetUniformLocation(program, "uf3");
- if (uf3 < 0) {
- REPORT_FAILURE("glGetUniform \"uf3\" failed");
- return false;
- }
- uf4 = glGetUniformLocation(program, "uf4");
- if (uf4 < 0) {
- REPORT_FAILURE("glGetUniform \"uf4\" failed");
- return false;
- }
-
-
- GLfloat pixel[4], expected[4];
-
- // Test glUniform[1234]f()
- expected[0] = 0.1;
- expected[1] = 0.2;
- expected[2] = 0.3;
- expected[3] = 0.4;
- glUniform1f(uf1, expected[0]);
- glUniform2f(uf2, 0.0, expected[1]);
- glUniform3f(uf3, 0.0, 0.0, expected[2]);
- glUniform4f(uf4, 0.0, 0.0, 0.0, expected[3]);
- renderQuad(pixel);
- if (!equalColors(pixel, expected)) {
- REPORT_FAILURE("glUniform[1234]f failed");
- //printf("found: %f %f %f %f\n", pixel[0], pixel[1], pixel[2], pixel[3]);
- //printf("expected: %f %f %f %f\n", expected[0], expected[1], expected[2], expected[3]);
-
- return false;
- }
-
- // Test glUniform[1234]fv()
- GLfloat u[4];
- expected[0] = 0.9;
- expected[1] = 0.8;
- expected[2] = 0.7;
- expected[3] = 0.6;
- u[0] = expected[0];
- glUniform1fv(uf1, 1, u);
- u[0] = 0.0; u[1] = expected[1];
- glUniform2fv(uf2, 1, u);
- u[0] = 0.0; u[1] = 0.0; u[2] = expected[2];
- glUniform3fv(uf3, 1, u);
- u[0] = 0.0; u[1] = 0.0; u[2] = 0.0; u[3] = expected[3];
- glUniform4fv(uf4, 1, u);
- renderQuad(pixel);
- if (!equalColors(pixel, expected)) {
- REPORT_FAILURE("glUniform[1234]f failed");
- return false;
- }
-
- // Test glGetUniformfv
- glUniform4fv(uf4, 1, expected);
- glGetUniformfv(program, uf4, value);
- if (value[0] != expected[0] ||
- value[1] != expected[1] ||
- value[2] != expected[2] ||
- value[3] != expected[3]) {
- REPORT_FAILURE("glGetUniformfv failed");
- return false;
- }
-
- return true;
-}
-
-
-bool
-API2Test::testUniformiFuncs(void)
-{
- static const char *fragShaderText =
- "uniform int ui1; \n"
- "uniform ivec2 ui2; \n"
- "uniform ivec3 ui3; \n"
- "uniform ivec4 ui4; \n"
- "void main() { \n"
- " gl_FragColor = vec4(ui1, ui2.y, ui3.z, ui4.w) * 0.1; \n"
- "} \n";
- GLuint fragShader, program;
- GLint ui1, ui2, ui3, ui4;
-
- fragShader = loadAndCompileShader(GL_FRAGMENT_SHADER, fragShaderText);
- if (!fragShader) {
- return false;
- }
- program = createProgram(0, fragShader);
- if (!program) {
- REPORT_FAILURE("glCreateProgram (uniform test) failed");
- return false;
- }
- glUseProgram(program);
-
- ui1 = glGetUniformLocation(program, "ui1");
- if (ui1 < 0) {
- REPORT_FAILURE("glGetUniform \"ui1\" failed");
- return false;
- }
- ui2 = glGetUniformLocation(program, "ui2");
- if (ui2 < 0) {
- REPORT_FAILURE("glGetUniform \"ui2\" failed");
- return false;
- }
- ui3 = glGetUniformLocation(program, "ui3");
- if (ui3 < 0) {
- REPORT_FAILURE("glGetUniform \"ui3\" failed");
- return false;
- }
- ui4 = glGetUniformLocation(program, "ui4");
- if (ui4 < 0) {
- REPORT_FAILURE("glGetUniform \"ui4\" failed");
- return false;
- }
-
- GLfloat pixel[4], expected[4];
- GLint expectedInt[4];
-
- // Test glUniform[1234]i()
- expectedInt[0] = 1;
- expectedInt[1] = 2;
- expectedInt[2] = 3;
- expectedInt[3] = 4;
- expected[0] = 0.1;
- expected[1] = 0.2;
- expected[2] = 0.3;
- expected[3] = 0.4;
- glUniform1i(ui1, expectedInt[0]);
- glUniform2i(ui2, 0, expectedInt[1]);
- glUniform3i(ui3, 0, 0, expectedInt[2]);
- glUniform4i(ui4, 0, 0, 0, expectedInt[3]);
- renderQuad(pixel);
- if (!equalColors(pixel, expected)) {
- REPORT_FAILURE("glUniform[1234]i failed");
- //printf("%f %f %f %f\n", pixel[0], pixel[1], pixel[2], pixel[3]);
- return false;
- }
-
- // Test glUniform[1234]iv()
- GLint u[4];
- expectedInt[0] = 9;
- expectedInt[1] = 8;
- expectedInt[2] = 7;
- expectedInt[3] = 6;
- expected[0] = 0.9;
- expected[1] = 0.8;
- expected[2] = 0.7;
- expected[3] = 0.6;
- u[0] = expectedInt[0];
- glUniform1iv(ui1, 1, u);
- u[0] = 0; u[1] = expectedInt[1];
- glUniform2iv(ui2, 1, u);
- u[0] = 0; u[1] = 0; u[2] = expectedInt[2];
- glUniform3iv(ui3, 1, u);
- u[0] = 0; u[1] = 0; u[2] = 0; u[3] = expectedInt[3];
- glUniform4iv(ui4, 1, u);
- renderQuad(pixel);
- if (!equalColors(pixel, expected)) {
- REPORT_FAILURE("glUniform[1234]i failed");
-#if 0
- printf("Expected color %f %f %f %f\n",
- expected[0], expected[1], expected[2], expected[3]);
- printf("Found color %f %f %f %f\n",
- pixel[0], pixel[1], pixel[2], pixel[3]);
-#endif
- return false;
- }
-
- return true;
-}
-
-
-bool
-API2Test::testShaderAttribs(void)
-{
- static const char *vertShaderText =
- "attribute vec4 generic; \n"
- "void main() { \n"
- " gl_Position = ftransform(); \n"
- " gl_FrontColor = generic; \n"
- "} \n";
- GLuint vertShader, program;
-
- vertShader = loadAndCompileShader(GL_VERTEX_SHADER, vertShaderText);
- if (!vertShader) {
- return false;
- }
- program = createProgram(vertShader, 0);
- if (!program) {
- REPORT_FAILURE("glCreateProgram (uniform test) failed");
- return false;
- }
- glUseProgram(program);
-
- static const GLfloat testColors[3][4] = {
- { 1.0, 0.5, 0.25, 0.0 },
- { 0.0, 0.1, 0.2, 0.3 },
- { 0.5, 0.6, 0.7, 0.8 },
- };
-
- // let compiler allocate the attribute location
- const GLint attr = glGetAttribLocation(program, "generic");
- if (attr < 0) {
- REPORT_FAILURE("glGetAttribLocation failed");
- return false;
- }
- for (int i = 0; i < 3; i++) {
- GLfloat pixel[4];
- renderQuadWithArrays(attr, testColors[i], pixel);
- if (!equalColors(pixel, testColors[i])) {
-#if 0
- printf("Expected color %f %f %f\n",
- testColors[i][0],
- testColors[i][1],
- testColors[i][2]);
- printf("Found color %f %f %f\n",
- pixel[0], pixel[1], pixel[2]);
-#endif
- REPORT_FAILURE("Vertex array test failed");
- return false;
- }
- }
-
- // Test explicit attribute binding.
- const GLint bindAttr = 6; // XXX a non-colliding alias
- glBindAttribLocation(program, bindAttr, "generic");
- glLinkProgram(program);
- GLint loc = glGetAttribLocation(program, "generic");
- if (loc != bindAttr) {
- REPORT_FAILURE("glBindAttribLocation failed");
- return false;
- }
- for (int i = 0; i < 3; i++) {
- GLfloat pixel[4];
- renderQuadWithArrays(bindAttr, testColors[i], pixel);
- if (!equalColors(pixel, testColors[i])) {
- REPORT_FAILURE("Vertex array test failed (2)");
- return false;
- }
- }
-
- return true;
-}
-
-#define CLAMP( X, MIN, MAX ) ( (X)<(MIN) ? (MIN) : ((X)>(MAX) ? (MAX) : (X)) )
-
-bool
-API2Test::testStencilFuncSeparate(void)
-{
- GLint val;
- GLint stencilBits, stencilMax;
-
- glGetIntegerv(GL_STENCIL_BITS, &stencilBits);
- stencilMax = (1 << stencilBits) - 1;
-
- glStencilFuncSeparate(GL_FRONT, GL_LEQUAL, 12, 0xf);
- glStencilFuncSeparate(GL_BACK, GL_GEQUAL, 13, 0xe);
-
- glGetIntegerv(GL_STENCIL_BACK_FUNC, &val);
- if (val != GL_GEQUAL) {
- REPORT_FAILURE("GL_STENCIL_BACK_FUNC query returned wrong value");
- return false;
- }
-
- glGetIntegerv(GL_STENCIL_FUNC, &val);
- if (val != GL_LEQUAL) {
- REPORT_FAILURE("GL_STENCIL_FUNC (front) query returned wrong value");
- return false;
- }
-
- glGetIntegerv(GL_STENCIL_BACK_REF, &val);
- if (val != CLAMP(13, 0, stencilMax)) {
- REPORT_FAILURE("GL_STENCIL_BACK_REF query returned wrong value");
- return false;
- }
-
- glGetIntegerv(GL_STENCIL_REF, &val);
- if (val != CLAMP(12, 0, stencilMax)) {
- REPORT_FAILURE("GL_STENCIL_REF (front) query returned wrong value");
- return false;
- }
-
- glGetIntegerv(GL_STENCIL_BACK_VALUE_MASK, &val);
- if (val != 0xe) {
- REPORT_FAILURE("GL_STENCIL_BACK_VALUE_MASK query returned wrong value");
- return false;
- }
-
- glGetIntegerv(GL_STENCIL_VALUE_MASK, &val);
- if (val != 0xf) {
- REPORT_FAILURE("GL_STENCIL_VALUE_MASK (front) query returned wrong value");
- return false;
- }
-
- return true;
-}
-
-
-bool
-API2Test::testStencilOpSeparate(void)
-{
- GLint val;
-
- // face, fail, zfail, zpass
- glStencilOpSeparate(GL_FRONT, GL_INVERT, GL_ZERO, GL_INCR);
- glStencilOpSeparate(GL_BACK, GL_INCR, GL_KEEP, GL_REPLACE);
-
- glGetIntegerv(GL_STENCIL_BACK_FAIL, &val);
- if (val != GL_INCR) {
- REPORT_FAILURE("GL_STENCIL_BACK_FAIL query returned wrong value");
- return false;
- }
-
- glGetIntegerv(GL_STENCIL_FAIL, &val);
- if (val != GL_INVERT) {
- REPORT_FAILURE("GL_STENCIL_FAIL (front) query returned wrong value");
- return false;
- }
-
- glGetIntegerv(GL_STENCIL_BACK_PASS_DEPTH_FAIL, &val);
- if (val != GL_KEEP) {
- REPORT_FAILURE("GL_STENCIL_BACK_PASS_DEPTH_FAIL query returned wrong value");
- return false;
- }
-
- glGetIntegerv(GL_STENCIL_PASS_DEPTH_FAIL, &val);
- if (val != GL_ZERO) {
- REPORT_FAILURE("GL_STENCIL_PASS_DEPTH_FAIL (front) query returned wrong value");
- return false;
- }
-
- glGetIntegerv(GL_STENCIL_BACK_PASS_DEPTH_PASS, &val);
- if (val != GL_REPLACE) {
- REPORT_FAILURE("GL_STENCIL_BACK_PASS_DEPTH_PASS query returned wrong value");
- return false;
- }
-
- glGetIntegerv(GL_STENCIL_PASS_DEPTH_PASS, &val);
- if (val != GL_INCR) {
- REPORT_FAILURE("GL_STENCIL_PASS_DEPTH_PASS (front) query returned wrong value");
- return false;
- }
-
- return true;
-}
-
-
-bool
-API2Test::testStencilMaskSeparate(void)
-{
- GLint val;
-
- // face, fail, zfail, zpass
- glStencilMaskSeparate(GL_BACK, 0xa);
- glStencilMaskSeparate(GL_FRONT, 0xb);
-
- glGetIntegerv(GL_STENCIL_BACK_WRITEMASK, &val);
- if (val != 0xa) {
- REPORT_FAILURE("GL_STENCIL_BACK_WRITEMASK query returned wrong value");
- return false;
- }
-
- glGetIntegerv(GL_STENCIL_WRITEMASK, &val);
- if (val != 0xb) {
- REPORT_FAILURE("GL_STENCIL_WRITEMASK (front) query returned wrong value");
- return false;
- }
-
- return true;
-}
-
-
-bool
-API2Test::testBlendEquationSeparate(void)
-{
- GLint val;
-
- glBlendEquationSeparate(GL_MAX, GL_FUNC_SUBTRACT);
-
- glGetIntegerv(GL_BLEND_EQUATION, &val);
- if (val != GL_MAX) {
- REPORT_FAILURE("GL_BLEND_EQUATION (rgb) query returned wrong value");
- return false;
- }
-
- glGetIntegerv(GL_BLEND_EQUATION_ALPHA, &val);
- if (val != GL_FUNC_SUBTRACT) {
- REPORT_FAILURE("GL_BLEND_EQUATION (rgb) query returned wrong value");
- return false;
- }
-
- return true;
-}
-
-
-bool
-API2Test::testDrawBuffers(void)
-{
- const int MAX = 2;
- GLint maxBuf = -1, i, n, val;
- GLenum buffers[MAX], err;
- GLint initDrawBuffer;
-
- glGetIntegerv(GL_DRAW_BUFFER, &initDrawBuffer);
-
- glGetIntegerv(GL_MAX_DRAW_BUFFERS, &maxBuf);
- if (maxBuf < 1) {
- REPORT_FAILURE("GL_MAX_DRAW_BUFFERS query failed");
- return false;
- }
-
- n = maxBuf < MAX ? maxBuf : MAX;
- assert(n > 0);
- for (i = 0; i < n; i++) {
- buffers[i] = (i & 1) ? GL_FRONT_LEFT : GL_BACK_LEFT;
- }
- glDrawBuffers(n, buffers);
-
- for (i = 0; i < n; i++) {
- glGetIntegerv(GL_DRAW_BUFFER0 + i, &val);
- if (val != (GLint) buffers[i]) {
- REPORT_FAILURE("glDrawBuffers failed");
- return false;
- }
- }
-
- // restore
- glDrawBuffer(initDrawBuffer);
-
- err = glGetError();
- if (err) {
- REPORT_FAILURE("glDrawBuffers generrated an OpenGL error");
- return false;
- }
-
- return true;
-}
-
-
-// Run all the subtests, incrementing numPassed, numFailed
-void
-API2Test::runSubTests(MultiTestResult &r)
-{
- static TestFunc funcs[] = {
- &GLEAN::API2Test::testStencilFuncSeparate,
- &GLEAN::API2Test::testStencilOpSeparate,
- &GLEAN::API2Test::testStencilMaskSeparate,
- &GLEAN::API2Test::testBlendEquationSeparate,
- &GLEAN::API2Test::testDrawBuffers,
- &GLEAN::API2Test::testShaderObjectFuncs,
- &GLEAN::API2Test::testUniformfFuncs,
- &GLEAN::API2Test::testUniformiFuncs,
- &GLEAN::API2Test::testShaderAttribs,
- NULL
- };
-
- for (int i = 0; funcs[i]; i++)
- if ((this->*funcs[i])())
- r.numPassed++;
- else
- r.numFailed++;
-}
-
-
-void
-API2Test::runOne(MultiTestResult &r, Window &w)
-{
- (void) w;
-
- if (!setup()) {
- r.pass = false;
- return;
- }
-
- runSubTests(r);
-
- r.pass = (r.numFailed == 0);
-}
-
-
-// The test object itself:
-API2Test api2Test("api2", "window, rgb, z, db",
- "", // no extension filter (we'll test for version 2.x during setup)
- "API2 test: check that OpenGL 2.x API functions work.\n"
- );
-
-
-
-} // namespace GLEAN
diff --git a/tests/glean/tapi2.h b/tests/glean/tapi2.h
deleted file mode 100644
index 36cf58725..000000000
--- a/tests/glean/tapi2.h
+++ /dev/null
@@ -1,87 +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
-
-// tapi2.h: Test OpenGL 2.x API functions/features
-// Brian Paul 9 March 2007
-
-#ifndef __tapi2_h__
-#define __tapi2_h__
-
-#include "tmultitest.h"
-
-namespace GLEAN {
-
-#define windowSize 100
-
-
-class API2Test: public MultiTest
-{
-public:
- API2Test(const char* testName, const char* filter,
- const char *extensions, const char* description):
- MultiTest(testName, filter, extensions, description),
- tolerance()
- {
- }
-
- virtual void runOne(MultiTestResult &r, Window &w);
-
-private:
- typedef bool (API2Test::*TestFunc)(void);
-
- GLfloat tolerance[5];
-
- GLuint loadAndCompileShader(GLenum target, const char *str);
- GLuint createProgram(GLuint vertShader, GLuint fragShader);
-
- void renderQuad(GLfloat *pixel) const;
- void renderQuadWithArrays(GLint attr, const GLfloat value[4],
- GLfloat *pixel) const;
-
- bool testStencilFuncSeparate(void);
- bool testStencilOpSeparate(void);
- bool testStencilMaskSeparate(void);
- bool testBlendEquationSeparate(void);
- bool testDrawBuffers(void);
- bool testShaderObjectFuncs(void);
- bool testUniformfFuncs(void);
- bool testUniformiFuncs(void);
- bool testShaderAttribs(void);
-
- void runSubTests(MultiTestResult &r);
-
- bool setup(void);
- bool equalColors(const GLfloat a[4], const GLfloat b[4]) const;
-
- void reportFailure(const char *msg, int line) const;
- void reportFailure(const char *msg, GLenum target, int line) const;
-};
-
-} // namespace GLEAN
-
-#endif // __tglsl1_h__
diff --git a/tests/glean/tbasic.cpp b/tests/glean/tbasic.cpp
deleted file mode 100644
index 1e5fe2e55..000000000
--- a/tests/glean/tbasic.cpp
+++ /dev/null
@@ -1,60 +0,0 @@
-// BEGIN_COPYRIGHT -*- glean -*-
-//
-// Copyright (C) 1999-2000 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
-
-// tbasic.cpp: implementation of example class for basic tests
-
-#include "tbasic.h"
-
-namespace GLEAN {
-
-///////////////////////////////////////////////////////////////////////////////
-// runOne: Run a single test case
-///////////////////////////////////////////////////////////////////////////////
-void
-BasicTest::runOne(BasicResult& r, Window&) {
- r.pass = true;
-} // BasicTest::runOne
-
-///////////////////////////////////////////////////////////////////////////////
-// logOne: Log a single test case
-///////////////////////////////////////////////////////////////////////////////
-void
-BasicTest::logOne(BasicResult& r) {
- logPassFail(r);
- logConcise(r);
-} // BasicTest::logOne
-
-///////////////////////////////////////////////////////////////////////////////
-// The test object itself:
-///////////////////////////////////////////////////////////////////////////////
-BasicTest basicTest("basic", "window",
- "This trivial test simply verifies the internal support for basic\n"
- "tests. It is run on every OpenGL-capable drawing surface\n"
- "configuration that supports creation of a window.\n");
-
-} // namespace GLEAN
diff --git a/tests/glean/tbasic.h b/tests/glean/tbasic.h
deleted file mode 100644
index 2d3af683a..000000000
--- a/tests/glean/tbasic.h
+++ /dev/null
@@ -1,69 +0,0 @@
-// BEGIN_COPYRIGHT -*- glean -*-
-//
-// Copyright (C) 1999-2000 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
-
-
-
-// tbasic.h: Example class for basic tests
-
-// This class illustrates the use of the BaseResult class and BaseTest
-// template class for constructing straightforward portable tests.
-// See the file tbase.h for a discussion of this process.
-
-// BasicTest simply runs on all drawing surface configurations that
-// permit the creation of a window, and always passes.
-
-
-#ifndef __tbasic_h__
-#define __tbasic_h__
-
-#include "tbase.h"
-
-namespace GLEAN {
-
-class BasicResult: public BaseResult {
-public:
- bool pass;
-
- void putresults(ostream& s) const {
- s << pass << '\n';
- }
-
- bool getresults(istream& s) {
- s >> pass;
- return s.good();
- }
-};
-
-class BasicTest: public BaseTest<BasicResult> {
-public:
- GLEAN_CLASS(BasicTest, BasicResult);
-};
-
-} // namespace GLEAN
-
-#endif // __tbasic_h__
diff --git a/tests/glean/tbinding.cpp b/tests/glean/tbinding.cpp
deleted file mode 100644
index 48c766894..000000000
--- a/tests/glean/tbinding.cpp
+++ /dev/null
@@ -1,206 +0,0 @@
-// BEGIN_COPYRIGHT -*- glean -*-
-//
-// Copyright (C) 2000 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
-
-// tbinding.cpp: Test functions in the window-system binding
-
-#include "tbinding.h"
-#include "image.h"
-#include "rand.h"
-#include <cmath>
-#include <algorithm> // max
-
-#if 0
-#ifdef __UNIX__
-#include <unistd.h>
-#endif
-
-#include <iostream>
-#include <fstream>
-#include <cmath>
-#include "dsconfig.h"
-#include "dsfilt.h"
-#include "dsurf.h"
-#include "winsys.h"
-#include "environ.h"
-#include "rc.h"
-#include "glutils.h"
-#include "stats.h"
-#include "tbinding.h"
-#include "misc.h"
-#endif
-
-namespace {
-
-bool
-makeCurrentOK(GLEAN::DrawingSurfaceConfig& config) {
- using namespace GLEAN;
- float expected[4];
- glClear(GL_COLOR_BUFFER_BIT);
- glGetFloatv(GL_COLOR_CLEAR_VALUE, expected);
- Image probe(1, 1, GL_RGBA, GL_FLOAT);
- probe.read(drawingSize/2, drawingSize/2);
- const float* actual = reinterpret_cast<float*>(probe.pixels());
- double maxError = ErrorBits(fabs(expected[0] - actual[0]), config.r);
- maxError = max(maxError,
- ErrorBits(fabs(expected[1] - actual[1]), config.g));
- maxError = max(maxError,
- ErrorBits(fabs(expected[2] - actual[2]), config.b));
- return maxError <= 1.0;
-} // makeCurrentOK
-
-} // anonymous namespace
-
-namespace GLEAN {
-
-///////////////////////////////////////////////////////////////////////////////
-// runOne: Run a single test case
-///////////////////////////////////////////////////////////////////////////////
-void
-MakeCurrentTest::runOne(MakeCurrentResult& r, Window& w) {
-
- DrawingSurfaceConfig& config = *(r.config);
- WindowSystem& ws = env->winSys;
-
- // The rendering contexts to be used:
- vector<RenderingContext*> rcs;
-
- RandomBitsDouble rRand(config.r, 712105);
- RandomBitsDouble gRand(config.g, 63230);
- RandomBitsDouble bRand(config.b, 912167);
-
- // Create rendering contexts to be used with the test window.
- // Note that the first context (at index 0) is always the
- // null context.
-
- rcs.push_back(0);
- r.descriptions.push_back("Null context");
- ws.makeCurrent();
- r.testSequence.push_back(static_cast<int>(rcs.size()) - 1);
-
- rcs.push_back(new RenderingContext(env->winSys, config, 0, true));
- r.descriptions.push_back("Direct-rendering context");
- ws.makeCurrent(*rcs.back(), w);
- r.testSequence.push_back(static_cast<int>(rcs.size()) - 1);
- glDisable(GL_DITHER);
- glClearColor(rRand.next(), gRand.next(), bRand.next(), 1.0);
- if (!makeCurrentOK(config))
- goto failed;
-
- rcs.push_back(new RenderingContext(env->winSys, config, 0, false));
- r.descriptions.push_back("Indirect-rendering context");
- ws.makeCurrent(*rcs.back(), w);
- r.testSequence.push_back(static_cast<int>(rcs.size()) - 1);
- glDisable(GL_DITHER);
- glClearColor(rRand.next(), gRand.next(), bRand.next(), 1.0);
- if (!makeCurrentOK(config))
- goto failed;
-
- // Now run through all the pairs of rendering contexts, making
- // them current in sequence and checking that rendering looks
- // correct. Don't worry about the redundant sequences; we want
- // to check those, too!
-
- int i;
- for (i = 0; i < static_cast<int>(rcs.size()); ++i)
- for (int j = 0; j < static_cast<int>(rcs.size()); ++j) {
- r.testSequence.push_back(i);
- if (rcs[i] == 0)
- ws.makeCurrent();
- else {
- ws.makeCurrent(*rcs[i], w);
- if (!makeCurrentOK(config))
- goto failed;
- }
- r.testSequence.push_back(j);
- if (rcs[j] == 0)
- ws.makeCurrent();
- else {
- ws.makeCurrent(*rcs[j], w);
- if (!makeCurrentOK(config))
- goto failed;
- }
- }
- r.pass = true;
- goto cleanup;
-
-failed:
- r.pass = false;
-cleanup:
- for (i = 0; i < static_cast<int>(rcs.size()); ++i)
- if (rcs[i]) {
- // We need to make sure that no GL commands are
- // pending when the window is destroyed, or we
- // risk a GLXBadCurrentWindow error at some
- // indeterminate time in the future when
- // glXMakeCurrent() is executed.
- // In theory, if glReadPixels() is the last
- // command executed by a test, then an implicit
- // flush has occurred, and the command queue is
- // empty. In practice, we have to protect
- // against the possibility that the implicit
- // flush is not enough to avoid the error.
- ws.makeCurrent(*rcs[i], w);
- glFinish();
- ws.makeCurrent();
-
- delete rcs[i];
- }
-} // MakeCurrentTest::runOne
-
-///////////////////////////////////////////////////////////////////////////////
-// logOne: Log a single test case
-///////////////////////////////////////////////////////////////////////////////
-void
-MakeCurrentTest::logOne(MakeCurrentResult& r) {
- logPassFail(r);
- logConcise(r);
- if (!r.pass) {
- env->log << "\tSequence of MakeCurrent operations was:\n";
- for (int k = 0; k < static_cast<int>(r.testSequence.size()); ++k)
- env->log << "\t\t"
- << r.descriptions[r.testSequence[k]]
- << '\n';
- }
-} // MakeCurrentTestTest::logOne
-
-///////////////////////////////////////////////////////////////////////////////
-// The test object itself:
-///////////////////////////////////////////////////////////////////////////////
-MakeCurrentTest makeCurrentTest("makeCurrent", "window, rgb",
-
- "This test sanity-checks the ability to use multiple rendering\n"
- "contexts. It creates several contexts with differing\n"
- "characteristics (e.g., some are direct-rendering and some\n"
- "are indirect-rendering, if the window system binding supports\n"
- "that distinction). Then it runs through all pairs of contexts,\n"
- "making each one \"current\" in turn and verifying that simple\n"
- "rendering succeeds.\n"
-
- );
-
-} // namespace GLEAN
diff --git a/tests/glean/tbinding.h b/tests/glean/tbinding.h
deleted file mode 100644
index 021b85466..000000000
--- a/tests/glean/tbinding.h
+++ /dev/null
@@ -1,73 +0,0 @@
-// BEGIN_COPYRIGHT -*- glean -*-
-//
-// Copyright (C) 2000 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
-
-
-
-
-// tbinding.h: Test functions in the window-system binding
-
-#ifndef __tbinding_h__
-#define __tbinding_h__
-
-#include "tbasic.h"
-
-namespace GLEAN {
-
-class DrawingSurfaceConfig; // Forward reference.
-class Window;
-
-#define drawingSize 64
-
-class MakeCurrentResult: public BaseResult {
-public:
- bool pass;
- // Short descriptions of the rendering contexts:
- vector<const char*> descriptions;
- // Complete record of rendering contexts made "current" during
- // the test:
- vector<int> testSequence;
-
- void putresults(ostream& s) const {
- s << pass << '\n';
- }
-
- bool getresults(istream& s) {
- s >> pass;
- return s.good();
- }
-};
-
-class MakeCurrentTest: public BaseTest<MakeCurrentResult> {
-public:
- GLEAN_CLASS_WH(MakeCurrentTest, MakeCurrentResult,
- drawingSize, drawingSize);
-}; // class MakeCurrentTest
-
-} // namespace GLEAN
-
-#endif // __tbinding_h__
diff --git a/tests/glean/tfbo.cpp b/tests/glean/tfbo.cpp
deleted file mode 100644
index 288fb0e91..000000000
--- a/tests/glean/tfbo.cpp
+++ /dev/null
@@ -1,1367 +0,0 @@
-// BEGIN_COPYRIGHT -*- glean -*-
-//
-// Copyrigth (C) 2007 Intel Corporation
-// 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
-//
-// Authors:
-// Shuang He <shuang.he@intel.com>
-//
-// tfbo.cpp: Test OpenGL Extension GL_EXT_framebuffer_object
-
-
-#define GL_GLEXT_PROTOTYPES
-
-#include "tfbo.h"
-#include <cassert>
-#include <math.h>
-#include <cstring>
-#include "piglit-util-gl.h"
-
-namespace GLEAN
-{
-
-static int useFramebuffer;
-
-bool
-FBOTest::setup(void)
-{
- // setup vertex transform (we'll draw a quad in middle of window)
- glMatrixMode(GL_PROJECTION);
-
- glLoadIdentity();
- glOrtho(0, 100, 0, 100, -1, 1);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- glDrawBuffer(GL_FRONT);
- glReadBuffer(GL_FRONT);
-
- glDisable(GL_DITHER);
-
- // compute error tolerances (may need fine-tuning)
- int bufferBits[5];
-
- glGetIntegerv(GL_RED_BITS, &bufferBits[0]);
- glGetIntegerv(GL_GREEN_BITS, &bufferBits[1]);
- glGetIntegerv(GL_BLUE_BITS, &bufferBits[2]);
- glGetIntegerv(GL_ALPHA_BITS, &bufferBits[3]);
- glGetIntegerv(GL_DEPTH_BITS, &bufferBits[4]);
-
- tolerance[0] = 3.0 / (1 << bufferBits[0]);
- tolerance[1] = 3.0 / (1 << bufferBits[1]);
- tolerance[2] = 3.0 / (1 << bufferBits[2]);
- if (bufferBits[3])
- tolerance[3] = 3.0 / (1 << bufferBits[3]);
- else
- tolerance[3] = 1.0;
- if (bufferBits[4])
- tolerance[4] = 16.0 / (1 << bufferBits[4]);
- else
- tolerance[4] = 1.0;
-
- // Check if GL_EXT_framebuffer_object is supported
- if (GLUtils::haveExtension("GL_EXT_framebuffer_object")) {
- printf("GL_EXT_framebuffer_object is supported\n");
- useFramebuffer = 1;
- }
- else {
- printf("GL_EXT_framebuffer_object is not supported\n");
- useFramebuffer = 0;
- return false;
- }
-
- haveARBfbo = GLUtils::haveExtension("GL_ARB_framebuffer_object");
- if (haveARBfbo)
- printf("GL_ARB_framebuffer_object is supported\n");
- else
- printf("GL_ARB_framebuffer_object is not supported\n");
-
- return true;
-}
-
-
-void
-FBOTest::reportFailure(const char *msg, const int line) const
-{
- env->log << "FAILURE: " << msg << " (at tfbo.cpp:" << line
- << ")\n";
-}
-
-void
-FBOTest::reportFailure(const char *msg, const GLenum target, const int line) const
-{
- env->log << "FAILURE: " << msg;
- if (target == GL_FRAGMENT_SHADER)
- env->log << " (fragment)";
- else
- env->log << " (vertex)";
- env->log << " (at tfbo.cpp:" << line << ")\n";
-}
-
-#define REPORT_FAILURE(MSG) reportFailure(MSG, __LINE__)
-#define REPORT_FAILURE_T(MSG, TARGET) reportFailure(MSG, TARGET, __LINE__)
-// Compare actual and expected colors
-bool
-FBOTest::equalColors(const GLfloat act[3], const GLfloat exp[3]) const
-{
- if ((fabsf(act[0] - exp[0]) > tolerance[0])
- || (fabsf(act[1] - exp[1]) > tolerance[1])
- || (fabsf(act[2] - exp[2]) > tolerance[2])) {
- return false;
- }
- else
- return true;
-}
-
-
-#define TEXSIZE 64
-
-/*
-|--------------------|
- |---depth---|
- |---stencil---|
-*/
-bool
-FBOTest::checkResult(const GLfloat color[4], const int depth,
- const int stencil) const
-{
- GLfloat buf[TEXSIZE * TEXSIZE * 3];
- int i, j;
- const GLfloat black[4] = { 0.0, 0.0, 0.0, 0.0 };
- const GLfloat *exp;
-
- glReadPixels(0, 0, TEXSIZE, TEXSIZE, GL_RGB, GL_FLOAT, buf);
-
- for (j = 0; j < TEXSIZE; j++) {
- for (i = 0; i < TEXSIZE; i++) {
- exp = color;
-
- if (i * 4 >= TEXSIZE && i * 8 < TEXSIZE * 5
- && depth)
- exp = black;
- if (i * 2 >= TEXSIZE && i * 8 < TEXSIZE * 7
- && stencil)
- exp = black;
-
-
- if (!equalColors(buf + (j * TEXSIZE + i) * 3, exp)) {
- printf(" depth = %d, stencil = %d\n",
- depth, stencil);
- printf(" (%d, %d) = [%f, %f, %f], is expected to be[%f, %f, %f]\n", i, j, buf[(j * TEXSIZE + i) * 3], buf[(j * TEXSIZE + i) * 3 + 1], buf[(j * TEXSIZE + i) * 3 + 2], exp[0], exp[1], exp[2]);
- return false;
- }
- }
- }
- return true;
-}
-
-
-// Check FB status, print unexpected results to stdout.
-static GLenum
-CheckFramebufferStatus(const char *func, int line)
-{
- GLenum status;
- status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
-
- switch(status) {
- case GL_FRAMEBUFFER_COMPLETE_EXT:
- /*printf(" (%s:%d)GL_FRAMEBUFFER_COMPLETE_EXT\n", func, line);*/
- break;
- case GL_FRAMEBUFFER_UNSUPPORTED_EXT:
- printf(" (%s:%d)GL_FRAMEBUFFER_UNSUPPORTED_EXT\n", func, line);
- /* choose different formats */
- break;
- case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT:
- printf(" (%s:%d)GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT\n", func, line);
- break;
- case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT:
- printf(" (%s:%d)GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT\n", func, line);
- break;
- case GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT:
- printf(" (%s:%d)GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT\n", func, line);
- break;
- case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT:
- printf(" (%s:%d)GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT\n", func, line);
- break;
- case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT:
- printf(" (%s:%d)GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT\n", func, line);
- break;
- case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT:
- printf(" (%s:%d)GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT\n", func, line);
- break;
- default:
- /* programming error; will fail on all hardware */
- printf(" (%s:%d)programming error\n", func, line);
- break;
- }
- return status;
-}
-
-
-enum
-{ BLACK, RED, GREEN, BLUE, WHITE };
-
-GLfloat colors[][4] = {
- {0.0, 0.0, 0.0, 0.0},
- {1.0, 0.0, 0.0, 1.0},
- {0.0, 1.0, 0.0, 1.0},
- {0.0, 0.0, 1.0, 1.0},
- {1.0, 1.0, 1.0, 1.0}
-};
-
-
-
-bool
-FBOTest::testSanity(void)
-{
- GLuint fbs[2];
- GLuint maxColorAttachment;
- GLuint fb_binding;
-
- if (!useFramebuffer)
- return true;
-
- glGetIntegerv(GL_MAX_COLOR_ATTACHMENTS_EXT,
- (GLint *) & maxColorAttachment);
- if (maxColorAttachment < 1) {
- REPORT_FAILURE
- ("Failed to get max color attachment points");
- return false;
- }
-
-
- glGetIntegerv(GL_FRAMEBUFFER_BINDING_EXT, (GLint *) & fb_binding);
- if (fb_binding != 0) {
- printf(" fb_binding = %d\n", fb_binding);
- REPORT_FAILURE
- ("The default framebuffer binding should be 0");
- return false;
- }
-
- glGenFramebuffersEXT(1, fbs);
-
-
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbs[0]);
- glGetIntegerv(GL_FRAMEBUFFER_BINDING_EXT, (GLint *) & fb_binding);
- if (fb_binding != fbs[0]) {
- printf(" fb_binding = %d\n", fb_binding);
- REPORT_FAILURE("Binding framebuffer failed");
- return false;
- }
- if (glIsFramebufferEXT(fbs[0]) != GL_TRUE)
- {
- REPORT_FAILURE("Call glIsFramebufferEXT failed");
- return false;
- }
-
- glDeleteFramebuffersEXT(1, fbs);
-
- GLint maxRenderbufferSize;
-
- glGetIntegerv(GL_MAX_RENDERBUFFER_SIZE_EXT, &maxRenderbufferSize);
- if (maxRenderbufferSize < 1) {
- printf(" maxRenderbufferSize = %d\n",
- maxRenderbufferSize);
- REPORT_FAILURE("Get max Renderbuffer Size failed");
- return false;
- }
-
- return true;
-}
-
-
-void
-FBOTest::reset(void)
-{
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
- glDisable(GL_DEPTH_TEST);
- glDisable(GL_STENCIL_TEST);
-}
-
-GLenum textureModes[] = { GL_TEXTURE_1D, GL_TEXTURE_2D, GL_TEXTURE_3D,
- GL_TEXTURE_CUBE_MAP};
-
-bool
-FBOTest::testRender2SingleTexture(void)
-{
- GLint depthBuffer = 0;
- GLint stencilBuffer = 0;
- GLuint fbs[1];
- GLuint depth_rb[1];
- GLuint stencil_rb[1];
- GLuint textures[1];
- int mode;
- int maxzoffset = -1;
- GLenum status;
-
- glGetIntegerv(GL_MAX_3D_TEXTURE_SIZE, &maxzoffset);
- if (maxzoffset > 16)
- maxzoffset = 16;
-
- for (depthBuffer = 0; depthBuffer < 2; depthBuffer++) {
- for (stencilBuffer = 0; stencilBuffer < 2; stencilBuffer++) {
- for (mode = 0; mode < 4; mode++) {
-
- //
- // Setup state to test
- //
- if (mode == 2 && maxzoffset <= 0)
- continue;
-
- if (useFramebuffer)
- glGenFramebuffersEXT(1, fbs);
- glGenTextures(1, textures);
-
- glBindTexture(textureModes[mode],
- textures[0]);
- glTexParameteri(textureModes[mode],
- GL_TEXTURE_MIN_FILTER,
- GL_NEAREST);
- glTexParameteri(textureModes[mode],
- GL_TEXTURE_MAG_FILTER,
- GL_NEAREST);
-
- switch (textureModes[mode]) {
- case GL_TEXTURE_1D:
- glTexImage1D(GL_TEXTURE_1D,
- 0, GL_RGB,
- TEXSIZE, 0,
- GL_RGB, GL_INT, NULL);
- break;
- case GL_TEXTURE_2D:
- glTexImage2D(GL_TEXTURE_2D,
- 0, GL_RGB,
- TEXSIZE,
- TEXSIZE, 0,
- GL_RGB, GL_INT, NULL);
- break;
- case GL_TEXTURE_3D:
- glTexImage3D(GL_TEXTURE_3D,
- 0, GL_RGB,
- TEXSIZE,
- TEXSIZE,
- maxzoffset, 0,
- GL_RGB, GL_INT, NULL);
- break;
- case GL_TEXTURE_CUBE_MAP:
- glTexImage2D
- (GL_TEXTURE_CUBE_MAP_POSITIVE_X,
- 0, GL_RGB,
- TEXSIZE, TEXSIZE,
- 0, GL_RGB, GL_INT, NULL);
- glTexImage2D
- (GL_TEXTURE_CUBE_MAP_NEGATIVE_X,
- 0, GL_RGB,
- TEXSIZE, TEXSIZE,
- 0, GL_RGB, GL_INT, NULL);
- glTexImage2D
- (GL_TEXTURE_CUBE_MAP_POSITIVE_Y,
- 0, GL_RGB,
- TEXSIZE, TEXSIZE,
- 0, GL_RGB, GL_INT, NULL);
- glTexImage2D
- (GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,
- 0, GL_RGB,
- TEXSIZE, TEXSIZE,
- 0, GL_RGB, GL_INT, NULL);
- glTexImage2D
- (GL_TEXTURE_CUBE_MAP_POSITIVE_Z,
- 0, GL_RGB,
- TEXSIZE, TEXSIZE,
- 0, GL_RGB, GL_INT, NULL);
- glTexImage2D
- (GL_TEXTURE_CUBE_MAP_NEGATIVE_Z,
- 0, GL_RGB,
- TEXSIZE, TEXSIZE,
- 0, GL_RGB, GL_INT, NULL);
- break;
- }
-
-
- if (useFramebuffer) {
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbs[0]);
- int height = TEXSIZE;
-
- if (textureModes[mode] == GL_TEXTURE_1D)
- height = 1;
-
- if (depthBuffer) {
- int params;
-
- glGenRenderbuffersEXT(1, depth_rb);
-
-
- glBindRenderbufferEXT
- (GL_RENDERBUFFER_EXT,
- depth_rb[0]);
- if (glIsRenderbufferEXT(depth_rb[0]) != GL_TRUE)
- {
- REPORT_FAILURE("Call glIsRenderbufferEXT failed\n");
- return false;
- }
-
- glRenderbufferStorageEXT
- (GL_RENDERBUFFER_EXT,
- GL_DEPTH_COMPONENT,
- TEXSIZE, height);
- glFramebufferRenderbufferEXT
- (GL_FRAMEBUFFER_EXT,
- GL_DEPTH_ATTACHMENT_EXT,
- GL_RENDERBUFFER_EXT,
- depth_rb[0]);
- glGetRenderbufferParameterivEXT
- (GL_RENDERBUFFER_EXT,
- GL_RENDERBUFFER_WIDTH_EXT,
- &params);
- if (params != TEXSIZE) {
- REPORT_FAILURE("Get Renderbuffer width failed");
- printf("glGetRenderbufferParameterivEXT: %s\n", piglit_get_gl_error_name(glGetError()));
- printf("width = %d\n", params);
- return false;
- }
- glGetRenderbufferParameterivEXT
- (GL_RENDERBUFFER_EXT,
- GL_RENDERBUFFER_HEIGHT_EXT,
- &params);
- if (params != height) {
- REPORT_FAILURE("Get Renderbuffer height failed");
- printf("glGetRenderbufferParameterivEXT: %s\n", piglit_get_gl_error_name(glGetError()));
- return false;
- }
- }
-
- if (stencilBuffer) {
- int type;
-
- type = -1;
- glGenRenderbuffersEXT(1, stencil_rb);
- glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, stencil_rb[0]);
- glRenderbufferStorageEXT
- (GL_RENDERBUFFER_EXT,
- GL_STENCIL_INDEX,
- TEXSIZE, height);
- glFramebufferRenderbufferEXT
- (GL_FRAMEBUFFER_EXT,
- GL_STENCIL_ATTACHMENT_EXT,
- GL_RENDERBUFFER_EXT,
- stencil_rb[0]);
- glGetFramebufferAttachmentParameterivEXT
- (GL_FRAMEBUFFER_EXT,
- GL_STENCIL_ATTACHMENT_EXT,
- GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT,
- &type);
- if (type != GL_RENDERBUFFER_EXT) {
- REPORT_FAILURE("Get Framebuffer attached object type failed");
- printf("glGetFramebufferParameterivEXT: %s\n", piglit_get_gl_error_name(glGetError()));
- printf("type = %d\n", type);
- return false;
- }
- }
-
- switch (textureModes[mode]) {
- case GL_TEXTURE_1D:
- int name;
-
- name = -1;
- glFramebufferTexture1DEXT
- (GL_FRAMEBUFFER_EXT,
- GL_COLOR_ATTACHMENT0_EXT,
- GL_TEXTURE_1D,
- textures[0], 0);
- glGetFramebufferAttachmentParameterivEXT
- (GL_FRAMEBUFFER_EXT,
- GL_COLOR_ATTACHMENT0_EXT,
- GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT,
- &name);
- if ((GLuint)name != textures[0]) {
- REPORT_FAILURE("Get Framebuffer attached texture name failed");
- printf("glGetFramebufferParameterivEXT: %s\n", piglit_get_gl_error_name(glGetError()));
- printf("name = %d\n", name);
- return false;
- }
-
- break;
- case GL_TEXTURE_2D:
- int level;
-
- level = -1;
- glFramebufferTexture2DEXT
- (GL_FRAMEBUFFER_EXT,
- GL_COLOR_ATTACHMENT0_EXT,
- GL_TEXTURE_2D,
- textures[0], 0);
- glGetFramebufferAttachmentParameterivEXT
- (GL_FRAMEBUFFER_EXT,
- GL_COLOR_ATTACHMENT0_EXT,
- GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT,
- &level);
- if (level != 0) {
- REPORT_FAILURE("Get Framebuffer attached texture level failed");
- printf("glGetFramebufferParameterivEXT: %s\n", piglit_get_gl_error_name(glGetError()));
- printf("level = %d\n", level);
- return false;
- }
-
- break;
- case GL_TEXTURE_3D:
- int zoffset;
-
- zoffset = -1;
- glFramebufferTexture3DEXT
- (GL_FRAMEBUFFER_EXT,
- GL_COLOR_ATTACHMENT0_EXT,
- GL_TEXTURE_3D,
- textures[0],
- 0,
- maxzoffset-1);
-
- glGetFramebufferAttachmentParameterivEXT
- (GL_FRAMEBUFFER_EXT,
- GL_COLOR_ATTACHMENT0_EXT,
- GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT,
- &zoffset);
-
- if (zoffset != maxzoffset-1) {
- REPORT_FAILURE("Get Framebuffer attached 3D texture z-offset failed");
- printf("glGetFramebufferParameterivEXT: %s\n", piglit_get_gl_error_name(glGetError()));
- printf("zoffset = %d\n", zoffset);
- return false;
- }
- break;
- case GL_TEXTURE_CUBE_MAP:
- int face = 0;
-
- glFramebufferTexture2DEXT
- (GL_FRAMEBUFFER_EXT,
- GL_COLOR_ATTACHMENT0_EXT,
- GL_TEXTURE_CUBE_MAP_POSITIVE_Z,
- textures[0], 0);
- glGetFramebufferAttachmentParameterivEXT
- (GL_FRAMEBUFFER_EXT,
- GL_COLOR_ATTACHMENT0_EXT,
- GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT,
- &face);
- if (face !=
- GL_TEXTURE_CUBE_MAP_POSITIVE_Z)
- {
- REPORT_FAILURE("Get Framebuffer attached cube map face failed");
- printf("glGetFramebufferParameterivEXT: %s\n", piglit_get_gl_error_name(glGetError()));
- printf("face = %d\n", face);
- return false;
- }
-
- break;
- }
-
- status = CheckFramebufferStatus("FBOTest::testRender2SingleTexture", __LINE__);
- }
- else {
- status = GL_FRAMEBUFFER_COMPLETE_EXT;
- }
-
-
- if (status != GL_FRAMEBUFFER_COMPLETE_EXT) {
- glDeleteTextures(1, textures);
- if (useFramebuffer)
- glDeleteFramebuffersEXT(1, fbs);
- if (depthBuffer)
- glDeleteRenderbuffersEXT(1, depth_rb);
- if (stencilBuffer)
- glDeleteRenderbuffersEXT(1, stencil_rb);
- continue;
- }
-
- //
- // Render, test the results
- //
-
- if (depthBuffer) {
- glClear(GL_DEPTH_BUFFER_BIT);
- // Init depth buffer
- glEnable(GL_DEPTH_TEST);
- glDepthFunc(GL_ALWAYS);
- glBegin(GL_POLYGON);
- glVertex3f(TEXSIZE / 4, 0, 0.3);
- glVertex3f(TEXSIZE * 5 / 8, 0, 0.3);
- glVertex3f(TEXSIZE * 5 / 8, TEXSIZE, 0.3);
- glVertex3f(TEXSIZE / 4, TEXSIZE, 0.3);
- glEnd();
- glDepthFunc(GL_LESS);
- }
-
- if (stencilBuffer) {
- glClear(GL_STENCIL_BUFFER_BIT);
- // Init stencil buffer
- glEnable(GL_STENCIL_TEST);
- glStencilFunc(GL_ALWAYS, 0x1, 0x1);
- glStencilOp(GL_KEEP,
- GL_KEEP, GL_REPLACE);
- glBegin(GL_POLYGON);
- glVertex3f(TEXSIZE / 2, 0, 0.3);
- glVertex3f(TEXSIZE * 7 / 8, 0, 0.3);
- glVertex3f(TEXSIZE * 7 / 8, TEXSIZE, 0.3);
- glVertex3f(TEXSIZE / 2, TEXSIZE, 0.3);
- glEnd();
- glStencilFunc(GL_NOTEQUAL, 0x1, 0x1);
- }
-
- // Render to the texture
- glBindTexture(textureModes[mode], 0);
- glDisable(textureModes[mode]);
- glColor4fv(colors[RED]);
- glClearColor(0.0, 0.0, 0.0, 0.0);
- glClear(GL_COLOR_BUFFER_BIT);
-
- glBegin(GL_POLYGON);
- glVertex3f(0, 0, 0.2);
- glVertex3f(TEXSIZE, 0, 0.2);
- glVertex3f(TEXSIZE, TEXSIZE, 0.2);
- glVertex3f(0, TEXSIZE, 0.2);
- glEnd();
-
- // Render to the window
- glEnable(textureModes[mode]);
- glBindTexture(textureModes[mode],
- textures[0]);
- if (useFramebuffer) {
- glBindFramebufferEXT
- (GL_FRAMEBUFFER_EXT, 0);
- glBindTexture(textureModes
- [mode], textures[0]);
- }
- else {
- switch (textureModes[mode]) {
- case GL_TEXTURE_1D:
- glCopyTexImage1D
- (GL_TEXTURE_1D,
- 0, GL_RGB,
- 0, 0, TEXSIZE, 0);
- break;
- case GL_TEXTURE_2D:
- glCopyTexImage2D
- (GL_TEXTURE_2D,
- 0, GL_RGB,
- 0, 0,
- TEXSIZE,
- TEXSIZE, 0);
- break;
- case GL_TEXTURE_3D:
- glCopyTexSubImage3D
- (GL_TEXTURE_3D,
- 0, 0, 0,
- 0, 0, 0,
- TEXSIZE, TEXSIZE);
- break;
- case GL_TEXTURE_CUBE_MAP:
- glCopyTexImage2D
- (GL_TEXTURE_CUBE_MAP_POSITIVE_Z,
- 0, GL_RGB,
- 0, 0,
- TEXSIZE,
- TEXSIZE, 0);
- default:
- break;
- }
- }
- if (depthBuffer)
- glDisable(GL_DEPTH_TEST);
- if (stencilBuffer)
- glDisable(GL_STENCIL_TEST);
-
- glEnable(textureModes[mode]);
- glColor4fv(colors[WHITE]);
- glClearColor(0.0, 0.0, 0.0, 0.0);
- glClear(GL_COLOR_BUFFER_BIT);
-
- glTexParameteri (textureModes[mode], GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameteri (textureModes[mode], GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- glTexParameteri (textureModes[mode], GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
-
- if (textureModes[mode] !=
- GL_TEXTURE_CUBE_MAP) {
- GLfloat depth = 0.99+0.01;
- glBegin(GL_POLYGON);
- glTexCoord3f(0.0, 0.0, depth);
- glVertex2f(0, 0);
- glTexCoord3f(1.0, 0.0, depth);
- glVertex2f(TEXSIZE, 0);
- glTexCoord3f(1.0, 1.0, depth);
- glVertex2f(TEXSIZE, TEXSIZE);
- glTexCoord3f(0.0, 1.0, depth);
- glVertex2f(0, TEXSIZE);
- glEnd();
- }
- else {
- glBegin(GL_POLYGON);
- glTexCoord3f(-1.0, 1.0, 1.0);
- glVertex2f(0, 0);
- glTexCoord3f(1.0, 1.0, 1.0);
- glVertex2f(TEXSIZE, 0);
- glTexCoord3f(1.0, -1.0, 1.0);
- glVertex2f(TEXSIZE, TEXSIZE);
- glTexCoord3f(-1.0, -1.0, 1.0);
- glVertex2f(0, TEXSIZE);
- glEnd();
- }
-
- glDeleteTextures(1, textures);
- if (useFramebuffer)
- glDeleteFramebuffersEXT(1, fbs);
- if (depthBuffer)
- glDeleteRenderbuffersEXT(1, depth_rb);
- if (stencilBuffer)
- glDeleteRenderbuffersEXT(1, stencil_rb);
-
-// getchar();
- if (checkResult(colors[RED], depthBuffer, stencilBuffer) == false) {
- REPORT_FAILURE("Render to single texture failed");
- printf(" mode = %d\n", mode);
- return false;
- }
- }
- }
- }
-
- return true;
-}
-
-
-bool
-FBOTest::testRender2MultiTexture(void)
-{
- int i;
- GLuint fbs[8];
- GLuint textures[8];
- GLint maxColorAttachment = 8;
-
-
- enum { MULTI_FBO, SINGLE_COLOR_ATTACH, MULTI_COLOR_ATTACH };
- int numRender;
- int numFBO;
- int numColorAttach;
- int mode;
-
- reset();
- for (mode = MULTI_FBO; mode < MULTI_COLOR_ATTACH + 1; mode++) {
- if (useFramebuffer) {
- glGetIntegerv(GL_MAX_COLOR_ATTACHMENTS_EXT,
- &maxColorAttachment);
- if (maxColorAttachment < 1) {
- REPORT_FAILURE("Failed to get max color attachment points");
- return false;
- }
- }
-
- numRender = maxColorAttachment;
- numColorAttach = maxColorAttachment;
- if (mode == MULTI_FBO)
- numFBO = maxColorAttachment;
- else
- numFBO = 1;
-
- if (useFramebuffer)
- glGenFramebuffersEXT(numFBO, fbs);
-
- GLint maxTexUnits;
-
- glGetIntegerv(GL_MAX_TEXTURE_UNITS, &maxTexUnits);
- glGenTextures(maxTexUnits, textures);
-
-
- for (i = 0; i < numColorAttach; i++) {
- int idx;
-
- if (i > maxTexUnits - 1)
- idx = maxTexUnits - 1;
- else
- idx = i;
-
- glActiveTexture(GL_TEXTURE0 + idx);
- glBindTexture(GL_TEXTURE_2D, textures[idx]);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB,
- TEXSIZE, TEXSIZE, 0, GL_RGB,
- GL_INT, NULL);
-
- if (useFramebuffer) {
- if (mode == MULTI_FBO)
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbs[i]);
- else
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbs[0]);
-
- if (mode != SINGLE_COLOR_ATTACH)
- glFramebufferTexture2DEXT
- (GL_FRAMEBUFFER_EXT,
- GL_COLOR_ATTACHMENT0_EXT + i,
- GL_TEXTURE_2D,
- textures[idx], 0);
- else
- glFramebufferTexture2DEXT
- (GL_FRAMEBUFFER_EXT,
- GL_COLOR_ATTACHMENT0_EXT,
- GL_TEXTURE_2D,
- textures[idx], 0);
- if (mode != SINGLE_COLOR_ATTACH) {
- glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT + i);
- glReadBuffer(GL_COLOR_ATTACHMENT0_EXT + i);
- }
- else {
- glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT);
- glReadBuffer(GL_COLOR_ATTACHMENT0_EXT);
- }
- CheckFramebufferStatus("FBOTest::testRender2MultiTexture", __LINE__);
- }
- }
-
-
-
- for (i = 0; i < numRender; i++) {
- int idx;
-
- if (i > maxTexUnits - 1)
- idx = maxTexUnits - 1;
- else
- idx = i;
-
-
- if (useFramebuffer) {
- if (mode == MULTI_FBO)
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbs[i]);
- else
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbs[0]);
-
- if (mode == MULTI_COLOR_ATTACH) {
- glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT + idx);
- glReadBuffer(GL_COLOR_ATTACHMENT0_EXT + idx);
- }
-
- CheckFramebufferStatus("FBOTest::testRender2MultiTexture", __LINE__);
- if (mode == SINGLE_COLOR_ATTACH) {
- glFramebufferTexture2DEXT
- (GL_FRAMEBUFFER_EXT,
- GL_COLOR_ATTACHMENT0_EXT,
- GL_TEXTURE_2D,
- textures[idx], 0);
- }
- }
-
- glDisable(GL_TEXTURE_2D);
-
- // Render to the texture
- glColor4fv(colors[RED + i % (WHITE - RED)]);
-
- glClearColor(0.0, 0.0, 0.0, 0.0);
- glClear(GL_COLOR_BUFFER_BIT);
-
- glBegin(GL_POLYGON);
- glVertex3f(0, 0, 1);
- glVertex3f(TEXSIZE, 0, 1);
- glVertex3f(TEXSIZE, TEXSIZE, 1);
- glVertex3f(0, TEXSIZE, 1);
- glEnd();
-
-
- glEnable(GL_TEXTURE_2D);
- if (useFramebuffer) {
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
- glBindTexture(GL_TEXTURE_2D, textures[idx]);
- }
- else {
- glBindTexture(GL_TEXTURE_2D, textures[idx]);
- glCopyTexImage2D(GL_TEXTURE_2D, 0,
- GL_RGB, 0, 0,
- TEXSIZE, TEXSIZE, 0);
- }
-
- }
- // Clean up
- if (useFramebuffer)
- glDeleteFramebuffersEXT(numFBO, fbs);
-
-
- // Render to the window
- for (i = 0; i < numRender; i++) {
- int idx;
-
- if (i > maxTexUnits - 1)
- idx = maxTexUnits - 1;
- else
- idx = i;
-
- glActiveTexture(GL_TEXTURE0 + idx);
- glEnable(GL_TEXTURE_2D);
- glTexParameteri(GL_TEXTURE_2D,
- GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D,
- GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
-
- glColor4fv(colors[WHITE]);
- glClearColor(0.0, 0.0, 0.0, 0.0);
- glClear(GL_COLOR_BUFFER_BIT);
- glBegin(GL_POLYGON);
- glMultiTexCoord2f(GL_TEXTURE0 + idx, 0, 0);
- glVertex3f(0, 0, 1);
- glMultiTexCoord2f(GL_TEXTURE0 + idx, 1, 0);
- glVertex3f(TEXSIZE, 0, 1);
- glMultiTexCoord2f(GL_TEXTURE0 + idx, 1, 1);
- glVertex3f(TEXSIZE, TEXSIZE, 1);
- glMultiTexCoord2f(GL_TEXTURE0 + idx, 0, 1);
- glVertex3f(0, TEXSIZE, 1);
- glEnd();
-
- //Check result
- int exp = (i >= maxTexUnits - 1) ? maxColorAttachment - 1 : i;
-
- if (checkResult(colors[RED + (exp % (WHITE - RED))], 0, 0) == false) {
- glDeleteTextures(maxTexUnits, textures);
-
- REPORT_FAILURE("Render to multi texture failed");
- return false;
- }
-
- glDisable(GL_TEXTURE_2D);
- glActiveTexture(GL_TEXTURE0);
- }
-
- glDeleteTextures(maxTexUnits, textures);
- }
-
- return true;
-}
-
-
-bool
-FBOTest::testRender2depthTexture(void)
-{
- GLuint fbs[2];
- GLuint textures[8];
-
- reset();
- if (useFramebuffer)
- glGenFramebuffersEXT(1, fbs);
-
- glGenTextures(1, textures);
- glBindTexture(GL_TEXTURE_2D, textures[0]);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, TEXSIZE,
- TEXSIZE, 0, GL_DEPTH_COMPONENT, GL_INT, NULL);
-
- if (useFramebuffer) {
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbs[0]);
- glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT,
- GL_DEPTH_ATTACHMENT_EXT,
- GL_TEXTURE_2D, textures[0], 0);
- glDrawBuffer(GL_NONE);
- glReadBuffer(GL_NONE);
-
- CheckFramebufferStatus("FBOTest::testRender2depthTexture", __LINE__);
- }
- glClear(GL_DEPTH_BUFFER_BIT);
- glEnable(GL_DEPTH_TEST);
-
- glDisable(GL_TEXTURE_2D);
-
- // Render to the texture
- glColor4fv(colors[RED]);
- glClearColor(0.0, 0.0, 0.0, 0.0);
- glClear(GL_COLOR_BUFFER_BIT);
- glBegin(GL_POLYGON);
- glVertex3f(TEXSIZE / 4, 0, 0.5);
- glVertex3f(TEXSIZE * 5 / 8, 0, 0.5);
- glVertex3f(TEXSIZE * 5 / 8, TEXSIZE, 0.5);
- glVertex3f(TEXSIZE / 4, TEXSIZE, 0.5);
- glEnd();
-
- if (useFramebuffer) {
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
- glBindTexture(GL_TEXTURE_2D, textures[0]);
- }
- else {
- glBindTexture(GL_TEXTURE_2D, textures[0]);
- glCopyTexImage2D(GL_TEXTURE_2D, 0,
- GL_DEPTH_COMPONENT, 0, 0, TEXSIZE,
- TEXSIZE, 0);
- }
-
- glClear(GL_DEPTH_BUFFER_BIT);
-
- glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE,
- GL_COMPARE_R_TO_TEXTURE);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LESS);
- glTexParameterf(GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE,
- GL_LUMINANCE);
- glEnable(GL_TEXTURE_2D);
- glDisable(GL_DEPTH_TEST);
-
- // Render to the window
- glColor4fv(colors[GREEN]);
- glClearColor(0.0, 0.0, 0.0, 0.0);
- glClear(GL_COLOR_BUFFER_BIT);
- glBegin(GL_POLYGON);
- glTexCoord3f(0, 0, 0.75);
- glVertex2f(0, 0);
- glTexCoord3f(1, 0, 0.75);
- glVertex2f(TEXSIZE, 0);
- glTexCoord3f(1, 1, 0.75);
- glVertex2f(TEXSIZE, TEXSIZE);
- glTexCoord3f(0, 1, 0.75);
- glVertex2f(0, TEXSIZE);
- glEnd();
- glFlush();
-
- // Clean up
- if (useFramebuffer)
- glDeleteFramebuffersEXT(1, fbs);
- glDeleteTextures(1, textures);
-
- // Check result
- if (checkResult(colors[WHITE], 1, 0) == false) {
- REPORT_FAILURE("Render to depth texture failed");
- return false;
- }
-
-
-
- return true;
-}
-
-
-bool
-FBOTest::testRender2MipmapTexture(void)
-{
- int i;
- GLuint fbs[1];
- GLuint textures[1];
-
- reset();
- if (useFramebuffer)
- glGenFramebuffersEXT(1, fbs);
-
- glGenTextures(1, textures);
- glBindTexture(GL_TEXTURE_2D, textures[0]);
-
- if (useFramebuffer)
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbs[0]);
-
- glDisable(GL_TEXTURE_2D);
-
- GLint level = 0;
-
- for (i = TEXSIZE; i > 0; i /= 2, level++) {
- if (useFramebuffer) {
- glTexImage2D(GL_TEXTURE_2D, level, GL_RGB,
- i, i, 0, GL_RGB, GL_INT, NULL);
- glFramebufferTexture2DEXT
- (GL_FRAMEBUFFER_EXT,
- GL_COLOR_ATTACHMENT0_EXT,
- GL_TEXTURE_2D, textures[0], level);
- CheckFramebufferStatus("FBOTest::testRender2MipmapTexture", __LINE__);
-
- glColor4fv(colors[RED + (level % (WHITE - RED))]);
- glClearColor(0.0, 0.0, 0.0, 0.0);
- glClear(GL_COLOR_BUFFER_BIT);
-
- glBegin(GL_POLYGON);
- glVertex3f(0, 0, 1);
- glVertex3f(TEXSIZE, 0, 1);
- glVertex3f(TEXSIZE, TEXSIZE, 1);
- glVertex3f(0, TEXSIZE, 1);
- glEnd();
- }
- else {
- glColor4fv(colors[RED + (level % (WHITE - RED))]);
- glClearColor(0.0, 0.0, 0.0, 0.0);
- glClear(GL_COLOR_BUFFER_BIT);
-
- glBegin(GL_POLYGON);
- glVertex3f(0, 0, 1);
- glVertex3f(TEXSIZE, 0, 1);
- glVertex3f(TEXSIZE, TEXSIZE, 1);
- glVertex3f(0, TEXSIZE, 1);
- glEnd();
-
-
- glTexImage2D(GL_TEXTURE_2D, level, GL_RGB,
- i, i, 0, GL_RGB, GL_INT, NULL);
- glCopyTexImage2D(GL_TEXTURE_2D, level,
- GL_RGB, 0, 0, i, i, 0);
- }
- }
-
- if (useFramebuffer) {
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
- glBindTexture(GL_TEXTURE_2D, textures[0]);
- }
- glEnable(GL_TEXTURE_2D);
-
- // Render to the window
- glColor4fv(colors[GREEN]);
- glClearColor(0.0, 0.0, 0.0, 0.0);
- glClear(GL_COLOR_BUFFER_BIT);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
- GL_NEAREST_MIPMAP_NEAREST);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
-
- for (i = TEXSIZE; i > 0; i /= 2) {
- glBegin(GL_POLYGON);
- glTexCoord2f(0, 0);
- glVertex3f(windowSize / 2 - i / 2,
- windowSize / 2 - i / 2, 1);
- glTexCoord2f(1, 0);
- glVertex3f(windowSize / 2 + i / 2,
- windowSize / 2 - i / 2, 1);
- glTexCoord2f(1, 1);
- glVertex3f(windowSize / 2 + i / 2,
- windowSize / 2 + i / 2, 1);
- glTexCoord2f(0, 1);
- glVertex3f(windowSize / 2 - i / 2,
- windowSize / 2 + i / 2, 1);
- glEnd();
- }
- glFlush();
-
- // Clean up
- if (useFramebuffer)
- glDeleteFramebuffersEXT(1, fbs);
- glDeleteTextures(1, textures);
-
- // Check result
- level = 0;
- for (i = TEXSIZE; i > 1; i /= 2, level++) {
- GLfloat pixel[3];
-
- glReadPixels(windowSize / 2 - i / 2,
- windowSize / 2 - i / 2, 1, 1, GL_RGB,
- GL_FLOAT, pixel);
- if (!equalColors
- (pixel, colors[RED + (level % (WHITE - RED))])) {
- REPORT_FAILURE("Render to mipmap texture failed");
- printf(" level = %d\n", level);
- return false;
- }
- }
-
-
- return true;
-}
-
-
-bool
-FBOTest::testErrorHandling(void)
-{
- GLuint fbs[1];
- GLuint textures[2];
- GLuint renderbuffer;
- GLenum status;
- bool have_ARB_ES2 = GLUtils::haveExtension("GL_ARB_ES2_compatibility");
-
- if (useFramebuffer) {
- GLuint maxColorAttachment;
-
- glGetIntegerv(GL_MAX_COLOR_ATTACHMENTS_EXT, (GLint *) & maxColorAttachment);
- if (maxColorAttachment < 1) {
- REPORT_FAILURE("Failed to get max color attachment points");
- return false;
- }
-
-
- // At least one image attached to the framebuffer
- glGenFramebuffersEXT(1, fbs);
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbs[0]);
- glDrawBuffer(GL_NONE);
- glReadBuffer(GL_NONE);
- status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
- glDeleteFramebuffersEXT(1, fbs);
- if (status !=
- GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT) {
- REPORT_FAILURE
- ("If no image is attached to framebuffer, status should be GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT");
- return false;
- }
-
- // All attached images have the same width and height,
- // unless GL_ARB_framebuffer object is supported.
- glGenFramebuffersEXT(1, fbs);
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbs[0]);
- glGenTextures(2, textures);
- glBindTexture(GL_TEXTURE_2D, textures[0]);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, TEXSIZE,
- TEXSIZE, 0, GL_RGB, GL_INT, NULL);
- glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT,
- GL_COLOR_ATTACHMENT0_EXT,
- GL_TEXTURE_2D, textures[0], 0);
- glBindTexture(GL_TEXTURE_2D, textures[1]);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, TEXSIZE / 2,
- TEXSIZE / 2, 0, GL_RGB, GL_INT, NULL);
- glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT,
- GL_COLOR_ATTACHMENT0_EXT
- + maxColorAttachment - 1,
- GL_TEXTURE_2D, textures[1], 0);
- status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
- glDeleteFramebuffersEXT(1, fbs);
- glDeleteTextures(2, textures);
- if (!haveARBfbo &&
- status != GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT) {
- REPORT_FAILURE
- ("If renderbuffer sizes don't all match, status should be GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT");
- return false;
- }
-
- // All images attached to the attachment points
- // COLOR_ATTACHMENT0_EXT through COLOR_ATTACHMENTn_EXT must
- // have the same internal format, unless ARB_fbo is supported.
- glGenFramebuffersEXT(1, fbs);
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbs[0]);
- glGenTextures(2, textures);
- glBindTexture(GL_TEXTURE_2D, textures[0]);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, TEXSIZE,
- TEXSIZE, 0, GL_RGB, GL_INT, NULL);
- glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT,
- GL_COLOR_ATTACHMENT0_EXT,
- GL_TEXTURE_2D, textures[0], 0);
- glBindTexture(GL_TEXTURE_2D, textures[1]);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, TEXSIZE,
- TEXSIZE, 0, GL_RGBA, GL_INT, NULL);
- glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT,
- GL_COLOR_ATTACHMENT0_EXT
- + maxColorAttachment - 1,
- GL_TEXTURE_2D, textures[1], 0);
- status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
- glDeleteFramebuffersEXT(1, fbs);
- glDeleteTextures(2, textures);
- if (!haveARBfbo &&
- status != GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT) {
- REPORT_FAILURE
- ("All color renderbuffers must be of same format, status should be GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT");
- return false;
- }
-
-
- // The value of FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT must not
- // be NONE for any color attachment point(s) named by
- // DRAW_BUFFERi.
- // [Note: to avoid being caught by the no-attachments
- // case above, we attach a depth renderbuffer.]
- glGenFramebuffersEXT(1, fbs);
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbs[0]);
- glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT +
- maxColorAttachment - 1);
- glGenRenderbuffers(1, &renderbuffer);
- glBindRenderbuffer(GL_RENDERBUFFER_EXT, renderbuffer);
- glRenderbufferStorage(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT24,
- TEXSIZE, TEXSIZE);
- glFramebufferRenderbuffer(GL_FRAMEBUFFER_EXT,
- GL_DEPTH_ATTACHMENT_EXT,
- GL_RENDERBUFFER_EXT,
- renderbuffer);
- status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
- glDeleteFramebuffersEXT(1, fbs);
- glDeleteTextures(1, textures);
- glDeleteRenderbuffers(1, &renderbuffer);
- if (status != GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT &&
- !have_ARB_ES2) {
- REPORT_FAILURE
- ("All any buffer named by glDrawBuffers is missing, status should be GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT");
- return false;
- }
-
- // If READ_BUFFER is not NONE, then the value of
- // FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT must not be NONE for
- // the color attachment point named by READ_BUFFER.
- // [Note: to avoid being caught by the no-attachments
- // case above, we attach a depth renderbuffer.]
- glGenFramebuffersEXT(1, fbs);
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbs[0]);
- glDrawBuffer(GL_NONE);
- glReadBuffer(GL_COLOR_ATTACHMENT0_EXT +
- maxColorAttachment - 1);
- glGenRenderbuffers(1, &renderbuffer);
- glBindRenderbuffer(GL_RENDERBUFFER_EXT, renderbuffer);
- glRenderbufferStorage(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT24,
- TEXSIZE, TEXSIZE);
- glFramebufferRenderbuffer(GL_FRAMEBUFFER_EXT,
- GL_DEPTH_ATTACHMENT_EXT,
- GL_RENDERBUFFER_EXT,
- renderbuffer);
- status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
- glDeleteFramebuffersEXT(1, fbs);
- glDeleteRenderbuffers(1, &renderbuffer);
- if (status != GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT &&
- !have_ARB_ES2) {
- REPORT_FAILURE
- ("If buffer named by glReadBuffers is missing, status should be GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT");
- return false;
- }
- }
- return true;
-}
-
-void
-FBOTest::runOne(MultiTestResult & r, Window & w)
-{
- (void) w;
-
- if (!setup()) {
- r.pass = false;
- return;
- }
-
- static SubTestFunc funcs[] = {
- &GLEAN::FBOTest::testSanity,
- &GLEAN::FBOTest::testRender2SingleTexture,
- &GLEAN::FBOTest::testRender2MultiTexture,
- &GLEAN::FBOTest::testRender2depthTexture,
- &GLEAN::FBOTest::testRender2MipmapTexture,
- &GLEAN::FBOTest::testErrorHandling,
- NULL
- };
-
- for (int i = 0; funcs[i]; i++)
- if ((this->*funcs[i]) ())
- r.numPassed++;
- else
- r.numFailed++;
-
- r.pass = (r.numFailed == 0);
-}
-
-
-// The test object itself:
-FBOTest fboTest("fbo", "window, rgb, z", "", // no extension filter
- "fbo test: Test OpenGL Extension GL_EXT_framebuffer_object\n");
-
-
-
-} // namespace GLEAN
diff --git a/tests/glean/tfbo.h b/tests/glean/tfbo.h
deleted file mode 100644
index 5f8b71965..000000000
--- a/tests/glean/tfbo.h
+++ /dev/null
@@ -1,83 +0,0 @@
-// BEGIN_COPYRIGHT -*- glean -*-
-//
-// Copyrigth (C) 2007 Intel Corporation
-// 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
-//
-// Authors:
-// Shuang He <shuang.he@intel.com>
-//
-// tfbo.h: Test OpenGL Extension GL_EXT_framebuffer_objec
-
-#ifndef __tfbo_h__
-#define __tfbo_h__
-
-#include "tmultitest.h"
-
-namespace GLEAN {
-
-#define windowSize 100
-
-
-class FBOTest: public MultiTest
-{
-public:
- FBOTest(const char* testName, const char* filter,
- const char *extensions, const char* description):
- MultiTest(testName, filter, extensions, description),
- haveARBfbo(false),
- tolerance()
- {
- }
-
- virtual void runOne(MultiTestResult &r, Window &w);
-
-private:
- typedef bool (FBOTest::*TestFunc)(MultiTestResult &r);
- typedef bool (FBOTest::*SubTestFunc)(void);
-
- GLboolean haveARBfbo; // GL_ARB_framebuffer_object supported?
- GLfloat tolerance[5];
- void reset(void);
- bool testSanity(void);
- bool testRender2SingleTexture(void);
- bool testRender2MultiTexture(void);
- bool testRender2depthTexture(void);
- bool testRender2MipmapTexture(void);
- bool testErrorHandling(void);
-
-
- bool setup(void);
- bool checkResult(const GLfloat exp[4], const int depth, const int stencil) const;
- bool equalColors(const GLfloat a[4], const GLfloat b[4]) const;
-
- void reportFailure(const char *msg, int line) const;
- void reportFailure(const char *msg, GLenum target, int line) const;
-};
-
-} // namespace GLEAN
-
-#endif // __tfbo_h__
diff --git a/tests/glean/tfragprog1.cpp b/tests/glean/tfragprog1.cpp
deleted file mode 100644
index 837382c14..000000000
--- a/tests/glean/tfragprog1.cpp
+++ /dev/null
@@ -1,1125 +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
-
-// tfragprog.cpp: Test GL_ARB_fragment_program extension.
-// Brian Paul 22 October 2005
-//
-// This is pretty simple. Specific fragment programs are run, we read back
-// the framebuffer color and compare the color to the expected result.
-// Pretty much any fragment program can be tested in the manner.
-// Ideally, an additional fragment program test should be developed which
-// exhaustively tests instruction combinations with all the various swizzle
-// and masking options, etc.
-// But this test is good for regression testing to be sure that particular or
-// unique programs work correctly.
-
-#include <cstdlib>
-#include <cstring>
-#include <cassert>
-#include <cmath>
-#include <math.h>
-#include "tfragprog1.h"
-
-
-namespace GLEAN {
-
-// Clamp X to [0, 1]
-#define CLAMP01( X ) ( (X)<(0.0) ? (0.0) : ((X)>(1.0) ? (1.0) : (X)) )
-// Absolute value
-#define ABS(X) ( (X) < 0.0 ? -(X) : (X) )
-// Max
-#define MAX( A, B ) ( (A) > (B) ? (A) : (B) )
-// Min
-#define MIN( A, B ) ( (A) < (B) ? (A) : (B) )
-// Duplicate value four times
-#define SMEAR(X) (X), (X), (X), (X)
-
-#define DONT_CARE_Z -1.0
-#define DONT_CARE_COLOR -1.0
-
-#define FRAGCOLOR { 0.25, 0.75, 0.5, 0.25 }
-#define PARAM0 { 0.0, 0.0, 0.0, 0.0 }
-#define PARAM1 { 0.5, 0.25, 1.0, 0.5 }
-#define PARAM2 { -1.0, 0.0, 0.25, -0.5 }
-static const GLfloat FragColor[4] = FRAGCOLOR;
-static const GLfloat Param0[4] = PARAM0;
-static const GLfloat Param1[4] = PARAM1;
-static const GLfloat Param2[4] = PARAM2;
-static GLfloat InfNan[4];
-static GLfloat FogColor[4] = {1.0, 1.0, 0.0, 0.0};
-static GLfloat FogStart = 10.0;
-static GLfloat FogEnd = 100.0;
-static GLfloat FogDensity = 0.03;
-static GLfloat FogCoord = 50.0; /* Between FogStart and FogEnd */
-
-
-// These are the specific fragment programs which we'll test
-// Alphabetical order, please
-static const FragmentProgram Programs[] = {
- {
- "ABS test",
- "!!ARBfp1.0\n"
- "PARAM p = program.local[2]; \n"
- "ABS result.color, p; \n"
- "END \n",
- { ABS(Param2[0]),
- ABS(Param2[1]),
- ABS(Param2[2]),
- ABS(Param2[3])
- },
- DONT_CARE_Z,
- },
- {
- "ADD test",
- "!!ARBfp1.0\n"
- "PARAM p = program.local[1]; \n"
- "ADD result.color, fragment.color, p; \n"
- "END \n",
- { CLAMP01(FragColor[0] + Param1[0]),
- CLAMP01(FragColor[1] + Param1[1]),
- CLAMP01(FragColor[2] + Param1[2]),
- CLAMP01(FragColor[3] + Param1[3])
- },
- DONT_CARE_Z
- },
- {
- "ADD with saturation",
- "!!ARBfp1.0\n"
- "PARAM p = program.local[1]; \n"
- "TEMP t; \n"
- "ADD t, p, p; \n"
- "ADD_SAT result.color, t, p; \n"
- "END \n",
- { CLAMP01(Param1[0] + Param1[0] + Param1[0]),
- CLAMP01(Param1[1] + Param1[1] + Param1[1]),
- CLAMP01(Param1[2] + Param1[2] + Param1[2]),
- CLAMP01(Param1[3] + Param1[3] + Param1[3]),
- },
- DONT_CARE_Z
- },
-
- {
- "ADD an immediate",
- "!!ARBfp1.0\n"
- "PARAM p = program.local[1]; \n"
- "ADD result.color, p, {0.25, 0.0, 0.5, 0.25}; \n"
- "END \n",
- { CLAMP01(Param1[0] + 0.25),
- CLAMP01(Param1[1] + 0.0),
- CLAMP01(Param1[2] + 0.5),
- CLAMP01(Param1[3] + 0.25),
- },
- DONT_CARE_Z
- },
-
- {
- "ADD negative immediate",
- "!!ARBfp1.0\n"
- "PARAM p = program.local[1]; \n"
- "ADD result.color, p, {-0.25, -0.2, 0.0, -0.25}; \n"
- "END \n",
- { CLAMP01(Param1[0] - 0.25),
- CLAMP01(Param1[1] - 0.2),
- CLAMP01(Param1[2] - 0.0),
- CLAMP01(Param1[3] - 0.25),
- },
- DONT_CARE_Z
- },
-
- {
- "ADD negative immediate (2)",
- "!!ARBfp1.0\n"
- "PARAM p = program.local[1]; \n"
- "TEMP t; \n"
- "MOV t, p; \n"
- "MUL t.xyz, t, 2.0; \n"
- "ADD t.xyz, t, -1.0; \n"
- "MOV result.color, t; \n"
- "END \n",
- { CLAMP01(Param1[0] * 2.0 - 1.0),
- CLAMP01(Param1[1] * 2.0 - 1.0),
- CLAMP01(Param1[2] * 2.0 - 1.0),
- CLAMP01(Param1[3] ),
- },
- DONT_CARE_Z
- },
-
- {
- "CMP test",
- "!!ARBfp1.0\n"
- "PARAM zero = program.local[0]; \n"
- "PARAM p1 = program.local[1]; \n"
- "PARAM p2 = program.local[2]; \n"
- "CMP result.color, p2, zero, p1; \n"
- "END \n",
- { Param0[0], Param1[1], Param1[2], Param0[3] },
- DONT_CARE_Z
- },
- {
- "COS test",
- "!!ARBfp1.0\n"
- "PARAM values = { 0.0, 3.14159, 0.5, 1.0 }; \n"
- "COS result.color.x, values.x; \n"
- "COS result.color.y, values.y; \n"
- "COS result.color.z, values.z; \n"
- "COS result.color.w, values.w; \n"
- "END \n",
- { CLAMP01(1.0),
- CLAMP01(-1.0),
- CLAMP01(0.8775),
- CLAMP01(0.5403)
- },
- DONT_CARE_Z
- },
- {
- "COS test 2",
- "!!ARBfp1.0\n"
- "PARAM values = { 6.78318, 7.28318, 6.28318, -5.78318 }; \n"
- "COS result.color.x, values.x; \n"
- "COS result.color.y, values.y; \n"
- "COS result.color.z, values.z; \n"
- "COS result.color.w, values.w; \n"
- "END \n",
- { CLAMP01(0.8775),
- CLAMP01(0.5403),
- CLAMP01(1.0),
- CLAMP01(0.8775)
- },
- DONT_CARE_Z
- },
- {
- "DP3 test",
- "!!ARBfp1.0\n"
- "PARAM p1 = program.local[1]; \n"
- "DP3 result.color, p1, fragment.color; \n"
- "END \n",
- { SMEAR(CLAMP01(Param1[0] * FragColor[0] +
- Param1[1] * FragColor[1] +
- Param1[2] * FragColor[2]))
- },
- DONT_CARE_Z
- },
- {
- "DP3 test (2)",
- "!!ARBfp1.0\n"
- "PARAM p1 = program.local[1]; \n"
- "TEMP t, r; \n"
- "MOV t, p1; \n"
- "DP3 r.x, t, t; \n"
- "MUL result.color, r.xxxx, 0.5; \n"
- "END \n",
- { SMEAR(CLAMP01((Param1[0] * Param1[0] +
- Param1[1] * Param1[1] +
- Param1[2] * Param1[2]) * 0.5))
- },
- DONT_CARE_Z
- },
- {
- "DP4 test",
- "!!ARBfp1.0\n"
- "PARAM p1 = program.local[1]; \n"
- "DP4 result.color, p1, fragment.color; \n"
- "END \n",
- { SMEAR(CLAMP01(Param1[0] * FragColor[0] +
- Param1[1] * FragColor[1] +
- Param1[2] * FragColor[2] +
- Param1[3] * FragColor[3]))
- },
- DONT_CARE_Z
- },
- {
- "DPH test",
- "!!ARBfp1.0\n"
- "PARAM p1 = program.local[1]; \n"
- "PARAM scale = {0.1, 0.1, 0.1, 0.1}; \n"
- "TEMP t; \n"
- "DPH t, p1, fragment.color; \n"
- "MUL result.color, t, scale; \n"
- "END \n",
- { SMEAR(CLAMP01((Param1[0] * FragColor[0] +
- Param1[1] * FragColor[1] +
- Param1[2] * FragColor[2] +
- FragColor[3]) * 0.1))
- },
- DONT_CARE_Z
- },
- {
- "DST test",
- "!!ARBfp1.0\n"
- "# let d = 0.4 \n"
- "PARAM v1 = {9.9, 0.16, 0.16, 9.9}; \n"
- "PARAM v2 = {9.9, 2.5, 9.9, 2.5}; \n"
- "DST result.color, v1, v2; \n"
- "END \n",
- { 1.0,
- 0.4, // v1.y * v2.y
- 0.16, // v1.z
- CLAMP01(2.5) // v2.w
- },
- DONT_CARE_Z
- },
- {
- "EX2 test",
- "!!ARBfp1.0\n"
- "PARAM scale = {0.01, 0.01, 0.01, 0.01}; \n"
- "PARAM values = {0.0, 1.0, 4.0, -2.0 }; \n"
- "TEMP t; \n"
- "EX2 t.x, values.x; \n"
- "EX2 t.y, values.y; \n"
- "EX2 t.z, values.z; \n"
- "EX2 t.w, values.w; \n"
- "MUL result.color, t, scale; \n"
- "END \n",
- { 1.0 * 0.01,
- 2.0 * 0.01,
- 16.0 * 0.01,
- 0.25 * 0.01 },
- DONT_CARE_Z
- },
- {
- "FLR test",
- "!!ARBfp1.0\n"
- "PARAM values = {4.8, 0.3, -0.2, 1.2}; \n"
- "PARAM scale = {0.1, 0.1, 0.1, 0.1}; \n"
- "TEMP t; \n"
- "FLR t, values; \n"
- "MUL result.color, t, scale; \n"
- "END \n",
- { 0.4,
- 0.0,
- CLAMP01(-0.1),
- 0.1
- },
- DONT_CARE_Z
- },
- {
- "FRC test",
- "!!ARBfp1.0\n"
- "PARAM values = {-1.1, 0.1, -2.2, 2.4 }; \n"
- "FRC result.color, values; \n"
- "END \n",
- { 0.9, 0.1, 0.8, 0.4 },
- DONT_CARE_Z
- },
- {
- "LG2 test",
- "!!ARBfp1.0\n"
- "PARAM values = {64.0, 1, 30, 4}; \n"
- "PARAM scale = {0.1, 0.1, 0.1, 0.1}; \n"
- "TEMP t; \n"
- "LG2 t.x, values.x; \n"
- "LG2 t.y, values.y; \n"
- "LG2 t.z, values.z; \n"
- "LG2 t.w, values.w; \n"
- "MUL result.color, t, scale; \n"
- "END \n",
- { 0.6,
- 0.0,
- 0.49,
- 0.2
- },
- DONT_CARE_Z
- },
- {
- "LIT test 1",
- "!!ARBfp1.0\n"
- "PARAM values = {0.65, 0.9, 0.0, 8.0}; \n"
- "LIT result.color, values; \n"
- "END \n",
- { 1.0,
- 0.65, // values.x
- 0.433, // roughly Pow(values.y, values.w)
- 1.0
- },
- DONT_CARE_Z
- },
- {
- "LIT test 2 (degenerate case: 0 ^ 0 -> 1)",
- "!!ARBfp1.0\n"
- "PARAM values = {0.65, 0.0, 0.0, 0.0}; \n"
- "LIT result.color, values; \n"
- "END \n",
- { 1.0,
- 0.65, // values.x
- 1.0, // 0^0
- 1.0
- },
- DONT_CARE_Z
- },
- {
- "LIT test 3 (case x < 0)",
- "!!ARBfp1.0\n"
- "PARAM values = {-0.5, 0.0, 0.0, 0.0}; \n"
- "LIT result.color, values; \n"
- "END \n",
- { 1.0,
- CLAMP01(-0.5), // values.x
- 0.0,
- 1.0
- },
- DONT_CARE_Z
- },
- {
- "LRP test",
- "!!ARBfp1.0\n"
- "PARAM p1 = program.local[1]; \n"
- "PARAM t = {0.2, 0.5, 1.0, 0.0}; \n"
- "LRP result.color, t, fragment.color, p1; \n"
- "END \n",
- { 0.2 * FragColor[0] + (1.0 - 0.2) * Param1[0],
- 0.5 * FragColor[1] + (1.0 - 0.5) * Param1[1],
- 1.0 * FragColor[2] + (1.0 - 1.0) * Param1[2],
- 0.0 * FragColor[3] + (1.0 - 0.0) * Param1[3]
- },
- DONT_CARE_Z
- },
- {
- "MAD test",
- "!!ARBfp1.0\n"
- "PARAM p1 = program.local[1]; \n"
- "PARAM p2 = program.local[2]; \n"
- "MAD result.color, fragment.color, p1, p2; \n"
- "END \n",
- { CLAMP01(FragColor[0] * Param1[0] + Param2[0]),
- CLAMP01(FragColor[1] * Param1[1] + Param2[1]),
- CLAMP01(FragColor[2] * Param1[2] + Param2[2]),
- CLAMP01(FragColor[3] * Param1[3] + Param2[3])
- },
- DONT_CARE_Z
- },
- {
- "MAX test",
- "!!ARBfp1.0\n"
- "PARAM p1 = program.local[1]; \n"
- "PARAM p2 = program.local[2]; \n"
- "MAX result.color, p1, p2; \n"
- "END \n",
- { MAX(Param1[0], Param2[0]),
- MAX(Param1[1], Param2[1]),
- MAX(Param1[2], Param2[2]),
- MAX(Param1[3], Param2[3]),
- },
- DONT_CARE_Z
- },
- {
- "MIN test",
- "!!ARBfp1.0\n"
- "PARAM p1 = program.local[1]; \n"
- "MIN result.color, p1, fragment.color; \n"
- "END \n",
- { MIN(Param1[0], FragColor[0]),
- MIN(Param1[1], FragColor[1]),
- MIN(Param1[2], FragColor[2]),
- MIN(Param1[3], FragColor[3]),
- },
- DONT_CARE_Z
- },
- {
- "MOV test",
- "!!ARBfp1.0\n"
- "MOV result.color, fragment.color; \n"
- "END \n",
- FRAGCOLOR,
- DONT_CARE_Z,
- },
- {
- "MUL test",
- "!!ARBfp1.0\n"
- "PARAM p = program.local[1]; \n"
- "MUL result.color, fragment.color, p; \n"
- "END \n",
- { CLAMP01(FragColor[0] * Param1[0]),
- CLAMP01(FragColor[1] * Param1[1]),
- CLAMP01(FragColor[2] * Param1[2]),
- CLAMP01(FragColor[3] * Param1[3])
- },
- DONT_CARE_Z
- },
- {
- "masked MUL test",
- "!!ARBfp1.0\n"
- "PARAM zero = program.local[0]; \n"
- "PARAM p = program.local[1]; \n"
- "MOV result.color, zero; \n"
- "MUL result.color.xy, fragment.color, p; \n"
- "END \n",
- { CLAMP01(FragColor[0] * Param1[0]),
- CLAMP01(FragColor[1] * Param1[1]),
- 0.0,
- 0.0
- },
- DONT_CARE_Z
- },
- {
- "POW test (exponentiation)",
- "!!ARBfp1.0\n"
- "PARAM values = {0.5, 2, 3, 4}; \n"
- "POW result.color.x, values.x, values.y; \n"
- "POW result.color.y, values.x, values.z; \n"
- "POW result.color.z, values.x, values.w; \n"
- "POW result.color.w, values.w, values.x; \n"
- "END \n",
- { 0.5 * 0.5,
- 0.5 * 0.5 * 0.5,
- 0.5 * 0.5 * 0.5 * 0.5,
- CLAMP01(2.0) },
- DONT_CARE_Z
- },
- {
- "RCP test (reciprocal)",
- "!!ARBfp1.0\n"
- "PARAM values = {8, -10, 1, 12 }; \n"
- "RCP result.color.x, values.x; \n"
- "RCP result.color.y, values.y; \n"
- "RCP result.color.z, values.z; \n"
- "RCP result.color.w, values.w; \n"
- "END \n",
- { 1.0 / 8.0, CLAMP01(1.0 / -10.0), 1, 1.0 / 12.0 },
- DONT_CARE_Z
- },
- {
- /* check that RCP result is replicated across XYZW */
- "RCP test 2 (reciprocal)",
- "!!ARBfp1.0\n"
- "PARAM values = {8, -10, 1, 12 }; \n"
- "MOV result.color, values; \n"
- "RCP result.color, values.x; \n"
- "END \n",
- { 1.0 / 8.0, 1.0 / 8.0, 1.0 / 8.0, 1.0 / 8.0 },
- DONT_CARE_Z
- },
- {
- "RSQ test 1 (reciprocal square root)",
- "!!ARBfp1.0\n"
- "PARAM values = {1, 4, 9, 100 }; \n"
- "RSQ result.color.x, values.x; \n"
- "RSQ result.color.y, values.y; \n"
- "RSQ result.color.z, values.z; \n"
- "RSQ result.color.w, values.w; \n"
- "END \n",
- { 1.0, 0.5, 0.3333, 0.1 },
- DONT_CARE_Z
- },
- {
- "RSQ test 2 (reciprocal square root of negative value)",
- "!!ARBfp1.0\n"
- "PARAM values = {0, -100, -5, -1}; \n"
- "RSQ result.color.x, values.x; \n"
- "RSQ result.color.y, values.y; \n"
- "RSQ result.color.z, values.z; \n"
- "RSQ result.color.w, values.w; \n"
- "END \n",
- { DONT_CARE_COLOR,
- 0.1,
- 0.447,
- 1.0,
- },
- DONT_CARE_Z
- },
- {
- "SCS test",
- "!!ARBfp1.0\n"
- "PARAM values = { 0.5, 0.5, 0.0, 0.0 }; \n"
- "SCS result.color.x, values.x; \n"
- "SCS result.color.y, values.y; \n"
- "END \n",
- { CLAMP01(0.8775),
- CLAMP01(0.4794),
- DONT_CARE_COLOR,
- DONT_CARE_COLOR,
- },
- DONT_CARE_Z
- },
- {
- "SGE test",
- "!!ARBfp1.0\n"
- "PARAM p0 = program.local[0]; \n"
- "PARAM p2 = program.local[2]; \n"
- "SGE result.color, p2, p0; \n"
- "END \n",
- { Param2[0] >= Param0[0] ? 1.0 : 0.0,
- Param2[1] >= Param0[1] ? 1.0 : 0.0,
- Param2[2] >= Param0[2] ? 1.0 : 0.0,
- Param2[3] >= Param0[3] ? 1.0 : 0.0,
- },
- DONT_CARE_Z
- },
- {
- "SIN test",
- "!!ARBfp1.0\n"
- "PARAM values = { 1.57079, -1.57079, 0.5, 1.0 }; \n"
- "SIN result.color.x, values.x; \n"
- "SIN result.color.y, values.y; \n"
- "SIN result.color.z, values.z; \n"
- "SIN result.color.w, values.w; \n"
- "END \n",
- { CLAMP01(1.0),
- CLAMP01(-1.0),
- CLAMP01(0.4794),
- CLAMP01(0.8414)
- },
- DONT_CARE_Z
- },
- {
- "SIN test 2",
- "!!ARBfp1.0\n"
- "PARAM values = { 3.14159, -3.14159, 6.78319, -5.78319 }; \n"
- "SIN result.color.x, values.x; \n"
- "SIN result.color.y, values.y; \n"
- "SIN result.color.z, values.z; \n"
- "SIN result.color.w, values.w; \n"
- "END \n",
- { CLAMP01(0.0),
- CLAMP01(0.0),
- CLAMP01(0.4794),
- CLAMP01(0.4794)
- },
- DONT_CARE_Z
- },
- {
- "SLT test",
- "!!ARBfp1.0\n"
- "PARAM p1 = program.local[1]; \n"
- "SLT result.color, fragment.color, p1; \n"
- "END \n",
- { FragColor[0] < Param1[0] ? 1.0 : 0.0,
- FragColor[1] < Param1[1] ? 1.0 : 0.0,
- FragColor[2] < Param1[2] ? 1.0 : 0.0,
- FragColor[3] < Param1[3] ? 1.0 : 0.0,
- },
- DONT_CARE_Z
- },
- {
- "SUB test (with swizzle)",
- "!!ARBfp1.0\n"
- "PARAM p1 = program.local[1]; \n"
- "SUB result.color, p1.yxwz, fragment.color.yxwz; \n"
- "END \n",
- { CLAMP01(Param1[1] - FragColor[1]),
- CLAMP01(Param1[0] - FragColor[0]),
- CLAMP01(Param1[3] - FragColor[3]),
- CLAMP01(Param1[2] - FragColor[2])
- },
- DONT_CARE_Z
- },
- {
- "SUB with saturation",
- "!!ARBfp1.0\n"
- "PARAM p1 = program.local[1]; \n"
- "PARAM bias = {0.1, 0.1, 0.1, 0.1}; \n"
- "TEMP t; \n"
- "SUB_SAT t, fragment.color, p1; \n"
- "ADD result.color, t, bias; \n"
- "END \n",
- { CLAMP01(FragColor[0] - Param1[1]) + 0.1,
- CLAMP01(FragColor[1] - Param1[1]) + 0.1,
- CLAMP01(FragColor[2] - Param1[2]) + 0.1,
- CLAMP01(FragColor[3] - Param1[3]) + 0.1
- },
- DONT_CARE_Z
- },
- {
- "SWZ test",
- "!!ARBfp1.0\n"
- "PARAM p = program.local[1]; \n"
- "SWZ result.color, p, -1,-y,z,0; \n"
- "END \n",
- { CLAMP01(-1.0),
- CLAMP01(-Param1[1]),
- CLAMP01(Param1[2]),
- CLAMP01(0.0)
- },
- DONT_CARE_Z
- },
- {
- // this test checks that SOA execution is handled correctly
- "swizzled move test",
- "!!ARBfp1.0\n"
- "TEMP t; \n"
- "PARAM p = program.local[1]; \n"
- "MOV t, p; \n"
- "MOV t, t.yxwz; \n" // "in-place" swizzle
- "MOV result.color, t; \n"
- "END \n",
- { Param1[1], Param1[0], Param1[3], Param1[2] },
- DONT_CARE_Z
- },
- {
- // this test checks that SOA execution is handled correctly
- "swizzled add test",
- "!!ARBfp1.0\n"
- "TEMP t; \n"
- "PARAM p = program.local[1]; \n"
- "MOV t, p; \n"
- "ADD t, t, t.yxwz; \n" // "in-place" swizzled add
- "MOV result.color, t; \n"
- "END \n",
- { CLAMP01(Param1[0] + Param1[1]),
- CLAMP01(Param1[1] + Param1[0]),
- CLAMP01(Param1[2] + Param1[3]),
- CLAMP01(Param1[3] + Param1[2]) },
- DONT_CARE_Z
- },
- {
- "XPD test 1",
- "!!ARBfp1.0\n"
- "PARAM p1 = program.local[1]; \n"
- "PARAM p2 = program.local[2]; \n"
- "XPD result.color, p1, p2; \n"
- "END \n",
- { CLAMP01(Param1[1] * Param2[2] - Param1[2] * Param2[1]),
- CLAMP01(Param1[2] * Param2[0] - Param1[0] * Param2[2]),
- CLAMP01(Param1[0] * Param2[1] - Param1[1] * Param2[0]),
- DONT_CARE_COLOR
- },
- DONT_CARE_Z
- },
- {
- "Z-write test",
- "!!ARBfp1.0\n"
- "PARAM p = program.local[1]; \n"
- "MOV result.color, p; \n"
- "MOV result.depth.z, p.y; \n"
- "END \n",
- { Param1[0],
- Param1[1],
- Param1[2],
- Param1[3]
- },
- Param1[1]
- },
-
- // ============= Numeric stress tests =================================
- // Basically just check that we don't crash when we do divides by
- // zero, etc.
- {
- "Divide by zero test",
- "!!ARBfp1.0\n"
- "PARAM zero = program.local[0]; \n"
- "RCP result.color.x, zero.x; \n"
- "RCP result.color.y, zero.y; \n"
- "RCP result.color.z, zero.z; \n"
- "RCP result.color.w, zero.w; \n"
- "END \n",
- { DONT_CARE_COLOR,
- DONT_CARE_COLOR,
- DONT_CARE_COLOR,
- DONT_CARE_COLOR
- },
- DONT_CARE_Z
- },
- {
- "Infinity and nan test",
- "!!ARBfp1.0\n"
- "PARAM zero = program.local[0]; \n"
- "PARAM infNan = program.local[9]; \n"
- "ADD result.color, infNan, zero; \n"
- "END \n",
- { DONT_CARE_COLOR,
- DONT_CARE_COLOR,
- DONT_CARE_COLOR,
- DONT_CARE_COLOR
- },
- DONT_CARE_Z
- },
-
- // ============= Fog tests ============================================
- // Linear fog
-#define FOG_FACT ((FogEnd - FogCoord) / (FogEnd - FogStart))
- {
- "ARB_fog_linear test",
- "!!ARBfp1.0\n"
- "OPTION ARB_fog_linear; \n"
- "MOV result.color, fragment.color; \n"
- "END \n",
- { FragColor[0] * FOG_FACT + FogColor[0] * (1.0 - FOG_FACT),
- FragColor[1] * FOG_FACT + FogColor[1] * (1.0 - FOG_FACT),
- FragColor[2] * FOG_FACT + FogColor[2] * (1.0 - FOG_FACT),
- FragColor[3]
- },
- DONT_CARE_Z
- },
- {
- "Computed fog linear test",
- "!!ARBfp1.0\n"
- "# fogParams.x = density \n"
- "# fogParams.y = start \n"
- "# fogParams.z = end \n"
- "# fogParams.w = 1/(end-start) \n"
- "PARAM fogParams = state.fog.params; \n"
- "ATTRIB fogCoord = fragment.fogcoord; \n"
- "PARAM fogColor = state.fog.color; \n"
- "TEMP numerator, f; \n"
- "# f = (end - coord) / (end - start) \n"
- "SUB numerator, fogParams.z, fogCoord.x; \n"
- "MUL_SAT f, numerator, fogParams.w; \n"
- "LRP result.color.rgb, f, fragment.color, fogColor; \n"
- "MOV result.color.a, fragment.color.a; \n"
- "END \n",
- { FragColor[0] * FOG_FACT + FogColor[0] * (1.0 - FOG_FACT),
- FragColor[1] * FOG_FACT + FogColor[1] * (1.0 - FOG_FACT),
- FragColor[2] * FOG_FACT + FogColor[2] * (1.0 - FOG_FACT),
- FragColor[3]
- },
- DONT_CARE_Z
- },
-#undef FOG_FACT
-
- // Exp fog
-#define FOG_FACT 0.2231 // = exp(-Density * Coord)
- {
- "ARB_fog_exp test",
- "!!ARBfp1.0\n"
- "OPTION ARB_fog_exp; \n"
- "MOV result.color, fragment.color; \n"
- "END \n",
- { FragColor[0] * FOG_FACT + FogColor[0] * (1.0 - FOG_FACT),
- FragColor[1] * FOG_FACT + FogColor[1] * (1.0 - FOG_FACT),
- FragColor[2] * FOG_FACT + FogColor[2] * (1.0 - FOG_FACT),
- FragColor[3]
- },
- DONT_CARE_Z
- },
-#undef FOG_FACT
-#define FOG_FACT 0.3535 // = ex2(-Density * Coord)
- {
- // NOTE: we could also do this with the POW instruction
- "Computed fog exp test",
- "!!ARBfp1.0\n"
- "# fogParams.x = density \n"
- "# fogParams.y = start \n"
- "# fogParams.z = end \n"
- "# fogParams.w = 1/(end-start) \n"
- "PARAM fogParams = state.fog.params; \n"
- "ATTRIB fogCoord = fragment.fogcoord; \n"
- "PARAM fogColor = state.fog.color; \n"
- "TEMP f, dc; \n"
- "# f = exp(-density * coord) \n"
- "MUL dc.x, fogParams.x, fogCoord.x; \n"
- "EX2_SAT f, -dc.x; \n"
- "LRP result.color.rgb, f, fragment.color, fogColor; \n"
- "MOV result.color.a, fragment.color.a; \n"
- "END \n",
- { FragColor[0] * FOG_FACT + FogColor[0] * (1.0 - FOG_FACT),
- FragColor[1] * FOG_FACT + FogColor[1] * (1.0 - FOG_FACT),
- FragColor[2] * FOG_FACT + FogColor[2] * (1.0 - FOG_FACT),
- FragColor[3]
- },
- DONT_CARE_Z
- },
-#undef FOG_FACT
-
- // Exp2 fog
-#define FOG_FACT 0.1054 // = exp(-(Density * Coord)^2)
- {
- "ARB_fog_exp2 test",
- "!!ARBfp1.0\n"
- "OPTION ARB_fog_exp2; \n"
- "MOV result.color, fragment.color; \n"
- "END \n",
- { FragColor[0] * FOG_FACT + FogColor[0] * (1.0 - FOG_FACT),
- FragColor[1] * FOG_FACT + FogColor[1] * (1.0 - FOG_FACT),
- FragColor[2] * FOG_FACT + FogColor[2] * (1.0 - FOG_FACT),
- FragColor[3]
- },
- DONT_CARE_Z
- },
-#undef FOG_FACT
-#define FOG_FACT 0.2102 // = ex2(-(Density * Coord)^2)
- {
- // NOTE: we could also do this with the POW instruction
- "Computed fog exp2 test",
- "!!ARBfp1.0\n"
- "# fogParams.x = density \n"
- "# fogParams.y = start \n"
- "# fogParams.z = end \n"
- "# fogParams.w = 1/(end-start) \n"
- "PARAM fogParams = state.fog.params; \n"
- "ATTRIB fogCoord = fragment.fogcoord; \n"
- "PARAM fogColor = state.fog.color; \n"
- "TEMP f, dc; \n"
- "# f = exp(-(density * coord)^2) \n"
- "MUL dc.x, fogParams.x, fogCoord.x; \n"
- "MUL dc.x, dc.x, dc.x; \n"
- "EX2_SAT f, -dc.x; \n"
- "LRP result.color.rgb, f, fragment.color, fogColor; \n"
- "MOV result.color.a, fragment.color.a; \n"
- "END \n",
- { FragColor[0] * FOG_FACT + FogColor[0] * (1.0 - FOG_FACT),
- FragColor[1] * FOG_FACT + FogColor[1] * (1.0 - FOG_FACT),
- FragColor[2] * FOG_FACT + FogColor[2] * (1.0 - FOG_FACT),
- FragColor[3]
- },
- DONT_CARE_Z
- },
-#undef FOG_FACT
-
- // XXX add lots more tests here!
- { NULL, NULL, {0,0,0,0}, 0 } // end of list sentinal
-};
-
-
-
-void
-FragmentProgramTest::setup(void)
-{
- // setup Infinity, Nan values
- int nan;
- float *nanPtr;
-
- nan = (0xff << 23) | (1 << 0);
- nanPtr = (float *) &nan;
- InfNan[0] = HUGE_VAL;
- InfNan[1] = -HUGE_VAL;
- InfNan[2] = (float) (*nanPtr);
- InfNan[3] = 1.0 / HUGE_VAL;
-
- // get function pointers
-
- GLuint progID;
- glGenProgramsARB(1, &progID);
- glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, progID);
- glEnable(GL_FRAGMENT_PROGRAM_ARB);
-
- // load program inputs
- glColor4fv(FragColor);
- glProgramLocalParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, 0, Param0);
- glProgramLocalParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, 1, Param1);
- glProgramLocalParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, 2, Param2);
- glProgramLocalParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, 9, InfNan);
-
- GLenum err = glGetError();
- assert(!err); // should be OK
-
- // setup vertex transform (we'll draw a quad in middle of window)
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
-#if DEVEL_MODE
- glOrtho(-1.0, 1.0, -1.0, 1.0, 0.0, 1.0);
-#else
- glOrtho(-4.0, 4.0, -4.0, 4.0, 0.0, 1.0);
-#endif
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- glDrawBuffer(GL_FRONT);
- glReadBuffer(GL_FRONT);
-
- // other GL state
- glFogf(GL_FOG_START, FogStart);
- glFogf(GL_FOG_END, FogEnd);
- glFogf(GL_FOG_DENSITY, FogDensity);
- glFogfv(GL_FOG_COLOR, FogColor);
- glFogi(GL_FOG_COORDINATE_SOURCE_EXT, GL_FOG_COORDINATE_EXT);
- glFogCoordf(FogCoord);
-
- // compute error tolerances (may need fine-tuning)
- int bufferBits[5];
- glGetIntegerv(GL_RED_BITS, &bufferBits[0]);
- glGetIntegerv(GL_GREEN_BITS, &bufferBits[1]);
- glGetIntegerv(GL_BLUE_BITS, &bufferBits[2]);
- glGetIntegerv(GL_ALPHA_BITS, &bufferBits[3]);
- glGetIntegerv(GL_DEPTH_BITS, &bufferBits[4]);
-
- tolerance[0] = 2.0 / (1 << bufferBits[0]);
- tolerance[1] = 2.0 / (1 << bufferBits[1]);
- tolerance[2] = 2.0 / (1 << bufferBits[2]);
- if (bufferBits[3])
- tolerance[3] = 2.0 / (1 << bufferBits[3]);
- else
- tolerance[3] = 1.0;
- if (bufferBits[4])
- tolerance[4] = 16.0 / (1 << bufferBits[4]);
- else
- tolerance[4] = 1.0;
-}
-
-
-void
-FragmentProgramTest::reportFailure(const char *programName,
- const GLfloat expectedColor[4],
- const GLfloat actualColor[4] ) const
-{
- env->log << "FAILURE:\n";
- env->log << " Program: " << programName << "\n";
- env->log << " Expected color: ";
- env->log << expectedColor[0] << ", ";
- env->log << expectedColor[1] << ", ";
- env->log << expectedColor[2] << ", ";
- env->log << expectedColor[3] << "\n";
- env->log << " Observed color: ";
- env->log << actualColor[0] << ", ";
- env->log << actualColor[1] << ", ";
- env->log << actualColor[2] << ", ";
- env->log << actualColor[3] << "\n";
-}
-
-
-void
-FragmentProgramTest::reportZFailure(const char *programName,
- GLfloat expectedZ, GLfloat actualZ) const
-{
- env->log << "FAILURE:\n";
- env->log << " Program: " << programName << "\n";
- env->log << " Expected Z: " << expectedZ << "\n";
- env->log << " Observed Z: " << actualZ << "\n";
-}
-
-
-// Compare actual and expected colors
-bool
-FragmentProgramTest::equalColors(const GLfloat act[4], const GLfloat exp[4]) const
-{
- if (fabsf(act[0] - exp[0]) > tolerance[0] && exp[0] != DONT_CARE_COLOR)
- return false;
- if (fabsf(act[1] - exp[1]) > tolerance[1] && exp[1] != DONT_CARE_COLOR)
- return false;
- if (fabsf(act[2] - exp[2]) > tolerance[2] && exp[2] != DONT_CARE_COLOR)
- return false;
- if (fabsf(act[3] - exp[3]) > tolerance[3] && exp[3] != DONT_CARE_COLOR)
- return false;
- return true;
-}
-
-
-bool
-FragmentProgramTest::equalDepth(GLfloat z0, GLfloat z1) const
-{
- if (fabsf(z0 - z1) > tolerance[4])
- return false;
- else
- return true;
-}
-
-
-bool
-FragmentProgramTest::testProgram(const FragmentProgram &p)
-{
- glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB,
- GL_PROGRAM_FORMAT_ASCII_ARB,
- strlen(p.progString),
- (const GLubyte *) p.progString);
-
- GLenum err = glGetError();
- if (err) {
- env->log << "OpenGL error " << (int) err << "\n";
- env->log << "Invalid Fragment Program:\n";
- env->log << p.progString;
- env->log << glGetString(GL_PROGRAM_ERROR_STRING_ARB) << "\n";
- return false;
- }
-
- // to avoid potential issue with undefined result.depth.z
- if (p.expectedZ == DONT_CARE_Z)
- glDisable(GL_DEPTH_TEST);
- else
- glEnable(GL_DEPTH_TEST);
-
-#if !DEVEL_MODE
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-#endif
- glBegin(GL_POLYGON);
- glVertex2f(-1, -1);
- glVertex2f( 1, -1);
- glVertex2f( 1, 1);
- glVertex2f(-1, 1);
- glEnd();
-
-#if !DEVEL_MODE
- GLfloat pixel[4];
- glReadPixels(windowWidth / 2, windowHeight / 2, 1, 1,
- GL_RGBA, GL_FLOAT, pixel);
-
- if (0) // debug
- printf("%s: Expect: %.3f %.3f %.3f %.3f found: %.3f %.3f %.3f %.3f\n",
- p.name,
- p.expectedColor[0], p.expectedColor[1],
- p.expectedColor[2], p.expectedColor[3],
- pixel[0], pixel[1], pixel[2], pixel[3]);
-
- if (!equalColors(pixel, p.expectedColor)) {
- reportFailure(p.name, p.expectedColor, pixel);
- return false;
- }
-
- if (p.expectedZ != DONT_CARE_Z) {
- GLfloat z;
- glReadPixels(windowWidth / 2, windowHeight / 2, 1, 1,
- GL_DEPTH_COMPONENT, GL_FLOAT, &z);
- if (!equalDepth(z, p.expectedZ)) {
- reportZFailure(p.name, p.expectedZ, z);
- return false;
- }
- }
-#endif
- return true;
-}
-
-void
-FragmentProgramTest::runOne(MultiTestResult &r, Window &w)
-{
- // to test a single sub-test, set the name here:
- const char *single = getenv("PIGLIT_TEST");
-
- (void) w;
- setup();
-
-#if DEVEL_MODE
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-#endif
- for (int i = 0; Programs[i].name; i++) {
-
- if (!single || strcmp(single, Programs[i].name) == 0) {
-
-#if DEVEL_MODE
- glViewport(0, i * 20, windowWidth, 20);
-#endif
- if (!testProgram(Programs[i])) {
- r.numFailed++;
- }
- else {
- r.numPassed++;
- }
- }
- }
-
-#if DEVEL_MODE
- glFinish();
- sleep(100);
-#endif
- r.pass = (r.numFailed == 0);
-}
-
-
-// The test object itself:
-FragmentProgramTest fragmentProgramTest("fragProg1", "window, rgb, z",
- "GL_ARB_fragment_program",
- "Fragment Program test 1: test a specific set of fragment programs.\n");
-
-
-
-} // namespace GLEAN
diff --git a/tests/glean/tfragprog1.h b/tests/glean/tfragprog1.h
deleted file mode 100644
index 2e795eb9a..000000000
--- a/tests/glean/tfragprog1.h
+++ /dev/null
@@ -1,92 +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
-
-// tfragprog.h: Test GL_ARB_fragment_program extension.
-// Brian Paul 22 October 2005
-
-#ifndef __tfragprog_h__
-#define __tfragprog_h__
-
-// If DEVEL_MODE==1 we generate a tall window of color swatches, one per
-// fragment program, which can be eyeballed against a reference image.
-// Use this if glReadPixels functionality is not working yet.
-#undef windowWidth
-#undef windowHeight
-#define DEVEL_MODE 0
-#if DEVEL_MODE
-#define windowWidth 200
-#define windowHeight 850
-#else
-#define windowWidth 100
-#define windowHeight 100
-#endif
-
-
-#include "tmultitest.h"
-
-namespace GLEAN {
-
-
-class FragmentProgram
-{
-public:
- const char *name;
- const char *progString;
- GLfloat expectedColor[4];
- GLfloat expectedZ;
-};
-
-
-class FragmentProgramTest: public MultiTest
-{
-public:
- FragmentProgramTest(const char* testName, const char* filter,
- const char *extensions, const char* description):
- MultiTest(testName, filter, extensions, description),
- tolerance()
- {
- }
-
- virtual void runOne(MultiTestResult &r, Window &w);
-
-private:
- GLfloat tolerance[5];
- void setup(void);
- bool equalColors(const GLfloat a[4], const GLfloat b[4]) const;
- bool equalDepth(GLfloat z0, GLfloat z1) const;
- bool testProgram(const FragmentProgram &p);
- void reportFailure(const char *programName,
- const GLfloat expectedColor[4],
- const GLfloat actualColor[4] ) const;
- void reportZFailure(const char *programName,
- GLfloat expectedZ, GLfloat actualZ) const;
-};
-
-} // namespace GLEAN
-
-#endif // __tfragprog_h__
diff --git a/tests/glean/tpixelformats.cpp b/tests/glean/tpixelformats.cpp
deleted file mode 100644
index d9818dc46..000000000
--- 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 d0edb94c4..000000000
--- 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__
-
diff --git a/tests/glean/tshaderapi.cpp b/tests/glean/tshaderapi.cpp
deleted file mode 100644
index cad46af95..000000000
--- a/tests/glean/tshaderapi.cpp
+++ /dev/null
@@ -1,470 +0,0 @@
-// BEGIN_COPYRIGHT -*- glean -*-
-//
-// Copyright (C) 2009 VMware, Inc. 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 VMWARE 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
-
-
-// Test GLSL-related API functions for correct behaviour
-// Based on the "shader_api.c" test from Mesa, written by Bruce Merry.
-
-
-#include <cstring>
-#include "tshaderapi.h"
-#include "rand.h"
-#include "image.h"
-#include "piglit-util-gl.h"
-
-
-namespace GLEAN {
-
-ShaderAPIResult::ShaderAPIResult()
-{
- pass = false;
-}
-
-void
-ShaderAPITest::assert_test(const char *file, int line, int cond, const char *msg)
-{
- if (!cond) {
- error = true;
- fprintf(stderr, "%s:%d assertion \"%s\" failed\n", file, line, msg);
- }
-}
-
-#undef assert
-#define assert(x) assert_test(__FILE__, __LINE__, (x), #x)
-
-
-void
-ShaderAPITest::assert_no_error_test(const char *file, int line)
-{
- GLenum err;
-
- err = glGetError();
- if (err != GL_NO_ERROR) {
- error = true;
- fprintf(stderr, "%s:%d received error %s\n",
- file, line, piglit_get_gl_error_name(err));
- }
-}
-
-#define assert_no_error() assert_no_error_test(__FILE__, __LINE__)
-
-
-void
-ShaderAPITest::assert_error_test(const char *file, int line, GLenum expect)
-{
- GLenum err;
-
- err = glGetError();
- if (err != expect) {
- fprintf(stderr, "%s:%d expected %s but received %s\n",
- file, line, piglit_get_gl_error_name(expect), piglit_get_gl_error_name(err));
- error = true;
- }
-
- while (glGetError())
- ; /* consume any following errors */
-}
-
-#define assert_error(err) assert_error_test(__FILE__, __LINE__, (err))
-
-
-void
-ShaderAPITest::check_status(GLuint id, GLenum pname,
- void (APIENTRY *query)(GLuint, GLenum, GLint *),
- void (APIENTRY *get_log)(GLuint, GLsizei, GLsizei *, GLchar *))
-{
- GLint status;
-
- query(id, pname, &status);
- if (!status) {
- char info[65536];
-
- fprintf(stderr, "Compilation/link failure:\n");
- get_log(id, sizeof(info), NULL, info);
- fprintf(stderr, "%s\n", info);
-
- error = true;
- }
-}
-
-
-void
-ShaderAPITest::check_compile_status(GLuint id)
-{
- check_status(id, GL_COMPILE_STATUS, glGetShaderiv,
- glGetShaderInfoLog);
-}
-
-
-void
-ShaderAPITest::check_link_status(GLuint id)
-{
- check_status(id, GL_LINK_STATUS, glGetProgramiv,
- glGetProgramInfoLog);
-}
-
-
-GLuint
-ShaderAPITest::make_shader(GLenum type, const char *src)
-{
- GLuint id;
-
- assert_no_error();
- id = glCreateShader(type);
- glShaderSource(id, 1, &src, NULL);
- glCompileShader(id);
- check_compile_status(id);
- assert_no_error();
- return id;
-}
-
-
-GLuint
-ShaderAPITest::make_program(const char *vs_src, const char *fs_src)
-{
- GLuint id, vs, fs;
-
- assert_no_error();
- id = glCreateProgram();
- if (vs_src) {
- vs = make_shader(GL_VERTEX_SHADER, vs_src);
- glAttachShader(id, vs);
- glDeleteShader(vs);
- }
- if (fs_src) {
- fs = make_shader(GL_FRAGMENT_SHADER, fs_src);
- glAttachShader(id, fs);
- glDeleteShader(fs);
- }
- glLinkProgram(id);
- check_link_status(id);
- glUseProgram(id);
- glDeleteProgram(id);
- assert_no_error();
- return id;
-}
-
-
-void
-ShaderAPITest::test_uniform_size_type1(const char *glslType, GLenum glType, const char *el)
-{
- char buffer[1024];
- GLuint program;
- GLint active, i;
-
- //printf(" Running subtest %s\n", glslType);
- //fflush(stdout);
- sprintf(buffer, "#version 120\nuniform %s m[60];\nvoid main() { gl_Position[0] = m[59]%s; }\n",
- glslType, el);
-
- program = make_program(buffer, NULL);
- glGetProgramiv(program, GL_ACTIVE_UNIFORMS, &active);
- assert_no_error();
- for (i = 0; i < active; i++) {
- GLint size = -1;
- GLenum type = 0;
- glGetActiveUniform(program, i, sizeof(buffer), NULL,
- &size, &type, buffer);
- assert_no_error();
- assert(type == glType);
- assert(size == 60);
- if (strncmp(buffer, "m", 1) == 0)
- break;
- }
-}
-
-
-void
-ShaderAPITest::test_uniform_size_type(void)
-{
- test_uniform_size_type1("float", GL_FLOAT, "");
- test_uniform_size_type1("vec2", GL_FLOAT_VEC2, "[0]");
- test_uniform_size_type1("vec3", GL_FLOAT_VEC3, "[0]");
- test_uniform_size_type1("vec4", GL_FLOAT_VEC4, "[0]");
-
- test_uniform_size_type1("bool", GL_BOOL, " ? 1.0 : 0.0");
- test_uniform_size_type1("bvec2", GL_BOOL_VEC2, "[0] ? 1.0 : 0.0");
- test_uniform_size_type1("bvec3", GL_BOOL_VEC3, "[0] ? 1.0 : 0.0");
- test_uniform_size_type1("bvec4", GL_BOOL_VEC4, "[0] ? 1.0 : 0.0");
-
- test_uniform_size_type1("int", GL_INT, "");
- test_uniform_size_type1("ivec2", GL_INT_VEC2, "[0]");
- test_uniform_size_type1("ivec3", GL_INT_VEC3, "[0]");
- test_uniform_size_type1("ivec4", GL_INT_VEC4, "[0]");
-
- test_uniform_size_type1("mat2", GL_FLOAT_MAT2, "[0][0]");
- test_uniform_size_type1("mat3", GL_FLOAT_MAT3, "[0][0]");
- test_uniform_size_type1("mat4", GL_FLOAT_MAT4, "[0][0]");
- test_uniform_size_type1("mat2x3", GL_FLOAT_MAT2x3, "[0][0]");
- test_uniform_size_type1("mat2x4", GL_FLOAT_MAT2x4, "[0][0]");
- test_uniform_size_type1("mat3x2", GL_FLOAT_MAT3x2, "[0][0]");
- test_uniform_size_type1("mat3x4", GL_FLOAT_MAT3x4, "[0][0]");
- test_uniform_size_type1("mat4x2", GL_FLOAT_MAT4x2, "[0][0]");
- test_uniform_size_type1("mat4x3", GL_FLOAT_MAT4x3, "[0][0]");
-}
-
-
-void
-ShaderAPITest::test_attrib_size_type1(const char *glslType, GLenum glType, const char *el)
-{
- char buffer[1024];
- GLuint program;
- GLint active, i;
-
- //printf(" Running subtest %s\n", glslType);
- //fflush(stdout);
- sprintf(buffer, "#version 120\nattribute %s m;\nvoid main() { gl_Position[0] = m%s; }\n",
- glslType, el);
-
- program = make_program(buffer, NULL);
- glGetProgramiv(program, GL_ACTIVE_ATTRIBUTES, &active);
- assert_no_error();
- for (i = 0; i < active; i++) {
- GLint size = -1;
- GLenum type = 0;
- glGetActiveAttrib(program, i, sizeof(buffer), NULL,
- &size, &type, buffer);
- assert_no_error();
- assert(type == glType);
- assert(size == 1);
- if (strncmp(buffer, "m", 1) == 0)
- break;
- }
- assert(i < active); /* Otherwise the compiler optimised it out */
-}
-
-
-void
-ShaderAPITest::test_attrib_size_type(void)
-{
- test_attrib_size_type1("float", GL_FLOAT, "");
- test_attrib_size_type1("vec2", GL_FLOAT_VEC2, "[0]");
- test_attrib_size_type1("vec3", GL_FLOAT_VEC3, "[0]");
- test_attrib_size_type1("vec4", GL_FLOAT_VEC4, "[0]");
- test_attrib_size_type1("mat2", GL_FLOAT_MAT2, "[0][0]");
- test_attrib_size_type1("mat3", GL_FLOAT_MAT3, "[0][0]");
- test_attrib_size_type1("mat4", GL_FLOAT_MAT4, "[0][0]");
- test_attrib_size_type1("mat2x3", GL_FLOAT_MAT2x3, "[0][0]");
- test_attrib_size_type1("mat2x4", GL_FLOAT_MAT2x4, "[0][0]");
- test_attrib_size_type1("mat3x2", GL_FLOAT_MAT3x2, "[0][0]");
- test_attrib_size_type1("mat3x4", GL_FLOAT_MAT3x4, "[0][0]");
- test_attrib_size_type1("mat4x2", GL_FLOAT_MAT4x2, "[0][0]");
- test_attrib_size_type1("mat4x3", GL_FLOAT_MAT4x3, "[0][0]");
-}
-
-
-void
-ShaderAPITest::test_uniform_array_overflow(void)
-{
- GLuint program;
- GLint location;
- GLfloat data[128];
-
- program = make_program("#version 120\nuniform vec2 x[10];\nvoid main() { gl_Position.xy = x[9]; }\n", NULL);
- location = glGetUniformLocation(program, "x");
- assert_no_error();
- glUniform2fv(location, 64, data);
- assert_no_error();
-}
-
-
-void
-ShaderAPITest::test_uniform_scalar_count(void)
-{
- GLuint program;
- GLint location;
- GLfloat data[128];
-
- program = make_program("#version 110\nuniform vec2 x;\nvoid main() { gl_Position.xy = x; }\n", NULL);
- location = glGetUniformLocation(program, "x");
- assert_no_error();
- glUniform2fv(location, 64, data);
- assert_error(GL_INVALID_OPERATION);
-}
-
-
-void
-ShaderAPITest::test_uniform_query_matrix(void)
-{
- GLuint program;
- GLfloat data[18];
- GLint i, r, c;
- GLint location;
-
- program = make_program("#version 110\nuniform mat3 m[2];\nvoid main() { gl_Position.xyz = m[1][2]; }\n", NULL);
- location = glGetUniformLocation(program, "m");
- for (i = 0; i < 9; i++)
- data[i] = i;
- for (i = 9; i < 18; i++)
- data[i] = 321.0;
- glUniformMatrix3fv(location, 1, GL_TRUE, data);
-
- for (i = 0; i < 18; i++)
- data[i] = 123.0;
- glGetUniformfv(program, location, data);
- for (c = 0; c < 3; c++)
- for (r = 0; r < 3; r++)
- assert(data[c * 3 + r] == r * 3 + c);
- for (i = 9; i < 18; i++)
- assert(data[i] == 123.0);
-}
-
-
-void
-ShaderAPITest::test_uniform_neg_location(void)
-{
- GLuint program;
- GLfloat data[4];
-
- program = make_program("#version 110\nvoid main() { gl_Position = vec4(1.0, 1.0, 1.0, 1.0); }\n", NULL);
- (void) program;
- assert_no_error();
- glUniform1i(-1, 1);
- assert_no_error();
- glUniform1i(-200, 1);
- assert_error(GL_INVALID_OPERATION);
- glUniformMatrix2fv(-1, 1, GL_FALSE, data);
- assert_no_error();
- glUniformMatrix2fv(-200, 1, GL_FALSE, data);
- assert_error(GL_INVALID_OPERATION);
-}
-
-
-void
-ShaderAPITest::test_uniform_bool_conversion(void)
-{
- GLuint program;
- GLint location;
- GLint value[16]; /* in case glGetUniformiv goes nuts on the stack */
-
- assert_no_error();
- program = make_program("uniform bool b;\nvoid main() { gl_Position.x = b ? 1.5 : 0.5; }\n", NULL);
- location = glGetUniformLocation(program, "b");
- assert(location != -1);
- assert_no_error();
- glUniform1i(location, 5);
- assert_no_error();
- glGetUniformiv(program, location, &value[0]);
- assert_no_error();
- assert(value[0] == 1);
-}
-
-
-void
-ShaderAPITest::run_tests(void)
-{
- test_uniform_size_type();
- test_attrib_size_type();
- test_uniform_array_overflow();
- test_uniform_scalar_count();
- test_uniform_query_matrix();
- test_uniform_neg_location();
- test_uniform_bool_conversion();
-}
-
-
-void
-ShaderAPITest::runOne(ShaderAPIResult &r, Window &w)
-{
- (void) w; // silence warning
-
- // error will be set to true if any of the assert functions below fail.
- error = false;
-
- run_tests();
-
- r.pass = !error;
-}
-
-
-void
-ShaderAPITest::logOne(ShaderAPIResult &r)
-{
- if (r.pass) {
- logPassFail(r);
- logConcise(r);
- }
- else {
- env->log << name << "FAIL\n";
- }
-}
-
-
-void
-ShaderAPIResult::putresults(ostream &s) const
-{
- if (pass) {
- s << "PASS\n";
- }
- else {
- s << "FAIL\n";
- }
-}
-
-
-bool
-ShaderAPIResult::getresults(istream &s)
-{
- char result[1000];
- s >> result;
-
- if (strcmp(result, "FAIL") == 0) {
- pass = false;
- }
- else {
- pass = true;
- }
- return s.good();
-}
-
-
-// We need OpenGL 2.0, 2.1 or 3.0
-bool
-ShaderAPITest::isApplicable() const
-{
- if (GLUtils::getVersion() >= 2.0) {
- return true;
- }
- else {
- env->log << name
- << ": skipped. Requires GL >= 2.0.\n";
- return false;
- }
-}
-
-
-// The test object itself:
-ShaderAPITest shaderAPITest("shaderAPI", "window, rgb",
- "", // no extensions, but see isApplicable()
- "Test GLSL shader-related API features.\n");
-
-
-
-} // namespace GLEAN
-
-
diff --git a/tests/glean/tshaderapi.h b/tests/glean/tshaderapi.h
deleted file mode 100644
index 876876a45..000000000
--- a/tests/glean/tshaderapi.h
+++ /dev/null
@@ -1,98 +0,0 @@
-// BEGIN_COPYRIGHT -*- glean -*-
-//
-// Copyright (C) 2009 VMware, Inc. 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 VMWARE 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
-
-
-#ifndef __tshaderapi_h__
-#define __tshaderapi_h__
-
-#include "tbase.h"
-
-#ifndef APIENTRY
-#define APIENTRY
-#endif
-
-namespace GLEAN {
-
-#define windowSize 100
-
-
-class ShaderAPIResult: public BaseResult
-{
-public:
- bool pass;
-
- ShaderAPIResult();
-
- virtual void putresults(ostream& s) const;
- virtual bool getresults(istream& s);
-};
-
-
-class ShaderAPITest: public BaseTest<ShaderAPIResult>
-{
-public:
- // "WHO" = width, height and one config flag
- GLEAN_CLASS_WHO(ShaderAPITest, ShaderAPIResult,
- windowSize, windowSize, true);
-
- virtual bool isApplicable() const;
-
-private:
- bool error;
-
- void assert_test(const char *file, int line, int cond, const char *msg);
- void assert_no_error_test(const char *file, int line);
- void assert_error_test(const char *file, int line, GLenum expect);
-
- void check_status(GLuint id, GLenum pname,
- void (APIENTRY *query)(GLuint, GLenum, GLint *),
- void (APIENTRY *get_log)(GLuint, GLsizei, GLsizei *, GLchar *));
- void check_compile_status(GLuint id);
- void check_link_status(GLuint id);
-
- GLuint make_shader(GLenum type, const char *src);
- GLuint make_program(const char *vs_src, const char *fs_src);
-
- void test_uniform_size_type1(const char *glslType, GLenum glType, const char *el);
- void test_attrib_size_type1(const char *glslType, GLenum glType, const char *el);
-
- void test_uniform_size_type(void);
- void test_attrib_size_type(void);
- void test_uniform_array_overflow(void);
- void test_uniform_scalar_count(void);
- void test_uniform_query_matrix(void);
- void test_uniform_neg_location(void);
- void test_uniform_bool_conversion(void);
- void test_uniform_multiple_samplers(void);
- void run_tests(void);
-};
-
-} // namespace GLEAN
-
-#endif // __tshaderapi_h__
-
diff --git a/tests/glean/ttexcube.cpp b/tests/glean/ttexcube.cpp
deleted file mode 100644
index 1d8ac29f2..000000000
--- a/tests/glean/ttexcube.cpp
+++ /dev/null
@@ -1,426 +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
-
-
-// ttexcube.cpp: Test the GL_ARB_texture_cube_map extension
-// Author: Brian Paul (brianp@valinux.com) March 2001
-//
-// Test procedure:
-// We build a 6-sided texture cube map in which each side is a simple 2x2
-// checkboard pattern with known colors. Then we do three sets of tests.
-// Each test draws a single quadrilateral. The tests are:
-//
-// 1. Directly specify texture coordinates. By changing the texture coords
-// we can sample specific regions of the cube map. Check the rendered
-// quad colors for correctness.
-// 2. Use GL_NORMAL_MAP_ARB texgen mode with specific normal vectors to
-// sample specific regions of the cube map. Check for correctness.
-// 3. Test GL_REFLECTION_MAP_ARB texgen mode by specifying a quad with
-// fixed vertices and normals but rotating the texture coordinate
-// matrix to select each side of the cube map. Check that the rendered
-// quad's four colors match the cube face.
-//
-
-#include "ttexcube.h"
-#include <stdio.h>
-#include <cmath>
-
-namespace GLEAN {
-
-
-#define VP_SIZE 20
-
-static const char *faceName[6] = {
- "POSITIVE_X",
- "NEGATIVE_X",
- "POSITIVE_Y",
- "NEGATIVE_Y",
- "POSITIVE_Z",
- "NEGATIVE_Z"
-};
-
-
-//
-// Test if two colors are close enough to be considered the same
-//
-bool
-TexCubeTest::TestColor(const GLfloat c1[3], const GLfloat c2[3]) {
- if (fabs(c1[0] - c2[0]) <= mTolerance[0] &&
- fabs(c1[1] - c2[1]) <= mTolerance[1] &&
- fabs(c1[2] - c2[2]) <= mTolerance[2])
- return true;
- else
- return false;
-}
-
-
-//
-// Define a 2x2 checkerboard texture image using the given four colors.
-//
-void
-TexCubeTest::BuildTexImage(GLenum target, const GLfloat color[4][3]) {
- const GLint w = 8, h = 8;
- GLfloat texImage[8][8][4];
- for (int i = 0; i < h; i++) {
- const int ibit = (i >= (h / 2));
- for (int j = 0; j < w; j++) {
- const int jbit = (j >= (w / 2));
- const int c = ibit * 2 + jbit;
- texImage[i][j][0] = color[c][0];
- texImage[i][j][1] = color[c][1];
- texImage[i][j][2] = color[c][2];
- texImage[i][j][3] = 1.0;
- }
- }
- glTexImage2D(target, 0, GL_RGB, w, h, 0, GL_RGBA, GL_FLOAT, texImage);
-}
-
-
-//
-// Draw a polygon either with texcoords or normal vectors and check that
-// we hit the correct quadrant of each of the six cube faces.
-// Return: true = pass, false = fail
-//
-bool
-TexCubeTest::TestNormalMap(bool texCoordMode, const char *modeName) {
-
- // We use the coordinates both directly as texture coordinates
- // and as normal vectors for testing NORMAL_MAP_ARB texgen mode).
- static const GLfloat coords[6][4][3] = {
- // +X
- {
- { 1.0, 0.5, 0.5 },
- { 1.0, 0.5, -0.5 },
- { 1.0, -0.5, 0.5 },
- { 1.0, -0.5, -0.5 },
- },
- // -X
- {
- { -1.0, 0.5, -0.5 },
- { -1.0, 0.5, 0.5 },
- { -1.0, -0.5, -0.5 },
- { -1.0, -0.5, 0.5 },
- },
- // +Y
- {
- { -0.5, 1.0, -0.5 },
- { 0.5, 1.0, -0.5 },
- { -0.5, 1.0, 0.5 },
- { 0.5, 1.0, 0.5 },
- },
- // -Y
- {
- { -0.5, -1.0, 0.5 },
- { 0.5, -1.0, 0.5 },
- { -0.5, -1.0, -0.5 },
- { 0.5, -1.0, -0.5 },
- },
- // +Z
- {
- { -0.5, 0.5, 1.0 },
- { 0.5, 0.5, 1.0 },
- { -0.5, -0.5, 1.0 },
- { 0.5, -0.5, 1.0 },
- },
- // -Z
- {
- { 0.5, 0.5, -1.0 },
- { -0.5, 0.5, -1.0 },
- { 0.5, -0.5, -1.0 },
- { -0.5, -0.5, -1.0 },
- }
- };
-
- // normal vectors to hit the four colors of each cube face when
-
- for (int face = 0; face < 6; face++) {
- for (int quadrant = 0; quadrant < 4; quadrant++) {
-
- // draw the test quad
- if (texCoordMode)
- glTexCoord3fv(coords[face][quadrant]);
- else
- glNormal3fv(coords[face][quadrant]);
- glColor3f(0, 1, 0);
- glBegin(GL_POLYGON);
- glVertex2f(-1, -1);
- glVertex2f( 1, -1);
- glVertex2f( 1, 1);
- glVertex2f(-1, 1);
- glEnd();
-
- // check the color
- GLfloat result[3];
- glReadPixels(1, 1, 1, 1, GL_RGB, GL_FLOAT, result);
-
- if (!TestColor(mColors[face][quadrant], result)) {
- env->log << name
- << ": FAIL: mode='"
- << modeName
- << "' face="
- << faceName[face]
- << " quadrant="
- << quadrant
- << " expected=("
- << mColors[face][quadrant][0] << ", "
- << mColors[face][quadrant][1] << ", "
- << mColors[face][quadrant][2]
- << ") measured=("
- << result[0] << ", "
- << result[1] << ", "
- << result[2]
- << ")\n";
- return false;
- }
- }
- }
- return true;
-}
-
-
-//
-// Test GL_REFLECTION_MAP_ARB texgen mode.
-// Return: true = pass, false = fail
-//
-bool
-TexCubeTest::TestReflectionMap(const char *modeName) {
-
-// These are the glReadPixels coords we'll use for pixel testing
-#define X0 ((int) (VP_SIZE * 0.25))
-#define X1 ((int) (VP_SIZE * 0.75))
-#define Y0 ((int) (VP_SIZE * 0.25))
-#define Y1 ((int) (VP_SIZE * 0.75))
-
- // We'll rotate the texture coordinates to map each cube face
- // onto a screen-aligned quad.
- static const GLfloat rotation[6][4] = {
- { -90, 0, 1, 0 }, // +X
- { 90, 0, 1, 0 }, // -X
- { 90, 1, 0, 0 }, // +Y
- { -90, 1, 0, 0 }, // -Y
- { 180, 1, 0, 0 }, // -Z
- { 0, 1, 0, 0 } // +Z
- };
-
- // For each face we'll test the four quadrants to be sure test
- // if the expected color is where it should be.
- // These are the glReadPixels coordinates at which we should
- // find the colors in the mColors[6][4] array.
- static const GLint readPos[6][4][2] = {
- // +X
- {
- { X1, Y1 }, { X0, Y1 }, { X1, Y0 }, { X0, Y0 }
- },
- // -X
- {
- { X1, Y1 }, { X0, Y1 }, { X1, Y0 }, { X0, Y0 }
- },
- // +Y
- {
- { X0, Y0 }, { X1, Y0 }, { X0, Y1 }, { X1, Y1 }
- },
- // -Y
- {
- { X0, Y0 }, { X1, Y0 }, { X0, Y1 }, { X1, Y1 }
- },
- // +Z
- {
- { X0, Y0 }, { X1, Y0 }, { X0, Y1 }, { X1, Y1 }
- },
- // -Z
- {
- { X1, Y1 }, { X0, Y1 }, { X1, Y0 }, { X0, Y0 }
- }
- };
-
- for (int face = 0; face < 6; face++) {
-
- // Draw the test quad.
- // It'll be textured with one face of the cube map texture.
- glMatrixMode(GL_TEXTURE);
- glPushMatrix();
- glRotatef(rotation[face][0], rotation[face][1],
- rotation[face][2], rotation[face][3]);
- glNormal3f(0, 0, 1);
- glColor3f(0, 1, 0);
- glBegin(GL_POLYGON);
- glVertex3f(-1, -1, 1);
- glVertex3f( 1, -1, 1);
- glVertex3f( 1, 1, 1);
- glVertex3f(-1, 1, 1);
- glEnd();
- glPopMatrix();
- glMatrixMode(GL_MODELVIEW);
-
- // Verify the colors
- for (int quadrant = 0; quadrant < 4; quadrant++) {
-
- GLfloat result[3];
- glReadPixels(readPos[face][quadrant][0],
- readPos[face][quadrant][1],
- 1, 1, GL_RGB, GL_FLOAT, result);
-
- if (!TestColor(mColors[face][quadrant], result)) {
- env->log << name
- << ": FAIL: mode='"
- << modeName
- << "' face="
- << faceName[face]
- << " quadrant="
- << quadrant
- << " expected=("
- << mColors[face][quadrant][0] << ", "
- << mColors[face][quadrant][1] << ", "
- << mColors[face][quadrant][2]
- << ") measured=("
- << result[0] << ", "
- << result[1] << ", "
- << result[2]
- << ")\n";
- return false;
- }
- }
- }
- return true;
-}
-
-
-void
-TexCubeTest::runOne(BasicResult& r, Window& w) {
-
- (void) w;
-
- // each of six faces needs four test colors
- for (int i = 0; i < 6 * 4; i++) {
- GLint r = i % 3;
- GLint g = (i / 3) % 3;
- GLint b = (i / 9) % 3;
- mColors[i / 4][i % 4][0] = r * 0.5;
- mColors[i / 4][i % 4][1] = g * 0.5;
- mColors[i / 4][i % 4][2] = b * 0.5;
- //printf("mColors[%d][%d] = %g %g %g\n", i/4, i%4,
- // mColors[i/4][i%4][0],
- // mColors[i/4][i%4][1],
- // mColors[i/4][i%4][2]);
- }
-
- glDrawBuffer(GL_FRONT);
- glReadBuffer(GL_FRONT);
-
- BuildTexImage(GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB, mColors[0]);
- BuildTexImage(GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB, mColors[1]);
- BuildTexImage(GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB, mColors[2]);
- BuildTexImage(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB, mColors[3]);
- BuildTexImage(GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB, mColors[4]);
- BuildTexImage(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB, mColors[5]);
-
- glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MIN_FILTER,
- GL_NEAREST);
- glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MAG_FILTER,
- GL_NEAREST);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
- glEnable(GL_TEXTURE_CUBE_MAP_ARB);
-
- // compute RGB error tolerance
- {
- GLint rBits, gBits, bBits;
- GLint rTexBits, gTexBits, bTexBits;
- glGetIntegerv(GL_RED_BITS, &rBits);
- glGetIntegerv(GL_GREEN_BITS, &gBits);
- glGetIntegerv(GL_BLUE_BITS, &bBits);
- glGetTexLevelParameteriv(GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB,
- 0, GL_TEXTURE_RED_SIZE, &rTexBits);
- glGetTexLevelParameteriv(GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB,
- 0, GL_TEXTURE_GREEN_SIZE, &gTexBits);
- glGetTexLevelParameteriv(GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB,
- 0, GL_TEXTURE_BLUE_SIZE, &bTexBits);
- // find smaller of frame buffer and texture bits
- rBits = (rBits < rTexBits) ? rBits : rTexBits;
- gBits = (gBits < gTexBits) ? gBits : gTexBits;
- bBits = (bBits < bTexBits) ? bBits : bTexBits;
- mTolerance[0] = 2.0 / (1 << rBits);
- mTolerance[1] = 2.0 / (1 << gBits);
- mTolerance[2] = 2.0 / (1 << bBits);
- }
-
- glViewport(0, 0, VP_SIZE, VP_SIZE);
-
- bool passed = true;
-
- if (passed) {
- // Test directly specifying texture coords
- glDisable(GL_TEXTURE_GEN_S);
- glDisable(GL_TEXTURE_GEN_T);
- glDisable(GL_TEXTURE_GEN_R);
- passed = TestNormalMap(true,
- "Direct specification of texture coordinates");
- }
-
- if (passed) {
- // Test GL_NORMAL_MAP_ARB mode
- glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP_ARB);
- glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP_ARB);
- glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP_ARB);
- glEnable(GL_TEXTURE_GEN_S);
- glEnable(GL_TEXTURE_GEN_T);
- glEnable(GL_TEXTURE_GEN_R);
- passed = TestNormalMap(false, "GL_NORMAL_MAP_ARB texgen");
- }
-
- if (passed) {
- // Test GL_REFLECTION_MAP_ARB mode
- glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_ARB);
- glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_ARB);
- glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_ARB);
- glEnable(GL_TEXTURE_GEN_S);
- glEnable(GL_TEXTURE_GEN_T);
- glEnable(GL_TEXTURE_GEN_R);
- glEnable(GL_NORMALIZE);
- passed = TestReflectionMap("GL_REFLECTION_MAP_ARB texgen");
- }
-
- r.pass = passed;
-} // TexCubeTest::runOne
-
-
-void
-TexCubeTest::logOne(BasicResult& r) {
- logPassFail(r);
- logConcise(r);
-} // TexCubeTest::logOne
-
-
-///////////////////////////////////////////////////////////////////////////////
-// The test object itself:
-///////////////////////////////////////////////////////////////////////////////
-TexCubeTest texCubeTest("texCube", "window, rgb",
-
- "GL_ARB_texture_cube_map verification test.\n");
-
-
-} // namespace GLEAN
diff --git a/tests/glean/ttexcube.h b/tests/glean/ttexcube.h
deleted file mode 100644
index 74940226c..000000000
--- a/tests/glean/ttexcube.h
+++ /dev/null
@@ -1,66 +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
-
-
-// ttexcube.h: Test the GL_ARB_texture_cube_map extension
-// Author: Brian Paul (brianp@valinux.com) March 2001
-
-
-#ifndef __ttexcube_h__
-#define __ttexcube_h__
-
-#include "tbasic.h"
-
-namespace GLEAN {
-
-class TexCubeTest: public BasicTest {
- public:
- TexCubeTest(const char* testName, const char* filter,
- const char* description):
- BasicTest(testName, filter, "GL_ARB_texture_cube_map",
- description),
- mTolerance() {
- }
-
- virtual void runOne(BasicResult& r, Window& w);
- virtual void logOne(BasicResult& r);
-
- private:
- bool TestColor(const GLfloat c1[3], const GLfloat c2[3]);
- void BuildTexImage(GLenum target, const GLfloat color[4][3]);
- bool TestNormalMap(bool testTexCoords, const char *modeName);
- bool TestReflectionMap(const char *modeName);
-
- GLfloat mColors[6][4][3];
- GLfloat mTolerance[3];
-
-}; // class TexCubeTest
-
-} // namespace GLEAN
-
-#endif // __ttexcube_h__
diff --git a/tests/glean/ttexture_srgb.cpp b/tests/glean/ttexture_srgb.cpp
deleted file mode 100644
index 524685f32..000000000
--- a/tests/glean/ttexture_srgb.cpp
+++ /dev/null
@@ -1,356 +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
-
-// ttexture_srgb.h: Test GL_EXT_texture_sRGB extension.
-// Brian Paul August 2006
-
-
-#include <cassert>
-#include <cstring>
-#include <cmath>
-#include "ttexture_srgb.h"
-#include "rand.h"
-#include "piglit-util-gl.h"
-
-
-namespace GLEAN {
-
-
-static const struct {
- GLenum sFormat;
- GLenum baseFormat;
- GLint components;
-} Formats[] = {
- { GL_SRGB_EXT, GL_RGB, 3 },
- { GL_SRGB8_EXT, GL_RGB, 3 },
- { GL_SRGB_ALPHA_EXT, GL_RGBA, 4 },
- { GL_SRGB8_ALPHA8_EXT, GL_RGBA, 4 },
- { GL_SLUMINANCE_ALPHA_EXT, GL_LUMINANCE_ALPHA, 2 },
- { GL_SLUMINANCE8_ALPHA8_EXT, GL_LUMINANCE_ALPHA, 2 },
- { GL_SLUMINANCE_EXT, GL_LUMINANCE, 1 },
- { GL_SLUMINANCE8_EXT, GL_LUMINANCE, 1 },
- { 0, 0, 0 }
-};
-
-
-
-
-// Convert an 8-bit sRGB value from non-linear space to a
-// linear RGB value in [0, 1].
-// Implemented with a 256-entry lookup table.
-static float
-nonlinear_to_linear(GLubyte cs8)
-{
- static GLfloat table[256];
- static GLboolean tableReady = GL_FALSE;
- if (!tableReady) {
- // compute lookup table now
- GLuint i;
- for (i = 0; i < 256; i++) {
- const GLfloat cs = i / 255.0;
- if (cs <= 0.04045) {
- table[i] = cs / 12.92;
- }
- else {
- table[i] = pow((cs + 0.055) / 1.055, 2.4);
- }
- }
- tableReady = GL_TRUE;
- }
- return table[cs8];
-}
-
-
-// allocate and fill an array with random values
-static GLubyte *
-randomArray(int bytes, int seed)
-{
- GLEAN::RandomBits r(8, seed);
- GLubyte *img = new GLubyte [bytes];
-
- for (int i = 0; i < bytes; i++)
- img[i] = r.next();
-
- return img;
-}
-
-
-// Test glTexImage and glGetTexImage functionality
-bool
-TextureSRGBTest::testImageTransfer(void)
-{
- const GLubyte *image = randomArray(128 * 128 * 4, 0);
- GLubyte image2[128 * 128 * 4];
- int i, j;
-
- for (i = 0; Formats[i].sFormat; i++) {
- // upload tex image
- glTexImage2D(GL_TEXTURE_2D, 0, Formats[i].sFormat, 128, 128, 0,
- Formats[i].baseFormat, GL_UNSIGNED_BYTE, image);
-
- // retrieve tex image
- glGetTexImage(GL_TEXTURE_2D, 0,
- Formats[i].baseFormat, GL_UNSIGNED_BYTE, image2);
-
- // compare original and returned images
- const int comps = Formats[i].components;
- for (j = 0; j < 128 * 128 * comps; j++) {
- if (image[j] != image2[j]) {
- env->log << '\n'
- << name
- << " glGetTexImage failed for internalFormat "
- << Formats[i].sFormat
- << "\n";
- env->log << "Expected value at ["
- << j
- << "] should be "
- << (int) image[j]
- << " found "
- << (int) image2[j]
- << "\n";
- delete [] image;
- return false;
- }
- image2[j] = 0; // reset for next GetTexImage
- }
- }
-
- delete [] image;
- return true;
-}
-
-
-bool
-TextureSRGBTest::testTextureFormat(GLenum intFormat, GLint components,
- GLEAN::Environment &env)
-{
- const GLubyte *image = randomArray(128 * 128 * 4, intFormat);
- GLfloat readback[128 * 128 * 4];
- int i;
- GLint redBits, alphaBits;
-
- glGetIntegerv(GL_RED_BITS, &redBits);
- glGetIntegerv(GL_ALPHA_BITS, &alphaBits);
- const float tolerance = 1.0 / ((1 << (redBits - 1)) - 1);
-
- // setup matrices
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- glViewport(0, 0, windowSize, windowSize);
-
- // setup texture
- glTexImage2D(GL_TEXTURE_2D, 0, intFormat, 128, 128, 0,
- GL_RGBA, GL_UNSIGNED_BYTE, image);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
- glEnable(GL_TEXTURE_2D);
-
- glDisable(GL_DITHER);
-
- glDrawBuffer(GL_FRONT);
- glReadBuffer(GL_FRONT);
-
- // draw test polygon
- 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();
-
- glReadPixels(0, 0, windowSize, windowSize,
- GL_RGBA, GL_FLOAT, readback);
-
- // compare rendered results to expected values
- for (i = 0; i < 128 * 128; i++) {
- const GLfloat *actual = readback + i * 4;
- GLfloat expected[4];
-
- expected[0] = nonlinear_to_linear(image[i * 4 + 0]);
- expected[1] = nonlinear_to_linear(image[i * 4 + 1]);
- expected[2] = nonlinear_to_linear(image[i * 4 + 2]);
- expected[3] = image[i * 4 + 3] / 255.0;
-
- if (components <= 2) {
- if (fabs(actual[0] - expected[0]) > tolerance) {
- env.log << '\n'
- << name
- << " failed for internalFormat "
- << intFormat
- << "\n";
- env.log << "Expected luminance "
- << expected[0]
- << " found "
- << actual[0]
- << "\n";
- delete [] image;
- return GL_FALSE;
- }
-
- }
- else {
- assert(components == 3 || components == 4);
- if (fabs(actual[0] - expected[0]) > tolerance ||
- fabs(actual[1] - expected[1]) > tolerance ||
- fabs(actual[2] - expected[2]) > tolerance) {
- env.log << '\n'
- << name
- << " failed for internalFormat "
- << intFormat
- << "\n";
- env.log << "Expected color "
- << expected[0]
- << ", "
- << expected[1]
- << ", "
- << expected[2]
- << " found "
- << actual[0]
- << ", "
- << actual[1]
- << ", "
- << actual[2]
- << "\n";
- delete [] image;
- return GL_FALSE;
- }
- }
-
- if (alphaBits >= redBits
- && components == 4
- && fabs(actual[3] - expected[3]) > tolerance) {
- env.log << '\n'
- << name
- << " failed for internalFormat "
- << intFormat
- << "\n";
- env.log << "Expected alpha "
- << expected[3]
- << " found "
- << actual[3]
- << "\n";
- delete [] image;
- return GL_FALSE;
- }
- }
-
- delete [] image;
- return GL_TRUE;
-}
-
-
-// Test actual texture mapping using each of the sRGB formats
-// Return GL_TRUE if all format tests pass, GL_FALSE if any fail.
-bool
-TextureSRGBTest::testTexturing(void)
-{
- for (int i = 0; Formats[i].sFormat; i++) {
- if (!testTextureFormat(Formats[i].sFormat,
- Formats[i].components, *env))
- return GL_FALSE;
- }
-
- return GL_TRUE;
-}
-
-
-void
-TextureSRGBTest::runOne(TextureSRGBResult &r, Window &w)
-{
- (void) w; // silence warning
- r.pass = true;
- errorCode = 0;
- errorPos = NULL;
- errorMsg[0] = 0;
-
- if (r.pass)
- r.pass = testImageTransfer();
- if (r.pass)
- r.pass = testTexturing();
-}
-
-
-void
-TextureSRGBTest::logOne(TextureSRGBResult &r)
-{
- if (r.pass) {
- logPassFail(r);
- logConcise(r);
- }
- else {
- env->log << name << " FAIL\n";
- if (errorCode) {
- env->log << "\tOpenGL Error " << piglit_get_gl_error_name(errorCode)
- << " at " << errorPos << "\n";
- }
- else if (errorMsg[0]) {
- env->log << "\t" << errorMsg << "\n";
- }
- }
-}
-
-
-void
-TextureSRGBResult::putresults(ostream &s) const
-{
- if (pass) {
- s << "PASS\n";
- }
- else {
- s << "FAIL\n";
- }
-}
-
-
-bool
-TextureSRGBResult::getresults(istream &s)
-{
- char result[1000];
- s >> result;
-
- if (strcmp(result, "FAIL") == 0) {
- pass = false;
- }
- else {
- pass = true;
- }
- return s.good();
-}
-
-
-// The test object itself:
-TextureSRGBTest srgbTest("texture_srgb", "window, rgb",
- "GL_EXT_texture_sRGB",
- "Test the GL_EXT_texture_sRGB extension.\n");
-
-
-
-} // namespace GLEAN
diff --git a/tests/glean/ttexture_srgb.h b/tests/glean/ttexture_srgb.h
deleted file mode 100644
index 8875b2df4..000000000
--- a/tests/glean/ttexture_srgb.h
+++ /dev/null
@@ -1,71 +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
-
-// ttexture_srgb.h: Test GL_EXT_texture_sRGB extension.
-// Brian Paul August 2006
-
-#ifndef __ttexture_srgb_h__
-#define __ttexture_srgb_h__
-
-#include "tbase.h"
-
-namespace GLEAN {
-
-#define windowSize 128
-
-class TextureSRGBResult: public BaseResult
-{
-public:
- bool pass;
-
- virtual void putresults(ostream& s) const;
- virtual bool getresults(istream& s);
-};
-
-
-class TextureSRGBTest: public BaseTest<TextureSRGBResult>
-{
-public:
- GLEAN_CLASS_WH(TextureSRGBTest, TextureSRGBResult,
- windowSize, windowSize);
-
-private:
- GLenum errorCode;
- const char *errorPos;
- char errorMsg[1000];
-
- bool testImageTransfer(void);
- bool testTextureFormat(GLenum intFormat, GLint components,
- GLEAN::Environment &env);
- bool testTexturing(void);
-};
-
-} // namespace GLEAN
-
-#endif // __ttexture_srgb_h__
-
diff --git a/tests/glean/tvertarraybgra.cpp b/tests/glean/tvertarraybgra.cpp
deleted file mode 100644
index ff8ac31ae..000000000
--- a/tests/glean/tvertarraybgra.cpp
+++ /dev/null
@@ -1,186 +0,0 @@
-// BEGIN_COPYRIGHT -*- glean -*-
-//
-// Copyright (C) 2009 VMware, Inc. 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 VMWARE 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
-
-
-// Render some geometry with random GLubyte/RGBA vertex colors.
-// Then re-render same thing with GLubyte/BGRA vertex colors.
-// Brian Paul
-// 23 Jan 2009
-
-
-#define GL_GLEXT_PROTOTYPES
-
-#include <cassert>
-#include <cmath>
-#include <cstring>
-#include "tvertarraybgra.h"
-#include "rand.h"
-#include "image.h"
-
-
-namespace GLEAN {
-
-
-VertArrayBGRAResult::VertArrayBGRAResult()
-{
- pass = true;
-}
-
-
-void
-VertArrayBGRATest::reportError(const char *msg)
-{
- env->log << name << ": Error: " << msg << "\n";
-}
-
-
-void
-VertArrayBGRATest::setupPoints()
-{
- RandomDouble r(10);
- int i;
- for (i = 0; i < NUM_POINTS; i++) {
- mPos[i][0] = r.next() * WINDOW_SIZE;
- mPos[i][1] = r.next() * WINDOW_SIZE;
- mRGBA[i][0] = int(r.next() * 255);
- mRGBA[i][1] = int(r.next() * 255);
- mRGBA[i][2] = int(r.next() * 255);
- mRGBA[i][3] = int(r.next() * 255);
- mBGRA[i][0] = mRGBA[i][2]; // blue
- mBGRA[i][1] = mRGBA[i][1]; // green
- mBGRA[i][2] = mRGBA[i][0]; // red
- mBGRA[i][3] = mRGBA[i][3]; // alpha
- }
-}
-
-
-void
-VertArrayBGRATest::renderPoints(bool useBGRA)
-{
- glVertexPointer(2, GL_FLOAT, 0, mPos);
- glEnableClientState(GL_VERTEX_ARRAY);
-
- if (useBGRA)
- glColorPointer(GL_BGRA, GL_UNSIGNED_BYTE, 0, mBGRA);
- else
- glColorPointer(4, GL_UNSIGNED_BYTE, 0, mRGBA);
- glEnableClientState(GL_COLOR_ARRAY);
-
- glDrawArrays(GL_POINTS, 0, NUM_POINTS);
-
- glDisableClientState(GL_VERTEX_ARRAY);
- glDisableClientState(GL_COLOR_ARRAY);
-}
-
-
-void
-VertArrayBGRATest::runOne(VertArrayBGRAResult &r, Window &w)
-{
- (void) w; // silence warning
- Image rgbaImage(WINDOW_SIZE, WINDOW_SIZE, GL_RGBA, GL_UNSIGNED_BYTE);
- Image bgraImage(WINDOW_SIZE, WINDOW_SIZE, GL_RGBA, GL_UNSIGNED_BYTE);
-
- setupPoints();
-#if 0 // test lighting path too (debug only)
- glEnable(GL_LIGHTING);
- glEnable(GL_LIGHT0);
- glEnable(GL_COLOR_MATERIAL);
-#endif
-
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glOrtho(0, WINDOW_SIZE, 0, WINDOW_SIZE, -1.0, 1.0);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
-
- // render with RGBA colors and save image
- glClear(GL_COLOR_BUFFER_BIT);
- renderPoints(false);
- rgbaImage.read(0, 0); // pos=(0,0)
- w.swap();
-
- // render with BGRA colors and save image
- glClear(GL_COLOR_BUFFER_BIT);
- renderPoints(true);
- bgraImage.read(0, 0); // pos=(0,0)
- w.swap();
-
- // images should be identical
- r.pass = (rgbaImage == bgraImage);
- if (!r.pass) {
- reportError("BGRA colors did not match RGBA colors.");
- }
-}
-
-
-void
-VertArrayBGRATest::logOne(VertArrayBGRAResult &r)
-{
- logPassFail(r);
- logConcise(r);
-}
-
-
-void
-VertArrayBGRAResult::putresults(ostream &s) const
-{
- if (pass) {
- s << "PASS\n";
- }
- else {
- s << "FAIL\n";
- }
-}
-
-
-bool
-VertArrayBGRAResult::getresults(istream &s)
-{
- char result[1000];
- s >> result;
-
- if (strcmp(result, "FAIL") == 0) {
- pass = false;
- }
- else {
- pass = true;
- }
- return s.good();
-}
-
-
-// The test object itself:
-VertArrayBGRATest vertArrayBGRATest("vertArrayBGRA", "window, rgb",
- "GL_EXT_vertex_array_bgra",
- "Test the GL_EXT_vertex_array_bgra extension.\n");
-
-
-
-} // namespace GLEAN
-
-
diff --git a/tests/glean/tvertarraybgra.h b/tests/glean/tvertarraybgra.h
deleted file mode 100644
index 2b3a11845..000000000
--- a/tests/glean/tvertarraybgra.h
+++ /dev/null
@@ -1,74 +0,0 @@
-// BEGIN_COPYRIGHT -*- glean -*-
-//
-// Copyright (C) 2009 VMware, Inc. 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 VMWARE 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
-
-// tvertarraybgra.h: Test GL_EXT_vertex_array bgra
-
-#ifndef __tvertarraybgra_h__
-#define __tvertarraybgra_h__
-
-#include "tbase.h"
-
-
-namespace GLEAN {
-
-#define NUM_POINTS 1000
-#define WINDOW_SIZE 100
-
-class VertArrayBGRAResult: public BaseResult
-{
-public:
- VertArrayBGRAResult();
-
- virtual void putresults(ostream& s) const;
- virtual bool getresults(istream& s);
-
- bool pass;
-};
-
-
-class VertArrayBGRATest: public BaseTest<VertArrayBGRAResult>
-{
-public:
- GLEAN_CLASS_WH(VertArrayBGRATest, VertArrayBGRAResult,
- WINDOW_SIZE, WINDOW_SIZE);
-
-private:
- float mPos[NUM_POINTS][2];
- GLubyte mRGBA[NUM_POINTS][4];
- GLubyte mBGRA[NUM_POINTS][4];
-
- void reportError(const char *msg);
- bool testAPI(void);
- void setupPoints(void);
- void renderPoints(bool useBGRA);
-};
-
-} // namespace GLEAN
-
-#endif // __tvertarraybgra_h__
-
diff --git a/tests/glean/tvertattrib.cpp b/tests/glean/tvertattrib.cpp
deleted file mode 100644
index e18077aa6..000000000
--- a/tests/glean/tvertattrib.cpp
+++ /dev/null
@@ -1,1398 +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
-
-
-// tvertattrib.cpp: Test vertex attribute functions.
-//
-// Indexed vertex attributes may either alias with conventional attributes
-// or name a separate set of generic attributes. The following extensions/
-// versions are tested (and whether aliasing is allowed):
-// GL_NV_vertex_program (aliasing required)
-// GL_ARB_vertex_program (aliasing optional)
-// GL_ARB_vertex_shader (aliasing disallowed)
-// OpenGL 2.0 (aliasing disallowed)
-//
-// If either GL_ARB_vertex_shader or OpenGL 2.0 is supported, that means
-// aliasing is required for GL_ARB_vertex_program too.
-//
-// We test both immediate mode and display list mode.
-//
-// Author: Brian Paul (brian.paul a t tungstengraphics.com) October 2004
-
-
-#include <stdlib.h>
-#include <cassert>
-#include <math.h>
-#include "tvertattrib.h"
-#include "glutils.h"
-
-namespace GLEAN {
-
-#define COPY1(DST, SRC) DST[0] = SRC[0]; DST[1] = 0.0F; DST[2] = 0.0F; DST[3] = 1.0F
-
-#define COPY2(DST, SRC) DST[0] = SRC[0]; DST[1] = SRC[1]; DST[2] = 0.0F; DST[3] = 1.0F
-
-#define COPY3(DST, SRC) DST[0] = SRC[0]; DST[1] = SRC[1]; DST[2] = SRC[2]; DST[3] = 1.0F
-
-#define COPY4(DST, SRC) DST[0] = SRC[0]; DST[1] = SRC[1]; DST[2] = SRC[2]; DST[3] = SRC[3]
-
-#define FLOAT_TO_BYTE(X) ( (((GLint) (255.0F * (X))) - 1) / 2 )
-
-#define FLOAT_TO_UBYTE(X) ((GLubyte) (GLint) ((X) * 255.0F))
-
-#define FLOAT_TO_SHORT(X) ( (((GLint) (65535.0F * (X))) - 1) / 2 )
-
-#define FLOAT_TO_USHORT(X) ((GLushort) (GLint) ((X) * 65535.0F))
-
-#define FLOAT_TO_INT(X) ( (GLint) (2147483647.0 * (X)) )
-
-#define FLOAT_TO_UINT(X) ((GLuint) ((X) * 4294967295.0))
-
-
-#define NUM_NV_ATTRIB_FUNCS 26
-#define NUM_ARB_ATTRIB_FUNCS 36
-#define NUM_2_0_ATTRIB_FUNCS 36
-
-static const char *
-AttribFuncNames[] = {
- "glVertexAttrib1fNV",
- "glVertexAttrib2fNV",
- "glVertexAttrib3fNV",
- "glVertexAttrib4fNV",
- "glVertexAttrib1fvNV",
- "glVertexAttrib2fvNV",
- "glVertexAttrib3fvNV",
- "glVertexAttrib4fvNV",
- "glVertexAttrib1dNV",
- "glVertexAttrib2dNV",
- "glVertexAttrib3dNV",
- "glVertexAttrib4dNV",
- "glVertexAttrib1dvNV",
- "glVertexAttrib2dvNV",
- "glVertexAttrib3dvNV",
- "glVertexAttrib4dvNV",
- "glVertexAttrib1sNV",
- "glVertexAttrib2sNV",
- "glVertexAttrib3sNV",
- "glVertexAttrib4sNV",
- "glVertexAttrib1svNV",
- "glVertexAttrib2svNV",
- "glVertexAttrib3svNV",
- "glVertexAttrib4svNV",
- "glVertexAttrib4ubNV",
- "glVertexAttrib4ubvNV",
-
- "glVertexAttrib1fARB",
- "glVertexAttrib2fARB",
- "glVertexAttrib3fARB",
- "glVertexAttrib4fARB",
- "glVertexAttrib1fvARB",
- "glVertexAttrib2fvARB",
- "glVertexAttrib3fvARB",
- "glVertexAttrib4fvARB",
- "glVertexAttrib1dARB",
- "glVertexAttrib2dARB",
- "glVertexAttrib3dARB",
- "glVertexAttrib4dARB",
- "glVertexAttrib1dvARB",
- "glVertexAttrib2dvARB",
- "glVertexAttrib3dvARB",
- "glVertexAttrib4dvARB",
- "glVertexAttrib1sARB",
- "glVertexAttrib2sARB",
- "glVertexAttrib3sARB",
- "glVertexAttrib4sARB",
- "glVertexAttrib1svARB",
- "glVertexAttrib2svARB",
- "glVertexAttrib3svARB",
- "glVertexAttrib4svARB",
- "glVertexAttrib4NsvARB",
- "glVertexAttrib4NubARB",
- "glVertexAttrib4NubvARB",
- "glVertexAttrib4ubvARB",
- "glVertexAttrib4NbvARB",
- "glVertexAttrib4bvARB",
- "glVertexAttrib4NivARB",
- "glVertexAttrib4ivARB",
- "glVertexAttrib4NuivARB",
- "glVertexAttrib4uivARB",
- "glVertexAttrib4NusvARB",
- "glVertexAttrib4usvARB",
-
- "glVertexAttrib1f",
- "glVertexAttrib2f",
- "glVertexAttrib3f",
- "glVertexAttrib4f",
- "glVertexAttrib1fv",
- "glVertexAttrib2fv",
- "glVertexAttrib3fv",
- "glVertexAttrib4fv",
- "glVertexAttrib1d",
- "glVertexAttrib2d",
- "glVertexAttrib3d",
- "glVertexAttrib4d",
- "glVertexAttrib1dv",
- "glVertexAttrib2dv",
- "glVertexAttrib3dv",
- "glVertexAttrib4dv",
- "glVertexAttrib1s",
- "glVertexAttrib2s",
- "glVertexAttrib3s",
- "glVertexAttrib4s",
- "glVertexAttrib1sv",
- "glVertexAttrib2sv",
- "glVertexAttrib3sv",
- "glVertexAttrib4sv",
- "glVertexAttrib4Nsv",
- "glVertexAttrib4Nub",
- "glVertexAttrib4Nubv",
- "glVertexAttrib4ubv",
- "glVertexAttrib4Nbv",
- "glVertexAttrib4bv",
- "glVertexAttrib4Niv",
- "glVertexAttrib4iv",
- "glVertexAttrib4Nuiv",
- "glVertexAttrib4uiv",
- "glVertexAttrib4Nusv",
- "glVertexAttrib4usv"
-};
-
-
-// Set a vertex attribute with one of the many glVertexAttrib* functions.
-// index = the vertex attribute
-// v = the 4-element attribute value
-// funcIndex = indicates which glVertexAttrib* function to use
-// refOut = returns the value which should now be in the attribute register
-//
-static void
-SetAttrib(GLuint index, const GLfloat v[4], GLuint funcIndex, GLfloat refOut[4])
-{
- switch (funcIndex) {
- // ** GLfloat-valued functions
-#if defined(GL_NV_vertex_program)
- case 0:
- {
- glVertexAttrib1fNV(index, v[0]);
- COPY1(refOut, v);
- }
- break;
- case 1:
- {
- glVertexAttrib2fNV(index, v[0], v[1]);
- COPY2(refOut, v);
- }
- break;
- case 2:
- {
- glVertexAttrib3fNV(index, v[0], v[1], v[2]);
- COPY3(refOut, v);
- }
- break;
- case 3:
- {
- glVertexAttrib4fNV(index, v[0], v[1], v[2], v[3]);
- COPY4(refOut, v);
- }
- break;
- case 4:
- {
- glVertexAttrib1fvNV(index, v);
- COPY1(refOut, v);
- }
- break;
- case 5:
- {
- glVertexAttrib2fvNV(index, v);
- COPY2(refOut, v);
- }
- break;
- case 6:
- {
- glVertexAttrib3fvNV(index, v);
- COPY3(refOut, v);
- }
- break;
- case 7:
- {
- glVertexAttrib4fvNV(index, v);
- COPY4(refOut, v);
- }
- break;
- // ** GLdouble-valued functions
- case 8:
- {
- glVertexAttrib1dNV(index, v[0]);
- COPY1(refOut, v);
- }
- break;
- case 9:
- {
- glVertexAttrib2dNV(index, v[0], v[1]);
- COPY2(refOut, v);
- }
- break;
- case 10:
- {
- glVertexAttrib3dNV(index, v[0], v[1], v[2]);
- COPY3(refOut, v);
- }
- break;
- case 11:
- {
- glVertexAttrib4dNV(index, v[0], v[1], v[2], v[3]);
- COPY4(refOut, v);
- }
- break;
- case 12:
- {
- GLdouble d[1];
- d[0] = v[0];
- glVertexAttrib1dvNV(index, d);
- COPY1(refOut, v);
- }
- break;
- case 13:
- {
- GLdouble d[2];
- d[0] = v[0];
- d[1] = v[1];
- glVertexAttrib2dvNV(index, d);
- COPY2(refOut, v);
- }
- break;
- case 14:
- {
- GLdouble d[3];
- d[0] = v[0];
- d[1] = v[1];
- d[2] = v[2];
- glVertexAttrib3dvNV(index, d);
- COPY3(refOut, v);
- }
- break;
- case 15:
- {
- GLdouble d[4];
- d[0] = v[0];
- d[1] = v[1];
- d[2] = v[2];
- d[3] = v[3];
- glVertexAttrib4dvNV(index, d);
- COPY4(refOut, v);
- }
- break;
- // ** GLshort-valued functions
- case 16:
- {
- glVertexAttrib1sNV(index, (GLshort) v[0]);
- refOut[0] = (GLfloat) (GLshort) v[0];
- refOut[1] = 0.0F;
- refOut[2] = 0.0F;
- refOut[3] = 1.0F;
- }
- break;
- case 17:
- {
- glVertexAttrib2sNV(index, (GLshort) v[0], (GLshort) v[1]);
- refOut[0] = (GLfloat) (GLshort) v[0];
- refOut[1] = (GLfloat) (GLshort) v[1];
- refOut[2] = 0.0F;
- refOut[3] = 1.0F;
- }
- break;
- case 18:
- {
- glVertexAttrib3sNV(index, (GLshort) v[0], (GLshort) v[1], (GLshort) v[2]);
- refOut[0] = (GLfloat) (GLshort) v[0];
- refOut[1] = (GLfloat) (GLshort) v[1];
- refOut[2] = (GLfloat) (GLshort) v[2];
- refOut[3] = 1.0F;
- }
- break;
- case 19:
- {
- glVertexAttrib4sNV(index, (GLshort) v[0], (GLshort) v[1], (GLshort) v[2], (GLshort) v[3]);
- refOut[0] = (GLfloat) (GLshort) v[0];
- refOut[1] = (GLfloat) (GLshort) v[1];
- refOut[2] = (GLfloat) (GLshort) v[2];
- refOut[3] = (GLfloat) (GLshort) v[3];
- }
- break;
- case 20:
- {
- GLshort s[1];
- s[0] = (GLshort) v[0];
- glVertexAttrib1svNV(index, s);
- refOut[0] = (GLfloat) (GLshort) v[0];
- refOut[1] = 0.0F;
- refOut[2] = 0.0F;
- refOut[3] = 1.0F;
- }
- break;
- case 21:
- {
- GLshort s[2];
- s[0] = (GLshort) v[0];
- s[1] = (GLshort) v[1];
- glVertexAttrib2svNV(index, s);
- refOut[0] = (GLfloat) (GLshort) v[0];
- refOut[1] = (GLfloat) (GLshort) v[1];
- refOut[2] = 0.0F;
- refOut[3] = 1.0F;
- }
- break;
- case 22:
- {
- GLshort s[3];
- s[0] = (GLshort) v[0];
- s[1] = (GLshort) v[1];
- s[2] = (GLshort) v[2];
- glVertexAttrib3svNV(index, s);
- refOut[0] = (GLfloat) (GLshort) v[0];
- refOut[1] = (GLfloat) (GLshort) v[1];
- refOut[2] = (GLfloat) (GLshort) v[2];
- refOut[3] = 1.0F;
- }
- break;
- case 23:
- {
- GLshort s[4];
- s[0] = (GLshort) v[0];
- s[1] = (GLshort) v[1];
- s[2] = (GLshort) v[2];
- s[3] = (GLshort) v[3];
- glVertexAttrib4svNV(index, s);
- refOut[0] = (GLfloat) (GLshort) v[0];
- refOut[1] = (GLfloat) (GLshort) v[1];
- refOut[2] = (GLfloat) (GLshort) v[2];
- refOut[3] = (GLfloat) (GLshort) v[3];
- }
- break;
- // ** GLubyte-valued functions
- case 24:
- {
- glVertexAttrib4ubNV(index, FLOAT_TO_UBYTE(v[0]), FLOAT_TO_UBYTE(v[1]), FLOAT_TO_UBYTE(v[2]), FLOAT_TO_UBYTE(v[3]));
- refOut[0] = v[0];
- refOut[1] = v[1];
- refOut[2] = v[2];
- refOut[3] = v[3];
- }
- break;
- case 25:
- {
- GLubyte ub[4];
- for (int i = 0; i < 4; i++ )
- ub[i] = FLOAT_TO_UBYTE(v[i]);
- glVertexAttrib4ubvNV(index, ub);
- refOut[0] = v[0];
- refOut[1] = v[1];
- refOut[2] = v[2];
- refOut[3] = v[3];
- }
- break;
- /* XXX Also test glVertexAttribs* functions? */
-#endif
-
-#if defined(GL_ARB_vertex_program) || defined (GL_ARB_vertex_shader)
- // ** GLfloat-valued functions
- case 26:
- {
- glVertexAttrib1fARB(index, v[0]);
- COPY1(refOut, v);
- }
- break;
- case 27:
- {
- glVertexAttrib2fARB(index, v[0], v[1]);
- COPY2(refOut, v);
- }
- break;
- case 28:
- {
- glVertexAttrib3fARB(index, v[0], v[1], v[2]);
- COPY3(refOut, v);
- }
- break;
- case 29:
- {
- glVertexAttrib4fARB(index, v[0], v[1], v[2], v[3]);
- COPY4(refOut, v);
- }
- break;
- case 30:
- {
- glVertexAttrib1fvARB(index, v);
- COPY1(refOut, v);
- }
- break;
- case 31:
- {
- glVertexAttrib2fvARB(index, v);
- COPY2(refOut, v);
- }
- break;
- case 32:
- {
- glVertexAttrib3fvARB(index, v);
- COPY3(refOut, v);
- }
- break;
- case 33:
- {
- glVertexAttrib4fvARB(index, v);
- COPY4(refOut, v);
- }
- break;
- // ** GLdouble-valued functions
- case 34:
- {
- glVertexAttrib1dARB(index, v[0]);
- COPY1(refOut, v);
- }
- break;
- case 35:
- {
- glVertexAttrib2dARB(index, v[0], v[1]);
- COPY2(refOut, v);
- }
- break;
- case 36:
- {
- glVertexAttrib3dARB(index, v[0], v[1], v[2]);
- COPY3(refOut, v);
- }
- break;
- case 37:
- {
- glVertexAttrib4dARB(index, v[0], v[1], v[2], v[3]);
- COPY4(refOut, v);
- }
- break;
- case 38:
- {
- GLdouble d[1];
- d[0] = v[0];
- glVertexAttrib1dvARB(index, d);
- COPY1(refOut, v);
- }
- break;
- case 39:
- {
- GLdouble d[2];
- d[0] = v[0];
- d[1] = v[1];
- glVertexAttrib2dvARB(index, d);
- COPY2(refOut, v);
- }
- break;
- case 40:
- {
- GLdouble d[3];
- d[0] = v[0];
- d[1] = v[1];
- d[2] = v[2];
- glVertexAttrib3dvARB(index, d);
- COPY3(refOut, v);
- }
- break;
- case 41:
- {
- GLdouble d[4];
- d[0] = v[0];
- d[1] = v[1];
- d[2] = v[2];
- d[3] = v[3];
- glVertexAttrib4dvARB(index, d);
- COPY4(refOut, v);
- }
- break;
- // ** GLshort-valued functions
- case 42:
- {
- glVertexAttrib1sARB(index, (GLshort) v[0]);
- refOut[0] = (GLfloat) (GLshort) v[0];
- refOut[1] = 0.0F;
- refOut[2] = 0.0F;
- refOut[3] = 1.0F;
- }
- break;
- case 43:
- {
- glVertexAttrib2sARB(index, (GLshort) v[0], (GLshort) v[1]);
- refOut[0] = (GLfloat) (GLshort) v[0];
- refOut[1] = (GLfloat) (GLshort) v[1];
- refOut[2] = 0.0F;
- refOut[3] = 1.0F;
- }
- break;
- case 44:
- {
- glVertexAttrib3sARB(index, (GLshort) v[0], (GLshort) v[1], (GLshort) v[2]);
- refOut[0] = (GLfloat) (GLshort) v[0];
- refOut[1] = (GLfloat) (GLshort) v[1];
- refOut[2] = (GLfloat) (GLshort) v[2];
- refOut[3] = 1.0F;
- }
- break;
- case 45:
- {
- glVertexAttrib4sARB(index, (GLshort) v[0], (GLshort) v[1], (GLshort) v[2], (GLshort) v[3]);
- refOut[0] = (GLfloat) (GLshort) v[0];
- refOut[1] = (GLfloat) (GLshort) v[1];
- refOut[2] = (GLfloat) (GLshort) v[2];
- refOut[3] = (GLfloat) (GLshort) v[3];
- }
- break;
- case 46:
- {
- GLshort s[1];
- s[0] = (GLshort) v[0];
- glVertexAttrib1svARB(index, s);
- refOut[0] = (GLfloat) (GLshort) v[0];
- refOut[1] = 0.0F;
- refOut[2] = 0.0F;
- refOut[3] = 1.0F;
- }
- break;
- case 47:
- {
- GLshort s[2];
- s[0] = (GLshort) v[0];
- s[1] = (GLshort) v[1];
- glVertexAttrib2svARB(index, s);
- refOut[0] = (GLfloat) (GLshort) v[0];
- refOut[1] = (GLfloat) (GLshort) v[1];
- refOut[2] = 0.0F;
- refOut[3] = 1.0F;
- }
- break;
- case 48:
- {
- GLshort s[3];
- s[0] = (GLshort) v[0];
- s[1] = (GLshort) v[1];
- s[2] = (GLshort) v[2];
- glVertexAttrib3svARB(index, s);
- refOut[0] = (GLfloat) (GLshort) v[0];
- refOut[1] = (GLfloat) (GLshort) v[1];
- refOut[2] = (GLfloat) (GLshort) v[2];
- refOut[3] = 1.0F;
- }
- break;
- case 49:
- {
- GLshort s[4];
- s[0] = (GLshort) v[0];
- s[1] = (GLshort) v[1];
- s[2] = (GLshort) v[2];
- s[3] = (GLshort) v[3];
- glVertexAttrib4svARB(index, s);
- refOut[0] = (GLfloat) (GLshort) v[0];
- refOut[1] = (GLfloat) (GLshort) v[1];
- refOut[2] = (GLfloat) (GLshort) v[2];
- refOut[3] = (GLfloat) (GLshort) v[3];
- }
- break;
- case 50:
- {
- GLshort s[4];
- for (int i = 0; i < 4; i++)
- s[i] = FLOAT_TO_SHORT(v[i]);
- glVertexAttrib4NsvARB(index, s);
- COPY4(refOut, v);
- }
- break;
- // ** GLubyte-valued functions
- case 51:
- {
- glVertexAttrib4NubARB(index, FLOAT_TO_UBYTE(v[0]), FLOAT_TO_UBYTE(v[1]), FLOAT_TO_UBYTE(v[2]), FLOAT_TO_UBYTE(v[3]));
- COPY4(refOut, v);
- }
- break;
- case 52:
- {
- GLubyte ub[4];
- for (int i = 0; i < 4; i++ )
- ub[i] = FLOAT_TO_UBYTE(v[i]);
- glVertexAttrib4NubvARB(index, ub);
- COPY4(refOut, v);
- }
- break;
- case 53:
- {
- GLubyte ub[4];
- for (int i = 0; i < 4; i++ )
- ub[i] = (GLubyte) v[i];
- glVertexAttrib4ubvARB(index, ub);
- refOut[0] = (GLfloat) (GLubyte) v[0];
- refOut[1] = (GLfloat) (GLubyte) v[1];
- refOut[2] = (GLfloat) (GLubyte) v[2];
- refOut[3] = (GLfloat) (GLubyte) v[3];
- }
- break;
- // ** GLbyte-valued functions
- case 54:
- {
- GLbyte b[4];
- for (int i = 0; i < 4; i++ )
- b[i] = FLOAT_TO_BYTE(v[i]);
- glVertexAttrib4NbvARB(index, b);
- COPY4(refOut, v);
- }
- break;
- case 55:
- {
- GLbyte b[4];
- for (int i = 0; i < 4; i++ )
- b[i] = (GLbyte) v[i];
- glVertexAttrib4bvARB(index, b);
- refOut[0] = (GLfloat) (GLbyte) v[0];
- refOut[1] = (GLfloat) (GLbyte) v[1];
- refOut[2] = (GLfloat) (GLbyte) v[2];
- refOut[3] = (GLfloat) (GLbyte) v[3];
- }
- break;
- // ** GLint-valued functions
- case 56:
- {
- GLint iv[4];
- for (int i = 0; i < 4; i++ )
- iv[i] = FLOAT_TO_INT(v[i]);
- glVertexAttrib4NivARB(index, iv);
- COPY4(refOut, v);
- }
- break;
- case 57:
- {
- GLint iv[4];
- for (int i = 0; i < 4; i++ )
- iv[i] = (GLint) v[i];
- glVertexAttrib4ivARB(index, iv);
- refOut[0] = (GLfloat) (GLint) v[0];
- refOut[1] = (GLfloat) (GLint) v[1];
- refOut[2] = (GLfloat) (GLint) v[2];
- refOut[3] = (GLfloat) (GLint) v[3];
- }
- break;
- // ** GLuint-valued functions
- case 58:
- {
- GLuint ui[4];
- for (int i = 0; i < 4; i++ )
- ui[i] = FLOAT_TO_UINT(v[i]);
- glVertexAttrib4NuivARB(index, ui);
- COPY4(refOut, v);
- }
- break;
- case 59:
- {
- GLuint ui[4];
- for (int i = 0; i < 4; i++ )
- ui[i] = (GLint) v[i];
- glVertexAttrib4uivARB(index, ui);
- refOut[0] = (GLfloat) (GLint) v[0];
- refOut[1] = (GLfloat) (GLint) v[1];
- refOut[2] = (GLfloat) (GLint) v[2];
- refOut[3] = (GLfloat) (GLint) v[3];
- }
- break;
- // ** GLushort-valued functions
- case 60:
- {
- GLushort us[4];
- for (int i = 0; i < 4; i++ )
- us[i] = FLOAT_TO_USHORT(v[i]);
- glVertexAttrib4NusvARB(index, us);
- COPY4(refOut, v);
- }
- break;
- case 61:
- {
- GLushort us[4];
- for (int i = 0; i < 4; i++ )
- us[i] = (GLint) v[i];
- glVertexAttrib4usvARB(index, us);
- refOut[0] = (GLfloat) (GLint) v[0];
- refOut[1] = (GLfloat) (GLint) v[1];
- refOut[2] = (GLfloat) (GLint) v[2];
- refOut[3] = (GLfloat) (GLint) v[3];
- }
- break;
-#endif
-
-#if defined(GL_VERSION_2_0)
- case 62:
- {
- glVertexAttrib1f(index, v[0]);
- COPY1(refOut, v);
- }
- break;
- case 63:
- {
- glVertexAttrib2f(index, v[0], v[1]);
- COPY2(refOut, v);
- }
- break;
- case 64:
- {
- glVertexAttrib3f(index, v[0], v[1], v[2]);
- COPY3(refOut, v);
- }
- break;
- case 65:
- {
- glVertexAttrib4f(index, v[0], v[1], v[2], v[3]);
- COPY4(refOut, v);
- }
- break;
- case 66:
- {
- glVertexAttrib1fv(index, v);
- COPY1(refOut, v);
- }
- break;
- case 67:
- {
- glVertexAttrib2fv(index, v);
- COPY2(refOut, v);
- }
- break;
- case 68:
- {
- glVertexAttrib3fv(index, v);
- COPY3(refOut, v);
- }
- break;
- case 69:
- {
- glVertexAttrib4fv(index, v);
- COPY4(refOut, v);
- }
- break;
- // ** GLdouble-valued functions
- case 70:
- {
- glVertexAttrib1d(index, v[0]);
- COPY1(refOut, v);
- }
- break;
- case 71:
- {
- glVertexAttrib2d(index, v[0], v[1]);
- COPY2(refOut, v);
- }
- break;
- case 72:
- {
- glVertexAttrib3d(index, v[0], v[1], v[2]);
- COPY3(refOut, v);
- }
- break;
- case 73:
- {
- glVertexAttrib4d(index, v[0], v[1], v[2], v[3]);
- COPY4(refOut, v);
- }
- break;
- case 74:
- {
- GLdouble d[1];
- d[0] = v[0];
- glVertexAttrib1dv(index, d);
- COPY1(refOut, v);
- }
- break;
- case 75:
- {
- GLdouble d[2];
- d[0] = v[0];
- d[1] = v[1];
- glVertexAttrib2dv(index, d);
- COPY2(refOut, v);
- }
- break;
- case 76:
- {
- GLdouble d[3];
- d[0] = v[0];
- d[1] = v[1];
- d[2] = v[2];
- glVertexAttrib3dv(index, d);
- COPY3(refOut, v);
- }
- break;
- case 77:
- {
- GLdouble d[4];
- d[0] = v[0];
- d[1] = v[1];
- d[2] = v[2];
- d[3] = v[3];
- glVertexAttrib4dv(index, d);
- COPY4(refOut, v);
- }
- break;
- // ** GLshort-valued functions
- case 78:
- {
- glVertexAttrib1s(index, (GLshort) v[0]);
- refOut[0] = (GLfloat) (GLshort) v[0];
- refOut[1] = 0.0F;
- refOut[2] = 0.0F;
- refOut[3] = 1.0F;
- }
- break;
- case 79:
- {
- glVertexAttrib2s(index, (GLshort) v[0], (GLshort) v[1]);
- refOut[0] = (GLfloat) (GLshort) v[0];
- refOut[1] = (GLfloat) (GLshort) v[1];
- refOut[2] = 0.0F;
- refOut[3] = 1.0F;
- }
- break;
- case 80:
- {
- glVertexAttrib3s(index, (GLshort) v[0], (GLshort) v[1], (GLshort) v[2]);
- refOut[0] = (GLfloat) (GLshort) v[0];
- refOut[1] = (GLfloat) (GLshort) v[1];
- refOut[2] = (GLfloat) (GLshort) v[2];
- refOut[3] = 1.0F;
- }
- break;
- case 81:
- {
- glVertexAttrib4s(index, (GLshort) v[0], (GLshort) v[1], (GLshort) v[2], (GLshort) v[3]);
- refOut[0] = (GLfloat) (GLshort) v[0];
- refOut[1] = (GLfloat) (GLshort) v[1];
- refOut[2] = (GLfloat) (GLshort) v[2];
- refOut[3] = (GLfloat) (GLshort) v[3];
- }
- break;
- case 82:
- {
- GLshort s[1];
- s[0] = (GLshort) v[0];
- glVertexAttrib1sv(index, s);
- refOut[0] = (GLfloat) (GLshort) v[0];
- refOut[1] = 0.0F;
- refOut[2] = 0.0F;
- refOut[3] = 1.0F;
- }
- break;
- case 83:
- {
- GLshort s[2];
- s[0] = (GLshort) v[0];
- s[1] = (GLshort) v[1];
- glVertexAttrib2sv(index, s);
- refOut[0] = (GLfloat) (GLshort) v[0];
- refOut[1] = (GLfloat) (GLshort) v[1];
- refOut[2] = 0.0F;
- refOut[3] = 1.0F;
- }
- break;
- case 84:
- {
- GLshort s[3];
- s[0] = (GLshort) v[0];
- s[1] = (GLshort) v[1];
- s[2] = (GLshort) v[2];
- glVertexAttrib3sv(index, s);
- refOut[0] = (GLfloat) (GLshort) v[0];
- refOut[1] = (GLfloat) (GLshort) v[1];
- refOut[2] = (GLfloat) (GLshort) v[2];
- refOut[3] = 1.0F;
- }
- break;
- case 85:
- {
- GLshort s[4];
- s[0] = (GLshort) v[0];
- s[1] = (GLshort) v[1];
- s[2] = (GLshort) v[2];
- s[3] = (GLshort) v[3];
- glVertexAttrib4sv(index, s);
- refOut[0] = (GLfloat) (GLshort) v[0];
- refOut[1] = (GLfloat) (GLshort) v[1];
- refOut[2] = (GLfloat) (GLshort) v[2];
- refOut[3] = (GLfloat) (GLshort) v[3];
- }
- break;
- case 86:
- {
- GLshort s[4];
- for (int i = 0; i < 4; i++)
- s[i] = FLOAT_TO_SHORT(v[i]);
- glVertexAttrib4Nsv(index, s);
- COPY4(refOut, v);
- }
- break;
- // ** GLubyte-valued functions
- case 87:
- {
- glVertexAttrib4Nub(index, FLOAT_TO_UBYTE(v[0]), FLOAT_TO_UBYTE(v[1]), FLOAT_TO_UBYTE(v[2]), FLOAT_TO_UBYTE(v[3]));
- COPY4(refOut, v);
- }
- break;
- case 88:
- {
- GLubyte ub[4];
- for (int i = 0; i < 4; i++ )
- ub[i] = FLOAT_TO_UBYTE(v[i]);
- glVertexAttrib4Nubv(index, ub);
- COPY4(refOut, v);
- }
- break;
- case 89:
- {
- GLubyte ub[4];
- for (int i = 0; i < 4; i++ )
- ub[i] = (GLubyte) v[i];
- glVertexAttrib4ubv(index, ub);
- refOut[0] = (GLfloat) (GLubyte) v[0];
- refOut[1] = (GLfloat) (GLubyte) v[1];
- refOut[2] = (GLfloat) (GLubyte) v[2];
- refOut[3] = (GLfloat) (GLubyte) v[3];
- }
- break;
- // ** GLbyte-valued functions
- case 90:
- {
- GLbyte b[4];
- for (int i = 0; i < 4; i++ )
- b[i] = FLOAT_TO_BYTE(v[i]);
- glVertexAttrib4Nbv(index, b);
- COPY4(refOut, v);
- }
- break;
- case 91:
- {
- GLbyte b[4];
- for (int i = 0; i < 4; i++ )
- b[i] = (GLbyte) v[i];
- glVertexAttrib4bv(index, b);
- refOut[0] = (GLfloat) (GLbyte) v[0];
- refOut[1] = (GLfloat) (GLbyte) v[1];
- refOut[2] = (GLfloat) (GLbyte) v[2];
- refOut[3] = (GLfloat) (GLbyte) v[3];
- }
- break;
- // ** GLint-valued functions
- case 92:
- {
- GLint iv[4];
- for (int i = 0; i < 4; i++ )
- iv[i] = FLOAT_TO_INT(v[i]);
- glVertexAttrib4Niv(index, iv);
- COPY4(refOut, v);
- }
- break;
- case 93:
- {
- GLint iv[4];
- for (int i = 0; i < 4; i++ )
- iv[i] = (GLint) v[i];
- glVertexAttrib4iv(index, iv);
- refOut[0] = (GLfloat) (GLint) v[0];
- refOut[1] = (GLfloat) (GLint) v[1];
- refOut[2] = (GLfloat) (GLint) v[2];
- refOut[3] = (GLfloat) (GLint) v[3];
- }
- break;
- // ** GLuint-valued functions
- case 94:
- {
- GLuint ui[4];
- for (int i = 0; i < 4; i++ )
- ui[i] = FLOAT_TO_UINT(v[i]);
- glVertexAttrib4Nuiv(index, ui);
- COPY4(refOut, v);
- }
- break;
- case 95:
- {
- GLuint ui[4];
- for (int i = 0; i < 4; i++ )
- ui[i] = (GLint) v[i];
- glVertexAttrib4uiv(index, ui);
- refOut[0] = (GLfloat) (GLint) v[0];
- refOut[1] = (GLfloat) (GLint) v[1];
- refOut[2] = (GLfloat) (GLint) v[2];
- refOut[3] = (GLfloat) (GLint) v[3];
- }
- break;
- // ** GLushort-valued functions
- case 96:
- {
- GLushort us[4];
- for (int i = 0; i < 4; i++ )
- us[i] = FLOAT_TO_USHORT(v[i]);
- glVertexAttrib4Nusv(index, us);
- COPY4(refOut, v);
- }
- break;
- case 97:
- {
- GLushort us[4];
- for (int i = 0; i < 4; i++ )
- us[i] = (GLint) v[i];
- glVertexAttrib4usv(index, us);
- refOut[0] = (GLfloat) (GLint) v[0];
- refOut[1] = (GLfloat) (GLint) v[1];
- refOut[2] = (GLfloat) (GLint) v[2];
- refOut[3] = (GLfloat) (GLint) v[3];
- }
- break;
-#endif
-
- default:
- // never get here!
- abort();
- }
-
- assert(98 == NUM_NV_ATTRIB_FUNCS + NUM_ARB_ATTRIB_FUNCS + NUM_2_0_ATTRIB_FUNCS);
-}
-
-
-// Test if 'a and 'b' are within an epsilon of each other
-static bool
-NearlyEqual(const GLfloat a[4], const GLfloat b[4])
-{
- const GLfloat epsilon = 0.05;
- if (fabsf(a[0] - b[0]) > epsilon ||
- fabsf(a[1] - b[1]) > epsilon ||
- fabsf(a[2] - b[2]) > epsilon ||
- fabsf(a[3] - b[3]) > epsilon)
- return 0;
- else
- return 1;
-}
-
-
-void VertAttribTest::FailMessage(VertAttribResult &r, const char *msg,
- const char *func, int dlistMode) const
-{
- // record the failure
- r.pass = false;
-
- // print the message
- env->log << name << ": FAIL "
- << r.config->conciseDescription() << '\n';
- env->log << "\t" << msg << " (Testing " << func << " in ";
-
- if (dlistMode)
- env->log << "display list mode)\n";
- else
- env->log << "immediate mode)\n";
-}
-
-
-
-// Test setting/getting a set of vertex attribute values
-// Return true if pass, false if fail
-bool
-VertAttribTest::TestAttribs(VertAttribResult &r,
- int attribFunc,
- Aliasing aliasing,
- int numAttribs)
-{
- static const GLfloat refValues[7] = { 1.0F, 0.8F, 0.6F, 0.5F, 0.4F, 0.2F, 0.0F };
- GLfloat refValue[32][4];
- GLfloat refOut[32][4];
- bool result = true;
-
- assert(numAttribs <= 32);
-
- // Initialize the refValue array
- int refIndex = 0;
- for (int i = 1; i < numAttribs; i++) {
- refValue[i][0] = refValues[refIndex++ % 7];
- refValue[i][1] = refValues[refIndex++ % 7];
- refValue[i][2] = refValues[refIndex++ % 7];
- refValue[i][3] = refValues[refIndex++ % 7];
- }
-
- for (int dlist = 0; dlist < 2; dlist++) {
-
- // set a couple conventional attribs for later aliasing tests
- glNormal3f(-1.0F, -2.0F, -3.0F);
- glTexCoord4f(-1.0F, -2.0F, -3.0F, -4.0F);
-
- if (dlist == 1) {
- glNewList(42, GL_COMPILE);
- }
-
- // Set all the vertex attributes
- for (int i = 1; i < numAttribs; i++) {
- SetAttrib(i, refValue[i], attribFunc, refOut[i]);
- }
-
- if (dlist == 1) {
- glEndList();
- glCallList(42);
- }
-
- // Test all the vertex attributes
- for (int i = 1; i < numAttribs; i++) {
- const GLfloat *expected = refOut[i];
- GLfloat v[4];
- glGetVertexAttribfvNV(i, GL_CURRENT_VERTEX_ATTRIB_ARB, v);
- if (!NearlyEqual(v, expected)) {
- char msg[1000];
- sprintf(msg, "Vertex Attribute %d is (%g, %g, %g, %g) but expected (%g, %g, %g, %g)",
- i, v[0], v[1], v[2], v[3],
- expected[0], expected[1], expected[2], expected[3]);
- FailMessage(r, msg, AttribFuncNames[attribFunc], dlist);
- result = false;
- }
- }
-
- if (aliasing == REQUIRED) {
- // spot check a few aliased attribs
- GLfloat v[4];
- glGetFloatv(GL_CURRENT_NORMAL, v);
- v[3] = refOut[2][3];
- if (!NearlyEqual(v, refOut[2])) {
- FailMessage(r, "Setting attribute 2 did not update GL_CURRENT_NORMAL", AttribFuncNames[attribFunc], dlist);
- result = false;
- }
-
- glGetFloatv(GL_CURRENT_TEXTURE_COORDS, v);
- if (!NearlyEqual(v, refOut[8])) {
- FailMessage(r, "Setting attribute 8 did not update GL_CURRENT_TEXTURE_COORDS", AttribFuncNames[attribFunc], dlist);
- result = false;
- }
- }
- else if (aliasing == DISALLOWED) {
- // spot check a few non-aliased attribs
- GLfloat v[4];
- glGetFloatv(GL_CURRENT_NORMAL, v);
- if (v[0] != -1.0F ||
- v[1] != -2.0F ||
- v[2] != -3.0F) {
- FailMessage(r, "GL_CURRENT_NORMAL was erroneously set by a glVertexAttrib call", AttribFuncNames[attribFunc], dlist);
- result = false;
- }
- glGetFloatv(GL_CURRENT_TEXTURE_COORDS, v);
- if (v[0] != -1.0F ||
- v[1] != -2.0F ||
- v[2] != -3.0F ||
- v[3] != -4.0F) {
- FailMessage(r, "GL_CURRENT_TEXTURE_COORDS was erroneously set by a glVertexAttrib call", AttribFuncNames[attribFunc], dlist);
- result = false;
- }
- }
-
- } // dlist loop
-
- return result;
-}
-
-
-// Test the GL_NV_vertex_program functions
-// Return true if pass, false if fail
-bool
-VertAttribTest::TestNVfuncs(VertAttribResult &r)
-{
- bool result = true;
-#ifdef GL_NV_vertex_program
- const GLint numAttribs = 16;
- const Aliasing aliasing = REQUIRED;
-
- r.numNVtested = 0;
-
- for (int attribFunc = 0; attribFunc < NUM_NV_ATTRIB_FUNCS; attribFunc++) {
- bool b;
- b = TestAttribs(r, attribFunc, aliasing, numAttribs);
- if (!b)
- result = false;
- r.numNVtested++;
- }
-#else
- (void) r;
-#endif
- return result;
-}
-
-
-// Test the GL_ARB_vertex_program/shader functions
-// Return true if pass, false if fail
-bool
-VertAttribTest::TestARBfuncs(VertAttribResult &r, bool shader)
-{
- bool result = true;
-#if defined(GL_ARB_vertex_program) || defined(GL_ARB_vertex_shader)
- GLint numAttribs;
-
- glGetIntegerv(GL_MAX_VERTEX_ATTRIBS_ARB, &numAttribs);
- assert(numAttribs > 0);
-
- r.numARBtested = 0;
-
- if (shader) {
- // test GL_ARB_vertex_shader (aliasing is disallowed)
- const Aliasing aliasing = DISALLOWED;
- for (int i = 0; i < NUM_ARB_ATTRIB_FUNCS; i++) {
- int attribFunc = NUM_NV_ATTRIB_FUNCS + i;
- bool b;
- b = TestAttribs(r, attribFunc, aliasing, numAttribs);
- if (!b)
- result = false;
- r.numARBtested++;
- }
- }
- else {
- // test GL_ARB_vertex_program:
- // Determine if attribute aliasing is allowed
- Aliasing aliasing;
- if (GLUtils::haveExtension("GL_ARB_vertex_shader")) {
- aliasing = DISALLOWED;
- }
- else {
- // check for OpenGL 2.x support
- char *vers = (char *) glGetString(GL_VERSION);
- if (vers[0] == '2' && vers[1] == '.') {
- aliasing = DISALLOWED;
- }
- else {
- assert(vers[0] == '1'); /* revisit when we have OpenGL 3.x */
- aliasing = OPTIONAL;
- }
- }
- for (int i = 0; i < NUM_ARB_ATTRIB_FUNCS; i++) {
- int attribFunc = NUM_NV_ATTRIB_FUNCS + i;
- bool b;
- b = TestAttribs(r, attribFunc, aliasing, numAttribs);
- if (!b)
- result = false;
- r.numARBtested++;
- }
- }
-#else
- (void) r;
-#endif
- return result;
-}
-
-
-// Test the OpenGL 2.x glVertexAttrib functions
-// Return true if pass, false if fail
-bool
-VertAttribTest::Test20funcs(VertAttribResult &r)
-{
- bool result = true;
-#ifdef GL_VERSION_2_0
- GLint numAttribs;
- const Aliasing aliasing = DISALLOWED;
-
- glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &numAttribs);
- assert(numAttribs > 0);
-
- r.num20tested = 0;
-
- for (int i = 0; i < NUM_2_0_ATTRIB_FUNCS; i++) {
- int attribFunc = NUM_NV_ATTRIB_FUNCS + NUM_ARB_ATTRIB_FUNCS+ i;
- bool b;
- b = TestAttribs(r, attribFunc, aliasing, numAttribs);
- if (!b)
- result = false;
- r.num20tested++;
- }
-#else
- (void) r;
-#endif
- return result;
-}
-
-
-void
-VertAttribTest::runOne(VertAttribResult& r, Window&)
-{
-
- assert(sizeof(AttribFuncNames) / sizeof(AttribFuncNames[0]) ==
- NUM_NV_ATTRIB_FUNCS + NUM_ARB_ATTRIB_FUNCS + NUM_2_0_ATTRIB_FUNCS);
-
- r.pass = true;
-#ifdef GL_NV_vertex_program
- if (GLUtils::haveExtension("GL_NV_vertex_program")) {
- bool p = TestNVfuncs(r);
- if (!p)
- r.pass = false;
- }
-#endif
-#ifdef GL_ARB_vertex_program
- if (GLUtils::haveExtension("GL_ARB_vertex_program")) {
- bool p = TestARBfuncs(r, false);
- if (!p)
- r.pass = false;
- }
-#endif
-#ifdef GL_ARB_vertex_shader
- if (GLUtils::haveExtension("GL_ARB_vertex_shader")) {
- bool p = TestARBfuncs(r, true);
- if (!p)
- r.pass = false;
- }
-#endif
-#ifdef GL_VERSION_2_0
- const char *vers = (const char *) glGetString(GL_VERSION);
- if (vers[0] == '2' && vers[1] == '.') {
- bool p = Test20funcs(r);
- if (!p)
- r.pass = false;
- }
-#endif
-}
-
-
-void
-VertAttribTest::logOne(VertAttribResult& r)
-{
- logPassFail(r);
- logConcise(r);
- logStats(r);
-}
-
-
-void
-VertAttribTest::logStats(VertAttribResult& r)
-{
- env->log << "\t" << r.numNVtested << " GL_NV_vertex_program functions tested\n";
- env->log << "\t" << r.numARBtested << " GL_ARB_vertex_program/shader functions tested\n";
- env->log << "\t" << r.num20tested << " OpenGL 2.0 functions tested\n";
-}
-
-
-// Instantiate this test object
-VertAttribTest vertAttribTest("vertattrib", "window, rgb",
- "Verify that the glVertexAttribNV, glVertexAttribARB, and glVertexAttrib\n"
- "functions all work correctly.\n");
-
-
-} // namespace GLEAN
diff --git a/tests/glean/tvertattrib.h b/tests/glean/tvertattrib.h
deleted file mode 100644
index ba6964001..000000000
--- a/tests/glean/tvertattrib.h
+++ /dev/null
@@ -1,95 +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
-
-
-#ifndef __tvertattrib_h__
-#define __tvertattrib_h__
-
-#include "tbase.h"
-
-// Avoid name collision on Windows
-#undef OPTIONAL
-
-namespace GLEAN {
-
-
-class VertAttribResult: public BaseResult
-{
-public:
- bool pass;
- int numNVtested, numARBtested, num20tested;
-
- VertAttribResult()
- {
- numNVtested = numARBtested = num20tested = 0;
- }
-
- virtual void putresults(ostream& s) const
- {
- s << pass
- << ' ' << numNVtested
- << ' ' << numARBtested
- << ' ' << num20tested
- << '\n';
- }
-
- virtual bool getresults(istream& s)
- {
- s >> pass >> numNVtested >> numARBtested >> num20tested;
- return s.good();
- }
-};
-
-
-class VertAttribTest: public BaseTest<VertAttribResult>
-{
-public:
- GLEAN_CLASS(VertAttribTest, VertAttribResult);
- virtual void logStats(VertAttribResult& r);
-
-private:
- enum Aliasing {
- REQUIRED,
- DISALLOWED,
- OPTIONAL
- };
-
- void FailMessage(VertAttribResult &r, const char *msg,
- const char *ext, int dlistMode) const;
- bool TestAttribs(VertAttribResult &r,
- int attribFunc,
- Aliasing aliasing,
- int numAttribs);
- bool TestNVfuncs(VertAttribResult &r);
- bool TestARBfuncs(VertAttribResult &r, bool shader);
- bool Test20funcs(VertAttribResult &r);
-};
-
-} // namespace GLEAN
-
-#endif // __tvertattrib_h__
diff --git a/tests/no_error.py b/tests/no_error.py
index e63d3939b..3e063130c 100644
--- a/tests/no_error.py
+++ b/tests/no_error.py
@@ -21,8 +21,7 @@ profile.test_list = TestDict()
# Add a modified version of each PiglitGLTest as a khr_no_error variant.
# Shader runner doesn't explitly test for expected errors so we add shader
-# tests as is. We actively filter GleanTest instances as well as GLSL parser
-# and any other type of tests.
+# tests as is. We actively filter GLSL parser and any other type of tests.
for name, test in six.iteritems(old_test_list):
if isinstance(test, (PiglitGLTest, ShaderTest, MultiShaderTest)):
profile.test_list['{} khr_no_error'.format(name)] = test
diff --git a/tests/quick.py b/tests/quick.py
index 5107d9fe4..1a7d674d0 100644
--- a/tests/quick.py
+++ b/tests/quick.py
@@ -16,7 +16,7 @@ from __future__ import (
import random
from framework import grouptools
-from framework.test import (GleanTest, PiglitGLTest)
+from framework.test import PiglitGLTest
from tests.all import profile as _profile
__all__ = ['profile']
@@ -41,8 +41,6 @@ class FilterVsIn(object):
profile = _profile.copy() # pylint: disable=invalid-name
-GleanTest.GLOBAL_PARAMS += ["--quick"]
-
# Set the --quick flag on a few image_load_store_tests
with profile.test_list.group_manager(
PiglitGLTest,