r300g: fix case where texture unit 0 is disabled but unit 1 is enabled.
authorDave Airlie <airlied@redhat.com>
Wed, 14 Oct 2009 01:42:05 +0000 (11:42 +1000)
committerDave Airlie <airlied@redhat.com>
Wed, 14 Oct 2009 01:42:05 +0000 (11:42 +1000)
to reproduce, start texrect, disable 0 texture in menu.

Signed-off-by: Dave Airlie <airlied@redhat.com>
src/gallium/drivers/r300/r300_emit.c

index 570b4c5..99deb50 100644 (file)
@@ -683,7 +683,8 @@ validate:
     /* ...textures... */
     for (i = 0; i < r300->texture_count; i++) {
         tex = r300->textures[i];
-        assert(tex && tex->buffer && "texture is marked, but NULL!");
+        if (!tex)
+           continue;
         if (!r300->winsys->add_buffer(r300->winsys, tex->buffer,
                     RADEON_GEM_DOMAIN_GTT | RADEON_GEM_DOMAIN_VRAM, 0)) {
             r300->context.flush(&r300->context, 0, NULL);
@@ -770,12 +771,13 @@ validate:
     if (r300->dirty_state &
             (R300_ANY_NEW_SAMPLERS | R300_ANY_NEW_TEXTURES)) {
         for (i = 0; i < MIN2(r300->sampler_count, r300->texture_count); i++) {
-            if (r300->dirty_state &
-                    ((R300_NEW_SAMPLER << i) | (R300_NEW_TEXTURE << i))) {
-                r300_emit_texture(r300,
-                        r300->sampler_states[i],
-                        r300->textures[i],
-                        i);
+           if (r300->dirty_state &
+               ((R300_NEW_SAMPLER << i) | (R300_NEW_TEXTURE << i))) {
+               if (r300->textures[i]) 
+                   r300_emit_texture(r300,
+                                     r300->sampler_states[i],
+                                     r300->textures[i],
+                                     i);
                 r300->dirty_state &=
                     ~((R300_NEW_SAMPLER << i) | (R300_NEW_TEXTURE << i));
                 dirty_tex++;