r300: Changed some more functions to static functions.
authorOliver McFadden <z3ro.geek@gmail.com>
Sun, 13 May 2007 09:09:30 +0000 (09:09 +0000)
committerOliver McFadden <z3ro.geek@gmail.com>
Sun, 13 May 2007 09:09:30 +0000 (09:09 +0000)
This required reordering some of the functions which is why the diff is a little
larger.

src/mesa/drivers/dri/r300/r300_cmdbuf.c
src/mesa/drivers/dri/r300/r300_ioctl.c
src/mesa/drivers/dri/r300/r300_ioctl.h
src/mesa/drivers/dri/r300/r300_state.c
src/mesa/drivers/dri/r300/r300_state.h

index f271d5819bbb262657fb9f06317a5739c0d23370..d13649ddc0d012e799cbe1fabbf74383adba9151 100644 (file)
@@ -128,7 +128,7 @@ int r300FlushCmdBuf(r300ContextPtr r300, const char *caller)
        return ret;
 }
 
-void r300PrintStateAtom(r300ContextPtr r300, struct r300_state_atom *state)
+static void r300PrintStateAtom(r300ContextPtr r300, struct r300_state_atom *state)
 {
        int i;
        int dwords = (*state->check) (r300, state);
index 4bdd35bb24acb37ce38a24342013c58789884b1f..76712b0b1980133a23916d98193d9433884036b3 100644 (file)
@@ -668,27 +668,6 @@ void r300AllocDmaRegion(r300ContextPtr rmesa,
 
 #endif
 
-/* Called via glXGetMemoryOffsetMESA() */
-GLuint r300GetMemoryOffsetMESA(__DRInativeDisplay * dpy, int scrn,
-                              const GLvoid * pointer)
-{
-       GET_CURRENT_CONTEXT(ctx);
-       r300ContextPtr rmesa;
-       GLuint card_offset;
-
-       if (!ctx || !(rmesa = R300_CONTEXT(ctx))) {
-               fprintf(stderr, "%s: no context\n", __FUNCTION__);
-               return ~0;
-       }
-
-       if (!r300IsGartMemory(rmesa, pointer, 0))
-               return ~0;
-
-       card_offset = r300GartOffsetFromVirtual(rmesa, pointer);
-
-       return card_offset - rmesa->radeon.radeonScreen->gart_base;
-}
-
 GLboolean r300IsGartMemory(r300ContextPtr rmesa, const GLvoid * pointer,
                           GLint size)
 {
index cebd22fabedba37b30447eba4a04ff356891183b..7a19a2cf3f9001a1b92f60488a566fd5a4e59019 100644 (file)
@@ -39,9 +39,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "r300_context.h"
 #include "radeon_drm.h"
 
-extern GLuint r300GetMemoryOffsetMESA(__DRInativeDisplay * dpy, int scrn,
-                                     const GLvoid * pointer);
-
 extern GLboolean r300IsGartMemory(r300ContextPtr rmesa,
                                  const GLvoid * pointer, GLint size);
 
index f7296ebb12385077b3e9453f4912924fe6ecad01..e8d67f9aec1104d6115876685b3bd17d8a954ead 100644 (file)
@@ -976,7 +976,7 @@ static void r300ClearStencil(GLcontext * ctx, GLint s)
 #define SUBPIXEL_X 0.125
 #define SUBPIXEL_Y 0.125
 
-void r300UpdateWindow(GLcontext * ctx)
+static void r300UpdateWindow(GLcontext * ctx)
 {
        r300ContextPtr rmesa = R300_CONTEXT(ctx);
        __DRIdrawablePrivate *dPriv = rmesa->radeon.dri.drawable;
@@ -1642,8 +1642,6 @@ void static inline setup_vertex_shader_fragment(r300ContextPtr r300, int dest, s
        }
 }
 
-void r300SetupVertexProgram(r300ContextPtr rmesa);
-
 /* just a skeleton for now.. */
 
 /* Generate a vertex shader that simply transforms vertex and texture coordinates,
@@ -1699,66 +1697,7 @@ static void r300GenerateSimpleVertexShader(r300ContextPtr r300)
 
 }
 
-void r300SetupVertexShader(r300ContextPtr rmesa)
-{
-       GLcontext *ctx = rmesa->radeon.glCtx;
-
-       /* Reset state, in case we don't use something */
-       ((drm_r300_cmd_header_t *) rmesa->hw.vpp.cmd)->vpu.count = 0;
-       ((drm_r300_cmd_header_t *) rmesa->hw.vpi.cmd)->vpu.count = 0;
-       ((drm_r300_cmd_header_t *) rmesa->hw.vps.cmd)->vpu.count = 0;
-
-       /* Not sure why this doesnt work...
-          0x400 area might have something to do with pixel shaders as it appears right after pfs programming.
-          0x406 is set to { 0.0, 0.0, 1.0, 0.0 } most of the time but should change with smooth points and in other rare cases. */
-       //setup_vertex_shader_fragment(rmesa, 0x406, &unk4);
-       if (hw_tcl_on
-           && ((struct r300_vertex_program *)CURRENT_VERTEX_SHADER(ctx))->
-           translated) {
-               r300SetupVertexProgram(rmesa);
-               return;
-       }
-
-       /* This needs to be replaced by vertex shader generation code */
-       r300GenerateSimpleVertexShader(rmesa);
-
-       setup_vertex_shader_fragment(rmesa, VSF_DEST_PROGRAM,
-                                    &(rmesa->state.vertex_shader.program));
-
-#if 0
-       setup_vertex_shader_fragment(rmesa, VSF_DEST_UNKNOWN1,
-                                    &(rmesa->state.vertex_shader.unknown1));
-       setup_vertex_shader_fragment(rmesa, VSF_DEST_UNKNOWN2,
-                                    &(rmesa->state.vertex_shader.unknown2));
-#endif
-
-       R300_STATECHANGE(rmesa, pvs);
-       rmesa->hw.pvs.cmd[R300_PVS_CNTL_1] =
-           (rmesa->state.vertex_shader.
-            program_start << R300_PVS_CNTL_1_PROGRAM_START_SHIFT)
-           | (rmesa->state.vertex_shader.
-              unknown_ptr1 << R300_PVS_CNTL_1_POS_END_SHIFT)
-           | (rmesa->state.vertex_shader.
-              program_end << R300_PVS_CNTL_1_PROGRAM_END_SHIFT);
-       rmesa->hw.pvs.cmd[R300_PVS_CNTL_2] =
-           (rmesa->state.vertex_shader.
-            param_offset << R300_PVS_CNTL_2_PARAM_OFFSET_SHIFT)
-           | (rmesa->state.vertex_shader.
-              param_count << R300_PVS_CNTL_2_PARAM_COUNT_SHIFT);
-       rmesa->hw.pvs.cmd[R300_PVS_CNTL_3] =
-           (rmesa->state.vertex_shader.
-            unknown_ptr2 << R300_PVS_CNTL_3_PROGRAM_UNKNOWN_SHIFT)
-           | (rmesa->state.vertex_shader.unknown_ptr3 << 0);
-
-       /* This is done for vertex shader fragments, but also needs to be done for vap_pvs,
-          so I leave it as a reminder */
-#if 0
-       reg_start(R300_VAP_PVS_WAITIDLE, 0);
-       e32(0x00000000);
-#endif
-}
-
-void r300SetupVertexProgram(r300ContextPtr rmesa)
+static void r300SetupVertexProgram(r300ContextPtr rmesa)
 {
        GLcontext *ctx = rmesa->radeon.glCtx;
        int inst_count;
@@ -1813,166 +1752,69 @@ void r300SetupVertexProgram(r300ContextPtr rmesa)
 #endif
 }
 
-extern void _tnl_UpdateFixedFunctionProgram(GLcontext * ctx);
-
-extern int future_hw_tcl_on;
-void r300UpdateShaders(r300ContextPtr rmesa)
-{
-       GLcontext *ctx;
-       struct r300_vertex_program *vp;
-       int i;
-
-       ctx = rmesa->radeon.glCtx;
-
-       if (rmesa->NewGLState && hw_tcl_on) {
-               rmesa->NewGLState = 0;
-
-               for (i = _TNL_FIRST_MAT; i <= _TNL_LAST_MAT; i++) {
-                       rmesa->temp_attrib[i] =
-                           TNL_CONTEXT(ctx)->vb.AttribPtr[i];
-                       TNL_CONTEXT(ctx)->vb.AttribPtr[i] =
-                           &rmesa->dummy_attrib[i];
-               }
-
-               _tnl_UpdateFixedFunctionProgram(ctx);
-
-               for (i = _TNL_FIRST_MAT; i <= _TNL_LAST_MAT; i++) {
-                       TNL_CONTEXT(ctx)->vb.AttribPtr[i] =
-                           rmesa->temp_attrib[i];
-               }
-
-               r300SelectVertexShader(rmesa);
-               vp = (struct r300_vertex_program *)
-                   CURRENT_VERTEX_SHADER(ctx);
-               /*if (vp->translated == GL_FALSE)
-                  r300TranslateVertexShader(vp); */
-               if (vp->translated == GL_FALSE) {
-                       fprintf(stderr, "Failing back to sw-tcl\n");
-                       hw_tcl_on = future_hw_tcl_on = 0;
-                       r300ResetHwState(rmesa);
-
-                       return;
-               }
-               r300UpdateStateParameters(ctx, _NEW_PROGRAM);
-       }
-
-}
-
-static void r300SetupPixelShader(r300ContextPtr rmesa)
+static void r300SetupVertexShader(r300ContextPtr rmesa)
 {
        GLcontext *ctx = rmesa->radeon.glCtx;
-       struct r300_fragment_program *fp = (struct r300_fragment_program *)
-           (char *)ctx->FragmentProgram._Current;
-       int i, k;
 
-       if (!fp)                /* should only happenen once, just after context is created */
-               return;
+       /* Reset state, in case we don't use something */
+       ((drm_r300_cmd_header_t *) rmesa->hw.vpp.cmd)->vpu.count = 0;
+       ((drm_r300_cmd_header_t *) rmesa->hw.vpi.cmd)->vpu.count = 0;
+       ((drm_r300_cmd_header_t *) rmesa->hw.vps.cmd)->vpu.count = 0;
 
-       r300TranslateFragmentShader(rmesa, fp);
-       if (!fp->translated) {
-               fprintf(stderr, "%s: No valid fragment shader, exiting\n",
-                       __FUNCTION__);
+       /* Not sure why this doesnt work...
+          0x400 area might have something to do with pixel shaders as it appears right after pfs programming.
+          0x406 is set to { 0.0, 0.0, 1.0, 0.0 } most of the time but should change with smooth points and in other rare cases. */
+       //setup_vertex_shader_fragment(rmesa, 0x406, &unk4);
+       if (hw_tcl_on
+           && ((struct r300_vertex_program *)CURRENT_VERTEX_SHADER(ctx))->
+           translated) {
+               r300SetupVertexProgram(rmesa);
                return;
        }
-#define OUTPUT_FIELD(st, reg, field)  \
-               R300_STATECHANGE(rmesa, st); \
-               for(i=0;i<=fp->alu_end;i++) \
-                       rmesa->hw.st.cmd[R300_FPI_INSTR_0+i]=fp->alu.inst[i].field;\
-               rmesa->hw.st.cmd[R300_FPI_CMD_0]=cmdpacket0(reg, fp->alu_end+1);
 
-       OUTPUT_FIELD(fpi[0], R300_PFS_INSTR0_0, inst0);
-       OUTPUT_FIELD(fpi[1], R300_PFS_INSTR1_0, inst1);
-       OUTPUT_FIELD(fpi[2], R300_PFS_INSTR2_0, inst2);
-       OUTPUT_FIELD(fpi[3], R300_PFS_INSTR3_0, inst3);
-#undef OUTPUT_FIELD
-
-       R300_STATECHANGE(rmesa, fp);
-       /* I just want to say, the way these nodes are stored.. weird.. */
-       for (i = 0, k = (4 - (fp->cur_node + 1)); i < 4; i++, k++) {
-               if (i < (fp->cur_node + 1)) {
-                       rmesa->hw.fp.cmd[R300_FP_NODE0 + k] =
-                           (fp->node[i].
-                            alu_offset << R300_PFS_NODE_ALU_OFFSET_SHIFT)
-                           | (fp->node[i].
-                              alu_end << R300_PFS_NODE_ALU_END_SHIFT)
-                           | (fp->node[i].
-                              tex_offset << R300_PFS_NODE_TEX_OFFSET_SHIFT)
-                           | (fp->node[i].
-                              tex_end << R300_PFS_NODE_TEX_END_SHIFT)
-                           | fp->node[i].flags;        /*  ( (k==3) ? R300_PFS_NODE_LAST_NODE : 0); */
-               } else {
-                       rmesa->hw.fp.cmd[R300_FP_NODE0 + (3 - i)] = 0;
-               }
-       }
-
-       /*  PFS_CNTL_0 */
-       rmesa->hw.fp.cmd[R300_FP_CNTL0] =
-           fp->cur_node | (fp->first_node_has_tex << 3);
-       /* PFS_CNTL_1 */
-       rmesa->hw.fp.cmd[R300_FP_CNTL1] = fp->max_temp_idx;
-       /* PFS_CNTL_2 */
-       rmesa->hw.fp.cmd[R300_FP_CNTL2] =
-           (fp->alu_offset << R300_PFS_CNTL_ALU_OFFSET_SHIFT)
-           | (fp->alu_end << R300_PFS_CNTL_ALU_END_SHIFT)
-           | (fp->tex_offset << R300_PFS_CNTL_TEX_OFFSET_SHIFT)
-           | (fp->tex_end << R300_PFS_CNTL_TEX_END_SHIFT);
-
-       R300_STATECHANGE(rmesa, fpp);
-       for (i = 0; i < fp->const_nr; i++) {
-               rmesa->hw.fpp.cmd[R300_FPP_PARAM_0 + 4 * i + 0] =
-                   r300PackFloat24(fp->constant[i][0]);
-               rmesa->hw.fpp.cmd[R300_FPP_PARAM_0 + 4 * i + 1] =
-                   r300PackFloat24(fp->constant[i][1]);
-               rmesa->hw.fpp.cmd[R300_FPP_PARAM_0 + 4 * i + 2] =
-                   r300PackFloat24(fp->constant[i][2]);
-               rmesa->hw.fpp.cmd[R300_FPP_PARAM_0 + 4 * i + 3] =
-                   r300PackFloat24(fp->constant[i][3]);
-       }
-       rmesa->hw.fpp.cmd[R300_FPP_CMD_0] =
-           cmdpacket0(R300_PFS_PARAM_0_X, fp->const_nr * 4);
-}
-
-void r300UpdateShaderStates(r300ContextPtr rmesa)
-{
-       GLcontext *ctx;
-       ctx = rmesa->radeon.glCtx;
-
-       r300UpdateTextureState(ctx);
-
-       r300SetupPixelShader(rmesa);
-       r300SetupTextures(ctx);
-
-       if ((rmesa->radeon.radeonScreen->chip_flags & RADEON_CHIPSET_TCL))
-               r300SetupVertexShader(rmesa);
-       r300SetupRSUnit(ctx);
-}
-
-/**
- * Called by Mesa after an internal state update.
- */
-static void r300InvalidateState(GLcontext * ctx, GLuint new_state)
-{
-       r300ContextPtr r300 = R300_CONTEXT(ctx);
+       /* This needs to be replaced by vertex shader generation code */
+       r300GenerateSimpleVertexShader(rmesa);
 
-       _swrast_InvalidateState(ctx, new_state);
-       _swsetup_InvalidateState(ctx, new_state);
-       _vbo_InvalidateState(ctx, new_state);
-       _tnl_InvalidateState(ctx, new_state);
-       _ae_invalidate_state(ctx, new_state);
+       setup_vertex_shader_fragment(rmesa, VSF_DEST_PROGRAM,
+                                    &(rmesa->state.vertex_shader.program));
 
-       if (new_state & (_NEW_BUFFERS | _NEW_COLOR | _NEW_PIXEL)) {
-               r300UpdateDrawBuffer(ctx);
-       }
+#if 0
+       setup_vertex_shader_fragment(rmesa, VSF_DEST_UNKNOWN1,
+                                    &(rmesa->state.vertex_shader.unknown1));
+       setup_vertex_shader_fragment(rmesa, VSF_DEST_UNKNOWN2,
+                                    &(rmesa->state.vertex_shader.unknown2));
+#endif
 
-       r300UpdateStateParameters(ctx, new_state);
+       R300_STATECHANGE(rmesa, pvs);
+       rmesa->hw.pvs.cmd[R300_PVS_CNTL_1] =
+           (rmesa->state.vertex_shader.
+            program_start << R300_PVS_CNTL_1_PROGRAM_START_SHIFT)
+           | (rmesa->state.vertex_shader.
+              unknown_ptr1 << R300_PVS_CNTL_1_POS_END_SHIFT)
+           | (rmesa->state.vertex_shader.
+              program_end << R300_PVS_CNTL_1_PROGRAM_END_SHIFT);
+       rmesa->hw.pvs.cmd[R300_PVS_CNTL_2] =
+           (rmesa->state.vertex_shader.
+            param_offset << R300_PVS_CNTL_2_PARAM_OFFSET_SHIFT)
+           | (rmesa->state.vertex_shader.
+              param_count << R300_PVS_CNTL_2_PARAM_COUNT_SHIFT);
+       rmesa->hw.pvs.cmd[R300_PVS_CNTL_3] =
+           (rmesa->state.vertex_shader.
+            unknown_ptr2 << R300_PVS_CNTL_3_PROGRAM_UNKNOWN_SHIFT)
+           | (rmesa->state.vertex_shader.unknown_ptr3 << 0);
 
-       r300->NewGLState |= new_state;
+       /* This is done for vertex shader fragments, but also needs to be done for vap_pvs,
+          so I leave it as a reminder */
+#if 0
+       reg_start(R300_VAP_PVS_WAITIDLE, 0);
+       e32(0x00000000);
+#endif
 }
 
 /**
  * Completely recalculates hardware state based on the Mesa state.
  */
-void r300ResetHwState(r300ContextPtr r300)
+static void r300ResetHwState(r300ContextPtr r300)
 {
        GLcontext *ctx = r300->radeon.glCtx;
        int has_tcl = 1;
@@ -2232,6 +2074,163 @@ void r300ResetHwState(r300ContextPtr r300)
        r300->hw.all_dirty = GL_TRUE;
 }
 
+
+extern void _tnl_UpdateFixedFunctionProgram(GLcontext * ctx);
+
+extern int future_hw_tcl_on;
+void r300UpdateShaders(r300ContextPtr rmesa)
+{
+       GLcontext *ctx;
+       struct r300_vertex_program *vp;
+       int i;
+
+       ctx = rmesa->radeon.glCtx;
+
+       if (rmesa->NewGLState && hw_tcl_on) {
+               rmesa->NewGLState = 0;
+
+               for (i = _TNL_FIRST_MAT; i <= _TNL_LAST_MAT; i++) {
+                       rmesa->temp_attrib[i] =
+                           TNL_CONTEXT(ctx)->vb.AttribPtr[i];
+                       TNL_CONTEXT(ctx)->vb.AttribPtr[i] =
+                           &rmesa->dummy_attrib[i];
+               }
+
+               _tnl_UpdateFixedFunctionProgram(ctx);
+
+               for (i = _TNL_FIRST_MAT; i <= _TNL_LAST_MAT; i++) {
+                       TNL_CONTEXT(ctx)->vb.AttribPtr[i] =
+                           rmesa->temp_attrib[i];
+               }
+
+               r300SelectVertexShader(rmesa);
+               vp = (struct r300_vertex_program *)
+                   CURRENT_VERTEX_SHADER(ctx);
+               /*if (vp->translated == GL_FALSE)
+                  r300TranslateVertexShader(vp); */
+               if (vp->translated == GL_FALSE) {
+                       fprintf(stderr, "Failing back to sw-tcl\n");
+                       hw_tcl_on = future_hw_tcl_on = 0;
+                       r300ResetHwState(rmesa);
+
+                       return;
+               }
+               r300UpdateStateParameters(ctx, _NEW_PROGRAM);
+       }
+
+}
+
+static void r300SetupPixelShader(r300ContextPtr rmesa)
+{
+       GLcontext *ctx = rmesa->radeon.glCtx;
+       struct r300_fragment_program *fp = (struct r300_fragment_program *)
+           (char *)ctx->FragmentProgram._Current;
+       int i, k;
+
+       if (!fp)                /* should only happenen once, just after context is created */
+               return;
+
+       r300TranslateFragmentShader(rmesa, fp);
+       if (!fp->translated) {
+               fprintf(stderr, "%s: No valid fragment shader, exiting\n",
+                       __FUNCTION__);
+               return;
+       }
+#define OUTPUT_FIELD(st, reg, field)  \
+               R300_STATECHANGE(rmesa, st); \
+               for(i=0;i<=fp->alu_end;i++) \
+                       rmesa->hw.st.cmd[R300_FPI_INSTR_0+i]=fp->alu.inst[i].field;\
+               rmesa->hw.st.cmd[R300_FPI_CMD_0]=cmdpacket0(reg, fp->alu_end+1);
+
+       OUTPUT_FIELD(fpi[0], R300_PFS_INSTR0_0, inst0);
+       OUTPUT_FIELD(fpi[1], R300_PFS_INSTR1_0, inst1);
+       OUTPUT_FIELD(fpi[2], R300_PFS_INSTR2_0, inst2);
+       OUTPUT_FIELD(fpi[3], R300_PFS_INSTR3_0, inst3);
+#undef OUTPUT_FIELD
+
+       R300_STATECHANGE(rmesa, fp);
+       /* I just want to say, the way these nodes are stored.. weird.. */
+       for (i = 0, k = (4 - (fp->cur_node + 1)); i < 4; i++, k++) {
+               if (i < (fp->cur_node + 1)) {
+                       rmesa->hw.fp.cmd[R300_FP_NODE0 + k] =
+                           (fp->node[i].
+                            alu_offset << R300_PFS_NODE_ALU_OFFSET_SHIFT)
+                           | (fp->node[i].
+                              alu_end << R300_PFS_NODE_ALU_END_SHIFT)
+                           | (fp->node[i].
+                              tex_offset << R300_PFS_NODE_TEX_OFFSET_SHIFT)
+                           | (fp->node[i].
+                              tex_end << R300_PFS_NODE_TEX_END_SHIFT)
+                           | fp->node[i].flags;        /*  ( (k==3) ? R300_PFS_NODE_LAST_NODE : 0); */
+               } else {
+                       rmesa->hw.fp.cmd[R300_FP_NODE0 + (3 - i)] = 0;
+               }
+       }
+
+       /*  PFS_CNTL_0 */
+       rmesa->hw.fp.cmd[R300_FP_CNTL0] =
+           fp->cur_node | (fp->first_node_has_tex << 3);
+       /* PFS_CNTL_1 */
+       rmesa->hw.fp.cmd[R300_FP_CNTL1] = fp->max_temp_idx;
+       /* PFS_CNTL_2 */
+       rmesa->hw.fp.cmd[R300_FP_CNTL2] =
+           (fp->alu_offset << R300_PFS_CNTL_ALU_OFFSET_SHIFT)
+           | (fp->alu_end << R300_PFS_CNTL_ALU_END_SHIFT)
+           | (fp->tex_offset << R300_PFS_CNTL_TEX_OFFSET_SHIFT)
+           | (fp->tex_end << R300_PFS_CNTL_TEX_END_SHIFT);
+
+       R300_STATECHANGE(rmesa, fpp);
+       for (i = 0; i < fp->const_nr; i++) {
+               rmesa->hw.fpp.cmd[R300_FPP_PARAM_0 + 4 * i + 0] =
+                   r300PackFloat24(fp->constant[i][0]);
+               rmesa->hw.fpp.cmd[R300_FPP_PARAM_0 + 4 * i + 1] =
+                   r300PackFloat24(fp->constant[i][1]);
+               rmesa->hw.fpp.cmd[R300_FPP_PARAM_0 + 4 * i + 2] =
+                   r300PackFloat24(fp->constant[i][2]);
+               rmesa->hw.fpp.cmd[R300_FPP_PARAM_0 + 4 * i + 3] =
+                   r300PackFloat24(fp->constant[i][3]);
+       }
+       rmesa->hw.fpp.cmd[R300_FPP_CMD_0] =
+           cmdpacket0(R300_PFS_PARAM_0_X, fp->const_nr * 4);
+}
+
+void r300UpdateShaderStates(r300ContextPtr rmesa)
+{
+       GLcontext *ctx;
+       ctx = rmesa->radeon.glCtx;
+
+       r300UpdateTextureState(ctx);
+
+       r300SetupPixelShader(rmesa);
+       r300SetupTextures(ctx);
+
+       if ((rmesa->radeon.radeonScreen->chip_flags & RADEON_CHIPSET_TCL))
+               r300SetupVertexShader(rmesa);
+       r300SetupRSUnit(ctx);
+}
+
+/**
+ * Called by Mesa after an internal state update.
+ */
+static void r300InvalidateState(GLcontext * ctx, GLuint new_state)
+{
+       r300ContextPtr r300 = R300_CONTEXT(ctx);
+
+       _swrast_InvalidateState(ctx, new_state);
+       _swsetup_InvalidateState(ctx, new_state);
+       _vbo_InvalidateState(ctx, new_state);
+       _tnl_InvalidateState(ctx, new_state);
+       _ae_invalidate_state(ctx, new_state);
+
+       if (new_state & (_NEW_BUFFERS | _NEW_COLOR | _NEW_PIXEL)) {
+               r300UpdateDrawBuffer(ctx);
+       }
+
+       r300UpdateStateParameters(ctx, new_state);
+
+       r300->NewGLState |= new_state;
+}
+
 /**
  * Calculate initial hardware state and register state functions.
  * Assumes that the command buffer and state atoms have been
index 311e97daa8c7126132a45167dfe6101dcca4cab4..21a49b7f361c463f55700abe33508fcad8d77ada 100644 (file)
@@ -58,20 +58,13 @@ do {                                                        \
     \
 } while (0)
 
-extern void r300ResetHwState(r300ContextPtr r300);
-
 extern void r300UpdateStateParameters(GLcontext * ctx, GLuint new_state);
 extern void r300InitState(r300ContextPtr r300);
 extern void r300InitStateFuncs(struct dd_function_table *functions);
 extern void r300UpdateViewportOffset(GLcontext * ctx);
-extern void r300UpdateWindow(GLcontext * ctx);
 extern void r300UpdateDrawBuffer(GLcontext * ctx);
-extern void r300SetupVertexShader(r300ContextPtr rmesa);
 
 extern void r300UpdateShaders(r300ContextPtr rmesa);
 extern void r300UpdateShaderStates(r300ContextPtr rmesa);
 
-extern void r300PrintStateAtom(r300ContextPtr r300,
-                              struct r300_state_atom *state);
-
 #endif                         /* __R300_STATE_H__ */