Add support for comma-separated list of names for attribute "extension" of element <require> in element <extension>.

This commit is contained in:
asuessenbach 2022-07-04 18:02:22 +02:00
parent 86cc8f2ed1
commit 49a2fc679a
2 changed files with 16 additions and 6 deletions

View File

@ -1681,9 +1681,15 @@ void VulkanHppGenerator::checkExtensionCorrectness() const
// check for existence of any requirement // check for existence of any requirement
for ( auto const & require : extension.second.requireData ) for ( auto const & require : extension.second.requireData )
{ {
check( require.title.empty() || ( m_features.find( require.title ) != m_features.end() ) || ( m_extensions.find( require.title ) != m_extensions.end() ), if ( !require.titles.empty() )
require.xmlLine, {
"extension <" + extension.first + "> lists an unknown require <" + require.title + ">" ); for ( auto const & title : require.titles )
{
check( ( m_features.find( title ) != m_features.end() ) || ( m_extensions.find( title ) != m_extensions.end() ),
require.xmlLine,
"extension <" + extension.first + "> lists an unknown require <" + title + ">" );
}
}
} }
} }
} }
@ -11062,7 +11068,9 @@ void VulkanHppGenerator::readExtensionsExtensionRequire( tinyxml2::XMLElement co
requireTitle = attribute.second; requireTitle = attribute.second;
check( std::find_if( extensionIt->second.requireData.begin(), check( std::find_if( extensionIt->second.requireData.begin(),
extensionIt->second.requireData.end(), extensionIt->second.requireData.end(),
[&requireTitle]( RequireData const & rd ) { return rd.title == requireTitle; } ) == extensionIt->second.requireData.end(), [&requireTitle]( RequireData const & rd ) {
return std::find( rd.titles.begin(), rd.titles.end(), requireTitle ) != rd.titles.end();
} ) == extensionIt->second.requireData.end(),
line, line,
"required extension <" + requireTitle + "> already listed" ); "required extension <" + requireTitle + "> already listed" );
} }
@ -12910,6 +12918,8 @@ std::string VulkanHppGenerator::TypeInfo::compose( std::string const & nameSpace
( postfix.empty() ? "" : " " ) + postfix; ( postfix.empty() ? "" : " " ) + postfix;
} }
VulkanHppGenerator::RequireData::RequireData( int line, std::string const & titles_ ) : titles( tokenize( titles_, "," ) ), xmlLine( line ) {}
// //
// VulkanHppGenerator local functions // VulkanHppGenerator local functions
// //

View File

@ -177,9 +177,9 @@ private:
struct RequireData struct RequireData
{ {
RequireData( int line, std::string const & title_ ) : title( title_ ), xmlLine( line ) {} RequireData( int line, std::string const & titles_ );
std::string title; std::vector<std::string> titles;
std::vector<std::string> commands; std::vector<std::string> commands;
std::vector<std::string> types; std::vector<std::string> types;
int xmlLine; int xmlLine;