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 <lionel.g.landwerlin@intel.com> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
@@ -490,13 +490,16 @@ VkResult anv_GetPipelineCacheData(
|
|||||||
p += align_u32(sizeof(*count), 8);
|
p += align_u32(sizeof(*count), 8);
|
||||||
*count = 0;
|
*count = 0;
|
||||||
|
|
||||||
|
VkResult result = VK_SUCCESS;
|
||||||
if (cache->cache) {
|
if (cache->cache) {
|
||||||
struct hash_entry *entry;
|
struct hash_entry *entry;
|
||||||
hash_table_foreach(cache->cache, entry) {
|
hash_table_foreach(cache->cache, entry) {
|
||||||
struct anv_shader_bin *shader = entry->data;
|
struct anv_shader_bin *shader = entry->data;
|
||||||
size_t data_size = anv_shader_bin_data_size(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;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
anv_shader_bin_write_data(shader, p);
|
anv_shader_bin_write_data(shader, p);
|
||||||
p += data_size;
|
p += data_size;
|
||||||
@@ -507,7 +510,7 @@ VkResult anv_GetPipelineCacheData(
|
|||||||
|
|
||||||
*pDataSize = p - pData;
|
*pDataSize = p - pData;
|
||||||
|
|
||||||
return VK_SUCCESS;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
VkResult anv_MergePipelineCaches(
|
VkResult anv_MergePipelineCaches(
|
||||||
|
Reference in New Issue
Block a user