Mesa (master): i965/miptree: Directly gtt map the mcs buffer

Lionel Landwerlin llandwerlin at kemper.freedesktop.org
Tue Nov 8 16:17:32 UTC 2016


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

Author: Ben Widawsky <benjamin.widawsky at intel.com>
Date:   Fri Oct 21 14:17:21 2016 +0100

i965/miptree: Directly gtt map the mcs buffer

The next patch will change the map type, and this will make sure there are no
regressions as a result of the other stuff. Since the miptree is newly created,
I believe it is always safe to just map.

It is possible to CPU map this buffer on LLC platforms (it additionally requires
rounding up to tile size). I did experiment with that patch, and found no
performance gains to be had.

I've added in error handling while here. Generally GTT mapping is an operation
which is highly unlikely to fail, but we may as well handle it when it does.

v2: rebase on master (Lionel)

v3: print out error if gtt mapping fails (Topi)

Signed-off-by: Ben Widawsky <benjamin.widawsky at intel.com> (v1)
Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com> (v2)
Reviewed-by: Topi Pohjolainen <topi.pohjolainen at intel.com>

---

 src/mesa/drivers/dri/i965/intel_mipmap_tree.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
index fa82d6e..7623d28 100644
--- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
+++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
@@ -1496,10 +1496,17 @@ intel_miptree_init_mcs(struct brw_context *brw,
     *
     * Note: the clear value for MCS buffers is all 1's, so we memset to 0xff.
     */
-   void *data = intel_miptree_map_raw(brw, mt->mcs_buf->mt);
+   const int ret = brw_bo_map_gtt(brw, mt->mcs_buf->bo, "miptree");
+   if (unlikely(ret)) {
+      fprintf(stderr, "Failed to map mcs buffer into GTT\n");
+      intel_miptree_release(&mt->mcs_buf->mt);
+      free(mt->mcs_buf);
+      return;
+   }
+   void *data = mt->mcs_buf->bo->virtual;
    memset(data, init_value,
           mt->mcs_buf->mt->total_height * mt->mcs_buf->mt->pitch);
-   intel_miptree_unmap_raw(mt->mcs_buf->mt);
+   drm_intel_bo_unmap(mt->mcs_buf->bo);
    mt->fast_clear_state = INTEL_FAST_CLEAR_STATE_CLEAR;
 }
 




More information about the mesa-commit mailing list