diff options
author | Ian Romanick <ian.d.romanick@intel.com> | 2011-01-14 20:21:31 -0800 |
---|---|---|
committer | Ian Romanick <ian.d.romanick@intel.com> | 2011-01-14 20:21:31 -0800 |
commit | 8e154631e8a5b64b0fbc2883a4ec9b119a8d50c2 (patch) | |
tree | 2cbd969999bdf267c5527d27f0f738faf54afd11 /tests/spec/arb_es2_compatibility | |
parent | fa0940db3fc687a807a8c4ae6f0a82a2d03f928c (diff) |
arb_es2_compatibility: New test for glGetShaderPrecisionFormat
Diffstat (limited to 'tests/spec/arb_es2_compatibility')
-rw-r--r-- | tests/spec/arb_es2_compatibility/CMakeLists.txt | 1 | ||||
-rw-r--r-- | tests/spec/arb_es2_compatibility/arb_es2_compatibility-getshaderprecisionformat.c | 127 |
2 files changed, 128 insertions, 0 deletions
diff --git a/tests/spec/arb_es2_compatibility/CMakeLists.txt b/tests/spec/arb_es2_compatibility/CMakeLists.txt index 420faa2c2..e319a63fc 100644 --- a/tests/spec/arb_es2_compatibility/CMakeLists.txt +++ b/tests/spec/arb_es2_compatibility/CMakeLists.txt @@ -26,3 +26,4 @@ add_executable (arb_es2_compatibility-drawbuffers arb_es2_compatibility-drawbuff add_executable (arb_es2_compatibility-maxvectors arb_es2_compatibility-maxvectors.c) add_executable (arb_es2_compatibility-releaseshadercompiler arb_es2_compatibility-releaseshadercompiler.c) add_executable (arb_es2_compatibility-shadercompiler arb_es2_compatibility-shadercompiler.c) +add_executable (arb_es2_compatibility-getshaderprecisionformat arb_es2_compatibility-getshaderprecisionformat.c) diff --git a/tests/spec/arb_es2_compatibility/arb_es2_compatibility-getshaderprecisionformat.c b/tests/spec/arb_es2_compatibility/arb_es2_compatibility-getshaderprecisionformat.c new file mode 100644 index 000000000..547102cb0 --- /dev/null +++ b/tests/spec/arb_es2_compatibility/arb_es2_compatibility-getshaderprecisionformat.c @@ -0,0 +1,127 @@ +/* + * Copyright © 2010 Intel Corporation + * + * 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 (including the next + * paragraph) 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 + * THE AUTHORS OR COPYRIGHT HOLDERS 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. + */ + +/** + * \file arb_es2_compatibility-getshaderprecisionformat.c + * Validate data returned by glGetShaderPrecisionFormat + * + * Tests all of the shader targets and all of the precision modes. + * + * \warning + * This test will need to be modified for OpenGL ES 2.0. The mode + * \c GL_HIGH_FLOAT is only available with \c GL_FRAGMENT_SHADER + * if \c GL_OES_fragment_precision_high is supported. + */ + +#include "piglit-util.h" + +int piglit_width = 10, piglit_height = 10; +int piglit_window_mode = GLUT_RGB; + +enum piglit_result +piglit_display(void) +{ + return PIGLIT_FAIL; +} + +void +piglit_init(int argc, char **argv) +{ + GLboolean pass = GL_TRUE; + GLint status; + unsigned i; + unsigned j; + static const GLenum shaderTypes[] = { + GL_VERTEX_SHADER, + GL_FRAGMENT_SHADER + }; + static const struct { + GLenum type; + GLint range[2]; + GLint precision; + } precision[] = { + { GL_LOW_FLOAT, { 1, 1 }, 8 }, + { GL_MEDIUM_FLOAT, { 14, 14 }, 10 }, + { GL_HIGH_FLOAT, { 62, 62 }, 16 }, + { GL_LOW_INT, { 8, 8 }, 0 }, + { GL_MEDIUM_INT, { 10, 10 }, 0 }, + { GL_HIGH_INT, { 16, 16 }, 0 } + }; + + if (!GLEW_VERSION_2_0) { + printf("Requires OpenGL 2.0\n"); + piglit_report_result(PIGLIT_SKIP); + } + + if (!GLEW_ARB_ES2_compatibility) { + printf("Requires ARB_ES2_compatibility\n"); + piglit_report_result(PIGLIT_SKIP); + } + + for (i = 0; i < ARRAY_SIZE(shaderTypes); i++) { + for (j = 0; j < ARRAY_SIZE(precision); j++) { + GLint r[2]; + GLint p; + + r[0] = 0; + r[1] = 0; + p = 0; + + glGetShaderPrecisionFormat(GL_VERTEX_SHADER, + precision[j].type, + r, & p); + status = glGetError(); + if (status != GL_NO_ERROR) { + printf("glGetShaderPrecisionFormat(0x%04x, " + "0x%04x) " + "got GL error of 0x%04x\n", + shaderTypes[i], + precision[j].type, + status); + pass = GL_FALSE; + } + + if (r[0] < precision[j].range[0] + || r[1] < precision[j].range[1] + || p < precision[j].precision) { + printf("glGetShaderPrecisionFormat(0x%04x, " + "0x%04x) " + "returned invalid values:\n" + " range = { %d, %d }\n" + " precision = %d\n" + "expected at least:\n" + " range = { %d, %d }\n" + " precision = %d\n", + shaderTypes[i], + precision[j].type, + r[0], r[1], + p, + precision[j].range[0], + precision[j].range[1], + precision[j].precision); + pass = GL_FALSE; + } + } + } + piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL); +} |