summaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers
diff options
context:
space:
mode:
authorBen Widawsky <[email protected]>2016-10-21 14:17:21 +0100
committerLionel Landwerlin <[email protected]>2016-11-08 16:13:57 +0000
commit42db7ab1794e3de24acb15593db93c4f6d57ae32 (patch)
treeee203334cc2d6df5a92415f83a8386ee3918862d /src/mesa/drivers
parent0041169cacb300a882b4dc38cd341f98bf2a7c38 (diff)
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 <[email protected]> (v1) Signed-off-by: Lionel Landwerlin <[email protected]> (v2) Reviewed-by: Topi Pohjolainen <[email protected]>
Diffstat (limited to 'src/mesa/drivers')
-rw-r--r--src/mesa/drivers/dri/i965/intel_mipmap_tree.c11
1 files 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 fa82d6e4423..7623d28aad1 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;
}