diff options
| author | Cort Stratton <cort@google.com> | 2017-11-22 17:23:16 -0800 |
|---|---|---|
| committer | Chris Forbes <chrisf@ijw.co.nz> | 2017-11-28 16:27:21 -0800 |
| commit | d6013eb6cb6409067170c1f50916c11f7c7c6ce4 (patch) | |
| tree | f6f8c9f1a743b603128989840563a7a1027d479e /layers/core_validation.cpp | |
| parent | aacfb0e601e7140ca9741cd0ba147aca6b152fa9 (diff) | |
| download | usermoji-d6013eb6cb6409067170c1f50916c11f7c7c6ce4.tar.xz | |
layers: Check EXT_validation_cache's sole non-trivial VU
A cache can't be merged with itself.
Diffstat (limited to 'layers/core_validation.cpp')
| -rw-r--r-- | layers/core_validation.cpp | 24 |
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 |
