Mesa (main): iris: Replace bo->real.local with bo->real.heap
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue Dec 14 07:54:54 UTC 2021
Module: Mesa
Branch: main
Commit: 14ebd81ee36318a4d26b2d4250501a8a590dfaf0
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=14ebd81ee36318a4d26b2d4250501a8a590dfaf0
Author: Nanley Chery <nanley.g.chery at intel.com>
Date: Wed Dec 1 11:28:31 2021 -0500
iris: Replace bo->real.local with bo->real.heap
We'll want to describe more than two placement options for BOs. Switch
to using the more flexible heap enum.
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14012>
---
src/gallium/drivers/iris/iris_batch.c | 2 +-
src/gallium/drivers/iris/iris_bufmgr.c | 21 +++++++++++----------
src/gallium/drivers/iris/iris_bufmgr.h | 14 +++++++++++---
3 files changed, 23 insertions(+), 14 deletions(-)
diff --git a/src/gallium/drivers/iris/iris_batch.c b/src/gallium/drivers/iris/iris_batch.c
index cc452771bce..b0992bae937 100644
--- a/src/gallium/drivers/iris/iris_batch.c
+++ b/src/gallium/drivers/iris/iris_batch.c
@@ -113,7 +113,7 @@ dump_bo_list(struct iris_batch *batch)
backing->gem_handle,
bo->name,
bo->address,
- backing->real.local ? "local" : "system",
+ iris_heap_to_string[backing->real.heap],
bo->size,
bo->refcount,
written ? " write" : "",
diff --git a/src/gallium/drivers/iris/iris_bufmgr.c b/src/gallium/drivers/iris/iris_bufmgr.c
index 9feb45227ee..599d89da001 100644
--- a/src/gallium/drivers/iris/iris_bufmgr.c
+++ b/src/gallium/drivers/iris/iris_bufmgr.c
@@ -171,12 +171,6 @@ struct iris_memregion {
#define NUM_SLAB_ALLOCATORS 3
-enum iris_heap {
- IRIS_HEAP_SYSTEM_MEMORY,
- IRIS_HEAP_DEVICE_LOCAL,
- IRIS_HEAP_MAX,
-};
-
struct iris_slab {
struct pb_slab base;
@@ -960,7 +954,7 @@ alloc_fresh_bo(struct iris_bufmgr *bufmgr, uint64_t bo_size, bool local)
bo->bufmgr = bufmgr;
bo->size = bo_size;
bo->idle = true;
- bo->real.local = local;
+ bo->real.heap = local ? IRIS_HEAP_DEVICE_LOCAL : IRIS_HEAP_SYSTEM_MEMORY;
if (bufmgr->vram.size == 0) {
/* Calling set_domain() will allocate pages for the BO outside of the
@@ -979,6 +973,12 @@ alloc_fresh_bo(struct iris_bufmgr *bufmgr, uint64_t bo_size, bool local)
return bo;
}
+const char *
+iris_heap_to_string[IRIS_HEAP_MAX] = {
+ [IRIS_HEAP_SYSTEM_MEMORY] = "system",
+ [IRIS_HEAP_DEVICE_LOCAL] = "local",
+};
+
struct iris_bo *
iris_bo_alloc(struct iris_bufmgr *bufmgr,
const char *name,
@@ -1076,7 +1076,7 @@ iris_bo_alloc(struct iris_bufmgr *bufmgr,
}
DBG("bo_create: buf %d (%s) (%s memzone) (%s) %llub\n", bo->gem_handle,
- bo->name, memzone_name(memzone), bo->real.local ? "local" : "system",
+ bo->name, memzone_name(memzone), iris_heap_to_string[bo->real.heap],
(unsigned long long) size);
return bo;
@@ -1351,7 +1351,8 @@ bo_unreference_final(struct iris_bo *bo, time_t time)
bucket = NULL;
if (bo->real.reusable)
- bucket = bucket_for_size(bufmgr, bo->size, bo->real.local);
+ bucket = bucket_for_size(bufmgr, bo->size,
+ bo->real.heap != IRIS_HEAP_SYSTEM_MEMORY);
/* Put the buffer into our internal cache for reuse if we can. */
if (bucket && iris_bo_madvise(bo, I915_MADV_DONTNEED)) {
bo->real.free_time = time;
@@ -1478,7 +1479,7 @@ iris_bo_gem_mmap_offset(struct pipe_debug_callback *dbg, struct iris_bo *bo)
* across PCIe, it's always snooped. The only caching mode allowed by
* DG1 hardware for LMEM is WC.
*/
- if (bo->real.local)
+ if (bo->real.heap != IRIS_HEAP_SYSTEM_MEMORY)
assert(bo->real.mmap_mode == IRIS_MMAP_WC);
else
assert(bo->real.mmap_mode == IRIS_MMAP_WB);
diff --git a/src/gallium/drivers/iris/iris_bufmgr.h b/src/gallium/drivers/iris/iris_bufmgr.h
index e592b0d4fe9..9426ce439be 100644
--- a/src/gallium/drivers/iris/iris_bufmgr.h
+++ b/src/gallium/drivers/iris/iris_bufmgr.h
@@ -137,6 +137,14 @@ enum iris_mmap_mode {
IRIS_MMAP_WB, /**< Write-back mapping with CPU caches enabled */
};
+enum iris_heap {
+ IRIS_HEAP_SYSTEM_MEMORY,
+ IRIS_HEAP_DEVICE_LOCAL,
+ IRIS_HEAP_MAX,
+};
+
+extern const char *iris_heap_to_string[];
+
#define IRIS_BATCH_COUNT 2
struct iris_bo_screen_deps {
@@ -244,6 +252,9 @@ struct iris_bo {
/** The mmap coherency mode selected at BO allocation time */
enum iris_mmap_mode mmap_mode;
+ /** The heap selected at BO allocation time */
+ enum iris_heap heap;
+
/** Was this buffer imported from an external client? */
bool imported;
@@ -255,9 +266,6 @@ struct iris_bo {
/** Boolean of whether this buffer points into user memory */
bool userptr;
-
- /** Boolean of whether this was allocated from local memory */
- bool local;
} real;
struct {
struct pb_slab_entry entry;
More information about the mesa-commit
mailing list