[Mesa-dev] [PATCH 1/4 dri] st/dri: factor out software texbuffer code

nobled nobled at dreamwidth.org
Wed Oct 19 17:15:10 PDT 2011


---
 src/gallium/state_trackers/dri/sw/dri_drawable.c |   72 ++++++++++++----------
 1 files changed, 40 insertions(+), 32 deletions(-)

diff --git a/src/gallium/state_trackers/dri/sw/dri_drawable.c
b/src/gallium/state_trackers/dri/sw/dri_drawable.c
index 05c64b6..66997fb 100644
--- a/src/gallium/state_trackers/dri/sw/dri_drawable.c
+++ b/src/gallium/state_trackers/dri/sw/dri_drawable.c
@@ -187,6 +187,44 @@ dri_drawable_validate_att(struct dri_drawable *drawable,
    drawable->base.validate(&drawable->base, statts, count, NULL);
 }

+static void
+drisw_copy_drawable(struct dri_context *ctx, __DRIdrawable *dPriv,
+                    struct pipe_resource *res)
+{
+   struct st_context *stctx = (struct st_context *)ctx->st;
+   struct pipe_context *pipe = stctx->pipe;
+   struct pipe_transfer *tex_xfer;
+   char *map;
+   __DRIscreen *sPriv = dPriv->driScreenPriv;
+   int x, y, w, h, line, ximage_stride;
+
+   sPriv->swrast_loader->getDrawableInfo(dPriv, &x, &y, &w, &h,
+                                         dPriv->loaderPrivate);
+
+   tex_xfer = pipe_get_transfer(pipe, res,
+                                0, 0,    /* level, layer */
+                                PIPE_TRANSFER_WRITE,
+                                x, y,
+                                w, h);
+
+   map = pipe_transfer_map(pipe, tex_xfer);
+
+   /* Copy the Drawable content to the mapped texture buffer */
+   sPriv->swrast_loader->getImage(dPriv, x, y, w, h, map,
+                                  dPriv->loaderPrivate);
+
+   /* The pipe transfer has a pitch rounded up to the nearest 64 pixels.
+      We assume 32 bit pixels. */
+   ximage_stride = w * 4;
+   for (line = h-1; line; --line) {
+      memmove(&map[line * tex_xfer->stride],
+              &map[line * ximage_stride], ximage_stride);
+   }
+
+   pipe_transfer_unmap(pipe, tex_xfer);
+   pipe_transfer_destroy(pipe, tex_xfer);
+}
+
 /**
  * These are used for GLX_EXT_texture_from_pixmap
  */
@@ -197,15 +235,7 @@ dri_set_tex_buffer2(__DRIcontext *pDRICtx, GLint target,
    struct dri_context *ctx = dri_context(pDRICtx);
    struct dri_drawable *drawable = dri_drawable(dPriv);
    struct pipe_resource *res;
-   struct st_context *stctx = (struct st_context *)ctx->st;
-   struct pipe_context *pipe = stctx->pipe;
-   struct pipe_transfer *tex_xfer;
-   char *map;
-   __DRIscreen *sPriv = dPriv->driScreenPriv;
-   int x, y, w, h, line, ximage_stride;

-   sPriv->swrast_loader->getDrawableInfo(dPriv, &x, &y, &w, &h,
dPriv->loaderPrivate);
-
    dri_drawable_validate_att(drawable, ST_ATTACHMENT_FRONT_LEFT);

    /* Use the pipe resource associated with the X drawable */
@@ -228,30 +258,8 @@ dri_set_tex_buffer2(__DRIcontext *pDRICtx, GLint target,
          }
       }

-
-      tex_xfer = pipe_get_transfer(pipe, res,
-                                    0, 0,    // level, layer
-                                    PIPE_TRANSFER_WRITE,
-                                    x, y,
-                                    w, h);
-
-
-      map = pipe_transfer_map(pipe, tex_xfer);
-
-      /* Copy the Drawable content to the mapped texture buffer */
-      sPriv->swrast_loader->getImage(dPriv, x, y, w, h, map,
-				   dPriv->loaderPrivate);
-
-      /* The pipe transfer has a pitch rounded up to the nearest 64 pixels.
-         We assume 32 bit pixels. */
-      ximage_stride = w * 4;
-      for (line = h-1; line; --line) {
-         memmove(&map[line * tex_xfer->stride], &map[line *
ximage_stride], ximage_stride);
-      }
-
-      pipe_transfer_unmap(pipe, tex_xfer);
-
-      pipe_transfer_destroy(pipe, tex_xfer);
+      /* needed only for drisw: */
+      drisw_copy_drawable(ctx, dPriv, res);

       ctx->st->teximage(ctx->st,
             (target == GL_TEXTURE_2D) ? ST_TEXTURE_2D : ST_TEXTURE_RECT,
-- 
1.7.6.msysgit.0
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0002-st-dri-factor-out-software-texbuffer-code.patch
Type: application/octet-stream
Size: 4038 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20111019/8c147848/attachment.obj>


More information about the mesa-dev mailing list