diff options
| author | Chris Forbes <chrisforbes@google.com> | 2017-07-24 15:35:29 -0700 |
|---|---|---|
| committer | Chris Forbes <chrisf@ijw.co.nz> | 2017-11-28 16:27:21 -0800 |
| commit | 0f36ac54143b3166c52952840ed71bf9ce041626 (patch) | |
| tree | 7494b386c353497790b52975cac1b394ba163d90 /layers/core_validation.cpp | |
| parent | a21af959330b04bf065369063c9f384a0391ab9f (diff) | |
| download | usermoji-0f36ac54143b3166c52952840ed71bf9ce041626.tar.xz | |
layers: Add VK_EXT_validation_cache implementation for shaders
Diffstat (limited to 'layers/core_validation.cpp')
| -rw-r--r-- | layers/core_validation.cpp | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp index c3431c6e..4fcb268b 100644 --- a/layers/core_validation.cpp +++ b/layers/core_validation.cpp @@ -195,6 +195,10 @@ static const VkLayerProperties global_layer = { "VK_LAYER_LUNARG_core_validation", VK_LAYER_API_VERSION, 1, "LunarG Validation Layer", }; +static const VkExtensionProperties device_extensions[] = { + { VK_EXT_VALIDATION_CACHE_EXTENSION_NAME, VK_EXT_VALIDATION_CACHE_SPEC_VERSION }, +}; + template <class TCreateInfo> void ValidateLayerOrdering(const TCreateInfo &createInfo) { bool foundLayer = false; @@ -4492,6 +4496,37 @@ VKAPI_ATTR VkResult VKAPI_CALL MergePipelineCaches(VkDevice device, VkPipelineCa return result; } +// Validation cache: +// CV is the bottommost implementor of this extension. Don't pass calls down. +VKAPI_ATTR VkResult VKAPI_CALL CreateValidationCacheEXT(VkDevice device, const VkValidationCacheCreateInfoEXT *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkValidationCacheEXT *pValidationCache) { + *pValidationCache = ValidationCache::Create(pCreateInfo); + return *pValidationCache ? VK_SUCCESS : VK_ERROR_INITIALIZATION_FAILED; +} + +VKAPI_ATTR void VKAPI_CALL DestroyValidationCacheEXT(VkDevice device, VkValidationCacheEXT validationCache, + const VkAllocationCallbacks *pAllocator) { + delete (ValidationCache *)validationCache; +} + +VKAPI_ATTR VkResult VKAPI_CALL GetValidationCacheDataEXT(VkDevice device, VkValidationCacheEXT validationCache, size_t *pDataSize, + void *pData) { + size_t inSize = *pDataSize; + ((ValidationCache *)validationCache)->Write(pDataSize, pData); + return (pData && *pDataSize != inSize) ? VK_INCOMPLETE : VK_SUCCESS; +} + +VKAPI_ATTR VkResult VKAPI_CALL MergeValidationCachesEXT(VkDevice device, VkValidationCacheEXT dstCache, uint32_t srcCacheCount, + const VkValidationCacheEXT *pSrcCaches) { + auto dst = (ValidationCache *)dstCache; + auto src = (ValidationCache const * const *)pSrcCaches; + + for (uint32_t i = 0; i < srcCacheCount; i++) + dst->Merge(src[i]); + + return VK_SUCCESS; +} + // utility function to set collective state for pipeline void set_pipeline_state(PIPELINE_STATE *pPipe) { // If any attachment used by this pipeline has blendEnable, set top-level blendEnable @@ -10639,7 +10674,7 @@ VKAPI_ATTR VkResult VKAPI_CALL EnumerateInstanceExtensionProperties(const char * VKAPI_ATTR VkResult VKAPI_CALL EnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char *pLayerName, uint32_t *pCount, VkExtensionProperties *pProperties) { - if (pLayerName && !strcmp(pLayerName, global_layer.layerName)) return util_GetExtensionProperties(0, NULL, pCount, pProperties); + if (pLayerName && !strcmp(pLayerName, global_layer.layerName)) return util_GetExtensionProperties(1, device_extensions, pCount, pProperties); assert(physicalDevice); @@ -11092,6 +11127,10 @@ static const std::unordered_map<std::string, void *> name_to_funcptr_map = { {"vkGetSemaphoreFdKHR", (void*)GetSemaphoreFdKHR}, {"vkImportFenceFdKHR", (void*)ImportFenceFdKHR}, {"vkGetFenceFdKHR", (void*)GetFenceFdKHR}, + {"vkCreateValidationCacheEXT", (void*)CreateValidationCacheEXT}, + {"vkDestroyValidationCacheEXT", (void*)DestroyValidationCacheEXT}, + {"vkGetValidationCacheDataEXT", (void*)GetValidationCacheDataEXT}, + {"vkMergeValidationCachesEXT", (void*)MergeValidationCachesEXT}, }; VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetDeviceProcAddr(VkDevice device, const char *funcName) { |
