Remove mapping fields from struct pipe_surface.
authorMichel Dänzer <michel@tungstengraphics.com>
Thu, 10 Jan 2008 16:44:04 +0000 (17:44 +0100)
committerMichel Dänzer <michel@tungstengraphics.com>
Mon, 14 Jan 2008 17:12:58 +0000 (18:12 +0100)
It's now the responsibility of surface users to keep track of their mappings.

17 files changed:
src/mesa/pipe/i915simple/i915_surface.c
src/mesa/pipe/i965simple/brw_surface.c
src/mesa/pipe/p_context.h
src/mesa/pipe/p_inlines.h
src/mesa/pipe/p_state.h
src/mesa/pipe/softpipe/sp_context.c
src/mesa/pipe/softpipe/sp_state_surface.c
src/mesa/pipe/softpipe/sp_surface.c
src/mesa/pipe/softpipe/sp_tile_cache.c
src/mesa/pipe/softpipe/sp_tile_cache.h
src/mesa/pipe/util/p_tile.c
src/mesa/pipe/xlib/xm_api.c
src/mesa/state_tracker/st_cb_accum.c
src/mesa/state_tracker/st_cb_drawpixels.c
src/mesa/state_tracker/st_cb_fbo.c
src/mesa/state_tracker/st_cb_readpixels.c
src/mesa/state_tracker/st_cb_texture.c

