layers: Correct 32bit handling of ValidationCache
Updated handle casting for Validation object to size-safe/portable
calls. Corrected incorrect loop increment for 64bit handles cast to
32bit pointers.
Change-Id: I459a0f37426ec5656e228e91b4b116e7dacc0e3d
diff --git a/layers/shader_validation.cpp b/layers/shader_validation.cpp
index 3cbe518..3482a18 100644
--- a/layers/shader_validation.cpp
+++ b/layers/shader_validation.cpp
@@ -2532,11 +2532,10 @@
uint32_t ValidationCache::MakeShaderHash(VkShaderModuleCreateInfo const *smci) { return XXH32(smci->pCode, smci->codeSize, 0); }
static ValidationCache *GetValidationCacheInfo(VkShaderModuleCreateInfo const *pCreateInfo) {
- while ((pCreateInfo = (VkShaderModuleCreateInfo const *)pCreateInfo->pNext) != nullptr) {
- if (pCreateInfo->sType == VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT)
- return (ValidationCache *)((VkShaderModuleValidationCacheCreateInfoEXT const *)pCreateInfo)->validationCache;
+ const auto validation_cache_ci = lvl_find_in_chain<VkShaderModuleValidationCacheCreateInfoEXT>(pCreateInfo->pNext);
+ if (validation_cache_ci) {
+ return CastFromHandle<VkValidationCacheEXT, ValidationCache *>(validation_cache_ci->validationCache);
}
-
return nullptr;
}