r300: Fix stencil buffer clear
authorNicolai Haehnle <nhaehnle@gmail.com>
Sat, 7 Jun 2008 18:25:47 +0000 (20:25 +0200)
committerNicolai Haehnle <nhaehnle@gmail.com>
Sat, 7 Jun 2008 18:28:04 +0000 (20:28 +0200)
The glean/readPixSanity test passes now.

src/mesa/drivers/dri/r300/r300_ioctl.c

index b0225453d3d653a04a8ea8e7dad30488615d7501..2da0ac0e1ab0f18c5bff67443afd5419ba69667b 100644 (file)
@@ -130,8 +130,6 @@ static void r300ClearBuffer(r300ContextPtr r300, int flags, int buffer)
                        t1 |= R300_Z_ENABLE | R300_Z_WRITE_ENABLE;
                        t2 |=
                            (R300_ZS_ALWAYS << R300_Z_FUNC_SHIFT);
-               } else { //XXX
-                       t1 |= R300_STENCIL_FRONT_BACK;  // disable
                }
 
                if (flags & CLEARBUFFER_STENCIL) {
@@ -144,20 +142,12 @@ static void r300ClearBuffer(r300ContextPtr r300, int flags, int buffer)
                            (R300_ZS_REPLACE <<
                             R300_S_FRONT_ZPASS_OP_SHIFT) |
                            (R300_ZS_REPLACE <<
-                            R300_S_FRONT_ZFAIL_OP_SHIFT) |
-                           (R300_ZS_ALWAYS <<
-                            R300_S_BACK_FUNC_SHIFT) |
-                           (R300_ZS_REPLACE <<
-                            R300_S_BACK_SFAIL_OP_SHIFT) |
-                           (R300_ZS_REPLACE <<
-                            R300_S_BACK_ZPASS_OP_SHIFT) |
-                           (R300_ZS_REPLACE <<
-                            R300_S_BACK_ZFAIL_OP_SHIFT);
+                            R300_S_FRONT_ZFAIL_OP_SHIFT);
                }
 
                e32(t1);
                e32(t2);
-               e32(r300->state.stencil.clear);
+               e32(R300_STENCILWRITEMASK_MASK | r300->state.stencil.clear);
        }
 
        cmd2 = (drm_r300_cmd_header_t *) r300AllocCmdBuf(r300, 9, __FUNCTION__);
@@ -307,7 +297,6 @@ static void r300EmitClearState(GLcontext * ctx)
                reg_start(R300_RS_INST_0, 0);
                e32(R300_RS_INST_COL_CN_WRITE);
        } else {
-         
                R300_STATECHANGE(r300, ri);
                reg_start(R500_RS_IP_0, 7);
                for (i = 0; i < 8; ++i) {