Improving Vladimirs alpha test fix a bit as it turns out r300Enable didnt correctly...
[mesa.git] / src / mesa / drivers / dri / r300 / r300_state.c
index 1229cd678b42305ada35c717e73b766af7eb79c8..ad2cdf585a5c8aad55cc8ccf54a533412cf7bf2c 100644 (file)
@@ -69,7 +69,7 @@ static void r300AlphaFunc(GLcontext * ctx, GLenum func, GLfloat ref)
        GLubyte refByte;
 
        CLAMPED_FLOAT_TO_UBYTE(refByte, ref);
-
+       
        R300_STATECHANGE(rmesa, at);
 
        pp_misc &= ~(R300_ALPHA_TEST_OP_MASK | R300_REF_ALPHA_MASK);
@@ -459,12 +459,12 @@ static void r300Enable(GLcontext* ctx, GLenum cap, GLboolean state)
                break;
 
        case GL_ALPHA_TEST:
-               R200_STATECHANGE(r300, at);
+               R300_STATECHANGE(r300, at);
                if (state) {
                        r300->hw.at.cmd[R300_AT_ALPHA_TEST] |=
                            R300_ALPHA_TEST_ENABLE;
                } else {
-                       r300->hw.at.cmd[R300_AT_ALPHA_TEST] |=
+                       r300->hw.at.cmd[R300_AT_ALPHA_TEST] &=
                            ~R300_ALPHA_TEST_ENABLE;
                }
                break;
@@ -1353,7 +1353,8 @@ void r300_setup_textures(GLcontext *ctx)
        }
        
        for(i=0; i < mtu; i++) {
-               
+               /*if(ctx->Texture.Unit[i].Enabled == 0)
+                       continue;*/
                if( ((r300->state.render_inputs & (_TNL_BIT_TEX0<<i))!=0) != ((ctx->Texture.Unit[i].Enabled)!=0) ) {
                        WARN_ONCE("Mismatch between render_inputs and ctx->Texture.Unit[i].Enabled value.\n");
                }
@@ -1606,6 +1607,7 @@ void r300GenerateSimpleVertexShader(r300ContextPtr r300)
 void r300SetupVertexShader(r300ContextPtr rmesa)
 {
        GLcontext* ctx = rmesa->radeon.glCtx;
+       LOCAL_VARS
 
        if(rmesa->current_vp != NULL){
                r300SetupVertexProgram(rmesa);
@@ -1673,6 +1675,8 @@ void r300SetupVertexProgram(r300ContextPtr rmesa)
        GLcontext* ctx = rmesa->radeon.glCtx;
        int inst_count;
        int param_count;
+       LOCAL_VARS
+                       
 
        /* Reset state, in case we don't use something */
        ((drm_r300_cmd_header_t*)rmesa->hw.vpp.cmd)->vpu.count = 0;
@@ -1751,7 +1755,7 @@ void r300GenerateTexturePixelShader(r300ContextPtr r300)
 
                                break;
                        default:
-                               fprintf(stderr, "ModeRGB=%s is not implemented yet !\n",
+                               WARN_ONCE("ModeRGB=%s is not implemented yet !\n",
                                         _mesa_lookup_enum_by_nr(r300->radeon.glCtx->Texture.Unit[i]._CurrentCombine->ModeRGB));
                                /* PFS_NOP */
                                r300->state.pixel_shader.program.alu.inst[alu_inst].inst0=
@@ -1787,7 +1791,7 @@ void r300GenerateTexturePixelShader(r300ContextPtr r300)
 
                                break;
                        default:
-                               fprintf(stderr, "ModeA=%s is not implemented yet !\n",
+                               WARN_ONCE("ModeA=%s is not implemented yet !\n",
                                         _mesa_lookup_enum_by_nr(r300->radeon.glCtx->Texture.Unit[i]._CurrentCombine->ModeA));
                                /* PFS_NOP */
                                r300->state.pixel_shader.program.alu.inst[alu_inst].inst2=
@@ -1994,8 +1998,10 @@ void r300ResetHwState(r300ContextPtr r300)
        r300SetupPixelShader(r300);
 
        r300_set_blend_state(ctx);
-       r300AlphaFunc(ctx, ctx->Color.AlphaFunc, ctx->Color.AlphaRef);
 
+       r300AlphaFunc(ctx, ctx->Color.AlphaFunc, ctx->Color.AlphaRef);
+       r300Enable(ctx, GL_ALPHA_TEST, ctx->Color.AlphaEnabled);
+               
                /* Initialize magic registers
                 TODO : learn what they really do, or get rid of
                 those we don't have to touch */
@@ -2064,6 +2070,10 @@ void r300ResetHwState(r300ContextPtr r300)
                r300->hw.gb_misc.cmd[R300_GB_MISC_TILE_CONFIG] = R300_GB_TILE_ENABLE
                                                        | R300_GB_TILE_PIPE_COUNT_R300
                                                        | R300_GB_TILE_SIZE_16;
+       else if (GET_CHIP(r300->radeon.radeonScreen) == RADEON_CHIP_R420)
+               r300->hw.gb_misc.cmd[R300_GB_MISC_TILE_CONFIG] = R300_GB_TILE_ENABLE
+                                                       | R300_GB_TILE_PIPE_COUNT_R420
+                                                       | R300_GB_TILE_SIZE_16;
        else
                r300->hw.gb_misc.cmd[R300_GB_MISC_TILE_CONFIG] = R300_GB_TILE_ENABLE
                                                        | R300_GB_TILE_PIPE_COUNT_RV300
@@ -2160,10 +2170,6 @@ void r300ResetHwState(r300ContextPtr r300)
        r300->hw.unk4BC8.cmd[2] = 0;
        r300->hw.unk4BC8.cmd[3] = 0;
 
-       //r300AlphaFunc(ctx, ctx->Color.AlphaFunc, ctx->Color.AlphaRef);
-#if 0
-       r300->hw.at.cmd[R300_AT_ALPHA_TEST] = 0;
-#endif
 
        r300->hw.at.cmd[R300_AT_UNKNOWN] = 0;
        r300->hw.unk4BD8.cmd[1] = 0;
@@ -2254,7 +2260,6 @@ void r300ResetHwState(r300ContextPtr r300)
 
 //END: TODO
        //verify_r300ResetHwState(r300, 0);
-
        r300->hw.all_dirty = GL_TRUE;
 }