aboutsummaryrefslogtreecommitdiff
path: root/layers/core_validation.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'layers/core_validation.cpp')
-rw-r--r--layers/core_validation.cpp24
1 files changed, 18 insertions, 6 deletions
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp
index 4fcb268b..f974395e 100644
--- a/layers/core_validation.cpp
+++ b/layers/core_validation.cpp
@@ -4517,14 +4517,26 @@ VKAPI_ATTR VkResult VKAPI_CALL GetValidationCacheDataEXT(VkDevice device, VkVali
}
VKAPI_ATTR VkResult VKAPI_CALL MergeValidationCachesEXT(VkDevice device, VkValidationCacheEXT dstCache, uint32_t srcCacheCount,
- const VkValidationCacheEXT *pSrcCaches) {
+ const VkValidationCacheEXT *pSrcCaches) {
+ layer_data *dev_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
+ bool skip = false;
auto dst = (ValidationCache *)dstCache;
- auto src = (ValidationCache const * const *)pSrcCaches;
-
- for (uint32_t i = 0; i < srcCacheCount; i++)
- dst->Merge(src[i]);
+ auto src = (ValidationCache const *const *)pSrcCaches;
+ VkResult result = VK_SUCCESS;
+ for (uint32_t i = 0; i < srcCacheCount; i++) {
+ if (src[i] == dst) {
+ skip |= log_msg(dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT,
+ 0, __LINE__, VALIDATION_ERROR_3e600c00, "DS",
+ "vkMergeValidationCachesEXT: dstCache (0x%" PRIxLEAST64 ") must not appear in pSrcCaches array. %s",
+ HandleToUint64(dstCache), validation_error_map[VALIDATION_ERROR_3e600c00]);
+ result = VK_ERROR_VALIDATION_FAILED_EXT;
+ }
+ if (!skip) {
+ dst->Merge(src[i]);
+ }
+ }
- return VK_SUCCESS;
+ return result;
}
// utility function to set collective state for pipeline