summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaura Ekstrand <laura@jlekstrand.net>2014-10-13 14:01:53 -0700
committerLaura Ekstrand <laura@jlekstrand.net>2014-10-28 15:12:19 -0700
commit6ad5879ace9e2c1cde3f504ebf1e9610a2bb2fb8 (patch)
tree772bf206d63f0f2dae3b3e36cd84670a9d171cd8
parentf815476c12bc73900480743d91b43b421b4cbb4a (diff)
Removed Glean floating point exceptions test.
-rw-r--r--tests/all.py1
-rw-r--r--tests/glean/CMakeLists.gl.txt1
-rw-r--r--tests/glean/tfpexceptions.cpp601
-rw-r--r--tests/glean/tfpexceptions.h78
4 files changed, 0 insertions, 681 deletions
diff --git a/tests/all.py b/tests/all.py
index eea3d10c3..8edb3743f 100644
--- a/tests/all.py
+++ b/tests/all.py
@@ -106,7 +106,6 @@ glean['makeCurrent'] = GleanTest('makeCurrent')
glean['bufferObject'] = GleanTest('bufferObject')
glean['depthStencil'] = GleanTest('depthStencil')
glean['fbo'] = GleanTest('fbo')
-glean['fpexceptions'] = GleanTest('fpexceptions')
glean['getString'] = GleanTest('getString')
glean['logicOp'] = GleanTest('logicOp')
glean['occluquery'] = GleanTest('occluQry')
diff --git a/tests/glean/CMakeLists.gl.txt b/tests/glean/CMakeLists.gl.txt
index 3428a5047..996558dbf 100644
--- a/tests/glean/CMakeLists.gl.txt
+++ b/tests/glean/CMakeLists.gl.txt
@@ -31,7 +31,6 @@ piglit_add_executable (glean
tbinding.cpp
test.cpp
tfbo.cpp
- tfpexceptions.cpp
tfragprog1.cpp
tglsl1.cpp
tlogicop.cpp
diff --git a/tests/glean/tfpexceptions.cpp b/tests/glean/tfpexceptions.cpp
deleted file mode 100644
index 09c6329e3..000000000
--- a/tests/glean/tfpexceptions.cpp
+++ /dev/null
@@ -1,601 +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
-
-// Authors: Brian Paul, Keith Whitwell
-
-#include "tfpexceptions.h"
-#include <cmath>
-
-#define INCLUDE_FPU_CONTROL 0
-#if INCLUDE_FPU_CONTROL
-#include <fpu_control.h>
-#endif
-
-
-namespace GLEAN {
-
-
-// This might be useful at some point
-void
-FPExceptionsTest::enableExceptions(bool enable)
-{
-#if INCLUDE_FPU_CONTROL
- const fpu_control_t bits =
- _FPU_MASK_IM |
- _FPU_MASK_DM |
- _FPU_MASK_ZM |
- _FPU_MASK_OM |
- _FPU_MASK_UM;
-
- if (enable) {
- /* generate FP exceptions */
- fpu_control_t mask;
- _FPU_GETCW(mask);
- mask &= ~bits;
- _FPU_SETCW(mask);
- }
- else {
- fpu_control_t mask;
- _FPU_GETCW(mask);
- mask |= bits;
- _FPU_SETCW(mask);
- }
-#else
- (void) enable;
-#endif
-}
-
-
-
-// XXX any endian issues with this???
-// Works on x86 / little endian
-union fi {
- float f;
- struct {
- unsigned mantissa:23;
- unsigned exponent:8;
- unsigned sign:1;
- } bits;
- unsigned ui;
-};
-
-
-static void
-make_float(float *dest, unsigned sign, unsigned exponent, unsigned mantissa)
-{
- union fi *destfi = (union fi *) dest;
- destfi->bits.sign = sign;
- destfi->bits.exponent = exponent;
- destfi->bits.mantissa = mantissa;
-}
-
-static void
-make_denorm_float(float *dest, int sign, int mantissa)
-{
- make_float(dest, sign, 0, mantissa);
-}
-
-static void
-make_pos_inf_float(float *dest)
-{
- make_float(dest, 0, 255, 0); // or HUGE_VALF?
-}
-
-static void
-make_neg_inf_float(float *dest)
-{
- make_float(dest, 1, 255, 0); // or -HUGE_VALF?
-}
-
-static void
-make_signaling_nan_float(float *dest)
-{
- make_float(dest, 0, 255, 1);
-}
-
-static void
-make_quiet_nan_float(float *dest)
-{
- make_float(dest, 0, 255, 1 << 22);
-}
-
-static void
-make_denorm_double(double * /*dest*/, int /*sign*/, int /*mantissa*/)
-{
- // XXX to do
-}
-
-static void
-make_pos_inf_double(double *dest)
-{
- *dest = HUGE_VAL;
-}
-
-static void
-make_neg_inf_double(double *dest)
-{
- *dest = -HUGE_VAL;
-}
-
-static void
-make_signaling_nan_double(double * /*dest*/)
-{
- // XXX to do
-}
-
-static void
-make_quiet_nan_double(double * /*dest*/)
-{
- // XXX to do
-}
-
-
-#if 0
-static void
-print_float(float f)
-{
- union fi fi, fi2;
- int iexp, imnt, isgn;
-
- fi.f = f;
- printf("float %f (%e)\n\tuint 0x%x\n\tsign %d exponent %d mantissa 0x%x\n",
- fi.f, fi.f, fi.ui, fi.bits.sign, fi.bits.exponent, fi.bits.mantissa);
-
- switch (fi.bits.exponent) {
- case 0:
- if (fi.bits.mantissa == 0)
- printf("\t%szero\n", fi.bits.sign ? "-" : "+");
- else {
- printf("\tdenormalized float\n");
-
- iexp = -126 - 23; /* -149 */
- imnt = (int)fi.bits.mantissa;
- isgn = fi.bits.sign ? -1 : 1;
- fi2.f = isgn * imnt * ldexp(1.0, iexp);
-
- printf("\trecombining: %d * 0x%x * 2.0^%d == %f (%e)\n",
- isgn, imnt, iexp, fi2.f, fi2.f);
- printf("\trecombined: sign %d exponent %d mantissa 0x%x\n",
- fi2.bits.sign, fi2.bits.exponent, fi2.bits.mantissa);
- }
- break;
-
- case 255:
- if (fi.bits.mantissa & (1<<22))
- printf("\tQNaN (Quiet NaN/indeterminate value)\n");
- else if (fi.bits.mantissa)
- printf("\tSNaN (Signalling NaN/invalid value)\n");
- else
- printf("\t%sinf\n", fi.bits.sign ? "-" : "+");
- break;
-
- default:
- iexp = fi.bits.exponent - (127 + 23);
- imnt = (1<<23) + (int)fi.bits.mantissa;
- isgn = fi.bits.sign ? -1 : 1;
- fi2.f = isgn * imnt * ldexp(1.0, iexp);
-
- printf("\trecombining: %d * 0x%x * 2.0^%d == %f\n",
- isgn, imnt, iexp, fi2.f);
-
- printf("\trecombined: sign %d exponent %d mantissa 0x%x\n",
- fi2.bits.sign, fi2.bits.exponent, fi2.bits.mantissa);
- break;
- }
-
- /* Let's look and see what would happen if we interpret all these
- * cases as normal floats:
- */
- iexp = fi.bits.exponent - (127 + 23);
- imnt = (1<<23) + (int)fi.bits.mantissa;
- isgn = fi.bits.sign ? -1 : 1;
- fi2.f = isgn * imnt * ldexp(1.0, iexp);
-
- printf("\tvalue if treated as normalized: %f (%e)\n",
- fi2.f, fi2.f);
-}
-
-
-/* Examine some interesting floats
- */
-int main()
-{
- float f;
- int i;
-
- for (i = -3; i < 10; i++) {
- printf("%d:\n ", i);
- print_float(ldexp(1.0, i));
- }
-
- for (f = -4 ; f < 4; f += 1)
- print_float(f);
-
- for (f = -.01 ; f < .01; f += .002)
- print_float(f);
-
- f = 1.0/0;
- print_float(f);
-
- f += 1.0;
- print_float(f);
-
- /* Explicitly make a denormal - I've no idea how to create these
- * with regular calculations:
- */
- make_float(&f, 0, 0, 0x1000);
- print_float(f);
-
- /* It seems you can just specify them!
- */
- f = 5.739719e-42;
- print_float(f);
-
- /* A little, non-denormalized float
- */
- make_float(&f, 0, 1, 0x1);
- print_float(f);
-
- /* A negative little, non-denormalized float
- */
- make_float(&f, 1, 1, 0x1);
- print_float(f);
-
- /* A big float
- */
- make_float(&f, 0, 254, ~0);
- print_float(f);
-
- make_float(&f, 1, 254, ~0);
- print_float(f);
-
- /* Littlest and biggest denormals:
- */
- make_float(&f, 0, 0, 1);
- print_float(f);
- make_float(&f, 0, 0, ~0);
- print_float(f);
-
-
- make_float(&f, 1, 0, 1);
- print_float(f);
- make_float(&f, 1, 0, ~0);
- print_float(f);
-
-}
-#endif
-
-
-bool
-FPExceptionsTest::testVertices(Mode m)
-{
- float v[3][4];
- // nice coords
- for (int i = 0; i < 3; i++) {
- v[i][0] = 0.0;
- v[i][1] = 0.0;
- v[i][2] = 0.0;
- v[i][3] = 1.0;
- }
-
- // set problematic values
- switch (m) {
- case MODE_INFINITY:
- make_pos_inf_float(&v[1][0]);
- make_neg_inf_float(&v[2][1]);
- break;
- case MODE_NAN:
- make_signaling_nan_float(&v[1][0]);
- make_quiet_nan_float(&v[2][1]);
- break;
- case MODE_DIVZERO:
- v[0][3] = 0.0;
- v[1][3] = 0.0;
- v[2][3] = 0.0;
- break;
- case MODE_DENORM:
- make_denorm_float(&v[0][0], 0, 1);
- make_denorm_float(&v[1][1], 1, 1);
- break;
- default:
- ; // nothing
- }
-
- // vertex positions
- glBegin(GL_POLYGON);
- glVertex4fv(v[0]);
- glVertex4fv(v[1]);
- glVertex4fv(v[2]);
- glEnd();
-
- // colors
- glBegin(GL_POLYGON);
- glColor4fv(v[0]); glVertex2f(-1, -1);
- glColor4fv(v[1]); glVertex2f( 1, -1);
- glColor4fv(v[2]); glVertex2f( 0, 1);
- glEnd();
-
- // normals
- glEnable(GL_LIGHTING);
- glBegin(GL_POLYGON);
- glNormal3fv(v[0]); glVertex2f(-1, -1);
- glNormal3fv(v[1]); glVertex2f( 1, -1);
- glNormal3fv(v[2]); glVertex2f( 0, 1);
- glEnd();
- glDisable(GL_LIGHTING);
-
- // texcoords
- glEnable(GL_TEXTURE_2D);
- glBegin(GL_POLYGON);
- glTexCoord4fv(v[0]); glVertex2f(-1, -1);
- glTexCoord4fv(v[1]); glVertex2f( 1, -1);
- glTexCoord4fv(v[2]); glVertex2f( 0, 1);
- glEnd();
- glDisable(GL_TEXTURE_2D);
-
- return true;
-}
-
-
-bool
-FPExceptionsTest::testTransformation(Mode m)
-{
- float mat[16];
-
- // identity
- for (int i = 0; i < 15; i++)
- mat[i] = 0.0;
- mat[0] = mat[5] = mat[10] = mat[15] = 1.0;
-
- // set problematic values
- switch (m) {
- case MODE_INFINITY:
- make_pos_inf_float(&mat[0]); // X scale
- make_neg_inf_float(&mat[13]); // Y translate
- break;
- case MODE_NAN:
- make_signaling_nan_float(&mat[0]); // X scale
- make_quiet_nan_float(&mat[13]); // Y translate
- break;
- case MODE_DIVZERO:
- // all zero matrix
- mat[0] = mat[5] = mat[10] = mat[15] = 0.0;
- break;
- case MODE_DENORM:
- make_denorm_float(&mat[0], 0, 1);
- make_denorm_float(&mat[13], 1, 1);
- break;
- default:
- ; // nothing
- }
-
- glMatrixMode(GL_MODELVIEW);
- glPushMatrix();
- glLoadMatrixf(mat);
-
- // vertex positions
- glBegin(GL_POLYGON);
- glVertex2f(-1, -1);
- glVertex2f( 1, -1);
- glVertex2f( 0, 1);
- glEnd();
-
- glPopMatrix();
-
- return true;
-}
-
-
-bool
-FPExceptionsTest::testClipping(Mode m)
-{
- double plane[4];
-
- // start w/ nice values
- plane[0] = plane[1] = plane[2] = plane[3] = 0.0;
-
- // set problematic values
- switch (m) {
- case MODE_INFINITY:
- make_pos_inf_double(&plane[0]);
- make_neg_inf_double(&plane[3]);
- break;
- case MODE_NAN:
- make_signaling_nan_double(&plane[0]);
- make_quiet_nan_double(&plane[3]);
- break;
- case MODE_DIVZERO:
- // nothing
- break;
- case MODE_DENORM:
- make_denorm_double(&plane[0], 0, 1);
- make_denorm_double(&plane[3], 1, 1);
- break;
- case MODE_OVERFLOW:
- plane[0] = 1.0e300;
- plane[3] = 1.0e-300;
- break;
- default:
- ; // nothing
- }
-
- glClipPlane(GL_CLIP_PLANE0, plane);
- glEnable(GL_CLIP_PLANE0);
-
- // vertex positions
- glBegin(GL_POLYGON);
- glVertex2f(-1, -1);
- glVertex2f( 1, -1);
- glVertex2f( 0, 1);
- glEnd();
-
- glDisable(GL_CLIP_PLANE0);
-
- return true;
-}
-
-
-// pass large doubles to OpenGL and see what happens when converted to float.
-bool
-FPExceptionsTest::testOverflow(void)
-{
- GLdouble v[3][4];
- for (int i = 0; i < 3; i++) {
- v[i][0] = 0.0;
- v[i][1] = 0.0;
- v[i][2] = 0.0;
- v[i][3] = 1.0;
- }
- v[0][0] = 1.0e300;
- v[0][1] = -1.0e300;
- v[1][0] = 1.0e-300;
- v[1][1] = 1.0e-300;
-
- GLdouble mat[16];
- for (int i = 0; i < 15; i++)
- mat[i] = 0.0;
- mat[0] = mat[5] = mat[10] = mat[15] = 1.0e100;
-
- glMatrixMode(GL_MODELVIEW);
- glPushMatrix();
- glLoadMatrixd(mat);
-
- glBegin(GL_POLYGON);
- glVertex4dv(v[0]);
- glVertex4dv(v[1]);
- glVertex4dv(v[2]);
- glEnd();
-
- glPopMatrix();
-
- return true;
-}
-
-
-
-void
-FPExceptionsTest::setup(void)
-{
- // Simple texture map
- static const GLfloat texImage[2][2][3] = {
- { {1, 1, 1}, {0, 0, 0} },
- { {0, 0, 0}, {1, 1, 1} }
- };
-
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 2, 2, 0,
- GL_RGB, GL_FLOAT, texImage);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
-
- // simple lighting
- glEnable(GL_LIGHT0);
- glEnable(GL_LIGHT1);
- glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE);
-}
-
-
-void
-FPExceptionsTest::reportPassFail(MultiTestResult &r,
- bool pass, const char *msg) const
-{
- if (pass) {
- if (env->options.verbosity)
- env->log << name << " PASS: " << msg << " test\n";
- r.numPassed++;
- }
- else {
- if (env->options.verbosity)
- env->log << name << " FAILURE: " << msg << " test\n";
- r.numFailed++;
- }
-}
-
-void
-FPExceptionsTest::runOne(MultiTestResult &r, Window &w)
-{
- bool p;
-
- (void) w;
-
- p = testVertices(MODE_INFINITY);
- reportPassFail(r, p, "Infinite value vertex");
-
- p = testVertices(MODE_NAN);
- reportPassFail(r, p, "NaN value vertex");
-
- p = testVertices(MODE_DIVZERO);
- reportPassFail(r, p, "Divide by zero vertex");
-
- p = testVertices(MODE_DENORM);
- reportPassFail(r, p, "Denorm vertex");
-
-
- p = testTransformation(MODE_INFINITY);
- reportPassFail(r, p, "Infinite matrix transform");
-
- p = testTransformation(MODE_NAN);
- reportPassFail(r, p, "NaN matrix transform");
-
- p = testTransformation(MODE_DIVZERO);
- reportPassFail(r, p, "Zero matrix transform");
-
- p = testTransformation(MODE_DENORM);
- reportPassFail(r, p, "Denorm matrix transform");
-
-
- p = testClipping(MODE_INFINITY);
- reportPassFail(r, p, "Infinite clip plane");
-
- p = testClipping(MODE_NAN);
- reportPassFail(r, p, "NaN clip plane");
-
- p = testClipping(MODE_DIVZERO);
- reportPassFail(r, p, "Zero clip plane");
-
- p = testClipping(MODE_DENORM);
- reportPassFail(r, p, "Denorm clip plane");
-
- p = testClipping(MODE_OVERFLOW);
- reportPassFail(r, p, "Overflow clip plane");
-
-
- p = testOverflow();
- reportPassFail(r, p, "Overflow");
-
- r.pass = (r.numFailed == 0);
-}
-
-
-// The test object itself:
-FPExceptionsTest FPExceptionsTest("fpexceptions", // test name
- "window, rgb", // surface/pixel format
- "", // no extensions required
- "Test for floating point exceptions caused by +/-infinity, Nan, divide by zero, etc in a number of circumstances.\n");
-
-
-} // namespace GLEAN
diff --git a/tests/glean/tfpexceptions.h b/tests/glean/tfpexceptions.h
deleted file mode 100644
index fee9a0c67..000000000
--- a/tests/glean/tfpexceptions.h
+++ /dev/null
@@ -1,78 +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
-
-// tfpexceptions.h: Test for floating point exceptions caused by
-// infinity, Nan, denormalized numbers, divide by zero, etc.
-// Brian Paul 9 November 2005
-
-#ifndef __tfpexceptions_h__
-#define __tfpexceptions_h__
-
-#include "tmultitest.h"
-
-namespace GLEAN {
-
-
-#define windowSize 100
-
-
-class FPExceptionsTest: public MultiTest
-{
-public:
- FPExceptionsTest(const char* testName, const char* filter,
- const char *extensions, const char* description)
- : MultiTest(testName, filter, extensions, description)
- {
- }
-
- virtual void runOne(MultiTestResult &r, Window &w);
-
-private:
- enum Mode {
- MODE_INFINITY,
- MODE_NAN,
- MODE_DIVZERO,
- MODE_DENORM,
- MODE_OVERFLOW
- };
-
- void enableExceptions(bool enable);
-
- bool testVertices(Mode m);
- bool testTransformation(Mode m);
- bool testClipping(Mode m);
- bool testOverflow(void);
-
- void reportPassFail(MultiTestResult &r, bool pass, const char *msg) const;
- void setup(void);
-};
-
-
-} // namespace GLEAN
-
-#endif // __tfpexceptions_h__