diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c index 8ccd585c1d3..a611512b3c5 100644 --- a/src/intel/vulkan/anv_device.c +++ b/src/intel/vulkan/anv_device.c @@ -3918,6 +3918,8 @@ void anv_DestroyDevice( anv_state_pool_free(&device->dynamic_state_pool, device->slice_hash); anv_state_pool_free(&device->dynamic_state_pool, device->cps_states); anv_state_pool_free(&device->dynamic_state_pool, device->breakpoint); + if (device->vk.enabled_extensions.EXT_descriptor_buffer) + anv_state_pool_free(&device->dynamic_state_db_pool, device->slice_hash_db); #endif for (unsigned i = 0; i < ARRAY_SIZE(device->rt_scratch_bos); i++) { diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index b4a36292fce..9663475f496 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -1776,6 +1776,7 @@ struct anv_device { struct anv_state border_colors; struct anv_state slice_hash; + struct anv_state slice_hash_db; /** An array of CPS_STATE structures grouped by MAX_VIEWPORTS elements * diff --git a/src/intel/vulkan/genX_init_state.c b/src/intel/vulkan/genX_init_state.c index a6bd444cf03..8b0effb377e 100644 --- a/src/intel/vulkan/genX_init_state.c +++ b/src/intel/vulkan/genX_init_state.c @@ -818,6 +818,17 @@ genX(init_device_state)(struct anv_device *device) return res; } + if (device->vk.enabled_extensions.EXT_descriptor_buffer && + device->slice_hash.alloc_size) { + device->slice_hash_db = + anv_state_pool_alloc(&device->dynamic_state_db_pool, + device->slice_hash.alloc_size, 64); + + memcpy(device->slice_hash_db.map, + device->slice_hash.map, + device->slice_hash.alloc_size); + } + return res; }