i965: Generalize sampler state pointer mangling for non-const
For now, assume that the addressed sampler can be in any of the 16-sampler banks. If we preserved range information this far, we could avoid emitting these instructions if the sampler were known to be contained within one bank. Signed-off-by: Chris Forbes <chrisf@ijw.co.nz> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
f7146d1a94
commit
86dc34a0b0
|
@ -2386,7 +2386,19 @@ void brw_adjust_sampler_state_pointer(struct brw_compile *p,
|
|||
brw_imm_ud(16 * (sampler / 16) * sampler_state_size));
|
||||
}
|
||||
} else {
|
||||
/* XXX: Non-const sampler array indexing case */
|
||||
/* Non-const sampler array indexing case */
|
||||
if (brw->gen < 8 && !brw->is_haswell) {
|
||||
return;
|
||||
}
|
||||
|
||||
struct brw_reg temp = vec1(retype(scratch, BRW_REGISTER_TYPE_UD));
|
||||
|
||||
brw_AND(p, temp, sampler_index, brw_imm_ud(0x0f0));
|
||||
brw_SHL(p, temp, temp, brw_imm_ud(4));
|
||||
brw_ADD(p,
|
||||
get_element_ud(header, 3),
|
||||
get_element_ud(brw_vec8_grf(0, 0), 3),
|
||||
temp);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue