Skip to content

Commit 4c9a7b4

Browse files
authored
Handle attribute "supersededby" for deprecated commands and types (#2535)
1 parent d3e5b0a commit 4c9a7b4

2 files changed

Lines changed: 124 additions & 50 deletions

File tree

VulkanHppGenerator.cpp

Lines changed: 65 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13255,6 +13255,54 @@ std::string VulkanHppGenerator::readComment( tinyxml2::XMLElement const * elemen
1325513255
return ::readComment( "VulkanHppGenerator", element );
1325613256
}
1325713257

13258+
VulkanHppGenerator::DeprecatedCommandData VulkanHppGenerator::readDeprecatedCommand( tinyxml2::XMLElement const * element ) const
13259+
{
13260+
int const line = element->GetLineNum();
13261+
std::map<std::string, std::string> attributes = getAttributes( element );
13262+
checkAttributes( line, attributes, { { "name", {} } }, { { "supersededby", {} } } );
13263+
checkElements( line, getChildElements( element ), {} );
13264+
13265+
std::string name, supersededBy;
13266+
for ( auto const & attribute : attributes )
13267+
{
13268+
if ( attribute.first == "name" )
13269+
{
13270+
name = attribute.second;
13271+
}
13272+
else
13273+
{
13274+
assert( attribute.first == "supersededby" );
13275+
supersededBy = attribute.second;
13276+
}
13277+
}
13278+
13279+
return { name, supersededBy };
13280+
}
13281+
13282+
VulkanHppGenerator::DeprecatedTypeData VulkanHppGenerator::readDeprecatedType( tinyxml2::XMLElement const * element ) const
13283+
{
13284+
int const line = element->GetLineNum();
13285+
std::map<std::string, std::string> attributes = getAttributes( element );
13286+
checkAttributes( line, attributes, { { "name", {} } }, { { "supersededby", {} } } );
13287+
checkElements( line, getChildElements( element ), {} );
13288+
13289+
std::string name, supersededBy;
13290+
for ( auto const & attribute : attributes )
13291+
{
13292+
if ( attribute.first == "name" )
13293+
{
13294+
name = attribute.second;
13295+
}
13296+
else
13297+
{
13298+
assert( attribute.first == "supersededby" );
13299+
supersededBy = attribute.second;
13300+
}
13301+
}
13302+
13303+
return { name, supersededBy };
13304+
}
13305+
1325813306
VulkanHppGenerator::DeprecateData VulkanHppGenerator::readDeprecateData( tinyxml2::XMLElement const * element ) const
1325913307
{
1326013308
int const line = element->GetLineNum();
@@ -13279,15 +13327,27 @@ VulkanHppGenerator::DeprecateData VulkanHppGenerator::readDeprecateData( tinyxml
1327913327
std::string value = child->Value();
1328013328
if ( value == "command" )
1328113329
{
13282-
deprecateData.commands.push_back( readName( child ) );
13283-
checkForError( containsByNameOrAlias( m_commands, deprecateData.commands.back() ),
13330+
deprecateData.commands.push_back( readDeprecatedCommand( child ) );
13331+
checkForError( containsByNameOrAlias( m_commands, deprecateData.commands.back().name ),
13332+
childLine,
13333+
"deprecated command <" + deprecateData.commands.back().name + "> is not listed as a command" );
13334+
checkForError( deprecateData.commands.back().supersededBy.empty() || containsByNameOrAlias( m_commands, deprecateData.commands.back().supersededBy ),
1328413335
childLine,
13285-
"deprecated command <" + deprecateData.commands.back() + "> is not listed as command" );
13336+
"command <" +
13337+
deprecateData.commands.back().supersededBy +
13338+
">, superseding command <" +
13339+
deprecateData.commands.back().name +
13340+
"> is not listed as a command" );
1328613341
}
1328713342
else if ( value == "type" )
1328813343
{
13289-
deprecateData.types.push_back( readName( child ) );
13290-
checkForError( m_types.contains( deprecateData.types.back() ), childLine, "deprecated type <" + deprecateData.types.back() + "> is not listed as type" );
13344+
deprecateData.types.push_back( readDeprecatedType( child ) );
13345+
checkForError(
13346+
m_types.contains( deprecateData.types.back().name ), childLine, "deprecated type <" + deprecateData.types.back().name + "> is not listed as a type" );
13347+
checkForError(
13348+
deprecateData.types.back().supersededBy.empty() || m_types.contains( deprecateData.types.back().supersededBy ),
13349+
childLine,
13350+
"type <" + deprecateData.types.back().supersededBy + ">, superseding type <" + deprecateData.types.back().name + "> is not listed as a type" );
1329113351
}
1329213352
}
1329313353
return deprecateData;

VulkanHppGenerator.hpp

Lines changed: 59 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -287,12 +287,24 @@ class VulkanHppGenerator
287287
int xmlLine = {};
288288
};
289289

290+
struct DeprecatedCommandData
291+
{
292+
std::string name = {};
293+
std::string supersededBy = {};
294+
};
295+
296+
struct DeprecatedTypeData
297+
{
298+
std::string name = {};
299+
std::string supersededBy = {};
300+
};
301+
290302
struct DeprecateData
291303
{
292-
std::string explanationLink = {};
293-
std::vector<std::string> commands = {};
294-
std::vector<std::string> types = {};
295-
int xmlLine = 0;
304+
std::string explanationLink = {};
305+
std::vector<DeprecatedCommandData> commands = {};
306+
std::vector<DeprecatedTypeData> types = {};
307+
int xmlLine = 0;
296308
};
297309

298310
struct ExtensionData
@@ -608,43 +620,43 @@ class VulkanHppGenerator
608620
std::string findTag( std::string const & name, std::string const & postfix = "" ) const;
609621
std::vector<MemberData>::const_iterator findHandleMember( std::vector<MemberData> const & memberData ) const;
610622
std::vector<MemberData>::const_iterator findVectorMember( std::vector<MemberData> const & memberData ) const;
611-
void forEachRequiredBitmask( std::vector<RequireData> const & requireData,
612-
std::set<std::string> & encounteredBitmasks,
613-
std::function<void( std::pair<std::string, BitmaskData> const & )> const & bitmaskAction ) const;
614-
void forEachRequiredCommand( std::vector<RequireData> const & requireData,
615-
std::function<void( NameLine const &, std::pair<std::string, CommandData> const & )> const & commandAction ) const;
616-
void forEachRequiredConstant( std::vector<RequireData> const & requireData,
617-
std::set<std::string> & encounteredConstants,
618-
std::function<void( std::pair<std::string, ConstantData> const & )> const & constantAction ) const;
619-
void forEachRequiredEnumConstant( std::vector<RequireData> const & requireData,
620-
std::set<std::string> & encounteredEnumConstants,
621-
std::function<void( EnumConstantData const & )> const & enumConstantAction ) const;
622-
void forEachRequiredFuncPointer( std::vector<RequireData> const & requireData,
623-
std::function<void( std::pair<std::string, FuncPointerData> const & )> const & funcPointerAction ) const;
624-
void forEachRequiredHandle( std::vector<RequireData> const & requireData,
625-
std::function<void( std::pair<std::string, HandleData> const & )> const & handleAction ) const;
626-
void forEachRequiredStruct( std::vector<RequireData> const & requireData,
627-
std::function<void( std::pair<std::string, StructData> const & )> const & structAction ) const;
628-
std::set<std::string> gatherResultCodes() const;
629-
std::pair<std::string, std::string> generateAllocatorTemplates( std::vector<size_t> const & returnParams,
630-
std::vector<std::string> const & returnDataTypes,
631-
std::map<size_t, VectorParamData> const & vectorParams,
632-
std::vector<size_t> const & chainedReturnParams,
633-
CommandFlavourFlags flavourFlags,
634-
bool definition ) const;
635-
std::string generateArgumentListEnhanced( std::vector<ParamData> const & params,
636-
std::vector<size_t> const & returnParams,
637-
std::map<size_t, VectorParamData> const & vectorParams,
638-
std::set<size_t> const & skippedParams,
639-
std::set<size_t> const & singularParams,
640-
std::set<size_t> const & templatedParams,
641-
std::vector<size_t> const & chainedReturnParams,
642-
bool raii,
643-
bool definition,
644-
CommandFlavourFlags flavourFlags,
645-
bool withDispatcher ) const;
646-
std::string generateArgumentListStandard(
647-
std::vector<ParamData> const & params, std::set<size_t> const & skippedParams, bool definition, bool raii, bool withDispatcher ) const;
623+
void forEachRequiredBitmask( std::vector<RequireData> const & requireData,
624+
std::set<std::string> & encounteredBitmasks,
625+
std::function<void( std::pair<std::string, BitmaskData> const & )> const & bitmaskAction ) const;
626+
void forEachRequiredCommand( std::vector<RequireData> const & requireData,
627+
std::function<void( NameLine const &, std::pair<std::string, CommandData> const & )> const & commandAction ) const;
628+
void forEachRequiredConstant( std::vector<RequireData> const & requireData,
629+
std::set<std::string> & encounteredConstants,
630+
std::function<void( std::pair<std::string, ConstantData> const & )> const & constantAction ) const;
631+
void forEachRequiredEnumConstant( std::vector<RequireData> const & requireData,
632+
std::set<std::string> & encounteredEnumConstants,
633+
std::function<void( EnumConstantData const & )> const & enumConstantAction ) const;
634+
void forEachRequiredFuncPointer( std::vector<RequireData> const & requireData,
635+
std::function<void( std::pair<std::string, FuncPointerData> const & )> const & funcPointerAction ) const;
636+
void forEachRequiredHandle( std::vector<RequireData> const & requireData,
637+
std::function<void( std::pair<std::string, HandleData> const & )> const & handleAction ) const;
638+
void forEachRequiredStruct( std::vector<RequireData> const & requireData,
639+
std::function<void( std::pair<std::string, StructData> const & )> const & structAction ) const;
640+
std::set<std::string> gatherResultCodes() const;
641+
std::pair<std::string, std::string> generateAllocatorTemplates( std::vector<size_t> const & returnParams,
642+
std::vector<std::string> const & returnDataTypes,
643+
std::map<size_t, VectorParamData> const & vectorParams,
644+
std::vector<size_t> const & chainedReturnParams,
645+
CommandFlavourFlags flavourFlags,
646+
bool definition ) const;
647+
std::string generateArgumentListEnhanced( std::vector<ParamData> const & params,
648+
std::vector<size_t> const & returnParams,
649+
std::map<size_t, VectorParamData> const & vectorParams,
650+
std::set<size_t> const & skippedParams,
651+
std::set<size_t> const & singularParams,
652+
std::set<size_t> const & templatedParams,
653+
std::vector<size_t> const & chainedReturnParams,
654+
bool raii,
655+
bool definition,
656+
CommandFlavourFlags flavourFlags,
657+
bool withDispatcher ) const;
658+
std::string generateArgumentListStandard(
659+
std::vector<ParamData> const & params, std::set<size_t> const & skippedParams, bool definition, bool raii, bool withDispatcher ) const;
648660
std::string generateArgumentTemplates( std::vector<ParamData> const & params,
649661
std::vector<size_t> const & returnParams,
650662
std::map<size_t, VectorParamData> const & vectorParams,
@@ -952,9 +964,9 @@ class VulkanHppGenerator
952964
std::string generateIsDispatchedList() const;
953965
std::string generateLayerSettingTypeTraits() const;
954966
std::string
955-
generateLenInitializer( std::vector<MemberData>::const_iterator mit,
956-
std::map<std::vector<MemberData>::const_iterator, std::vector<std::vector<MemberData>::const_iterator>>::const_iterator litit,
957-
bool mutualExclusiveLens ) const;
967+
generateLenInitializer( std::vector<MemberData>::const_iterator mit,
968+
std::map<std::vector<MemberData>::const_iterator, std::vector<std::vector<MemberData>::const_iterator>>::const_iterator litit,
969+
bool mutualExclusiveLens ) const;
958970
std::string generateName( TypeInfo const & typeInfo ) const;
959971
std::string generateNoExcept( std::vector<std::string> const & errorCodes,
960972
std::vector<size_t> const & returnParams,
@@ -1207,6 +1219,8 @@ class VulkanHppGenerator
12071219
std::pair<std::string, TypeInfo> readCommandProto( tinyxml2::XMLElement const * element, std::string const & prefix );
12081220
void readCommands( tinyxml2::XMLElement const * element );
12091221
std::string readComment( tinyxml2::XMLElement const * element ) const;
1222+
DeprecatedCommandData readDeprecatedCommand( tinyxml2::XMLElement const * element ) const;
1223+
DeprecatedTypeData readDeprecatedType( tinyxml2::XMLElement const * element ) const;
12101224
DeprecateData readDeprecateData( tinyxml2::XMLElement const * element ) const;
12111225
void readEnums( tinyxml2::XMLElement const * element );
12121226
void readEnumsConstants( tinyxml2::XMLElement const * element );
@@ -1230,7 +1244,7 @@ class VulkanHppGenerator
12301244
RemoveData readRemoveData( tinyxml2::XMLElement const * element );
12311245
NameLine readRequireCommand( tinyxml2::XMLElement const * element );
12321246
void readRequireEnum(
1233-
tinyxml2::XMLElement const * element, std::string const & requiredBy, std::string const & platform, bool supported, RequireData & requireData );
1247+
tinyxml2::XMLElement const * element, std::string const & requiredBy, std::string const & platform, bool supported, RequireData & requireData );
12341248
RequireFeature readRequireFeature( tinyxml2::XMLElement const * element );
12351249
NameLine readRequireType( tinyxml2::XMLElement const * element );
12361250
void readSPIRVCapability( tinyxml2::XMLElement const * element );

0 commit comments

Comments
 (0)