diff --git a/src/gallium/drivers/d3d12/d3d12_screen.cpp b/src/gallium/drivers/d3d12/d3d12_screen.cpp index 1f85ea21407..db92481a79f 100644 --- a/src/gallium/drivers/d3d12/d3d12_screen.cpp +++ b/src/gallium/drivers/d3d12/d3d12_screen.cpp @@ -703,6 +703,14 @@ d3d12_deinit_screen(struct d3d12_screen *screen) screen->cache_bufmgr->destroy(screen->cache_bufmgr); screen->cache_bufmgr = nullptr; } + if (screen->slab_cache_bufmgr) { + screen->slab_cache_bufmgr->destroy(screen->slab_cache_bufmgr); + screen->slab_cache_bufmgr = nullptr; + } + if (screen->readback_slab_cache_bufmgr) { + screen->readback_slab_cache_bufmgr->destroy(screen->readback_slab_cache_bufmgr); + screen->readback_slab_cache_bufmgr = nullptr; + } if (screen->bufmgr) { screen->bufmgr->destroy(screen->bufmgr); screen->bufmgr = nullptr; @@ -1418,15 +1426,23 @@ d3d12_init_screen(struct d3d12_screen *screen, IUnknown *adapter) if (!screen->cache_bufmgr) return false; - screen->slab_bufmgr = pb_slab_range_manager_create(screen->cache_bufmgr, 16, + screen->slab_cache_bufmgr = pb_cache_manager_create(screen->bufmgr, 0xfffff, 2, 0, 512 * 1024 * 1024); + if (!screen->slab_cache_bufmgr) + return false; + + screen->slab_bufmgr = pb_slab_range_manager_create(screen->slab_cache_bufmgr, 16, D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT, D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT, &desc); if (!screen->slab_bufmgr) return false; + + screen->readback_slab_cache_bufmgr = pb_cache_manager_create(screen->bufmgr, 0xfffff, 2, 0, 512 * 1024 * 1024); + if (!screen->readback_slab_cache_bufmgr) + return false; desc.usage = (pb_usage_flags)(PB_USAGE_CPU_READ_WRITE | PB_USAGE_GPU_WRITE); - screen->readback_slab_bufmgr = pb_slab_range_manager_create(screen->cache_bufmgr, 16, + screen->readback_slab_bufmgr = pb_slab_range_manager_create(screen->readback_slab_cache_bufmgr, 16, D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT, D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT, &desc); diff --git a/src/gallium/drivers/d3d12/d3d12_screen.h b/src/gallium/drivers/d3d12/d3d12_screen.h index 7d2dad93155..980ccad4134 100644 --- a/src/gallium/drivers/d3d12/d3d12_screen.h +++ b/src/gallium/drivers/d3d12/d3d12_screen.h @@ -84,7 +84,9 @@ struct d3d12_screen { struct slab_parent_pool transfer_pool; struct pb_manager *bufmgr; struct pb_manager *cache_bufmgr; + struct pb_manager *slab_cache_bufmgr; struct pb_manager *slab_bufmgr; + struct pb_manager *readback_slab_cache_bufmgr; struct pb_manager *readback_slab_bufmgr; mtx_t descriptor_pool_mutex;