mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 09:38:07 +02:00
i965/vs: Fix matNxM vertex attributes where M != 4.
Matrix vertex attributes have their columns padded out to vec4s, which I was failing to account for. Scalar NIR expects them to be packed, however. Fixes 1256 dEQP tests on Broadwell. Cc: mesa-stable@lists.freedesktop.org Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Tested-by: Mark Janes <mark.a.janes@intel.com> Reviewed-by: Chris Forbes <chrisf@ijw.co.nz>
This commit is contained in:
parent
6611f65047
commit
73d0e7f345
1 changed files with 11 additions and 4 deletions
|
|
@ -91,12 +91,19 @@ fs_visitor::nir_setup_inputs(nir_shader *shader)
|
|||
* So, we need to copy from fs_reg(ATTR, var->location) to
|
||||
* offset(nir_inputs, var->data.driver_location).
|
||||
*/
|
||||
unsigned components = var->type->without_array()->components();
|
||||
const glsl_type *const t = var->type->without_array();
|
||||
const unsigned components = t->components();
|
||||
const unsigned cols = t->matrix_columns;
|
||||
const unsigned elts = t->vector_elements;
|
||||
unsigned array_length = var->type->is_array() ? var->type->length : 1;
|
||||
for (unsigned i = 0; i < array_length; i++) {
|
||||
for (unsigned j = 0; j < components; j++) {
|
||||
bld.MOV(retype(offset(input, bld, components * i + j), type),
|
||||
offset(fs_reg(ATTR, var->data.location + i, type), bld, j));
|
||||
for (unsigned j = 0; j < cols; j++) {
|
||||
for (unsigned k = 0; k < elts; k++) {
|
||||
bld.MOV(offset(retype(input, type), bld,
|
||||
components * i + elts * j + k),
|
||||
offset(fs_reg(ATTR, var->data.location + i, type),
|
||||
bld, 4 * j + k));
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue