[Piglit] [PATCH] arb_bindless_texture: add a test which sets mixed texture units/handles

Timothy Arceri tarceri at itsqueeze.com
Mon Aug 7 10:41:20 UTC 2017


On 26/07/17 05:31, Samuel Pitoiset wrote:
> This test currently fails to return the correct 64-bit handle value
> with Mesa. This is because it ends up by performing the slower

                                         ^-- remove this :)

Otherwise:

Reviewed-by: Timothy Arceri <tarceri at itsqueeze.com>

> convert-and-copy process instead of just memcpy'ing the value.
> 
> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
> ---
>   tests/spec/arb_bindless_texture/uniform.c | 89 +++++++++++++++++++++++++++++++
>   1 file changed, 89 insertions(+)
> 
> diff --git a/tests/spec/arb_bindless_texture/uniform.c b/tests/spec/arb_bindless_texture/uniform.c
> index 393b1dab5..aa3e0ec81 100644
> --- a/tests/spec/arb_bindless_texture/uniform.c
> +++ b/tests/spec/arb_bindless_texture/uniform.c
> @@ -27,6 +27,8 @@
>    * glUniformHandleui*64ARB(), glGetActiveUniform(), etc.
>    */
>   
> +#include <inttypes.h>
> +
>   #include "common.h"
>   
>   static struct piglit_gl_test_config *piglit_config;
> @@ -355,6 +357,87 @@ check_Uniform_with_implicit_bound_image(void *data)
>   	return PIGLIT_PASS;
>   }
>   
> +static bool
> +check_uniform_int(GLuint prog, int loc, int expect)
> +{
> +        int v = 0xdeadcafe;
> +
> +        glGetUniformiv(prog, loc, &v);
> +        if (v != expect) {
> +                fprintf(stderr, "Invalid value for uniform %d\n"
> +                        "   Expected: %d\n"
> +                        "   Observed: %d\n",
> +                        loc, expect, v);
> +                return false;
> +        }
> +        return piglit_check_gl_error(GL_NO_ERROR);
> +}
> +
> +static bool
> +check_uniform_handle(GLuint prog, int loc, GLuint64 expect)
> +{
> +        GLuint64 v = 0xdeadcafedeadcafe;
> +
> +        glGetUniformui64vARB(prog, loc, &v);
> +        if (v != expect) {
> +                fprintf(stderr, "Invalid value for uniform %d\n"
> +                        "   Expected: %"PRIx64"\n"
> +                        "   Observed: %"PRIx64"\n",
> +                        loc, expect, v);
> +                return false;
> +        }
> +        return piglit_check_gl_error(GL_NO_ERROR);
> +}
> +
> +static enum piglit_result
> +check_Uniform_with_texture_units_and_handles(void *data)
> +{
> +	const char *fs_src =
> +		"#version 330\n"
> +		"#extension GL_ARB_bindless_texture: require\n"
> +		"\n"
> +		"layout (bindless_sampler) uniform sampler2D texs[5];\n"
> +		"uniform int i;\n"
> +		"out vec4 color;\n"
> +		"\n"
> +		"void main()\n"
> +		"{\n"
> +		"	color = texture(texs[i], vec2(0, 0));\n"
> +		"}\n";
> +	int units[5] = { 4, 7, 8, 1, 5 };
> +	GLuint64 handle = 0x1004002010040020;
> +	GLuint vs, fs, prog;
> +	bool pass = true;
> +	GLint loc;
> +
> +	vs = piglit_compile_shader_text(GL_VERTEX_SHADER, passthrough_vs_src);
> +	fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, fs_src);
> +	prog = piglit_link_simple_program(vs, fs);
> +	glUseProgram(prog);
> +
> +	loc = glGetUniformLocation(prog, "texs");
> +	if (loc == -1)
> +		return PIGLIT_FAIL;
> +
> +	/* Check setting an array of texture units. */
> +	glUniform1iv(loc, 5, units);
> +
> +	for (int i = 0; i < 5; i++) {
> +		pass &= check_uniform_int(prog, loc + i, units[i]);
> +	}
> +
> +	/* Check setting a texture handle. */
> +	glUniformHandleui64ARB(loc, handle);
> +	pass &= check_uniform_handle(prog, loc, handle);
> +
> +	/* Make sure setting the handle didn't overwrite other values. */
> +	for (int i = 1; i < 5; i++) {
> +		pass &= check_uniform_int(prog, loc + i, units[i]);
> +	}
> +
> +	return pass ? PIGLIT_PASS : PIGLIT_FAIL;
> +}
> +
>   static enum piglit_result
>   use_glGetActiveUniform_with_sampler(void *data)
>   {
> @@ -464,6 +547,12 @@ static const struct piglit_subtest subtests[] = {
>   		NULL
>   	},
>   	{
> +		"Check glUniform*() with mixed texture units/handles",
> +		"check_Uniform_with_texture_units_and_handles",
> +		check_Uniform_with_texture_units_and_handles,
> +		NULL
> +	},
> +	{
>   		"Use glGetActiveUniform with a sampler type",
>   		"use_glGetActiveUniform_with_sampler",
>   		use_glGetActiveUniform_with_sampler,
> 


More information about the Piglit mailing list