From: Eric Anholt Date: Tue, 28 Sep 2010 21:53:36 +0000 (-0700) Subject: i965: Don't try to emit interpolation for unused varying slots. X-Git-Tag: android-x86-2.2~1063^2~552 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=17f3b8097d01a63917afaaefccd6eea070271652;p=android-x86%2Fexternal-mesa.git 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 --- diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index fbd2464357d..feb0cc156cb 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -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,