[Piglit] [PATCH 1/3] shader_runner: add vertex attrib command for setting bindless texture handles

Samuel Pitoiset samuel.pitoiset at gmail.com
Tue Apr 10 20:39:11 UTC 2018



On 04/08/2018 10:56 PM, Karol Herbst wrote:
> Signed-off-by: Karol Herbst <kherbst at redhat.com>
> ---
>   tests/shaders/shader_runner.c | 42 ++++++++++++++++++++++++++++++++++++++++++
>   1 file changed, 42 insertions(+)
> 
> diff --git a/tests/shaders/shader_runner.c b/tests/shaders/shader_runner.c
> index 700b11327..e07e7b3ca 100644
> --- a/tests/shaders/shader_runner.c
> +++ b/tests/shaders/shader_runner.c
> @@ -1964,6 +1964,46 @@ set_uniform(const char *line, int ubo_array_index)
>   	return;
>   }
>   
> +static void
> +set_vertex_attrib(const char *line)
> +{
> +	char name[512], type[512];
> +	uint64_t uint64s[16];
> +	GLint loc;
> +
> +	REQUIRE(parse_word_copy(line, type, sizeof(type), &line) &&
> +		parse_word_copy(line, name, sizeof(name), &line),
> +		"Invalid set vertex attrib command at: %s\n", line);
> +
> +	if (isdigit(name[0])) {
> +		loc = strtol(name, NULL, 0);
> +	} else {
> +		GLuint prog;
> +
> +		glGetIntegerv(GL_CURRENT_PROGRAM, (GLint *) &prog);
> +		loc = glGetAttribLocation(prog, name);
> +		if (loc < 0) {
> +			printf("cannot get location of vertex attrib \"%s\"\n",
> +			       name);
> +			piglit_report_result(PIGLIT_FAIL);
> +		}
> +        }
> +
> +	if (parse_str(type, "handle", NULL)) {
> +		check_unsigned_support();
> +		check_texture_handle_support();
> +		parse_uint64s(line, uint64s, 1, NULL);

parse_uints() is enough because it's an index in the resident_handles 
array (where the max is 31).

With that changed, patch is:

Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>

> +		glVertexAttribL1ui64ARB(loc, get_resident_handle(uint64s[0])->handle);
> +		return;
> +	}
> +
> +	printf("unknown vertex attrib type \"%s\"\n", type);
> +	printf("use [vertex data] instead if possible\n");
> +	piglit_report_result(PIGLIT_FAIL);
> +
> +	return;
> +}
> +
>   static GLenum lookup_shader_type(GLuint idx)
>   {
>   	switch (idx) {
> @@ -3817,6 +3857,8 @@ piglit_display(void)
>   			active_uniform(rest);
>   		} else if (parse_str(line, "verify program_interface_query ", &rest)) {
>   			active_program_interface(rest);
> +		} else if (parse_str(line, "vertex attrib ", &rest)) {
> +			set_vertex_attrib(rest);
>   		} else if ((line[0] != '\n') && (line[0] != '\0')
>   			   && (line[0] != '#')) {
>   			printf("unknown command \"%s\"\n", line);
> 


More information about the Piglit mailing list