From: Lionel Landwerlin Date: Fri, 7 Oct 2016 16:16:55 +0000 (+0100) Subject: anv: pipeline cache: fix return value of vkGetPipelineCacheData X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=eb23de61162d83238e0a93ff10e3f6bdafb364fb;p=mesa.git anv: pipeline cache: fix return value of vkGetPipelineCacheData According to the spec - 9.6. Pipeline Cache : If pDataSize is less than the maximum size that can be retrieved by the pipeline cache, at most pDataSize bytes will be written to pData, and vkGetPipelineCacheData will return VK_INCOMPLETE. Fixes the following test from Vulkan CTS : dEQP-VK.pipeline.cache.pipeline_from_incomplete_get_data.vertex_stage_fragment_stage dEQP-VK.pipeline.cache.pipeline_from_incomplete_get_data.vertex_stage_geometry_stage_fragment_stage dEQP-VK.pipeline.cache.misc_tests.invalid_size_test Signed-off-by: Lionel Landwerlin Reviewed-by: Jason Ekstrand --- diff --git a/src/intel/vulkan/anv_pipeline_cache.c b/src/intel/vulkan/anv_pipeline_cache.c index 2753c46fbde..6e3f0f2c1de 100644 --- a/src/intel/vulkan/anv_pipeline_cache.c +++ b/src/intel/vulkan/anv_pipeline_cache.c @@ -490,13 +490,16 @@ VkResult anv_GetPipelineCacheData( p += align_u32(sizeof(*count), 8); *count = 0; + VkResult result = VK_SUCCESS; if (cache->cache) { struct hash_entry *entry; hash_table_foreach(cache->cache, entry) { struct anv_shader_bin *shader = entry->data; size_t data_size = anv_shader_bin_data_size(entry->data); - if (p + data_size > end) + if (p + data_size > end) { + result = VK_INCOMPLETE; break; + } anv_shader_bin_write_data(shader, p); p += data_size; @@ -507,7 +510,7 @@ VkResult anv_GetPipelineCacheData( *pDataSize = p - pData; - return VK_SUCCESS; + return result; } VkResult anv_MergePipelineCaches(