diff options
author | Jordan Justen <jordan.l.justen@intel.com> | 2022-02-15 10:45:37 -0800 |
---|---|---|
committer | Dylan Baker <dylan.c.baker@intel.com> | 2022-02-25 13:09:36 -0800 |
commit | 94f5c307cb082fb30958e45ec994aca61d998256 (patch) | |
tree | dd87dba8b6487ef84a4ae0de174f86215ee0b16d | |
parent | de55b090e401efa0cde03b1f4aecbcb08d040936 (diff) |
anv: Align state pools to 2MiB on XeHP
Suggested-by: Jason Ekstrand <jason.ekstrand@collabora.com>
Fixes: c17e2216dd5 ("anv: Align buffer VMA to 2MiB for XeHP")
Signed-off-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Jason Ekstrand <jason.ekstrand@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15054>
(cherry picked from commit 0fffaa9fca93f6e9e8934b43d4aeb4594aea2202)
-rw-r--r-- | .pick_status.json | 2 | ||||
-rw-r--r-- | src/intel/vulkan/anv_allocator.c | 12 |
2 files changed, 12 insertions, 2 deletions
diff --git a/.pick_status.json b/.pick_status.json index dfd3d1fb9b8..29b9da7b623 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -634,7 +634,7 @@ "description": "anv: Align state pools to 2MiB on XeHP", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "c17e2216dd5f2ace77e44a8008b2b177d633b05e" }, diff --git a/src/intel/vulkan/anv_allocator.c b/src/intel/vulkan/anv_allocator.c index a7060e347ce..821eadba3c9 100644 --- a/src/intel/vulkan/anv_allocator.c +++ b/src/intel/vulkan/anv_allocator.c @@ -374,6 +374,12 @@ anv_block_pool_init(struct anv_block_pool *pool, { VkResult result; + if (device->info.verx10 >= 125) { + /* Make sure VMA addresses are 2MiB aligned for the block pool */ + assert(anv_is_aligned(start_address, 2 * 1024 * 1024)); + assert(anv_is_aligned(initial_size, 2 * 1024 * 1024)); + } + pool->name = name; pool->device = device; pool->use_relocations = anv_use_relocations(device->physical); @@ -838,9 +844,13 @@ anv_state_pool_init(struct anv_state_pool *pool, /* We don't want to ever see signed overflow */ assert(start_offset < INT32_MAX - (int32_t)BLOCK_POOL_MEMFD_SIZE); + uint32_t initial_size = block_size * 16; + if (device->info.verx10 >= 125) + initial_size = MAX2(initial_size, 2 * 1024 * 1024); + VkResult result = anv_block_pool_init(&pool->block_pool, device, name, base_address + start_offset, - block_size * 16); + initial_size); if (result != VK_SUCCESS) return result; |