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

@ -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 );
}
@ -12850,13 +12852,14 @@ ${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

@ -1062,7 +1062,7 @@ private:
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 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;