Vulkan-ValidationLayers icon indicating copy to clipboard operation
Vulkan-ValidationLayers copied to clipboard

validation layer throws robin_hood::map overflow

Open jjiangweilan opened this issue 1 year ago • 2 comments

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 image

this screenshot shows the exception is thrown from VkLayer_khronos_validation.dll image

jjiangweilan avatar Aug 26 '24 13:08 jjiangweilan

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.

jjiangweilan avatar Aug 28 '24 14:08 jjiangweilan

try compiled the lib the same way in MacOS, problem not solved

jjiangweilan avatar Sep 01 '24 03:09 jjiangweilan

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++
...

danginsburg avatar Mar 20 '25 18:03 danginsburg

closing, we merged in https://github.com/KhronosGroup/Vulkan-ValidationLayers/pull/9790 and should be fixed now

spencer-lunarg avatar Apr 01 '25 18:04 spencer-lunarg