summaryrefslogtreecommitdiffstats
path: root/src/intel
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2019-12-02 14:38:45 -0600
committerJason Ekstrand <[email protected]>2019-12-05 10:59:10 -0600
commit1037b52cf4c3613ab91e11f11245169aff5024c9 (patch)
treecc463bb57eb8ff74086015248d1a16202abc5c41 /src/intel
parenta4e3d8f0db965b3ca3e8e939397af4a930b48185 (diff)
anv: Stop tracking VMA allocations
util_vma_heap_alloc will already return 0 if it doesn't have enough space. The only thing the vma_*_available tracking was doing was preventing us from allocating too much on any given heap. Now that we're tracking that in the heap itself, we can drop these. Reviewed-by: Ivan Briano <[email protected]> Reviewed-by: Lionel Landwerlin <[email protected]>
Diffstat (limited to 'src/intel')
-rw-r--r--src/intel/vulkan/anv_device.c16
-rw-r--r--src/intel/vulkan/anv_private.h2
2 files changed, 5 insertions, 13 deletions
diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c
index f1d18619274..c50d182aa32 100644
--- a/src/intel/vulkan/anv_device.c
+++ b/src/intel/vulkan/anv_device.c
@@ -2557,13 +2557,12 @@ VkResult anv_CreateDevice(
struct anv_memory_heap *low_heap =
&physical_device->memory.heaps[physical_device->memory.heap_count - 1];
util_vma_heap_init(&device->vma_lo, low_heap->vma_start, low_heap->vma_size);
- device->vma_lo_available = low_heap->size;
struct anv_memory_heap *high_heap =
&physical_device->memory.heaps[0];
- util_vma_heap_init(&device->vma_hi, high_heap->vma_start, high_heap->vma_size);
- device->vma_hi_available = physical_device->memory.heap_count == 1 ? 0 :
- high_heap->size;
+ uint64_t high_heap_size =
+ physical_device->memory.heap_count == 1 ? 0 : high_heap->size;
+ util_vma_heap_init(&device->vma_hi, high_heap->vma_start, high_heap_size);
}
list_inithead(&device->memory_objects);
@@ -3019,22 +3018,19 @@ anv_vma_alloc(struct anv_device *device, struct anv_bo *bo)
bo->offset = 0;
- if (bo->flags & EXEC_OBJECT_SUPPORTS_48B_ADDRESS &&
- device->vma_hi_available >= bo->size) {
+ if (bo->flags & EXEC_OBJECT_SUPPORTS_48B_ADDRESS) {
uint64_t addr = util_vma_heap_alloc(&device->vma_hi, bo->size, 4096);
if (addr) {
bo->offset = gen_canonical_address(addr);
assert(addr == gen_48b_address(bo->offset));
- device->vma_hi_available -= bo->size;
}
}
- if (bo->offset == 0 && device->vma_lo_available >= bo->size) {
+ if (bo->offset == 0) {
uint64_t addr = util_vma_heap_alloc(&device->vma_lo, bo->size, 4096);
if (addr) {
bo->offset = gen_canonical_address(addr);
assert(addr == gen_48b_address(bo->offset));
- device->vma_lo_available -= bo->size;
}
}
@@ -3056,7 +3052,6 @@ anv_vma_free(struct anv_device *device, struct anv_bo *bo)
if (addr_48b >= LOW_HEAP_MIN_ADDRESS &&
addr_48b <= LOW_HEAP_MAX_ADDRESS) {
util_vma_heap_free(&device->vma_lo, addr_48b, bo->size);
- device->vma_lo_available += bo->size;
} else {
ASSERTED const struct anv_physical_device *physical_device =
&device->instance->physicalDevice;
@@ -3064,7 +3059,6 @@ anv_vma_free(struct anv_device *device, struct anv_bo *bo)
addr_48b < (physical_device->memory.heaps[0].vma_start +
physical_device->memory.heaps[0].vma_size));
util_vma_heap_free(&device->vma_hi, addr_48b, bo->size);
- device->vma_hi_available += bo->size;
}
pthread_mutex_unlock(&device->vma_mutex);
diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h
index 2abbb866b2f..e80fc2eed96 100644
--- a/src/intel/vulkan/anv_private.h
+++ b/src/intel/vulkan/anv_private.h
@@ -1214,8 +1214,6 @@ struct anv_device {
pthread_mutex_t vma_mutex;
struct util_vma_heap vma_lo;
struct util_vma_heap vma_hi;
- uint64_t vma_lo_available;
- uint64_t vma_hi_available;
/** List of all anv_device_memory objects */
struct list_head memory_objects;