Mesa (main): iris: Add a new IRIS_MMAP_NONE map type
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Thu Aug 12 20:00:55 UTC 2021
Module: Mesa
Branch: main
Commit: 188cddfb3897da004b98d0136790df5c10ac8353
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=188cddfb3897da004b98d0136790df5c10ac8353
Author: Jason Ekstrand <jason at jlekstrand.net>
Date: Thu Jul 22 15:29:16 2021 -0500
iris: Add a new IRIS_MMAP_NONE map type
This indicates that the buffer can never be mapped. We use this
primarily for imported BOs.
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11888>
---
src/gallium/drivers/iris/iris_bufmgr.c | 9 +++++++--
src/gallium/drivers/iris/iris_bufmgr.h | 1 +
src/gallium/drivers/iris/iris_resource.c | 5 +++--
3 files changed, 11 insertions(+), 4 deletions(-)
diff --git a/src/gallium/drivers/iris/iris_bufmgr.c b/src/gallium/drivers/iris/iris_bufmgr.c
index 7dfb2cc8df3..8d1ee2a3d76 100644
--- a/src/gallium/drivers/iris/iris_bufmgr.c
+++ b/src/gallium/drivers/iris/iris_bufmgr.c
@@ -801,7 +801,7 @@ iris_bo_gem_create_from_name(struct iris_bufmgr *bufmgr,
bo->global_name = handle;
bo->reusable = false;
bo->imported = true;
- bo->mmap_mode = IRIS_MMAP_WC;
+ bo->mmap_mode = IRIS_MMAP_NONE;
bo->kflags = EXEC_OBJECT_SUPPORTS_48B_ADDRESS | EXEC_OBJECT_PINNED;
bo->address = vma_alloc(bufmgr, IRIS_MEMZONE_OTHER, bo->size, 1);
@@ -1051,6 +1051,7 @@ iris_bo_gem_mmap_offset(struct pipe_debug_callback *dbg, struct iris_bo *bo)
[IRIS_MMAP_WC] = I915_MMAP_OFFSET_WC,
[IRIS_MMAP_WB] = I915_MMAP_OFFSET_WB,
};
+ assert(bo->mmap_mode != IRIS_MMAP_NONE);
assert(bo->mmap_mode < ARRAY_SIZE(mmap_offset_for_mode));
mmap_arg.flags = mmap_offset_for_mode[bo->mmap_mode];
@@ -1080,6 +1081,10 @@ iris_bo_map(struct pipe_debug_callback *dbg,
{
struct iris_bufmgr *bufmgr = bo->bufmgr;
+ assert(bo->mmap_mode != IRIS_MMAP_NONE);
+ if (bo->mmap_mode == IRIS_MMAP_NONE)
+ return NULL;
+
if (!bo->map) {
DBG("iris_bo_map: %d (%s)\n", bo->gem_handle, bo->name);
void *map = bufmgr->has_mmap_offset ? iris_bo_gem_mmap_offset(dbg, bo)
@@ -1306,7 +1311,7 @@ iris_bo_import_dmabuf(struct iris_bufmgr *bufmgr, int prime_fd)
bo->name = "prime";
bo->reusable = false;
bo->imported = true;
- bo->mmap_mode = IRIS_MMAP_WC;
+ bo->mmap_mode = IRIS_MMAP_NONE;
bo->kflags = EXEC_OBJECT_SUPPORTS_48B_ADDRESS | EXEC_OBJECT_PINNED;
/* From the Bspec, Memory Compression - Gfx12:
diff --git a/src/gallium/drivers/iris/iris_bufmgr.h b/src/gallium/drivers/iris/iris_bufmgr.h
index 57046d2df34..1f43456bae4 100644
--- a/src/gallium/drivers/iris/iris_bufmgr.h
+++ b/src/gallium/drivers/iris/iris_bufmgr.h
@@ -123,6 +123,7 @@ iris_domain_is_read_only(enum iris_domain access)
}
enum iris_mmap_mode {
+ IRIS_MMAP_NONE, /**< Cannot be mapped */
IRIS_MMAP_UC, /**< Fully uncached memory map */
IRIS_MMAP_WC, /**< Write-combining map with no caching of reads */
IRIS_MMAP_WB, /**< Write-back mapping with CPU caches enabled */
diff --git a/src/gallium/drivers/iris/iris_resource.c b/src/gallium/drivers/iris/iris_resource.c
index cc32a64559c..b6cd0bcc03f 100644
--- a/src/gallium/drivers/iris/iris_resource.c
+++ b/src/gallium/drivers/iris/iris_resource.c
@@ -2087,7 +2087,7 @@ iris_transfer_map(struct pipe_context *ctx,
if (usage & PIPE_MAP_WRITE)
util_range_add(&res->base.b, &res->valid_buffer_range, box->x, box->x + box->width);
- if (!res->bo->imported) {
+ if (res->bo->mmap_mode != IRIS_MMAP_NONE) {
/* GPU copies are not useful for buffer reads. Instead of stalling to
* read from the original buffer, we'd simply copy it to a temporary...
* then stall (a bit longer) to read from that buffer.
@@ -2257,7 +2257,8 @@ iris_texture_subdata(struct pipe_context *ctx,
*/
if (surf->tiling == ISL_TILING_LINEAR ||
isl_aux_usage_has_compression(res->aux.usage) ||
- resource_is_busy(ice, res)) {
+ resource_is_busy(ice, res) ||
+ res->bo->mmap_mode == IRIS_MMAP_NONE) {
return u_default_texture_subdata(ctx, resource, level, usage, box,
data, stride, layer_stride);
}
More information about the mesa-commit
mailing list