diff options
| author | Eric Anholt <eric@anholt.net> | 2009-11-12 09:08:50 -0800 | 
|---|---|---|
| committer | Eric Anholt <eric@anholt.net> | 2009-11-12 11:41:39 -0800 | 
| commit | 514544f373b6e6fae11b7b4426949b8ad64c441b (patch) | |
| tree | 6f228974bcf6684fb060610d5ef0725e48d846f3 | |
| parent | 5f305b1db925c819ddeb29a75f6fbad6500a2d11 (diff) | |
i965: Fix Ironlake shadow comparisons.
The cube map array index arg is always present.
| -rw-r--r-- | 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 268f7965c0..9b1f54414b 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)) { | 
