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 );
};
std::string objectTypeCases;
std::string objectTypeCases;
std::set<std::string> listedTypes;
for ( auto const & feature : m_features )
{
@ -12820,7 +12820,9 @@ ${aliasHandle})";
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;
for ( auto const & require : requireData )
@ -12828,7 +12830,7 @@ std::string VulkanHppGenerator::generateUniqueHandle( std::vector<RequireData> 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<std::string> 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' )
{

View File

@ -519,9 +519,9 @@ private:
std::string & instanceCommandAssignments,
std::string & deviceCommandAssignments ) const;
void appendCppModuleCommands( std::vector<RequireData> const & requireData,
std::set<std::string> & listedCommands,
std::string const & title,
std::string & commandMembers ) const;
std::set<std::string> & listedCommands,
std::string const & title,
std::string & commandMembers ) const;
void appendRAIIDispatcherCommands( std::vector<RequireData> const & requireData,
std::set<std::string> & listedCommands,
std::string const & title,
@ -1048,34 +1048,34 @@ private:
std::string
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::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 generateSuccessCheck( std::vector<std::string> const & successCodes ) const;
std::string generateSuccessCode( std::string const & code ) const;
std::string generateSuccessCodeList( std::vector<std::string> const & successCodes, bool enumerating ) const;
std::string generateThrowResultException() const;
std::string generateTypenameCheck( std::vector<size_t> const & returnParams,
std::map<size_t, VectorParamData> const & vectorParams,
std::vector<size_t> const & chainedReturnParams,
bool definition,
std::vector<std::string> const & dataTypes,
CommandFlavourFlags flavourFlags ) 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::vector<RequireData> const & requireData, std::string const & title ) const;
std::string generateUniqueHandles() 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 generateSharedHandleNoDestroy( std::pair<std::string, HandleData> const & handleData ) const;
std::string generateSharedHandleNoDestroy( std::vector<RequireData> 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<size_t, std::vector<size_t>> const & countToVectorMap,
std::set<size_t> const & skippedParams,
bool onlyThrows ) 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 generateSuccessCheck( std::vector<std::string> const & successCodes ) const;
std::string generateSuccessCode( std::string const & code ) const;
std::string generateSuccessCodeList( std::vector<std::string> const & successCodes, bool enumerating ) const;
std::string generateThrowResultException() const;
std::string generateTypenameCheck( std::vector<size_t> const & returnParams,
std::map<size_t, VectorParamData> const & vectorParams,
std::vector<size_t> const & chainedReturnParams,
bool definition,
std::vector<std::string> const & dataTypes,
CommandFlavourFlags flavourFlags ) 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::vector<RequireData> const & requireData, std::string const & title, std::set<std::string> & listedHandles ) const;
std::string generateUniqueHandles() 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 generateSharedHandleNoDestroy( std::pair<std::string, HandleData> const & handleData ) const;
std::string generateSharedHandleNoDestroy( std::vector<RequireData> 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<size_t, std::vector<size_t>> const & countToVectorMap,
std::set<size_t> const & skippedParams,
bool onlyThrows ) 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::pair<std::string, std::string> getPoolTypeAndName( std::string const & type ) const;