diff --git a/src/gallium/drivers/zink/zink_bo.c b/src/gallium/drivers/zink/zink_bo.c index 74dfe28d5cf..5c70480f84f 100644 --- a/src/gallium/drivers/zink/zink_bo.c +++ b/src/gallium/drivers/zink/zink_bo.c @@ -310,7 +310,7 @@ demote: bo->base.alignment_log2 = util_logbase2(alignment); bo->base.size = mai.allocationSize; bo->base.vtbl = &bo_vtbl; - bo->base.placement = vk_domain_from_heap(heap); + bo->base.placement = screen->heap_flags[heap]; bo->base.usage = flags; bo->unique_id = p_atomic_inc_return(&screen->pb.next_bo_unique_id); diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c index 53a1ba65db0..21a47629c67 100644 --- a/src/gallium/drivers/zink/zink_screen.c +++ b/src/gallium/drivers/zink/zink_screen.c @@ -2312,6 +2312,7 @@ zink_internal_create_screen(const struct pipe_screen_config *config) else screen->heap_map[i] = screen->heap_map[ZINK_HEAP_DEVICE_LOCAL]; } + screen->heap_flags[i] = screen->info.mem_props.memoryTypes[screen->heap_map[i]].propertyFlags; } { unsigned vis_vram = screen->heap_map[ZINK_HEAP_DEVICE_LOCAL_VISIBLE]; diff --git a/src/gallium/drivers/zink/zink_screen.h b/src/gallium/drivers/zink/zink_screen.h index a40004e4200..e5f7866da4e 100644 --- a/src/gallium/drivers/zink/zink_screen.h +++ b/src/gallium/drivers/zink/zink_screen.h @@ -131,6 +131,7 @@ struct zink_screen { uint32_t next_bo_unique_id; } pb; uint8_t heap_map[VK_MAX_MEMORY_TYPES]; + VkMemoryPropertyFlags heap_flags[VK_MAX_MEMORY_TYPES]; bool resizable_bar; uint64_t total_video_mem;