zink: restore BAR allocation failure demotion

this restores the fallback used when BAR allocation fails due to oom
by re-selecting memoryTypeIndex after the heap demotion

Fixes: f6d3a5755f ("zink: zink_heap isn't 1-to-1 with memoryTypeIndex")
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22479>
This commit is contained in:
Mike Blumenkrantz 2023-04-13 13:56:55 -04:00 committed by Marge Bot
parent 561b64cf55
commit 9d923b14f9

View file

@ -1080,10 +1080,10 @@ resource_object_create(struct zink_screen *screen, const struct pipe_resource *t
}
assert(zink_mem_type_idx_from_bits(screen, heap, reqs.memoryTypeBits) != UINT32_MAX);
}
mai.memoryTypeIndex = zink_mem_type_idx_from_bits(screen, heap, reqs.memoryTypeBits);
assert(reqs.memoryTypeBits & BITFIELD_BIT(mai.memoryTypeIndex));
retry:
mai.memoryTypeIndex = zink_mem_type_idx_from_bits(screen, heap, reqs.memoryTypeBits);
assert(reqs.memoryTypeBits & BITFIELD_BIT(mai.memoryTypeIndex));
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) {
if (heap == ZINK_HEAP_DEVICE_LOCAL_VISIBLE) {