From 9a8960de53ab21592510056bb9681991565564c8 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Fri, 30 Jul 2021 09:18:54 -0400 Subject: [PATCH] zink: determine whether the gpu has a resizable BAR at startup this can be used to make different allocation and mapping decisions Acked-by: Erik Faye-Lund Part-of: --- src/gallium/drivers/zink/zink_screen.c | 8 ++++++++ src/gallium/drivers/zink/zink_screen.h | 1 + 2 files changed, 9 insertions(+) diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c index 3df9edf6517..915673aff1e 100644 --- a/src/gallium/drivers/zink/zink_screen.c +++ b/src/gallium/drivers/zink/zink_screen.c @@ -1907,6 +1907,14 @@ zink_internal_create_screen(const struct pipe_screen_config *config) screen->heap_map[i] = screen->heap_map[ZINK_HEAP_HOST_VISIBLE_ANY]; } } + { + unsigned vis_vram = screen->heap_map[ZINK_HEAP_DEVICE_LOCAL_VISIBLE]; + unsigned vram = screen->heap_map[ZINK_HEAP_DEVICE_LOCAL]; + /* determine if vis vram is roughly equal to total vram */ + if (screen->info.mem_props.memoryHeaps[screen->info.mem_props.memoryTypes[vis_vram].heapIndex].size > + screen->info.mem_props.memoryHeaps[screen->info.mem_props.memoryTypes[vram].heapIndex].size * 0.9) + screen->resizable_bar = true; + } simple_mtx_init(&screen->surface_mtx, mtx_plain); simple_mtx_init(&screen->bufferview_mtx, mtx_plain); diff --git a/src/gallium/drivers/zink/zink_screen.h b/src/gallium/drivers/zink/zink_screen.h index feeb80cbe07..4f7a22094f4 100644 --- a/src/gallium/drivers/zink/zink_screen.h +++ b/src/gallium/drivers/zink/zink_screen.h @@ -109,6 +109,7 @@ struct zink_screen { uint32_t next_bo_unique_id; } pb; uint8_t heap_map[VK_MAX_MEMORY_TYPES]; + bool resizable_bar; uint64_t total_video_mem; uint64_t clamp_video_mem;