[Piglit] [PATCH] arb_gpu_shader_fp64: test glGetUniformdv interface
Timothy Arceri
t_arceri at yahoo.com.au
Mon Jul 27 02:04:07 PDT 2015
A couple of comments below.
With those fixed Reviewed-by: Timothy Arceri <t_arceri at yahoo.com.au>
On Mon, 2015-07-27 at 13:48 +1000, Dave Airlie wrote:
> From: Dave Airlie <airlied at redhat.com>
>
> 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 <airlied at redhat.com>
> ---
> 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);
> +}
More information about the Piglit
mailing list