zink: correct sparse bo mem_type_idx placement
authorJulia Tatz <tatz.j@northeastern.edu>
Mon, 16 Jan 2023 20:34:47 +0000 (15:34 -0500)
committerEric Engestrom <eric@engestrom.ch>
Thu, 26 Jan 2023 15:40:33 +0000 (15:40 +0000)
VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT = 0x01 has been incidently the
correct memory type index, but isn't guaranteed to be, which is why it
hasn't caused issues yet

Fixes: f9515d93 ("zink: allocate/place memory using memoryTypeIndex directly")
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20264>
(cherry picked from commit c71287e70c2bf4aac96b24635e48ec13cd31fddf)

.pick_status.json
src/gallium/drivers/zink/zink_bo.c

index 099ebce..c4a39ab 100644 (file)
         "description": "zink: correct sparse bo mem_type_idx placement",
         "nominated": true,
         "nomination_type": 1,
-        "resolution": 0,
+        "resolution": 1,
         "main_sha": null,
         "because_sha": "f9515d9376752c0355de71957347e1241e3a226b"
     },
index f7cfbc6..011d1b8 100644 (file)
@@ -539,7 +539,9 @@ bo_sparse_create(struct zink_screen *screen, uint64_t size)
    bo->base.alignment_log2 = util_logbase2(ZINK_SPARSE_BUFFER_PAGE_SIZE);
    bo->base.size = size;
    bo->base.vtbl = &bo_sparse_vtbl;
-   bo->base.placement = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
+   unsigned placement = zink_mem_type_idx_from_bits(screen, ZINK_HEAP_DEVICE_LOCAL_SPARSE, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
+   assert(placement != UINT32_MAX);
+   bo->base.placement = placement;
    bo->unique_id = p_atomic_inc_return(&screen->pb.next_bo_unique_id);
    bo->base.usage = ZINK_ALLOC_SPARSE;