r300: fixup texture state emission for kms path
authorDave Airlie <airlied@redhat.com>
Thu, 26 Feb 2009 01:09:32 +0000 (11:09 +1000)
committerDave Airlie <airlied@redhat.com>
Thu, 26 Feb 2009 01:09:32 +0000 (11:09 +1000)
src/mesa/drivers/dri/r300/r300_cmdbuf.c

index 3b12d364193a361d008f055e0d77e39374b4ce56..068a9f978bac573060c5839c533602d5579c3ac9 100644 (file)
@@ -168,10 +168,21 @@ static void emit_tex_offsets(GLcontext *ctx, struct radeon_state_atom * atom)
        r300ContextPtr r300 = R300_CONTEXT(ctx);
        BATCH_LOCALS(&r300->radeon);
        int numtmus = packet0_count(r300, r300->hw.tex.offset.cmd);
+       int notexture = 0;
 
        if (numtmus) {
                int i;
 
+               for(i = 0; i < numtmus; ++i) {
+                   radeonTexObj *t = r300->hw.textures[i];
+               
+                   if (!t)
+                       notexture = 1;
+               }
+
+               if (r300->radeon.radeonScreen->kernel_mm && notexture) {
+                       return;
+               }
                BEGIN_BATCH_NO_AUTOSTATE(4 * numtmus);
                for(i = 0; i < numtmus; ++i) {
                    radeonTexObj *t = r300->hw.textures[i];
@@ -188,6 +199,8 @@ static void emit_tex_offsets(GLcontext *ctx, struct radeon_state_atom * atom)
                            } else if (!r300->radeon.radeonScreen->kernel_mm) {
                                    OUT_BATCH(t->override_offset);
                            }
+                           else
+                               OUT_BATCH(r300->radeon.radeonScreen->texOffset[0]);
                    }
                }
                END_BATCH();