diff --git a/VulkanHppGenerator.cpp b/VulkanHppGenerator.cpp index 2c51159..bfe50ce 100644 --- a/VulkanHppGenerator.cpp +++ b/VulkanHppGenerator.cpp @@ -8785,7 +8785,7 @@ ${objectTypeCases} return addTitleAndProtection( title, objectTypeCases ); }; - std::string objectTypeCases; + std::string objectTypeCases; std::set listedTypes; for ( auto const & feature : m_features ) { @@ -12820,7 +12820,9 @@ ${aliasHandle})"; return ""; } -std::string VulkanHppGenerator::generateUniqueHandle( std::vector const & requireData, std::string const & title ) const +std::string VulkanHppGenerator::generateUniqueHandle( std::vector const & requireData, + std::string const & title, + std::set & listedHandles ) const { std::string str; for ( auto const & require : requireData ) @@ -12828,7 +12830,7 @@ std::string VulkanHppGenerator::generateUniqueHandle( std::vector c for ( auto const & type : require.types ) { auto handleIt = m_handles.find( type.name ); - if ( handleIt != m_handles.end() ) + if ( ( handleIt != m_handles.end() ) && listedHandles.insert( handleIt->first ).second ) { str += generateUniqueHandle( *handleIt ); } @@ -12849,14 +12851,15 @@ ${uniqueHandles} #endif /*VULKAN_HPP_NO_SMART_HANDLE*/ )"; - std::string uniqueHandles; + std::string uniqueHandles; + std::set listedHandles; for ( auto const & feature : m_features ) { - uniqueHandles += generateUniqueHandle( feature.requireData, feature.name ); + uniqueHandles += generateUniqueHandle( feature.requireData, feature.name, listedHandles ); } for ( auto const & extension : m_extensions ) { - uniqueHandles += generateUniqueHandle( extension.requireData, extension.name ); + uniqueHandles += generateUniqueHandle( extension.requireData, extension.name, listedHandles ); } if ( uniqueHandles.back() == '\n' ) { diff --git a/VulkanHppGenerator.hpp b/VulkanHppGenerator.hpp index eb778c1..0f2c124 100644 --- a/VulkanHppGenerator.hpp +++ b/VulkanHppGenerator.hpp @@ -519,9 +519,9 @@ private: std::string & instanceCommandAssignments, std::string & deviceCommandAssignments ) const; void appendCppModuleCommands( std::vector const & requireData, - std::set & listedCommands, - std::string const & title, - std::string & commandMembers ) const; + std::set & listedCommands, + std::string const & title, + std::string & commandMembers ) const; void appendRAIIDispatcherCommands( std::vector const & requireData, std::set & listedCommands, std::string const & title, @@ -1048,34 +1048,34 @@ private: std::string generateStructForwardDeclarations( std::vector const & requireData, std::string const & title, std::set & listedStructs ) const; std::tuple generateStructMembers( std::pair const & structData ) const; - std::string generateStructSetter( std::string const & structureName, std::vector const & memberData, size_t index ) const; - std::string generateStructSubConstructor( std::pair const & structData ) const; - std::string generateSuccessCheck( std::vector const & successCodes ) const; - std::string generateSuccessCode( std::string const & code ) const; - std::string generateSuccessCodeList( std::vector const & successCodes, bool enumerating ) const; - std::string generateThrowResultException() const; - std::string generateTypenameCheck( std::vector const & returnParams, - std::map const & vectorParams, - std::vector const & chainedReturnParams, - bool definition, - std::vector const & dataTypes, - CommandFlavourFlags flavourFlags ) const; - std::string generateUnion( std::pair const & structure ) const; - std::string generateUniqueHandle( std::pair const & handleData ) const; - std::string generateUniqueHandle( std::vector const & requireData, std::string const & title ) const; - std::string generateUniqueHandles() const; - std::string generateSharedHandle( std::pair const & handleData ) const; - std::string generateSharedHandle( std::vector const & requireData, std::string const & title ) const; - std::string generateSharedHandleNoDestroy( std::pair const & handleData ) const; - std::string generateSharedHandleNoDestroy( std::vector const & requireData, std::string const & title ) const; - std::string generateSharedHandles() const; - std::string generateSharedHandlesNoDestroy() const; - std::string generateVectorSizeCheck( std::string const & name, - CommandData const & commandData, - size_t initialSkipCount, - std::map> const & countToVectorMap, - std::set const & skippedParams, - bool onlyThrows ) const; + std::string generateStructSetter( std::string const & structureName, std::vector const & memberData, size_t index ) const; + std::string generateStructSubConstructor( std::pair const & structData ) const; + std::string generateSuccessCheck( std::vector const & successCodes ) const; + std::string generateSuccessCode( std::string const & code ) const; + std::string generateSuccessCodeList( std::vector const & successCodes, bool enumerating ) const; + std::string generateThrowResultException() const; + std::string generateTypenameCheck( std::vector const & returnParams, + std::map const & vectorParams, + std::vector const & chainedReturnParams, + bool definition, + std::vector const & dataTypes, + CommandFlavourFlags flavourFlags ) const; + std::string generateUnion( std::pair const & structure ) const; + std::string generateUniqueHandle( std::pair const & handleData ) const; + std::string generateUniqueHandle( std::vector const & requireData, std::string const & title, std::set & listedHandles ) const; + std::string generateUniqueHandles() const; + std::string generateSharedHandle( std::pair const & handleData ) const; + std::string generateSharedHandle( std::vector const & requireData, std::string const & title ) const; + std::string generateSharedHandleNoDestroy( std::pair const & handleData ) const; + std::string generateSharedHandleNoDestroy( std::vector const & requireData, std::string const & title ) const; + std::string generateSharedHandles() const; + std::string generateSharedHandlesNoDestroy() const; + std::string generateVectorSizeCheck( std::string const & name, + CommandData const & commandData, + size_t initialSkipCount, + std::map> const & countToVectorMap, + std::set const & skippedParams, + bool onlyThrows ) const; std::pair getParentTypeAndName( std::pair const & handle ) const; std::string getPlatform( std::string const & title ) const; std::pair getPoolTypeAndName( std::string const & type ) const;