mesa/shader: return correct attribute location for double matrix arrays
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" <mesa-stable@lists.freedesktop.org> Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com> Reviewed-by: Tapani Pälli <tapani.palli@intel.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
64c59b0624
commit
18ad641c3b
|
@ -852,13 +852,18 @@ program_resource_location(struct gl_shader_program *shProg,
|
||||||
* and user-defined attributes.
|
* and user-defined attributes.
|
||||||
*/
|
*/
|
||||||
switch (res->Type) {
|
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 the input is an array, fail if the index is out of bounds. */
|
||||||
if (array_index > 0
|
if (array_index > 0
|
||||||
&& array_index >= RESOURCE_VAR(res)->type->length) {
|
&& array_index >= var->type->length) {
|
||||||
return -1;
|
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:
|
case GL_PROGRAM_OUTPUT:
|
||||||
/* If the output is an array, fail if the index is out of bounds. */
|
/* If the output is an array, fail if the index is out of bounds. */
|
||||||
if (array_index > 0
|
if (array_index > 0
|
||||||
|
|
Loading…
Reference in New Issue