diff --git a/src/gallium/drivers/zink/ci/zink-anv-tgl-fails.txt b/src/gallium/drivers/zink/ci/zink-anv-tgl-fails.txt index ba6631a1c96..a6078969657 100644 --- a/src/gallium/drivers/zink/ci/zink-anv-tgl-fails.txt +++ b/src/gallium/drivers/zink/ci/zink-anv-tgl-fails.txt @@ -607,3 +607,7 @@ KHR-GL46.sparse_texture2_tests.SparseTexture2Lookup,Crash spec@arb_shader_storage_buffer_object@max-ssbo-size@fs,Crash spec@arb_shader_storage_buffer_object@max-ssbo-size@vs,Crash +# Failing on a bunch of drivers with an assert on the weak_ref +# pipeline cache, seems to be a zink issue not destroying a +# shader/pipeline before calling vkDestroyPipeline() +spec@ext_external_objects@vk-vert-buf-reuse,Crash diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c index cbe665eb4e4..8ad497da043 100644 --- a/src/intel/vulkan/anv_device.c +++ b/src/intel/vulkan/anv_device.c @@ -3796,7 +3796,7 @@ VkResult anv_CreateDevice( if (result != VK_SUCCESS) goto fail_btd_fifo_bo; - struct vk_pipeline_cache_create_info pcc_info = { }; + struct vk_pipeline_cache_create_info pcc_info = { .weak_ref = true, }; device->vk.mem_cache = vk_pipeline_cache_create(&device->vk, &pcc_info, NULL); if (!device->vk.mem_cache) { @@ -3809,9 +3809,12 @@ VkResult anv_CreateDevice( * shaders to remain resident while it runs. Therefore, we need a special * cache just for BLORP/RT that's forced to always be enabled. */ - pcc_info.force_enable = true; + struct vk_pipeline_cache_create_info internal_pcc_info = { + .force_enable = true, + .weak_ref = false, + }; device->internal_cache = - vk_pipeline_cache_create(&device->vk, &pcc_info, NULL); + vk_pipeline_cache_create(&device->vk, &internal_pcc_info, NULL); if (device->internal_cache == NULL) { result = vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY); goto fail_default_pipeline_cache;