From: Mike Blumenkrantz Date: Thu, 13 Apr 2023 17:48:54 +0000 (-0400) Subject: zink: move memoryTypeIndex selection down in general bo allocation X-Git-Tag: upstream/23.3.3~9944 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=085c9efbf3f12fca4cfb210e89d6f2f31f1ebe72;p=platform%2Fupstream%2Fmesa.git zink: move memoryTypeIndex selection down in general bo allocation no functional changes Part-of: --- diff --git a/src/gallium/drivers/zink/zink_resource.c b/src/gallium/drivers/zink/zink_resource.c index 5af0b0d..5922922 100644 --- a/src/gallium/drivers/zink/zink_resource.c +++ b/src/gallium/drivers/zink/zink_resource.c @@ -990,23 +990,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, @@ -1082,6 +1065,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) {