[Piglit] [PATCH 09/11] arb_get_program_binary: Execercise GL_PROGRAM_BINARY_RETRIEVABLE_HINT
Ian Romanick
idr at freedesktop.org
Fri Oct 4 13:09:42 PDT 2013
On 10/04/2013 11:47 AM, Paul Berry wrote:
> On 21 August 2013 09:08, Ian Romanick <idr at freedesktop.org
> <mailto:idr at freedesktop.org>> wrote:
>
> From: Ian Romanick <ian.d.romanick at intel.com
> <mailto:ian.d.romanick at intel.com>>
>
> This test fails on NVIDIA (304.64 on GTX 260). It fails because the
> value of GL_PROGRAM_BINARY_RETRIEVABLE_HINT is not "latched" by
> glLinkProgram. The spec is a little unclear on this topic, and I filed
> a bug in the Khronos bugzilla. After some discussion about which state
> should be latches vs. live, the concensus was that
>
> GL_PROGRAM_BINARY_RETRIEVABLE_HINT.
>
>
> s/concensus/consensus/. Also this sentence kind of trails off. I
> assume you mean "the consensuse was that
> GL_PROGRAM_BINARY_RETRIEVABLE_HINT should be latched by gl_LinkProgram."
It looks like I fixed the trailing sentence after sending the patch out.
I updated the commit message to:
This test fails on NVIDIA (304.64 on GTX 260). It fails because the
value of GL_PROGRAM_BINARY_RETRIEVABLE_HINT is not "patched" by
glLinkProgram. The spec is a little unclear on this topic, and I filed
a bug in the Khronos bugzilla. After some discussion about which state
should be latches vs. live, the consensus was that
GL_PROGRAM_BINARY_RETRIEVABLE_HINT should be latched. Updated language
has been proposed, but a new spec has not been spun.
> With that fixed, the patch is:
>
> Reviewed-by: Paul Berry <stereotype441 at gmail.com
> <mailto:stereotype441 at gmail.com>>
>
>
>
> Updated language has been proposed,
> but a new spec has not been spun.
>
> Signed-off-by: Ian Romanick <ian.d.romanick at intel.com
> <mailto:ian.d.romanick at intel.com>>
> Cc: James Jones <jajones at nvidia.com <mailto:jajones at nvidia.com>>
> ---
> tests/all.tests | 1 +
> .../spec/arb_get_program_binary/CMakeLists.gl.txt | 1 +
> .../spec/arb_get_program_binary/retrievable_hint.c | 143
> +++++++++++++++++++++
> 3 files changed, 145 insertions(+)
> create mode 100644 tests/spec/arb_get_program_binary/retrievable_hint.c
>
> diff --git a/tests/all.tests b/tests/all.tests
> index fa3812f..35e1002 100644
> --- a/tests/all.tests
> +++ b/tests/all.tests
> @@ -1038,6 +1038,7 @@
> arb_es2_compatibility['NUM_SHADER_BINARY_FORMATS over-run check'] =
> concurrent_t
> arb_get_program_binary = Group()
> spec['ARB_get_program_binary'] = arb_get_program_binary
> arb_get_program_binary['NUM_PROGRAM_BINARY_FORMATS over-run check']
> = concurrent_test('arb_get_program_binary-overrun program')
> +arb_get_program_binary['PROGRAM_BINARY_RETRIEVABLE_HINT'] =
> concurrent_test('arb_get_program_binary-retrievable_hint')
>
> arb_depth_clamp = Group()
> spec['ARB_depth_clamp'] = arb_depth_clamp
> diff --git a/tests/spec/arb_get_program_binary/CMakeLists.gl.txt
> b/tests/spec/arb_get_program_binary/CMakeLists.gl.txt
> index be52044..caaa617 100644
> --- a/tests/spec/arb_get_program_binary/CMakeLists.gl.txt
> +++ b/tests/spec/arb_get_program_binary/CMakeLists.gl.txt
> @@ -10,5 +10,6 @@ link_libraries (
> )
>
> piglit_add_executable (arb_get_program_binary-overrun overrun.c)
> +piglit_add_executable (arb_get_program_binary-retrievable_hint
> retrievable_hint.c)
>
> # vim: ft=cmake:
> diff --git a/tests/spec/arb_get_program_binary/retrievable_hint.c
> b/tests/spec/arb_get_program_binary/retrievable_hint.c
> new file mode 100644
> index 0000000..7c5f316
> --- /dev/null
> +++ b/tests/spec/arb_get_program_binary/retrievable_hint.c
> @@ -0,0 +1,143 @@
> +/*
> + * Copyright © 2012 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 coverage.c
> + * Attempt quering every enum in the spec. Sanity check initial
> values.
> + *
> + * GL_NUM_PROGRAM_BINARY_FORMATS and GL_PROGRAM_BINARY_FORMATS are not
> + * covered by this test because they are heavily covered by the
> + * overrun test.
> + */
> +
> +#include "piglit-util-gl-common.h"
> +
> +PIGLIT_GL_TEST_CONFIG_BEGIN
> +
> + config.supports_gl_compat_version = 10;
> + config.window_visual = PIGLIT_GL_VISUAL_RGB;
> +
> +PIGLIT_GL_TEST_CONFIG_END
> +
> +static const char *vs_text =
> + "#version 110\n"
> + "void main() { gl_Position = vec4(0.); }"
> + ;
> +
> +static const char *fs_text =
> + "#version 110\n"
> + "void main() { gl_FragColor = vec4(0.); }"
> + ;
> +
> +enum piglit_result
> +piglit_display(void)
> +{
> + return PIGLIT_FAIL;
> +}
> +
> +void
> +piglit_init(int argc, char **argv)
> +{
> + GLuint vs;
> + GLuint fs;
> + GLuint prog;
> + GLint value;
> + bool pass = true;
> + bool got_error;
> +
> + piglit_require_gl_version(20);
> + piglit_require_extension("GL_ARB_get_program_binary");
> +
> + 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);
> +
> + /* Check the initial state of
> GL_PROGRAM_BINARY_RETRIEVABLE_HINT. The
> + * state table in the extension spec says the initial state is
> + * GL_FALSE.
> + */
> + value = 0xDEADBEEF;
> + glGetProgramiv(prog, GL_PROGRAM_BINARY_RETRIEVABLE_HINT,
> &value);
> + got_error = piglit_check_gl_error(0);
> +
> + if (!got_error) {
> + if (value == 0xDEADBEEF) {
> + fprintf(stderr,
> + "No error generated for "
> + "GL_PROGRAM_BINARY_RETRIEVABLE_HINT,
> but "
> + "no value was written either.\n");
> + pass = false;
> + } else if (value != 0) {
> + fprintf(stderr,
> + "Initial state of "
> + "GL_PROGRAM_BINARY_RETRIEVABLE_HINT "
> + "was %d instead of 0.\n",
> + value);
> + pass = false;
> + }
> + } else
> + pass = false;
> +
> + /* The ARB_get_program_binary spec says:
> + *
> + * "This hint will not take effect until the next time
> LinkProgram
> + * or ProgramBinary has been called successfully."
> + *
> + * The GL spec contains similar language for attribute
> locations and
> + * fragment data locations. In those cases, the queried
> value is only
> + * updated after relinking. We'll assume this text means
> the same
> + * thing.
> + */
> +
> + glProgramParameteri(prog,
> GL_PROGRAM_BINARY_RETRIEVABLE_HINT, GL_TRUE);
> + got_error = piglit_check_gl_error(0);
> +
> + glGetProgramiv(prog, GL_PROGRAM_BINARY_RETRIEVABLE_HINT,
> &value);
> + got_error = piglit_check_gl_error(0);
> +
> + if (value != 0) {
> + fprintf(stderr,
> + "State of GL_PROGRAM_BINARY_RETRIEVABLE_HINT "
> + "changed without relinking.\n");
> + pass = false;
> + }
> +
> + glLinkProgram(prog);
> + got_error = piglit_check_gl_error(0);
> +
> + glGetProgramiv(prog, GL_PROGRAM_BINARY_RETRIEVABLE_HINT,
> &value);
> + got_error = piglit_check_gl_error(0);
> +
> + if (value != GL_TRUE) {
> + fprintf(stderr,
> + "State of GL_PROGRAM_BINARY_RETRIEVABLE_HINT "
> + "did not change across relinking.\n");
> + pass = false;
> + }
> +
> + glDeleteShader(vs);
> + glDeleteShader(fs);
> + glDeleteProgram(prog);
> + piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL);
> +}
> --
> 1.8.1.4
>
> _______________________________________________
> Piglit mailing list
> Piglit at lists.freedesktop.org <mailto:Piglit at lists.freedesktop.org>
> http://lists.freedesktop.org/mailman/listinfo/piglit
>
>
More information about the Piglit
mailing list