From 00fec0e4e115188caae347dd7d04acac10a08504 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Fri, 18 Dec 2015 12:25:53 +0000 Subject: [PATCH] mesa/shader: return correct attribute location for double matrix arrays MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If we have a dmat2[4], then dmat2[0] is at 17, dmat2[1] at 19, dmat2[2] at 21 etc. The old code was returning 17,18,19. I think this code is also wrong for float matricies as well. There is now a piglit for the float case. This partly fixes: GL41-CTS.vertex_attrib_64bit.limits_test [airlied: update with Tapani suggestion to clean it up]. Cc: "11.0 11.1" Reviewed-by: Timothy Arceri Reviewed-by: Tapani Pälli Signed-off-by: Dave Airlie (cherry picked from commit 18ad641c3b2e926b8b3e2bd1df31fa739624cbe4) --- src/mesa/main/shader_query.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/mesa/main/shader_query.cpp b/src/mesa/main/shader_query.cpp index 0e13572bbd1..06f27aceb3d 100644 --- a/src/mesa/main/shader_query.cpp +++ b/src/mesa/main/shader_query.cpp @@ -776,13 +776,18 @@ program_resource_location(struct gl_shader_program *shProg, * and user-defined attributes. */ switch (res->Type) { - case GL_PROGRAM_INPUT: + case GL_PROGRAM_INPUT: { + const ir_variable *var = RESOURCE_VAR(res); + /* If the input is an array, fail if the index is out of bounds. */ if (array_index > 0 - && array_index >= RESOURCE_VAR(res)->type->length) { + && array_index >= var->type->length) { return -1; } - return RESOURCE_VAR(res)->data.location + array_index - VERT_ATTRIB_GENERIC0; + return (var->data.location + + (array_index * var->type->without_array()->matrix_columns) - + VERT_ATTRIB_GENERIC0); + } case GL_PROGRAM_OUTPUT: /* If the output is an array, fail if the index is out of bounds. */ if (array_index > 0