index 79e74e114373c758d111f1e4caf73acd6fa88efd..4e1b0929eed421b1462df2a148af17650aa8ceab 100644 (file)
@@ -171,10 +171,10 @@ i915_surface_copy(struct pipe_context *pipe,
 /* Fill a rectangular sub-region.  Need better logic about when to
  * push buffers into AGP - will currently do so whenever possible.
  */
-static ubyte *
-get_pointer(struct pipe_surface *dst, unsigned x, unsigned y)
+static void *
+get_pointer(struct pipe_surface *dst, void *dst_map, unsigned x, unsigned y)
 {
-   return dst->map + (y * dst->pitch + x) * dst->cpp;
+   return (char *)dst_map + (y * dst->pitch + x) * dst->cpp;
 }
 
 
@@ -186,12 +186,11 @@ i915_surface_fill(struct pipe_context *pipe,
 {
    if (0) {
       unsigned i, j;
-
-      (void)pipe_surface_map(dst);
+      void *dst_map = pipe_surface_map(dst);
 
       switch (dst->cpp) {
       case 1: {
-        ubyte *row = get_pointer(dst, dstx, dsty);
+        ubyte *row = get_pointer(dst, dst_map, dstx, dsty);
         for (i = 0; i < height; i++) {
            memset(row, value, width);
            row += dst->pitch;
@@ -199,7 +198,7 @@ i915_surface_fill(struct pipe_context *pipe,
       }
         break;
       case 2: {
-        ushort *row = (ushort *) get_pointer(dst, dstx, dsty);
+        ushort *row = get_pointer(dst, dst_map, dstx, dsty);
         for (i = 0; i < height; i++) {
            for (j = 0; j < width; j++)
               row[j] = (ushort) value;
@@ -208,7 +207,7 @@ i915_surface_fill(struct pipe_context *pipe,
       }
         break;
       case 4: {
-        unsigned *row = (unsigned *) get_pointer(dst, dstx, dsty);
+        unsigned *row = get_pointer(dst, dst_map, dstx, dsty);
         for (i = 0; i < height; i++) {
            for (j = 0; j < width; j++)
               row[j] = value;
@@ -220,6 +219,8 @@ i915_surface_fill(struct pipe_context *pipe,
         assert(0);
         break;
       }
+
+      pipe_surface_unmap( dst );
    }
    else {
       i915_fill_blit( i915_context(pipe),
index d0e7229d5ca8df9fd95cbbd8758e7dd719fba9ee..850423bdd53c987729c871a42763b73427c4cf1b 100644 (file)
@@ -171,10 +171,10 @@ brw_surface_copy(struct pipe_context *pipe,
 /* Fill a rectangular sub-region.  Need better logic about when to
  * push buffers into AGP - will currently do so whenever possible.
  */
-static ubyte *
-get_pointer(struct pipe_surface *dst, unsigned x, unsigned y)
+static void *
+get_pointer(struct pipe_surface *dst, void *dst_map, unsigned x, unsigned y)
 {
-   return dst->map + (y * dst->pitch + x) * dst->cpp;
+   return (char *)dst_map + (y * dst->pitch + x) * dst->cpp;
 }
 
 
@@ -186,12 +186,11 @@ brw_surface_fill(struct pipe_context *pipe,
 {
    if (0) {
       unsigned i, j;
-
-      (void)pipe_surface_map(dst);
+      void *dst_map = pipe_surface_map(dst);
 
       switch (dst->cpp) {
       case 1: {
-        ubyte *row = get_pointer(dst, dstx, dsty);
+        ubyte *row = get_pointer(dst, dst_map, dstx, dsty);
         for (i = 0; i < height; i++) {
            memset(row, value, width);
            row += dst->pitch;
@@ -199,7 +198,7 @@ brw_surface_fill(struct pipe_context *pipe,
       }
         break;
       case 2: {
-        ushort *row = (ushort *) get_pointer(dst, dstx, dsty);
+        ushort *row = get_pointer(dst, dst_map, dstx, dsty);
         for (i = 0; i < height; i++) {
            for (j = 0; j < width; j++)
               row[j] = (ushort) value;
@@ -208,7 +207,7 @@ brw_surface_fill(struct pipe_context *pipe,
       }
         break;
       case 4: {
-        unsigned *row = (unsigned *) get_pointer(dst, dstx, dsty);
+        unsigned *row = get_pointer(dst, dst_map, dstx, dsty);
         for (i = 0; i < height; i++) {
            for (j = 0; j < width; j++)
               row[j] = value;
@@ -220,6 +219,8 @@ brw_surface_fill(struct pipe_context *pipe,
         assert(0);
         break;
       }
+
+      pipe_surface_unmap( dst );
    }
    else {
       brw_fill_blit(brw_context(pipe),
index 1afb38a868379598b89af0af78d72f57d76179e1..1a1f4f4e786d7b55598911632e4ddbdedaf74c78 100644 (file)
@@ -194,9 +194,9 @@ struct pipe_context {
                     const void *p, int src_stride);
    /* XXX temporary here, move these to softpipe */
    void (*get_tile_rgba)(struct pipe_context *pipe, struct pipe_surface *ps,
-                         uint x, uint y, uint w, uint h, float *p);
+                        uint x, uint y, uint w, uint h, float *p);
    void (*put_tile_rgba)(struct pipe_context *pipe, struct pipe_surface *ps,
-                         uint x, uint y, uint w, uint h, const float *p);
+                        uint x, uint y, uint w, uint h, const float *p);
 
 
    /*
index e7303c45c1b4fe5e2c360d0a6dc9d91870d6511d..6976d087f9b84b935927cd1be8d0030f6cb33cba 100644 (file)
 #include "p_winsys.h"
 
 
-static INLINE ubyte *
+static INLINE void *
 pipe_surface_map(struct pipe_surface *surface)
 {
-   if (!surface->map_refcount++) {
-      surface->map
-         = (ubyte *) surface->winsys->buffer_map( surface->winsys,
-                                                 surface->buffer,
-                                                 PIPE_BUFFER_FLAG_WRITE | 
-                                                 PIPE_BUFFER_FLAG_READ )
-           + surface->offset;
-   }
-
-   return surface->map;
+   return (char *)surface->winsys->buffer_map( surface->winsys, surface->buffer,
+                                              PIPE_BUFFER_FLAG_WRITE |
+                                              PIPE_BUFFER_FLAG_READ )
+      + surface->offset;
 }
 
 static INLINE void
 pipe_surface_unmap(struct pipe_surface *surface)
 {
-   if (surface->map_refcount > 0) {
-      assert(surface->map);
-      if (!--surface->map_refcount) {
-         surface->winsys->buffer_unmap( surface->winsys,
-                                       surface->buffer );
-         surface->map = NULL;
-      }
-   }
+   surface->winsys->buffer_unmap( surface->winsys, surface->buffer );
 }
 
-
 /**
  * Set 'ptr' to point to 'surf' and update reference counting.
  * The old thing pointed to, if any, will be unreferenced first.
index f9c5bfb6c657196b2ca133d6e25bc7a941b4135d..ccd2a5f9e2f2773430f57a8f1810bf38bc16be4c 100644 (file)
@@ -242,8 +242,6 @@ struct pipe_sampler_state
 struct pipe_surface
 {
    struct pipe_buffer_handle *buffer; /**< driver private buffer handle */
-   ubyte *map;    /**< only non-NULL when surface is actually mapped */
-   unsigned map_refcount;  /**< Reference count for mapping */
    enum pipe_format format;      /**< PIPE_FORMAT_x */
    unsigned cpp;                 /**< bytes per pixel */
    unsigned width, height;
index 4f22539629db6a2262238a8d26bd3ac8c6e6f814..68c18e2d05b6ad0f0f9c63c40027aaaec80a0747 100644 (file)
@@ -75,22 +75,15 @@ softpipe_is_format_supported( struct pipe_context *pipe,
 void
 softpipe_map_surfaces(struct softpipe_context *sp)
 {
-   struct pipe_surface *ps;
    unsigned i;
 
    for (i = 0; i < sp->framebuffer.num_cbufs; i++) {
-      ps = sp->framebuffer.cbufs[i];
-      if (ps->buffer && !ps->map)
-         pipe_surface_map(ps);
+      sp_tile_cache_map_surfaces(sp->cbuf_cache[i]);
    }
 
-   ps = sp->framebuffer.zbuf;
-   if (ps && ps->buffer && !ps->map)
-      pipe_surface_map(ps);
+   sp_tile_cache_map_surfaces(sp->zbuf_cache);
 
-   ps = sp->framebuffer.sbuf;
-   if (ps && ps->buffer && !ps->map)
-      pipe_surface_map(ps);
+   sp_tile_cache_map_surfaces(sp->sbuf_cache);
 }
 
 
@@ -100,7 +93,6 @@ softpipe_map_surfaces(struct softpipe_context *sp)
 void
 softpipe_unmap_surfaces(struct softpipe_context *sp)
 {
-   struct pipe_surface *ps;
    uint i;
 
    for (i = 0; i < sp->framebuffer.num_cbufs; i++)
@@ -109,18 +101,12 @@ softpipe_unmap_surfaces(struct softpipe_context *sp)
    sp_flush_tile_cache(sp, sp->sbuf_cache);
 
    for (i = 0; i < sp->framebuffer.num_cbufs; i++) {
-      ps = sp->framebuffer.cbufs[i];
-      if (ps->map)
-         pipe_surface_unmap(ps);
+      sp_tile_cache_unmap_surfaces(sp->cbuf_cache[i]);
    }
 
-   ps = sp->framebuffer.zbuf;
-   if (ps && ps->map)
-      pipe_surface_unmap(ps);
+   sp_tile_cache_unmap_surfaces(sp->zbuf_cache);
 
-   ps = sp->framebuffer.sbuf;
-   if (ps && ps->map)
-      pipe_surface_unmap(ps);
+   sp_tile_cache_unmap_surfaces(sp->sbuf_cache);
 }
 
 
index ee72aaf4c5a0c860366162dd729750b879f9edce..4a9a28cc4dc58fd00607c08c8c9ad3d602943c74 100644 (file)
@@ -38,7 +38,7 @@
 /**
  * XXX this might get moved someday
  * Set the framebuffer surface info: color buffers, zbuffer, stencil buffer.
- * Here, we map the surfaces and update the tile cache to point to the new
+ * Here, we flush the old surfaces and update the tile cache to point to the new
  * surfaces.
  */
 void
@@ -46,7 +46,6 @@ softpipe_set_framebuffer_state(struct pipe_context *pipe,
                                const struct pipe_framebuffer_state *fb)
 {
    struct softpipe_context *sp = softpipe_context(pipe);
-   struct pipe_surface *ps;
    uint i;
 
    for (i = 0; i < PIPE_MAX_COLOR_BUFS; i++) {
@@ -54,19 +53,12 @@ softpipe_set_framebuffer_state(struct pipe_context *pipe,
       if (sp->framebuffer.cbufs[i] != fb->cbufs[i]) {
          /* flush old */
          sp_flush_tile_cache(sp, sp->cbuf_cache[i]);
-         /* unmap old */
-         ps = sp->framebuffer.cbufs[i];
-         if (ps && ps->map)
-            pipe_surface_unmap(ps);
-         /* map new */
-         ps = fb->cbufs[i];
-         if (ps)
-            pipe_surface_map(ps);
+
          /* assign new */
          sp->framebuffer.cbufs[i] = fb->cbufs[i];
 
          /* update cache */
-         sp_tile_cache_set_surface(sp->cbuf_cache[i], ps);
+         sp_tile_cache_set_surface(sp->cbuf_cache[i], fb->cbufs[i]);
       }
    }
 
@@ -76,23 +68,12 @@ softpipe_set_framebuffer_state(struct pipe_context *pipe,
    if (sp->framebuffer.zbuf != fb->zbuf) {
       /* flush old */
       sp_flush_tile_cache(sp, sp->zbuf_cache);
-      /* unmap old */
-      ps = sp->framebuffer.zbuf;
-      if (ps && ps->map)
-         pipe_surface_unmap(ps);
-      if (sp->framebuffer.sbuf == sp->framebuffer.zbuf) {
-         /* combined z/stencil */
-         sp->framebuffer.sbuf = NULL;
-      }
-      /* map new */
-      ps = fb->zbuf;
-      if (ps)
-         pipe_surface_map(ps);
+
       /* assign new */
       sp->framebuffer.zbuf = fb->zbuf;
 
       /* update cache */
-      sp_tile_cache_set_surface(sp->zbuf_cache, ps);
+      sp_tile_cache_set_surface(sp->zbuf_cache, fb->zbuf);
    }
 
    /* XXX combined depth/stencil here */
@@ -101,14 +82,7 @@ softpipe_set_framebuffer_state(struct pipe_context *pipe,
    if (sp->framebuffer.sbuf != fb->sbuf) {
       /* flush old */
       sp_flush_tile_cache(sp, sp->sbuf_cache_sep);
-      /* unmap old */
-      ps = sp->framebuffer.sbuf;
-      if (ps && ps->map)
-         pipe_surface_unmap(ps);
-      /* map new */
-      ps = fb->sbuf;
-      if (ps && fb->sbuf != fb->zbuf)
-         pipe_surface_map(ps);
+
       /* assign new */
       sp->framebuffer.sbuf = fb->sbuf;
 
@@ -116,12 +90,12 @@ softpipe_set_framebuffer_state(struct pipe_context *pipe,
       if (fb->sbuf != fb->zbuf) {
          /* separate stencil buf */
          sp->sbuf_cache = sp->sbuf_cache_sep;
-         sp_tile_cache_set_surface(sp->sbuf_cache, ps);
+         sp_tile_cache_set_surface(sp->sbuf_cache, fb->sbuf);
       }
       else {
          /* combined depth/stencil */
          sp->sbuf_cache = sp->zbuf_cache;
-         sp_tile_cache_set_surface(sp->sbuf_cache, ps);
+         sp_tile_cache_set_surface(sp->sbuf_cache, fb->sbuf);
       }
    }
 
index ece30e36ec490924ceb7af6a31bd3bc165731d20..b44ba3e957099fabd1d6c538e280381f276078d2 100644 (file)
@@ -158,10 +158,10 @@ sp_surface_copy(struct pipe_context *pipe,
 }
 
 
-static ubyte *
-get_pointer(struct pipe_surface *dst, unsigned x, unsigned y)
+static void *
+get_pointer(struct pipe_surface *dst, void *dst_map, unsigned x, unsigned y)
 {
-   return dst->map + (y * dst->pitch + x) * dst->cpp;
+   return (char *)dst_map + (y * dst->pitch + x) * dst->cpp;
 }
 
 
@@ -179,16 +179,16 @@ sp_surface_fill(struct pipe_context *pipe,
                unsigned width, unsigned height, unsigned value)
 {
    unsigned i, j;
+   void *dst_map = pipe_surface_map(dst);
 
    assert(dst->pitch > 0);
    assert(width <= dst->pitch);
 
-   (void)pipe_surface_map(dst);
 
    switch (dst->cpp) {
    case 1:
       {
-         ubyte *row = get_pointer(dst, dstx, dsty);
+        ubyte *row = get_pointer(dst, dst_map, dstx, dsty);
          for (i = 0; i < height; i++) {
             memset(row, value, width);
         row += dst->pitch;
@@ -197,7 +197,7 @@ sp_surface_fill(struct pipe_context *pipe,
       break;
    case 2:
       {
-         ushort *row = (ushort *) get_pointer(dst, dstx, dsty);
+         ushort *row = get_pointer(dst, dst_map, dstx, dsty);
          for (i = 0; i < height; i++) {
             for (j = 0; j < width; j++)
                row[j] = (ushort) value;
@@ -207,7 +207,7 @@ sp_surface_fill(struct pipe_context *pipe,
       break;
    case 4:
       {
-         unsigned *row = (unsigned *) get_pointer(dst, dstx, dsty);
+         unsigned *row = get_pointer(dst, dst_map, dstx, dsty);
          for (i = 0; i < height; i++) {
             for (j = 0; j < width; j++)
                row[j] = value;
@@ -218,7 +218,7 @@ sp_surface_fill(struct pipe_context *pipe,
    case 8:
       {
          /* expand the 4-byte clear value to an 8-byte value */
-         ushort *row = (ushort *) get_pointer(dst, dstx, dsty);
+         ushort *row = (ushort *) get_pointer(dst, dst_map, dstx, dsty);
          ushort val0 = UBYTE_TO_USHORT((value >>  0) & 0xff);
          ushort val1 = UBYTE_TO_USHORT((value >>  8) & 0xff);
          ushort val2 = UBYTE_TO_USHORT((value >> 16) & 0xff);
index 1dbcc5aadd0b58393d996353df7c1580d9abae03..d6f60807e6c2ad7963d4b3f5a05c45f13c643941 100644 (file)
@@ -49,6 +49,7 @@
 struct softpipe_tile_cache
 {
    struct pipe_surface *surface;  /**< the surface we're caching */
+   void *surface_map;
    struct pipe_texture *texture;  /**< if caching a texture */
    struct softpipe_cached_tile entries[NUM_ENTRIES];
    uint clear_flags[(MAX_WIDTH / TILE_SIZE) * (MAX_HEIGHT / TILE_SIZE) / 32];
@@ -57,6 +58,7 @@ struct softpipe_tile_cache
    boolean depth_stencil; /** Is the surface a depth/stencil format? */
 
    struct pipe_surface *tex_surf;
+   void *tex_surf_map;
    int tex_face, tex_level, tex_z;
 
    struct softpipe_cached_tile tile;  /**< scratch tile for clears */
@@ -150,7 +152,7 @@ sp_tile_cache_set_surface(struct softpipe_tile_cache *tc,
 {
    assert(!tc->texture);
 
-   if (tc->surface && tc->surface->map) {
+   if (tc->surface_map) {
       /*assert(tc->surface != ps);*/
       pipe_surface_unmap(tc->surface);
    }
@@ -158,8 +160,8 @@ sp_tile_cache_set_surface(struct softpipe_tile_cache *tc,
    pipe_surface_reference(&tc->surface, ps);
 
    if (ps) {
-      if (!ps->map)
-         pipe_surface_map(ps);
+      if (tc->surface_map)
+        tc->surface_map = pipe_surface_map(ps);
 
       tc->depth_stencil = (ps->format == PIPE_FORMAT_S8Z24_UNORM ||
                            ps->format == PIPE_FORMAT_Z16_UNORM ||
@@ -179,6 +181,32 @@ sp_tile_cache_get_surface(struct softpipe_tile_cache *tc)
 }
 
 
+void
+sp_tile_cache_map_surfaces(struct softpipe_tile_cache *tc)
+{
+   if (tc->surface && !tc->surface_map)
+      tc->surface_map = pipe_surface_map(tc->surface);
+
+   if (tc->tex_surf && !tc->tex_surf_map)
+      tc->tex_surf_map = pipe_surface_map(tc->tex_surf);
+}
+
+
+void
+sp_tile_cache_unmap_surfaces(struct softpipe_tile_cache *tc)
+{
+   if (tc->surface_map) {
+      pipe_surface_unmap(tc->surface);
+      tc->surface_map = NULL;
+   }
+
+   if (tc->tex_surf_map) {
+      pipe_surface_unmap(tc->tex_surf);
+      tc->tex_surf_map = NULL;
+   }
+}
+
+
 /**
  * Specify the texture to cache.
  */
@@ -192,8 +220,10 @@ sp_tile_cache_set_texture(struct softpipe_tile_cache *tc,
 
    tc->texture = texture;
 
-   if (tc->tex_surf && tc->tex_surf->map)
+   if (tc->tex_surf_map) {
       pipe_surface_unmap(tc->tex_surf);
+      tc->tex_surf_map = NULL;
+   }
    pipe_surface_reference(&tc->tex_surf, NULL);
 
    /* mark as entries as invalid/empty */
@@ -330,9 +360,6 @@ sp_flush_tile_cache(struct softpipe_context *softpipe,
    if (!ps || !ps->buffer)
       return;
 
-   if (!ps->map)
-      pipe_surface_map(ps);
-
    for (pos = 0; pos < NUM_ENTRIES; pos++) {
       struct softpipe_cached_tile *tile = tc->entries + pos;
       if (tile->x >= 0) {
@@ -475,11 +502,11 @@ sp_get_cached_tile_tex(struct pipe_context *pipe,
           tc->tex_z != z) {
          /* get new surface (view into texture) */
 
-         if (tc->tex_surf && tc->tex_surf->map)
+        if (tc->tex_surf_map)
             pipe_surface_unmap(tc->tex_surf);
 
          tc->tex_surf = pipe->get_tex_surface(pipe, tc->texture, face, level, z);
-         pipe_surface_map(tc->tex_surf);
+         tc->tex_surf_map = pipe_surface_map(tc->tex_surf);
 
          tc->tex_face = face;
          tc->tex_level = level;
index 91fb2795a26cb7b727356409db1c21dc3537454b..7fd10812863e9f925712d3eac93a88ae635899a9 100644 (file)
@@ -73,6 +73,12 @@ sp_tile_cache_set_surface(struct softpipe_tile_cache *tc,
 extern struct pipe_surface *
 sp_tile_cache_get_surface(struct softpipe_tile_cache *tc);
 
+extern void
+sp_tile_cache_map_surfaces(struct softpipe_tile_cache *tc);
+
+extern void
+sp_tile_cache_unmap_surfaces(struct softpipe_tile_cache *tc);
+
 extern void
 sp_tile_cache_set_texture(struct softpipe_tile_cache *tc,
                           struct pipe_texture *texture);
index 8bc3c22c83284509de09133fde2cc75dc5c8b423..f2e19f19dcb62e283816cd312d6cbebd554e2517 100644 (file)
@@ -56,8 +56,6 @@ pipe_get_tile_raw(struct pipe_context *pipe,
    ubyte *pDest;
    uint i;
 
-   assert(ps->map);
-
    if (dst_stride == 0) {
       dst_stride = w * cpp;
    }
@@ -65,7 +63,7 @@ pipe_get_tile_raw(struct pipe_context *pipe,
    if (pipe_clip_tile(x, y, &w, &h, ps))
       return;
 
-   pSrc = ps->map + (y * ps->pitch + x) * cpp;
+   pSrc = (const ubyte *) pipe_surface_map(ps) + (y * ps->pitch + x) * cpp;
    pDest = (ubyte *) p;
 
    for (i = 0; i < h; i++) {
@@ -73,6 +71,8 @@ pipe_get_tile_raw(struct pipe_context *pipe,
       pDest += dst_stride;
       pSrc += src_stride;
    }
+
+   pipe_surface_unmap(ps);
 }
 
 
@@ -92,8 +92,6 @@ pipe_put_tile_raw(struct pipe_context *pipe,
    ubyte *pDest;
    uint i;
 
-   assert(ps->map);
-
    if (src_stride == 0) {
       src_stride = w * cpp;
    }
@@ -102,13 +100,15 @@ pipe_put_tile_raw(struct pipe_context *pipe,
       return;
 
    pSrc = (const ubyte *) p;
-   pDest = ps->map + (y * ps->pitch + x) * cpp;
+   pDest = (ubyte *) pipe_surface_map(ps) + (y * ps->pitch + x) * cpp;
 
    for (i = 0; i < h; i++) {
       memcpy(pDest, pSrc, w * cpp);
       pDest += dst_stride;
       pSrc += src_stride;
    }
+
+   pipe_surface_unmap(ps);
 }
 
 
@@ -126,11 +126,12 @@ pipe_put_tile_raw(struct pipe_context *pipe,
 
 static void
 a8r8g8b8_get_tile_rgba(struct pipe_surface *ps,
+                      void *map,
                        unsigned x, unsigned y, unsigned w, unsigned h,
                        float *p)
 {
    const unsigned *src
-      = ((const unsigned *) (ps->map))
+      = ((const unsigned *) map)
       + y * ps->pitch + x;
    unsigned i, j;
    unsigned w0 = w;
@@ -158,11 +159,12 @@ a8r8g8b8_get_tile_rgba(struct pipe_surface *ps,
 
 static void
 a8r8g8b8_put_tile_rgba(struct pipe_surface *ps,
+                      void *map,
                        unsigned x, unsigned y, unsigned w, unsigned h,
                        const float *p)
 {
    unsigned *dst
-      = ((unsigned *) (ps->map))
+      = ((unsigned *) map)
       + y * ps->pitch + x;
    unsigned i, j;
    unsigned w0 = w;
@@ -193,11 +195,12 @@ a8r8g8b8_put_tile_rgba(struct pipe_surface *ps,
 
 static void
 b8g8r8a8_get_tile_rgba(struct pipe_surface *ps,
+                      void *map,
                        unsigned x, unsigned y, unsigned w, unsigned h,
                        float *p)
 {
    const unsigned *src
-      = ((const unsigned *) (ps->map))
+      = ((const unsigned *) map)
       + y * ps->pitch + x;
    unsigned i, j;
    unsigned w0 = w;
@@ -225,11 +228,12 @@ b8g8r8a8_get_tile_rgba(struct pipe_surface *ps,
 
 static void
 b8g8r8a8_put_tile_rgba(struct pipe_surface *ps,
+                      void *map,
                        unsigned x, unsigned y, unsigned w, unsigned h,
                        const float *p)
 {
    unsigned *dst
-      = ((unsigned *) (ps->map))
+      = ((unsigned *) map)
       + y * ps->pitch + x;
    unsigned i, j;
    unsigned w0 = w;
@@ -260,11 +264,12 @@ b8g8r8a8_put_tile_rgba(struct pipe_surface *ps,
 
 static void
 a1r5g5b5_get_tile_rgba(struct pipe_surface *ps,
+                      void *map,
                        unsigned x, unsigned y, unsigned w, unsigned h,
                        float *p)
 {
    const ushort *src
-      = ((const ushort *) (ps->map))
+      = ((const ushort *) map)
       + y * ps->pitch + x;
    unsigned i, j;
 
@@ -288,11 +293,12 @@ a1r5g5b5_get_tile_rgba(struct pipe_surface *ps,
 
 static void
 a4r4g4b4_get_tile_rgba(struct pipe_surface *ps,
+                      void *map,
                        unsigned x, unsigned y, unsigned w, unsigned h,
                        float *p)
 {
    const ushort *src
-      = ((const ushort *) (ps->map))
+      = ((const ushort *) map)
       + y * ps->pitch + x;
    unsigned i, j;
 
@@ -316,11 +322,12 @@ a4r4g4b4_get_tile_rgba(struct pipe_surface *ps,
 
 static void
 r5g6b5_get_tile_rgba(struct pipe_surface *ps,
+                    void *map,
                      unsigned x, unsigned y, unsigned w, unsigned h,
                      float *p)
 {
    const ushort *src
-      = ((const ushort *) (ps->map))
+      = ((const ushort *) map)
       + y * ps->pitch + x;
    unsigned i, j;
 
@@ -342,11 +349,12 @@ r5g6b5_get_tile_rgba(struct pipe_surface *ps,
 
 static void
 r5g5b5_put_tile_rgba(struct pipe_surface *ps,
+                    void *map,
                      unsigned x, unsigned y, unsigned w, unsigned h,
                      const float *p)
 {
    ushort *dst
-      = ((ushort *) (ps->map))
+      = ((ushort *) map)
       + y * ps->pitch + x;
    unsigned i, j;
    unsigned w0 = w;
@@ -379,11 +387,12 @@ r5g5b5_put_tile_rgba(struct pipe_surface *ps,
  */
 static void
 z16_get_tile_rgba(struct pipe_surface *ps,
+                 void *map,
                   unsigned x, unsigned y, unsigned w, unsigned h,
                   float *p)
 {
    const ushort *src
-      = ((const ushort *) (ps->map))
+      = ((const ushort *) map)
       + y * ps->pitch + x;
    const float scale = 1.0f / 65535.0f;
    unsigned i, j;
@@ -414,11 +423,12 @@ z16_get_tile_rgba(struct pipe_surface *ps,
 
 static void
 l8_get_tile_rgba(struct pipe_surface *ps,
+                void *map,
                  unsigned x, unsigned y, unsigned w, unsigned h,
                  float *p)
 {
    const ubyte *src
-      = ((const ubyte *) (ps->map))
+      = ((const ubyte *) map)
       + y * ps->pitch + x;
    unsigned i, j;
    unsigned w0 = w;
@@ -447,11 +457,12 @@ l8_get_tile_rgba(struct pipe_surface *ps,
 
 static void
 a8_get_tile_rgba(struct pipe_surface *ps,
+                void *map,
                  unsigned x, unsigned y, unsigned w, unsigned h,
                  float *p)
 {
    const ubyte *src
-      = ((const ubyte *) (ps->map))
+      = ((const ubyte *) map)
       + y * ps->pitch + x;
    unsigned i, j;
    unsigned w0 = w;
@@ -480,11 +491,12 @@ a8_get_tile_rgba(struct pipe_surface *ps,
 
 static void
 r16g16b16a16_get_tile_rgba(struct pipe_surface *ps,
+                          void *map,
                            unsigned x, unsigned y, unsigned w, unsigned h,
                            float *p)
 {
    const short *src
-      = ((const short *) (ps->map))
+      = ((const short *) map)
       + (y * ps->pitch + x) * 4;
    unsigned i, j;
    unsigned w0 = w;
@@ -513,11 +525,12 @@ r16g16b16a16_get_tile_rgba(struct pipe_surface *ps,
 
 static void
 r16g16b16a16_put_tile_rgba(struct pipe_surface *ps,
+                          void *map,
                            unsigned x, unsigned y, unsigned w, unsigned h,
                            const float *p)
 {
    short *dst
-      = ((short *) (ps->map))
+      = ((short *) map)
       + (y * ps->pitch + x) * 4;
    unsigned i, j;
    unsigned w0 = w;
@@ -552,11 +565,12 @@ r16g16b16a16_put_tile_rgba(struct pipe_surface *ps,
 
 static void
 i8_get_tile_rgba(struct pipe_surface *ps,
+                void *map,
                  unsigned x, unsigned y, unsigned w, unsigned h,
                  float *p)
 {
    const ubyte *src
-      = ((const ubyte *) (ps->map))
+      = ((const ubyte *) map)
       + y * ps->pitch + x;
    unsigned i, j;
    unsigned w0 = w;
@@ -585,11 +599,12 @@ i8_get_tile_rgba(struct pipe_surface *ps,
 
 static void
 a8_l8_get_tile_rgba(struct pipe_surface *ps,
+                   void *map,
                     unsigned x, unsigned y, unsigned w, unsigned h,
                     float *p)
 {
    const ushort *src
-      = ((const ushort *) (ps->map))
+      = ((const ushort *) map)
       + y * ps->pitch + x;
    unsigned i, j;
    unsigned w0 = w;
@@ -624,11 +639,12 @@ a8_l8_get_tile_rgba(struct pipe_surface *ps,
  */
 static void
 z32_get_tile_rgba(struct pipe_surface *ps,
+                 void *map,
                   unsigned x, unsigned y, unsigned w, unsigned h,
                   float *p)
 {
    const uint *src
-      = ((const uint *) (ps->map))
+      = ((const uint *) map)
       + y * ps->pitch + x;
    const double scale = 1.0 / (double) 0xffffffff;
    unsigned i, j;
@@ -660,11 +676,12 @@ z32_get_tile_rgba(struct pipe_surface *ps,
  */
 static void
 s8z24_get_tile_rgba(struct pipe_surface *ps,
+                   void *map,
                     unsigned x, unsigned y, unsigned w, unsigned h,
                     float *p)
 {
    const uint *src
-      = ((const uint *) (ps->map))
+      = ((const uint *) map)
       + y * ps->pitch + x;
    const double scale = 1.0 / ((1 << 24) - 1);
    unsigned i, j;
@@ -696,11 +713,12 @@ s8z24_get_tile_rgba(struct pipe_surface *ps,
  */
 static void
 z24s8_get_tile_rgba(struct pipe_surface *ps,
+                   void *map,
                     unsigned x, unsigned y, unsigned w, unsigned h,
                     float *p)
 {
    const uint *src
-      = ((const uint *) (ps->map))
+      = ((const uint *) map)
       + y * ps->pitch + x;
    const double scale = 1.0 / ((1 << 24) - 1);
    unsigned i, j;
@@ -731,52 +749,56 @@ pipe_get_tile_rgba(struct pipe_context *pipe,
                    uint x, uint y, uint w, uint h,
                    float *p)
 {
+   void *map = pipe_surface_map(ps);
+
    switch (ps->format) {
    case PIPE_FORMAT_A8R8G8B8_UNORM:
-      a8r8g8b8_get_tile_rgba(ps, x, y, w, h, p);
+      a8r8g8b8_get_tile_rgba(ps, map, x, y, w, h, p);
       break;
    case PIPE_FORMAT_B8G8R8A8_UNORM:
-      b8g8r8a8_get_tile_rgba(ps, x, y, w, h, p);
+      b8g8r8a8_get_tile_rgba(ps, map, x, y, w, h, p);
       break;
    case PIPE_FORMAT_A1R5G5B5_UNORM:
-      a1r5g5b5_get_tile_rgba(ps, x, y, w, h, p);
+      a1r5g5b5_get_tile_rgba(ps, map, x, y, w, h, p);
       break;
    case PIPE_FORMAT_A4R4G4B4_UNORM:
-      a4r4g4b4_get_tile_rgba(ps, x, y, w, h, p);
+      a4r4g4b4_get_tile_rgba(ps, map, x, y, w, h, p);
       break;
    case PIPE_FORMAT_R5G6B5_UNORM:
-      r5g6b5_get_tile_rgba(ps, x, y, w, h, p);
+      r5g6b5_get_tile_rgba(ps, map, x, y, w, h, p);
       break;
    case PIPE_FORMAT_U_L8:
-      l8_get_tile_rgba(ps, x, y, w, h, p);
+      l8_get_tile_rgba(ps, map, x, y, w, h, p);
       break;
    case PIPE_FORMAT_U_A8:
-      a8_get_tile_rgba(ps, x, y, w, h, p);
+      a8_get_tile_rgba(ps, map, x, y, w, h, p);
       break;
    case PIPE_FORMAT_U_I8:
-      i8_get_tile_rgba(ps, x, y, w, h, p);
+      i8_get_tile_rgba(ps, map, x, y, w, h, p);
       break;
    case PIPE_FORMAT_U_A8_L8:
-      a8_l8_get_tile_rgba(ps, x, y, w, h, p);
+      a8_l8_get_tile_rgba(ps, map, x, y, w, h, p);
       break;
    case PIPE_FORMAT_R16G16B16A16_SNORM:
-      r16g16b16a16_get_tile_rgba(ps, x, y, w, h, p);
+      r16g16b16a16_get_tile_rgba(ps, map, x, y, w, h, p);
       break;
    case PIPE_FORMAT_Z16_UNORM:
-      z16_get_tile_rgba(ps, x, y, w, h, p);
+      z16_get_tile_rgba(ps, map, x, y, w, h, p);
       break;
    case PIPE_FORMAT_Z32_UNORM:
-      z32_get_tile_rgba(ps, x, y, w, h, p);
+      z32_get_tile_rgba(ps, map, x, y, w, h, p);
       break;
    case PIPE_FORMAT_S8Z24_UNORM:
-      s8z24_get_tile_rgba(ps, x, y, w, h, p);
+      s8z24_get_tile_rgba(ps, map, x, y, w, h, p);
       break;
    case PIPE_FORMAT_Z24S8_UNORM:
-      z24s8_get_tile_rgba(ps, x, y, w, h, p);
+      z24s8_get_tile_rgba(ps, map, x, y, w, h, p);
       break;
    default:
       assert(0);
    }
+
+   pipe_surface_unmap(ps);
 }
 
 
@@ -786,49 +808,53 @@ pipe_put_tile_rgba(struct pipe_context *pipe,
                    uint x, uint y, uint w, uint h,
                    const float *p)
 {
+   void *map = pipe_surface_map(ps);
+
    switch (ps->format) {
    case PIPE_FORMAT_A8R8G8B8_UNORM:
-      a8r8g8b8_put_tile_rgba(ps, x, y, w, h, p);
+      a8r8g8b8_put_tile_rgba(ps, map, x, y, w, h, p);
       break;
    case PIPE_FORMAT_B8G8R8A8_UNORM:
-      b8g8r8a8_put_tile_rgba(ps, x, y, w, h, p);
+      b8g8r8a8_put_tile_rgba(ps, map, x, y, w, h, p);
       break;
    case PIPE_FORMAT_A1R5G5B5_UNORM:
-      /*a1r5g5b5_put_tile_rgba(ps, x, y, w, h, p);*/
+      /*a1r5g5b5_put_tile_rgba(ps, map, x, y, w, h, p);*/
       break;
    case PIPE_FORMAT_R5G6B5_UNORM:
-      r5g5b5_put_tile_rgba(ps, x, y, w, h, p);
+      r5g5b5_put_tile_rgba(ps, map, x, y, w, h, p);
       break;
    case PIPE_FORMAT_R8G8B8A8_UNORM:
       break;
    case PIPE_FORMAT_U_L8:
-      /*l8_put_tile_rgba(ps, x, y, w, h, p);*/
+      /*l8_put_tile_rgba(ps, map, x, y, w, h, p);*/
       break;
    case PIPE_FORMAT_U_A8:
-      /*a8_put_tile_rgba(ps, x, y, w, h, p);*/
+      /*a8_put_tile_rgba(ps, map, x, y, w, h, p);*/
       break;
    case PIPE_FORMAT_U_I8:
-      /*i8_put_tile_rgba(ps, x, y, w, h, p);*/
+      /*i8_put_tile_rgba(ps, map, x, y, w, h, p);*/
       break;
    case PIPE_FORMAT_U_A8_L8:
-      /*a8_l8_put_tile_rgba(ps, x, y, w, h, p);*/
+      /*a8_l8_put_tile_rgba(ps, map, x, y, w, h, p);*/
       break;
    case PIPE_FORMAT_R16G16B16A16_SNORM:
-      r16g16b16a16_put_tile_rgba(ps, x, y, w, h, p);
+      r16g16b16a16_put_tile_rgba(ps, map, x, y, w, h, p);
       break;
    case PIPE_FORMAT_Z16_UNORM:
-      /*z16_put_tile_rgba(ps, x, y, w, h, p);*/
+      /*z16_put_tile_rgba(ps, map, x, y, w, h, p);*/
       break;
    case PIPE_FORMAT_Z32_UNORM:
-      /*z32_put_tile_rgba(ps, x, y, w, h, p);*/
+      /*z32_put_tile_rgba(ps, map, x, y, w, h, p);*/
       break;
    case PIPE_FORMAT_S8Z24_UNORM:
-      /*s8z24_put_tile_rgba(ps, x, y, w, h, p);*/
+      /*s8z24_put_tile_rgba(ps, map, x, y, w, h, p);*/
       break;
    case PIPE_FORMAT_Z24S8_UNORM:
-      /*z24s8_put_tile_rgba(ps, x, y, w, h, p);*/
+      /*z24s8_put_tile_rgba(ps, map, x, y, w, h, p);*/
       break;
    default:
       assert(0);
    }
+
+   pipe_surface_unmap(ps);
 }
index 168eba078434215606adf4ce216228a87d5f213e..03985eab5a60ebc883e21605368e3bdde73d33fe 100644 (file)
@@ -1247,22 +1247,11 @@ void XMesaCopySubBuffer( XMesaBuffer b, int x, int y, int width, int height )
 GLboolean XMesaGetDepthBuffer( XMesaBuffer b, GLint *width, GLint *height,
                                GLint *bytesPerValue, void **buffer )
 {
-   struct pipe_surface *surf
-      = st_get_framebuffer_surface(b->stfb, ST_SURFACE_DEPTH);
-   if (surf) {
-      *width = surf->width;
-      *height = surf->pitch;
-      *bytesPerValue = surf->cpp;
-      *buffer = surf->map;
-      return GL_TRUE;
-   }
-   else {
-      *width = 0;
-      *height = 0;
-      *bytesPerValue = 0;
-      *buffer = 0;
-      return GL_FALSE;
-   }
+   *width = 0;
+   *height = 0;
+   *bytesPerValue = 0;
+   *buffer = 0;
+   return GL_FALSE;
 }
 
 
index cf2e9db51cb410404f45c1a7c36f9d35ac3a51eb..73cd7db18dd4993103e38b3621a8c48daf9f0553 100644 (file)
@@ -59,6 +59,7 @@
 void
 st_clear_accum_buffer(GLcontext *ctx, struct gl_renderbuffer *rb)
 {
+   struct pipe_context *pipe = ctx->st->pipe;
    struct st_renderbuffer *acc_strb = st_renderbuffer(rb);
    struct pipe_surface *acc_ps = acc_strb->surface;
    const GLint xpos = ctx->DrawBuffer->_Xmin;
@@ -69,102 +70,17 @@ st_clear_accum_buffer(GLcontext *ctx, struct gl_renderbuffer *rb)
    const GLfloat g = ctx->Accum.ClearColor[1];
    const GLfloat b = ctx->Accum.ClearColor[2];
    const GLfloat a = ctx->Accum.ClearColor[3];
+   GLfloat *accBuf = (GLfloat *) malloc(width * height * 4 * sizeof(GLfloat));
+   int i;
 
-   (void) pipe_surface_map(acc_ps);
-
-   switch (acc_ps->format) {
-   case PIPE_FORMAT_R16G16B16A16_SNORM:
-      {
-         const short sr = (short) (32767 * r);
-         const short sg = (short) (32767 * g);
-         const short sb = (short) (32767 * b);
-         const short sa = (short) (32767 * a);
-         short *acc = ((short *) acc_ps->map)
-            + (ypos * acc_ps->pitch + xpos) * 4;
-         int i, j;
-         for (i = 0; i < height; i++) {
-            for (j = 0; j < width; j++) {
-               acc[j*4+0] = sr;
-               acc[j*4+1] = sg;
-               acc[j*4+2] = sb;
-               acc[j*4+3] = sa;
-            }
-            acc += acc_ps->pitch * 4;
-         }
-      }
-      break;
-   default:
-      assert(0);
+   for (i = 0; i < width * height; i++) {
+      accBuf[i*4+0] = r;
+      accBuf[i*4+1] = g;
+      accBuf[i*4+2] = b;
+      accBuf[i*4+3] = a;
    }
 
-   pipe_surface_unmap(acc_ps);
-}
-
-
-/** Get block of values from accum buffer, converting to float */
-static void
-get_accum_tile(struct pipe_context *pipe,
-               struct pipe_surface *acc_surf,
-               int xpos, int ypos, int width, int height,
-               float *buf)
-{
-   switch (acc_surf->format) {
-   case PIPE_FORMAT_R16G16B16A16_SNORM:
-      {
-         const short *acc = ((const short *) acc_surf->map)
-            + (ypos * acc_surf->pitch + xpos) * 4;
-         int i, j;
-         for (i = 0; i < height; i++) {
-            for (j = 0; j < width; j++) {
-               buf[j*4+0] = SHORT_TO_FLOAT(acc[j*4+0]);
-               buf[j*4+1] = SHORT_TO_FLOAT(acc[j*4+1]);
-               buf[j*4+2] = SHORT_TO_FLOAT(acc[j*4+2]);
-               buf[j*4+3] = SHORT_TO_FLOAT(acc[j*4+3]);
-            }
-            acc += acc_surf->pitch * 4;
-            buf += width * 4;
-         }
-      }
-      break;
-   default:
-      assert(0);
-   }
-}
-
-
-/** Put block of values into accum buffer, converting from float */
-static void
-put_accum_tile(struct pipe_context *pipe,
-               struct pipe_surface *acc_surf,
-               int xpos, int ypos, int width, int height,
-               const float *buf)
-{
-   switch (acc_surf->format) {
-   case PIPE_FORMAT_R16G16B16A16_SNORM:
-      {
-         short *acc = ((short *) acc_surf->map)
-            + (ypos * acc_surf->pitch + xpos) * 4;
-         int i, j;
-         for (i = 0; i < height; i++) {
-            for (j = 0; j < width; j++) {
-               short r, g, b, a;
-               UNCLAMPED_FLOAT_TO_SHORT(r, buf[j*4+0]);
-               UNCLAMPED_FLOAT_TO_SHORT(g, buf[j*4+1]);
-               UNCLAMPED_FLOAT_TO_SHORT(b, buf[j*4+2]);
-               UNCLAMPED_FLOAT_TO_SHORT(a, buf[j*4+3]);
-               acc[j*4+0] = r;
-               acc[j*4+1] = g;
-               acc[j*4+2] = b;
-               acc[j*4+3] = a;
-            }
-            acc += acc_surf->pitch * 4;
-            buf += width * 4;
-         }
-      }
-      break;
-   default:
-      assert(0);
-   }
+   pipe->put_tile_rgba(pipe, acc_ps, xpos, ypos, width, height, accBuf);
 }
 
 
@@ -179,19 +95,15 @@ accum_mad(struct pipe_context *pipe, GLfloat scale, GLfloat bias,
 
    accBuf = (GLfloat *) malloc(width * height * 4 * sizeof(GLfloat));
 
-   (void) pipe_surface_map(acc_ps);
-
-   get_accum_tile(pipe, acc_ps, xpos, ypos, width, height, accBuf);
+   pipe->get_tile_rgba(pipe, acc_ps, xpos, ypos, width, height, accBuf);
 
    for (i = 0; i < 4 * width * height; i++) {
       accBuf[i] = accBuf[i] * scale + bias;
    }
 
-   put_accum_tile(pipe, acc_ps, xpos, ypos, width, height, accBuf);
+   pipe->put_tile_rgba(pipe, acc_ps, xpos, ypos, width, height, accBuf);
 
    free(accBuf);
-
-   pipe_surface_unmap(acc_ps);
 }
 
 
@@ -201,30 +113,23 @@ accum_accum(struct pipe_context *pipe, GLfloat value,
             struct pipe_surface *acc_ps,
             struct pipe_surface *color_ps)
 {
-   ubyte *colorMap, *accMap;
    GLfloat *colorBuf, *accBuf;
    GLint i;
 
    colorBuf = (GLfloat *) malloc(width * height * 4 * sizeof(GLfloat));
    accBuf = (GLfloat *) malloc(width * height * 4 * sizeof(GLfloat));
 
-   colorMap = pipe_surface_map(color_ps);
-   accMap = pipe_surface_map(acc_ps);
-
    pipe->get_tile_rgba(pipe, color_ps, xpos, ypos, width, height, colorBuf);
-   get_accum_tile(pipe, acc_ps, xpos, ypos, width, height, accBuf);
+   pipe->get_tile_rgba(pipe, acc_ps, xpos, ypos, width, height, accBuf);
 
    for (i = 0; i < 4 * width * height; i++) {
       accBuf[i] = accBuf[i] + colorBuf[i] * value;
    }
 
-   put_accum_tile(pipe, acc_ps, xpos, ypos, width, height, accBuf);
+   pipe->put_tile_rgba(pipe, acc_ps, xpos, ypos, width, height, accBuf);
 
    free(colorBuf);
    free(accBuf);
-
-   pipe_surface_unmap(color_ps);
-   pipe_surface_unmap(acc_ps);
 }
 
 
@@ -239,21 +144,15 @@ accum_load(struct pipe_context *pipe, GLfloat value,
 
    buf = (GLfloat *) malloc(width * height * 4 * sizeof(GLfloat));
 
-   (void) pipe_surface_map(color_ps);
-   (void) pipe_surface_map(acc_ps);
-
    pipe->get_tile_rgba(pipe, color_ps, xpos, ypos, width, height, buf);
 
    for (i = 0; i < 4 * width * height; i++) {
       buf[i] = buf[i] * value;
    }
 
-   put_accum_tile(pipe, acc_ps, xpos, ypos, width, height, buf);
+   pipe->put_tile_rgba(pipe, acc_ps, xpos, ypos, width, height, buf);
 
    free(buf);
-
-   pipe_surface_unmap(color_ps);
-   pipe_surface_unmap(acc_ps);
 }
 
 
@@ -270,10 +169,7 @@ accum_return(GLcontext *ctx, GLfloat value,
 
    abuf = (GLfloat *) malloc(width * height * 4 * sizeof(GLfloat));
 
-   (void) pipe_surface_map(color_ps);
-   (void) pipe_surface_map(acc_ps);
-
-   get_accum_tile(pipe, acc_ps, xpos, ypos, width, height, abuf);
+   pipe->get_tile_rgba(pipe, acc_ps, xpos, ypos, width, height, abuf);
 
    if (!colormask[0] || !colormask[1] || !colormask[2] || !colormask[3]) {
       cbuf = (GLfloat *) malloc(width * height * 4 * sizeof(GLfloat));
@@ -297,9 +193,6 @@ accum_return(GLcontext *ctx, GLfloat value,
    free(abuf);
    if (cbuf)
       free(cbuf);
-
-   pipe_surface_unmap(color_ps);
-   pipe_surface_unmap(acc_ps);
 }
 
 
index 2db12c653b6adc4f3ae87fdbad8fe1d74c33c2a9..5ea2f08b8a3e0e3ef85ec8e49dbf8c0cc6f7bde4 100644 (file)
@@ -1261,15 +1261,9 @@ st_CopyPixels(GLcontext *ctx, GLint srcx, GLint srcy,
       /* alternate path using get/put_tile() */
       GLfloat *buf = (GLfloat *) malloc(width * height * 4 * sizeof(GLfloat));
 
-      (void) pipe_surface_map(psRead);
-      (void) pipe_surface_map(psTex);
-
       pipe->get_tile_rgba(pipe, psRead, srcx, srcy, width, height, buf);
       pipe->put_tile_rgba(pipe, psTex, 0, 0, width, height, buf);
 
-      pipe_surface_unmap(psRead);
-      pipe_surface_unmap(psTex);
-
       free(buf);
    }
 
index bc0f26ffb052e456b272eddf3a2b781c1dedf321..2d6b3fc749b3f814487506430878ab9c19361d94 100644 (file)
@@ -97,9 +97,6 @@ st_renderbuffer_alloc_storage(GLcontext * ctx, struct gl_renderbuffer *rb,
          return GL_FALSE;
    }
 
-   /* loop here since mapping is refcounted */
-   while (strb->surface->map)
-      pipe_surface_unmap(strb->surface);
    if (strb->surface->buffer)
       pipe->winsys->buffer_reference(pipe->winsys, &strb->surface->buffer,
                                     NULL);
index b0c9275c6f882649fcbfbc50376726420e9a086a..585fe04dee8c058675c23ad5c103233447a9d43b 100644 (file)
@@ -179,8 +179,6 @@ st_readpixels(GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height,
    if (!strb)
       return;
 
-   pipe_surface_map(strb->surface);
-
    if (format == GL_RGBA && type == GL_FLOAT) {
       /* write tile(row) directly into user's buffer */
       df = (GLfloat *) _mesa_image_address2d(&clippedPacking, dest, width,
@@ -229,8 +227,6 @@ st_readpixels(GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height,
          }
       }
    }
-
-   pipe_surface_unmap(strb->surface);
 }
 
 
index 773fc0012e29e6b88e81792f6d52dfcbc3622053..19274570a1c3e7d18334497ab702ae0eb959940c 100644 (file)
@@ -1063,15 +1063,13 @@ fallback_copy_texsubimage(GLcontext *ctx,
    dest_surf = pipe->get_tex_surface(pipe, pt,
                                     face, level, destZ);
 
-   (void) pipe_surface_map(dest_surf);
-   (void) pipe_surface_map(src_surf);
-
    /* buffer for one row */
    data = (GLfloat *) malloc(width * 4 * sizeof(GLfloat));
 
    /* do copy row by row */
    for (row = 0; row < height; row++) {
-      pipe->get_tile_rgba(pipe, src_surf, srcX, srcY + row, width, 1, data);
+      pipe->get_tile_rgba(pipe, src_surf, srcX, srcY + row, width, 1,
+                         data);
 
       /* XXX we're ignoring convolution for now */
       if (ctx->_ImageTransferState) {
@@ -1080,14 +1078,11 @@ fallback_copy_texsubimage(GLcontext *ctx,
                             width, (GLfloat (*)[4])data);
       }
 
-      pipe->put_tile_rgba(pipe, dest_surf, destX, destY, width, 1, data);
+      pipe->put_tile_rgba(pipe, dest_surf, destX, destY, width, 1,
+                         data);
       destY += yStep;
    }
 
-
-   (void) pipe_surface_unmap(dest_surf);
-   (void) pipe_surface_unmap(src_surf);
-
    free(data);
 }