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@whitecape.org> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14012>
This commit is contained in:
parent
f93892c5d3
commit
14ebd81ee3
|
@ -113,7 +113,7 @@ dump_bo_list(struct iris_batch *batch)
|
||||||
backing->gem_handle,
|
backing->gem_handle,
|
||||||
bo->name,
|
bo->name,
|
||||||
bo->address,
|
bo->address,
|
||||||
backing->real.local ? "local" : "system",
|
iris_heap_to_string[backing->real.heap],
|
||||||
bo->size,
|
bo->size,
|
||||||
bo->refcount,
|
bo->refcount,
|
||||||
written ? " write" : "",
|
written ? " write" : "",
|
||||||
|
|
|
@ -171,12 +171,6 @@ struct iris_memregion {
|
||||||
|
|
||||||
#define NUM_SLAB_ALLOCATORS 3
|
#define NUM_SLAB_ALLOCATORS 3
|
||||||
|
|
||||||
enum iris_heap {
|
|
||||||
IRIS_HEAP_SYSTEM_MEMORY,
|
|
||||||
IRIS_HEAP_DEVICE_LOCAL,
|
|
||||||
IRIS_HEAP_MAX,
|
|
||||||
};
|
|
||||||
|
|
||||||
struct iris_slab {
|
struct iris_slab {
|
||||||
struct pb_slab base;
|
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->bufmgr = bufmgr;
|
||||||
bo->size = bo_size;
|
bo->size = bo_size;
|
||||||
bo->idle = true;
|
bo->idle = true;
|
||||||
bo->real.local = local;
|
bo->real.heap = local ? IRIS_HEAP_DEVICE_LOCAL : IRIS_HEAP_SYSTEM_MEMORY;
|
||||||
|
|
||||||
if (bufmgr->vram.size == 0) {
|
if (bufmgr->vram.size == 0) {
|
||||||
/* Calling set_domain() will allocate pages for the BO outside of the
|
/* 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;
|
return bo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *
|
||||||
|
iris_heap_to_string[IRIS_HEAP_MAX] = {
|
||||||
|
[IRIS_HEAP_SYSTEM_MEMORY] = "system",
|
||||||
|
[IRIS_HEAP_DEVICE_LOCAL] = "local",
|
||||||
|
};
|
||||||
|
|
||||||
struct iris_bo *
|
struct iris_bo *
|
||||||
iris_bo_alloc(struct iris_bufmgr *bufmgr,
|
iris_bo_alloc(struct iris_bufmgr *bufmgr,
|
||||||
const char *name,
|
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,
|
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);
|
(unsigned long long) size);
|
||||||
|
|
||||||
return bo;
|
return bo;
|
||||||
|
@ -1351,7 +1351,8 @@ bo_unreference_final(struct iris_bo *bo, time_t time)
|
||||||
|
|
||||||
bucket = NULL;
|
bucket = NULL;
|
||||||
if (bo->real.reusable)
|
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. */
|
/* Put the buffer into our internal cache for reuse if we can. */
|
||||||
if (bucket && iris_bo_madvise(bo, I915_MADV_DONTNEED)) {
|
if (bucket && iris_bo_madvise(bo, I915_MADV_DONTNEED)) {
|
||||||
bo->real.free_time = time;
|
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
|
* across PCIe, it's always snooped. The only caching mode allowed by
|
||||||
* DG1 hardware for LMEM is WC.
|
* 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);
|
assert(bo->real.mmap_mode == IRIS_MMAP_WC);
|
||||||
else
|
else
|
||||||
assert(bo->real.mmap_mode == IRIS_MMAP_WB);
|
assert(bo->real.mmap_mode == IRIS_MMAP_WB);
|
||||||
|
|
|
@ -137,6 +137,14 @@ enum iris_mmap_mode {
|
||||||
IRIS_MMAP_WB, /**< Write-back mapping with CPU caches enabled */
|
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
|
#define IRIS_BATCH_COUNT 2
|
||||||
|
|
||||||
struct iris_bo_screen_deps {
|
struct iris_bo_screen_deps {
|
||||||
|
@ -244,6 +252,9 @@ struct iris_bo {
|
||||||
/** The mmap coherency mode selected at BO allocation time */
|
/** The mmap coherency mode selected at BO allocation time */
|
||||||
enum iris_mmap_mode mmap_mode;
|
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? */
|
/** Was this buffer imported from an external client? */
|
||||||
bool imported;
|
bool imported;
|
||||||
|
|
||||||
|
@ -255,9 +266,6 @@ struct iris_bo {
|
||||||
|
|
||||||
/** Boolean of whether this buffer points into user memory */
|
/** Boolean of whether this buffer points into user memory */
|
||||||
bool userptr;
|
bool userptr;
|
||||||
|
|
||||||
/** Boolean of whether this was allocated from local memory */
|
|
||||||
bool local;
|
|
||||||
} real;
|
} real;
|
||||||
struct {
|
struct {
|
||||||
struct pb_slab_entry entry;
|
struct pb_slab_entry entry;
|
||||||
|
|
Loading…
Reference in New Issue