summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/mesa/drivers/dri/i965/brw_wm_emit.c24
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 268f7965c00..9b1f54414bc 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)) {