summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLionel Landwerlin <[email protected]>2016-10-07 17:16:55 +0100
committerLionel Landwerlin <[email protected]>2016-10-07 18:46:12 +0100
commiteb23de61162d83238e0a93ff10e3f6bdafb364fb (patch)
treeb25829292aab24a09f4f41b01fb8a4be03cdf8f4 /src
parent965ebc8b286afee827b820479cc1714a2aeb46cc (diff)
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 <[email protected]> Reviewed-by: Jason Ekstrand <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/intel/vulkan/anv_pipeline_cache.c7
1 files changed, 5 insertions, 2 deletions
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(