Eliminate struct pipe_region.
authorMichel Dänzer <michel@tungstengraphics.com>
Fri, 7 Dec 2007 11:30:35 +0000 (12:30 +0100)
committerBen Skeggs <skeggsb@gmail.com>
Sun, 9 Dec 2007 01:05:26 +0000 (12:05 +1100)
Directly use struct pipe_buffer_handle for storage and struct pipe_surface for
(un)mapping.

38 files changed:
src/mesa/drivers/dri/intel_winsys/intel_swapbuffers.c
src/mesa/drivers/dri/intel_winsys/intel_winsys_pipe.c
src/mesa/pipe/failover/fo_context.c
src/mesa/pipe/i915simple/Makefile
src/mesa/pipe/i915simple/i915_context.c
src/mesa/pipe/i915simple/i915_context.h
src/mesa/pipe/i915simple/i915_regions.c [deleted file]
src/mesa/pipe/i915simple/i915_state_emit.c
src/mesa/pipe/i915simple/i915_surface.c
src/mesa/pipe/i915simple/i915_texture.c
src/mesa/pipe/p_context.h
src/mesa/pipe/p_inlines.h
src/mesa/pipe/p_state.h
src/mesa/pipe/softpipe/Makefile
src/mesa/pipe/softpipe/sp_clear.c
src/mesa/pipe/softpipe/sp_context.c
src/mesa/pipe/softpipe/sp_draw_arrays.c
src/mesa/pipe/softpipe/sp_region.c [deleted file]
src/mesa/pipe/softpipe/sp_region.h [deleted file]
src/mesa/pipe/softpipe/sp_state.h
src/mesa/pipe/softpipe/sp_state_surface.c
src/mesa/pipe/softpipe/sp_surface.c
src/mesa/pipe/softpipe/sp_texture.c
src/mesa/pipe/softpipe/sp_tile_cache.c
src/mesa/pipe/softpipe/sp_tile_cache.h
src/mesa/pipe/xlib/xm_api.c
src/mesa/pipe/xlib/xm_buffer.c
src/mesa/pipe/xlib/xm_surface.c
src/mesa/pipe/xlib/xm_winsys.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
src/mesa/state_tracker/st_context.c
src/mesa/state_tracker/st_context.h
src/mesa/state_tracker/st_texture.c
src/mesa/state_tracker/st_texture.h

