Filter out multiply spec'ed handles for UniqueHandles types. (#2188)

This commit is contained in:
Andreas Süßenbach 2025-06-16 12:21:35 +02:00 committed by GitHub
parent 5bac8fc8fc
commit 8ee3f2fabd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 40 additions and 37 deletions

View File

@ -8785,7 +8785,7 @@ ${objectTypeCases}
return addTitleAndProtection( title, objectTypeCases ); return addTitleAndProtection( title, objectTypeCases );
}; };
std::string objectTypeCases; std::string objectTypeCases;
std::set<std::string> listedTypes; std::set<std::string> listedTypes;
for ( auto const & feature : m_features ) for ( auto const & feature : m_features )
{ {
@ -12820,7 +12820,9 @@ ${aliasHandle})";
return ""; return "";
} }
std::string VulkanHppGenerator::generateUniqueHandle( std::vector<RequireData> const & requireData, std::string const & title ) const std::string VulkanHppGenerator::generateUniqueHandle( std::vector<RequireData> const & requireData,
std::string const & title,
std::set<std::string> & listedHandles ) const
{ {
std::string str; std::string str;
for ( auto const & require : requireData ) for ( auto const & require : requireData )
@ -12828,7 +12830,7 @@ std::string VulkanHppGenerator::generateUniqueHandle( std::vector<RequireData> c
for ( auto const & type : require.types ) for ( auto const & type : require.types )
{ {
auto handleIt = m_handles.find( type.name ); 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 ); str += generateUniqueHandle( *handleIt );
} }
@ -12849,14 +12851,15 @@ ${uniqueHandles}
#endif /*VULKAN_HPP_NO_SMART_HANDLE*/ #endif /*VULKAN_HPP_NO_SMART_HANDLE*/
)"; )";
std::string uniqueHandles; std::string uniqueHandles;
std::set<std::string> listedHandles;
for ( auto const & feature : m_features ) 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 ) for ( auto const & extension : m_extensions )
{ {
uniqueHandles += generateUniqueHandle( extension.requireData, extension.name ); uniqueHandles += generateUniqueHandle( extension.requireData, extension.name, listedHandles );
} }
if ( uniqueHandles.back() == '\n' ) if ( uniqueHandles.back() == '\n' )
{ {

View File

@ -519,9 +519,9 @@ private:
std::string & instanceCommandAssignments, std::string & instanceCommandAssignments,
std::string & deviceCommandAssignments ) const; std::string & deviceCommandAssignments ) const;
void appendCppModuleCommands( std::vector<RequireData> const & requireData, void appendCppModuleCommands( std::vector<RequireData> const & requireData,
std::set<std::string> & listedCommands, std::set<std::string> & listedCommands,
std::string const & title, std::string const & title,
std::string & commandMembers ) const; std::string & commandMembers ) const;
void appendRAIIDispatcherCommands( std::vector<RequireData> const & requireData, void appendRAIIDispatcherCommands( std::vector<RequireData> const & requireData,
std::set<std::string> & listedCommands, std::set<std::string> & listedCommands,
std::string const & title, std::string const & title,
@ -1048,34 +1048,34 @@ private:
std::string std::string
generateStructForwardDeclarations( std::vector<RequireData> const & requireData, std::string const & title, std::set<std::string> & listedStructs ) const; generateStructForwardDeclarations( std::vector<RequireData> const & requireData, std::string const & title, std::set<std::string> & listedStructs ) const;
std::tuple<std::string, std::string, std::string, std::string> generateStructMembers( std::pair<std::string, StructureData> const & structData ) const; std::tuple<std::string, std::string, std::string, std::string> generateStructMembers( std::pair<std::string, StructureData> const & structData ) const;
std::string generateStructSetter( std::string const & structureName, std::vector<MemberData> const & memberData, size_t index ) const; std::string generateStructSetter( std::string const & structureName, std::vector<MemberData> const & memberData, size_t index ) const;
std::string generateStructSubConstructor( std::pair<std::string, StructureData> const & structData ) const; std::string generateStructSubConstructor( std::pair<std::string, StructureData> const & structData ) const;
std::string generateSuccessCheck( std::vector<std::string> const & successCodes ) const; std::string generateSuccessCheck( std::vector<std::string> const & successCodes ) const;
std::string generateSuccessCode( std::string const & code ) const; std::string generateSuccessCode( std::string const & code ) const;
std::string generateSuccessCodeList( std::vector<std::string> const & successCodes, bool enumerating ) const; std::string generateSuccessCodeList( std::vector<std::string> const & successCodes, bool enumerating ) const;
std::string generateThrowResultException() const; std::string generateThrowResultException() const;
std::string generateTypenameCheck( std::vector<size_t> const & returnParams, std::string generateTypenameCheck( std::vector<size_t> const & returnParams,
std::map<size_t, VectorParamData> const & vectorParams, std::map<size_t, VectorParamData> const & vectorParams,
std::vector<size_t> const & chainedReturnParams, std::vector<size_t> const & chainedReturnParams,
bool definition, bool definition,
std::vector<std::string> const & dataTypes, std::vector<std::string> const & dataTypes,
CommandFlavourFlags flavourFlags ) const; CommandFlavourFlags flavourFlags ) const;
std::string generateUnion( std::pair<std::string, StructureData> const & structure ) const; std::string generateUnion( std::pair<std::string, StructureData> const & structure ) const;
std::string generateUniqueHandle( std::pair<std::string, HandleData> const & handleData ) const; std::string generateUniqueHandle( std::pair<std::string, HandleData> const & handleData ) const;
std::string generateUniqueHandle( std::vector<RequireData> const & requireData, std::string const & title ) const; std::string generateUniqueHandle( std::vector<RequireData> const & requireData, std::string const & title, std::set<std::string> & listedHandles ) const;
std::string generateUniqueHandles() const; std::string generateUniqueHandles() const;
std::string generateSharedHandle( std::pair<std::string, HandleData> const & handleData ) const; std::string generateSharedHandle( std::pair<std::string, HandleData> const & handleData ) const;
std::string generateSharedHandle( std::vector<RequireData> const & requireData, std::string const & title ) const; std::string generateSharedHandle( std::vector<RequireData> const & requireData, std::string const & title ) const;
std::string generateSharedHandleNoDestroy( std::pair<std::string, HandleData> const & handleData ) const; std::string generateSharedHandleNoDestroy( std::pair<std::string, HandleData> const & handleData ) const;
std::string generateSharedHandleNoDestroy( std::vector<RequireData> const & requireData, std::string const & title ) const; std::string generateSharedHandleNoDestroy( std::vector<RequireData> const & requireData, std::string const & title ) const;
std::string generateSharedHandles() const; std::string generateSharedHandles() const;
std::string generateSharedHandlesNoDestroy() const; std::string generateSharedHandlesNoDestroy() const;
std::string generateVectorSizeCheck( std::string const & name, std::string generateVectorSizeCheck( std::string const & name,
CommandData const & commandData, CommandData const & commandData,
size_t initialSkipCount, size_t initialSkipCount,
std::map<size_t, std::vector<size_t>> const & countToVectorMap, std::map<size_t, std::vector<size_t>> const & countToVectorMap,
std::set<size_t> const & skippedParams, std::set<size_t> const & skippedParams,
bool onlyThrows ) const; bool onlyThrows ) const;
std::pair<std::string, std::string> getParentTypeAndName( std::pair<std::string, HandleData> const & handle ) const; std::pair<std::string, std::string> getParentTypeAndName( std::pair<std::string, HandleData> const & handle ) const;
std::string getPlatform( std::string const & title ) const; std::string getPlatform( std::string const & title ) const;
std::pair<std::string, std::string> getPoolTypeAndName( std::string const & type ) const; std::pair<std::string, std::string> getPoolTypeAndName( std::string const & type ) const;