A couple of comments below. With those fixed Reviewed-by: Timothy Arceri <[email protected]>
On Mon, 2015-07-27 at 13:48 +1000, Dave Airlie wrote: > From: Dave Airlie <[email protected]> > > I must have forgot this way back when, this just ports the > getuniform02.c test to glsl 1.50 and tests the fp64 interface. > > Signed-off-by: Dave Airlie <[email protected]> > --- > tests/all.py | 1 + > .../execution/CMakeLists.gl.txt | 1 + > .../arb_gpu_shader_fp64/execution/getuniformdv.c | 201 > +++++++++++++++++++++ > 3 files changed, 203 insertions(+) > create mode 100644 tests/spec/arb_gpu_shader_fp64/execution/getuniformdv.c > > diff --git a/tests/all.py b/tests/all.py > index 65067f5..ab2be74 100644 > --- a/tests/all.py > +++ b/tests/all.py > @@ -2087,6 +2087,7 @@ with profile.group_manager( > g(['arb_gpu_shader_fp64-double-gettransformfeedbackvarying']) > g(['arb_gpu_shader_fp64-tf-interleaved']) > g(['arb_gpu_shader_fp64-tf-interleaved-aligned']) > + g(['arb_gpu_shader_fp64-getuniformdv']) > > with profile.group_manager( > PiglitGLTest, > diff --git a/tests/spec/arb_gpu_shader_fp64/execution/CMakeLists.gl.txt > b/tests/spec/arb_gpu_shader_fp64/execution/CMakeLists.gl.txt > index b291f37..6738363 100644 > --- a/tests/spec/arb_gpu_shader_fp64/execution/CMakeLists.gl.txt > +++ b/tests/spec/arb_gpu_shader_fp64/execution/CMakeLists.gl.txt > @@ -14,3 +14,4 @@ piglit_add_executable (arb_gpu_shader_fp64-tf-separate tf > -separate.c) > piglit_add_executable (arb_gpu_shader_fp64-tf-interleaved tf-interleaved.c) > piglit_add_executable (arb_gpu_shader_fp64-tf-interleaved-aligned tf > -interleaved-aligned.c) > piglit_add_executable (arb_gpu_shader_fp64-double > -gettransformfeedbackvarying double-gettransformfeedbackvarying.c) > +piglit_add_executable (arb_gpu_shader_fp64-getuniformdv getuniformdv.c) > diff --git a/tests/spec/arb_gpu_shader_fp64/execution/getuniformdv.c > b/tests/spec/arb_gpu_shader_fp64/execution/getuniformdv.c > new file mode 100644 > index 0000000..30e1e58 > --- /dev/null > +++ b/tests/spec/arb_gpu_shader_fp64/execution/getuniformdv.c > @@ -0,0 +1,201 @@ > +/* > + * Copyright 2011 VMware, Inc. > + * > + * 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. > + */ > + > +/** > + * Asst. gl[Get]Uniformdv tests. > + * based on getunifom02.c from Brian Paul. > + * > + */ > + > +#include "piglit-util-gl.h" > + > +PIGLIT_GL_TEST_CONFIG_BEGIN > + > + config.supports_gl_core_version = 32; > + > + config.window_visual = PIGLIT_GL_VISUAL_RGB | > PIGLIT_GL_VISUAL_DOUBLE; > + > +PIGLIT_GL_TEST_CONFIG_END > + > +static char *TestName = "getuniformdv"; > + > +static const char vs_text[] = > + "#version 150\n" > + "#extension GL_ARB_gpu_shader_fp64 : require\n" > + "struct s1 { \n" > + " double a, b, c, d; \n" > + "}; \n" > + "uniform double d1; \n" > + "uniform dvec4 v[3]; \n" > + "uniform s1 s;\n" > + "uniform double d2; \n" > + "out vec4 color; \n" > + "\n" > + "void main()\n" > + "{\n" > + " gl_Position = vec4(0.0, 0.0, 0.0, 1.0);\n" > + " dvec4 t = dvec4(s.a, s.b, s.c, s.d) * d1 + d2;\n" > + " t += v[0] + v[1] + v[2]; \n" > + " color = vec4(t); \n" > + "}\n"; > + > +static const char fs_text[] = > + "#version 150\n" > + "in vec4 color;\n" > + "void main() { gl_FragColor = color; }"; > + > +enum piglit_result > +piglit_display(void) > +{ > + /* never called */ > + return PIGLIT_FAIL; > +} > + > + > +void > +piglit_init(int argc, char **argv) > +{ > + GLuint vs, fs, prog; > + GLint numUniforms, i; > + GLint expectedNum = 7; > + GLint loc_d1, loc_d2, loc_sa, loc_sd, loc_v1; > + GLdouble v[4]; > + static const GLdouble vVals[4] = {30.0, 31.0, 32.0, 33.0}; > + > + piglit_require_vertex_shader(); > + piglit_require_fragment_shader(); You need a require GL_ARB_gpu_shader_fp64 in here somewhere. > + > + vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vs_text); > + fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_text); > + prog = piglit_link_simple_program(vs, fs); > + > + glUseProgram(prog); > + > + glGetProgramiv(prog, GL_ACTIVE_UNIFORMS, &numUniforms); > + if (numUniforms != expectedNum) { > + printf("%s: incorrect number of uniforms (found %d, expected %d)\n", > + TestName, numUniforms, expectedNum); > + piglit_report_result(PIGLIT_FAIL); > + } > + > + /* check types, sizes */ > + for (i = 0; i < numUniforms; i++) { > + GLcharARB name[100]; > + GLsizei len; > + GLint size, expectedSize; > + GLenum type, expectedType; > + GLint loc; > + > + glGetActiveUniform(prog, > + i, sizeof(name), &len, &size, &type, > name); Somethings gone wrong above. > + loc = glGetUniformLocation(prog, name); > + > + if (loc < 0) { > + printf("%s: bad uniform location for %s: %d\n", TestName, name, > loc); > + piglit_report_result(PIGLIT_FAIL); > + } > + > + if (!piglit_automatic) { > + printf("%d: %s loc=%d size=%d type=0x%x\n", i, name, loc, size, > type); > + } > + > + /* OpenGL ES 3.0 and OpenGL 4.2 require that the "[0]" be appended to > + * the name. Earlier versions of the spec are ambiguous. Accept > either > + * name. > + */ > + if (strcmp(name, "v") == 0 || strcmp(name, "v[0]") == 0) { > + expectedType = GL_DOUBLE_VEC4; > + expectedSize = 3; > + } > + else { > + expectedType = GL_DOUBLE; > + expectedSize = 1; > + } > + > + if (type != expectedType) { > + printf("%s: wrong type for 'v' (found 0x%x, expected 0x%x)\n", > + TestName, type, expectedType); > + piglit_report_result(PIGLIT_FAIL); > + } > + > + if (size != expectedSize) { > + printf("%s: wrong size for 'v' (found %d, expected %d)\n", > + TestName, size, expectedSize); > + piglit_report_result(PIGLIT_FAIL); > + } > + } > + > + /* Check setting/getting values */ > + > + loc_d1 = glGetUniformLocation(prog, "d1"); > + loc_d2 = glGetUniformLocation(prog, "d2"); > + loc_sa = glGetUniformLocation(prog, "s.a"); > + loc_sd = glGetUniformLocation(prog, "s.d"); > + loc_v1 = glGetUniformLocation(prog, "v[1]"); > + > + glUniform1d(loc_d1, 5.0); > + glUniform1d(loc_d2, 10.0); > + glUniform1d(loc_sa, 15.0); > + glUniform1d(loc_sd, 20.0); > + glUniform4dv(loc_v1, 1, vVals); > + > + glGetUniformdv(prog, loc_d1, v); > + if (v[0] != 5.0) { > + printf("%s: wrong value for d1 (found %f, expected %f)\n", > + TestName, v[0], 5.0); > + piglit_report_result(PIGLIT_FAIL); > + } > + > + glGetUniformdv(prog, loc_d2, v); > + if (v[0] != 10.0) { > + printf("%s: wrong value for d2 (found %f, expected %f)\n", > + TestName, v[0], 10.0); > + piglit_report_result(PIGLIT_FAIL); > + } > + > + glGetUniformdv(prog, loc_sa, v); > + if (v[0] != 15.0) { > + printf("%s: wrong value for s.a (found %f, expected %f)\n", > + TestName, v[0], 15.0); > + piglit_report_result(PIGLIT_FAIL); > + } > + > + glGetUniformdv(prog, loc_sd, v); > + if (v[0] != 20.0) { > + printf("%s: wrong value for s.d (found %f, expected %f)\n", > + TestName, v[0], 20.0); > + piglit_report_result(PIGLIT_FAIL); > + } > + > + glGetUniformdv(prog, loc_v1, v); > + if (v[0] != 30.0 || > + v[1] != 31.0 || > + v[2] != 32.0 || > + v[3] != 33.0) { > + printf("%s: wrong value for v[1] (found %g,%g,%g,%g, expected > %g,%g,%g,%g)\n", > + TestName, v[0], v[1], v[2], v[3], 30.0, 31.0, 32.0, 33.0); > + piglit_report_result(PIGLIT_FAIL); > + } > + > + piglit_report_result(PIGLIT_PASS); > +} _______________________________________________ Piglit mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/piglit
