mesa/r300classic: Fix dri2Invalidate/radeon_prepare_render for page flipping.
[mesa.git] / src / mesa / drivers / dri / r300 / r300_render.c
index 3cd38753b8ad3e2da1a58eae63ae3fa73e0c250a..44090ec2894d2a57ea63885d34b0d9dd5667488e 100644 (file)
@@ -53,7 +53,6 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "r300_render.h"
 
 #include "main/glheader.h"
-#include "main/state.h"
 #include "main/imports.h"
 #include "main/enums.h"
 #include "main/macros.h"
@@ -65,17 +64,10 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "swrast_setup/swrast_setup.h"
 #include "vbo/vbo.h"
 #include "vbo/vbo_split.h"
-#include "tnl/tnl.h"
-#include "tnl/t_vp_build.h"
-#include "radeon_reg.h"
-#include "radeon_macros.h"
 #include "r300_context.h"
-#include "r300_ioctl.h"
 #include "r300_state.h"
 #include "r300_reg.h"
-#include "r300_tex.h"
 #include "r300_emit.h"
-#include "r300_fragprog_common.h"
 #include "r300_swtcl.h"
 
 /**
@@ -329,7 +321,7 @@ static void r300FireAOS(r300ContextPtr rmesa, int vertex_count, int type)
        END_BATCH();
 }
 
-void r300RunRenderPrimitive(GLcontext * ctx, int start, int end, int prim)
+void r300RunRenderPrimitive(struct gl_context * ctx, int start, int end, int prim)
 {
        r300ContextPtr rmesa = R300_CONTEXT(ctx);
        BATCH_LOCALS(&rmesa->radeon);
@@ -394,6 +386,14 @@ void r300RunRenderPrimitive(GLcontext * ctx, int start, int end, int prim)
                        WARN_ONCE("Fixme: can't handle spliting prim %d\n", prim);
                        return;
                }
+
+               if (rmesa->radeon.radeonScreen->kernel_mm) {
+                       BEGIN_BATCH_NO_AUTOSTATE(2);
+                       OUT_BATCH_REGSEQ(R300_VAP_VF_MAX_VTX_INDX, 1);
+                       OUT_BATCH(rmesa->radeon.tcl.aos[0].count);
+                       END_BATCH();
+               }
+
                r300_emit_scissor(rmesa->radeon.glCtx);
                while (num_verts > 0) {
                        int nr;
@@ -408,8 +408,9 @@ void r300RunRenderPrimitive(GLcontext * ctx, int start, int end, int prim)
        COMMIT_BATCH();
 }
 
-static const char *getFallbackString(uint32_t bit)
+static const char *getFallbackString(r300ContextPtr rmesa, uint32_t bit)
 {
+       static char common_fallback_str[32];
        switch (bit) {
                case R300_FALLBACK_VERTEX_PROGRAM :
                        return "vertex program";
@@ -429,6 +430,9 @@ static const char *getFallbackString(uint32_t bit)
                        return "render mode != GL_RENDER";
                case R300_FALLBACK_FRAGMENT_PROGRAM:
                        return "fragment program";
+               case R300_FALLBACK_RADEON_COMMON:
+                       snprintf(common_fallback_str, 32, "radeon common 0x%08x", rmesa->radeon.Fallback);
+                       return common_fallback_str;
                case R300_FALLBACK_AOS_LIMIT:
                        return "aos limit";
                case R300_FALLBACK_INVALID_BUFFERS:
@@ -438,7 +442,7 @@ static const char *getFallbackString(uint32_t bit)
        }
 }
 
-void r300SwitchFallback(GLcontext *ctx, uint32_t bit, GLboolean mode)
+void r300SwitchFallback(struct gl_context *ctx, uint32_t bit, GLboolean mode)
 {
        TNLcontext *tnl = TNL_CONTEXT(ctx);
        r300ContextPtr rmesa = R300_CONTEXT(ctx);
@@ -448,7 +452,7 @@ void r300SwitchFallback(GLcontext *ctx, uint32_t bit, GLboolean mode)
        if (mode) {
                if ((fallback_warn & bit) == 0) {
                        if (RADEON_DEBUG & RADEON_FALLBACKS)
-                               _mesa_fprintf(stderr, "WARNING! Falling back to software for %s\n", getFallbackString(bit));
+                               fprintf(stderr, "WARNING! Falling back to software for %s\n", getFallbackString(rmesa, bit));
                        fallback_warn |= bit;
                }
                rmesa->fallback |= bit;