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 <ivan.briano@intel.com>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
This commit is contained in:
Jason Ekstrand
2019-12-02 14:38:45 -06:00
parent a4e3d8f0db
commit 1037b52cf4
2 changed files with 5 additions and 13 deletions

View File

@@ -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);

View File

@@ -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;