dri/nouveau: allow multiple maps of surface buffers
authorBen Skeggs <bskeggs@redhat.com>
Wed, 19 Jan 2011 05:51:57 +0000 (15:51 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Wed, 19 Jan 2011 05:51:57 +0000 (15:51 +1000)
Can happen during swrast fallbacks if a buffer is somehow bound as
a render target and a texture.

Fixes gnome-shell on nv20, and gets it mostly working on nv10.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
src/mesa/drivers/dri/nouveau/nouveau_texture.c

index 2480b1ea5004666539b7e297f89108f3442c5419..988208ff56ecbf091a98713cd90615d68a6c87a5 100644 (file)
@@ -113,8 +113,10 @@ nouveau_teximage_map(struct gl_context *ctx, struct gl_texture_image *ti,
                        if (access & GL_MAP_WRITE_BIT)
                                flags |= NOUVEAU_BO_WR;
 
-                       ret = nouveau_bo_map(s->bo, flags);
-                       assert(!ret);
+                       if (!s->bo->map) {
+                               ret = nouveau_bo_map(s->bo, flags);
+                               assert(!ret);
+                       }
 
                        ti->Data = s->bo->map + y * s->pitch + x * s->cpp;
                }