Mesa (master): st/xorg: If migrating from a sw pixmap to a hw pixmap upload old contents

Jakob Bornecrantz wallbraker at kemper.freedesktop.org
Fri Aug 28 16:22:51 UTC 2009


Module: Mesa
Branch: master
Commit: 1e9eb69f835e35116b8ada0fc2f05561fd8956d1
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=1e9eb69f835e35116b8ada0fc2f05561fd8956d1

Author: Jakob Bornecrantz <jakob at vmware.com>
Date:   Fri Aug 28 16:56:59 2009 +0200

st/xorg: If migrating from a sw pixmap to a hw pixmap upload old contents

---

 src/gallium/state_trackers/xorg/xorg_exa.c |   15 +++++++++++++++
 1 files changed, 15 insertions(+), 0 deletions(-)

diff --git a/src/gallium/state_trackers/xorg/xorg_exa.c b/src/gallium/state_trackers/xorg/xorg_exa.c
index 1650a06..18afa01 100644
--- a/src/gallium/state_trackers/xorg/xorg_exa.c
+++ b/src/gallium/state_trackers/xorg/xorg_exa.c
@@ -496,6 +496,21 @@ ExaModifyPixmapHeader(PixmapPtr pPixmap, int width, int height,
                        width, height, pPixData, pPixmap->devKind, 0, 0);
         exa->scrn->transfer_unmap(exa->scrn, transfer);
         exa->scrn->tex_transfer_destroy(transfer);
+    } else if (priv->tex && pPixmap->devPrivate.ptr) {
+	struct pipe_transfer *transfer;
+
+	if (priv->map_count != 0)
+	    FatalError("doing ExaModifyPixmapHeader on mapped buffer\n");
+
+	transfer =
+	    exa->scrn->get_tex_transfer(exa->scrn, priv->tex, 0, 0, 0,
+					PIPE_TRANSFER_WRITE,
+					0, 0, width, height);
+        util_copy_rect(exa->scrn->transfer_map(exa->scrn, transfer),
+                       &priv->tex->block, transfer->stride, 0, 0,
+                       width, height, pPixmap->devPrivate.ptr, pPixmap->devKind, 0, 0);
+        exa->scrn->transfer_unmap(exa->scrn, transfer);
+        exa->scrn->tex_transfer_destroy(transfer);
     }
 
     return TRUE;




More information about the mesa-commit mailing list