Mesa (master): i965: Generalize sampler state pointer mangling for non-const
Chris Forbes
chrisf at kemper.freedesktop.org
Fri Aug 15 07:21:06 UTC 2014
Module: Mesa
Branch: master
Commit: 86dc34a0b0d967e9c8611bc29178fdb1de22c724
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=86dc34a0b0d967e9c8611bc29178fdb1de22c724
Author: Chris Forbes <chrisf at ijw.co.nz>
Date: Sun Aug 10 11:39:44 2014 +1200
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 at ijw.co.nz>
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
---
src/mesa/drivers/dri/i965/brw_eu_emit.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/src/mesa/drivers/dri/i965/brw_eu_emit.c b/src/mesa/drivers/dri/i965/brw_eu_emit.c
index 3626bf4..39f94e9 100644
--- a/src/mesa/drivers/dri/i965/brw_eu_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_eu_emit.c
@@ -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);
}
}
More information about the mesa-commit
mailing list