2019-01-09 18:55:11 +08:00
// Copyright(c) 2015-2019, NVIDIA CORPORATION. All rights reserved.
2017-12-21 19:40:48 +08:00
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
# pragma once
2023-07-11 21:39:17 +08:00
# include "XMLHelper.hpp"
2025-05-07 22:24:40 +08:00
# include <functional>
2017-12-21 19:40:48 +08:00
# include <iostream>
2020-04-13 03:49:12 +08:00
# include <map>
2017-12-21 19:40:48 +08:00
# include <set>
# include <tinyxml2.h>
2020-04-13 03:49:12 +08:00
# include <vector>
2017-12-21 19:40:48 +08:00
2024-01-23 21:10:52 +08:00
constexpr size_t INVALID_INDEX = static_cast < size_t > ( ~ 0 ) ;
2022-09-12 22:53:44 +08:00
2022-11-28 23:53:24 +08:00
template < typename BitType >
class Flags
{
public :
using MaskType = typename std : : underlying_type < BitType > : : type ;
constexpr Flags ( ) noexcept : m_mask ( 0 ) { }
constexpr Flags ( BitType bit ) noexcept : m_mask ( static_cast < MaskType > ( bit ) ) { }
constexpr explicit Flags ( MaskType flags ) noexcept : m_mask ( flags ) { }
2023-10-02 20:57:52 +08:00
constexpr Flags < BitType > & operator | = ( Flags < BitType > const & rhs ) noexcept
{
m_mask | = rhs . m_mask ;
return * this ;
}
2022-11-28 23:53:24 +08:00
constexpr bool operator ! ( ) const noexcept
{
return ! m_mask ;
}
constexpr bool operator & ( BitType const & rhs ) const noexcept
{
return m_mask & static_cast < MaskType > ( rhs ) ;
}
constexpr Flags < BitType > operator & ( Flags < BitType > const & rhs ) const noexcept
{
return Flags < BitType > ( m_mask & rhs . m_mask ) ;
}
constexpr Flags < BitType > operator | ( Flags < BitType > const & rhs ) const noexcept
{
return Flags < BitType > ( m_mask | rhs . m_mask ) ;
}
private :
MaskType m_mask ;
} ;
enum class CommandFlavourFlagBits : uint8_t
{
2023-02-02 21:09:45 +08:00
enhanced = 1 < < 0 ,
chained = 1 < < 1 ,
singular = 1 < < 2 ,
unique = 1 < < 3 ,
2023-10-02 20:57:52 +08:00
withAllocator = 1 < < 4 ,
noReturn = 1 < < 5 ,
keepVoidPtr = 1 < < 6
2022-11-28 23:53:24 +08:00
} ;
using CommandFlavourFlags = Flags < CommandFlavourFlagBits > ;
constexpr CommandFlavourFlags operator | ( CommandFlavourFlagBits const & lhs , CommandFlavourFlagBits const & rhs ) noexcept
{
return CommandFlavourFlags ( lhs ) | CommandFlavourFlags ( rhs ) ;
}
2017-12-21 19:40:48 +08:00
class VulkanHppGenerator
{
2020-04-13 03:49:12 +08:00
public :
2023-03-07 15:23:14 +08:00
VulkanHppGenerator ( tinyxml2 : : XMLDocument const & document , std : : string const & api ) ;
2025-01-08 18:53:08 +08:00
VulkanHppGenerator ( ) = delete ;
VulkanHppGenerator ( VulkanHppGenerator const & rhs ) = delete ;
VulkanHppGenerator ( VulkanHppGenerator & & rhs ) = delete ;
VulkanHppGenerator & operator = ( VulkanHppGenerator const & rhs ) = delete ;
VulkanHppGenerator & operator = ( VulkanHppGenerator & & rhs ) = delete ;
void distributeSecondLevelCommands ( ) ;
2025-08-18 14:31:15 +08:00
void generateCppmFile ( ) const ;
2023-03-07 15:23:14 +08:00
void generateEnumsHppFile ( ) const ;
2023-03-28 23:33:11 +08:00
void generateExtensionInspectionFile ( ) const ;
2023-03-07 15:23:14 +08:00
void generateFormatTraitsHppFile ( ) const ;
void generateFuncsHppFile ( ) const ;
void generateHandlesHppFile ( ) const ;
void generateHashHppFile ( ) const ;
void generateHppFile ( ) const ;
2023-09-07 21:20:10 +08:00
void generateMacrosFile ( ) const ;
2023-03-07 15:23:14 +08:00
void generateRAIIHppFile ( ) const ;
2023-09-19 19:04:36 +08:00
void generateSharedHppFile ( ) const ;
2023-03-07 15:23:14 +08:00
void generateStaticAssertionsHppFile ( ) const ;
void generateStructsHppFile ( ) const ;
void generateToStringHppFile ( ) const ;
2022-08-02 16:00:16 +08:00
void prepareRAIIHandles ( ) ;
2020-04-13 03:49:12 +08:00
2023-10-26 20:59:13 +08:00
struct MacroData
{
std : : string deprecatedComment = { } ;
std : : string calleeMacro = { } ;
std : : vector < std : : string > params = { } ;
std : : string definition = { } ;
} ;
2020-04-13 03:49:12 +08:00
private :
2024-09-17 21:03:34 +08:00
struct NameLine
2021-06-30 14:56:05 +08:00
{
2023-03-22 15:52:35 +08:00
std : : string name = { } ;
int xmlLine = { } ;
2023-03-01 17:17:02 +08:00
} ;
2021-06-30 14:56:05 +08:00
2023-03-01 17:17:02 +08:00
struct BaseTypeData
{
2023-03-22 15:52:35 +08:00
TypeInfo typeInfo = { } ;
int xmlLine = { } ;
2021-06-30 14:56:05 +08:00
} ;
struct BitmaskData
{
2024-04-11 14:43:15 +08:00
std : : map < std : : string , int > aliases = { } ;
std : : string require = { } ;
std : : string type = { } ;
int xmlLine = { } ;
2021-06-30 14:56:05 +08:00
} ;
2024-04-03 14:29:10 +08:00
struct EnumValueAlias
2023-07-11 21:39:17 +08:00
{
2024-04-03 14:29:10 +08:00
std : : string alias = { } ;
std : : string name = { } ;
std : : string protect = { } ;
bool supported = { } ;
int xmlLine = { } ;
2023-07-11 21:39:17 +08:00
} ;
2024-04-03 14:29:10 +08:00
struct EnumValueData
{
2024-12-02 20:50:53 +08:00
std : : vector < EnumValueAlias > aliases = { } ;
std : : string bitpos = { } ;
bool deprecated = { } ;
std : : string name = { } ;
std : : string protect = { } ;
bool supported = { } ;
std : : string value = { } ;
int xmlLine = { } ;
2024-04-03 14:29:10 +08:00
} ;
2024-03-25 17:47:09 +08:00
2023-07-11 21:39:17 +08:00
struct EnumData
{
2025-04-30 15:07:39 +08:00
bool addEnumAlias ( int line , std : : string const & name , std : : string const & alias , std : : string const & protect , bool supported ) ;
bool addEnumValue ( int line ,
2024-09-03 14:53:36 +08:00
std : : string const & valueName ,
std : : string const & protect ,
std : : string const & bitpos ,
std : : string const & value ,
bool supported ,
bool deprecated ) ;
2023-07-11 21:39:17 +08:00
2024-04-24 14:33:25 +08:00
std : : map < std : : string , int > aliases = { } ;
2024-04-03 14:29:10 +08:00
std : : string bitwidth = { } ;
bool isBitmask = false ;
std : : vector < EnumValueAlias > valueAliases = { } ; // temporary storage for aliases, as they might be specified before the actual value is specified
std : : vector < EnumValueData > values = { } ;
int xmlLine = { } ;
2023-07-11 21:39:17 +08:00
} ;
2024-09-17 21:03:34 +08:00
struct EnumExtendData
{
std : : string alias = { } ;
std : : string api = { } ;
std : : string name = { } ;
2025-06-12 16:33:41 +08:00
std : : string protect = { } ;
2024-09-17 21:03:34 +08:00
std : : set < std : : string > requiredBy = { } ;
bool supported = { } ;
int xmlLine = { } ;
} ;
2021-06-30 14:56:05 +08:00
struct NameData
{
2023-03-22 15:52:35 +08:00
std : : string name = { } ;
std : : vector < std : : string > arraySizes = { } ;
2021-06-30 14:56:05 +08:00
} ;
2020-04-13 03:49:12 +08:00
struct ParamData
{
2023-03-22 15:52:35 +08:00
TypeInfo type = { } ;
std : : string name = { } ;
std : : vector < std : : string > arraySizes = { } ;
std : : string lenExpression = { } ;
std : : vector < std : : pair < std : : string , size_t > > lenParams = { } ;
bool optional = false ;
std : : pair < std : : string , size_t > strideParam = { } ;
int xmlLine = { } ;
2020-04-13 03:49:12 +08:00
} ;
struct CommandData
{
2024-04-11 14:43:15 +08:00
std : : map < std : : string , int > aliases = { } ;
std : : vector < std : : string > errorCodes = { } ;
2025-06-25 00:35:26 +08:00
std : : vector < std : : string > exports = { } ;
2024-04-11 14:43:15 +08:00
std : : string handle = { } ;
std : : vector < ParamData > params = { } ;
std : : set < std : : string > requiredBy = { } ;
std : : string returnType = { } ;
std : : vector < std : : string > successCodes = { } ;
int xmlLine = { } ;
2020-04-13 03:49:12 +08:00
} ;
2023-03-01 17:17:02 +08:00
struct ConstantData
2023-01-27 00:12:29 +08:00
{
2024-07-23 15:47:41 +08:00
std : : string type = { } ;
std : : string value = { } ;
int xmlLine = { } ;
2023-01-27 00:12:29 +08:00
} ;
2023-03-01 17:17:02 +08:00
struct DefineData
{
2023-06-28 20:10:51 +08:00
bool deprecated = false ;
std : : string require = { } ;
int xmlLine = { } ;
std : : string deprecationReason = { } ;
std : : string possibleCallee = { } ;
std : : vector < std : : string > params = { } ;
std : : string possibleDefinition = { } ;
} ;
struct DefinesPartition
{
std : : map < std : : string , DefineData > callees = { } ;
std : : map < std : : string , DefineData > callers = { } ;
std : : map < std : : string , DefineData > values = { } ;
2023-03-01 17:17:02 +08:00
} ;
2025-10-23 20:21:50 +08:00
struct EnumConstantData
{
std : : string name = { } ;
std : : string value = { } ;
int xmlLine = { } ;
} ;
2024-08-27 19:33:57 +08:00
struct RequireFeature
{
2024-10-17 14:19:47 +08:00
std : : vector < std : : string > name = { } ;
std : : string structure = { } ;
int xmlLine = { } ;
2024-08-27 19:33:57 +08:00
} ;
2023-03-01 17:17:02 +08:00
struct RemoveData
2021-07-21 23:09:21 +08:00
{
2024-08-27 19:33:57 +08:00
std : : vector < std : : string > commands = { } ;
std : : vector < std : : string > enums = { } ;
std : : vector < RequireFeature > features = { } ;
std : : vector < std : : string > types = { } ;
int xmlLine = { } ;
2023-03-01 17:17:02 +08:00
} ;
2021-07-21 23:09:21 +08:00
2023-03-01 17:17:02 +08:00
struct RequireData
{
2025-10-23 20:21:50 +08:00
std : : string api = { } ;
std : : string depends = { } ;
std : : vector < NameLine > commands = { } ;
std : : vector < EnumConstantData > enumConstants = { } ;
std : : vector < NameLine > constants = { } ;
std : : vector < RequireFeature > features = { } ;
std : : vector < NameLine > types = { } ;
int xmlLine = { } ;
2021-07-21 23:09:21 +08:00
} ;
2025-05-06 18:14:00 +08:00
struct DeprecateData
{
std : : string explanationLink = { } ;
std : : vector < std : : string > commands = { } ;
std : : vector < std : : string > types = { } ;
int xmlLine = 0 ;
} ;
2020-04-13 03:49:12 +08:00
struct ExtensionData
{
2025-04-04 02:21:11 +08:00
std : : string deprecatedBy = { } ;
bool isDeprecated = false ;
std : : string name = { } ;
std : : string number = { } ;
std : : string obsoletedBy = { } ;
std : : string platform = { } ;
std : : string promotedTo = { } ;
std : : map < std : : string , std : : vector < std : : set < std : : string > > > depends = { } ;
std : : vector < std : : string > ratified = { } ;
2025-05-06 18:14:00 +08:00
std : : vector < DeprecateData > deprecateData = { } ;
2025-04-04 02:21:11 +08:00
std : : vector < RemoveData > removeData = { } ;
std : : vector < RequireData > requireData = { } ;
std : : vector < std : : string > supported = { } ;
std : : string type = { } ;
std : : vector < RequireData > unsupportedRequireData = { } ;
int xmlLine = 0 ;
2023-03-01 17:17:02 +08:00
} ;
2020-04-13 03:49:12 +08:00
2023-07-11 21:39:17 +08:00
struct FeatureData
{
2025-06-25 00:35:26 +08:00
std : : vector < std : : string > api = { } ;
2025-05-06 18:14:00 +08:00
std : : string name = { } ;
std : : string number = { } ;
2025-10-14 03:51:04 +08:00
bool isInternal = false ;
std : : vector < std : : string > depends = { } ;
2025-05-06 18:14:00 +08:00
std : : vector < DeprecateData > deprecateData = { } ;
std : : vector < RemoveData > removeData = { } ;
std : : vector < RequireData > requireData = { } ;
int xmlLine = 0 ;
2023-07-11 21:39:17 +08:00
} ;
2023-03-01 17:17:02 +08:00
struct ExternalTypeData
{
std : : string require = { } ;
int xmlLine = 0 ;
2020-04-13 03:49:12 +08:00
} ;
2021-11-22 21:27:34 +08:00
struct ComponentData
{
2023-03-22 15:52:35 +08:00
std : : string bits = { } ;
std : : string name = { } ;
std : : string numericFormat = { } ;
std : : string planeIndex = { } ;
int xmlLine = { } ;
2021-11-22 21:27:34 +08:00
} ;
struct PlaneData
{
2023-03-22 15:52:35 +08:00
std : : string compatible = { } ;
std : : string heightDivisor = { } ;
std : : string widthDivisor = { } ;
int xmlLine = { } ;
2021-11-22 21:27:34 +08:00
} ;
struct FormatData
{
2023-03-22 15:52:35 +08:00
std : : string blockExtent = { } ;
std : : string blockSize = { } ;
std : : string chroma = { } ;
std : : string classAttribute = { } ;
std : : vector < ComponentData > components = { } ;
std : : string compressed = { } ;
std : : string packed = { } ;
std : : vector < PlaneData > planes = { } ;
std : : string spirvImageFormat = { } ;
std : : string texelsPerBlock = { } ;
int xmlLine = { } ;
2021-11-22 21:27:34 +08:00
} ;
2021-09-21 20:20:24 +08:00
struct FuncPointerArgumentData
{
2023-03-22 15:52:35 +08:00
std : : string name = { } ;
2024-12-12 16:46:53 +08:00
TypeInfo type = { } ;
2023-03-22 15:52:35 +08:00
int xmlLine = { } ;
2021-09-21 20:20:24 +08:00
} ;
2020-04-13 03:49:12 +08:00
struct FuncPointerData
{
2025-01-08 18:53:08 +08:00
std : : vector < FuncPointerArgumentData > arguments = { } ;
std : : string require = { } ;
2024-12-12 16:46:53 +08:00
TypeInfo returnType = { } ;
2025-01-08 18:53:08 +08:00
int xmlLine = { } ;
2020-04-13 03:49:12 +08:00
} ;
struct HandleData
{
2024-04-30 15:12:25 +08:00
std : : map < std : : string , int > aliases = { } ;
std : : set < std : : string > childrenHandles = { } ;
std : : set < std : : string > commands = { } ;
std : : string deleteCommand = { } ;
std : : string deletePool = { } ;
std : : string destructorType = { } ;
std : : string objTypeEnum = { } ;
std : : string parent = { } ;
std : : set < std : : string > secondLevelCommands = { } ;
bool isDispatchable = { } ;
int xmlLine = { } ;
2021-02-17 17:49:59 +08:00
// RAII data
2023-03-22 15:52:35 +08:00
std : : map < std : : string , CommandData > : : const_iterator destructorIt = { } ;
std : : vector < std : : map < std : : string , CommandData > : : const_iterator > constructorIts = { } ;
2020-04-13 03:49:12 +08:00
} ;
2023-07-11 21:39:17 +08:00
struct PlatformData
2023-03-01 17:17:02 +08:00
{
2023-07-11 21:39:17 +08:00
std : : string protect = { } ;
int xmlLine = { } ;
2023-03-01 17:17:02 +08:00
} ;
2020-04-13 03:49:12 +08:00
struct MemberData
{
2023-09-19 18:05:06 +08:00
std : : string defaultValue = { } ;
2023-03-22 15:52:35 +08:00
TypeInfo type = { } ;
std : : string name = { } ;
std : : vector < std : : string > arraySizes = { } ;
std : : string bitCount = { } ;
2025-07-30 15:36:58 +08:00
std : : string deprecated = { } ;
2023-03-22 15:52:35 +08:00
std : : vector < std : : string > lenExpressions = { } ;
2025-09-02 19:31:57 +08:00
std : : string limitType = { } ;
2023-03-22 15:52:35 +08:00
std : : vector < std : : pair < std : : string , size_t > > lenMembers = { } ;
bool noAutoValidity = { } ;
std : : vector < bool > optional = { } ;
std : : vector < std : : string > selection = { } ;
std : : string selector = { } ;
std : : string value = { } ;
int xmlLine = { } ;
2020-04-13 03:49:12 +08:00
} ;
2024-09-17 21:03:34 +08:00
struct SpirVCapabilityData
{
std : : map < std : : string , std : : map < std : : string , int > > structs = { } ; // map from structure to map from member to xmlLine
int xmlLine = { } ;
} ;
2025-10-23 20:21:50 +08:00
struct StructData
2020-04-13 03:49:12 +08:00
{
2024-05-02 15:28:44 +08:00
std : : map < std : : string , int > aliases = { } ;
bool allowDuplicate = { } ;
2024-05-06 16:31:43 +08:00
bool isExtended = { } ;
2024-05-02 15:28:44 +08:00
bool isUnion = { } ;
2025-09-02 19:31:57 +08:00
bool requiredLimitType = { } ;
2024-05-02 15:28:44 +08:00
bool returnedOnly = { } ;
bool mutualExclusiveLens = { } ;
std : : vector < MemberData > members = { } ;
std : : vector < std : : string > structExtends = { } ;
std : : string subStruct = { } ;
int xmlLine = { } ;
2020-04-13 03:49:12 +08:00
} ;
2023-03-01 17:17:02 +08:00
struct TagData
{
2023-03-22 15:52:35 +08:00
int xmlLine = { } ;
2023-03-01 17:17:02 +08:00
} ;
2022-09-12 22:53:44 +08:00
struct VectorParamData
{
size_t lenParam = INVALID_INDEX ;
size_t strideParam = INVALID_INDEX ;
2024-06-11 22:53:15 +08:00
bool byStructure = false ;
2022-09-12 22:53:44 +08:00
} ;
2024-07-23 15:47:41 +08:00
struct VideoRequireCapabilities
{
int xmlLine = { } ;
std : : string name ;
std : : string member ;
std : : string value ;
} ;
struct VideoFormat
{
int xmlLine = { } ;
2024-08-06 15:22:31 +08:00
std : : vector < std : : string > formatProperties ;
2024-07-23 15:47:41 +08:00
std : : string name ;
std : : vector < std : : string > usage ;
std : : vector < VideoRequireCapabilities > requireCapabilities ;
} ;
struct VideoProfile
{
int xmlLine = { } ;
std : : string name ;
std : : string value ;
} ;
struct VideoProfileMember
{
int xmlLine = { } ;
std : : string name ;
std : : vector < VideoProfile > profiles ;
} ;
struct VideoProfiles
{
int xmlLine = { } ;
std : : string name ;
std : : vector < VideoProfileMember > members ;
} ;
struct VideoCodec
{
int xmlLine = { } ;
std : : string name ;
2024-08-06 15:22:31 +08:00
std : : vector < std : : string > capabilities ;
2024-07-23 15:47:41 +08:00
std : : string extend ;
std : : string value ;
std : : vector < VideoFormat > formats ;
std : : vector < VideoProfiles > profiles ;
} ;
2023-06-28 20:10:51 +08:00
struct MacroVisitor final : tinyxml2 : : XMLVisitor
{
// comments, then name, then parameters and definition together, because that's how they appear in the xml!
// guaranteed to be 3 elements long
std : : vector < std : : string > macro ;
bool Visit ( tinyxml2 : : XMLText const & text ) override
{
if ( auto const nodeText = text . Value ( ) ; nodeText ! = nullptr )
{
macro . emplace_back ( nodeText ) ;
}
return true ;
}
} ;
2020-04-13 03:49:12 +08:00
private :
2025-08-21 20:23:00 +08:00
void addCommand ( std : : string const & name , CommandData & & commandData ) ;
void addCommandToHandle ( std : : pair < std : : string , CommandData > const & commandData ) ;
2023-03-03 05:14:37 +08:00
void addMissingFlagBits ( std : : vector < RequireData > & requireData , std : : string const & requiredBy ) ;
2022-02-28 17:11:04 +08:00
std : : string addTitleAndProtection ( std : : string const & title , std : : string const & strIf , std : : string const & strElse = { } ) const ;
2022-09-12 22:53:44 +08:00
bool allVectorSizesSupported ( std : : vector < ParamData > const & params , std : : map < size_t , VectorParamData > const & vectorParams ) const ;
2025-05-13 17:28:32 +08:00
void appendCppModuleCommands ( std : : vector < RequireData > const & requireData ,
2025-06-16 18:21:35 +08:00
std : : set < std : : string > & listedCommands ,
std : : string const & title ,
std : : string & commandMembers ) const ;
2025-04-30 15:07:39 +08:00
void checkAttributes ( int line ,
std : : map < std : : string , std : : string > const & attributes ,
std : : map < std : : string , std : : set < std : : string > > const & required ,
std : : map < std : : string , std : : set < std : : string > > const & optional = { } ) const ;
2021-08-02 18:04:37 +08:00
void checkBitmaskCorrectness ( ) const ;
void checkCommandCorrectness ( ) const ;
2021-08-05 05:43:49 +08:00
void checkCorrectness ( ) const ;
2023-01-27 00:12:29 +08:00
void checkDefineCorrectness ( ) const ;
2025-04-30 15:07:39 +08:00
void checkElements ( int line ,
std : : vector < tinyxml2 : : XMLElement const * > const & elements ,
std : : map < std : : string , bool > const & required ,
std : : set < std : : string > const & optional = { } ) const ;
2021-08-02 18:04:37 +08:00
void checkEnumCorrectness ( ) const ;
2022-02-28 17:11:04 +08:00
bool checkEquivalentSingularConstructor ( std : : vector < std : : map < std : : string , CommandData > : : const_iterator > const & constructorIts ,
std : : map < std : : string , CommandData > : : const_iterator constructorIt ,
std : : vector < ParamData > : : const_iterator lenIt ) const ;
void checkExtensionCorrectness ( ) const ;
2025-04-30 15:07:39 +08:00
void checkForError ( bool condition , int line , std : : string const & message ) const ;
void checkForWarning ( bool condition , int line , std : : string const & message ) const ;
2022-02-28 17:11:04 +08:00
void checkFuncPointerCorrectness ( ) const ;
void checkHandleCorrectness ( ) const ;
2025-02-19 16:11:19 +08:00
void checkRequireCorrectness ( ) const ;
void checkRequireCorrectness ( std : : vector < RequireData > const & requireData , std : : string const & section , std : : string const & name ) const ;
2025-02-25 01:02:40 +08:00
void checkRequireDependenciesCorrectness ( RequireData const & require , std : : string const & section , std : : string const & name ) const ;
void checkRequireTypesCorrectness ( RequireData const & require ) const ;
2024-09-17 21:03:34 +08:00
void checkSpirVCapabilityCorrectness ( ) const ;
2022-02-28 17:11:04 +08:00
void checkStructCorrectness ( ) const ;
2025-09-18 18:31:02 +08:00
void checkStructMemberArraySizesAreValid ( std : : vector < std : : string > const & arraySizes , int line ) const ;
2022-02-28 17:11:04 +08:00
void checkStructMemberCorrectness ( std : : string const & structureName , std : : vector < MemberData > const & members , std : : set < std : : string > & sTypeValues ) const ;
2025-09-18 18:31:02 +08:00
void checkStructMemberSelectorConnection ( std : : string const & selector , std : : vector < MemberData > const & members , std : : string const & memberType ) const ;
void checkStructMemberTypeIsKnown ( std : : string const & memberType , int line ) const ;
void checkStructMemberTypeIsRequired ( std : : string const & memberType , int line , std : : string const & structureName ) const ;
void checkStructMemberValueIsValid ( std : : string const & memberValue ,
std : : string const & memberType ,
std : : string const & memberName ,
int line ,
bool structUsed ,
std : : string const & structureName ,
std : : set < std : : string > & sTypeValues ) const ;
2024-09-23 19:47:05 +08:00
void checkSyncAccessCorrectness ( ) const ;
void checkSyncStageCorrectness ( ) const ;
2025-09-18 18:31:02 +08:00
bool containsArray ( std : : string const & type ) const ;
bool containsDeprecated ( std : : vector < MemberData > const & members ) const ;
bool containsFuncPointer ( std : : string const & type ) const ;
bool containsFloatingPoints ( std : : vector < MemberData > const & members ) const ;
bool containsName ( std : : vector < EnumValueData > const & enumValues , std : : string const & name ) const ;
bool containsUnion ( std : : string const & type ) const ;
2025-10-23 20:21:50 +08:00
bool describesVector ( StructData const & structure , std : : string const & type = " " ) const ;
2023-04-26 16:56:57 +08:00
std : : vector < size_t > determineChainedReturnParams ( std : : vector < ParamData > const & params , std : : vector < size_t > const & returnParams ) const ;
2022-05-04 14:37:09 +08:00
std : : vector < size_t > determineConstPointerParams ( std : : vector < ParamData > const & params ) const ;
std : : vector < std : : string > determineDataTypes ( std : : vector < VulkanHppGenerator : : ParamData > const & params ,
2022-09-12 22:53:44 +08:00
std : : map < size_t , VectorParamData > const & vectorParams ,
2022-05-04 14:37:09 +08:00
std : : vector < size_t > const & returnParams ,
2025-07-01 23:24:19 +08:00
std : : set < size_t > const & templatedParams ,
bool raii ) const ;
2022-05-04 14:37:09 +08:00
size_t determineDefaultStartIndex ( std : : vector < ParamData > const & params , std : : set < size_t > const & skippedParams ) const ;
2022-09-12 22:53:44 +08:00
bool determineEnumeration ( std : : map < size_t , VectorParamData > const & vectorParams , std : : vector < size_t > const & returnParams ) const ;
2022-05-18 15:12:00 +08:00
size_t determineInitialSkipCount ( std : : string const & command ) const ;
std : : vector < size_t > determineReturnParams ( std : : vector < ParamData > const & params ) const ;
2021-02-17 17:49:59 +08:00
std : : vector < std : : map < std : : string , CommandData > : : const_iterator >
2022-02-28 17:11:04 +08:00
determineRAIIHandleConstructors ( std : : string const & handleType , std : : map < std : : string , CommandData > : : const_iterator destructorIt ) const ;
std : : map < std : : string , CommandData > : : const_iterator determineRAIIHandleDestructor ( std : : string const & handleType ) const ;
2025-10-16 19:35:27 +08:00
std : : set < size_t > determineSingularParams ( size_t returnParam , std : : map < size_t , VectorParamData > const & vectorParams ) const ;
std : : set < size_t > determineSkippedParams ( std : : vector < ParamData > const & params ,
size_t initialSkipCount ,
std : : map < size_t , VectorParamData > const & vectorParams ,
std : : vector < size_t > const & returnParam ,
bool singular ) const ;
2025-10-23 20:21:50 +08:00
std : : string determineSubStruct ( std : : pair < std : : string , StructData > const & structure ) const ;
2025-10-16 19:35:27 +08:00
std : : map < size_t , VectorParamData > determineVectorParams ( std : : vector < ParamData > const & params ) const ;
std : : set < size_t > determineVoidPointerParams ( std : : vector < ParamData > const & params ) const ;
void distributeEnumValueAliases ( ) ;
void distributeRequirements ( ) ;
void distributeRequirements ( std : : vector < RequireData > const & requireData , std : : string const & requiredBy ) ;
void distributeStructAliases ( ) ;
2025-10-29 16:18:30 +08:00
void extendSpecialCommands ( std : : string const & name , bool definition , bool raii , std : : string & cmd ) const ;
2025-10-16 19:35:27 +08:00
void filterLenMembers ( ) ;
std : : string findTag ( std : : string const & name , std : : string const & postfix = " " ) const ;
2025-10-23 20:21:50 +08:00
void forEachRequiredBitmask ( std : : vector < RequireData > const & requireData ,
std : : set < std : : string > & encounteredBitmasks ,
std : : function < void ( std : : pair < std : : string , BitmaskData > const & ) > const & bitmaskAction ) const ;
2025-10-16 19:35:27 +08:00
void forEachRequiredCommand ( std : : vector < RequireData > const & requireData ,
std : : function < void ( NameLine const & , std : : pair < std : : string , CommandData > const & ) > const & commandAction ) const ;
2025-10-23 20:21:50 +08:00
void forEachRequiredConstant ( std : : vector < RequireData > const & requireData ,
std : : set < std : : string > & encounteredConstants ,
std : : function < void ( std : : pair < std : : string , ConstantData > const & ) > const & constantAction ) const ;
void forEachRequiredEnumConstant ( std : : vector < RequireData > const & requireData ,
std : : set < std : : string > & encounteredEnumConstants ,
std : : function < void ( EnumConstantData const & ) > const & enumConstantAction ) const ;
void forEachRequiredFuncPointer ( std : : vector < RequireData > const & requireData ,
std : : function < void ( std : : pair < std : : string , FuncPointerData > const & ) > const & funcPointerAction ) const ;
void forEachRequiredHandle ( std : : vector < RequireData > const & requireData ,
std : : function < void ( std : : pair < std : : string , HandleData > const & ) > const & handleAction ) const ;
void forEachRequiredStruct ( std : : vector < RequireData > const & requireData ,
std : : function < void ( std : : pair < std : : string , StructData > const & ) > const & structAction ) const ;
2025-10-16 19:35:27 +08:00
std : : set < std : : string > gatherResultCodes ( ) const ;
std : : pair < std : : string , std : : string > generateAllocatorTemplates ( std : : vector < size_t > const & returnParams ,
std : : vector < std : : string > const & returnDataTypes ,
std : : map < size_t , VectorParamData > const & vectorParams ,
std : : vector < size_t > const & chainedReturnParams ,
CommandFlavourFlags flavourFlags ,
bool definition ) const ;
std : : string generateArgumentListEnhanced ( std : : vector < ParamData > const & params ,
std : : vector < size_t > const & returnParams ,
std : : map < size_t , VectorParamData > const & vectorParams ,
std : : set < size_t > const & skippedParams ,
std : : set < size_t > const & singularParams ,
std : : set < size_t > const & templatedParams ,
std : : vector < size_t > const & chainedReturnParams ,
bool raii ,
bool definition ,
CommandFlavourFlags flavourFlags ,
bool withDispatcher ) const ;
2025-01-08 18:53:08 +08:00
std : : string
generateArgumentListStandard ( std : : vector < ParamData > const & params , std : : set < size_t > const & skippedParams , bool definition , bool withDispatcher ) const ;
2023-03-01 17:17:02 +08:00
std : : string generateArgumentTemplates ( std : : vector < ParamData > const & params ,
std : : vector < size_t > const & returnParams ,
std : : map < size_t , VectorParamData > const & vectorParams ,
std : : set < size_t > const & templatedParams ,
2023-04-26 16:56:57 +08:00
std : : vector < size_t > const & chainedReturnParams ,
2023-03-01 17:17:02 +08:00
bool raii ) const ;
std : : string generateBaseTypes ( ) const ;
2022-10-05 22:58:40 +08:00
std : : string generateBitmask ( std : : map < std : : string , BitmaskData > : : const_iterator bitmaskIt , std : : string const & surroundingProtect ) const ;
2022-08-02 16:00:16 +08:00
std : : string generateBitmasksToString ( ) const ;
2022-07-26 17:13:43 +08:00
std : : string generateBitmasksToString ( std : : vector < RequireData > const & requireData , std : : set < std : : string > & listedBitmasks , std : : string const & title ) const ;
2025-10-16 19:35:27 +08:00
std : : string generateBitmaskToString ( std : : pair < std : : string , BitmaskData > const & bitmaskData ) const ;
2021-10-20 22:55:30 +08:00
std : : string generateCallArgumentsEnhanced ( CommandData const & commandData ,
size_t initialSkipCount ,
bool nonConstPointerAsNullptr ,
std : : set < size_t > const & singularParams ,
2022-01-10 18:50:11 +08:00
std : : set < size_t > const & templatedParams ,
2024-01-02 20:47:01 +08:00
bool raii ,
bool raiiFactory ,
2023-10-02 20:57:52 +08:00
CommandFlavourFlags flavourFlags ) const ;
2024-10-09 22:06:13 +08:00
std : : string generateCallArgumentsStandard ( std : : vector < ParamData > const & params , size_t initialSkipCount ) const ;
2021-08-05 19:13:41 +08:00
std : : string generateCallArgumentEnhanced ( std : : vector < ParamData > const & params ,
size_t paramIndex ,
bool nonConstPointerAsNullptr ,
std : : set < size_t > const & singularParams ,
2023-10-02 20:57:52 +08:00
std : : set < size_t > const & templatedParams ,
2024-01-02 20:47:01 +08:00
CommandFlavourFlags flavourFlags ,
bool raiiFactory ) const ;
2021-08-05 19:13:41 +08:00
std : : string generateCallArgumentEnhancedConstPointer ( ParamData const & param ,
size_t paramIndex ,
2022-01-10 18:50:11 +08:00
std : : set < size_t > const & singularParams ,
std : : set < size_t > const & templatedParams ) const ;
2022-09-21 15:28:38 +08:00
std : : string generateCallArgumentEnhancedNonConstPointer ( ParamData const & param ,
size_t paramIndex ,
bool nonConstPointerAsNullptr ,
std : : set < size_t > const & singularParams ) const ;
2023-10-02 20:57:52 +08:00
std : : string generateCallArgumentEnhancedValue ( std : : vector < ParamData > const & params ,
size_t paramIndex ,
std : : set < size_t > const & singularParams ,
2024-01-02 20:47:01 +08:00
CommandFlavourFlags flavourFlags ,
bool raiiFactory ) const ;
2022-09-12 22:53:44 +08:00
std : : string generateCallSequence ( std : : string const & name ,
CommandData const & commandData ,
std : : vector < size_t > const & returnParams ,
std : : map < size_t , VectorParamData > const & vectorParams ,
size_t initialSkipCount ,
std : : set < size_t > const & singularParams ,
std : : set < size_t > const & templatedParams ,
2023-06-19 18:46:04 +08:00
std : : vector < size_t > const & chainedReturnParams ,
2022-11-28 23:53:24 +08:00
CommandFlavourFlags flavourFlags ,
2024-01-02 20:47:01 +08:00
bool raii ,
bool raiiFactory ) const ;
2022-04-27 16:37:11 +08:00
std : : string generateChainTemplates ( std : : vector < size_t > const & returnParams , bool chained ) const ;
2023-02-02 21:09:45 +08:00
std : : string generateCommand ( std : : string const & name , CommandData const & commandData , size_t initialSkipCount , bool definition , bool raii ) const ;
2022-08-02 16:00:16 +08:00
std : : string generateCommandDefinitions ( ) const ;
2022-02-28 17:11:04 +08:00
std : : string
generateCommandDefinitions ( std : : vector < RequireData > const & requireData , std : : set < std : : string > & listedCommands , std : : string const & title ) const ;
2021-06-24 17:09:49 +08:00
std : : string generateCommandDefinitions ( std : : string const & command , std : : string const & handle ) const ;
2022-09-12 22:53:44 +08:00
std : : string generateCommandEnhanced ( std : : string const & name ,
CommandData const & commandData ,
size_t initialSkipCount ,
bool definition ,
std : : map < size_t , VectorParamData > const & vectorParams ,
std : : vector < size_t > const & returnParams ,
2024-06-11 22:53:15 +08:00
CommandFlavourFlags flavourFlags ) const ;
2021-07-07 14:30:14 +08:00
std : : string generateCommandName ( std : : string const & vulkanCommandName ,
std : : vector < ParamData > const & params ,
size_t initialSkipCount ,
2022-11-28 23:53:24 +08:00
CommandFlavourFlags flavourFlags = { } ) const ;
2023-02-02 21:09:45 +08:00
std : : string generateCommandResult ( std : : string const & name , CommandData const & commandData , size_t initialSkipCount , bool definition , bool raii ) const ;
std : : string generateCommandResultMultiSuccessNoErrors (
std : : string const & name , CommandData const & commandData , size_t initialSkipCount , bool definition , bool raii ) const ;
std : : string generateCommandResultMultiSuccessWithErrors (
std : : string const & name , CommandData const & commandData , size_t initialSkipCount , bool definition , bool raii ) const ;
2022-02-28 17:11:04 +08:00
std : : string generateCommandResultMultiSuccessWithErrors1Return (
2023-02-02 21:09:45 +08:00
std : : string const & name , CommandData const & commandData , size_t initialSkipCount , bool definition , size_t returnParam , bool raii ) const ;
std : : string generateCommandResultMultiSuccessWithErrors2Return ( std : : string const & name ,
CommandData const & commandData ,
size_t initialSkipCount ,
bool definition ,
std : : vector < size_t > const & returnParamIndices ,
bool raii ) const ;
std : : string generateCommandResultMultiSuccessWithErrors3Return ( std : : string const & name ,
CommandData const & commandData ,
size_t initialSkipCount ,
bool definition ,
std : : vector < size_t > const & returnParamIndices ,
bool raii ) const ;
2021-09-21 19:37:15 +08:00
std : : string
2023-02-02 21:09:45 +08:00
generateCommandResultSingleSuccess ( std : : string const & name , CommandData const & commandData , size_t initialSkipCount , bool definition , bool raii ) const ;
std : : string generateCommandResultSingleSuccessNoErrors (
std : : string const & name , CommandData const & commandData , size_t initialSkipCount , bool definition , bool raii ) const ;
std : : string generateCommandResultSingleSuccessWithErrors (
std : : string const & name , CommandData const & commandData , size_t initialSkipCount , bool definition , bool raii ) const ;
2022-02-28 17:11:04 +08:00
std : : string generateCommandResultSingleSuccessWithErrors1Return (
2023-02-02 21:09:45 +08:00
std : : string const & name , CommandData const & commandData , size_t initialSkipCount , bool definition , size_t returnParam , bool raii ) const ;
2022-02-28 17:11:04 +08:00
std : : string generateCommandResultSingleSuccessWithErrors1ReturnChain (
2023-02-02 21:09:45 +08:00
std : : string const & name , CommandData const & commandData , size_t initialSkipCount , bool definition , size_t returnParam , bool raii ) const ;
2022-02-28 17:11:04 +08:00
std : : string generateCommandResultSingleSuccessWithErrors1ReturnHandle (
2023-02-02 21:09:45 +08:00
std : : string const & name , CommandData const & commandData , size_t initialSkipCount , bool definition , size_t returnParam , bool raii ) const ;
2022-02-28 17:11:04 +08:00
std : : string generateCommandResultSingleSuccessWithErrors1ReturnValue (
2023-02-02 21:09:45 +08:00
std : : string const & name , CommandData const & commandData , size_t initialSkipCount , bool definition , size_t returnParam , bool raii ) const ;
2022-02-28 17:11:04 +08:00
std : : string generateCommandResultSingleSuccessWithErrors1ReturnVoid (
2023-02-02 21:09:45 +08:00
std : : string const & name , CommandData const & commandData , size_t initialSkipCount , bool definition , size_t returnParam , bool raii ) const ;
std : : string generateCommandResultSingleSuccessWithErrors2Return ( std : : string const & name ,
CommandData const & commandData ,
size_t initialSkipCount ,
bool definition ,
std : : vector < size_t > const & returnParamIndices ,
bool raii ) const ;
2024-06-12 22:36:03 +08:00
std : : string generateCommandResultSingleSuccessWithErrors3Return ( std : : string const & name ,
CommandData const & commandData ,
size_t initialSkipCount ,
bool definition ,
std : : vector < size_t > const & returnParamIndices ,
bool raii ) const ;
2023-02-02 21:09:45 +08:00
std : : string generateCommandResultWithErrors0Return (
std : : string const & name , CommandData const & commandData , size_t initialSkipCount , bool definition , bool raii ) const ;
2022-11-29 16:18:43 +08:00
std : : string generateCommandSet ( bool definition ,
std : : string const & standard ,
std : : vector < std : : string > const & enhanced = { } ,
std : : vector < std : : string > const & unique = { } ) const ;
std : : string generateCommandSet ( std : : string const & standard , std : : string const & enhanced ) const ;
2023-02-02 21:09:45 +08:00
std : : string generateCommandSetInclusive ( std : : string const & name ,
CommandData const & commandData ,
size_t initialSkipCount ,
bool definition ,
std : : vector < size_t > returnParams ,
std : : map < size_t , VectorParamData > vectorParams ,
bool unique ,
std : : vector < CommandFlavourFlags > const & flags ,
bool raii ,
bool raiiFactory ,
std : : vector < CommandFlavourFlags > const & raiiFlags ) const ;
std : : string
generateCommandSetExclusive ( std : : string const & name , CommandData const & commandData , size_t initialSkipCount , bool definition , bool raii ) const ;
2022-02-28 17:11:04 +08:00
std : : string generateCommandStandard ( std : : string const & name , CommandData const & commandData , size_t initialSkipCount , bool definition ) const ;
2023-02-02 21:09:45 +08:00
std : : string generateCommandVoid ( std : : string const & name , CommandData const & commandData , size_t initialSkipCount , bool definition , bool raii ) const ;
std : : string generateCommandValue ( std : : string const & name , CommandData const & commandData , size_t initialSkipCount , bool definition , bool raii ) const ;
2022-02-28 17:11:04 +08:00
std : : string
2023-02-02 21:09:45 +08:00
generateCommandVoid0Return ( std : : string const & name , CommandData const & commandData , size_t initialSkipCount , bool definition , bool raii ) const ;
std : : string generateCommandVoid1Return (
std : : string const & name , CommandData const & commandData , size_t initialSkipCount , bool definition , size_t returnParam , bool raii ) const ;
std : : string generateCommandVoid2Return ( std : : string const & name ,
CommandData const & commandData ,
size_t initialSkipCount ,
bool definition ,
std : : vector < size_t > const & returnParamIndices ,
bool raii ) const ;
2025-10-23 20:21:50 +08:00
std : : string generateConstexprString ( std : : pair < std : : string , StructData > const & structData ) const ;
2023-06-28 20:10:51 +08:00
std : : string generateConstexprDefines ( ) const ;
std : : string generateConstexprUsings ( ) const ;
2024-12-12 22:20:37 +08:00
std : : string generateCppModuleFuncpointerUsings ( ) const ;
2023-06-28 20:10:51 +08:00
std : : string generateCppModuleHandleUsings ( ) const ;
std : : string generateCppModuleStructUsings ( ) const ;
std : : string generateCppModuleUniqueHandleUsings ( ) const ;
std : : string generateCppModuleFuncsUsings ( ) const ;
std : : string generateCppModuleEnumUsings ( ) const ;
std : : string generateCppModuleFormatTraitsUsings ( ) const ;
std : : string generateCppModuleExtensionInspectionUsings ( ) const ;
std : : string generateCppModuleUsings ( ) const ;
2025-05-13 17:28:32 +08:00
std : : string generateCppModuleCommands ( ) const ;
2023-06-28 20:10:51 +08:00
std : : string generateCppModuleRaiiUsings ( ) const ;
2023-09-19 19:04:36 +08:00
std : : string generateCppModuleSharedHandleUsings ( ) const ;
2024-11-26 18:08:49 +08:00
std : : string generateCppModuleHandleHashSpecializations ( ) const ;
std : : string generateCppModuleHashSpecializations ( ) const ;
std : : string generateCppModuleStructHashSpecializations ( ) const ;
2022-09-12 22:53:44 +08:00
std : : string generateDataDeclarations ( CommandData const & commandData ,
std : : vector < size_t > const & returnParams ,
std : : map < size_t , VectorParamData > const & vectorParams ,
std : : set < size_t > const & templatedParams ,
2022-11-28 23:53:24 +08:00
CommandFlavourFlags flavourFlags ,
2022-09-12 22:53:44 +08:00
bool raii ,
std : : vector < std : : string > const & dataTypes ,
std : : string const & dataType ,
std : : string const & returnType ,
std : : string const & returnVariable ) const ;
std : : string generateDataDeclarations1Return ( CommandData const & commandData ,
std : : vector < size_t > const & returnParams ,
std : : map < size_t , VectorParamData > const & vectorParams ,
std : : set < size_t > const & templatedParams ,
2022-11-28 23:53:24 +08:00
CommandFlavourFlags flavourFlags ,
2022-09-12 22:53:44 +08:00
std : : vector < std : : string > const & dataTypes ,
std : : string const & dataType ,
std : : string const & returnType ,
std : : string const & returnVariable ) const ;
std : : string generateDataDeclarations2Returns ( CommandData const & commandData ,
std : : vector < size_t > const & returnParams ,
std : : map < size_t , VectorParamData > const & vectorParams ,
2022-11-28 23:53:24 +08:00
CommandFlavourFlags flavourFlags ,
2022-09-12 22:53:44 +08:00
bool raii ,
std : : vector < std : : string > const & dataTypes ,
2024-01-02 20:47:01 +08:00
std : : string const & returnType ,
2022-09-12 22:53:44 +08:00
std : : string const & returnVariable ) const ;
2023-03-07 15:23:14 +08:00
std : : string generateDataDeclarations3Returns ( CommandData const & commandData ,
std : : vector < size_t > const & returnParams ,
std : : map < size_t , VectorParamData > const & vectorParams ,
CommandFlavourFlags flavourFlags ,
bool raii ,
std : : vector < std : : string > const & dataTypes ) const ;
2022-09-12 22:53:44 +08:00
std : : string generateDataPreparation ( CommandData const & commandData ,
size_t initialSkipCount ,
std : : vector < size_t > const & returnParams ,
std : : map < size_t , VectorParamData > const & vectorParams ,
std : : set < size_t > const & templatedParams ,
2022-11-28 23:53:24 +08:00
CommandFlavourFlags flavourFlags ,
2024-06-11 22:53:15 +08:00
bool enumerating ,
std : : vector < std : : string > const & dataTypes ) const ;
2022-09-12 22:53:44 +08:00
std : : string generateDataSizeChecks ( CommandData const & commandData ,
std : : vector < size_t > const & returnParams ,
std : : vector < std : : string > const & returnParamTypes ,
std : : map < size_t , VectorParamData > const & vectorParams ,
std : : set < size_t > const & templatedParams ,
bool singular ) const ;
2023-08-16 14:37:43 +08:00
std : : string generateDebugReportObjectType ( std : : string const & objectType ) const ;
2024-05-09 00:46:23 +08:00
std : : string generateDecoratedReturnType ( CommandData const & commandData ,
2024-01-02 20:47:01 +08:00
std : : vector < size_t > const & returnParams ,
std : : map < size_t , VectorParamData > const & vectorParams ,
2025-02-24 20:57:17 +08:00
bool enumerating ,
2024-01-02 20:47:01 +08:00
CommandFlavourFlags flavourFlags ,
std : : string const & returnType ) const ;
2024-12-12 16:46:53 +08:00
std : : string generateDeprecatedConstructors ( std : : string const & name ) const ;
std : : string generateDeprecatedStructSetters ( std : : string const & name ) const ;
2022-07-28 23:09:08 +08:00
std : : string generateDispatchLoaderDynamic ( ) const ; // uses vkGet*ProcAddress to get function pointers
2025-08-28 21:38:03 +08:00
std : : string generateDispatchLoaderDynamicCommandMembers ( std : : vector < RequireData > const & requireData ,
std : : set < std : : string > const & listedCommands ,
std : : string const & title ) const ;
std : : string generateDispatchLoaderDynamicDeviceCommandAssignment ( std : : vector < RequireData > const & requireData ,
std : : set < std : : string > const & listedCommands ,
std : : string const & title ) const ;
std : : string generateDispatchLoaderDynamicInitialCommandAssignment ( std : : vector < RequireData > const & requireData ,
std : : set < std : : string > const & listedCommands ,
std : : string const & title ) const ;
std : : string generateDispatchLoaderDynamicInstanceCommandAssignment ( std : : vector < RequireData > const & requireData ,
std : : set < std : : string > const & listedCommands ,
std : : string const & title ) const ;
std : : string generateDispatchLoaderStatic ( ) const ; // uses exported symbols from loader
2021-07-13 15:01:55 +08:00
std : : string generateDestroyCommand ( std : : string const & name , CommandData const & commandData ) const ;
2024-04-11 14:43:15 +08:00
std : : string
generateDispatchLoaderDynamicCommandAssignment ( std : : string const & commandName , std : : string const & aliasName , std : : string const & firstArg ) const ;
2021-07-21 23:09:21 +08:00
std : : string generateDispatchLoaderStaticCommands ( std : : vector < RequireData > const & requireData ,
2021-07-08 23:30:53 +08:00
std : : set < std : : string > & listedCommands ,
2021-07-09 15:01:56 +08:00
std : : string const & title ) const ;
2022-10-05 15:28:37 +08:00
std : : string generateEnum ( std : : pair < std : : string , EnumData > const & enumData , std : : string const & surroundingProtect ) const ;
2024-04-03 14:29:10 +08:00
std : : string generateEnumInitializer ( TypeInfo const & type ,
std : : vector < std : : string > const & arraySizes ,
std : : vector < EnumValueData > const & values ,
bool bitmask ) const ;
2023-03-01 17:17:02 +08:00
std : : string generateEnums ( ) const ;
std : : string generateEnums ( std : : vector < RequireData > const & requireData , std : : set < std : : string > & listedEnums , std : : string const & title ) const ;
std : : string generateEnumsToString ( ) const ;
std : : string generateEnumsToString ( std : : vector < RequireData > const & requireData , std : : set < std : : string > & listedEnums , std : : string const & title ) const ;
2021-07-13 15:01:55 +08:00
std : : string generateEnumToString ( std : : pair < std : : string , EnumData > const & enumData ) const ;
2023-03-01 17:17:02 +08:00
std : : pair < std : : string , std : : string > generateEnumSuffixes ( std : : string const & name , bool bitmask ) const ;
std : : string generateEnumValueName ( std : : string const & enumName , std : : string const & valueName , bool bitmask ) const ;
2025-04-03 15:06:58 +08:00
std : : string generateExtensionDependencies ( ) const ;
2023-04-05 19:37:34 +08:00
template < class Predicate , class Extraction >
std : : string generateExtensionReplacedBy ( Predicate p , Extraction e ) const ;
template < class Predicate >
std : : string generateExtensionReplacedTest ( Predicate p ) const ;
2023-04-11 15:14:50 +08:00
std : : string generateExtensionsList ( std : : string const & type ) const ;
2023-04-05 19:37:34 +08:00
std : : string generateExtensionTypeTest ( std : : string const & type ) const ;
std : : string generateFormatTraits ( ) const ;
2025-05-07 22:24:40 +08:00
std : : string generateFormatTraitsCases ( EnumData const & enumData ,
std : : function < bool ( FormatData const & ) > predicate ,
std : : function < std : : string ( FormatData const & ) > generator ) const ;
std : : string generateFormatTraitsList ( EnumData const & enumData , std : : function < bool ( FormatData const & ) > predicate ) const ;
template < typename T >
std : : string generateFormatTraitsSubCases ( FormatData const & formatData ,
std : : function < std : : vector < T > const & ( FormatData const & ) > accessor ,
std : : string const & subCaseName ,
std : : function < std : : string ( T const & subCaseData ) > generator ,
std : : string const & defaultReturn ) const ;
2024-12-12 16:46:53 +08:00
std : : string generateFuncPointer ( std : : pair < std : : string , FuncPointerData > const & funcPointer , std : : set < std : : string > & listedStructs ) const ;
2025-01-07 01:04:33 +08:00
std : : string generateFuncPointerReturns ( ) const ;
2024-01-08 19:19:28 +08:00
std : : string generateFunctionPointerCheck ( std : : string const & function , std : : set < std : : string > const & requiredBy , bool raii ) const ;
2023-04-05 19:37:34 +08:00
std : : string generateHandle ( std : : pair < std : : string , HandleData > const & handle , std : : set < std : : string > & listedHandles ) const ;
std : : string generateHandleCommandDeclarations ( std : : set < std : : string > const & commands ) const ;
2022-02-28 17:11:04 +08:00
std : : string generateHandleDependencies ( std : : pair < std : : string , HandleData > const & handle , std : : set < std : : string > & listedHandles ) const ;
2021-09-14 16:01:02 +08:00
std : : string generateHandleEmpty ( HandleData const & handleData ) const ;
2023-02-09 00:21:03 +08:00
std : : string generateHandleForwardDeclarations ( ) const ;
std : : string generateHandleForwardDeclarations ( std : : vector < RequireData > const & requireData , std : : string const & title ) const ;
2025-06-16 21:31:51 +08:00
std : : string
generateHandleHashStructures ( std : : vector < RequireData > const & requireData , std : : string const & title , std : : set < std : : string > & listedHandles ) const ;
2022-08-02 16:00:16 +08:00
std : : string generateHandleHashStructures ( ) const ;
std : : string generateHandles ( ) const ;
2024-06-27 19:32:31 +08:00
std : : string generateIndexTypeTraits ( std : : pair < std : : string , EnumData > const & enumData ) const ;
std : : string generateLayerSettingTypeTraits ( ) const ;
2020-12-11 00:23:44 +08:00
std : : string
2022-04-07 21:38:51 +08:00
generateLenInitializer ( std : : vector < MemberData > : : const_iterator mit ,
std : : map < std : : vector < MemberData > : : const_iterator , std : : vector < std : : vector < MemberData > : : const_iterator > > : : const_iterator litit ,
bool mutualExclusiveLens ) const ;
std : : string generateName ( TypeInfo const & typeInfo ) const ;
2022-09-12 22:53:44 +08:00
std : : string generateNoExcept ( std : : vector < std : : string > const & errorCodes ,
std : : vector < size_t > const & returnParams ,
std : : map < size_t , VectorParamData > const & vectorParams ,
2022-11-28 23:53:24 +08:00
CommandFlavourFlags flavourFlags ,
2022-09-12 22:53:44 +08:00
bool vectorSizeCheck ,
bool raii ) const ;
2022-04-07 21:38:51 +08:00
std : : string generateObjectDeleter ( std : : string const & commandName , CommandData const & commandData , size_t initialSkipCount , size_t returnParam ) const ;
2023-08-16 14:37:43 +08:00
std : : string generateObjectTypeToDebugReportObjectType ( ) const ;
2023-06-28 20:10:51 +08:00
std : : pair < std : : string , std : : string > generateProtection ( std : : string const & protect , bool defined = true ) const ;
2022-08-02 16:00:16 +08:00
std : : string generateRAIICommandDefinitions ( ) const ;
2022-02-28 17:11:04 +08:00
std : : string
generateRAIICommandDefinitions ( std : : vector < RequireData > const & requireData , std : : set < std : : string > & listedCommands , std : : string const & title ) const ;
2025-08-28 21:38:03 +08:00
std : : string generateRAIIDispatcherCommandsContextInitializers ( std : : vector < RequireData > const & requireData ,
std : : set < std : : string > const & listedCommands ,
std : : string const & title ) const ;
std : : string generateRAIIDispatcherCommandsContextMembers ( std : : vector < RequireData > const & requireData ,
std : : set < std : : string > const & listedCommands ,
std : : string const & title ) const ;
std : : string generateRAIIDispatcherCommandsDeviceAssignments ( std : : vector < RequireData > const & requireData ,
std : : set < std : : string > const & listedCommands ,
std : : string const & title ) const ;
std : : string generateRAIIDispatcherCommandsDeviceMembers ( std : : vector < RequireData > const & requireData ,
std : : set < std : : string > const & listedCommands ,
std : : string const & title ) const ;
std : : string generateRAIIDispatcherCommandsInstanceAssignments ( std : : vector < RequireData > const & requireData ,
std : : set < std : : string > const & listedCommands ,
std : : string const & title ) const ;
std : : string generateRAIIDispatcherCommandsInstanceMembers ( std : : vector < RequireData > const & requireData ,
std : : set < std : : string > const & listedCommands ,
std : : string const & title ) const ;
2022-08-02 16:00:16 +08:00
std : : string generateRAIIDispatchers ( ) const ;
2025-07-22 19:48:50 +08:00
std : : string generateRAIIFactoryReturnStatements ( CommandData const & commandData ,
std : : string const & vkType ,
bool enumerating ,
std : : string const & returnType ,
std : : string const & returnVariable ,
bool singular ) const ;
2022-02-28 17:11:04 +08:00
std : : string generateRAIIHandle ( std : : pair < std : : string , HandleData > const & handle ,
std : : set < std : : string > & listedHandles ,
std : : set < std : : string > const & specialFunctions ) const ;
2021-10-25 17:22:02 +08:00
std : : string generateRAIIHandleCommand ( std : : string const & command , size_t initialSkipCount , bool definition ) const ;
2022-02-28 17:11:04 +08:00
std : : string generateRAIIHandleCommandDeclarations ( std : : pair < std : : string , HandleData > const & handle , std : : set < std : : string > const & specialFunctions ) const ;
2023-02-02 21:09:45 +08:00
std : : string generateRAIIHandleCommandEnhanced ( std : : string const & name ,
CommandData const & commandData ,
size_t initialSkipCount ,
std : : vector < size_t > const & returnParams ,
std : : map < size_t , VectorParamData > const & vectorParamIndices ,
bool definition ,
CommandFlavourFlags flavourFlags = { } ) const ;
std : : string generateRAIIHandleCommandFactory ( std : : string const & name ,
CommandData const & commandData ,
size_t initialSkipCount ,
std : : vector < size_t > const & returnParams ,
std : : map < size_t , VectorParamData > const & vectorParams ,
bool definition ,
CommandFlavourFlags flavourFlags = { } ) const ;
2021-10-14 14:36:04 +08:00
std : : string generateRAIIHandleCommandFactoryArgumentList ( std : : vector < ParamData > const & params ,
2022-01-11 16:45:35 +08:00
std : : set < size_t > const & skippedParams ,
2021-10-14 14:36:04 +08:00
bool definition ,
bool singular ) const ;
2024-10-09 22:06:13 +08:00
std : : string generateRAIIHandleCommandStandard ( std : : string const & name , CommandData const & commandData , size_t initialSkipCount , bool definition ) const ;
2022-02-28 17:11:04 +08:00
std : : pair < std : : string , std : : string > generateRAIIHandleConstructor ( std : : pair < std : : string , HandleData > const & handle ,
std : : map < std : : string , CommandData > : : const_iterator constructorIt ,
std : : string const & enter ,
std : : string const & leave ) const ;
2024-01-02 20:47:01 +08:00
std : : string generateRAIIHandleConstructorByCall ( std : : pair < std : : string , HandleData > const & handle ,
std : : map < std : : string , CommandData > : : const_iterator constructorIt ,
std : : string const & enter ,
std : : string const & leave ,
bool isPlural ,
bool forceSingular ) const ;
2022-02-28 17:11:04 +08:00
std : : pair < std : : string , std : : string > generateRAIIHandleConstructor1Return2Vector ( std : : pair < std : : string , HandleData > const & handle ,
std : : map < std : : string , CommandData > : : const_iterator constructorIt ,
std : : string const & enter ,
std : : string const & leave ,
size_t returnParam ,
2022-09-12 22:53:44 +08:00
std : : map < size_t , VectorParamData > const & vectorParamIndices ) const ;
2022-02-28 17:11:04 +08:00
std : : pair < std : : string , std : : string > generateRAIIHandleConstructors ( std : : pair < std : : string , HandleData > const & handle ) const ;
std : : string generateRAIIHandleConstructorArgument ( ParamData const & param , bool definition , bool singular , bool takesOwnership ) const ;
2025-01-08 18:53:08 +08:00
std : : string generateRAIIHandleConstructorArguments ( std : : pair < std : : string , HandleData > const & handle ,
std : : map < std : : string , CommandData > : : const_iterator constructorIt ,
bool singular ,
bool takesOwnership ) const ;
2022-02-28 17:11:04 +08:00
std : : string generateRAIIHandleConstructorInitializationList ( std : : pair < std : : string , HandleData > const & handle ,
std : : map < std : : string , CommandData > : : const_iterator constructorIt ,
std : : map < std : : string , CommandData > : : const_iterator destructorIt ,
bool takesOwnership ) const ;
std : : string generateRAIIHandleConstructorParamName ( std : : string const & type , std : : map < std : : string , CommandData > : : const_iterator destructorIt ) const ;
std : : pair < std : : string , std : : string > generateRAIIHandleConstructorResult ( std : : pair < std : : string , HandleData > const & handle ,
std : : map < std : : string , CommandData > : : const_iterator constructorIt ,
std : : string const & enter ,
std : : string const & leave ) const ;
2024-01-02 20:47:01 +08:00
std : : string generateRAIIHandleConstructorTakeOwnership ( std : : pair < std : : string , HandleData > const & handle ) const ;
2022-02-28 17:11:04 +08:00
std : : pair < std : : string , std : : string > generateRAIIHandleConstructorVoid ( std : : pair < std : : string , HandleData > const & handle ,
std : : map < std : : string , CommandData > : : const_iterator constructorIt ,
std : : string const & enter ,
std : : string const & leave ) const ;
std : : string generateRAIIHandleContext ( std : : pair < std : : string , HandleData > const & handle , std : : set < std : : string > const & specialFunctions ) const ;
std : : string generateRAIIHandleDestructorCallArguments ( std : : string const & handleType ,
std : : map < std : : string , CommandData > : : const_iterator destructorIt ) const ;
2025-09-18 21:35:27 +08:00
std : : tuple < std : : string , std : : string , std : : string , std : : string , std : : string , std : : string , std : : string , std : : string , std : : string >
2022-02-15 17:50:52 +08:00
generateRAIIHandleDetails ( std : : pair < std : : string , HandleData > const & handle ) const ;
2022-02-28 17:11:04 +08:00
std : : string generateRAIIHandleForwardDeclarations ( std : : vector < RequireData > const & requireData , std : : string const & title ) const ;
2022-08-02 16:00:16 +08:00
std : : string generateRAIIHandles ( ) const ;
2024-01-02 20:47:01 +08:00
std : : string generateRAIIHandleSingularConstructorArguments ( std : : pair < std : : string , HandleData > const & handle ,
std : : vector < ParamData > const & params ,
2024-06-11 22:53:15 +08:00
std : : string const & argumentType ,
std : : string const & argumentName ) const ;
2023-04-11 15:14:50 +08:00
template < class Predicate , class Extraction >
std : : string generateReplacedExtensionsList ( Predicate p , Extraction e ) const ;
2022-03-24 17:52:24 +08:00
std : : string generateResultAssignment ( CommandData const & commandData ) const ;
2025-07-01 23:24:19 +08:00
std : : string generateResultCheck ( CommandData const & commandData ,
std : : string const & className ,
std : : string const & classSeparator ,
std : : string commandName ,
bool enumerating ,
bool raii ) const ;
2022-07-28 23:09:08 +08:00
std : : string generateResultExceptions ( ) const ;
2025-09-18 18:31:02 +08:00
std : : string generateReturnDataType ( std : : map < size_t , VectorParamData > const & vectorParams ,
std : : vector < size_t > const & returnParams ,
bool enumerating ,
std : : vector < std : : string > const & dataTypes ,
CommandFlavourFlags flavourFlags ,
bool raii ) const ;
2022-04-07 21:38:51 +08:00
std : : string generateReturnStatement ( std : : string const & commandName ,
CommandData const & commandData ,
std : : string const & returnVariable ,
std : : string const & returnType ,
2024-01-02 20:47:01 +08:00
std : : string const & decoratedReturnType ,
2022-04-07 21:38:51 +08:00
std : : string const & dataType ,
size_t initialSkipCount ,
size_t returnParam ,
2022-11-28 23:53:24 +08:00
CommandFlavourFlags flavourFlags ,
2022-05-26 02:21:21 +08:00
bool enumerating ,
bool raii ) const ;
2024-01-02 20:47:01 +08:00
std : : string generateReturnType ( std : : vector < size_t > const & returnParams ,
2022-09-12 22:53:44 +08:00
std : : map < size_t , VectorParamData > const & vectorParams ,
2022-11-28 23:53:24 +08:00
CommandFlavourFlags flavourFlags ,
2022-09-12 22:53:44 +08:00
bool raii ,
2023-04-26 16:56:57 +08:00
std : : vector < std : : string > const & dataTypes ) const ;
2022-09-12 22:53:44 +08:00
std : : string generateReturnVariable ( CommandData const & commandData ,
std : : vector < size_t > const & returnParams ,
std : : map < size_t , VectorParamData > const & vectorParams ,
2022-11-28 23:53:24 +08:00
CommandFlavourFlags flavourFlags ) const ;
2022-02-28 17:11:04 +08:00
std : : string
generateSizeCheck ( std : : vector < std : : vector < MemberData > : : const_iterator > const & arrayIts , std : : string const & structName , bool mutualExclusiveLens ) const ;
2022-09-21 15:28:38 +08:00
std : : string generateStaticAssertions ( ) const ;
2023-02-21 03:01:34 +08:00
std : : string generateStaticAssertions ( std : : vector < RequireData > const & requireData , std : : string const & title , std : : set < std : : string > & listedStructs ) const ;
2025-10-23 20:21:50 +08:00
std : : string generateStruct ( std : : pair < std : : string , StructData > const & structure , std : : set < std : : string > & listedStructs ) const ;
std : : string generateStructCastAssignments ( std : : pair < std : : string , StructData > const & structData ) const ;
std : : string generateStructCompareOperators ( std : : pair < std : : string , StructData > const & structure ) const ;
std : : string generateStructConstructors ( std : : pair < std : : string , StructData > const & structData ) const ;
std : : string generateStructConstructorsEnhanced ( std : : pair < std : : string , StructData > const & structData ) const ;
2024-03-05 15:16:22 +08:00
std : : string generateStructConstructorArgument ( MemberData const & memberData , bool withDefault ) const ;
2025-10-23 20:21:50 +08:00
std : : string generateStructHashStructure ( std : : pair < std : : string , StructData > const & structure , std : : set < std : : string > & listedStructs ) const ;
2022-08-02 16:00:16 +08:00
std : : string generateStructHashStructures ( ) const ;
2021-12-02 19:21:30 +08:00
std : : string generateStructHashSum ( std : : string const & structName , std : : vector < MemberData > const & members ) const ;
2022-08-02 16:00:16 +08:00
std : : string generateStructs ( ) const ;
2025-10-23 20:21:50 +08:00
std : : string generateStructure ( std : : pair < std : : string , StructData > const & structure ) const ;
2022-07-28 23:09:08 +08:00
std : : string generateStructExtendsStructs ( ) const ;
2022-02-28 17:11:04 +08:00
std : : string
generateStructExtendsStructs ( std : : vector < RequireData > const & requireData , std : : set < std : : string > & listedStructs , std : : string const & title ) const ;
2022-08-02 16:00:16 +08:00
std : : string generateStructForwardDeclarations ( ) const ;
2023-02-21 03:01:34 +08:00
std : : string
generateStructForwardDeclarations ( std : : vector < RequireData > const & requireData , std : : string const & title , std : : set < std : : string > & listedStructs ) const ;
2025-10-23 20:21:50 +08:00
std : : tuple < std : : string , std : : string , std : : string , std : : string > generateStructMembers ( std : : pair < std : : string , StructData > const & structData ) const ;
2025-06-16 18:21:35 +08:00
std : : string generateStructSetter ( std : : string const & structureName , std : : vector < MemberData > const & memberData , size_t index ) const ;
2025-10-23 20:21:50 +08:00
std : : string generateStructSubConstructor ( std : : pair < std : : string , StructData > const & structData ) const ;
2025-06-16 18:21:35 +08:00
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 ;
2025-10-23 20:21:50 +08:00
std : : string generateUnion ( std : : pair < std : : string , StructData > const & structure ) const ;
2025-06-16 18:21:35 +08:00
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 ;
2025-06-17 00:02:05 +08:00
std : : string generateSharedHandle ( std : : vector < RequireData > const & requireData , std : : string const & title , std : : set < std : : string > & listedHandles ) const ;
2025-06-16 18:21:35 +08:00
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 ;
2021-10-20 22:55:30 +08:00
std : : pair < std : : string , std : : string > getParentTypeAndName ( std : : pair < std : : string , HandleData > const & handle ) const ;
std : : string getPlatform ( std : : string const & title ) const ;
2020-10-08 04:44:44 +08:00
std : : pair < std : : string , std : : string > getPoolTypeAndName ( std : : string const & type ) const ;
2022-10-05 15:28:37 +08:00
std : : string getProtectFromPlatform ( std : : string const & platform ) const ;
std : : string getProtectFromTitle ( std : : string const & title ) const ;
2023-02-20 22:58:14 +08:00
std : : string getProtectFromTitles ( std : : set < std : : string > const & titles ) const ;
2022-10-05 15:28:37 +08:00
std : : string getProtectFromType ( std : : string const & type ) const ;
2022-09-12 22:53:44 +08:00
std : : string getVectorSize ( std : : vector < ParamData > const & params ,
std : : map < size_t , VectorParamData > const & vectorParamIndices ,
size_t returnParam ,
std : : string const & returnParamType ,
std : : set < size_t > const & templatedParams ) const ;
2023-03-07 15:23:14 +08:00
void handleRemoval ( RemoveData const & removeData ) ;
bool handleRemovalCommand ( std : : string const & command , std : : vector < RequireData > & requireData ) ;
void handleRemovals ( ) ;
bool handleRemovalType ( std : : string const & type , std : : vector < RequireData > & requireData ) ;
2025-01-08 18:53:08 +08:00
bool hasArrayConstructor ( HandleData const & handleData ) const ;
2024-02-28 20:04:56 +08:00
bool hasLen ( MemberData const & md , std : : vector < MemberData > const & members ) const ;
2022-04-06 16:33:08 +08:00
bool hasParentHandle ( std : : string const & handle , std : : string const & parent ) const ;
2024-06-11 22:53:15 +08:00
bool isConstructorCandidate ( std : : pair < std : : string , VulkanHppGenerator : : CommandData > const & command , std : : string const & handleType ) const ;
bool isConstructorCandidate ( ParamData const & paramData , std : : string const & handleType ) const ;
bool isDeviceCommand ( CommandData const & commandData ) const ;
2025-07-15 17:54:59 +08:00
bool isEnumerated ( std : : string const & type ) const ;
2024-06-11 22:53:15 +08:00
bool isExtension ( std : : string const & name ) const ;
bool isFeature ( std : : string const & name ) const ;
bool isHandleType ( std : : string const & type ) const ;
bool isHandleTypeByStructure ( std : : string const & type ) const ;
bool isLenByStructMember ( std : : string const & name , std : : vector < ParamData > const & params ) const ;
bool isLenByStructMember ( std : : string const & name , ParamData const & param ) const ;
2022-04-06 16:33:08 +08:00
bool isMultiSuccessCodeConstructor ( std : : vector < std : : map < std : : string , CommandData > : : const_iterator > const & constructorIts ) const ;
bool isParam ( std : : string const & name , std : : vector < ParamData > const & params ) const ;
bool isStructMember ( std : : string const & name , std : : vector < MemberData > const & memberData ) const ;
bool isStructureChainAnchor ( std : : string const & type ) const ;
2024-08-26 22:21:45 +08:00
bool isStructureType ( std : : string const & type ) const ;
2023-03-07 15:23:14 +08:00
bool isSupported ( std : : set < std : : string > const & requiredBy ) const ;
bool isSupportedExtension ( std : : string const & name ) const ;
bool isSupportedFeature ( std : : string const & name ) const ;
2023-03-01 17:17:02 +08:00
bool isTypeRequired ( std : : string const & type ) const ;
bool isTypeUsed ( std : : string const & type ) const ;
2024-09-17 21:03:34 +08:00
bool isUnsupportedExtension ( std : : string const & name ) const ;
bool isUnsupportedFeature ( std : : string const & name ) const ;
2024-10-09 22:06:13 +08:00
bool isVectorByStructure ( std : : string const & type ) const ;
2024-05-06 16:31:43 +08:00
void markExtendedStructs ( ) ;
2025-10-14 03:51:04 +08:00
void mergeInternalFeatures ( ) ;
void mergeInternalFeatures ( std : : vector < std : : string > const & depends , FeatureData & feature , std : : map < std : : string , FeatureData > & internalFeatures ) ;
2023-06-19 18:46:04 +08:00
bool needsStructureChainResize ( std : : map < size_t , VectorParamData > const & vectorParams , std : : vector < size_t > const & chainedReturnParams ) const ;
2022-09-12 22:53:44 +08:00
std : : pair < bool , std : : map < size_t , std : : vector < size_t > > > needsVectorSizeCheck ( std : : vector < ParamData > const & params ,
std : : map < size_t , VectorParamData > const & vectorParams ,
std : : vector < size_t > const & returnParams ,
2023-03-13 16:08:01 +08:00
std : : set < size_t > const & singularParams ,
std : : set < size_t > const & skippedParams ) const ;
2023-03-01 17:17:02 +08:00
void readCommand ( tinyxml2 : : XMLElement const * element ) ;
std : : pair < bool , ParamData > readCommandParam ( tinyxml2 : : XMLElement const * element , std : : vector < ParamData > const & params ) ;
std : : pair < std : : string , std : : string > readCommandProto ( tinyxml2 : : XMLElement const * element ) ;
2022-02-28 17:11:04 +08:00
void readCommands ( tinyxml2 : : XMLElement const * element ) ;
2025-04-30 15:07:39 +08:00
std : : string readComment ( tinyxml2 : : XMLElement const * element ) const ;
2025-05-06 18:14:00 +08:00
DeprecateData readDeprecateData ( tinyxml2 : : XMLElement const * element ) const ;
2023-03-01 17:17:02 +08:00
void readEnums ( tinyxml2 : : XMLElement const * element ) ;
void readEnumsConstants ( tinyxml2 : : XMLElement const * element ) ;
2025-04-30 15:07:39 +08:00
void readEnumsEnum ( tinyxml2 : : XMLElement const * element , std : : map < std : : string , EnumData > : : iterator enumIt ) ;
void readExtension ( tinyxml2 : : XMLElement const * element ) ;
void readExtensionRequire ( tinyxml2 : : XMLElement const * element , ExtensionData & extensionData , bool extensionSupported ) ;
void readExtensions ( tinyxml2 : : XMLElement const * element ) ;
void readFeature ( tinyxml2 : : XMLElement const * element ) ;
void readFeatureRequire ( tinyxml2 : : XMLElement const * element , FeatureData & featureData , bool featureSupported ) ;
void readFormat ( tinyxml2 : : XMLElement const * element ) ;
void readFormatComponent ( tinyxml2 : : XMLElement const * element , FormatData & formatData ) ;
void readFormatPlane ( tinyxml2 : : XMLElement const * element , FormatData & formatData ) ;
void readFormats ( tinyxml2 : : XMLElement const * element ) ;
void readFormatSPIRVImageFormat ( tinyxml2 : : XMLElement const * element , FormatData & formatData ) ;
std : : pair < std : : vector < std : : string > , std : : string > readModifiers ( tinyxml2 : : XMLNode const * node ) const ;
2025-05-06 18:14:00 +08:00
std : : string readName ( tinyxml2 : : XMLElement const * elements ) const ;
2025-04-30 15:07:39 +08:00
std : : pair < NameData , TypeInfo > readNameAndType ( tinyxml2 : : XMLElement const * elements ) ;
void readPlatform ( tinyxml2 : : XMLElement const * element ) ;
void readPlatforms ( tinyxml2 : : XMLElement const * element ) ;
void readRegistry ( tinyxml2 : : XMLElement const * element ) ;
RemoveData readRemoveData ( tinyxml2 : : XMLElement const * element ) ;
NameLine readRequireCommand ( tinyxml2 : : XMLElement const * element ) ;
void readRequireEnum (
tinyxml2 : : XMLElement const * element , std : : string const & requiredBy , std : : string const & platform , bool supported , RequireData & requireData ) ;
2024-08-27 19:33:57 +08:00
RequireFeature readRequireFeature ( tinyxml2 : : XMLElement const * element ) ;
2024-09-17 21:03:34 +08:00
NameLine readRequireType ( tinyxml2 : : XMLElement const * element ) ;
2023-07-27 04:12:40 +08:00
void readSPIRVCapability ( tinyxml2 : : XMLElement const * element ) ;
2024-09-17 21:03:34 +08:00
void readSPIRVCapabilityEnable ( tinyxml2 : : XMLElement const * element , SpirVCapabilityData & capability ) ;
2023-07-27 04:12:40 +08:00
void readSPIRVCapabilities ( tinyxml2 : : XMLElement const * element ) ;
void readSPIRVExtension ( tinyxml2 : : XMLElement const * element ) ;
void readSPIRVExtensionEnable ( tinyxml2 : : XMLElement const * element ) ;
void readSPIRVExtensions ( tinyxml2 : : XMLElement const * element ) ;
void readStructMember ( tinyxml2 : : XMLElement const * element , std : : vector < MemberData > & members , bool isUnion ) ;
void readSync ( tinyxml2 : : XMLElement const * element ) ;
2024-10-08 19:25:37 +08:00
void readSyncAccess ( tinyxml2 : : XMLElement const * element , std : : map < std : : string , EnumData > : : const_iterator accessFlagBits2It ) ;
2023-07-27 04:12:40 +08:00
void readSyncAccessEquivalent ( tinyxml2 : : XMLElement const * element , std : : map < std : : string , EnumData > : : const_iterator accessFlagBits2It ) ;
2024-09-23 19:47:05 +08:00
void readSyncAccessSupport ( tinyxml2 : : XMLElement const * element ) ;
2023-07-27 04:12:40 +08:00
void readSyncPipeline ( tinyxml2 : : XMLElement const * element ) ;
2024-09-23 19:47:05 +08:00
void readSyncStage ( tinyxml2 : : XMLElement const * element , std : : map < std : : string , EnumData > : : const_iterator stageFlagBits2It ) ;
2023-07-27 04:12:40 +08:00
void readSyncStageEquivalent ( tinyxml2 : : XMLElement const * element , std : : map < std : : string , EnumData > : : const_iterator stageFlagBits2It ) ;
void readSyncStageSupport ( tinyxml2 : : XMLElement const * element ) ;
void readTag ( tinyxml2 : : XMLElement const * element ) ;
void readTags ( tinyxml2 : : XMLElement const * element ) ;
void readTypeBasetype ( tinyxml2 : : XMLElement const * element , std : : map < std : : string , std : : string > const & attributes ) ;
void readTypeBitmask ( tinyxml2 : : XMLElement const * element , std : : map < std : : string , std : : string > const & attributes ) ;
DefinesPartition partitionDefines ( std : : map < std : : string , DefineData > const & defines ) ;
void readTypeDefine ( tinyxml2 : : XMLElement const * element , std : : map < std : : string , std : : string > const & attributes ) ;
void readTypeEnum ( tinyxml2 : : XMLElement const * element , std : : map < std : : string , std : : string > const & attributes ) ;
void readTypeFuncpointer ( tinyxml2 : : XMLElement const * element , std : : map < std : : string , std : : string > const & attributes ) ;
void readTypeHandle ( tinyxml2 : : XMLElement const * element , std : : map < std : : string , std : : string > const & attributes ) ;
void readTypeInclude ( tinyxml2 : : XMLElement const * element , std : : map < std : : string , std : : string > const & attributes ) ;
void readTypeRequires ( tinyxml2 : : XMLElement const * element , std : : map < std : : string , std : : string > const & attributes ) ;
void readTypeStruct ( tinyxml2 : : XMLElement const * element , bool isUnion , std : : map < std : : string , std : : string > const & attributes ) ;
void readTypes ( tinyxml2 : : XMLElement const * element ) ;
void readTypesType ( tinyxml2 : : XMLElement const * element ) ;
TypeInfo readTypeInfo ( tinyxml2 : : XMLElement const * element ) const ;
2024-07-23 15:47:41 +08:00
void readVideoCapabilities ( tinyxml2 : : XMLElement const * element , VideoCodec & videoCodec ) ;
void readVideoCodec ( tinyxml2 : : XMLElement const * element ) ;
void readVideoCodecs ( tinyxml2 : : XMLElement const * element ) ;
void readVideoFormat ( tinyxml2 : : XMLElement const * element , VideoCodec & videoCodec ) ;
void readVideoProfileMember ( tinyxml2 : : XMLElement const * element , VideoCodec & videoCodec ) ;
void readVideoProfile ( tinyxml2 : : XMLElement const * element , VideoCodec & videoCodec ) ;
void readVideoProfiles ( tinyxml2 : : XMLElement const * element , VideoCodec & videoCodec ) ;
2024-08-06 15:22:31 +08:00
void readVideoFormatProperties ( tinyxml2 : : XMLElement const * element , std : : string const & videoCodec , VideoFormat & videoFormat ) ;
2024-07-23 15:47:41 +08:00
void readVideoRequireCapabilities ( tinyxml2 : : XMLElement const * element , VideoCodec & videoCodec ) ;
2023-07-27 04:12:40 +08:00
void registerDeleter ( std : : string const & commandName , CommandData const & commandData ) ;
void rescheduleRAIIHandle ( std : : string & str ,
std : : pair < std : : string , HandleData > const & handle ,
std : : set < std : : string > & listedHandles ,
std : : set < std : : string > const & specialFunctions ) const ;
2021-07-21 23:09:21 +08:00
std : : vector < std : : string > selectCommandsByHandle ( std : : vector < RequireData > const & requireData ,
std : : set < std : : string > const & handleCommands ,
std : : set < std : : string > & listedCommands ) const ;
2021-10-20 22:55:30 +08:00
bool skipLeadingGrandParent ( std : : pair < std : : string , HandleData > const & handle ) const ;
2023-03-01 17:17:02 +08:00
std : : string stripPluralS ( std : : string const & name ) const ;
2021-07-22 00:15:31 +08:00
std : : string toString ( TypeCategory category ) ;
2024-06-11 22:53:15 +08:00
MemberData const & vectorMemberByStructure ( std : : string const & structureType ) const ;
2017-12-21 19:40:48 +08:00
2020-04-21 20:26:32 +08:00
private :
2025-11-13 21:09:34 +08:00
std : : string m_api ;
std : : map < std : : string , BaseTypeData > m_baseTypes ;
std : : map < std : : string , BitmaskData > m_bitmasks ;
std : : set < std : : string > m_commandQueues ;
std : : map < std : : string , CommandData > m_commands ;
std : : map < std : : string , ConstantData > m_constants ;
std : : map < std : : string , DefineData > m_defines ;
DefinesPartition m_definesPartition ; // partition defined macros into mutually-exclusive sets of callees, callers, and values
std : : map < std : : string , EnumData > m_enums ;
std : : vector < ExtensionData > m_extensions ;
std : : map < std : : string , ExternalTypeData > m_externalTypes ;
std : : vector < FeatureData > m_features ;
std : : map < std : : string , FormatData > m_formats ;
std : : map < std : : string , FuncPointerData > m_funcPointers ;
std : : map < std : : string , HandleData > m_handles ;
std : : map < std : : string , IncludeData > m_includes ;
std : : map < std : : string , PlatformData > m_platforms ;
std : : set < std : : string > m_RAIISpecialFunctions ;
std : : map < std : : string , SpirVCapabilityData > m_spirVCapabilities ;
std : : map < std : : string , StructData > m_structs ;
2024-09-17 21:03:34 +08:00
std : : vector < std : : pair < std : : string , NameLine > > m_structsAliases ; // temporary storage for aliases, as they might be listed before the actual struct is listed
2024-09-23 19:47:05 +08:00
std : : map < std : : string , NameLine > m_syncAccesses ;
std : : map < std : : string , NameLine > m_syncStages ;
2024-09-17 21:03:34 +08:00
std : : map < std : : string , TagData > m_tags ;
std : : map < std : : string , TypeData > m_types ;
std : : vector < ExtensionData > m_unsupportedExtensions ;
std : : vector < FeatureData > m_unsupportedFeatures ;
std : : string m_version ;
std : : vector < VideoCodec > m_videoCodecs ;
std : : string m_vulkanLicenseHeader ;
2019-01-09 18:55:11 +08:00
} ;
2025-05-07 22:24:40 +08:00
template < typename T >
std : : string VulkanHppGenerator : : generateFormatTraitsSubCases ( FormatData const & formatData ,
std : : function < std : : vector < T > const & ( FormatData const & ) > accessor ,
std : : string const & subCaseName ,
std : : function < std : : string ( T const & subCaseData ) > generator ,
std : : string const & defaultReturn ) const
{
const std : : string subCasesTemplate = R " (
switch ( $ { subCaseName } )
{
$ { subCases }
default : VULKAN_HPP_ASSERT ( false ) ; return $ { defaultReturn } ;
} ) " ;
std : : string subCases ;
for ( size_t i = 0 ; i < accessor ( formatData ) . size ( ) ; + + i )
{
subCases + = " case " + std : : to_string ( i ) + " : return " + generator ( accessor ( formatData ) [ i ] ) + " ; \n " ;
}
subCases . pop_back ( ) ;
return replaceWithMap ( subCasesTemplate , { { " defaultReturn " , defaultReturn } , { " subCaseName " , subCaseName } , { " subCases " , subCases } } ) ;
}