shadow sampler fix.
authorZou Nan hai <nanhai.zou@intel.com>
Tue, 9 Oct 2007 06:14:59 +0000 (14:14 +0800)
committerZou Nan hai <nanhai.zou@intel.com>
Tue, 9 Oct 2007 06:14:59 +0000 (14:14 +0800)
  1. spec requite result (0, 0, 0, 1) instead of (0, 0, 0, 0)
  2. support shadow sampler in simd8

src/mesa/drivers/dri/i965/brw_wm_emit.c
src/mesa/drivers/dri/i965/brw_wm_glsl.c

index 5660b5551620b247a1fe1afe5eb18fa1cef59b84..1f7158f7a78f6af54e1d0b7d55f58323624cf40e 100644 (file)
@@ -702,6 +702,8 @@ static void emit_tex( struct brw_wm_compile *c,
              msgLength,
              0);       
 
+   if (shadow)
+       brw_MOV(p, dst[3], brw_imm_f(1.0));
 }
 
 
index 58cdf72e372d36058da2a0961639304aa9cb87b8..8133c384f3861894762680cdc15c1d19589fcf6c 100644 (file)
@@ -1027,8 +1027,10 @@ static void emit_tex(struct brw_wm_compile *c,
     GLuint msg_len;
     GLuint i, nr;
     GLuint emit;
+    GLboolean shadow = (c->key.shadowtex_mask & (1<<inst->TexSrcUnit)) ? 1 : 0;
 
     payload_reg = get_reg(c, PROGRAM_PAYLOAD, PAYLOAD_DEPTH, 0, 1, 0, 0);
+
     for (i = 0; i < 4; i++) 
        dst[i] = get_dst_reg(c, inst, i, 1);
     for (i = 0; i < 4; i++)
@@ -1061,6 +1063,11 @@ static void emit_tex(struct brw_wm_compile *c,
        msg_len += 1;
     }
 
+    if (shadow) {
+       brw_MOV(p, brw_message_reg(5), brw_imm_f(0));
+       brw_MOV(p, brw_message_reg(6), src[2]);
+    }
+
     brw_SAMPLE(p,
            retype(vec8(dst[0]), BRW_REGISTER_TYPE_UW),
            1,
@@ -1070,8 +1077,11 @@ static void emit_tex(struct brw_wm_compile *c,
            inst->DstReg.WriteMask,
            BRW_SAMPLER_MESSAGE_SIMD8_SAMPLE,
            4,
-           4,
+           shadow ? 6 : 4,
            0);
+
+    if (shadow)
+       brw_MOV(p, dst[3], brw_imm_f(1.0));
 }
 
 static void post_wm_emit( struct brw_wm_compile *c )