Mesa (master): i965: Fix Ironlake shadow comparisons.
Eric Anholt
anholt at kemper.freedesktop.org
Sat Nov 14 00:04:59 UTC 2009
Module: Mesa
Branch: master
Commit: 514544f373b6e6fae11b7b4426949b8ad64c441b
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=514544f373b6e6fae11b7b4426949b8ad64c441b
Author: Eric Anholt <eric at anholt.net>
Date: Thu Nov 12 09:08:50 2009 -0800
i965: Fix Ironlake shadow comparisons.
The cube map array index arg is always present.
---
src/mesa/drivers/dri/i965/brw_wm_emit.c | 24 +++++++++++++++++-------
1 files changed, 17 insertions(+), 7 deletions(-)
diff --git a/src/mesa/drivers/dri/i965/brw_wm_emit.c b/src/mesa/drivers/dri/i965/brw_wm_emit.c
index 268f796..9b1f544 100644
--- a/src/mesa/drivers/dri/i965/brw_wm_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_wm_emit.c
@@ -745,22 +745,32 @@ static void emit_tex( struct brw_wm_compile *c,
abort();
}
- if (inst->tex_shadow) {
- nr = 4;
- emit |= WRITEMASK_W;
- }
+ /* For shadow comparisons, we have to supply u,v,r. */
+ if (inst->tex_shadow)
+ nr = 3;
msgLength = 1;
for (i = 0; i < nr; i++) {
- static const GLuint swz[4] = {0,1,2,2};
- if (emit & (1<<i))
- brw_MOV(p, brw_message_reg(msgLength+1), arg[swz[i]]);
+ if (emit & (1<<i))
+ brw_MOV(p, brw_message_reg(msgLength+1), arg[i]);
else
brw_MOV(p, brw_message_reg(msgLength+1), brw_imm_f(0));
msgLength += 2;
}
+ /* Fill in the cube map array index value. */
+ if (BRW_IS_IGDNG(p->brw) && inst->tex_shadow) {
+ brw_MOV(p, brw_message_reg(msgLength+1), brw_imm_f(0));
+ msgLength += 2;
+ }
+
+ /* Fill in the shadow comparison reference value. */
+ if (inst->tex_shadow) {
+ brw_MOV(p, brw_message_reg(msgLength+1), arg[2]);
+ msgLength += 2;
+ }
+
responseLength = 8; /* always */
if (BRW_IS_IGDNG(p->brw)) {
More information about the mesa-commit
mailing list