index f96209d1b06ba888a0083236850a3aace38f844e..454cd71f6c0f98211864a2adfdeb05a112b08d94 100644 (file)
@@ -88,12 +88,11 @@ intelDisplaySurface(__DRIdrawablePrivate *dPriv,
       const drm_clip_rect_t *pbox = dPriv->pClipRects;
       const int pitch = intelScreen->front.pitch / intelScreen->front.cpp;
       const int cpp = intelScreen->front.cpp;
-      const struct pipe_region *srcRegion = surf->region;
       const int srcpitch = surf->pitch;
       int BR13, CMD;
       int i;
 
-      ASSERT(srcRegion);
+      ASSERT(surf->buffer);
       ASSERT(surf->cpp == cpp);
 
       DBG(SWAP, "screen pitch %d  src surface pitch %d\n",
@@ -159,7 +158,7 @@ intelDisplaySurface(__DRIdrawablePrivate *dPriv,
          assert(box.x1 < box.x2);
          assert(box.y1 < box.y2);
 
-         /* XXX this could be done with pipe->region_copy() */
+         /* XXX this could be done with pipe->surface_copy() */
         BEGIN_BATCH(8, INTEL_BATCH_NO_CLIPRECTS);
         OUT_BATCH(CMD);
         OUT_BATCH(BR13);
@@ -171,7 +170,7 @@ intelDisplaySurface(__DRIdrawablePrivate *dPriv,
                   DRM_BO_MASK_MEM | DRM_BO_FLAG_WRITE, 0);
         OUT_BATCH((sbox.y1 << 16) | sbox.x1);
         OUT_BATCH((srcpitch * cpp) & 0xffff);
-        OUT_RELOC(dri_bo(srcRegion->buffer),
+        OUT_RELOC(dri_bo(surf->buffer),
                    DRM_BO_FLAG_MEM_TT | DRM_BO_FLAG_READ,
                   DRM_BO_MASK_MEM | DRM_BO_FLAG_READ, 0);
 
index 7b3aa9948241613abb3bc3eac89bd191ef132e1d..1b71d0ac107e876918af56e20e4f4c1932dfd03a 100644 (file)
@@ -135,13 +135,12 @@ static void intel_buffer_get_subdata(struct pipe_winsys *winsys,
  * for all buffers.
  */
 static struct pipe_buffer_handle *
-intel_buffer_create(struct pipe_winsys *winsys, 
-                   unsigned alignment)
+intel_buffer_create(struct pipe_winsys *winsys, unsigned flags)
 {
    struct _DriBufferObject *buffer;
    struct intel_pipe_winsys *iws = intel_pipe_winsys(winsys);
    driGenBuffers( iws->regionPool, 
-                 "pipe buffer", 1, &buffer, alignment, 0, 0 );
+                 "pipe buffer", 1, &buffer, 64, 0, 0 );
    return pipe_bo(buffer);
 }
 
@@ -193,46 +192,6 @@ intel_i915_surface_pitch(struct pipe_winsys *winsys,
 }
 
 
-static struct pipe_region *
-intel_i915_region_alloc(struct pipe_winsys *winsys,
-                        unsigned size, unsigned flags)
-{
-   struct pipe_region *region = calloc(sizeof(*region), 1);
-   const unsigned alignment = 64;
-
-   region->refcount = 1;
-
-   region->buffer = winsys->buffer_create( winsys, alignment );
-
-   winsys->buffer_data( winsys,
-                        region->buffer, 
-                        size, 
-                        NULL,
-                        PIPE_BUFFER_USAGE_PIXEL );
-
-   return region;
-}
-
-static void
-intel_i915_region_release(struct pipe_winsys *winsys,
-                          struct pipe_region **region)
-{
-   if (!*region)
-      return;
-
-   assert((*region)->refcount > 0);
-   (*region)->refcount--;
-
-   if ((*region)->refcount == 0) {
-      assert((*region)->map_refcount == 0);
-
-      winsys->buffer_reference( winsys, &((*region)->buffer), NULL );
-      free(*region);
-   }
-   *region = NULL;
-}
-
-
 static struct pipe_surface *
 intel_i915_surface_alloc(struct pipe_winsys *winsys, unsigned format)
 {
@@ -252,8 +211,8 @@ intel_i915_surface_release(struct pipe_winsys *winsys, struct pipe_surface **s)
    struct pipe_surface *surf = *s;
    surf->refcount--;
    if (surf->refcount == 0) {
-      if (surf->region)
-         winsys->region_release(winsys, &surf->region);
+      if (surf->buffer)
+        winsys->buffer_reference(winsys, &surf->buffer, NULL);
       free(surf);
    }
    *s = NULL;
@@ -300,8 +259,6 @@ intel_create_pipe_winsys( int fd )
    iws->winsys.flush_frontbuffer = intel_flush_frontbuffer;
    iws->winsys.printf = intel_printf;
    iws->winsys.get_name = intel_get_name;
-   iws->winsys.region_alloc = intel_i915_region_alloc;
-   iws->winsys.region_release = intel_i915_region_release;
    iws->winsys.surface_pitch = intel_i915_surface_pitch;
    iws->winsys.surface_alloc = intel_i915_surface_alloc;
    iws->winsys.surface_release = intel_i915_surface_release;
index a25563d4511cc43cfb1feeb63d11c3447b1e2bde..a1291f583b00d12dd03049f2fc692165a31975e2 100644 (file)
@@ -140,8 +140,6 @@ struct pipe_context *failover_create( struct pipe_context *hw,
 #endif
    failover->pipe.get_tex_surface = hw->get_tex_surface;
 
-   failover->pipe.region_map = hw->region_map;
-   failover->pipe.region_unmap = hw->region_unmap;
    failover->pipe.surface_data = hw->surface_data;
    failover->pipe.surface_copy = hw->surface_copy;
    failover->pipe.surface_fill = hw->surface_fill;
index 1223b386a3dbb2e0aa7877607e8b87cb5869b33b..2f91de3afc68d0844f7daffde7172bf8876c91fa 100644 (file)
@@ -12,7 +12,6 @@ DRIVER_SOURCES = \
        i915_context.c \
        i915_debug.c \
        i915_debug_fp.c \
-       i915_regions.c \
        i915_state.c \
        i915_state_immediate.c \
        i915_state_dynamic.c \
index 94649231cf3bba22bfee3adce99c7e22c0db06c1..07b331c52885e13aaca5567fe227ce9e4df657c6 100644 (file)
@@ -348,7 +348,6 @@ struct pipe_context *i915_create( struct pipe_winsys *pipe_winsys,
       draw_set_rasterize_stage(i915->draw, i915_draw_render_stage(i915));
    }
 
-   i915_init_region_functions(i915);
    i915_init_surface_functions(i915);
    i915_init_state_functions(i915);
    i915_init_flush_functions(i915);
index 8ed3465be234f79be813901594d9a71cf635d3f7..dbf0c885cc8f6e35c1eb82bb1e14e6ecc2735018 100644 (file)
@@ -175,7 +175,7 @@ struct i915_texture {
 
    /* The data is held here:
     */
-   struct pipe_region *region;
+   struct pipe_buffer_handle *buffer;
 };
 
 struct i915_context
@@ -289,10 +289,10 @@ void i915_clear(struct pipe_context *pipe, struct pipe_surface *ps,
 
 
 /***********************************************************************
- * i915_region.c: 
+ * i915_surface.c: 
  */
-void i915_init_region_functions( struct i915_context *i915 );
 void i915_init_surface_functions( struct i915_context *i915 );
+
 void i915_init_state_functions( struct i915_context *i915 );
 void i915_init_flush_functions( struct i915_context *i915 );
 void i915_init_string_functions( struct i915_context *i915 );
diff --git a/src/mesa/pipe/i915simple/i915_regions.c b/src/mesa/pipe/i915simple/i915_regions.c
deleted file mode 100644 (file)
index 82fdec8..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-/**************************************************************************
- * 
- * Copyright 2006 Tungsten Graphics, Inc., Cedar Park, Texas.
- * All Rights Reserved.
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- * 
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- * 
- **************************************************************************/
-
-/* Provide additional functionality on top of bufmgr buffers:
- *   - 2d semantics and blit operations (XXX: remove/simplify blits??)
- *   - refcounting of buffers for multiple images in a buffer.
- *   - refcounting of buffer mappings.
- */
-
-#include "pipe/p_defines.h"
-#include "pipe/p_winsys.h"
-#include "i915_context.h"
-
-
-
-
-static ubyte *
-i915_region_map(struct pipe_context *pipe, struct pipe_region *region)
-{
-   struct i915_context *i915 = i915_context( pipe );
-
-   if (!region->map_refcount++) {
-      region->map = i915->pipe.winsys->buffer_map( i915->pipe.winsys,
-                                                  region->buffer,
-                                                  PIPE_BUFFER_FLAG_WRITE | 
-                                                  PIPE_BUFFER_FLAG_READ);
-   }
-
-   return region->map;
-}
-
-static void
-i915_region_unmap(struct pipe_context *pipe, struct pipe_region *region)
-{
-   struct i915_context *i915 = i915_context( pipe );
-
-   if (region->map_refcount > 0) {
-      assert(region->map);
-      if (!--region->map_refcount) {
-         i915->pipe.winsys->buffer_unmap( i915->pipe.winsys,
-                                          region->buffer );
-         region->map = NULL;
-      }
-   }
-}
-
-
-void
-i915_init_region_functions(struct i915_context *i915)
-{
-   i915->pipe.region_map = i915_region_map;
-   i915->pipe.region_unmap = i915_region_unmap;
-}
-
index 900a91d8963fb562099d12800211e433af003ffd..eda40d7c76c67526ac011e1f1535a7992c43554b 100644 (file)
@@ -220,7 +220,7 @@ i915_emit_hardware_state(struct i915_context *i915 )
                   BUF_3D_PITCH(pitch) |  /* pitch in bytes */
                   BUF_3D_USE_FENCE);
 
-        OUT_RELOC(cbuf_surface->region->buffer,
+        OUT_RELOC(cbuf_surface->buffer,
                   I915_BUFFER_ACCESS_WRITE,
                   0);
       }
@@ -236,7 +236,7 @@ i915_emit_hardware_state(struct i915_context *i915 )
                   BUF_3D_PITCH(zpitch) |  /* pitch in bytes */
                   BUF_3D_USE_FENCE);
 
-        OUT_RELOC(depth_surface->region->buffer,
+        OUT_RELOC(depth_surface->buffer,
                   I915_BUFFER_ACCESS_WRITE,
                   0);
       }
@@ -284,7 +284,7 @@ i915_emit_hardware_state(struct i915_context *i915 )
             for (unit = 0; unit < I915_TEX_UNITS; unit++) {
                if (enabled & (1 << unit)) {
                   struct pipe_buffer_handle *buf =
-                     i915->texture[unit]->region->buffer;
+                     i915->texture[unit]->buffer;
                   uint offset = 0;
                   assert(buf);
 
index 385202507db4cf32992d52785bbb3d3985071136..ecbabe50eb55adb77034d31a397b53727bbf69ca 100644 (file)
@@ -29,6 +29,7 @@
 #include "i915_blit.h"
 #include "i915_state.h"
 #include "pipe/p_defines.h"
+#include "pipe/p_inlines.h"
 #include "pipe/p_util.h"
 #include "pipe/p_inlines.h"
 #include "pipe/p_winsys.h"
@@ -57,7 +58,7 @@ i915_get_tile_rgba(struct pipe_context *pipe,
                    uint x, uint y, uint w, uint h, float *p)
 {
    const unsigned *src
-      = ((const unsigned *) (ps->region->map + ps->offset))
+      = ((const unsigned *) (ps->map))
       + y * ps->pitch + x;
    unsigned i, j;
    unsigned w0 = w;
@@ -129,7 +130,7 @@ i915_get_tile(struct pipe_context *pipe,
    ubyte *pDest;
    uint i;
 
-   assert(ps->region->map);
+   assert(ps->map);
 
    CLIP_TILE;
 
@@ -137,7 +138,7 @@ i915_get_tile(struct pipe_context *pipe,
       dst_stride = w0 * cpp;
    }
 
-   pSrc = ps->region->map + ps->offset + (y * ps->pitch + x) * cpp;
+   pSrc = ps->map + (y * ps->pitch + x) * cpp;
    pDest = (ubyte *) p;
 
    for (i = 0; i < h; i++) {
@@ -163,7 +164,7 @@ i915_put_tile(struct pipe_context *pipe,
    ubyte *pDest;
    uint i;
 
-   assert(ps->region->map);
+   assert(ps->map);
 
    CLIP_TILE;
 
@@ -172,7 +173,7 @@ i915_put_tile(struct pipe_context *pipe,
    }
 
    pSrc = (const ubyte *) p;
-   pDest = ps->region->map + ps->offset + (y * ps->pitch + x) * cpp;
+   pDest = ps->map + (y * ps->pitch + x) * cpp;
 
    for (i = 0; i < h; i++) {
       memcpy(pDest, pSrc, w0 * cpp);
@@ -211,7 +212,7 @@ i915_get_tex_surface(struct pipe_context *pipe,
    if (ps) {
       assert(ps->format);
       assert(ps->refcount);
-      pipe_region_reference(&ps->region, tex->region);
+      pipe->winsys->buffer_reference(pipe->winsys, &ps->buffer, tex->buffer);
       ps->cpp = pt->cpp;
       ps->width = pt->width[level];
       ps->height = pt->height[level];
@@ -274,12 +275,12 @@ i915_surface_data(struct pipe_context *pipe,
                  const void *src, unsigned src_pitch,
                  unsigned srcx, unsigned srcy, unsigned width, unsigned height)
 {
-   _mesa_copy_rect(pipe->region_map(pipe, dst->region) + dst->offset,
+   _mesa_copy_rect(pipe_surface_map(dst),
                    dst->cpp,
                    dst->pitch,
                    dstx, dsty, width, height, src, src_pitch, srcx, srcy);
 
-   pipe->region_unmap(pipe, dst->region);
+   pipe_surface_unmap(dst);
 }
 
 
@@ -297,23 +298,23 @@ i915_surface_copy(struct pipe_context *pipe,
    assert( dst->cpp == src->cpp );
 
    if (0) {
-      _mesa_copy_rect(pipe->region_map(pipe, dst->region) + dst->offset,
+      _mesa_copy_rect(pipe_surface_map(dst),
                      dst->cpp,
                      dst->pitch,
                      dstx, dsty, 
                      width, height, 
-                     pipe->region_map(pipe, src->region) + src->offset
+                     pipe_surface_map(src)
                      src->pitch, 
                      srcx, srcy);
 
-      pipe->region_unmap(pipe, src->region);
-      pipe->region_unmap(pipe, dst->region);
+      pipe_surface_unmap(src);
+      pipe_surface_unmap(dst);
    }
    else {
       i915_copy_blit( i915_context(pipe),
                      dst->cpp,
-                     (short) src->pitch, src->region->buffer, src->offset,
-                     (short) dst->pitch, dst->region->buffer, dst->offset,
+                     (short) src->pitch, src->buffer, src->offset,
+                     (short) dst->pitch, dst->buffer, dst->offset,
                      (short) srcx, (short) srcy, (short) dstx, (short) dsty, (short) width, (short) height );
    }
 }
@@ -324,7 +325,7 @@ i915_surface_copy(struct pipe_context *pipe,
 static ubyte *
 get_pointer(struct pipe_surface *dst, unsigned x, unsigned y)
 {
-   return dst->region->map + (y * dst->pitch + x) * dst->cpp;
+   return dst->map + (y * dst->pitch + x) * dst->cpp;
 }
 
 
@@ -337,7 +338,7 @@ i915_surface_fill(struct pipe_context *pipe,
    if (0) {
       unsigned i, j;
 
-      (void)pipe->region_map(pipe, dst->region);
+      (void)pipe_surface_map(dst);
 
       switch (dst->cpp) {
       case 1: {
@@ -375,7 +376,7 @@ i915_surface_fill(struct pipe_context *pipe,
       i915_fill_blit( i915_context(pipe),
                      dst->cpp,
                      (short) dst->pitch, 
-                     dst->region->buffer, dst->offset,
+                     dst->buffer, dst->offset,
                      (short) dstx, (short) dsty, 
                      (short) width, (short) height, 
                      value );
index 3bfa806d9eca7dc403cfe3ac84c31ad8065e865c..1ca2815dfb988fa7d9c857949da1f0c914723ddc 100644 (file)
@@ -33,6 +33,7 @@
 #include "pipe/p_state.h"
 #include "pipe/p_context.h"
 #include "pipe/p_defines.h"
+#include "pipe/p_inlines.h"
 #include "pipe/p_util.h"
 #include "pipe/p_winsys.h"
 
@@ -494,13 +495,17 @@ i915_texture_create(struct pipe_context *pipe, struct pipe_texture **pt)
 
       if (i915->flags.is_i945 ? i945_miptree_layout(pipe, tex) :
          i915_miptree_layout(pipe, tex)) {
-        tex->region = pipe->winsys->region_alloc(pipe->winsys,
-                                                 tex->pitch * tex->base.cpp *
-                                                 tex->total_height,
-                                                 PIPE_SURFACE_FLAG_TEXTURE);
+        tex->buffer = pipe->winsys->buffer_create(pipe->winsys,
+                                                  PIPE_SURFACE_FLAG_TEXTURE);
+
+        if (tex->buffer)
+           pipe->winsys->buffer_data(pipe->winsys, tex->buffer,
+                                     tex->pitch * tex->base.cpp *
+                                     tex->total_height, NULL,
+                                     PIPE_BUFFER_USAGE_PIXEL);
       }
 
-      if (!tex->region) {
+      if (!tex->buffer) {
         FREE(tex);
         tex = NULL;
       }
@@ -527,7 +532,7 @@ i915_texture_release(struct pipe_context *pipe, struct pipe_texture **pt)
       DBG("%s deleting %p\n", __FUNCTION__, (void *) tex);
       */
 
-      pipe->winsys->region_release(pipe->winsys, &tex->region);
+      pipe->winsys->buffer_reference(pipe->winsys, &tex->buffer, NULL);
 
       for (i = 0; i < PIPE_MAX_TEXTURE_LEVELS; i++)
          if (tex->image_offset[i])
index 5033209323feb5cd18014321a541d96dd11189d6..2420d02213ff7868a48a03079819432458561aaf 100644 (file)
@@ -37,7 +37,7 @@ struct pipe_state_cache;
  * Gallium rendering context.  Basically:
  *  - state setting functions
  *  - VBO drawing functions
- *  - memory region function
+ *  - surface functions
  *  - device queries
  */
 struct pipe_context {
@@ -201,14 +201,6 @@ struct pipe_context {
                          uint x, uint y, uint w, uint h, const float *p);
 
 
-   /*
-    * Memory region functions
-    */
-   ubyte *(*region_map)(struct pipe_context *pipe, struct pipe_region *r);
-
-   void (*region_unmap)(struct pipe_context *pipe, struct pipe_region *r);
-
-
    /*
     * Surface functions
     */
index c04d46dddd8a956aa1bba810d894aeaab7da86f4..1697284b049045464bf6dcded780ae65b525926b 100644 (file)
 #define P_INLINES_H
 
 #include "p_context.h"
+#include "p_defines.h"
 #include "p_winsys.h"
 
 
-/**
- * Set 'ptr' to point to 'region' and update reference counting.
- * The old thing pointed to, if any, will be unreferenced first.
- * 'region' may be NULL.
- */
+static INLINE ubyte *
+pipe_surface_map(struct pipe_surface *surface)
+{
+   if (!surface->map_refcount++) {
+      surface->map = surface->winsys->buffer_map( surface->winsys,
+                                                 surface->buffer,
+                                                 PIPE_BUFFER_FLAG_WRITE | 
+                                                 PIPE_BUFFER_FLAG_READ )
+                  + surface->offset;
+   }
+
+   return surface->map;
+}
+
 static INLINE void
-pipe_region_reference(struct pipe_region **ptr, struct pipe_region *region)
+pipe_surface_unmap(struct pipe_surface *surface)
 {
-   assert(ptr);
-   if (*ptr) {
-      /* unreference the old thing */
-      struct pipe_region *oldReg = *ptr;
-      assert(oldReg->refcount > 0);
-      oldReg->refcount--;
-      if (oldReg->refcount == 0) {
-         /* free the old region */
-         assert(oldReg->map_refcount == 0);
-         /* XXX dereference the region->buffer */
-         FREE( oldReg );
+   if (surface->map_refcount > 0) {
+      assert(surface->map);
+      if (!--surface->map_refcount) {
+         surface->winsys->buffer_unmap( surface->winsys,
+                                       surface->buffer );
+         surface->map = NULL;
       }
-      *ptr = NULL;
-   }
-   if (region) {
-      /* reference the new thing */
-      region->refcount++;
-      *ptr = region;
    }
 }
 
+
 /**
- * \sa pipe_region_reference
+ * Set 'ptr' to point to 'surf' and update reference counting.
+ * The old thing pointed to, if any, will be unreferenced first.
+ * 'surf' may be NULL.
  */
 static INLINE void
 pipe_surface_reference(struct pipe_surface **ptr, struct pipe_surface *surf)
@@ -82,7 +84,7 @@ pipe_surface_reference(struct pipe_surface **ptr, struct pipe_surface *surf)
 
 
 /**
- * \sa pipe_region_reference
+ * \sa pipe_surface_reference
  */
 static INLINE void
 pipe_texture_reference(struct pipe_context *pipe, struct pipe_texture **ptr,
@@ -100,4 +102,5 @@ pipe_texture_reference(struct pipe_context *pipe, struct pipe_texture **ptr,
    }
 }
 
+
 #endif /* P_INLINES_H */
index 077a8f5a06ff58eecab2c49cbc465c8d96d44a70..44dec9b77326d4b3dcb7983e2445683104d4f0e4 100644 (file)
@@ -256,32 +256,20 @@ struct pipe_sampler_state
 };
 
 
-/***
- *** Resource Objects
- ***/
-
-struct pipe_region
-{
-   struct pipe_buffer_handle *buffer; /**< driver private buffer handle */
-
-   unsigned refcount; /**< Reference count for region */
-   ubyte *map;    /**< only non-NULL when region is actually mapped */
-   unsigned map_refcount;  /**< Reference count for mapping */
-};
-
-
 /**
- * 2D surface.  This is basically a view into a pipe_region (memory buffer).
+ * 2D surface.  This is basically a view into a memory buffer.
  * May be a renderbuffer, texture mipmap level, etc.
  */
 struct pipe_surface
 {
-   struct pipe_region *region;
+   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 */
    unsigned format;              /**< PIPE_FORMAT_x */
    unsigned cpp;                 /**< bytes per pixel */
    unsigned width, height;
    unsigned pitch;               /**< in pixels */
-   unsigned offset;              /**< offset from start of region, in bytes */
+   unsigned offset;              /**< offset from start of buffer, in bytes */
    unsigned refcount;
    struct pipe_winsys *winsys;   /**< winsys which owns/created the surface */
 };
index 9978884c9bd5983e07fc1d294e7fbdade0c7a16d..647cc05373b44316f90b41f10f7501be9a98e940 100644 (file)
@@ -24,7 +24,6 @@ DRIVER_SOURCES = \
        sp_quad_output.c \
        sp_quad_stencil.c \
        sp_quad_stipple.c \
-       sp_region.c \
        sp_state_blend.c \
        sp_state_clip.c \
        sp_state_derived.c \
index a4276362b99b0b1b60db51b0b8f5feae8d38a99c..496b38fd5f12b82ef5449823ebd0945286a80da5 100644 (file)
@@ -50,12 +50,12 @@ softpipe_clear(struct pipe_context *pipe, struct pipe_surface *ps,
 
    softpipe_update_derived(softpipe); /* not needed?? */
 
-   if (ps == sp_tile_cache_get_surface(softpipe->zbuf_cache)) {
+   if (ps == sp_tile_cache_get_surface(softpipe, softpipe->zbuf_cache)) {
       float clear[4];
       clear[0] = 1.0; /* XXX hack */
       sp_tile_cache_clear(softpipe->zbuf_cache, clear);
    }
-   else if (ps == sp_tile_cache_get_surface(softpipe->cbuf_cache[0])) {
+   else if (ps == sp_tile_cache_get_surface(softpipe, softpipe->cbuf_cache[0])) {
       float clear[4];
       clear[0] = 0.2f; /* XXX hack */
       clear[1] = 0.2f; /* XXX hack */
index 7a9fccce9ae3ad699df14f8283b6a589fbd21cbb..f7f0316cf2a32061a743352fc76dcf2a16481517 100644 (file)
 
 #include "pipe/draw/draw_context.h"
 #include "pipe/p_defines.h"
+#include "pipe/p_inlines.h"
 #include "pipe/p_util.h"
 #include "sp_clear.h"
 #include "sp_context.h"
 #include "sp_flush.h"
 #include "sp_prim_setup.h"
-#include "sp_region.h"
 #include "sp_state.h"
 #include "sp_surface.h"
 #include "sp_tile_cache.h"
@@ -65,44 +65,22 @@ softpipe_is_format_supported( struct pipe_context *pipe, uint format )
 void
 softpipe_map_surfaces(struct softpipe_context *sp)
 {
-   struct pipe_context *pipe = &sp->pipe;
+   struct pipe_surface *ps;
    unsigned i;
 
    for (i = 0; i < sp->framebuffer.num_cbufs; i++) {
-      struct pipe_surface *ps = sp->framebuffer.cbufs[i];
-      if (ps->region && !ps->region->map) {
-         pipe->region_map(pipe, ps->region);
-      }
+      ps = sp->framebuffer.cbufs[i];
+      if (ps->buffer)
+         pipe_surface_map(ps);
    }
 
-   if (sp->framebuffer.zbuf) {
-      struct pipe_surface *ps = sp->framebuffer.zbuf;
-      if (ps->region && !ps->region->map) {
-         pipe->region_map(pipe, ps->region);
-      }
-   }
-
-   if (sp->framebuffer.sbuf) {
-      struct pipe_surface *ps = sp->framebuffer.sbuf;
-      if (ps->region && !ps->region->map) {
-         pipe->region_map(pipe, ps->region);
-      }
-   }
-}
-
+   ps = sp->framebuffer.zbuf;
+   if (ps && ps->buffer)
+      pipe_surface_map(ps);
 
-void
-softpipe_map_texture_surfaces(struct softpipe_context *sp)
-{
-   struct pipe_context *pipe = &sp->pipe;
-   uint i;
-
-   for (i = 0; i < PIPE_MAX_SAMPLERS; i++) {
-      struct softpipe_texture *spt = sp->texture[i];
-      if (spt) {
-         pipe->region_map(pipe, spt->region);
-      }
-   }
+   ps = sp->framebuffer.sbuf;
+   if (ps && ps->buffer)
+      pipe_surface_map(ps);
 }
 
 
@@ -112,7 +90,7 @@ softpipe_map_texture_surfaces(struct softpipe_context *sp)
 void
 softpipe_unmap_surfaces(struct softpipe_context *sp)
 {
-   struct pipe_context *pipe = &sp->pipe;
+   struct pipe_surface *ps;
    uint i;
 
    for (i = 0; i < PIPE_MAX_COLOR_BUFS; i++)
@@ -121,36 +99,18 @@ softpipe_unmap_surfaces(struct softpipe_context *sp)
    sp_flush_tile_cache(sp, sp->sbuf_cache);
 
    for (i = 0; i < sp->framebuffer.num_cbufs; i++) {
-      struct pipe_surface *ps = sp->framebuffer.cbufs[i];
-      if (ps->region)
-         pipe->region_unmap(pipe, ps->region);
+      ps = sp->framebuffer.cbufs[i];
+      if (ps->map)
+         pipe_surface_unmap(ps);
    }
 
-   if (sp->framebuffer.zbuf) {
-      struct pipe_surface *ps = sp->framebuffer.zbuf;
-      if (ps->region)
-         pipe->region_unmap(pipe, ps->region);
-   }
-
-   if (sp->framebuffer.sbuf && sp->framebuffer.sbuf != sp->framebuffer.zbuf) {
-      struct pipe_surface *ps = sp->framebuffer.sbuf;
-      if (ps->region)
-         pipe->region_unmap(pipe, ps->region);
-   }
-}
-
+   ps = sp->framebuffer.zbuf;
+   if (ps && ps->map)
+      pipe_surface_unmap(ps);
 
-void
-softpipe_unmap_texture_surfaces(struct softpipe_context *sp)
-{
-   struct pipe_context *pipe = &sp->pipe;
-   uint i;
-   for (i = 0; i < PIPE_MAX_SAMPLERS; i++) {
-      struct softpipe_texture *spt = sp->texture[i];
-      if (spt) {
-         pipe->region_unmap(pipe, spt->region);
-      }
-   }
+   ps = sp->framebuffer.sbuf;
+   if (ps && ps->map)
+      pipe_surface_unmap(ps);
 }
 
 
@@ -403,8 +363,6 @@ struct pipe_context *softpipe_create( struct pipe_winsys *pipe_winsys,
       draw_set_rasterize_stage(softpipe->draw, softpipe->setup);
    }
 
-
-   sp_init_region_functions(softpipe);
    sp_init_surface_functions(softpipe);
 
    return &softpipe->pipe;
index 8a82cdfe1a9ef70f002c98f1af13a76e317c5b41..93eb68405dbd109b603fbd51e14488de3f41a832 100644 (file)
@@ -112,7 +112,6 @@ softpipe_draw_elements(struct pipe_context *pipe,
       softpipe_update_derived( sp );
 
    softpipe_map_surfaces(sp);
-   softpipe_map_texture_surfaces(sp);
    softpipe_map_constant_buffers(sp);
 
    /*
@@ -184,7 +183,6 @@ softpipe_draw_elements(struct pipe_context *pipe,
 
 
    /* Note: leave drawing surfaces mapped */
-   softpipe_unmap_texture_surfaces(sp);
    softpipe_unmap_constant_buffers(sp);
 
    return TRUE;
diff --git a/src/mesa/pipe/softpipe/sp_region.c b/src/mesa/pipe/softpipe/sp_region.c
deleted file mode 100644 (file)
index 58dc6bb..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-/**************************************************************************
- * 
- * Copyright 2006 Tungsten Graphics, Inc., Cedar Park, Texas.
- * All Rights Reserved.
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- * 
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- * 
- **************************************************************************/
-
-/* Provide additional functionality on top of bufmgr buffers:
- *   - 2d semantics and blit operations (XXX: remove/simplify blits??)
- *   - refcounting of buffers for multiple images in a buffer.
- *   - refcounting of buffer mappings.
- */
-
-#include "sp_context.h"
-#include "sp_region.h"
-#include "pipe/p_util.h"
-#include "pipe/p_winsys.h"
-#include "pipe/p_defines.h"
-
-
-
-static ubyte *
-sp_region_map(struct pipe_context *pipe, struct pipe_region *region)
-{
-   struct softpipe_context *sp = softpipe_context( pipe );
-
-   if (!region->map_refcount++) {
-      region->map = sp->pipe.winsys->buffer_map( sp->pipe.winsys,
-                                                region->buffer,
-                                                PIPE_BUFFER_FLAG_WRITE | 
-                                                PIPE_BUFFER_FLAG_READ);
-   }
-
-   return region->map;
-}
-
-static void
-sp_region_unmap(struct pipe_context *pipe, struct pipe_region *region)
-{
-   struct softpipe_context *sp = softpipe_context( pipe );
-
-   if (region->map_refcount > 0) {
-      assert(region->map);
-      if (!--region->map_refcount) {
-         sp->pipe.winsys->buffer_unmap( sp->pipe.winsys,
-                                        region->buffer );
-         region->map = NULL;
-      }
-   }
-}
-
-
-void
-sp_init_region_functions(struct softpipe_context *sp)
-{
-   sp->pipe.region_map = sp_region_map;
-   sp->pipe.region_unmap = sp_region_unmap;
-}
-
diff --git a/src/mesa/pipe/softpipe/sp_region.h b/src/mesa/pipe/softpipe/sp_region.h
deleted file mode 100644 (file)
index 432746b..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/**************************************************************************
- * 
- * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.
- * All Rights Reserved.
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- * 
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- * 
- **************************************************************************/
-
-
-#ifndef SP_REGION_H
-#define SP_REGION_H
-
-
-struct softpipe_context;
-
-
-extern void
-sp_init_region_functions(struct softpipe_context *sp);
-
-
-#endif /* SP_REGION_H */
index a543735b525d91177283e39bbeaf0679bbbfd1ae..daf9955ca5f536bab9c557c7c595482235bfae75 100644 (file)
@@ -78,7 +78,7 @@ struct softpipe_texture
 
    /* The data is held here:
     */
-   struct pipe_region *region;
+   struct pipe_buffer_handle *buffer;
 };
 
 void *
index d4e0bd1e15763d32ea89fba59220fdacfa7036db..9470ef485feeb50cebd9ad1cf9cf07705e31e26c 100644 (file)
@@ -27,6 +27,8 @@
 
 /* Authors:  Keith Whitwell <keith@tungstengraphics.com>
  */
+#include "p_inlines.h"
+
 #include "sp_context.h"
 #include "sp_state.h"
 #include "sp_surface.h"
@@ -54,17 +56,17 @@ softpipe_set_framebuffer_state(struct pipe_context *pipe,
          sp_flush_tile_cache(sp, sp->cbuf_cache[i]);
          /* unmap old */
          ps = sp->framebuffer.cbufs[i];
-         if (ps && ps->region)
-            pipe->region_unmap(pipe, ps->region);
+         if (ps && ps->map)
+            pipe_surface_unmap(ps);
          /* map new */
          ps = fb->cbufs[i];
          if (ps)
-            pipe->region_map(pipe, ps->region);
+            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, sp->cbuf_cache[i], ps);
       }
    }
 
@@ -76,8 +78,8 @@ softpipe_set_framebuffer_state(struct pipe_context *pipe,
       sp_flush_tile_cache(sp, sp->zbuf_cache);
       /* unmap old */
       ps = sp->framebuffer.zbuf;
-      if (ps && ps->region)
-         pipe->region_unmap(pipe, ps->region);
+      if (ps && ps->map)
+         pipe_surface_unmap(ps);
       if (sp->framebuffer.sbuf == sp->framebuffer.zbuf) {
          /* combined z/stencil */
          sp->framebuffer.sbuf = NULL;
@@ -85,12 +87,12 @@ softpipe_set_framebuffer_state(struct pipe_context *pipe,
       /* map new */
       ps = fb->zbuf;
       if (ps)
-         pipe->region_map(pipe, ps->region);
+         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, sp->zbuf_cache, ps);
    }
 
    /* XXX combined depth/stencil here */
@@ -101,12 +103,12 @@ softpipe_set_framebuffer_state(struct pipe_context *pipe,
       sp_flush_tile_cache(sp, sp->sbuf_cache_sep);
       /* unmap old */
       ps = sp->framebuffer.sbuf;
-      if (ps && ps->region)
-         pipe->region_unmap(pipe, ps->region);
+      if (ps && ps->map)
+         pipe_surface_unmap(ps);
       /* map new */
       ps = fb->sbuf;
       if (ps && fb->sbuf != fb->zbuf)
-         pipe->region_map(pipe, ps->region);
+         pipe_surface_map(ps);
       /* assign new */
       sp->framebuffer.sbuf = fb->sbuf;
 
@@ -114,12 +116,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, sp->sbuf_cache, ps);
       }
       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, sp->sbuf_cache, ps);
       }
    }
 
index c41bbc59b906322a3417d27005191cedacaa7b7f..c61e0842fc2405aa5a3d43abcdeb6cc386f2f304 100644 (file)
@@ -76,7 +76,7 @@ a8r8g8b8_get_tile(struct pipe_surface *ps,
                   unsigned x, unsigned y, unsigned w, unsigned h, float *p)
 {
    const unsigned *src
-      = ((const unsigned *) (ps->region->map + ps->offset))
+      = ((const unsigned *) (ps->map))
       + y * ps->pitch + x;
    unsigned i, j;
    unsigned w0 = w;
@@ -107,7 +107,7 @@ a8r8g8b8_put_tile(struct pipe_surface *ps,
                   const float *p)
 {
    unsigned *dst
-      = ((unsigned *) (ps->region->map + ps->offset))
+      = ((unsigned *) (ps->map))
       + y * ps->pitch + x;
    unsigned i, j;
    unsigned w0 = w;
@@ -140,7 +140,7 @@ b8g8r8a8_get_tile(struct pipe_surface *ps,
                   unsigned x, unsigned y, unsigned w, unsigned h, float *p)
 {
    const unsigned *src
-      = ((const unsigned *) (ps->region->map + ps->offset))
+      = ((const unsigned *) (ps->map))
       + y * ps->pitch + x;
    unsigned i, j;
    unsigned w0 = w;
@@ -171,7 +171,7 @@ b8g8r8a8_put_tile(struct pipe_surface *ps,
                   const float *p)
 {
    unsigned *dst
-      = ((unsigned *) (ps->region->map + ps->offset))
+      = ((unsigned *) (ps->map))
       + y * ps->pitch + x;
    unsigned i, j;
    unsigned w0 = w;
@@ -204,7 +204,7 @@ a1r5g5b5_get_tile(struct pipe_surface *ps,
                   unsigned x, unsigned y, unsigned w, unsigned h, float *p)
 {
    const ushort *src
-      = ((const ushort *) (ps->region->map + ps->offset))
+      = ((const ushort *) (ps->map))
       + y * ps->pitch + x;
    unsigned i, j;
 
@@ -235,7 +235,7 @@ z16_get_tile(struct pipe_surface *ps,
              unsigned x, unsigned y, unsigned w, unsigned h, float *p)
 {
    const ushort *src
-      = ((const ushort *) (ps->region->map + ps->offset))
+      = ((const ushort *) (ps->map))
       + y * ps->pitch + x;
    const float scale = 1.0f / 65535.0f;
    unsigned i, j;
@@ -268,7 +268,7 @@ l8_get_tile(struct pipe_surface *ps,
                   unsigned x, unsigned y, unsigned w, unsigned h, float *p)
 {
    const ubyte *src
-      = ((const ubyte *) (ps->region->map + ps->offset))
+      = ((const ubyte *) (ps->map))
       + y * ps->pitch + x;
    unsigned i, j;
    unsigned w0 = w;
@@ -299,7 +299,7 @@ a8_get_tile(struct pipe_surface *ps,
                   unsigned x, unsigned y, unsigned w, unsigned h, float *p)
 {
    const ubyte *src
-      = ((const ubyte *) (ps->region->map + ps->offset))
+      = ((const ubyte *) (ps->map))
       + y * ps->pitch + x;
    unsigned i, j;
    unsigned w0 = w;
@@ -330,7 +330,7 @@ r16g16b16a16_get_tile(struct pipe_surface *ps,
                       unsigned x, unsigned y, unsigned w, unsigned h, float *p)
 {
    const short *src
-      = ((const short *) (ps->region->map + ps->offset))
+      = ((const short *) (ps->map))
       + (y * ps->pitch + x) * 4;
    unsigned i, j;
    unsigned w0 = w;
@@ -362,7 +362,7 @@ r16g16b16a16_put_tile(struct pipe_surface *ps,
                       const float *p)
 {
    short *dst
-      = ((short *) (ps->region->map + ps->offset))
+      = ((short *) (ps->map))
       + (y * ps->pitch + x) * 4;
    unsigned i, j;
    unsigned w0 = w;
@@ -399,7 +399,7 @@ i8_get_tile(struct pipe_surface *ps,
             unsigned x, unsigned y, unsigned w, unsigned h, float *p)
 {
    const ubyte *src
-      = ((const ubyte *) (ps->region->map + ps->offset))
+      = ((const ubyte *) (ps->map))
       + y * ps->pitch + x;
    unsigned i, j;
    unsigned w0 = w;
@@ -430,7 +430,7 @@ a8_l8_get_tile(struct pipe_surface *ps,
                unsigned x, unsigned y, unsigned w, unsigned h, float *p)
 {
    const ushort *src
-      = ((const ushort *) (ps->region->map + ps->offset))
+      = ((const ushort *) (ps->map))
       + y * ps->pitch + x;
    unsigned i, j;
    unsigned w0 = w;
@@ -467,7 +467,7 @@ z32_get_tile(struct pipe_surface *ps,
              unsigned x, unsigned y, unsigned w, unsigned h, float *p)
 {
    const uint *src
-      = ((const uint *) (ps->region->map + ps->offset))
+      = ((const uint *) (ps->map))
       + y * ps->pitch + x;
    const double scale = 1.0 / (double) 0xffffffff;
    unsigned i, j;
@@ -501,7 +501,7 @@ s8z24_get_tile(struct pipe_surface *ps,
                unsigned x, unsigned y, unsigned w, unsigned h, float *p)
 {
    const uint *src
-      = ((const uint *) (ps->region->map + ps->offset))
+      = ((const uint *) (ps->map))
       + y * ps->pitch + x;
    const double scale = 1.0 / ((1 << 24) - 1);
    unsigned i, j;
@@ -535,7 +535,7 @@ z24s8_get_tile(struct pipe_surface *ps,
                unsigned x, unsigned y, unsigned w, unsigned h, float *p)
 {
    const uint *src
-      = ((const uint *) (ps->region->map + ps->offset))
+      = ((const uint *) (ps->map))
       + y * ps->pitch + x;
    const double scale = 1.0 / ((1 << 24) - 1);
    unsigned i, j;
@@ -589,7 +589,7 @@ softpipe_get_tex_surface(struct pipe_context *pipe,
    if (ps) {
       assert(ps->format);
       assert(ps->refcount);
-      pipe_region_reference(&ps->region, spt->region);
+      pipe->winsys->buffer_reference(pipe->winsys, &ps->buffer, spt->buffer);
       ps->cpp = pt->cpp;
       ps->width = pt->width[level];
       ps->height = pt->height[level];
@@ -613,7 +613,7 @@ softpipe_get_tile(struct pipe_context *pipe, struct pipe_surface *ps,
    ubyte *pDest;
    uint i;
 
-   assert(ps->region->map);
+   assert(ps->map);
 
    if (dst_stride == 0) {
       dst_stride = w * cpp;
@@ -621,7 +621,7 @@ softpipe_get_tile(struct pipe_context *pipe, struct pipe_surface *ps,
 
    CLIP_TILE;
 
-   pSrc = ps->region->map + ps->offset + (y * ps->pitch + x) * cpp;
+   pSrc = ps->map + (y * ps->pitch + x) * cpp;
    pDest = (ubyte *) p;
 
    for (i = 0; i < h; i++) {
@@ -645,7 +645,7 @@ softpipe_put_tile(struct pipe_context *pipe, struct pipe_surface *ps,
    ubyte *pDest;
    uint i;
 
-   assert(ps->region->map);
+   assert(ps->map);
 
    if (src_stride == 0) {
       src_stride = w * cpp;
@@ -654,7 +654,7 @@ softpipe_put_tile(struct pipe_context *pipe, struct pipe_surface *ps,
    CLIP_TILE;
 
    pSrc = (const ubyte *) p;
-   pDest = ps->region->map + ps->offset + (y * ps->pitch + x) * cpp;
+   pDest = ps->map + (y * ps->pitch + x) * cpp;
 
    for (i = 0; i < h; i++) {
       memcpy(pDest, pSrc, w * cpp);
@@ -817,12 +817,12 @@ sp_surface_data(struct pipe_context *pipe,
                const void *src, unsigned src_pitch,
                unsigned srcx, unsigned srcy, unsigned width, unsigned height)
 {
-   copy_rect(pipe->region_map(pipe, dst->region) + dst->offset,
+   copy_rect(pipe_surface_map(dst),
              dst->cpp,
              dst->pitch,
              dstx, dsty, width, height, src, src_pitch, srcx, srcy);
 
-   pipe->region_unmap(pipe, dst->region);
+   pipe_surface_unmap(dst);
 }
 
 /* Assumes all values are within bounds -- no checking at this level -
@@ -835,29 +835,26 @@ sp_surface_copy(struct pipe_context *pipe,
                struct pipe_surface *src,
                unsigned srcx, unsigned srcy, unsigned width, unsigned height)
 {
-   ubyte *src_map, *dst_map;
    assert( dst->cpp == src->cpp );
 
-   dst_map = pipe->region_map(pipe, dst->region);
-   src_map = pipe->region_map(pipe, src->region);
-   copy_rect(dst_map + dst->offset,
+   copy_rect(pipe_surface_map(dst),
              dst->cpp,
              dst->pitch,
              dstx, dsty,
              width, height,
-             src_map + src->offset,
+             pipe_surface_map(src),
              src->pitch,
              srcx, srcy);
 
-   pipe->region_unmap(pipe, src->region);
-   pipe->region_unmap(pipe, dst->region);
+   pipe_surface_unmap(src);
+   pipe_surface_unmap(dst);
 }
 
 
 static ubyte *
 get_pointer(struct pipe_surface *dst, unsigned x, unsigned y)
 {
-   return dst->region->map + (y * dst->pitch + x) * dst->cpp;
+   return dst->map + (y * dst->pitch + x) * dst->cpp;
 }
 
 
@@ -879,7 +876,7 @@ sp_surface_fill(struct pipe_context *pipe,
    assert(dst->pitch > 0);
    assert(width <= dst->pitch);
 
-   (void)pipe->region_map(pipe, dst->region);
+   (void)pipe_surface_map(dst);
 
    switch (dst->cpp) {
    case 1:
@@ -935,7 +932,7 @@ sp_surface_fill(struct pipe_context *pipe,
       break;
    }
 
-   pipe->region_unmap( pipe, dst->region );
+   pipe_surface_unmap( dst );
 }
 
 
index 2f9a1e9837b63ebc7603453f9e906f34ed8f5d23..53486f9bba5707ab988d8558e43ccbf12e46ce04 100644 (file)
@@ -32,6 +32,7 @@
 
 #include "pipe/p_context.h"
 #include "pipe/p_defines.h"
+#include "pipe/p_inlines.h"
 #include "pipe/p_util.h"
 #include "pipe/p_winsys.h"
 
@@ -380,13 +381,18 @@ softpipe_texture_create(struct pipe_context *pipe, struct pipe_texture **pt)
             sizeof(struct softpipe_texture) - sizeof(struct pipe_texture));
 
       if (softpipe_mipmap_tree_layout(pipe, spt)) {
-        spt->region = pipe->winsys->region_alloc(pipe->winsys,
-                                                 spt->pitch * (*pt)->cpp *
-                                                 spt->total_height,
-                                                 PIPE_SURFACE_FLAG_TEXTURE);
+        spt->buffer = pipe->winsys->buffer_create(pipe->winsys,
+                                                  PIPE_SURFACE_FLAG_TEXTURE);
+
+        if (spt->buffer) {
+           pipe->winsys->buffer_data(pipe->winsys, spt->buffer,
+                                     spt->pitch * (*pt)->cpp *
+                                     spt->total_height, NULL,
+                                     PIPE_BUFFER_USAGE_PIXEL);
+        }
       }
 
-      if (!spt->region) {
+      if (!spt->buffer) {
         FREE(spt);
         spt = NULL;
       }
@@ -413,7 +419,7 @@ softpipe_texture_release(struct pipe_context *pipe, struct pipe_texture **pt)
       DBG("%s deleting %p\n", __FUNCTION__, (void *) spt);
       */
 
-      pipe->winsys->region_release(pipe->winsys, &spt->region);
+      pipe->winsys->buffer_reference(pipe->winsys, &spt->buffer, NULL);
 
       for (i = 0; i < PIPE_MAX_TEXTURE_LEVELS; i++)
          if (spt->image_offset[i])
index 62ee6a27c93d9604e9de1d24da4efaddd405b929..08cd39cc55591f0150a150f7e13558c57fb35c35 100644 (file)
@@ -123,16 +123,24 @@ sp_destroy_tile_cache(struct softpipe_tile_cache *tc)
 
 
 void
-sp_tile_cache_set_surface(struct softpipe_tile_cache *tc,
+sp_tile_cache_set_surface(struct softpipe_context *sp,
+                         struct softpipe_tile_cache *tc,
                           struct pipe_surface *ps)
 {
+   if (tc->surface && tc->surface->map)
+      pipe_surface_unmap(tc->surface);
+
    pipe_surface_reference(&tc->surface, ps);
 }
 
 
 struct pipe_surface *
-sp_tile_cache_get_surface(struct softpipe_tile_cache *tc)
+sp_tile_cache_get_surface(struct softpipe_context *sp,
+                         struct softpipe_tile_cache *tc)
 {
+   if (tc->surface && !tc->surface->map)
+      pipe_surface_map(tc->surface);
+
    return tc->surface;
 }
 
@@ -162,7 +170,7 @@ sp_flush_tile_cache(struct softpipe_context *softpipe,
    boolean is_depth_stencil;
    int inuse = 0, pos;
 
-   if (!ps || !ps->region || !ps->region->map)
+   if (!ps || !ps->buffer)
       return;
 
    is_depth_stencil = (ps->format == PIPE_FORMAT_S8_Z24 ||
@@ -367,6 +375,16 @@ sp_get_cached_tile_tex(struct pipe_context *pipe,
       struct pipe_surface *ps
          = pipe->get_tex_surface(pipe, tc->texture, face, level, z);
 
+      if (ps != tc->surface) {
+        if (tc->surface && tc->surface->map)
+           pipe_surface_unmap(tc->surface);
+
+        pipe_surface_reference(&tc->surface, ps);
+
+        if (!tc->surface->map)
+           pipe_surface_map(tc->surface);
+      }
+
       pipe->get_tile_rgba(pipe, ps,
                           tile_x, tile_y, TILE_SIZE, TILE_SIZE,
                           (float *) tile->data.color);
index 9967aa5044a00bdcd10782b9c236baa555e69745..de5ff2c498b88cc2b1f8efefd846bbe233627fff 100644 (file)
@@ -63,11 +63,13 @@ extern void
 sp_destroy_tile_cache(struct softpipe_tile_cache *tc);
 
 extern void
-sp_tile_cache_set_surface(struct softpipe_tile_cache *tc,
+sp_tile_cache_set_surface(struct softpipe_context *sp,
+                         struct softpipe_tile_cache *tc,
                           struct pipe_surface *sps);
 
 extern struct pipe_surface *
-sp_tile_cache_get_surface(struct softpipe_tile_cache *tc);
+sp_tile_cache_get_surface(struct softpipe_context *sp,
+                         struct softpipe_tile_cache *tc);
 
 extern void
 sp_tile_cache_set_texture(struct softpipe_tile_cache *tc,
index f87d72d0c8c06624dfa7a97deecc894e511f9fcd..542b4aca49c4a0aa7da804c5378d63457a008849 100644 (file)
@@ -1512,7 +1512,7 @@ XMesaContext XMesaCreateContext( XMesaVisual v, XMesaContext share_list )
    pipe->get_tile_rgba = xmesa_get_tile_rgba;
    pipe->put_tile_rgba = xmesa_put_tile_rgba;
 
-   c->st->haveFramebufferRegions = GL_FALSE;
+   c->st->haveFramebufferSurfaces = GL_FALSE;
 
    /* special pipe->clear function */
    pipe->clear = xmesa_clear;
index 449e90184b887ba503d37efa8ac3d70af4d43718..6fc2f4ba630c9d1ae06ea2ac5b17b579b2ce9ea7 100644 (file)
@@ -269,9 +269,8 @@ static void
 finish_surface_init(GLcontext *ctx, struct xmesa_renderbuffer *xrb)
 {
    struct pipe_context *pipe = ctx->st->pipe;
-   if (!xrb->St.surface->region) {
-      xrb->St.surface->region = pipe->winsys->region_alloc(pipe->winsys, 1,
-                                                          0x0);
+   if (!xrb->St.surface->buffer) {
+      xrb->St.surface->buffer = pipe->winsys->buffer_create(pipe->winsys, 0x0);
    }
 }
 
@@ -301,7 +300,7 @@ xmesa_alloc_front_storage(GLcontext *ctx, struct gl_renderbuffer *rb,
    rb->Height = height;
    rb->InternalFormat = internalFormat;
 
-   if (!xrb->St.surface || !xrb->St.surface->region)
+   if (!xrb->St.surface || !xrb->St.surface->buffer)
       finish_surface_init(ctx, xrb);
 
    /* surface info */
@@ -363,7 +362,7 @@ xmesa_alloc_back_storage(GLcontext *ctx, struct gl_renderbuffer *rb,
       xrb->origin4 = NULL;
    }
 
-   if (!xrb->St.surface || !xrb->St.surface->region)
+   if (!xrb->St.surface || !xrb->St.surface->buffer)
       finish_surface_init(ctx, xrb);
 
    xrb->St.surface->width = width;
index 58ca2e7fb3c0b7b6dc20e6d46a0883a24e5cd2b0..4a54b5c7e1afb7fd5f7f7045dd2d1097fa1329e2 100644 (file)
@@ -665,12 +665,12 @@ xmesa_new_color_surface(struct pipe_winsys *winsys, GLuint pipeFormat)
    xms->surface.refcount = 1;
    xms->surface.winsys = winsys;
 
-   /* Note, the region we allocate doesn't actually have any storage
+   /* Note, the buffer we allocate doesn't actually have any storage
     * since we're drawing into an XImage or Pixmap.
-    * The region's size will get set in the xmesa_alloc_front/back_storage()
+    * The surface's size will get set in the xmesa_alloc_front/back_storage()
     * functions.
     */
-   xms->surface.region = winsys->region_alloc(winsys, 1, 0x0);
+   xms->surface.buffer = winsys->buffer_create(winsys, 0x0);
 
    return &xms->surface;
 }
@@ -713,7 +713,7 @@ xmesa_clear(struct pipe_context *pipe, struct pipe_surface *ps, uint value)
 
    {
       struct softpipe_context *sp = softpipe_context(pipe);
-      if (ps == sp_tile_cache_get_surface(sp->cbuf_cache[0])) {
+      if (ps == sp_tile_cache_get_surface(sp, sp->cbuf_cache[0])) {
          float clear[4];
          clear[0] = 0.2; /* XXX hack */
          clear[1] = 0.2;
index 99816a811d6e7ef1c310f402baf79cabfbe4669f..295174d4bbacf58103198abbd563edc6471fecee 100644 (file)
@@ -186,7 +186,7 @@ xm_get_name(struct pipe_winsys *pws)
 
 
 static struct pipe_buffer_handle *
-xm_buffer_create(struct pipe_winsys *pws, unsigned alignment)
+xm_buffer_create(struct pipe_winsys *pws, unsigned flags)
 {
    struct xm_buffer *buffer = CALLOC_STRUCT(xm_buffer);
    buffer->refcount = 1;
@@ -228,47 +228,6 @@ xm_surface_pitch(struct pipe_winsys *winsys, unsigned cpp, unsigned width,
 }
 
 
-static struct pipe_region *
-xm_region_alloc(struct pipe_winsys *winsys, unsigned size, unsigned flags)
-{
-   struct pipe_region *region = CALLOC_STRUCT(pipe_region);
-   const unsigned alignment = 64;
-
-   region->refcount = 1;
-
-   assert(size > 0);
-
-   region->buffer = winsys->buffer_create( winsys, alignment );
-
-   /* NULL data --> just allocate the space */
-   winsys->buffer_data( winsys,
-                        region->buffer, 
-                        size, 
-                        NULL,
-                        PIPE_BUFFER_USAGE_PIXEL );
-   return region;
-}
-
-
-static void
-xm_region_release(struct pipe_winsys *winsys, struct pipe_region **region)
-{
-   if (!*region)
-      return;
-
-   assert((*region)->refcount > 0);
-   (*region)->refcount--;
-
-   if ((*region)->refcount == 0) {
-      assert((*region)->map_refcount == 0);
-
-      winsys->buffer_reference( winsys, &((*region)->buffer), NULL );
-      free(*region);
-   }
-   *region = NULL;
-}
-
-
 /**
  * Called via pipe->surface_alloc() to create new surfaces (textures,
  * renderbuffers, etc.
@@ -301,8 +260,8 @@ xm_surface_release(struct pipe_winsys *winsys, struct pipe_surface **s)
    struct pipe_surface *surf = *s;
    surf->refcount--;
    if (surf->refcount == 0) {
-      if (surf->region)
-         winsys->region_release(winsys, &surf->region);
+      if (surf->buffer)
+        winsys->buffer_reference(winsys, &surf->buffer, NULL);
       free(surf);
    }
    *s = NULL;
@@ -335,9 +294,6 @@ xmesa_get_pipe_winsys(void)
       ws->buffer_subdata = xm_buffer_subdata;
       ws->buffer_get_subdata = xm_buffer_get_subdata;
 
-      ws->region_alloc = xm_region_alloc;
-      ws->region_release = xm_region_release;
-
       ws->surface_pitch = xm_surface_pitch;
       ws->surface_alloc = xm_surface_alloc;
       ws->surface_release = xm_surface_release;
index 7a245b0ed6d56dfd17adb719dccf890cc844e411..c8d9cba12f3fe2d27bb67a62ad37203482d8777a 100644 (file)
@@ -42,6 +42,7 @@
 #include "st_format.h"
 #include "pipe/p_context.h"
 #include "pipe/p_defines.h"
+#include "pipe/p_inlines.h"
 
 
 /**
@@ -68,7 +69,7 @@ st_clear_accum_buffer(GLcontext *ctx, struct gl_renderbuffer *rb)
    GLfloat *accBuf;
    GLint i;
 
-   (void) pipe->region_map(pipe, acc_ps->region);
+   (void) pipe_surface_map(acc_ps);
 
    accBuf = (GLfloat *) malloc(width * height * 4 * sizeof(GLfloat));
 
@@ -83,7 +84,7 @@ st_clear_accum_buffer(GLcontext *ctx, struct gl_renderbuffer *rb)
 
    free(accBuf);
 
-   pipe->region_unmap(pipe, acc_ps->region);
+   pipe_surface_unmap(acc_ps);
 }
 
 
@@ -99,7 +100,7 @@ accum_mad(struct pipe_context *pipe, GLfloat scale, GLfloat bias,
 
    accBuf = (GLfloat *) malloc(width * height * 4 * sizeof(GLfloat));
 
-   (void) pipe->region_map(pipe, acc_ps->region);
+   (void) pipe_surface_map(acc_ps);
 
    pipe->get_tile_rgba(pipe, acc_ps, xpos, ypos, width, height, accBuf);
 
@@ -111,7 +112,7 @@ accum_mad(struct pipe_context *pipe, GLfloat scale, GLfloat bias,
 
    free(accBuf);
 
-   pipe->region_unmap(pipe, acc_ps->region);
+   pipe_surface_unmap(acc_ps);
 }
 
 
@@ -128,8 +129,8 @@ accum_accum(struct pipe_context *pipe, GLfloat value,
    colorBuf = (GLfloat *) malloc(width * height * 4 * sizeof(GLfloat));
    accBuf = (GLfloat *) malloc(width * height * 4 * sizeof(GLfloat));
 
-   colorMap = pipe->region_map(pipe, color_ps->region);
-   accMap = pipe->region_map(pipe, acc_ps->region);
+   colorMap = pipe_surface_map(color_ps);
+   accMap = pipe_surface_map(acc_ps);
 
    pipe->get_tile_rgba(pipe, color_ps, xpos, ypos, width, height, colorBuf);
    pipe->get_tile_rgba(pipe, acc_ps, xpos, ypos, width, height, accBuf);
@@ -143,8 +144,8 @@ accum_accum(struct pipe_context *pipe, GLfloat value,
    free(colorBuf);
    free(accBuf);
 
-   pipe->region_unmap(pipe, color_ps->region);
-   pipe->region_unmap(pipe, acc_ps->region);
+   pipe_surface_unmap(color_ps);
+   pipe_surface_unmap(acc_ps);
 }
 
 
@@ -159,8 +160,8 @@ accum_load(struct pipe_context *pipe, GLfloat value,
 
    buf = (GLfloat *) malloc(width * height * 4 * sizeof(GLfloat));
 
-   (void) pipe->region_map(pipe, color_ps->region);
-   (void) pipe->region_map(pipe, acc_ps->region);
+   (void) pipe_surface_map(color_ps);
+   (void) pipe_surface_map(acc_ps);
 
    pipe->get_tile_rgba(pipe, color_ps, xpos, ypos, width, height, buf);
 
@@ -172,8 +173,8 @@ accum_load(struct pipe_context *pipe, GLfloat value,
 
    free(buf);
 
-   pipe->region_unmap(pipe, color_ps->region);
-   pipe->region_unmap(pipe, acc_ps->region);
+   pipe_surface_unmap(color_ps);
+   pipe_surface_unmap(acc_ps);
 }
 
 
@@ -190,8 +191,8 @@ accum_return(GLcontext *ctx, GLfloat value,
 
    abuf = (GLfloat *) malloc(width * height * 4 * sizeof(GLfloat));
 
-   (void) pipe->region_map(pipe, color_ps->region);
-   (void) pipe->region_map(pipe, acc_ps->region);
+   (void) pipe_surface_map(color_ps);
+   (void) pipe_surface_map(acc_ps);
 
    pipe->get_tile_rgba(pipe, acc_ps, xpos, ypos, width, height, abuf);
 
@@ -218,8 +219,8 @@ accum_return(GLcontext *ctx, GLfloat value,
    if (cbuf)
       free(cbuf);
 
-   pipe->region_unmap(pipe, color_ps->region);
-   pipe->region_unmap(pipe, acc_ps->region);
+   pipe_surface_unmap(color_ps);
+   pipe_surface_unmap(acc_ps);
 }
 
 
index c28ad15b294b63a4b4984d0dc0b21f87a2fb19a9..a61daffb20a330067e2d8c02f1308500b4768873 100644 (file)
@@ -492,11 +492,10 @@ make_texture(struct st_context *st,
 
       surface = pipe->get_tex_surface(pipe, pt, 0, 0, 0);
 
-      /* map texture region */
-      (void) pipe->region_map(pipe, surface->region);
-      dest = surface->region->map + surface->offset;
+      /* map texture surface */
+      dest = pipe_surface_map(surface);
 
-      /* Put image into texture region.
+      /* Put image into texture surface.
        * Note that the image is actually going to be upside down in
        * the texture.  We deal with that with texcoords.
        */
@@ -513,7 +512,7 @@ make_texture(struct st_context *st,
                                     unpack);
 
       /* unmap */
-      pipe->region_unmap(pipe, surface->region);
+      pipe_surface_unmap(surface);
       pipe_surface_reference(&surface, NULL);
       assert(success);
 
@@ -852,7 +851,7 @@ draw_stencil_pixels(GLcontext *ctx, GLint x, GLint y,
    pipe->flush(pipe, 0);
 
    /* map the stencil buffer */
-   stmap = pipe->region_map(pipe, ps->region);
+   stmap = pipe_surface_map(ps);
 
    /* if width > MAX_WIDTH, have to process image in chunks */
    skipPixels = 0;
@@ -909,7 +908,7 @@ draw_stencil_pixels(GLcontext *ctx, GLint x, GLint y,
    }
 
    /* unmap the stencil buffer */
-   pipe->region_unmap(pipe, ps->region);
+   pipe_surface_unmap(ps);
 }
 
 
@@ -1027,11 +1026,10 @@ make_bitmap_texture(GLcontext *ctx, GLsizei width, GLsizei height,
 
    surface = pipe->get_tex_surface(pipe, pt, 0, 0, 0);
 
-   /* map texture region */
-   (void) pipe->region_map(pipe, surface->region);
-   dest = surface->region->map + surface->offset;
+   /* map texture surface */
+   dest = pipe_surface_map(surface);
 
-   /* Put image into texture region.
+   /* Put image into texture surface.
     * Note that the image is actually going to be upside down in
     * the texture.  We deal with that with texcoords.
     */
@@ -1089,7 +1087,7 @@ make_bitmap_texture(GLcontext *ctx, GLsizei width, GLsizei height,
    } /* row */
 
    /* Release surface */
-   pipe->region_unmap(pipe, surface->region);
+   pipe_surface_unmap(surface);
    pipe_surface_reference(&surface, NULL);
 
    pt->format = format;
@@ -1130,8 +1128,6 @@ copy_stencil_pixels(GLcontext *ctx, GLint srcx, GLint srcy,
                     GLsizei width, GLsizei height,
                     GLint dstx, GLint dsty)
 {
-   struct st_context *st = ctx->st;
-   struct pipe_context *pipe = st->pipe;
    struct st_renderbuffer *rbRead = st_renderbuffer(ctx->ReadBuffer->_StencilBuffer);
    struct st_renderbuffer *rbDraw = st_renderbuffer(ctx->DrawBuffer->_StencilBuffer);
    struct pipe_surface *psRead = rbRead->surface;
@@ -1147,8 +1143,8 @@ copy_stencil_pixels(GLcontext *ctx, GLint srcx, GLint srcy,
    }
 
    /* map the stencil buffers */
-   readMap = pipe->region_map(pipe, psRead->region);
-   drawMap = pipe->region_map(pipe, psDraw->region);
+   readMap = pipe_surface_map(psRead);
+   drawMap = pipe_surface_map(psDraw);
 
    /* this will do stencil pixel transfer ops */
    st_read_stencil_pixels(ctx, srcx, srcy, width, height, GL_UNSIGNED_BYTE,
@@ -1192,8 +1188,8 @@ copy_stencil_pixels(GLcontext *ctx, GLint srcx, GLint srcy,
    free(buffer);
 
    /* unmap the stencil buffers */
-   pipe->region_unmap(pipe, psRead->region);
-   pipe->region_unmap(pipe, psDraw->region);
+   pipe_surface_unmap(psRead);
+   pipe_surface_unmap(psDraw);
 }
 
 
@@ -1252,11 +1248,11 @@ st_CopyPixels(GLcontext *ctx, GLint srcx, GLint srcy,
    }
 
    /* For some drivers (like Xlib) it's not possible to treat the
-    * front/back color buffers as regions (they're XImages and Pixmaps).
-    * So, this var tells us if we can use region_copy here...
+    * front/back color buffers as surfaces (they're XImages and Pixmaps).
+    * So, this var tells us if we can use surface_copy here...
     */
-   if (st->haveFramebufferRegions) {
-      /* copy source framebuffer region into mipmap/texture */
+   if (st->haveFramebufferSurfaces) {
+      /* copy source framebuffer surface into mipmap/texture */
       pipe->surface_copy(pipe,
                         psTex, /* dest */
                         0, 0, /* destx/y */
@@ -1267,14 +1263,14 @@ 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->region_map(pipe, psRead->region);
-      (void) pipe->region_map(pipe, psTex->region);
+      (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->region_unmap(pipe, psRead->region);
-      pipe->region_unmap(pipe, psTex->region);
+      pipe_surface_unmap(psRead);
+      pipe_surface_unmap(psTex);
 
       free(buf);
    }
index 43681b7f8a9d410d5141bfb7e2fb95e197162260..6b9023c41042b03e336be34ccf16e46aded07504 100644 (file)
@@ -109,22 +109,22 @@ st_renderbuffer_alloc_storage(GLcontext * ctx, struct gl_renderbuffer *rb,
                                                         width, flags);
    }
 
-   /* free old region */
-   if (strb->surface->region) {
-      /* loop here since mapping is refcounted */
-      struct pipe_region *r = strb->surface->region;
-      while (r->map)
-         pipe->region_unmap(pipe, r);
-      pipe->winsys->region_release(pipe->winsys, &strb->surface->region);
-   }
-
-   strb->surface->region = pipe->winsys->region_alloc(pipe->winsys,
-                                                     strb->surface->pitch *
-                                                     cpp * height, flags);
-   if (!strb->surface->region)
+   /* 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);
+
+   strb->surface->buffer = pipe->winsys->buffer_create(pipe->winsys, flags);
+   if (!strb->surface->buffer)
       return GL_FALSE; /* out of memory, try s/w buffer? */
 
-   ASSERT(strb->surface->region->buffer);
+   pipe->winsys->buffer_data(pipe->winsys, strb->surface->buffer,
+                            strb->surface->pitch * cpp * height, NULL,
+                            PIPE_BUFFER_USAGE_PIXEL);
+
+   ASSERT(strb->surface->buffer);
    ASSERT(strb->surface->format);
 
    strb->Base.Width  = strb->surface->width  = width;
index 83fe480af8504389b4d93c45903b3b4c2c734019..e2243e7de49c57624f504d7085b1f7c955e9a08e 100644 (file)
@@ -39,6 +39,7 @@
 
 #include "pipe/p_context.h"
 #include "pipe/p_defines.h"
+#include "pipe/p_inlines.h"
 #include "st_context.h"
 #include "st_cb_readpixels.h"
 #include "st_cb_fbo.h"
@@ -56,8 +57,6 @@ st_read_stencil_pixels(GLcontext *ctx, GLint x, GLint y,
                        const struct gl_pixelstore_attrib *packing,
                        GLvoid *pixels)
 {
-   struct st_context *st = ctx->st;
-   struct pipe_context *pipe = st->pipe;
    struct gl_framebuffer *fb = ctx->ReadBuffer;
    struct st_renderbuffer *strb = st_renderbuffer(fb->_StencilBuffer);
    struct pipe_surface *ps = strb->surface;
@@ -65,7 +64,7 @@ st_read_stencil_pixels(GLcontext *ctx, GLint x, GLint y,
    GLint j;
 
    /* map the stencil buffer */
-   stmap = pipe->region_map(pipe, ps->region);
+   stmap = pipe_surface_map(ps);
 
    /* width should never be > MAX_WIDTH since we did clipping earlier */
    ASSERT(width <= MAX_WIDTH);
@@ -122,7 +121,7 @@ st_read_stencil_pixels(GLcontext *ctx, GLint x, GLint y,
 
 
    /* unmap the stencil buffer */
-   pipe->region_unmap(pipe, ps->region);
+   pipe_surface_unmap(ps);
 }
 
 
@@ -151,7 +150,7 @@ st_readpixels(GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height,
 
    /* Do all needed clipping here, so that we can forget about it later */
    if (!_mesa_clip_readpixels(ctx, &x, &y, &width, &height, &clippedPacking)) {
-      /* The ReadPixels region is totally outside the window bounds */
+      /* The ReadPixels surface is totally outside the window bounds */
       return;
    }
 
@@ -180,7 +179,7 @@ st_readpixels(GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height,
    if (!strb)
       return;
 
-   pipe->region_map(pipe, strb->surface->region);
+   pipe_surface_map(strb->surface);
 
    if (format == GL_RGBA && type == GL_FLOAT) {
       /* write tile(row) directly into user's buffer */
@@ -231,7 +230,7 @@ st_readpixels(GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height,
       }
    }
 
-   pipe->region_unmap(pipe, strb->surface->region);
+   pipe_surface_unmap(strb->surface);
 }
 
 
index acc97df2e76f986666d2f3da135e08819208aaa2..1fcef746c1f3225e6a697254b0df0a7fd0177194 100644 (file)
@@ -64,7 +64,7 @@ struct st_texture_object
    GLuint textureOffset;
 
    /* On validation any active images held in main memory or in other
-    * regions will be copied to this region and the old storage freed.
+    * textures will be copied to this texture and the old storage freed.
     */
    struct pipe_texture *pt;
 
@@ -721,7 +721,7 @@ st_TexImage(GLcontext * ctx,
         }
 
         if (stImage->pt && i < depth) {
-           st_texture_image_unmap(ctx->st, stImage);
+           st_texture_image_unmap(stImage);
            texImage->Data = st_texture_image_map(ctx->st, stImage, i);
            pixels += srcImageStride;
         }
@@ -731,7 +731,7 @@ st_TexImage(GLcontext * ctx,
    _mesa_unmap_teximage_pbo(ctx, unpack);
 
    if (stImage->pt) {
-      st_texture_image_unmap(ctx->st, stImage);
+      st_texture_image_unmap(stImage);
       texImage->Data = NULL;
    }
 
@@ -860,7 +860,7 @@ st_get_tex_image(GLcontext * ctx, GLenum target, GLint level,
       }
 
       if (stImage->pt && i < depth) {
-        st_texture_image_unmap(ctx->st, stImage);
+        st_texture_image_unmap(stImage);
         texImage->Data = st_texture_image_map(ctx->st, stImage, i);
         pixels += dstImageStride;
       }
@@ -870,7 +870,7 @@ st_get_tex_image(GLcontext * ctx, GLenum target, GLint level,
 
    /* Unmap */
    if (stImage->pt) {
-      st_texture_image_unmap(ctx->st, stImage);
+      st_texture_image_unmap(stImage);
       texImage->Data = NULL;
    }
 }
@@ -948,7 +948,7 @@ st_TexSubimage(GLcontext * ctx,
       }
 
       if (stImage->pt && i < depth) {
-        st_texture_image_unmap(ctx->st, stImage);
+        st_texture_image_unmap(stImage);
         texImage->Data = st_texture_image_map(ctx->st, stImage, zoffset + i);
         pixels += srcImageStride;
       }
@@ -966,7 +966,7 @@ st_TexSubimage(GLcontext * ctx,
    _mesa_unmap_teximage_pbo(ctx, packing);
 
    if (stImage->pt) {
-      st_texture_image_unmap(ctx->st, stImage);
+      st_texture_image_unmap(stImage);
       texImage->Data = NULL;
    }
 }
@@ -1051,8 +1051,8 @@ texture_face(GLenum target)
 
 
 /**
- * Do a CopyTexSubImage operation by mapping the source region and
- * dest region and using get_tile()/put_tile() to access the pixels/texels.
+ * Do a CopyTexSubImage operation by mapping the source surface and
+ * dest surface and using get_tile()/put_tile() to access the pixels/texels.
  *
  * Note: srcY=0=TOP of renderbuffer
  */
@@ -1088,8 +1088,8 @@ fallback_copy_texsubimage(GLcontext *ctx,
    dest_surf = pipe->get_tex_surface(pipe, pt,
                                     face, level, destZ);
 
-   (void) pipe->region_map(pipe, dest_surf->region);
-   (void) pipe->region_map(pipe, src_surf->region);
+   (void) pipe_surface_map(dest_surf);
+   (void) pipe_surface_map(src_surf);
 
    /* buffer for one row */
    data = (GLfloat *) malloc(width * 4 * sizeof(GLfloat));
@@ -1110,8 +1110,8 @@ fallback_copy_texsubimage(GLcontext *ctx,
    }
 
 
-   (void) pipe->region_unmap(pipe, dest_surf->region);
-   (void) pipe->region_unmap(pipe, src_surf->region);
+   (void) pipe_surface_unmap(dest_surf);
+   (void) pipe_surface_unmap(src_surf);
 
    free(data);
 }
@@ -1178,8 +1178,8 @@ do_copy_texsubimage(GLcontext *ctx,
 
    if (src_format == dest_format &&
        ctx->_ImageTransferState == 0x0 &&
-       strb->surface->region &&
-       dest_surface->region &&
+       strb->surface->buffer &&
+       dest_surface->buffer &&
        strb->surface->cpp == stImage->pt->cpp) {
       /* do blit-style copy */
 
index a4ec3721befbb042c0b6ddbbdbfffeb00d56f9dc..abde6d64b017e0b1dbc64f6d697633efa488abdc 100644 (file)
@@ -103,7 +103,7 @@ st_create_context_priv( GLcontext *ctx, struct pipe_context *pipe )
 
    st->ctx->VertexProgram._MaintainTnlProgram = GL_TRUE;
 
-   st->haveFramebufferRegions = GL_TRUE;
+   st->haveFramebufferSurfaces = GL_TRUE;
 
    st->pixel_xfer.cache = _mesa_new_program_cache();
 
index db97014c5a7ae0bbd450e42dacce8ca8df22a55b..c31b76c63f3ad4319e8f15d7c9c9c00178ae5bb3 100644 (file)
@@ -34,7 +34,6 @@
 
 
 struct st_context;
-struct st_region;
 struct st_texture_object;
 struct st_fragment_program;
 struct draw_context;
@@ -131,11 +130,11 @@ struct st_context
    char vendor[100];
    char renderer[100];
 
-   /** Can we access the front/back color buffers as pipe_regions?
+   /** Can we access the front/back color buffers as pipe_surfaces?
     * We can't with the Xlib driver...
     * This is a hack that should be fixed someday.
     */
-   GLboolean haveFramebufferRegions;
+   GLboolean haveFramebufferSurfaces;
 
    /* State to be validated:
     */
index a5582c31c0bde0994aaf8cf1c5a23581559295b5..1ec451487367a7a8878d9cee63e28d3502e4ded0 100644 (file)
@@ -33,6 +33,7 @@
 #include "pipe/p_state.h"
 #include "pipe/p_context.h"
 #include "pipe/p_defines.h"
+#include "pipe/p_inlines.h"
 #include "pipe/p_util.h"
 #include "pipe/p_inlines.h"
 #include "pipe/p_winsys.h"
@@ -187,17 +188,15 @@ st_texture_image_map(struct st_context *st, struct st_texture_image *stImage,
    stImage->surface = st->pipe->get_tex_surface(st->pipe, pt, stImage->face,
                                                stImage->level, zoffset);
 
-   (void) st->pipe->region_map(st->pipe, stImage->surface->region);
-
-   return stImage->surface->region->map + stImage->surface->offset;
+   return pipe_surface_map(stImage->surface);
 }
 
 void
-st_texture_image_unmap(struct st_context *st, struct st_texture_image *stImage)
+st_texture_image_unmap(struct st_texture_image *stImage)
 {
    DBG("%s\n", __FUNCTION__);
 
-   st->pipe->region_unmap(st->pipe, stImage->surface->region);
+   pipe_surface_unmap(stImage->surface);
 
    pipe_surface_reference(&stImage->surface, NULL);
 }
index b25e3f3f3bd90b60224c19d8d0f82553a5cda971..f49d91a0692c1127f0af536b7a7747dec887226a 100644 (file)
@@ -65,8 +65,7 @@ st_texture_image_map(struct st_context *st,
                     GLuint zoffset);
 
 extern void
-st_texture_image_unmap(struct st_context *st,
-                       struct st_texture_image *stImage);
+st_texture_image_unmap(struct st_texture_image *stImage);
 
 
 /* Return pointers to each 2d slice within an image.  Indexed by depth