validation layer throws robin_hood::map overflow
Environment:
- OS: Windows, MacOS
- GPU and driver version: RTX 4070, M1 Pro
- SDK or header version if building from repo: Vulkan 1.3.290.0
- Options enabled (synchronization, best practices, etc.): VK_LAYER_KHRONOS_validation
Describe the Issue
validation layer throws robin_hood::map overflow when calling vkCreateDescriptorSetLayout
Expected behavior not throwing any exception, except reports a validation error if there is an actual error
Additional context
CreateDescriptorSetLayout is a thin wrapper of vkCreateDescriptorSetLayout
this screenshot shows the exception is thrown from VkLayer_khronos_validation.dll
My problem is solved by compiling validation layer libs and replaced the one in VulkanSDK. I used the 1.3.290.0 branch and the compile option is RelWithDebInfo with \O2 and \Ob1.
try compiled the lib the same way in MacOS, problem not solved
This does not seem entirely fixed. I get this with descriptor set layouts:
KERNELBASE.dll!RaiseException() Unknown
VCRUNTIME140.dll!_CxxThrowException(void * pExceptionObject, const _s__ThrowInfo * pThrowInfo) Line 82 C++
VkLayer_khronos_validation.dll!robin_hood::detail::Table<1,80,std::shared_ptr<vvl::DescriptorSetLayoutDef const>,void,hash_util::Dictionary<vvl::DescriptorSetLayoutDef,hash_util::HasHashMember<vvl::DescriptorSetLayoutDef>,std::equal_to<vvl::DescriptorSetLayoutDef>>::HashKeyValue,hash_util::Dictionary<vvl::DescriptorSetLayoutDef,hash_util::HasHashMember<vvl::DescriptorSetLayoutDef>,std::equal_to<vvl::DescriptorSetLayoutDef>>::KeyValueEqual>::throwOverflowError() Line 2253 C++
[Inline Frame] VkLayer_khronos_validation.dll!robin_hood::detail::Table<1,80,std::shared_ptr<vvl::DescriptorSetLayoutDef const>,void,hash_util::Dictionary<vvl::DescriptorSetLayoutDef,hash_util::HasHashMember<vvl::DescriptorSetLayoutDef>,std::equal_to<vvl::DescriptorSetLayoutDef>>::HashKeyValue,hash_util::Dictionary<vvl::DescriptorSetLayoutDef,hash_util::HasHashMember<vvl::DescriptorSetLayoutDef>,std::equal_to<vvl::DescriptorSetLayoutDef>>::KeyValueEqual>::insert_move(robin_hood::detail::Table<1,80,std::shared_ptr<vvl::DescriptorSetLayoutDef const>,void,hash_util::Dictionary<vvl::DescriptorSetLayoutDef,hash_util::HasHashMember<vvl::DescriptorSetLayoutDef>,std::equal_to<vvl::DescriptorSetLayoutDef>>::HashKeyValue,hash_util::Dictionary<vvl::DescriptorSetLayoutDef,hash_util::HasHashMember<vvl::DescriptorSetLayoutDef>,std::equal_to<vvl::DescriptorSetLayoutDef>>::KeyValueEqual>::DataNode<robin_hood::detail::Table<1,80,std::shared_ptr<vvl::DescriptorSetLayoutDef const>,void,hash_util::Dictionary<vvl::DescriptorSetLayoutDef,hash_util::HasHashMember<vvl::DescriptorSetLayoutDef>,std::equal_to<vvl::DescriptorSetLayoutDef>>::HashKeyValue,hash_util::Dictionary<vvl::DescriptorSetLayoutDef,hash_util::HasHashMember<vvl::DescriptorSetLayoutDef>,std::equal_to<vvl::DescriptorSetLayoutDef>>::KeyValueEqual>,1> &&) Line 1454 C++
VkLayer_khronos_validation.dll!robin_hood::detail::Table<1,80,std::shared_ptr<vvl::DescriptorSetLayoutDef const>,void,hash_util::Dictionary<vvl::DescriptorSetLayoutDef,hash_util::HasHashMember<vvl::DescriptorSetLayoutDef>,std::equal_to<vvl::DescriptorSetLayoutDef>>::HashKeyValue,hash_util::Dictionary<vvl::DescriptorSetLayoutDef,hash_util::HasHashMember<vvl::DescriptorSetLayoutDef>,std::equal_to<vvl::DescriptorSetLayoutDef>>::KeyValueEqual>::rehashPowerOfTwo(unsigned __int64 numBuckets, bool forceFree) Line 2231 C++
[Inline Frame] VkLayer_khronos_validation.dll!robin_hood::detail::Table<1,80,std::shared_ptr<vvl::DescriptorSetLayoutDef const>,void,hash_util::Dictionary<vvl::DescriptorSetLayoutDef,hash_util::HasHashMember<vvl::DescriptorSetLayoutDef>,std::equal_to<vvl::DescriptorSetLayoutDef>>::HashKeyValue,hash_util::Dictionary<vvl::DescriptorSetLayoutDef,hash_util::HasHashMember<vvl::DescriptorSetLayoutDef>,std::equal_to<vvl::DescriptorSetLayoutDef>>::KeyValueEqual>::increase_size() Line 2455 C++
VkLayer_khronos_validation.dll!robin_hood::detail::Table<1,80,std::shared_ptr<vvl::DescriptorSetLayoutDef const>,void,hash_util::Dictionary<vvl::DescriptorSetLayoutDef,hash_util::HasHashMember<vvl::DescriptorSetLayoutDef>,std::equal_to<vvl::DescriptorSetLayoutDef>>::HashKeyValue,hash_util::Dictionary<vvl::DescriptorSetLayoutDef,hash_util::HasHashMember<vvl::DescriptorSetLayoutDef>,std::equal_to<vvl::DescriptorSetLayoutDef>>::KeyValueEqual>::insertKeyPrepareEmptySpot<std::shared_ptr<vvl::DescriptorSetLayoutDef const> const &>(const std::shared_ptr<vvl::DescriptorSetLayoutDef const> & key) Line 2348 C++
[Inline Frame] VkLayer_khronos_validation.dll!robin_hood::detail::Table<1,80,std::shared_ptr<vvl::DescriptorSetLayoutDef const>,void,hash_util::Dictionary<vvl::DescriptorSetLayoutDef,hash_util::HasHashMember<vvl::DescriptorSetLayoutDef>,std::equal_to<vvl::DescriptorSetLayoutDef>>::HashKeyValue,hash_util::Dictionary<vvl::DescriptorSetLayoutDef,hash_util::HasHashMember<vvl::DescriptorSetLayoutDef>,std::equal_to<vvl::DescriptorSetLayoutDef>>::KeyValueEqual>::emplace(const std::shared_ptr<vvl::DescriptorSetLayoutDef const> &) Line 1799 C++
[Inline Frame] VkLayer_khronos_validation.dll!robin_hood::detail::Table<1,80,std::shared_ptr<vvl::DescriptorSetLayoutDef const>,void,hash_util::Dictionary<vvl::DescriptorSetLayoutDef,hash_util::HasHashMember<vvl::DescriptorSetLayoutDef>,std::equal_to<vvl::DescriptorSetLayoutDef>>::HashKeyValue,hash_util::Dictionary<vvl::DescriptorSetLayoutDef,hash_util::HasHashMember<vvl::DescriptorSetLayoutDef>,std::equal_to<vvl::DescriptorSetLayoutDef>>::KeyValueEqual>::insert(const std::shared_ptr<vvl::DescriptorSetLayoutDef const> &) Line 1875 C++
VkLayer_khronos_validation.dll!hash_util::Dictionary<vvl::DescriptorSetLayoutDef,hash_util::HasHashMember<vvl::DescriptorSetLayoutDef>,std::equal_to<vvl::DescriptorSetLayoutDef>>::LookUp<vvl::DescriptorSetLayoutDef>(vvl::DescriptorSetLayoutDef && value) Line 144 C++
VkLayer_khronos_validation.dll!GetCanonicalId(const VkDescriptorSetLayoutCreateInfo * p_create_info) Line 188 C++
VkLayer_khronos_validation.dll!vvl::DescriptorSetLayout::DescriptorSetLayout(const VkDescriptorSetLayoutCreateInfo * pCreateInfo, VkDescriptorSetLayout_T * const handle) Line 469 C++
[Inline Frame] VkLayer_khronos_validation.dll!std::_Construct_in_place(vvl::DescriptorSetLayout &) Line 142 C++
[Inline Frame] VkLayer_khronos_validation.dll!std::_Ref_count_obj2<vvl::DescriptorSetLayout>::{ctor}(const VkDescriptorSetLayoutCreateInfo * &) Line 2014 C++
> [Inline Frame] VkLayer_khronos_validation.dll!std::make_shared(const VkDescriptorSetLayoutCreateInfo * &) Line 2726 C++
VkLayer_khronos_validation.dll!vvl::Device::PostCallRecordCreateDescriptorSetLayout(VkDevice_T * device, const VkDescriptorSetLayoutCreateInfo * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkDescriptorSetLayout_T * * pSetLayout, const RecordObject & record_obj) Line 2348 C++
VkLayer_khronos_validation.dll!vulkan_layer_chassis::CreateDescriptorSetLayout(VkDevice_T * device, const VkDescriptorSetLayoutCreateInfo * pCreateInfo, const VkAllocationCallbacks * pAllocator, VkDescriptorSetLayout_T * * pSetLayout) Line 2288 C++
...
closing, we merged in https://github.com/KhronosGroup/Vulkan-ValidationLayers/pull/9790 and should be fixed now