Mesa (master): nv50/nvc0: make transfers aware of PIPE_TRANSFER_MAP_DIRECTLY

Christoph Bumiller chrisbmr at kemper.freedesktop.org
Mon May 9 18:19:20 UTC 2011


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

Author: Marcin Slusarz <marcin.slusarz at gmail.com>
Date:   Mon May  9 20:12:38 2011 +0200

nv50/nvc0: make transfers aware of PIPE_TRANSFER_MAP_DIRECTLY

If state tracker asked us to map resource directly and we can't
do it (because of tiling), return NULL instead of doing full transfer
- state tracker should handle it and fallback to some other method
or repeat transfer without PIPE_TRANSFER_MAP_DIRECTLY.

It greatly improves performance of xorg state tracker on nv50+,
because its fallback (DFS/UTS) is much faster than full transfer.

---

 src/gallium/drivers/nv50/nv50_transfer.c |    3 +++
 src/gallium/drivers/nvc0/nvc0_transfer.c |    3 +++
 2 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/src/gallium/drivers/nv50/nv50_transfer.c b/src/gallium/drivers/nv50/nv50_transfer.c
index 7486977..d9fb22a 100644
--- a/src/gallium/drivers/nv50/nv50_transfer.c
+++ b/src/gallium/drivers/nv50/nv50_transfer.c
@@ -209,6 +209,9 @@ nv50_miptree_transfer_new(struct pipe_context *pctx,
    uint32_t w, h, d, z, layer;
    int ret;
 
+   if (usage & PIPE_TRANSFER_MAP_DIRECTLY)
+      return NULL;
+
    if (mt->layout_3d) {
       z = box->z;
       d = u_minify(res->depth0, level);
diff --git a/src/gallium/drivers/nvc0/nvc0_transfer.c b/src/gallium/drivers/nvc0/nvc0_transfer.c
index 7bbfe05..0509113 100644
--- a/src/gallium/drivers/nvc0/nvc0_transfer.c
+++ b/src/gallium/drivers/nvc0/nvc0_transfer.c
@@ -246,6 +246,9 @@ nvc0_miptree_transfer_new(struct pipe_context *pctx,
    uint32_t w, h, d, z, layer;
    int ret;
 
+   if (usage & PIPE_TRANSFER_MAP_DIRECTLY)
+      return NULL;
+
    tx = CALLOC_STRUCT(nvc0_transfer);
    if (!tx)
       return NULL;




More information about the mesa-commit mailing list