Module: Mesa Branch: staging/23.1 Commit: bb4dd78aa9f90c7bc7c4ae8f4733e32a439f37f4 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=bb4dd78aa9f90c7bc7c4ae8f4733e32a439f37f4
Author: Mike Blumenkrantz <[email protected]> Date: Thu Apr 13 13:48:54 2023 -0400 zink: move memoryTypeIndex selection down in general bo allocation no functional changes Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22567> --- src/gallium/drivers/zink/zink_resource.c | 36 +++++++++++++++++--------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/src/gallium/drivers/zink/zink_resource.c b/src/gallium/drivers/zink/zink_resource.c index 18886c6822b..ca830da37f2 100644 --- a/src/gallium/drivers/zink/zink_resource.c +++ b/src/gallium/drivers/zink/zink_resource.c @@ -985,23 +985,6 @@ resource_object_create(struct zink_screen *screen, const struct pipe_resource *t mai.pNext = NULL; mai.allocationSize = reqs.size; enum zink_heap heap = zink_heap_from_domain_flags(flags, aflags); - mai.memoryTypeIndex = zink_mem_type_idx_from_bits(screen, heap, reqs.memoryTypeBits); - if (mai.memoryTypeIndex == UINT32_MAX) { - /* not valid based on reqs; demote to more compatible type */ - switch (heap) { - case ZINK_HEAP_DEVICE_LOCAL_VISIBLE: - heap = ZINK_HEAP_DEVICE_LOCAL; - break; - case ZINK_HEAP_HOST_VISIBLE_CACHED: - heap = ZINK_HEAP_HOST_VISIBLE_COHERENT; - break; - default: - break; - } - mai.memoryTypeIndex = zink_mem_type_idx_from_bits(screen, heap, reqs.memoryTypeBits); - assert(mai.memoryTypeIndex != UINT32_MAX); - } - assert(reqs.memoryTypeBits & BITFIELD_BIT(mai.memoryTypeIndex)); VkMemoryDedicatedAllocateInfo ded_alloc_info = { .sType = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO, @@ -1077,6 +1060,25 @@ resource_object_create(struct zink_screen *screen, const struct pipe_resource *t if (templ->usage == PIPE_USAGE_STAGING && obj->is_buffer) alignment = MAX2(alignment, screen->info.props.limits.minMemoryMapAlignment); obj->alignment = alignment; + + mai.memoryTypeIndex = zink_mem_type_idx_from_bits(screen, heap, reqs.memoryTypeBits); + if (mai.memoryTypeIndex == UINT32_MAX) { + /* not valid based on reqs; demote to more compatible type */ + switch (heap) { + case ZINK_HEAP_DEVICE_LOCAL_VISIBLE: + heap = ZINK_HEAP_DEVICE_LOCAL; + break; + case ZINK_HEAP_HOST_VISIBLE_CACHED: + heap = ZINK_HEAP_HOST_VISIBLE_COHERENT; + break; + default: + break; + } + mai.memoryTypeIndex = zink_mem_type_idx_from_bits(screen, heap, reqs.memoryTypeBits); + assert(mai.memoryTypeIndex != UINT32_MAX); + } + assert(reqs.memoryTypeBits & BITFIELD_BIT(mai.memoryTypeIndex)); + retry: obj->bo = zink_bo(zink_bo_create(screen, reqs.size, alignment, heap, mai.pNext ? ZINK_ALLOC_NO_SUBALLOC : 0, mai.memoryTypeIndex, mai.pNext)); if (!obj->bo) {
