i965: Don't try to emit interpolation for unused varying slots.

Fixes:
glsl-fs-varying-array
glsl-texcoord-array
glsl-texcoord-array-2
glsl-vs-varying-array
This commit is contained in:
Eric Anholt 2010-09-28 14:53:36 -07:00
parent 5272c6a7a2
commit 17f3b8097d
1 changed files with 9 additions and 0 deletions

View File

@ -677,6 +677,15 @@ fs_visitor::emit_general_interpolation(ir_variable *ir)
int location = ir->location;
for (unsigned int i = 0; i < array_elements; i++) {
for (unsigned int j = 0; j < type->matrix_columns; j++) {
if (!(fp->Base.InputsRead & BITFIELD64_BIT(location))) {
/* If there's no incoming setup data for this slot, don't
* emit interpolation for it (since it's not used, and
* we'd fall over later trying to find the setup data.
*/
attr.reg_offset += type->vector_elements;
continue;
}
for (unsigned int c = 0; c < type->vector_elements; c++) {
struct brw_reg interp = interp_reg(location, c);
emit(fs_inst(FS_OPCODE_LINTERP,