diff --git a/VulkanHppGenerator.cpp b/VulkanHppGenerator.cpp index afd095c..0463583 100644 --- a/VulkanHppGenerator.cpp +++ b/VulkanHppGenerator.cpp @@ -527,64 +527,33 @@ ${commandDefinitions} std::string VulkanHppGenerator::generateRAIIDispatchers() const { - std::string contextInitializerList, deviceInitAssignments, instanceInitAssignments; - std::string contextMembers, deviceMembers, instanceMembers; - std::string previousEnter; + std::string contextInitializers, contextMembers, deviceAssignments, deviceMembers, instanceAssignments, + instanceMembers; - for ( auto const & command : m_commands ) + std::set listedCommands; + for ( auto const & feature : m_features ) { - std::string enter, leave; - std::tie( enter, leave ) = generateProtection( command.second.referencedIn, std::string() ); - - if ( command.second.handle.empty() ) - { - assert( enter.empty() ); - assert( command.second.alias.empty() ); - contextInitializerList += - ", " + command.first + "( PFN_" + command.first + "( getProcAddr( NULL, \"" + command.first + "\" ) ) )"; - contextMembers += " PFN_" + command.first + " " + command.first + " = 0;\n"; - } - else if ( ( command.second.handle == "VkDevice" ) || hasParentHandle( command.second.handle, "VkDevice" ) ) - { - deviceInitAssignments += enter + " " + command.first + " = PFN_" + command.first + - "( vkGetDeviceProcAddr( device, \"" + command.first + "\" ) );\n"; - // if this is an alias'ed function, use it as a fallback for the original one - if ( !command.second.alias.empty() ) - { - deviceInitAssignments += - " if ( !" + command.second.alias + " ) " + command.second.alias + " = " + command.first + ";\n"; - } - deviceInitAssignments += leave; - - deviceMembers += enter + " PFN_" + command.first + " " + command.first + " = 0;\n"; - if ( !enter.empty() ) - { - deviceMembers += "#else\n PFN_dummy " + command.first + "_placeholder = 0;\n"; - } - deviceMembers += leave; - } - else - { - assert( ( command.second.handle == "VkInstance" ) || hasParentHandle( command.second.handle, "VkInstance" ) ); - - instanceInitAssignments += enter + " " + command.first + " = PFN_" + command.first + - "( vkGetInstanceProcAddr( instance, \"" + command.first + "\" ) );\n"; - // if this is an alias'ed function, use it as a fallback for the original one - if ( !command.second.alias.empty() ) - { - instanceInitAssignments += - " if ( !" + command.second.alias + " ) " + command.second.alias + " = " + command.first + ";\n"; - } - instanceInitAssignments += leave; - - instanceMembers += enter + " PFN_" + command.first + " " + command.first + " = 0;\n"; - if ( !enter.empty() ) - { - instanceMembers += "#else\n PFN_dummy " + command.first + "_placeholder = 0;\n"; - } - instanceMembers += leave; - } - previousEnter = enter; + appendRAIIDispatcherCommands( feature.second.requireData, + listedCommands, + feature.first, + contextInitializers, + contextMembers, + deviceAssignments, + deviceMembers, + instanceAssignments, + instanceMembers ); + } + for ( auto const & extension : m_extensions ) + { + appendRAIIDispatcherCommands( extension.second.requireData, + listedCommands, + extension.first, + contextInitializers, + contextMembers, + deviceAssignments, + deviceMembers, + instanceAssignments, + instanceMembers ); } std::string contextDispatcherTemplate = R"( @@ -592,17 +561,18 @@ std::string VulkanHppGenerator::generateRAIIDispatchers() const { public: ContextDispatcher( PFN_vkGetInstanceProcAddr getProcAddr ) - : vkGetInstanceProcAddr( getProcAddr )${initializerList} + : vkGetInstanceProcAddr( getProcAddr )${contextInitializers} {} public: PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr = 0; -${members} +${contextMembers} }; )"; - std::string str = replaceWithMap( contextDispatcherTemplate, - { { "initializerList", contextInitializerList }, { "members", contextMembers } } ); + std::string str = + replaceWithMap( contextDispatcherTemplate, + { { "contextInitializers", contextInitializers }, { "contextMembers", contextMembers } } ); std::string instanceDispatcherTemplate = R"( class InstanceDispatcher : public DispatchLoaderBase @@ -618,19 +588,19 @@ ${members} void init( VkInstance instance ) { -${initAssignments} +${instanceAssignments} vkGetDeviceProcAddr = PFN_vkGetDeviceProcAddr( vkGetInstanceProcAddr( instance, "vkGetDeviceProcAddr" ) ); } public: -${members} +${instanceMembers} PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr = 0; }; )"; str += replaceWithMap( instanceDispatcherTemplate, - { { "initAssignments", instanceInitAssignments }, { "members", instanceMembers } } ); + { { "instanceAssignments", instanceAssignments }, { "instanceMembers", instanceMembers } } ); std::string deviceDispatcherTemplate = R"( class DeviceDispatcher : public DispatchLoaderBase @@ -646,16 +616,16 @@ ${members} void init( VkDevice device ) { -${initAssignments} +${deviceAssignments} } public: -${members} +${deviceMembers} }; )"; str += replaceWithMap( deviceDispatcherTemplate, - { { "initAssignments", deviceInitAssignments }, { "members", deviceMembers } } ); + { { "deviceAssignments", deviceAssignments }, { "deviceMembers", deviceMembers } } ); return str; } @@ -669,15 +639,13 @@ std::string VulkanHppGenerator::generateRAIIHandles() const ${raiiHandles} )"; - std::string raiiHandles = "\n"; - std::set listedHandles; auto handleIt = m_handles.begin(); assert( handleIt->first.empty() ); - appendRAIIHandleContext( raiiHandles, *handleIt, m_RAIISpecialFunctions ); + std::string raiiHandles = generateRAIIHandleContext( *handleIt, m_RAIISpecialFunctions ); for ( ++handleIt; handleIt != m_handles.end(); ++handleIt ) { - appendRAIIHandle( raiiHandles, *handleIt, listedHandles, m_RAIISpecialFunctions ); + raiiHandles += generateRAIIHandle( *handleIt, listedHandles, m_RAIISpecialFunctions ); } return replaceWithMap( raiiHandlesTemplate, { { "raiiHandles", raiiHandles } } ); } @@ -758,7 +726,7 @@ ${structs} { if ( listedStructs.find( structure.first ) == listedStructs.end() ) { - appendStruct( structs, structure, listedStructs ); + structs += generateStruct( structure, listedStructs ); } } return replaceWithMap( structsTemplate, { { "structs", structs } } ); @@ -900,13 +868,21 @@ void VulkanHppGenerator::addMissingFlagBits( std::vector & requireD } } -std::string VulkanHppGenerator::addTitleAndProtection( std::string const & str, std::string const & title ) const +std::string VulkanHppGenerator::addTitleAndProtection( std::string const & title, + std::string const & strIf, + std::string const & strElse ) const { - if ( !str.empty() ) + std::string str; + if ( !strIf.empty() ) { std::string enter, leave; std::tie( enter, leave ) = std::tie( enter, leave ) = generateProtection( title, std::string() ); - return "\n" + enter + " //=== " + title + " ===\n" + str + leave; + str = "\n" + enter + " //=== " + title + " ===\n" + strIf; + if ( !enter.empty() && !strElse.empty() ) + { + str += "#else \n" + strElse; + } + str += leave; } return str; } @@ -924,10 +900,8 @@ void VulkanHppGenerator::appendDispatchLoaderDynamicCommands( std::vector const & requireData, + std::set & listedCommands, + std::string const & title, + std::string & contextInitializers, + std::string & contextMembers, + std::string & deviceAssignments, + std::string & deviceMembers, + std::string & instanceAssignments, + std::string & instanceMembers ) const +{ + std::string ci, cm, da, dm, dmp, ia, im, imp; + for ( auto const & require : requireData ) + { + for ( auto const & command : require.commands ) + { + if ( listedCommands.insert( command ).second ) + { + auto commandIt = m_commands.find( command ); + assert( commandIt != m_commands.end() ); + if ( commandIt->second.handle.empty() ) + { + assert( commandIt->second.alias.empty() ); + + ci += ", " + commandIt->first + "( PFN_" + commandIt->first + "( getProcAddr( NULL, \"" + commandIt->first + + "\" ) ) )"; + + cm += " PFN_" + commandIt->first + " " + commandIt->first + " = 0;\n"; + } + else if ( ( commandIt->second.handle == "VkDevice" ) || + hasParentHandle( commandIt->second.handle, "VkDevice" ) ) + { + da += " " + commandIt->first + " = PFN_" + commandIt->first + "( vkGetDeviceProcAddr( device, \"" + + commandIt->first + "\" ) );\n"; + // if this is an alias'ed function, use it as a fallback for the original one + if ( !commandIt->second.alias.empty() ) + { + da += " if ( !" + commandIt->second.alias + " ) " + commandIt->second.alias + " = " + + commandIt->first + ";\n"; + } + + dm += " PFN_" + commandIt->first + " " + commandIt->first + " = 0;\n"; + dmp += " PFN_dummy " + commandIt->first + "_placeholder = 0;\n"; + } + else + { + assert( ( commandIt->second.handle == "VkInstance" ) || + hasParentHandle( commandIt->second.handle, "VkInstance" ) ); + + ia += " " + commandIt->first + " = PFN_" + commandIt->first + "( vkGetInstanceProcAddr( instance, \"" + + commandIt->first + "\" ) );\n"; + // if this is an alias'ed function, use it as a fallback for the original one + if ( !commandIt->second.alias.empty() ) + { + ia += " if ( !" + commandIt->second.alias + " ) " + commandIt->second.alias + " = " + + commandIt->first + ";\n"; + } + + im += +" PFN_" + commandIt->first + " " + commandIt->first + " = 0;\n"; + imp += " PFN_dummy " + commandIt->first + "_placeholder = 0;\n"; + } + } + } + } + contextInitializers += addTitleAndProtection( title, ci ); + contextMembers += addTitleAndProtection( title, cm ); + deviceAssignments += addTitleAndProtection( title, da ); + deviceMembers += addTitleAndProtection( title, dm, dmp ); + instanceAssignments += addTitleAndProtection( title, ia ); + instanceMembers += addTitleAndProtection( title, im, imp ); +} + +bool VulkanHppGenerator::checkEquivalentSingularConstructor( + std::vector::const_iterator> const & constructorIts, + std::map::const_iterator constructorIt, + std::vector::const_iterator lenIt ) const +{ + // check, if there is no singular constructor with the very same arguments as this array constructor + // (besides the size, of course) + auto singularCommandIt = + std::find_if( constructorIts.begin(), + constructorIts.end(), + [constructorIt, lenIt]( std::map::const_iterator it ) + { + if ( it->second.params.size() + 1 != constructorIt->second.params.size() ) + { + return false; + } + size_t lenIdx = std::distance( constructorIt->second.params.begin(), lenIt ); + for ( size_t i = 0, j = 0; i < it->second.params.size(); ++i, ++j ) + { + assert( j < constructorIt->second.params.size() ); + if ( j == lenIdx ) + { + ++j; + } + if ( it->second.params[i].type.type != constructorIt->second.params[j].type.type ) + { + return false; + } + } + return true; + } ); + return ( singularCommandIt != constructorIts.end() ); +} + // // VulkanHppGenerator local functions // @@ -1557,1802 +1636,6 @@ void writeToFile( std::string const & str, std::string const & fileName ) #endif } -void VulkanHppGenerator::appendFunctionHeaderArgumentEnhancedVector( std::string & str, - ParamData const & param, - std::string const & strippedParameterName, - bool hasSizeParam, - bool isTemplateParam ) const -{ - assert( param.type.postfix.back() == '*' ); - // it's optional, if it's marked as optional and there's no size specified - bool optional = param.optional && !hasSizeParam; - - std::string optionalBegin = optional ? "Optional<" : ""; - std::string optionalEnd = optional ? "> " : ""; - - // use our ArrayProxy - bool isConst = ( param.type.prefix.find( "const" ) != std::string::npos ); - str += optionalBegin + "ArrayProxy<" + - ( isTemplateParam ? ( isConst ? "const T" : "T" ) : stripPostfix( param.type.compose(), "*" ) ) + "> const &" + - optionalEnd + strippedParameterName; -} - -void VulkanHppGenerator::appendRAIIHandle( std::string & str, - std::pair const & handle, - std::set & listedHandles, - std::set const & specialFunctions ) const -{ - if ( listedHandles.find( handle.first ) == listedHandles.end() ) - { - rescheduleRAIIHandle( str, handle, listedHandles, specialFunctions ); - - std::string enter, leave; - std::tie( enter, leave ) = generateProtection( handle.first, !handle.second.alias.empty() ); - std::string handleType = stripPrefix( handle.first, "Vk" ); - std::string handleName = startLowerCase( handleType ); - - std::string singularConstructors, arrayConstructors; - std::tie( singularConstructors, arrayConstructors ) = constructRAIIHandleConstructors( handle ); - std::string upgradeConstructor = arrayConstructors.empty() ? "" : constructRAIIHandleUpgradeConstructor( handle ); - std::string destructor, destructorCall; - std::tie( destructor, destructorCall ) = - ( handle.second.destructorIt == m_commands.end() ) - ? std::make_pair( "", "" ) - : constructRAIIHandleDestructor( handle.first, handle.second.destructorIt, enter ); - - std::string getConstructorSuccessCode, memberVariables, moveConstructorInitializerList, moveAssignmentInstructions; - std::tie( getConstructorSuccessCode, memberVariables, moveConstructorInitializerList, moveAssignmentInstructions ) = - constructRAIIHandleDetails( handle, destructorCall ); - - std::string declarations = constructRAIIHandleMemberFunctionDeclarations( handle, specialFunctions ); - - assert( !handle.second.objTypeEnum.empty() ); - auto enumIt = m_enums.find( "VkObjectType" ); - assert( enumIt != m_enums.end() ); - auto valueIt = - std::find_if( enumIt->second.values.begin(), - enumIt->second.values.end(), - [&handle]( EnumValueData const & evd ) { return evd.name == handle.second.objTypeEnum; } ); - assert( valueIt != enumIt->second.values.end() ); - std::string objTypeEnum = generateEnumValueName( enumIt->first, valueIt->name, false, m_tags ); - - enumIt = m_enums.find( "VkDebugReportObjectTypeEXT" ); - assert( enumIt != m_enums.end() ); - std::string valueName = handle.second.objTypeEnum; - valueName = valueName.replace( 3, 0, "DEBUG_REPORT_" ) + "_EXT"; - valueIt = std::find_if( enumIt->second.values.begin(), - enumIt->second.values.end(), - [&valueName]( EnumValueData const & evd ) { return valueName == evd.name; } ); - std::string debugReportObjectType = ( valueIt != enumIt->second.values.end() ) - ? generateEnumValueName( enumIt->first, valueIt->name, false, m_tags ) - : "eUnknown"; - - std::string dispatcherType = - ( ( handle.first == "VkDevice" ) || - ( handle.second.constructorIts.front()->second.params.front().type.type == "VkDevice" ) ) - ? "VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher" - : "VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher"; - - const std::string handleTemplate = R"( -${enter} class ${handleType} - { - public: - using CType = Vk${handleType}; - - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::${objTypeEnum}; - static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::${debugReportObjectType}; - - public: -${singularConstructors} -${upgradeConstructor} -${destructor} - -#if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS ) - ${handleType}() = default; -#else - ${handleType}() = delete; -#endif - ${handleType}( ${handleType} const & ) = delete; - ${handleType}( ${handleType} && rhs ) VULKAN_HPP_NOEXCEPT - : ${moveConstructorInitializerList} - {} - ${handleType} & operator=( ${handleType} const & ) = delete; - ${handleType} & operator=( ${handleType} && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { -${moveAssignmentInstructions} - } - return *this; - } - - VULKAN_HPP_NAMESPACE::${handleType} const & operator*() const VULKAN_HPP_NOEXCEPT - { - return m_${handleName}; - } - -${getConstructorSuccessCode} - ${dispatcherType} const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher${dispatcherAccess}getVkHeaderVersion() == VK_HEADER_VERSION ); - return ${getDispatcherReturn}m_dispatcher; - } - -#if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS ) - explicit operator bool() const VULKAN_HPP_NOEXCEPT - { - return m_${handleName}.operator bool(); - } - - bool operator!() const VULKAN_HPP_NOEXCEPT - { - return m_${handleName}.operator!(); - } -#endif -${memberFunctionsDeclarations} - - private: - ${memberVariables} - }; -${leave})"; - - str += replaceWithMap( - handleTemplate, - { { "debugReportObjectType", debugReportObjectType }, - { "destructor", destructor }, - { "dispatcherAccess", ( handleType == "Device" ) || ( handleType == "Instance" ) ? "." : "->" }, - { "dispatcherType", dispatcherType }, - { "enter", enter }, - { "getConstructorSuccessCode", getConstructorSuccessCode }, - { "getDispatcherReturn", ( handleType == "Device" ) || ( handleType == "Instance" ) ? "&" : "" }, - { "handleName", handleName }, - { "handleType", handleType }, - { "leave", leave }, - { "memberFunctionsDeclarations", declarations }, - { "memberVariables", memberVariables }, - { "moveAssignmentInstructions", moveAssignmentInstructions }, - { "moveConstructorInitializerList", moveConstructorInitializerList }, - { "objTypeEnum", objTypeEnum }, - { "singularConstructors", singularConstructors }, - { "upgradeConstructor", upgradeConstructor } } ); - - if ( !arrayConstructors.empty() ) - { - // it's a handle class with a friendly handles class - const std::string handlesTemplate = R"( -${enter} class ${handleType}s : public std::vector - { - public: - ${arrayConstructors} - -#if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS ) - ${handleType}s() = default; -#else - ${handleType}s() = delete; -#endif - ${handleType}s( ${handleType}s const & ) = delete; - ${handleType}s( ${handleType}s && rhs ) = default; - ${handleType}s & operator=( ${handleType}s const & ) = delete; - ${handleType}s & operator=( ${handleType}s && rhs ) = default; - }; -${leave} -)"; - - str += replaceWithMap( handlesTemplate, - { { "arrayConstructors", arrayConstructors }, - { "enter", enter }, - { "handleType", handleType }, - { "leave", leave } } ); - } - } -} - -void VulkanHppGenerator::appendRAIIHandleContext( std::string & str, - std::pair const & handle, - std::set const & specialFunctions ) const -{ - const std::string contextTemplate = R"( - class Context - { - public: - Context() - : m_dispatcher( m_dynamicLoader.getProcAddress( "vkGetInstanceProcAddr" ) ) - {} - - ~Context() = default; - - Context( Context const & ) = delete; - Context( Context && rhs ) VULKAN_HPP_NOEXCEPT - : m_dynamicLoader( std::move( rhs.m_dynamicLoader ) ) - , m_dispatcher( std::move( rhs.m_dispatcher ) ) - {} - Context & operator=( Context const & ) = delete; - Context & operator=( Context && rhs ) VULKAN_HPP_NOEXCEPT - { - if ( this != &rhs ) - { - m_dynamicLoader = std::move( rhs.m_dynamicLoader ); - m_dispatcher = std::move( rhs.m_dispatcher ); - } - return *this; - } - -${memberFunctionDeclarations} - - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::ContextDispatcher const * getDispatcher() const - { - VULKAN_HPP_ASSERT( m_dispatcher.getVkHeaderVersion() == VK_HEADER_VERSION ); - return &m_dispatcher; - } - - private: - VULKAN_HPP_NAMESPACE::DynamicLoader m_dynamicLoader; - VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::ContextDispatcher m_dispatcher; - }; - -)"; - - str += replaceWithMap( - contextTemplate, - { { "memberFunctionDeclarations", constructRAIIHandleMemberFunctionDeclarations( handle, specialFunctions ) } } ); -} - -void VulkanHppGenerator::appendStruct( std::string & str, - std::pair const & structure, - std::set & listedStructs ) const -{ - assert( listedStructs.find( structure.first ) == listedStructs.end() ); - - for ( auto const & member : structure.second.members ) - { - if ( !isHandleType( member.type.type ) && - ( structure.first != member.type.type ) ) // some structures hold a pointer to the very same structure type - { - appendType( str, member.type.type, listedStructs ); - } - } - - if ( !structure.second.subStruct.empty() ) - { - auto structureIt = m_structures.find( structure.second.subStruct ); - if ( ( structureIt != m_structures.end() ) && ( listedStructs.find( structureIt->first ) == listedStructs.end() ) ) - { - appendStruct( str, *structureIt, listedStructs ); - } - } - - if ( structure.second.isUnion ) - { - appendUnion( str, structure ); - } - else - { - appendStructure( str, structure ); - } - - listedStructs.insert( structure.first ); -} - -void VulkanHppGenerator::appendStructAssignmentOperators( std::string & str, - std::pair const & structData, - std::string const & prefix ) const -{ - static const std::string assignmentFromVulkanType = R"( -${prefix}${constexpr_assign}${structName} & operator=( ${structName} const & rhs ) VULKAN_HPP_NOEXCEPT = default; - -${prefix}${structName} & operator=( Vk${structName} const & rhs ) VULKAN_HPP_NOEXCEPT -${prefix}{ -${prefix} *this = *reinterpret_cast( &rhs ); -${prefix} return *this; -${prefix}} -)"; - str += replaceWithMap( assignmentFromVulkanType, - { { "constexpr_assign", constructConstexprString( structData, true ) }, - { "prefix", prefix }, - { "structName", stripPrefix( structData.first, "Vk" ) } } ); -} - -void VulkanHppGenerator::appendStructCompareOperators( std::string & str, - std::pair const & structData ) const -{ - static const std::set simpleTypes = { "char", "double", "DWORD", "float", "HANDLE", - "HINSTANCE", "HMONITOR", "HWND", "int", "int8_t", - "int16_t", "int32_t", "int64_t", "LPCWSTR", "size_t", - "uint8_t", "uint16_t", "uint32_t", "uint64_t" }; - // two structs are compared by comparing each of the elements - std::string compareMembers; - std::string intro = ""; - for ( size_t i = 0; i < structData.second.members.size(); i++ ) - { - MemberData const & member = structData.second.members[i]; - auto typeIt = m_types.find( member.type.type ); - assert( typeIt != m_types.end() ); - if ( ( typeIt->second.category == TypeCategory::Requires ) && member.type.postfix.empty() && - ( simpleTypes.find( member.type.type ) == simpleTypes.end() ) ) - { - // this type might support operator==()... that is, use memcmp - compareMembers += - intro + "( memcmp( &" + member.name + ", &rhs." + member.name + ", sizeof( " + member.type.type + " ) ) == 0 )"; - } - else - { - // for all others, we use the operator== of that type - compareMembers += intro + "( " + member.name + " == rhs." + member.name + " )"; - } - intro = "\n && "; - } - - static const std::string compareTemplate = R"( -#if defined(VULKAN_HPP_HAS_SPACESHIP_OPERATOR) - auto operator<=>( ${name} const & ) const = default; -#else - bool operator==( ${name} const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return ${compareMembers}; - } - - bool operator!=( ${name} const & rhs ) const VULKAN_HPP_NOEXCEPT - { - return !operator==( rhs ); - } -#endif -)"; - - str += replaceWithMap( compareTemplate, - { { "name", stripPrefix( structData.first, "Vk" ) }, { "compareMembers", compareMembers } } ); -} - -bool VulkanHppGenerator::checkEquivalentSingularConstructor( - std::vector::const_iterator> const & constructorIts, - std::map::const_iterator constructorIt, - std::vector::const_iterator lenIt ) const -{ - // check, if there is no singular constructor with the very same arguments as this array constructor - // (besides the size, of course) - auto singularCommandIt = - std::find_if( constructorIts.begin(), - constructorIts.end(), - [constructorIt, lenIt]( std::map::const_iterator it ) - { - if ( it->second.params.size() + 1 != constructorIt->second.params.size() ) - { - return false; - } - size_t lenIdx = std::distance( constructorIt->second.params.begin(), lenIt ); - for ( size_t i = 0, j = 0; i < it->second.params.size(); ++i, ++j ) - { - assert( j < constructorIt->second.params.size() ); - if ( j == lenIdx ) - { - ++j; - } - if ( it->second.params[i].type.type != constructorIt->second.params[j].type.type ) - { - return false; - } - } - return true; - } ); - return ( singularCommandIt != constructorIts.end() ); -} - -std::string VulkanHppGenerator::constructArgumentListEnhanced( std::vector const & params, - std::set const & skippedParams, - std::set const & singularParams, - bool definition, - bool withAllocators, - bool structureChain, - bool withDispatcher ) const -{ - size_t defaultStartIndex = withAllocators ? ~0 : determineDefaultStartIndex( params, skippedParams ); - - std::string argumentList; - bool encounteredArgument = false; - for ( size_t i = 0; i < params.size(); ++i ) - { - if ( skippedParams.find( i ) == skippedParams.end() ) - { - if ( encounteredArgument ) - { - argumentList += ", "; - } - bool hasDefaultAssignment = false; - if ( singularParams.find( i ) != singularParams.end() ) - { - assert( !params[i].optional ); - assert( params[i].type.isConstPointer() && !params[i].len.empty() && - !isLenByStructMember( params[i].len, params ) && beginsWith( params[i].type.type, "Vk" ) ); - assert( !isHandleType( params[i].type.type ) ); - argumentList += "const VULKAN_HPP_NAMESPACE::" + stripPrefix( params[i].type.type, "Vk" ) + " & " + - stripPluralS( startLowerCase( stripPrefix( params[i].name, "p" ) ) ); - } - else if ( params[i].type.isConstPointer() ) - { - std::string name = startLowerCase( stripPrefix( params[i].name, "p" ) ); - if ( params[i].len.empty() ) - { - assert( withDispatcher || !isHandleType( params[i].type.type ) ); - assert( !params[i].type.prefix.empty() && ( params[i].type.postfix == "*" ) ); - assert( params[i].arraySizes.empty() ); - if ( params[i].type.type == "void" ) - { - assert( !params[i].optional ); - argumentList += params[i].type.compose() + " " + params[i].name; - } - else if ( params[i].optional ) - { - argumentList += - "Optional " + name + - ( ( definition || withAllocators ) ? "" : " VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT" ); - hasDefaultAssignment = true; - } - else - { - argumentList += params[i].type.prefix + " " + stripPrefix( params[i].type.type, "Vk" ) + " & " + name; - } - } - else - { - // a const-pointer with a non-empty len is either null-terminated (aka a string) or represented by an - // ArrayProxy - assert( params[i].arraySizes.empty() ); - if ( params[i].len == "null-terminated" ) - { - assert( params[i].type.type == "char" ); - if ( params[i].optional ) - { - argumentList += - "Optional " + name + - ( ( definition || withAllocators ) ? "" : " VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT" ); - hasDefaultAssignment = true; - } - else - { - argumentList += "const std::string & " + name; - } - } - else - { - // an ArrayProxy also covers no data, so any optiona flag can be ignored here - assert( endsWith( params[i].type.postfix, "*" ) ); - std::string type = stripPostfix( params[i].type.compose(), "*" ); - size_t pos = type.find( "void" ); - if ( pos != std::string::npos ) - { - type.replace( pos, 4, "T" ); - } - argumentList += "ArrayProxy<" + type + "> const & " + name; - if ( params[i].optional && !definition ) - { - argumentList += " VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT"; - hasDefaultAssignment = true; - } - } - } - } - else if ( params[i].type.isNonConstPointer() ) - { - assert( withDispatcher || !isHandleType( params[i].type.type ) ); - assert( params[i].len.empty() && !params[i].optional ); - if ( !params[i].type.prefix.empty() ) - { - argumentList += params[i].type.prefix + " "; - } - argumentList += params[i].type.type + " & " + params[i].name; - } - else - { - assert( params[i].type.isValue() ); - argumentList += params[i].type.compose() + " " + params[i].name + generateCArraySizes( params[i].arraySizes ); - } - argumentList += std::string( !definition && ( defaultStartIndex <= i ) && !hasDefaultAssignment - ? " VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT" - : "" ); - encounteredArgument = true; - } - } - if ( withAllocators ) - { - if ( structureChain ) - { - if ( encounteredArgument ) - { - argumentList += ", "; - } - argumentList += "StructureChainAllocator & structureChainAllocator"; - encounteredArgument = true; - } - else - { - for ( auto sp : skippedParams ) - { - if ( !params[sp].len.empty() ) - { - if ( encounteredArgument ) - { - argumentList += ", "; - } - std::string type = ( params[sp].type.type == "void" ) - ? "Uint8_t" - : startUpperCase( stripPrefix( params[sp].type.type, "Vk" ) ); - argumentList += type + "Allocator & " + startLowerCase( type ) + "Allocator"; - encounteredArgument = true; - } - } - } - } - if ( withDispatcher ) - { - if ( encounteredArgument ) - { - argumentList += ", "; - } - argumentList += - std::string( "Dispatch const & d" ) + ( definition ? "" : " VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT" ); - } - return argumentList; -} - -std::string VulkanHppGenerator::constructArgumentListStandard( std::vector const & params, - std::set const & skippedParams ) const -{ - std::string argumentList; - for ( size_t i = 0; i < params.size(); ++i ) - { - if ( skippedParams.find( i ) == skippedParams.end() ) - { - argumentList += - params[i].type.compose() + " " + params[i].name + generateCArraySizes( params[i].arraySizes ) + ", "; - } - } - argumentList += "Dispatch const & d "; - return argumentList; -} - -std::string VulkanHppGenerator::constructCallArgumentEnhanced( std::vector const & params, - size_t paramIndex, - bool nonConstPointerAsNullptr, - std::set const & singularParams, - std::vector const & returnParamIndices, - bool raiiHandleMemberFunction ) const -{ - std::string argument; - ParamData const & param = params[paramIndex]; - if ( param.type.isConstPointer() || ( specialPointerTypes.find( param.type.type ) != specialPointerTypes.end() ) ) - { - std::string name = startLowerCase( stripPrefix( param.name, "p" ) ); - if ( isHandleType( param.type.type ) && param.type.isValue() ) - { - assert( !param.optional ); - // if at all, this is the first argument, and it's the implicitly provided member handle - assert( paramIndex == 0 ); - assert( param.arraySizes.empty() && param.len.empty() ); - argument += "m_" + startLowerCase( stripPrefix( param.type.type, "Vk" ) ); - } - else if ( param.len.empty() ) - { - // this const-pointer parameter has no length, that is it's a const-pointer to a single value - if ( param.type.type == "void" ) - { - assert( !param.optional ); - // use the original name here, as void-pointer are not mapped to some reference - argument = param.name; - } - else if ( param.optional ) - { - argument = "static_cast<" + param.type.compose() + ">( " + name + " )"; - } - else - { - argument = "&" + name; - } - if ( beginsWith( param.type.type, "Vk" ) ) - { - argument = "reinterpret_cast( " + argument + " )"; - } - } - else if ( param.len == "null-terminated" ) - { - // this const-pointer parameter is "null-terminated", that is it's a string - assert( ( param.type.type == "char" ) && param.arraySizes.empty() ); - if ( param.optional ) - { - argument = name + " ? " + name + "->c_str() : nullptr"; - } - else - { - argument = name + ".c_str()"; - } - } - else - { - // this const-pointer parameter has some explicit length - if ( singularParams.find( paramIndex ) != singularParams.end() ) - { - assert( !param.optional ); - argument = "&" + stripPluralS( name ); - } - else - { - // this const-parameter is represented by some array, where data() also works with no data (optional) - argument = name + ".data()"; - } - if ( beginsWith( param.type.type, "Vk" ) || ( param.type.type == "void" ) ) - { - argument = "reinterpret_cast<" + param.type.prefix + " " + param.type.type + " " + param.type.postfix + ">( " + - argument + " )"; - } - } - } - else if ( param.type.isNonConstPointer() && - ( specialPointerTypes.find( param.type.type ) == specialPointerTypes.end() ) ) - { - // parameter is a non-const pointer (and none of the special pointer types, that are considered const-pointers, - // even though they are not!) - std::string name = startLowerCase( stripPrefix( param.name, "p" ) ); - if ( param.len.empty() ) - { - assert( param.arraySizes.empty() ); - if ( beginsWith( param.type.type, "Vk" ) ) - { - argument = "reinterpret_cast<" + param.type.type + " *>( &" + name + " )"; - } - else - { - assert( !param.optional ); - argument = "&" + name; - } - } - else - { - // the non-const pointer has a len -> it will be represented by some array - assert( param.arraySizes.empty() ); - if ( nonConstPointerAsNullptr ) - { - argument = "nullptr"; - } - else if ( beginsWith( param.type.type, "Vk" ) || ( param.type.type == "void" ) ) - { - if ( singularParams.find( paramIndex ) != singularParams.end() ) - { - argument = "&" + stripPluralS( name ); - } - else - { - // get the data of the array, which also covers no data -> no need to look at param.optional - argument = name + ".data()"; - } - if ( !raiiHandleMemberFunction || !isHandleType( param.type.type ) ) - { - argument = "reinterpret_cast<" + param.type.type + " *>( " + argument + " )"; - } - } - else - { - assert( !param.optional ); - argument = name + ".data()"; - } - } - } - else - { - assert( param.len.empty() ); - if ( beginsWith( param.type.type, "Vk" ) ) - { - if ( param.arraySizes.empty() ) - { - auto pointerIt = std::find_if( - params.begin(), params.end(), [¶m]( ParamData const & pd ) { return pd.len == param.name; } ); - if ( pointerIt != params.end() ) - { - assert( !param.optional ); - argument = startLowerCase( stripPrefix( pointerIt->name, "p" ) ) + ".size()"; - if ( pointerIt->type.type == "void" ) - { - argument += " * sizeof( T )"; - } - } - else - { - argument = "static_cast<" + param.type.type + ">( " + param.name + " )"; - } - } - else - { - assert( !param.optional ); - assert( param.arraySizes.size() == 1 ); - assert( param.type.prefix == "const" ); - argument = "reinterpret_cast( " + param.name + " )"; - } - } - else - { - if ( singularParams.find( paramIndex ) != singularParams.end() ) - { - assert( !param.optional ); - assert( param.arraySizes.empty() ); - assert( ( param.type.type == "size_t" ) || ( param.type.type == "uint32_t" ) ); - assert( returnParamIndices.size() == 1 ); - if ( params[returnParamIndices[0]].type.type == "void" ) - { - argument = "sizeof( T )"; - } - else - { - argument = "1"; - } - } - else - { - auto pointerIt = std::find_if( - params.begin(), params.end(), [¶m]( ParamData const & pd ) { return pd.len == param.name; } ); - if ( pointerIt != params.end() ) - { - // this parameter is the len of some other -> replace it with that parameter's size - assert( param.arraySizes.empty() ); - assert( ( param.type.type == "size_t" ) || ( param.type.type == "uint32_t" ) ); - argument = startLowerCase( stripPrefix( pointerIt->name, "p" ) ) + ".size()"; - if ( pointerIt->type.type == "void" ) - { - argument += " * sizeof( T )"; - } - } - else - { - assert( !param.optional ); - assert( param.arraySizes.size() <= 1 ); - argument = param.name; - } - } - } - } - assert( !argument.empty() ); - return argument; -} - -std::string VulkanHppGenerator::constructCallArgumentsEnhanced( std::vector const & params, - size_t initialSkipCount, - bool nonConstPointerAsNullptr, - std::set const & singularParams, - std::vector const & returnParamIndices, - bool raiiHandleMemberFunction ) const -{ - assert( initialSkipCount <= params.size() ); - std::string arguments; - bool encounteredArgument = false; - for ( size_t i = 0; i < initialSkipCount; ++i ) - { - if ( encounteredArgument ) - { - arguments += ", "; - } - assert( isHandleType( params[i].type.type ) && params[i].type.isValue() ); - assert( params[i].arraySizes.empty() && params[i].len.empty() ); - std::string argument = "m_" + startLowerCase( stripPrefix( params[i].type.type, "Vk" ) ); - if ( raiiHandleMemberFunction ) - { - argument = "static_cast<" + params[i].type.type + ">( " + argument + " )"; - } - arguments += argument; - encounteredArgument = true; - } - for ( size_t i = initialSkipCount; i < params.size(); ++i ) - { - if ( encounteredArgument ) - { - arguments += ", "; - } - arguments += constructCallArgumentEnhanced( - params, i, nonConstPointerAsNullptr, singularParams, returnParamIndices, raiiHandleMemberFunction ); - encounteredArgument = true; - } - return arguments; -} - -std::string VulkanHppGenerator::constructCallArgumentsStandard( std::string const & handle, - std::vector const & params ) const -{ - std::string arguments; - bool encounteredArgument = false; - for ( auto const & param : params ) - { - if ( encounteredArgument ) - { - arguments += ", "; - } - if ( ( param.type.type == handle ) && param.type.isValue() ) - { - assert( param.arraySizes.empty() && param.len.empty() ); - arguments += "m_" + startLowerCase( stripPrefix( param.type.type, "Vk" ) ); - } - else - { - std::string argument = param.name; - if ( beginsWith( param.type.type, "Vk" ) ) - { - if ( !param.arraySizes.empty() ) - { - assert( param.arraySizes.size() == 1 ); - assert( param.type.isValue() ); - assert( param.type.prefix == "const" ); - argument = "reinterpret_cast( " + argument + " )"; - } - else if ( param.type.isValue() ) - { - argument = "static_cast<" + param.type.type + ">( " + argument + " )"; - } - else - { - assert( !param.type.postfix.empty() ); - argument = "reinterpret_cast<" + ( param.type.prefix.empty() ? "" : param.type.prefix ) + " " + - param.type.type + " " + param.type.postfix + ">( " + argument + " )"; - } - } - arguments += argument; - } - encounteredArgument = true; - } - return arguments; -} - -std::string VulkanHppGenerator::constructCommandBoolGetValue( std::string const & name, - CommandData const & commandData, - size_t initialSkipCount, - bool definition, - size_t nonConstPointerIndex ) const -{ - assert( commandData.returnType == "VkBool32" ); - - std::set skippedParams = - determineSkippedParams( commandData.params, initialSkipCount, {}, { nonConstPointerIndex }, false ); - - std::string argumentList = - constructArgumentListEnhanced( commandData.params, skippedParams, {}, definition, false, false, true ); - std::string commandName = generateCommandName( name, commandData.params, initialSkipCount, m_tags ); - std::string returnType = stripPostfix( commandData.params[nonConstPointerIndex].type.compose(), "*" ); - assert( !beginsWith( returnType, "Vk" ) ); - - if ( definition ) - { - std::string const functionTemplate = - R"( template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::pair ${className}${classSeparator}${commandName}( ${argumentList} )${const} - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - std::pair result; - ${returnType} & ${returnValueName} = result.second; - result.first = static_cast( d.${vkCommand}( ${callArguments} ) ); - return result; - })"; - - return replaceWithMap( - functionTemplate, - { { "argumentList", argumentList }, - { "callArguments", - constructCallArgumentsEnhanced( - commandData.params, initialSkipCount, false, {}, { nonConstPointerIndex }, false ) }, - { "className", - initialSkipCount ? stripPrefix( commandData.params[initialSkipCount - 1].type.type, "Vk" ) : "" }, - { "classSeparator", commandData.handle.empty() ? "" : "::" }, - { "const", commandData.handle.empty() ? "" : " const" }, - { "commandName", commandName }, - { "returnValueName", startLowerCase( stripPrefix( commandData.params[nonConstPointerIndex].name, "p" ) ) }, - { "returnType", returnType }, - { "vkCommand", name } } ); - } - else - { - std::string const functionTemplate = - R"( template - VULKAN_HPP_NODISCARD std::pair ${commandName}( ${argumentList} )${const};)"; - - return replaceWithMap( functionTemplate, - { { "argumentList", argumentList }, - { "commandName", commandName }, - { "const", commandData.handle.empty() ? "" : " const" }, - { "returnType", returnType } } ); - } -} - -std::string VulkanHppGenerator::constructCommandResult( std::string const & name, - CommandData const & commandData, - size_t initialSkipCount, - bool definition, - std::map const & vectorParamIndices ) const -{ - assert( commandData.returnType == "VkResult" ); - - std::set skippedParameters = - determineSkippedParams( commandData.params, initialSkipCount, vectorParamIndices, {}, false ); - - std::string argumentList = - constructArgumentListEnhanced( commandData.params, skippedParameters, {}, definition, false, false, true ); - std::string commandName = generateCommandName( name, commandData.params, initialSkipCount, m_tags ); - std::string nodiscard = generateNoDiscard( 1 < commandData.successCodes.size(), 1 < commandData.errorCodes.size() ); - std::string returnType = ( 1 < commandData.successCodes.size() ) ? "Result" : "typename ResultValueType::type"; - - if ( definition ) - { - std::string const functionTemplate = - R"( template - ${nodiscard}VULKAN_HPP_INLINE ${returnType} ${className}${classSeparator}${commandName}( ${argumentList} ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - Result result = static_cast( d.${vkCommand}( ${callArguments} ) ); - return createResultValue( result, VULKAN_HPP_NAMESPACE_STRING "::${className}${classSeparator}${commandName}"${successCodeList} ); - })"; - - return replaceWithMap( - functionTemplate, - { { "argumentList", argumentList }, - { "callArguments", - constructCallArgumentsEnhanced( commandData.params, initialSkipCount, false, {}, {}, false ) }, - { "className", - initialSkipCount ? stripPrefix( commandData.params[initialSkipCount - 1].type.type, "Vk" ) : "" }, - { "classSeparator", commandData.handle.empty() ? "" : "::" }, - { "commandName", commandName }, - { "nodiscard", nodiscard }, - { "returnType", returnType }, - { "successCodeList", constructSuccessCodeList( commandData.successCodes ) }, - { "vkCommand", name } } ); - } - else - { - std::string const functionTemplate = - R"( template - ${nodiscard}${returnType} ${commandName}( ${argumentList} ) const;)"; - - return replaceWithMap( functionTemplate, - { { "argumentList", argumentList }, - { "commandName", commandName }, - { "nodiscard", nodiscard }, - { "returnType", returnType } } ); - } -} - -std::string VulkanHppGenerator::constructCommandResultEnumerate( std::string const & name, - CommandData const & commandData, - size_t initialSkipCount, - bool definition, - std::pair const & vectorParamIndices, - bool withAllocator ) const -{ - assert( commandData.returnType == "VkResult" ); - assert( ( commandData.successCodes.size() == 2 ) && ( commandData.successCodes[0] == "VK_SUCCESS" ) && - ( commandData.successCodes[1] == "VK_INCOMPLETE" ) ); - - std::set skippedParams = determineSkippedParams( commandData.params, - initialSkipCount, - { vectorParamIndices }, - { vectorParamIndices.second, vectorParamIndices.first }, - false ); - - std::string argumentList = - constructArgumentListEnhanced( commandData.params, skippedParams, {}, definition, withAllocator, false, true ); - std::string commandName = generateCommandName( name, commandData.params, initialSkipCount, m_tags ); - std::string nodiscard = generateNoDiscard( 1 < commandData.successCodes.size(), 1 < commandData.errorCodes.size() ); - std::string vectorElementType = ( commandData.params[vectorParamIndices.first].type.type == "void" ) - ? "uint8_t" - : stripPrefix( commandData.params[vectorParamIndices.first].type.type, "Vk" ); - std::string allocatorType = startUpperCase( vectorElementType ) + "Allocator"; - - if ( definition ) - { - const std::string functionTemplate = - R"( template - ${nodiscard}VULKAN_HPP_INLINE typename ResultValueType>::type ${className}${classSeparator}${commandName}( ${argumentList} )${const} - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - std::vector<${vectorElementType}, ${allocatorType}> ${vectorName}${vectorAllocator}; - ${counterType} ${counterName}; - Result result; - do - { - result = static_cast( d.${vkCommand}( ${firstCallArguments} ) ); - if ( ( result == Result::eSuccess ) && ${counterName} ) - { - ${vectorName}.resize( ${counterName} ); - result = static_cast( d.${vkCommand}( ${secondCallArguments} ) ); - VULKAN_HPP_ASSERT( ${counterName} <= ${vectorName}.size() ); - } - } while ( result == Result::eIncomplete ); - if ( ( result == Result::eSuccess ) && ( ${counterName} < ${vectorName}.size() ) ) - { - ${vectorName}.resize( ${counterName} ); - } - return createResultValue( result, ${vectorName}, VULKAN_HPP_NAMESPACE_STRING"::${className}${classSeparator}${commandName}" ); - })"; - - std::string typenameCheck = withAllocator - ? ( ", typename B, typename std::enable_if::value, int>::type " ) - : ""; - - return replaceWithMap( - functionTemplate, - { { "allocatorType", allocatorType }, - { "argumentList", argumentList }, - { "className", - initialSkipCount ? stripPrefix( commandData.params[initialSkipCount - 1].type.type, "Vk" ) : "" }, - { "classSeparator", commandData.handle.empty() ? "" : "::" }, - { "commandName", commandName }, - { "const", commandData.handle.empty() ? "" : " const" }, - { "counterName", startLowerCase( stripPrefix( commandData.params[vectorParamIndices.second].name, "p" ) ) }, - { "counterType", commandData.params[vectorParamIndices.second].type.type }, - { "firstCallArguments", - constructCallArgumentsEnhanced( commandData.params, initialSkipCount, true, {}, {}, false ) }, - { "nodiscard", nodiscard }, - { "secondCallArguments", - constructCallArgumentsEnhanced( commandData.params, initialSkipCount, false, {}, {}, false ) }, - { "typenameCheck", typenameCheck }, - { "vectorAllocator", withAllocator ? ( "( " + startLowerCase( allocatorType ) + " )" ) : "" }, - { "vectorElementType", vectorElementType }, - { "vectorName", startLowerCase( stripPrefix( commandData.params[vectorParamIndices.first].name, "p" ) ) }, - { "vkCommand", name } } ); - } - else - { - const std::string functionTemplate = - R"( template , typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE${typenameCheck}> - ${nodiscard}typename ResultValueType>::type ${commandName}( ${argumentList} )${const};)"; - - std::string typenameCheck = withAllocator ? ( ", typename B = " + allocatorType + - ", typename std::enable_if::value, int>::type = 0" ) - : ""; - - return replaceWithMap( functionTemplate, - { { "allocatorType", allocatorType }, - { "argumentList", argumentList }, - { "const", commandData.handle.empty() ? "" : " const" }, - { "commandName", commandName }, - { "nodiscard", nodiscard }, - { "typenameCheck", typenameCheck }, - { "vectorElementType", vectorElementType } } ); - } -} - -std::string - VulkanHppGenerator::constructCommandResultEnumerateChained( std::string const & name, - CommandData const & commandData, - size_t initialSkipCount, - bool definition, - std::pair const & vectorParamIndex, - std::vector const & returnParamIndices, - bool withAllocator ) const -{ - assert( commandData.returnType == "VkResult" ); - assert( ( commandData.successCodes.size() == 2 ) && ( commandData.successCodes[0] == "VK_SUCCESS" ) && - ( commandData.successCodes[1] == "VK_INCOMPLETE" ) ); - - std::set skippedParams = - determineSkippedParams( commandData.params, initialSkipCount, { vectorParamIndex }, returnParamIndices, false ); - - std::string argumentList = - constructArgumentListEnhanced( commandData.params, skippedParams, {}, definition, withAllocator, true, true ); - std::string commandName = generateCommandName( name, commandData.params, initialSkipCount, m_tags ); - std::string nodiscard = generateNoDiscard( 1 < commandData.successCodes.size(), 1 < commandData.errorCodes.size() ); - assert( beginsWith( commandData.params[vectorParamIndex.first].type.type, "Vk" ) ); - std::string vectorElementType = - "VULKAN_HPP_NAMESPACE::" + stripPrefix( commandData.params[vectorParamIndex.first].type.type, "Vk" ); - std::string allocatorType = startUpperCase( vectorElementType ) + "Allocator"; - - if ( definition ) - { - const std::string functionTemplate = - R"( template - ${nodiscard}VULKAN_HPP_INLINE typename ResultValueType>::type ${className}${classSeparator}${commandName}( ${argumentList} ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - std::vector returnVector${structureChainAllocator}; - std::vector<${vectorElementType}> ${vectorName}; - ${counterType} ${counterName}; - Result result; - do - { - result = static_cast( d.${vkCommand}( ${firstCallArguments} ) ); - if ( ( result == Result::eSuccess ) && ${counterName} ) - { - returnVector.resize( ${counterName} ); - ${vectorName}.resize( ${counterName} ); - for ( ${counterType} i = 0; i < ${counterName}; i++ ) - { - ${vectorName}[i].pNext = - returnVector[i].template get<${vectorElementType}>().pNext; - } - result = static_cast( d.${vkCommand}( ${secondCallArguments} ) ); - VULKAN_HPP_ASSERT( ${counterName} <= ${vectorName}.size() ); - } - } while ( result == Result::eIncomplete ); - if ( ( result == Result::eSuccess ) && ( ${counterName} < ${vectorName}.size() ) ) - { - returnVector.resize( ${counterName} ); - ${vectorName}.resize( ${counterName} ); - } - for ( ${counterType} i = 0; i < ${counterName}; i++ ) - { - returnVector[i].template get<${vectorElementType}>() = ${vectorName}[i]; - } - return createResultValue( result, returnVector, VULKAN_HPP_NAMESPACE_STRING"::${className}${classSeparator}${commandName}" ); - })"; - - std::string vectorName = startLowerCase( stripPrefix( commandData.params[vectorParamIndex.first].name, "p" ) ); - std::string typenameCheck = - withAllocator - ? ( ", typename B, typename std::enable_if::value, int>::type" ) - : ""; - - return replaceWithMap( - functionTemplate, - { { "argumentList", argumentList }, - { "className", - initialSkipCount ? stripPrefix( commandData.params[initialSkipCount - 1].type.type, "Vk" ) : "" }, - { "classSeparator", commandData.handle.empty() ? "" : "::" }, - { "commandName", commandName }, - { "counterName", startLowerCase( stripPrefix( commandData.params[vectorParamIndex.second].name, "p" ) ) }, - { "counterType", commandData.params[vectorParamIndex.second].type.type }, - { "firstCallArguments", - constructCallArgumentsEnhanced( commandData.params, initialSkipCount, true, {}, returnParamIndices, false ) }, - { "nodiscard", nodiscard }, - { "secondCallArguments", - constructCallArgumentsEnhanced( - commandData.params, initialSkipCount, false, {}, returnParamIndices, false ) }, - { "structureChainAllocator", withAllocator ? ( "( structureChainAllocator )" ) : "" }, - { "typenameCheck", typenameCheck }, - { "vectorElementType", vectorElementType }, - { "vectorName", vectorName }, - { "vkCommand", name } } ); - } - else - { - const std::string functionTemplate = - R"( template , typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE${typenameCheck}> - ${nodiscard}typename ResultValueType>::type ${commandName}( ${argumentList} ) const;)"; - - std::string typenameCheck = - withAllocator - ? ( ", typename B = StructureChainAllocator, typename std::enable_if::value, int>::type = 0" ) - : ""; - - return replaceWithMap( functionTemplate, - { { "argumentList", argumentList }, - { "commandName", commandName }, - { "nodiscard", nodiscard }, - { "typenameCheck", typenameCheck } } ); - } -} - -std::string - VulkanHppGenerator::constructCommandResultEnumerateTwoVectors( std::string const & name, - CommandData const & commandData, - size_t initialSkipCount, - bool definition, - std::map const & vectorParamIndices, - std::vector const & returnParamIndices, - bool withAllocators ) const -{ - assert( !commandData.handle.empty() && ( commandData.returnType == "VkResult" ) ); - assert( ( commandData.successCodes.size() == 2 ) && ( commandData.successCodes[0] == "VK_SUCCESS" ) && - ( commandData.successCodes[1] == "VK_INCOMPLETE" ) ); - - auto firstVectorParamIt = vectorParamIndices.begin(); - auto secondVectorParamIt = std::next( firstVectorParamIt ); - - assert( commandData.params[0].type.type == commandData.handle ); - assert( firstVectorParamIt->second == secondVectorParamIt->second ); - - std::set skippedParams = - determineSkippedParams( commandData.params, initialSkipCount, vectorParamIndices, returnParamIndices, false ); - - std::string argumentList = - constructArgumentListEnhanced( commandData.params, skippedParams, {}, definition, withAllocators, false, true ); - std::string commandName = generateCommandName( name, commandData.params, initialSkipCount, m_tags ); - std::string nodiscard = generateNoDiscard( 1 < commandData.successCodes.size(), 1 < commandData.errorCodes.size() ); - std::string templateTypeFirst = stripPrefix( commandData.params[firstVectorParamIt->first].type.type, "Vk" ); - std::string templateTypeSecond = stripPrefix( commandData.params[secondVectorParamIt->first].type.type, "Vk" ); - - if ( definition ) - { - const std::string functionTemplate = - R"( template - ${nodiscard}VULKAN_HPP_INLINE typename ResultValueType, std::vector<${templateTypeSecond}, ${templateTypeSecond}Allocator>>>::type ${className}${classSeparator}${commandName}( ${argumentList} ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - std::pair, std::vector<${templateTypeSecond}, ${templateTypeSecond}Allocator>> data${pairConstructor}; - std::vector<${templateTypeFirst}, ${templateTypeFirst}Allocator> & ${firstVectorName} = data.first; - std::vector<${templateTypeSecond}, ${templateTypeSecond}Allocator> & ${secondVectorName} = data.second; - ${counterType} ${counterName}; - Result result; - do - { - result = static_cast( d.${vkCommand}( ${firstCallArguments} ) ); - if ( ( result == Result::eSuccess ) && counterCount ) - { - ${firstVectorName}.resize( ${counterName} ); - ${secondVectorName}.resize( ${counterName} ); - result = static_cast( d.${vkCommand}( ${secondCallArguments} ) ); - VULKAN_HPP_ASSERT( ${counterName} <= ${firstVectorName}.size() ); - } - } while ( result == Result::eIncomplete ); - if ( ( result == Result::eSuccess ) && ( ${counterName} < ${firstVectorName}.size() ) ) - { - ${firstVectorName}.resize( ${counterName} ); - ${secondVectorName}.resize( ${counterName} ); - } - return createResultValue( result, data, VULKAN_HPP_NAMESPACE_STRING"::${className}${classSeparator}${commandName}" ); - })"; - - std::string pairConstructor = - withAllocators - ? ( "( std::piecewise_construct, std::forward_as_tuple( " + - startLowerCase( stripPrefix( commandData.params[firstVectorParamIt->first].type.type, "Vk" ) ) + - "Allocator ), std::forward_as_tuple( " + - startLowerCase( stripPrefix( commandData.params[secondVectorParamIt->first].type.type, "Vk" ) ) + - "Allocator ) )" ) - : ""; - std::string typenameCheck = - withAllocators ? ( ", typename B1, typename B2, typename std::enable_if::value && std::is_same::value, int>::type " ) - : ""; - - return replaceWithMap( - functionTemplate, - { { "argumentList", argumentList }, - { "className", - initialSkipCount ? stripPrefix( commandData.params[initialSkipCount - 1].type.type, "Vk" ) : "" }, - { "classSeparator", commandData.handle.empty() ? "" : "::" }, - { "commandName", commandName }, - { "counterName", - startLowerCase( stripPrefix( stripPluralS( commandData.params[firstVectorParamIt->second].name ), "p" ) ) }, - { "counterType", commandData.params[firstVectorParamIt->second].type.type }, - { "firstCallArguments", - constructCallArgumentsEnhanced( commandData.params, initialSkipCount, true, {}, returnParamIndices, false ) }, - { "firstVectorName", startLowerCase( stripPrefix( commandData.params[firstVectorParamIt->first].name, "p" ) ) }, - { "nodiscard", nodiscard }, - { "pairConstructor", pairConstructor }, - { "secondCallArguments", - constructCallArgumentsEnhanced( - commandData.params, initialSkipCount, false, {}, returnParamIndices, false ) }, - { "secondVectorName", - startLowerCase( stripPrefix( commandData.params[secondVectorParamIt->first].name, "p" ) ) }, - { "templateTypeFirst", templateTypeFirst }, - { "templateTypeSecond", templateTypeSecond }, - { "typenameCheck", typenameCheck }, - { "vkCommand", name } } ); - } - else - { - const std::string functionTemplate = - R"( template , typename ${templateTypeSecond}Allocator = std::allocator<${templateTypeSecond}>, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE${typenameCheck}> - ${nodiscard}typename ResultValueType, std::vector<${templateTypeSecond}, ${templateTypeSecond}Allocator>>>::type ${commandName}( ${argumentList} ) const;)"; - - std::string typenameCheck = - withAllocators - ? ( ", typename B1 = " + templateTypeFirst + "Allocator, typename B2 = " + templateTypeSecond + - "Allocator, typename std::enable_if::value && std::is_same::value, int>::type = 0" ) - : ""; - - return replaceWithMap( functionTemplate, - { { "argumentList", argumentList }, - { "commandName", commandName }, - { "nodiscard", nodiscard }, - { "templateTypeFirst", templateTypeFirst }, - { "templateTypeSecond", templateTypeSecond }, - { "typenameCheck", typenameCheck } } ); - } -} - -std::string VulkanHppGenerator::constructCommandResultEnumerateTwoVectorsDeprecated( - std::string const & name, - CommandData const & commandData, - size_t initialSkipCount, - bool definition, - std::map const & vectorParamIndices, - bool withAllocators ) const -{ - size_t returnParamIndex = determineReturnParamIndex( commandData, vectorParamIndices, true ); - - std::string argumentList = constructFunctionHeaderArgumentsEnhanced( - commandData, returnParamIndex, returnParamIndex, vectorParamIndices, !definition, withAllocators ); - std::string commandName = generateCommandName( name, commandData.params, initialSkipCount, m_tags ); - std::string nodiscard = generateNoDiscard( 1 < commandData.successCodes.size(), 1 < commandData.errorCodes.size() ); - std::string returnType = determineEnhancedReturnType( commandData, returnParamIndex, false ); - std::string templateType = stripPrefix( commandData.params[returnParamIndex].type.type, "Vk" ); - - if ( definition ) - { - const std::string functionTemplate = - R"( template - VULKAN_HPP_DEPRECATED( "This function is deprecated. Use one of the other flavours of it.") - ${nodiscard}VULKAN_HPP_INLINE typename ResultValueType<${returnType}>::type ${className}${classSeparator}${commandName}( ${argumentList} ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - ${functionBody} - })"; - - std::string typeCheck = withAllocators - ? ", typename B, typename std::enable_if::value, int>::type" - : ""; - - return replaceWithMap( - functionTemplate, - { { "argumentList", argumentList }, - { "className", - initialSkipCount ? stripPrefix( commandData.params[initialSkipCount - 1].type.type, "Vk" ) : "" }, - { "classSeparator", commandData.handle.empty() ? "" : "::" }, - { "commandName", commandName }, - { "functionBody", - constructFunctionBodyEnhanced( " ", - name, - commandData, - initialSkipCount, - returnParamIndex, - returnParamIndex, - vectorParamIndices, - true, - returnType, - withAllocators ) }, - { "nodiscard", nodiscard }, - { "returnType", returnType }, - { "typeCheck", typeCheck } } ); - } - else - { - const std::string functionTemplate = - R"( template , typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE${typeCheck}> - ${nodiscard}typename ResultValueType<${returnType}>::type ${commandName}( ${argumentList} ) const;)"; - - std::string typeCheck = - withAllocators ? ", typename B = Allocator, typename std::enable_if::value, int>::type = 0" - : ""; - - return replaceWithMap( functionTemplate, - { { "argumentList", argumentList }, - { "commandName", commandName }, - { "nodiscard", nodiscard }, - { "returnType", returnType }, - { "templateType", templateType }, - { "typeCheck", typeCheck } } ); - } -} - -std::string VulkanHppGenerator::constructCommandResultGetChain( std::string const & name, - CommandData const & commandData, - size_t initialSkipCount, - bool definition, - size_t nonConstPointerIndex ) const -{ - assert( !commandData.handle.empty() && ( commandData.returnType == "VkResult" ) && !commandData.errorCodes.empty() ); - - std::set skippedParams = - determineSkippedParams( commandData.params, initialSkipCount, {}, { nonConstPointerIndex }, false ); - - std::string argumentList = - constructArgumentListEnhanced( commandData.params, skippedParams, {}, definition, false, false, true ); - std::string commandName = generateCommandName( name, commandData.params, initialSkipCount, m_tags ); - std::string nodiscard = generateNoDiscard( 1 < commandData.successCodes.size(), 1 < commandData.errorCodes.size() ); - assert( beginsWith( commandData.params[nonConstPointerIndex].type.type, "Vk" ) ); - std::string returnType = - "VULKAN_HPP_NAMESPACE::" + stripPrefix( commandData.params[nonConstPointerIndex].type.type, "Vk" ); - - if ( definition ) - { - std::string const functionTemplate = - R"( template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType>::type ${className}${classSeparator}${commandName}( ${argumentList} ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - StructureChain structureChain; - ${returnType} & ${returnVariable} = structureChain.template get<${returnType}>(); - Result result = static_cast( d.${vkCommand}( ${callArguments} ) ); - return createResultValue( result, structureChain, VULKAN_HPP_NAMESPACE_STRING"::${className}${classSeparator}${commandName}"${successCodeList} ); - })"; - - return replaceWithMap( - functionTemplate, - { { "argumentList", argumentList }, - { "callArguments", - constructCallArgumentsEnhanced( - commandData.params, initialSkipCount, false, {}, { nonConstPointerIndex }, false ) }, - { "className", - initialSkipCount ? stripPrefix( commandData.params[initialSkipCount - 1].type.type, "Vk" ) : "" }, - { "classSeparator", commandData.handle.empty() ? "" : "::" }, - { "commandName", commandName }, - { "returnVariable", startLowerCase( stripPrefix( commandData.params[nonConstPointerIndex].name, "p" ) ) }, - { "returnType", returnType }, - { "successCodeList", constructSuccessCodeList( commandData.successCodes ) }, - { "vkCommand", name } } ); - } - else - { - std::string const functionTemplate = - R"( template - VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType>::type ${commandName}( ${argumentList} ) const;)"; - - return replaceWithMap( functionTemplate, { { "argumentList", argumentList }, { "commandName", commandName } } ); - } -} - -std::string VulkanHppGenerator::constructCommandResultGetHandleUnique( std::string const & name, - CommandData const & commandData, - size_t initialSkipCount, - bool definition, - size_t nonConstPointerIndex ) const -{ - assert( ( commandData.returnType == "VkResult" ) && ( commandData.successCodes.size() == 1 ) ); - - std::set skippedParams = - determineSkippedParams( commandData.params, initialSkipCount, {}, { nonConstPointerIndex }, false ); - - std::string argumentList = - constructArgumentListEnhanced( commandData.params, skippedParams, {}, definition, false, false, true ); - std::string commandName = generateCommandName( name, commandData.params, initialSkipCount, m_tags ); - std::string nodiscard = generateNoDiscard( 1 < commandData.successCodes.size(), 1 < commandData.errorCodes.size() ); - std::string returnBaseType = commandData.params[nonConstPointerIndex].type.compose(); - assert( endsWith( returnBaseType, "*" ) ); - returnBaseType.pop_back(); - - if ( definition ) - { - std::string const functionTemplate = - R"( template - ${nodiscard}VULKAN_HPP_INLINE typename ResultValueType>::type ${className}${classSeparator}${commandName}Unique( ${argumentList} )${const} - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - ${returnBaseType} ${returnValueName}; - Result result = static_cast( d.${vkCommand}( ${callArguments} ) ); - ${ObjectDeleter}<${parentName}, Dispatch> deleter( ${this}${allocator}d ); - return createResultValue<${returnBaseType}, Dispatch>( result, ${returnValueName}, VULKAN_HPP_NAMESPACE_STRING "::${className}${classSeparator}${commandName}Unique", deleter ); - })"; - - std::string objectDeleter, allocator; - if ( ( name.find( "Acquire" ) != std::string::npos ) || ( name.find( "Get" ) != std::string::npos ) ) - { - if ( ( name == "vkAcquirePerformanceConfigurationINTEL" ) || ( name == "vkGetRandROutputDisplayEXT" ) || - ( name == "vkGetWinrtDisplayNV" ) || ( name == "vkGetDrmDisplayEXT" ) ) - { - objectDeleter = "ObjectRelease"; - } - else - { - throw std::runtime_error( "Found " + name + " which requires special handling for the object deleter" ); - } - } - else if ( name.find( "Allocate" ) != std::string::npos ) - { - objectDeleter = "ObjectFree"; - allocator = "allocator, "; - } - else - { - assert( ( name.find( "Create" ) != std::string::npos ) || ( name.find( "Register" ) != std::string::npos ) ); - assert( ( name.find( "Create" ) != std::string::npos ) || ( name == "vkRegisterDeviceEventEXT" ) || - ( name == "vkRegisterDisplayEventEXT" ) ); - objectDeleter = "ObjectDestroy"; - allocator = "allocator, "; - } - std::string className = - initialSkipCount ? stripPrefix( commandData.params[initialSkipCount - 1].type.type, "Vk" ) : ""; - std::string parentName = - ( className.empty() || ( commandData.params[nonConstPointerIndex].type.type == "VkDevice" ) ) ? "NoParent" - : className; - - return replaceWithMap( - functionTemplate, - { { "allocator", allocator }, - { "argumentList", argumentList }, - { "callArguments", - constructCallArgumentsEnhanced( - commandData.params, initialSkipCount, false, {}, { nonConstPointerIndex }, false ) }, - { "className", className }, - { "classSeparator", className.empty() ? "" : "::" }, - { "commandName", commandName }, - { "const", commandData.handle.empty() ? "" : " const" }, - { "nodiscard", nodiscard }, - { "ObjectDeleter", objectDeleter }, - { "parentName", parentName }, - { "returnBaseType", returnBaseType }, - { "returnValueName", startLowerCase( stripPrefix( commandData.params[nonConstPointerIndex].name, "p" ) ) }, - { "this", ( parentName == "NoParent" ) ? "" : "*this, " }, - { "vkCommand", name } } ); - } - else - { - std::string const functionTemplate = - R"( template - ${nodiscard}VULKAN_HPP_INLINE typename ResultValueType>::type ${commandName}Unique( ${argumentList} )${const};)"; - - return replaceWithMap( functionTemplate, - { { "argumentList", argumentList }, - { "commandName", commandName }, - { "const", commandData.handle.empty() ? "" : " const" }, - { "nodiscard", nodiscard }, - { "returnBaseType", returnBaseType } } ); - } -} - -std::string VulkanHppGenerator::constructCommandResultGetTwoValues( - std::string const & name, - CommandData const & commandData, - size_t initialSkipCount, - bool definition, - std::vector const & nonConstPointerParamIndices ) const -{ - assert( ( commandData.returnType == "VkResult" ) && ( 1 < commandData.successCodes.size() ) && - ( nonConstPointerParamIndices.size() == 2 ) && !commandData.handle.empty() ); - - std::set skippedParams = - determineSkippedParams( commandData.params, initialSkipCount, {}, nonConstPointerParamIndices, false ); - - std::string argumentList = - constructArgumentListEnhanced( commandData.params, skippedParams, {}, definition, false, false, true ); - std::string commandName = generateCommandName( name, commandData.params, initialSkipCount, m_tags ); - std::string firstType = commandData.params[nonConstPointerParamIndices[0]].type.compose(); - assert( endsWith( firstType, "*" ) ); - firstType.pop_back(); - std::string secondType = commandData.params[nonConstPointerParamIndices[1]].type.compose(); - assert( endsWith( secondType, "*" ) ); - secondType.pop_back(); - std::string returnBaseType = "std::pair<" + firstType + ", " + secondType + ">"; - std::string returnType = constructReturnType( commandData, returnBaseType ); - - if ( definition ) - { - std::string const functionTemplate = - R"( template - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ${returnType} ${className}${classSeparator}${commandName}( ${argumentList} ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - std::pair<${firstType}, ${secondType}> returnValues; - ${firstType} & ${firstValueName} = returnValues.first; - ${secondType} & ${secondValueName} = returnValues.second; - Result result = static_cast( d.${vkCommand}( ${callArguments} ) ); - return createResultValue( result, returnValues, VULKAN_HPP_NAMESPACE_STRING "::${className}${classSeparator}${commandName}"${successCodeList} ); - })"; - - return replaceWithMap( - functionTemplate, - { { "argumentList", argumentList }, - { "callArguments", - constructCallArgumentsEnhanced( - commandData.params, initialSkipCount, false, {}, nonConstPointerParamIndices, false ) }, - { "className", - initialSkipCount ? stripPrefix( commandData.params[initialSkipCount - 1].type.type, "Vk" ) : "" }, - { "classSeparator", commandData.handle.empty() ? "" : "::" }, - { "commandName", commandName }, - { "firstType", firstType }, - { "firstValueName", - startLowerCase( stripPrefix( commandData.params[nonConstPointerParamIndices[0]].name, "p" ) ) }, - { "returnType", returnType }, - { "secondType", secondType }, - { "secondValueName", - startLowerCase( stripPrefix( commandData.params[nonConstPointerParamIndices[1]].name, "p" ) ) }, - { "successCodeList", constructSuccessCodeList( commandData.successCodes ) }, - { "vkCommand", name } } ); - } - else - { - std::string const functionTemplate = - R"( template - VULKAN_HPP_NODISCARD ${returnType} ${commandName}( ${argumentList} ) const;)"; - - return replaceWithMap( - functionTemplate, - { { "argumentList", argumentList }, { "commandName", commandName }, { "returnType", returnType } } ); - } -} - -std::string - VulkanHppGenerator::constructCommandResultGetTwoVectors( std::string const & name, - CommandData const & commandData, - size_t initialSkipCount, - bool definition, - std::map const & vectorParamIndices ) const -{ - assert( commandData.returnType == "VkResult" ); - - assert( commandData.params[0].type.type == commandData.handle ); - -#if !defined( NDEBUG ) - auto firstVectorParamIt = vectorParamIndices.begin(); - auto secondVectorParamIt = std::next( firstVectorParamIt ); - assert( firstVectorParamIt->second == secondVectorParamIt->second ); -#endif - - std::set skippedParameters = - determineSkippedParams( commandData.params, initialSkipCount, vectorParamIndices, {}, false ); - - std::string argumentList = - constructArgumentListEnhanced( commandData.params, skippedParameters, {}, definition, false, false, true ); - std::string commandName = generateCommandName( name, commandData.params, initialSkipCount, m_tags ); - std::pair>> vectorSizeCheck = needsVectorSizeCheck( vectorParamIndices ); - std::string noexceptString = vectorSizeCheck.first ? "VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS" : "VULKAN_HPP_NOEXCEPT"; - - if ( definition ) - { - const std::string functionTemplate = - R"( template - VULKAN_HPP_INLINE Result ${className}${classSeparator}${commandName}( ${argumentList} ) const ${noexcept} - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );${vectorSizeCheck} - Result result = static_cast( d.${vkCommand}( ${callArguments} ) ); - return createResultValue( result, VULKAN_HPP_NAMESPACE_STRING "::${className}${classSeparator}${commandName}"${successCodeList} ); - })"; - - return replaceWithMap( - functionTemplate, - { { "argumentList", argumentList }, - { "callArguments", - constructCallArgumentsEnhanced( commandData.params, initialSkipCount, false, {}, {}, false ) }, - { "className", - initialSkipCount ? stripPrefix( commandData.params[initialSkipCount - 1].type.type, "Vk" ) : "" }, - { "classSeparator", commandData.handle.empty() ? "" : "::" }, - { "commandName", commandName }, - { "noexcept", noexceptString }, - { "successCodeList", constructSuccessCodeList( commandData.successCodes ) }, - { "vectorSizeCheck", - vectorSizeCheck.first - ? constructVectorSizeCheck( name, commandData, initialSkipCount, vectorSizeCheck.second, skippedParameters ) - : "" }, - { "vkCommand", name } } ); - } - else - { - const std::string functionTemplate = - R"( template - Result ${commandName}( ${argumentList} ) const ${noexcept};)"; - - return replaceWithMap( functionTemplate, - { - { "argumentList", argumentList }, - { "commandName", commandName }, - { "noexcept", noexceptString }, - } ); - } -} - -std::string VulkanHppGenerator::constructCommandResultGetValue( std::string const & name, - CommandData const & commandData, - size_t initialSkipCount, - bool definition, - size_t nonConstPointerIndex ) const -{ - assert( commandData.returnType == "VkResult" ); - - std::set skippedParams = - determineSkippedParams( commandData.params, initialSkipCount, {}, { nonConstPointerIndex }, false ); - - std::string argumentList = - constructArgumentListEnhanced( commandData.params, skippedParams, {}, definition, false, false, true ); - std::string commandName = generateCommandName( name, commandData.params, initialSkipCount, m_tags ); - std::string nodiscard = generateNoDiscard( 1 < commandData.successCodes.size(), 1 < commandData.errorCodes.size() ); - std::string returnBaseType = commandData.params[nonConstPointerIndex].type.compose(); - assert( endsWith( returnBaseType, "*" ) ); - returnBaseType.pop_back(); - std::string typenameT; - if ( returnBaseType == "void" ) - { - returnBaseType = "T"; - typenameT = "typename T, "; - } - std::string returnType = constructReturnType( commandData, returnBaseType ); - - if ( definition ) - { - std::string const functionTemplate = - R"( template <${typenameT}typename Dispatch> - ${nodiscard}VULKAN_HPP_INLINE ${returnType} ${className}${classSeparator}${commandName}( ${argumentList} )${const} - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - ${returnBaseType} ${returnValueName}; - Result result = static_cast( d.${vkCommand}( ${callArguments} ) ); - return createResultValue( result, ${returnValueName}, VULKAN_HPP_NAMESPACE_STRING "::${className}${classSeparator}${commandName}"${successCodeList} ); - })"; - - return replaceWithMap( - functionTemplate, - { { "argumentList", argumentList }, - { "callArguments", - constructCallArgumentsEnhanced( - commandData.params, initialSkipCount, false, {}, { nonConstPointerIndex }, false ) }, - { "className", - initialSkipCount ? stripPrefix( commandData.params[initialSkipCount - 1].type.type, "Vk" ) : "" }, - { "classSeparator", commandData.handle.empty() ? "" : "::" }, - { "const", commandData.handle.empty() ? "" : " const" }, - { "commandName", commandName }, - { "returnBaseType", returnBaseType }, - { "returnValueName", startLowerCase( stripPrefix( commandData.params[nonConstPointerIndex].name, "p" ) ) }, - { "nodiscard", nodiscard }, - { "returnType", returnType }, - { "successCodeList", constructSuccessCodeList( commandData.successCodes ) }, - { "typenameT", typenameT }, - { "vkCommand", name } } ); - } - else - { - std::string const functionTemplate = - R"( template <${typenameT}typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> - ${nodiscard}${returnType} ${commandName}( ${argumentList} )${const};)"; - - return replaceWithMap( functionTemplate, - { { "argumentList", argumentList }, - { "commandName", commandName }, - { "const", commandData.handle.empty() ? "" : " const" }, - { "nodiscard", nodiscard }, - { "returnType", returnType }, - { "typenameT", typenameT } } ); - } -} - -std::string - VulkanHppGenerator::constructCommandResultGetValueDeprecated( std::string const & name, - CommandData const & commandData, - size_t initialSkipCount, - bool definition, - std::map const & vectorParamIndices, - size_t returnParamIndex ) const -{ - assert( commandData.returnType == "VkResult" ); - assert( ( vectorParamIndices.find( returnParamIndex ) == vectorParamIndices.end() ) ); - - std::string argumentList = constructFunctionHeaderArgumentsEnhanced( - commandData, returnParamIndex, INVALID_INDEX, vectorParamIndices, !definition, false ); - std::string commandName = generateCommandName( name, commandData.params, initialSkipCount, m_tags ); - std::string nodiscard = generateNoDiscard( 1 < commandData.successCodes.size(), 1 < commandData.errorCodes.size() ); - - assert( !beginsWith( commandData.params[returnParamIndex].type.type, "Vk" ) ); - std::string returnType = commandData.params[returnParamIndex].type.type; - - if ( definition ) - { - std::string const functionTemplate = - R"( template - VULKAN_HPP_DEPRECATED( "This function is deprecated. Use one of the other flavours of it.") - ${nodiscard}VULKAN_HPP_INLINE typename ResultValueType<${returnType}>::type ${className}${classSeparator}${commandName}( ${argumentList} ) const - { - VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); - ${functionBody} - })"; - - return replaceWithMap( - functionTemplate, - { { "argumentList", argumentList }, - { "className", - initialSkipCount ? stripPrefix( commandData.params[initialSkipCount - 1].type.type, "Vk" ) : "" }, - { "classSeparator", commandData.handle.empty() ? "" : "::" }, - { "commandName", commandName }, - { "functionBody", - constructFunctionBodyEnhanced( " ", - name, - commandData, - initialSkipCount, - returnParamIndex, - INVALID_INDEX, - vectorParamIndices, - false, - returnType, - false ) }, - { "nodiscard", nodiscard }, - { "returnType", returnType } } ); - } - else - { - std::string const functionTemplate = - R"( template - ${nodiscard}typename ResultValueType<${returnType}>::type ${commandName}( ${argumentList} ) const;)"; - - return replaceWithMap( functionTemplate, - { { "argumentList", argumentList }, - { "commandName", commandName }, - { "nodiscard", nodiscard }, - { "returnType", returnType } } ); - } -} - std::string VulkanHppGenerator::constructCommandResultGetVector( std::string const & name, CommandData const & commandData, size_t initialSkipCount, @@ -3366,7 +1649,7 @@ std::string VulkanHppGenerator::constructCommandResultGetVector( std::string con determineSkippedParams( commandData.params, initialSkipCount, vectorParamIndices, { returnParamIndex }, false ); std::string argumentList = - constructArgumentListEnhanced( commandData.params, skippedParams, {}, definition, false, false, true ); + generateArgumentListEnhanced( commandData.params, skippedParams, {}, definition, false, false, true ); std::string commandName = generateCommandName( name, commandData.params, initialSkipCount, m_tags ); std::string nodiscard = generateNoDiscard( 1 < commandData.successCodes.size(), 1 < commandData.errorCodes.size() ); std::string returnType = constructReturnType( commandData, "std::vector" ); @@ -3388,7 +1671,7 @@ std::string VulkanHppGenerator::constructCommandResultGetVector( std::string con functionTemplate, { { "argumentList", argumentList }, { "callArguments", - constructCallArgumentsEnhanced( + generateCallArgumentsEnhanced( commandData.params, initialSkipCount, false, {}, { returnParamIndex }, false ) }, { "className", initialSkipCount ? stripPrefix( commandData.params[initialSkipCount - 1].type.type, "Vk" ) : "" }, @@ -3433,7 +1716,7 @@ std::string VulkanHppGenerator::constructCommandResultGetVector( std::string con determineSkippedParams( commandData.params, initialSkipCount, vectorParamIndices, { returnParamIndex }, false ); std::string argumentList = - constructArgumentListEnhanced( commandData.params, skippedParameters, {}, definition, withAllocator, false, true ); + generateArgumentListEnhanced( commandData.params, skippedParameters, {}, definition, withAllocator, false, true ); std::string commandName = generateCommandName( name, commandData.params, initialSkipCount, m_tags ); std::string nodiscard = generateNoDiscard( 1 < commandData.successCodes.size(), 1 < commandData.errorCodes.size() ); @@ -3464,7 +1747,7 @@ std::string VulkanHppGenerator::constructCommandResultGetVector( std::string con { "allocatorType", allocatorType }, { "argumentList", argumentList }, { "callArguments", - constructCallArgumentsEnhanced( + generateCallArgumentsEnhanced( commandData.params, initialSkipCount, false, {}, { returnParamIndex }, false ) }, { "className", initialSkipCount ? stripPrefix( commandData.params[initialSkipCount - 1].type.type, "Vk" ) : "" }, @@ -3521,7 +1804,7 @@ std::string determineSkippedParams( commandData.params, initialSkipCount, vectorParamIndices, returnParamIndices, false ); std::string argumentList = - constructArgumentListEnhanced( commandData.params, skippedParameters, {}, definition, withAllocator, false, true ); + generateArgumentListEnhanced( commandData.params, skippedParameters, {}, definition, withAllocator, false, true ); std::string commandName = generateCommandName( name, commandData.params, initialSkipCount, m_tags ); std::string nodiscard = generateNoDiscard( 1 < commandData.successCodes.size(), 1 < commandData.errorCodes.size() ); std::string returnType = constructReturnType( commandData, "std::vector" ); @@ -3557,8 +1840,7 @@ std::string { "allocatorType", allocatorType }, { "argumentList", argumentList }, { "callArguments", - constructCallArgumentsEnhanced( - commandData.params, initialSkipCount, false, {}, returnParamIndices, false ) }, + generateCallArgumentsEnhanced( commandData.params, initialSkipCount, false, {}, returnParamIndices, false ) }, { "className", initialSkipCount ? stripPrefix( commandData.params[initialSkipCount - 1].type.type, "Vk" ) : "" }, { "classSeparator", commandData.handle.empty() ? "" : "::" }, @@ -3674,7 +1956,7 @@ std::string determineSkippedParams( commandData.params, initialSkipCount, vectorParamIndices, { returnParamIndex }, false ); std::string argumentList = - constructArgumentListEnhanced( commandData.params, skippedParams, {}, definition, withAllocator, false, true ); + generateArgumentListEnhanced( commandData.params, skippedParams, {}, definition, withAllocator, false, true ); std::string commandName = generateCommandName( name, commandData.params, initialSkipCount, m_tags ); std::string nodiscard = generateNoDiscard( 1 < commandData.successCodes.size(), 1 < commandData.errorCodes.size() ); std::string handleType = stripPrefix( commandData.params[returnParamIndex].type.type, "Vk" ); @@ -3705,7 +1987,7 @@ std::string functionTemplate, { { "argumentList", argumentList }, { "callArguments", - constructCallArgumentsEnhanced( + generateCallArgumentsEnhanced( commandData.params, initialSkipCount, false, {}, { returnParamIndex }, false ) }, { "className", initialSkipCount ? stripPrefix( commandData.params[initialSkipCount - 1].type.type, "Vk" ) : "" }, @@ -3760,7 +2042,7 @@ std::string VulkanHppGenerator::constructCommandResultGetVectorOfHandlesSingular std::set singularParams = determineSingularParams( returnParamIndex, vectorParamIndices ); std::string argumentList = - constructArgumentListEnhanced( commandData.params, skippedParams, singularParams, definition, false, false, true ); + generateArgumentListEnhanced( commandData.params, skippedParams, singularParams, definition, false, false, true ); std::string commandName = stripPluralS( generateCommandName( name, commandData.params, initialSkipCount, m_tags ) ); std::string nodiscard = generateNoDiscard( 1 < commandData.successCodes.size(), 1 < commandData.errorCodes.size() ); std::string handleType = stripPrefix( commandData.params[returnParamIndex].type.type, "Vk" ); @@ -3784,7 +2066,7 @@ std::string VulkanHppGenerator::constructCommandResultGetVectorOfHandlesSingular functionTemplate, { { "argumentList", argumentList }, { "callArguments", - constructCallArgumentsEnhanced( + generateCallArgumentsEnhanced( commandData.params, initialSkipCount, false, singularParams, { returnParamIndex }, false ) }, { "className", initialSkipCount ? stripPrefix( commandData.params[initialSkipCount - 1].type.type, "Vk" ) : "" }, @@ -3827,7 +2109,7 @@ std::string VulkanHppGenerator::constructCommandResultGetVectorOfHandlesUnique( determineSkippedParams( commandData.params, initialSkipCount, vectorParamIndices, { returnParamIndex }, false ); std::string argumentList = - constructArgumentListEnhanced( commandData.params, skippedParams, {}, definition, withAllocator, false, true ); + generateArgumentListEnhanced( commandData.params, skippedParams, {}, definition, withAllocator, false, true ); std::string commandName = generateCommandName( name, commandData.params, initialSkipCount, m_tags ); std::string nodiscard = generateNoDiscard( 1 < commandData.successCodes.size(), 1 < commandData.errorCodes.size() ); std::string handleType = stripPrefix( commandData.params[returnParamIndex].type.type, "Vk" ); @@ -3893,7 +2175,7 @@ std::string VulkanHppGenerator::constructCommandResultGetVectorOfHandlesUnique( functionTemplate, { { "argumentList", argumentList }, { "callArguments", - constructCallArgumentsEnhanced( + generateCallArgumentsEnhanced( commandData.params, initialSkipCount, false, {}, { returnParamIndex }, false ) }, { "className", className }, { "classSeparator", commandData.handle.empty() ? "" : "::" }, @@ -3950,7 +2232,7 @@ std::string VulkanHppGenerator::constructCommandResultGetVectorOfHandlesUniqueSi std::set singularParams = determineSingularParams( returnParamIndex, vectorParamIndices ); std::string argumentList = - constructArgumentListEnhanced( commandData.params, skippedParams, singularParams, definition, false, false, true ); + generateArgumentListEnhanced( commandData.params, skippedParams, singularParams, definition, false, false, true ); std::string commandName = stripPluralS( generateCommandName( name, commandData.params, initialSkipCount, m_tags ) ); std::string nodiscard = generateNoDiscard( 1 < commandData.successCodes.size(), 1 < commandData.errorCodes.size() ); std::string handleType = stripPrefix( commandData.params[returnParamIndex].type.type, "Vk" ); @@ -3975,7 +2257,7 @@ std::string VulkanHppGenerator::constructCommandResultGetVectorOfHandlesUniqueSi functionTemplate, { { "argumentList", argumentList }, { "callArguments", - constructCallArgumentsEnhanced( + generateCallArgumentsEnhanced( commandData.params, initialSkipCount, false, singularParams, { returnParamIndex }, false ) }, { "className", initialSkipCount ? stripPrefix( commandData.params[initialSkipCount - 1].type.type, "Vk" ) : "" }, @@ -4021,7 +2303,7 @@ std::string VulkanHppGenerator::constructCommandResultGetVectorOfVoidSingular( std::set singularParams = determineSingularParams( returnParamIndex, vectorParamIndices ); std::string argumentList = - constructArgumentListEnhanced( commandData.params, skippedParams, {}, definition, false, false, true ); + generateArgumentListEnhanced( commandData.params, skippedParams, {}, definition, false, false, true ); std::string commandName = stripPluralS( generateCommandName( name, commandData.params, initialSkipCount, m_tags ) ); std::string nodiscard = generateNoDiscard( 1 < commandData.successCodes.size(), 1 < commandData.errorCodes.size() ); std::string returnType = constructReturnType( commandData, "T" ); @@ -4042,7 +2324,7 @@ std::string VulkanHppGenerator::constructCommandResultGetVectorOfVoidSingular( functionTemplate, { { "argumentList", argumentList }, { "callArguments", - constructCallArgumentsEnhanced( + generateCallArgumentsEnhanced( commandData.params, initialSkipCount, false, singularParams, { returnParamIndex }, false ) }, { "className", initialSkipCount ? stripPrefix( commandData.params[initialSkipCount - 1].type.type, "Vk" ) : "" }, @@ -4083,7 +2365,7 @@ std::string std::set singularParams = determineSingularParams( returnParamIndex, vectorParamIndices ); std::string argumentList = - constructArgumentListEnhanced( commandData.params, skippedParams, singularParams, definition, false, false, true ); + generateArgumentListEnhanced( commandData.params, skippedParams, singularParams, definition, false, false, true ); std::string commandName = stripPluralS( generateCommandName( name, commandData.params, initialSkipCount, m_tags ) ); std::string nodiscard = generateNoDiscard( 1 < commandData.successCodes.size(), 1 < commandData.errorCodes.size() ); std::string dataType = stripPrefix( commandData.params[returnParamIndex].type.type, "Vk" ); @@ -4105,7 +2387,7 @@ std::string functionTemplate, { { "argumentList", argumentList }, { "callArguments", - constructCallArgumentsEnhanced( + generateCallArgumentsEnhanced( commandData.params, initialSkipCount, false, singularParams, { returnParamIndex }, false ) }, { "className", initialSkipCount ? stripPrefix( commandData.params[initialSkipCount - 1].type.type, "Vk" ) : "" }, @@ -4139,7 +2421,7 @@ std::string VulkanHppGenerator::constructCommandStandard( std::string const & na { std::set skippedParams = determineSkippedParams( commandData.params, initialSkipCount, {}, {}, false ); - std::string argumentList = constructArgumentListStandard( commandData.params, skippedParams ); + std::string argumentList = generateArgumentListStandard( commandData.params, skippedParams ); std::string commandName = generateCommandName( name, commandData.params, initialSkipCount, m_tags ); std::string nodiscard = constructNoDiscardStandard( commandData ); std::string returnType = stripPrefix( commandData.returnType, "Vk" ); @@ -4147,7 +2429,7 @@ std::string VulkanHppGenerator::constructCommandStandard( std::string const & na if ( definition ) { std::string functionBody = - "d." + name + "( " + constructCallArgumentsStandard( commandData.handle, commandData.params ) + " )"; + "d." + name + "( " + generateCallArgumentsStandard( commandData.handle, commandData.params ) + " )"; if ( beginsWith( commandData.returnType, "Vk" ) ) { functionBody = "return static_cast<" + returnType + ">( " + functionBody + " )"; @@ -4203,7 +2485,7 @@ std::string VulkanHppGenerator::constructCommandType( std::string const & name, std::set skippedParameters = determineSkippedParams( commandData.params, initialSkipCount, {}, {}, false ); std::string argumentList = - constructArgumentListEnhanced( commandData.params, skippedParameters, {}, definition, false, false, true ); + generateArgumentListEnhanced( commandData.params, skippedParameters, {}, definition, false, false, true ); std::string commandName = generateCommandName( name, commandData.params, initialSkipCount, m_tags ); std::string nodiscard = generateNoDiscard( 1 < commandData.successCodes.size(), 1 < commandData.errorCodes.size() ); std::string returnType = stripPrefix( commandData.returnType, "Vk" ); @@ -4222,7 +2504,7 @@ std::string VulkanHppGenerator::constructCommandType( std::string const & name, functionTemplate, { { "argumentList", argumentList }, { "callArguments", - constructCallArgumentsEnhanced( commandData.params, initialSkipCount, false, {}, {}, false ) }, + generateCallArgumentsEnhanced( commandData.params, initialSkipCount, false, {}, {}, false ) }, { "className", initialSkipCount ? stripPrefix( commandData.params[initialSkipCount - 1].type.type, "Vk" ) : "" }, { "classSeparator", commandData.handle.empty() ? "" : "::" }, @@ -4257,7 +2539,7 @@ std::string VulkanHppGenerator::constructCommandVoid( std::string const & determineSkippedParams( commandData.params, initialSkipCount, vectorParamIndices, {}, false ); std::string argumentList = - constructArgumentListEnhanced( commandData.params, skippedParameters, {}, definition, false, false, true ); + generateArgumentListEnhanced( commandData.params, skippedParameters, {}, definition, false, false, true ); std::string commandName = generateCommandName( name, commandData.params, initialSkipCount, m_tags ); std::string typenameT = ( ( vectorParamIndices.size() == 1 ) && ( commandData.params[vectorParamIndices.begin()->first].type.type == "void" ) ) @@ -4280,7 +2562,7 @@ std::string VulkanHppGenerator::constructCommandVoid( std::string const & functionTemplate, { { "argumentList", argumentList }, { "callArguments", - constructCallArgumentsEnhanced( commandData.params, initialSkipCount, false, {}, {}, false ) }, + generateCallArgumentsEnhanced( commandData.params, initialSkipCount, false, {}, {}, false ) }, { "className", initialSkipCount ? stripPrefix( commandData.params[initialSkipCount - 1].type.type, "Vk" ) : "" }, { "classSeparator", commandData.handle.empty() ? "" : "::" }, @@ -4322,7 +2604,7 @@ std::string VulkanHppGenerator::constructCommandVoidEnumerate( std::string const determineSkippedParams( commandData.params, initialSkipCount, { vectorParamIndex }, returnParamIndices, false ); std::string argumentList = - constructArgumentListEnhanced( commandData.params, skippedParams, {}, definition, withAllocators, false, true ); + generateArgumentListEnhanced( commandData.params, skippedParams, {}, definition, withAllocators, false, true ); std::string commandName = generateCommandName( name, commandData.params, initialSkipCount, m_tags ); std::string vectorElementType = stripPrefix( commandData.params[vectorParamIndex.first].type.type, "Vk" ); @@ -4358,10 +2640,9 @@ std::string VulkanHppGenerator::constructCommandVoidEnumerate( std::string const { "counterName", startLowerCase( stripPrefix( commandData.params[vectorParamIndex.second].name, "p" ) ) }, { "counterType", commandData.params[vectorParamIndex.second].type.type }, { "firstCallArguments", - constructCallArgumentsEnhanced( commandData.params, initialSkipCount, true, {}, returnParamIndices, false ) }, + generateCallArgumentsEnhanced( commandData.params, initialSkipCount, true, {}, returnParamIndices, false ) }, { "secondCallArguments", - constructCallArgumentsEnhanced( - commandData.params, initialSkipCount, false, {}, returnParamIndices, false ) }, + generateCallArgumentsEnhanced( commandData.params, initialSkipCount, false, {}, returnParamIndices, false ) }, { "typenameCheck", typenameCheck }, { "vectorAllocator", withAllocators @@ -4408,7 +2689,7 @@ std::string determineSkippedParams( commandData.params, initialSkipCount, { vectorParamIndex }, returnParamIndices, false ); std::string argumentList = - constructArgumentListEnhanced( commandData.params, skippedParams, {}, definition, withAllocators, true, true ); + generateArgumentListEnhanced( commandData.params, skippedParams, {}, definition, withAllocators, true, true ); std::string commandName = generateCommandName( name, commandData.params, initialSkipCount, m_tags ); assert( beginsWith( commandData.params[vectorParamIndex.first].type.type, "Vk" ) ); std::string vectorElementType = @@ -4455,10 +2736,9 @@ std::string { "counterName", startLowerCase( stripPrefix( commandData.params[vectorParamIndex.second].name, "p" ) ) }, { "counterType", commandData.params[vectorParamIndex.second].type.type }, { "firstCallArguments", - constructCallArgumentsEnhanced( commandData.params, initialSkipCount, true, {}, returnParamIndices, false ) }, + generateCallArgumentsEnhanced( commandData.params, initialSkipCount, true, {}, returnParamIndices, false ) }, { "secondCallArguments", - constructCallArgumentsEnhanced( - commandData.params, initialSkipCount, false, {}, returnParamIndices, false ) }, + generateCallArgumentsEnhanced( commandData.params, initialSkipCount, false, {}, returnParamIndices, false ) }, { "structureChainAllocator", withAllocators ? ( ", structureChainAllocator" ) : "" }, { "typenameCheck", typenameCheck }, { "vectorElementType", vectorElementType }, @@ -4494,7 +2774,7 @@ std::string VulkanHppGenerator::constructCommandVoidGetChain( std::string const determineSkippedParams( commandData.params, initialSkipCount, {}, { nonConstPointerIndex }, false ); std::string argumentList = - constructArgumentListEnhanced( commandData.params, skippedParams, {}, definition, false, false, true ); + generateArgumentListEnhanced( commandData.params, skippedParams, {}, definition, false, false, true ); std::string commandName = generateCommandName( name, commandData.params, initialSkipCount, m_tags ); std::string nodiscard = generateNoDiscard( 1 < commandData.successCodes.size(), 1 < commandData.errorCodes.size() ); assert( beginsWith( commandData.params[nonConstPointerIndex].type.type, "Vk" ) ); @@ -4518,7 +2798,7 @@ std::string VulkanHppGenerator::constructCommandVoidGetChain( std::string const functionTemplate, { { "argumentList", argumentList }, { "callArguments", - constructCallArgumentsEnhanced( + generateCallArgumentsEnhanced( commandData.params, initialSkipCount, false, {}, { nonConstPointerIndex }, false ) }, { "className", initialSkipCount ? stripPrefix( commandData.params[initialSkipCount - 1].type.type, "Vk" ) : "" }, @@ -4554,7 +2834,7 @@ std::string VulkanHppGenerator::constructCommandVoidGetValue( std::string const determineSkippedParams( commandData.params, initialSkipCount, {}, { returnParamIndex }, false ); std::string argumentList = - constructArgumentListEnhanced( commandData.params, skippedParameters, {}, definition, false, false, true ); + generateArgumentListEnhanced( commandData.params, skippedParameters, {}, definition, false, false, true ); std::string commandName = generateCommandName( name, commandData.params, initialSkipCount, m_tags ); std::string nodiscard = generateNoDiscard( 1 < commandData.successCodes.size(), 1 < commandData.errorCodes.size() ); std::string returnType = stripPostfix( commandData.params[returnParamIndex].type.compose(), "*" ); @@ -4610,7 +2890,7 @@ std::string VulkanHppGenerator::constructCommandVoidGetValue( std::string const functionTemplate, { { "argumentList", argumentList }, { "callArguments", - constructCallArgumentsEnhanced( + generateCallArgumentsEnhanced( commandData.params, initialSkipCount, false, {}, { returnParamIndex }, false ) }, { "className", className }, { "classSeparator", classSeparator }, @@ -5020,7 +3300,7 @@ std::string { assert( !param.optional ); arguments += - constructCallArgumentEnhanced( params, i, nonConstPointerAsNullptr, singularParams, returnParamIndices, true ); + generateCallArgumentEnhanced( params, i, nonConstPointerAsNullptr, singularParams, returnParamIndices, true ); } encounteredArgument = true; } @@ -5737,7 +4017,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionResultEnumerate std::set skippedParameters = determineSkippedParams( commandIt->second.params, initialSkipCount, vectorParamIndices, nonConstPointerParamIndices, false ); std::string argumentList = - constructArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, definition, false, false, false ); + generateArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, definition, false, false, false ); std::string commandName = generateCommandName( commandIt->first, commandIt->second.params, initialSkipCount, m_tags ); std::string vectorElementType = commandIt->second.params[vectorParamIndices.begin()->first].type.type; if ( !isHandleType( vectorElementType ) ) @@ -5782,9 +4062,9 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionResultEnumerate std::string counterName = startLowerCase( stripPrefix( commandIt->second.params[vectorParamIndices.begin()->second].name, "p" ) ); - std::string firstCallArguments = constructCallArgumentsEnhanced( + std::string firstCallArguments = generateCallArgumentsEnhanced( commandIt->second.params, initialSkipCount, true, {}, nonConstPointerParamIndices, true ); - std::string secondCallArguments = constructCallArgumentsEnhanced( + std::string secondCallArguments = generateCallArgumentsEnhanced( commandIt->second.params, initialSkipCount, false, {}, nonConstPointerParamIndices, true ); std::string vectorName = startLowerCase( stripPrefix( commandIt->second.params[vectorParamIndices.begin()->first].name, "p" ) ); @@ -5831,7 +4111,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionResultEnumerate std::set skippedParameters = determineSkippedParams( commandIt->second.params, initialSkipCount, vectorParamIndices, nonConstPointerParamIndices, false ); std::string argumentList = - constructArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, definition, false, false, false ); + generateArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, definition, false, false, false ); auto firstVectorParamIt = vectorParamIndices.begin(); auto secondVectorParamIt = std::next( firstVectorParamIt ); std::string commandName = generateCommandName( commandIt->first, commandIt->second.params, initialSkipCount, m_tags ); @@ -5875,11 +4155,11 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionResultEnumerate } )"; - std::string firstCallArguments = constructCallArgumentsEnhanced( + std::string firstCallArguments = generateCallArgumentsEnhanced( commandIt->second.params, initialSkipCount, true, {}, nonConstPointerParamIndices, true ); std::string firstVectorName = startLowerCase( stripPrefix( commandIt->second.params[firstVectorParamIt->first].name, "p" ) ); - std::string secondCallArguments = constructCallArgumentsEnhanced( + std::string secondCallArguments = generateCallArgumentsEnhanced( commandIt->second.params, initialSkipCount, false, {}, nonConstPointerParamIndices, true ); std::string secondVectorName = startLowerCase( stripPrefix( commandIt->second.params[secondVectorParamIt->first].name, "p" ) ); @@ -5925,13 +4205,13 @@ std::pair VulkanHppGenerator::constructRAIIHandleMembe std::set skippedParameters = determineSkippedParams( commandIt->second.params, initialSkipCount, vectorParamIndices, nonConstPointerParamIndices, false ); std::string argumentListDeclaration = - constructArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, false, false, false, false ); + generateArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, false, false, false, false ); std::string argumentListDefinition = - constructArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, true, false, false, false ); + generateArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, true, false, false, false ); std::string commandName = generateCommandName( commandIt->first, commandIt->second.params, initialSkipCount, m_tags ); std::string enter, leave; std::tie( enter, leave ) = generateProtection( commandIt->second.referencedIn, std::string() ); - std::string callArguments = constructCallArgumentsEnhanced( + std::string callArguments = generateCallArgumentsEnhanced( commandIt->second.params, initialSkipCount, false, {}, nonConstPointerParamIndices, true ); std::string firstReturnName = startLowerCase( stripPrefix( commandIt->second.params[nonConstPointerParamIndices[0]].name, "p" ) ); @@ -6001,7 +4281,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionResultMulti( std::set skippedParameters = determineSkippedParams( commandIt->second.params, initialSkipCount, vectorParamIndices, {}, false ); std::string argumentList = - constructArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, definition, false, false, false ); + generateArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, definition, false, false, false ); std::string commandName = generateCommandName( commandIt->first, commandIt->second.params, initialSkipCount, m_tags ); if ( definition ) @@ -6020,7 +4300,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionResultMulti( )"; std::string callArguments = - constructCallArgumentsEnhanced( commandIt->second.params, initialSkipCount, false, {}, {}, true ); + generateCallArgumentsEnhanced( commandIt->second.params, initialSkipCount, false, {}, {}, true ); std::pair>> vectorSizeCheck = needsVectorSizeCheck( vectorParamIndices ); std::string vectorSizeCheckString = vectorSizeCheck.first @@ -6064,7 +4344,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionResultMultiGetV std::set skippedParameters = determineSkippedParams( commandIt->second.params, initialSkipCount, vectorParamIndices, nonConstPointerParamIndices, false ); std::string argumentList = - constructArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, definition, false, false, false ); + generateArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, definition, false, false, false ); std::string commandName = generateCommandName( commandIt->first, commandIt->second.params, initialSkipCount, m_tags ); std::string returnType = stripPostfix( commandIt->second.params[nonConstPointerParamIndices[0]].type.compose(), "*" ); @@ -6084,7 +4364,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionResultMultiGetV } )"; - std::string callArguments = constructCallArgumentsEnhanced( + std::string callArguments = generateCallArgumentsEnhanced( commandIt->second.params, initialSkipCount, false, {}, nonConstPointerParamIndices, true ); std::string valueName = startLowerCase( stripPrefix( commandIt->second.params[nonConstPointerParamIndices[0]].name, "p" ) ); @@ -6127,7 +4407,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionResultMultiGetV std::set skippedParameters = determineSkippedParams( commandIt->second.params, initialSkipCount, vectorParamIndices, nonConstPointerParamIndices, false ); std::string argumentList = - constructArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, definition, false, false, false ); + generateArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, definition, false, false, false ); std::string commandName = generateCommandName( commandIt->first, commandIt->second.params, initialSkipCount, m_tags ); if ( definition ) @@ -6148,7 +4428,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionResultMultiGetV } )"; - std::string callArguments = constructCallArgumentsEnhanced( + std::string callArguments = generateCallArgumentsEnhanced( commandIt->second.params, initialSkipCount, false, {}, nonConstPointerParamIndices, true ); std::string dataName = startLowerCase( stripPrefix( commandIt->second.params[nonConstPointerParamIndices[0]].name, "p" ) ); @@ -6192,7 +4472,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionResultMultiGetV std::set skippedParameters = determineSkippedParams( commandIt->second.params, initialSkipCount, vectorParamIndices, nonConstPointerParamIndices, true ); std::set singularParams = determineSingularParams( nonConstPointerParamIndices[0], vectorParamIndices ); - std::string argumentList = constructArgumentListEnhanced( + std::string argumentList = generateArgumentListEnhanced( commandIt->second.params, skippedParameters, singularParams, definition, false, false, false ); std::string commandName = stripPluralS( generateCommandName( commandIt->first, commandIt->second.params, initialSkipCount, m_tags ) ); @@ -6214,7 +4494,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionResultMultiGetV } )"; - std::string callArguments = constructCallArgumentsEnhanced( + std::string callArguments = generateCallArgumentsEnhanced( commandIt->second.params, initialSkipCount, false, singularParams, nonConstPointerParamIndices, true ); std::string dataName = startLowerCase( stripPrefix( commandIt->second.params[nonConstPointerParamIndices[0]].name, "p" ) ); @@ -6254,7 +4534,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionResultMultiNoEr std::set skippedParameters = determineSkippedParams( commandIt->second.params, initialSkipCount, vectorParamIndices, {}, false ); std::string argumentList = - constructArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, definition, false, false, false ); + generateArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, definition, false, false, false ); std::string commandName = generateCommandName( commandIt->first, commandIt->second.params, initialSkipCount, m_tags ); if ( definition ) @@ -6268,7 +4548,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionResultMultiNoEr )"; std::string callArguments = - constructCallArgumentsEnhanced( commandIt->second.params, initialSkipCount, false, {}, {}, true ); + generateCallArgumentsEnhanced( commandIt->second.params, initialSkipCount, false, {}, {}, true ); std::pair>> vectorSizeCheck = needsVectorSizeCheck( vectorParamIndices ); std::string vectorSizeCheckString = vectorSizeCheck.first @@ -6310,7 +4590,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionResultSingle( std::set skippedParameters = determineSkippedParams( commandIt->second.params, initialSkipCount, vectorParamIndices, {}, false ); std::string argumentList = - constructArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, definition, false, false, false ); + generateArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, definition, false, false, false ); std::string commandName = generateCommandName( commandIt->first, commandIt->second.params, initialSkipCount, m_tags ); if ( definition ) @@ -6328,7 +4608,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionResultSingle( )"; std::string callArguments = - constructCallArgumentsEnhanced( commandIt->second.params, initialSkipCount, false, {}, {}, true ); + generateCallArgumentsEnhanced( commandIt->second.params, initialSkipCount, false, {}, {}, true ); std::pair>> vectorSizeCheck = needsVectorSizeCheck( vectorParamIndices ); std::string vectorSizeCheckString = vectorSizeCheck.first @@ -6372,7 +4652,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionResultSingleGet std::set skippedParameters = determineSkippedParams( commandIt->second.params, initialSkipCount, vectorParamIndices, nonConstPointerParamIndices, false ); std::string argumentList = - constructArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, definition, false, false, false ); + generateArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, definition, false, false, false ); std::string commandName = generateCommandName( commandIt->first, commandIt->second.params, initialSkipCount, m_tags ); if ( definition ) @@ -6393,7 +4673,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionResultSingleGet } )"; - std::string callArguments = constructCallArgumentsEnhanced( + std::string callArguments = generateCallArgumentsEnhanced( commandIt->second.params, initialSkipCount, false, {}, nonConstPointerParamIndices, true ); std::string returnType = stripPostfix( commandIt->second.params[nonConstPointerParamIndices[0]].type.compose(), "*" ); @@ -6437,7 +4717,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionResultSingleGet std::set skippedParameters = determineSkippedParams( commandIt->second.params, initialSkipCount, vectorParamIndices, { returnParamIndex }, false ); std::string argumentList = - constructArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, definition, false, false, false ); + generateArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, definition, false, false, false ); std::string commandName = generateCommandName( commandIt->first, commandIt->second.params, initialSkipCount, m_tags ); std::string vectorElementType = commandIt->second.params[returnParamIndex].type.type; @@ -6457,7 +4737,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionResultSingleGet } )"; - std::string callArguments = constructCallArgumentsEnhanced( + std::string callArguments = generateCallArgumentsEnhanced( commandIt->second.params, initialSkipCount, false, {}, { returnParamIndex }, true ); std::string vectorName = startLowerCase( stripPrefix( commandIt->second.params[returnParamIndex].name, "p" ) ); std::string vectorSize = @@ -6503,7 +4783,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionResultSingleGet std::set skippedParameters = determineSkippedParams( commandIt->second.params, initialSkipCount, vectorParamIndices, nonConstPointerParamIndices, false ); std::string argumentList = - constructArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, definition, false, false, false ); + generateArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, definition, false, false, false ); std::string commandName = generateCommandName( commandIt->first, commandIt->second.params, initialSkipCount, m_tags ); std::string valueType = commandIt->second.params[nonConstPointerParamIndices[1]].type.type; std::string vectorElementType = commandIt->second.params[nonConstPointerParamIndices[0]].type.type; @@ -6526,7 +4806,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionResultSingleGet } )"; - std::string callArguments = constructCallArgumentsEnhanced( + std::string callArguments = generateCallArgumentsEnhanced( commandIt->second.params, initialSkipCount, false, {}, nonConstPointerParamIndices, true ); std::string valueName = startLowerCase( stripPrefix( commandIt->second.params[nonConstPointerParamIndices[1]].name, "p" ) ); @@ -6579,7 +4859,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionResultSingleGet std::set skippedParameters = determineSkippedParams( commandIt->second.params, initialSkipCount, vectorParamIndices, nonConstPointerParamIndices, false ); std::string argumentList = - constructArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, definition, false, false, false ); + generateArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, definition, false, false, false ); std::string commandName = generateCommandName( commandIt->first, commandIt->second.params, initialSkipCount, m_tags ); if ( definition ) @@ -6600,7 +4880,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionResultSingleGet } )"; - std::string callArguments = constructCallArgumentsEnhanced( + std::string callArguments = generateCallArgumentsEnhanced( commandIt->second.params, initialSkipCount, false, {}, nonConstPointerParamIndices, true ); std::string dataName = startLowerCase( stripPrefix( commandIt->second.params[nonConstPointerParamIndices[0]].name, "p" ) ); @@ -6645,7 +4925,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionResultSingleGet std::set skippedParameters = determineSkippedParams( commandIt->second.params, initialSkipCount, vectorParamIndices, nonConstPointerParamIndices, true ); std::set singularParams = determineSingularParams( nonConstPointerParamIndices[0], vectorParamIndices ); - std::string argumentList = constructArgumentListEnhanced( + std::string argumentList = generateArgumentListEnhanced( commandIt->second.params, skippedParameters, singularParams, definition, false, false, false ); std::string commandName = stripPluralS( generateCommandName( commandIt->first, commandIt->second.params, initialSkipCount, m_tags ) ); @@ -6667,7 +4947,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionResultSingleGet } )"; - std::string callArguments = constructCallArgumentsEnhanced( + std::string callArguments = generateCallArgumentsEnhanced( commandIt->second.params, initialSkipCount, false, singularParams, nonConstPointerParamIndices, true ); std::string dataName = startLowerCase( stripPrefix( commandIt->second.params[nonConstPointerParamIndices[0]].name, "p" ) ); @@ -6708,7 +4988,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionResultSingleGet std::set skippedParameters = determineSkippedParams( commandIt->second.params, initialSkipCount, vectorParamIndices, { returnParamIndex }, true ); std::set singularParams = determineSingularParams( returnParamIndex, vectorParamIndices ); - std::string argumentList = constructArgumentListEnhanced( + std::string argumentList = generateArgumentListEnhanced( commandIt->second.params, skippedParameters, singularParams, definition, false, false, false ); std::string commandName = stripPluralS( generateCommandName( commandIt->first, commandIt->second.params, initialSkipCount, m_tags ) ); @@ -6730,7 +5010,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionResultSingleGet } )"; - std::string callArguments = constructCallArgumentsEnhanced( + std::string callArguments = generateCallArgumentsEnhanced( commandIt->second.params, initialSkipCount, false, singularParams, { returnParamIndex }, true ); std::string vectorElementName = stripPluralS( startLowerCase( stripPrefix( commandIt->second.params[returnParamIndex].name, "p" ) ) ); @@ -6772,7 +5052,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionResultSingleNoE std::set skippedParameters = determineSkippedParams( commandIt->second.params, initialSkipCount, vectorParamIndices, {}, false ); std::string argumentList = - constructArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, definition, false, false, false ); + generateArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, definition, false, false, false ); std::string commandName = generateCommandName( commandIt->first, commandIt->second.params, initialSkipCount, m_tags ); if ( definition ) @@ -6786,7 +5066,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionResultSingleNoE )"; std::string callArguments = - constructCallArgumentsEnhanced( commandIt->second.params, initialSkipCount, false, {}, {}, true ); + generateCallArgumentsEnhanced( commandIt->second.params, initialSkipCount, false, {}, {}, true ); std::pair>> vectorSizeCheck = needsVectorSizeCheck( vectorParamIndices ); std::string vectorSizeCheckString = vectorSizeCheck.first @@ -6831,7 +5111,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionResultSingleGet std::set skippedParameters = determineSkippedParams( commandIt->second.params, initialSkipCount, vectorParamIndices, nonConstPointerParamIndices, false ); std::string argumentList = - constructArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, definition, false, false, false ); + generateArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, definition, false, false, false ); std::string commandName = generateCommandName( commandIt->first, commandIt->second.params, initialSkipCount, m_tags ); std::string returnType = stripPostfix( commandIt->second.params[nonConstPointerParamIndices[0]].type.compose(), "*" ); std::string typenameT; @@ -6857,7 +5137,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionResultSingleGet } )"; - std::string callArguments = constructCallArgumentsEnhanced( + std::string callArguments = generateCallArgumentsEnhanced( commandIt->second.params, initialSkipCount, false, {}, nonConstPointerParamIndices, true ); std::string valueName = startLowerCase( stripPrefix( commandIt->second.params[nonConstPointerParamIndices[0]].name, "p" ) ); @@ -6903,9 +5183,9 @@ std::pair VulkanHppGenerator::constructRAIIHandleMembe std::set skippedParameters = determineSkippedParams( commandIt->second.params, initialSkipCount, vectorParamIndices, nonConstPointerParamIndices, false ); std::string argumentListDeclaration = - constructArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, false, false, false, false ); + generateArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, false, false, false, false ); std::string argumentListDefinition = - constructArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, true, false, false, false ); + generateArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, true, false, false, false ); std::string commandName = generateCommandName( commandIt->first, commandIt->second.params, initialSkipCount, m_tags ); std::string enter, leave; std::tie( enter, leave ) = generateProtection( commandIt->second.referencedIn, std::string() ); @@ -6943,7 +5223,7 @@ ${leave})"; definitionTemplate, { { "argumentList", argumentListDefinition }, { "callArguments", - constructCallArgumentsEnhanced( + generateCallArgumentsEnhanced( commandIt->second.params, initialSkipCount, false, {}, nonConstPointerParamIndices, true ) }, { "className", stripPrefix( commandIt->second.params[initialSkipCount - 1].type.type, "Vk" ) }, { "commandName", commandName }, @@ -7337,7 +5617,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionType( std::set skippedParameters = determineSkippedParams( commandIt->second.params, initialSkipCount, vectorParamIndices, {}, false ); std::string argumentList = - constructArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, definition, false, false, false ); + generateArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, definition, false, false, false ); std::string commandName = generateCommandName( commandIt->first, commandIt->second.params, initialSkipCount, m_tags ); std::string returnType = generateNamespacedType( commandIt->second.returnType ); @@ -7352,7 +5632,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionType( )"; std::string callArguments = - constructCallArgumentsEnhanced( commandIt->second.params, initialSkipCount, false, {}, {}, true ); + generateCallArgumentsEnhanced( commandIt->second.params, initialSkipCount, false, {}, {}, true ); std::pair>> vectorSizeCheck = needsVectorSizeCheck( vectorParamIndices ); std::string vectorSizeCheckString = vectorSizeCheck.first @@ -7396,7 +5676,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionVkType( std::set skippedParameters = determineSkippedParams( commandIt->second.params, initialSkipCount, vectorParamIndices, {}, false ); std::string argumentList = - constructArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, definition, false, false, false ); + generateArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, definition, false, false, false ); std::string commandName = generateCommandName( commandIt->first, commandIt->second.params, initialSkipCount, m_tags ); std::string returnType = generateNamespacedType( commandIt->second.returnType ); @@ -7411,7 +5691,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionVkType( )"; std::string callArguments = - constructCallArgumentsEnhanced( commandIt->second.params, initialSkipCount, false, {}, {}, true ); + generateCallArgumentsEnhanced( commandIt->second.params, initialSkipCount, false, {}, {}, true ); std::pair>> vectorSizeCheck = needsVectorSizeCheck( vectorParamIndices ); std::string vectorSizeCheckString = vectorSizeCheck.first @@ -7507,7 +5787,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionVoid0Return( std::set skippedParameters = determineSkippedParams( commandIt->second.params, initialSkipCount, vectorParamIndices, {}, false ); std::string argumentList = - constructArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, definition, false, false, false ); + generateArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, definition, false, false, false ); std::string commandName = generateCommandName( commandIt->first, commandIt->second.params, initialSkipCount, m_tags ); std::pair>> vectorSizeCheck = needsVectorSizeCheck( vectorParamIndices ); std::string noexceptString = vectorSizeCheck.first ? "VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS" : "VULKAN_HPP_NOEXCEPT"; @@ -7527,7 +5807,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionVoid0Return( )"; std::string callArguments = - constructCallArgumentsEnhanced( commandIt->second.params, initialSkipCount, false, {}, {}, true ); + generateCallArgumentsEnhanced( commandIt->second.params, initialSkipCount, false, {}, {}, true ); std::string vectorSizeCheckString = vectorSizeCheck.first ? constructVectorSizeCheck( @@ -7671,7 +5951,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionVoidEnumerate( std::set skippedParameters = determineSkippedParams( commandIt->second.params, initialSkipCount, vectorParamIndices, nonConstPointerParamIndices, false ); std::string argumentList = - constructArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, definition, false, false, false ); + generateArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, definition, false, false, false ); std::string commandName = generateCommandName( commandIt->first, commandIt->second.params, initialSkipCount, m_tags ); std::string vectorElementType = stripPostfix( commandIt->second.params[vectorParamIndices.begin()->first].type.compose(), "*" ); @@ -7693,9 +5973,9 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionVoidEnumerate( std::string counterName = startLowerCase( stripPrefix( commandIt->second.params[vectorParamIndices.begin()->second].name, "p" ) ); - std::string firstCallArguments = constructCallArgumentsEnhanced( + std::string firstCallArguments = generateCallArgumentsEnhanced( commandIt->second.params, initialSkipCount, true, {}, nonConstPointerParamIndices, true ); - std::string secondCallArguments = constructCallArgumentsEnhanced( + std::string secondCallArguments = generateCallArgumentsEnhanced( commandIt->second.params, initialSkipCount, false, {}, nonConstPointerParamIndices, true ); std::string vectorName = startLowerCase( stripPrefix( commandIt->second.params[vectorParamIndices.begin()->first].name, "p" ) ); @@ -7738,7 +6018,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionVoidEnumerateCh std::set skippedParameters = determineSkippedParams( commandIt->second.params, initialSkipCount, vectorParamIndices, nonConstPointerParamIndices, false ); std::string argumentList = - constructArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, definition, false, false, false ); + generateArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, definition, false, false, false ); std::string counterName = startLowerCase( stripPrefix( commandIt->second.params[vectorParamIndices.begin()->second].name, "p" ) ); std::string commandName = generateCommandName( commandIt->first, commandIt->second.params, initialSkipCount, m_tags ); @@ -7768,9 +6048,9 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionVoidEnumerateCh } )"; - std::string firstCallArguments = constructCallArgumentsEnhanced( + std::string firstCallArguments = generateCallArgumentsEnhanced( commandIt->second.params, initialSkipCount, true, {}, nonConstPointerParamIndices, true ); - std::string secondCallArguments = constructCallArgumentsEnhanced( + std::string secondCallArguments = generateCallArgumentsEnhanced( commandIt->second.params, initialSkipCount, false, {}, nonConstPointerParamIndices, true ); std::string vectorElementType = stripPostfix( commandIt->second.params[vectorParamIndices.begin()->first].type.compose(), "*" ); @@ -7817,7 +6097,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionVoidGetChain( std::set skippedParameters = determineSkippedParams( commandIt->second.params, initialSkipCount, vectorParamIndices, nonConstPointerParamIndices, false ); std::string argumentList = - constructArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, definition, false, false, false ); + generateArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, definition, false, false, false ); std::string commandName = generateCommandName( commandIt->first, commandIt->second.params, initialSkipCount, m_tags ); if ( definition ) @@ -7834,7 +6114,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionVoidGetChain( } )"; - std::string callArguments = constructCallArgumentsEnhanced( + std::string callArguments = generateCallArgumentsEnhanced( commandIt->second.params, initialSkipCount, false, {}, nonConstPointerParamIndices, true ); std::string returnType = stripPostfix( commandIt->second.params[nonConstPointerParamIndices[0]].type.compose(), "*" ); @@ -7880,7 +6160,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionVoidGetValue( std::set skippedParameters = determineSkippedParams( commandIt->second.params, initialSkipCount, vectorParamIndices, nonConstPointerParamIndices, false ); std::string argumentList = - constructArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, definition, false, false, false ); + generateArgumentListEnhanced( commandIt->second.params, skippedParameters, {}, definition, false, false, false ); std::string commandName = generateCommandName( commandIt->first, commandIt->second.params, initialSkipCount, m_tags ); std::string returnType = stripPostfix( commandIt->second.params[nonConstPointerParamIndices[0]].type.compose(), "*" ); std::pair>> vectorSizeCheck = needsVectorSizeCheck( vectorParamIndices ); @@ -7902,7 +6182,7 @@ std::string VulkanHppGenerator::constructRAIIHandleMemberFunctionVoidGetValue( definitionTemplate, { { "argumentList", argumentList }, { "callArguments", - constructCallArgumentsEnhanced( + generateCallArgumentsEnhanced( commandIt->second.params, initialSkipCount, false, {}, nonConstPointerParamIndices, true ) }, { "className", stripPrefix( commandIt->second.params[initialSkipCount - 1].type.type, "Vk" ) }, { "commandName", commandName }, @@ -8226,729 +6506,6 @@ std::vector findAll( InputIt first, InputIt last, UnaryPredicate p ) return result; } -void VulkanHppGenerator::appendStructConstructors( std::string & str, - std::pair const & structData, - std::string const & prefix ) const -{ - // the constructor with all the elements as arguments, with defaults - // and the simple copy constructor from the corresponding vulkan structure - static const std::string constructors = R"( -${prefix}${constexpr}${structName}(${arguments}) VULKAN_HPP_NOEXCEPT -${prefix}${initializers} -${prefix}{} - -${prefix}${constexpr}${structName}( ${structName} const & rhs ) VULKAN_HPP_NOEXCEPT = default; - -${prefix}${structName}( Vk${structName} const & rhs ) VULKAN_HPP_NOEXCEPT -${prefix} : ${structName}( *reinterpret_cast<${structName} const *>( &rhs ) ) -${prefix}{} -)"; - - std::string arguments, initializers; - bool listedArgument = false; - bool firstArgument = true; - for ( auto const & member : structData.second.members ) - { - // gather the arguments - listedArgument = appendStructConstructorArgument( arguments, listedArgument, member, true ); - - // gather the initializers; skip member 'pNext' and members with exactly one legal value - if ( ( member.name != "pNext" ) && ( member.values.size() != 1 ) ) - { - initializers += ( firstArgument ? ":" : "," ) + std::string( " " ) + member.name + "( " + member.name + "_ )"; - firstArgument = false; - } - } - - str += replaceWithMap( constructors, - { { "arguments", arguments }, - { "constexpr", constructConstexprString( structData, false ) }, - { "initializers", initializers }, - { "prefix", prefix }, - { "structName", stripPrefix( structData.first, "Vk" ) } } ); - - appendStructConstructorsEnhanced( str, structData, prefix ); -} - -void VulkanHppGenerator::appendStructConstructorsEnhanced( std::string & str, - std::pair const & structData, - std::string const & prefix ) const -{ - auto memberIts = findAll( structData.second.members.begin(), - structData.second.members.end(), - []( MemberData const & md ) - { return !md.len.empty() && ( ignoreLens.find( md.len.front() ) == ignoreLens.end() ); } ); - if ( !memberIts.empty() ) - { - // map from len-members to all the array members using that len - std::map::const_iterator, std::vector::const_iterator>> lenIts; - for ( auto const & mit : memberIts ) - { - std::string lenName = - ( mit->len.front() == R"(latexmath:[\textrm{codeSize} \over 4])" ) ? "codeSize" : mit->len.front(); - auto lenIt = std::find_if( - structData.second.members.begin(), mit, [&lenName]( MemberData const & md ) { return md.name == lenName; } ); - assert( lenIt != mit ); - lenIts[lenIt].push_back( mit ); - } - - std::string arguments, initializers; - bool listedArgument = false; - bool firstArgument = true; - bool arrayListed = false; - std::string templateHeader, sizeChecks; - for ( auto mit = structData.second.members.begin(); mit != structData.second.members.end(); ++mit ) - { - // gather the initializers; skip member 'pNext' and constant members - if ( ( mit->name != "pNext" ) && ( mit->values.size() != 1 ) ) - { - auto litit = lenIts.find( mit ); - if ( litit != lenIts.end() ) - { - // len arguments just have an initalizer, from the ArrayProxyNoTemporaries size - initializers += ( firstArgument ? ": " : ", " ) + mit->name + "( " + - generateLenInitializer( mit, litit, structData.second.mutualExclusiveLens ) + " )"; - sizeChecks += generateSizeCheck( - litit->second, stripPrefix( structData.first, "Vk" ), prefix, structData.second.mutualExclusiveLens ); - } - else if ( std::find( memberIts.begin(), memberIts.end(), mit ) != memberIts.end() ) - { - assert( beginsWith( mit->name, "p" ) ); - std::string argumentName = startLowerCase( stripPrefix( mit->name, "p" ) ) + "_"; - - assert( endsWith( mit->type.postfix, "*" ) ); - std::string argumentType = trimEnd( stripPostfix( mit->type.compose(), "*" ) ); - if ( ( mit->type.type == "void" ) && ( argumentType.find( '*' ) == std::string::npos ) ) - { - // the argument after stripping one pointer is just void - assert( templateHeader.empty() ); - templateHeader = prefix + "template \n"; - - size_t pos = argumentType.find( "void" ); - assert( pos != std::string::npos ); - argumentType.replace( pos, strlen( "void" ), "T" ); - } - - arguments += listedArgument ? ", " : ""; - arguments += "VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<" + argumentType + "> const & " + argumentName; - if ( arrayListed ) - { - arguments += " = {}"; - } - listedArgument = true; - arrayListed = true; - - initializers += ( firstArgument ? ": " : ", " ) + mit->name + "( " + argumentName + ".data() )"; - } - else - { - listedArgument = appendStructConstructorArgument( arguments, listedArgument, *mit, arrayListed ); - initializers += ( firstArgument ? ": " : ", " ) + mit->name + "( " + mit->name + "_ )"; - } - firstArgument = false; - } - } - static const std::string constructorTemplate = R"( -#if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) -${templateHeader}${prefix}${structName}( ${arguments} ) -${prefix}${initializers} -${prefix}{${sizeChecks}} -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -)"; - - str += replaceWithMap( constructorTemplate, - { { "arguments", arguments }, - { "initializers", initializers }, - { "prefix", prefix }, - { "sizeChecks", sizeChecks }, - { "structName", stripPrefix( structData.first, "Vk" ) }, - { "templateHeader", templateHeader } } ); - } -} - -bool VulkanHppGenerator::appendStructConstructorArgument( std::string & str, - bool listedArgument, - MemberData const & memberData, - bool withDefault ) const -{ - // skip members 'pNext' and members with a single value, as they are never explicitly set - if ( ( memberData.name != "pNext" ) && ( memberData.values.size() != 1 ) ) - { - str += ( listedArgument ? ( ", " ) : "" ); - if ( memberData.arraySizes.empty() ) - { - str += memberData.type.compose() + " "; - } - else - { - str += generateStandardArray( memberData.type.compose(), memberData.arraySizes ) + " const & "; - } - str += memberData.name + "_"; - - if ( withDefault ) - { - str += " = "; - auto enumIt = m_enums.find( memberData.type.type ); - if ( enumIt != m_enums.end() && memberData.type.postfix.empty() ) - { - str += generateEnumInitializer( - memberData.type, memberData.arraySizes, enumIt->second.values, enumIt->second.isBitmask ); - } - else - { - assert( memberData.values.empty() ); - // all the rest can be initialized with just {} - str += "{}"; - } - } - - listedArgument = true; - } - return listedArgument; -} - -std::string VulkanHppGenerator::appendStructMembers( std::string & str, - std::pair const & structData, - std::string const & prefix ) const -{ - std::string sTypeValue; - for ( auto const & member : structData.second.members ) - { - str += prefix; - if ( !member.bitCount.empty() && beginsWith( member.type.type, "Vk" ) ) - { - assert( member.type.prefix.empty() && member.type.postfix.empty() ); // never encounterd a different case - str += member.type.type; - } - else if ( member.arraySizes.empty() ) - { - str += member.type.compose(); - } - else - { - assert( member.type.prefix.empty() && member.type.postfix.empty() ); - str += generateStandardArrayWrapper( member.type.compose(), member.arraySizes ); - } - str += " " + member.name; - if ( !member.values.empty() ) - { - // special handling for members with legal value: arbitrarily use the first one as the default - str += " = "; - if ( member.type.type == "uint32_t" ) - { - str += member.values.front(); - } - else - { - auto enumIt = m_enums.find( member.type.type ); - assert( enumIt != m_enums.end() ); - std::string enumValue = member.values.front(); - auto valueIt = std::find_if( enumIt->second.values.begin(), - enumIt->second.values.end(), - [&enumValue]( EnumValueData const & evd ) { return enumValue == evd.name; } ); - assert( valueIt != enumIt->second.values.end() ); - std::string valueName = generateEnumValueName( enumIt->first, valueIt->name, enumIt->second.isBitmask, m_tags ); - str += stripPrefix( member.type.type, "Vk" ) + "::" + valueName; - if ( member.name == "sType" ) - { - sTypeValue = valueName; - } - } - } - else - { - // as we don't have any meaningful default initialization values, everything can be initialized by just '{}' ! - assert( member.arraySizes.empty() || member.bitCount.empty() ); - if ( !member.bitCount.empty() ) - { - str += " : " + member.bitCount; // except for bitfield members, where no default member initializatin is - // supported (up to C++20) - } - else - { - str += " = "; - auto enumIt = m_enums.find( member.type.type ); - if ( member.arraySizes.empty() && ( enumIt != m_enums.end() ) && member.type.postfix.empty() ) - { - str += - generateEnumInitializer( member.type, member.arraySizes, enumIt->second.values, enumIt->second.isBitmask ); - } - else - { - str += "{}"; - } - } - } - str += ";\n"; - } - return sTypeValue; -} - -void VulkanHppGenerator::appendStructSetter( std::string & str, - std::string const & structureName, - std::vector const & memberData, - size_t index ) const -{ - MemberData const & member = memberData[index]; - if ( member.type.type != "VkStructureType" ) // filter out StructureType, which is supposed to be immutable ! - { - static const std::string templateString = R"( - ${structureName} & set${MemberName}( ${memberType} ${reference}${memberName}_ ) VULKAN_HPP_NOEXCEPT - { - ${assignment}; - return *this; - } -)"; - - std::string memberType = member.arraySizes.empty() - ? member.type.compose() - : generateStandardArray( member.type.compose(), member.arraySizes ); - std::string assignment; - if ( !member.bitCount.empty() && beginsWith( member.type.type, "Vk" ) ) - { - assignment = member.name + " = " + "*reinterpret_cast<" + member.type.type + "*>(&" + member.name + "_)"; - } - else - { - assignment = member.name + " = " + member.name + "_"; - } - - str += replaceWithMap( - templateString, - { { "assignment", assignment }, - { "memberName", member.name }, - { "MemberName", startUpperCase( member.name ) }, - { "memberType", memberType }, - { "reference", - ( member.type.postfix.empty() && ( m_structures.find( member.type.type ) != m_structures.end() ) ) - ? "const & " - : "" }, - { "structureName", structureName } } ); - - if ( !member.len.empty() && ( ignoreLens.find( member.len[0] ) == ignoreLens.end() ) ) - { - assert( member.name.front() == 'p' ); - std::string arrayName = startLowerCase( stripPrefix( member.name, "p" ) ); - - std::string lenName, lenValue; - if ( member.len[0] == R"(latexmath:[\textrm{codeSize} \over 4])" ) - { - lenName = "codeSize"; - lenValue = arrayName + "_.size() * 4"; - } - else - { - lenName = member.len[0]; - lenValue = arrayName + "_.size()"; - } - - assert( memberType.back() == '*' ); - memberType = trimEnd( stripPostfix( memberType, "*" ) ); - - std::string templateHeader; - if ( ( member.type.type == "void" ) && ( memberType.find( '*' ) == std::string::npos ) ) - { - assert( templateHeader.empty() ); - templateHeader = "template \n "; - - size_t pos = memberType.find( "void" ); - assert( pos != std::string::npos ); - memberType.replace( pos, strlen( "void" ), "T" ); - - lenValue += " * sizeof(T)"; - } - - auto lenMember = std::find_if( - memberData.begin(), memberData.end(), [&lenName]( MemberData const & md ) { return md.name == lenName; } ); - assert( lenMember != memberData.end() && lenMember->type.prefix.empty() && lenMember->type.postfix.empty() ); - if ( lenMember->type.type != "size_t" ) - { - lenValue = "static_cast<" + lenMember->type.type + ">( " + lenValue + " )"; - } - - static const std::string setArrayTemplate = R"( -#if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) - ${templateHeader}${structureName} & set${ArrayName}( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<${memberType}> const & ${arrayName}_ ) VULKAN_HPP_NOEXCEPT - { - ${lenName} = ${lenValue}; - ${memberName} = ${arrayName}_.data(); - return *this; - } -#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ -)"; - - str += replaceWithMap( setArrayTemplate, - { { "arrayName", arrayName }, - { "ArrayName", startUpperCase( arrayName ) }, - { "lenName", lenName }, - { "lenValue", lenValue }, - { "memberName", member.name }, - { "memberType", memberType }, - { "structureName", structureName }, - { "templateHeader", templateHeader } } ); - } - } -} - -void VulkanHppGenerator::appendStructSubConstructor( std::string & str, - std::pair const & structData, - std::string const & prefix ) const -{ - if ( !structData.second.subStruct.empty() ) - { - auto const & subStruct = m_structures.find( structData.second.subStruct ); - assert( subStruct != m_structures.end() ); - - std::string subStructArgumentName = startLowerCase( stripPrefix( subStruct->first, "Vk" ) ); - std::string ctorOpening = prefix + "explicit " + stripPrefix( structData.first, "Vk" ) + "( "; - std::string indentation = std::string( ctorOpening.size(), ' ' ); - - std::string subCopies; - bool firstArgument = true; - for ( size_t i = 0; i < subStruct->second.members.size(); i++ ) - { - assert( structData.second.members[i].arraySizes.empty() ); - subCopies += prefix + " " + ( firstArgument ? ":" : "," ) + " " + structData.second.members[i].name + "( " + - subStructArgumentName + "." + subStruct->second.members[i].name + " )\n"; - firstArgument = false; - } - - std::string subArguments; - bool listedArgument = true; - for ( size_t i = subStruct->second.members.size(); i < structData.second.members.size(); i++ ) - { - listedArgument = - appendStructConstructorArgument( subArguments, listedArgument, structData.second.members[i], true ); - - assert( structData.second.members[i].arraySizes.empty() ); - subCopies += - prefix + " , " + structData.second.members[i].name + "( " + structData.second.members[i].name + "_ )\n"; - } - - str += - "\n" - " explicit " + - stripPrefix( structData.first, "Vk" ) + "( " + stripPrefix( subStruct->first, "Vk" ) + " const & " + - subStructArgumentName + subArguments + " )\n" + subCopies + " {}\n"; - } -} - -void VulkanHppGenerator::appendStructure( std::string & str, - std::pair const & structure ) const -{ - std::string enter, leave; - std::tie( enter, leave ) = generateProtection( structure.first, !structure.second.aliases.empty() ); - - str += "\n" + enter; - - std::string constructorAndSetters; - constructorAndSetters += "#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )"; - appendStructConstructors( constructorAndSetters, structure, " " ); - appendStructSubConstructor( constructorAndSetters, structure, " " ); - constructorAndSetters += "#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/\n"; - appendStructAssignmentOperators( constructorAndSetters, structure, " " ); - if ( !structure.second.returnedOnly ) - { - // only structs that are not returnedOnly get setters! - constructorAndSetters += "\n#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )"; - for ( size_t i = 0; i < structure.second.members.size(); i++ ) - { - appendStructSetter( constructorAndSetters, stripPrefix( structure.first, "Vk" ), structure.second.members, i ); - } - constructorAndSetters += "#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/\n"; - } - - // operator==() and operator!=() - // only structs without a union as a member can have a meaningfull == and != operation; we filter them out - std::string compareOperators; - if ( !containsUnion( structure.first ) ) - { - appendStructCompareOperators( compareOperators, structure ); - } - - // the member variables - std::string members = "\n public:\n"; - std::string sTypeValue = appendStructMembers( members, structure, " " ); - - static const std::string structureTemplate = R"( struct ${structureName} - { -${allowDuplicate} -${structureType} -${constructorAndSetters} - - operator ${vkName} const &() const VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast( this ); - } - - operator ${vkName} &() VULKAN_HPP_NOEXCEPT - { - return *reinterpret_cast<${vkName}*>( this ); - } - -${compareOperators} - -${members} - }; - static_assert( sizeof( ${structureName} ) == sizeof( ${vkName} ), "struct and wrapper have different size!" ); - static_assert( std::is_standard_layout<${structureName}>::value, "struct wrapper is not a standard layout!" ); -)"; - - std::string structureName = stripPrefix( structure.first, "Vk" ); - std::string allowDuplicate, structureType; - if ( !sTypeValue.empty() ) - { - allowDuplicate = std::string( " static const bool allowDuplicate = " ) + - ( structure.second.allowDuplicate ? "true;" : "false;" ); - structureType = - " static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::" + sTypeValue + ";\n"; - } - str += replaceWithMap( structureTemplate, - { { "allowDuplicate", allowDuplicate }, - { "structureName", structureName }, - { "structureType", structureType }, - { "constructorAndSetters", constructorAndSetters }, - { "vkName", structure.first }, - { "compareOperators", compareOperators }, - { "members", members } } ); - - if ( !sTypeValue.empty() ) - { - std::string cppTypeTemplate = R"( - template <> - struct CppType - { - using Type = ${structureName}; - }; -)"; - str += replaceWithMap( cppTypeTemplate, { { "sTypeValue", sTypeValue }, { "structureName", structureName } } ); - } - - for ( std::string const & alias : structure.second.aliases ) - { - str += " using " + stripPrefix( alias, "Vk" ) + " = " + stripPrefix( structure.first, "Vk" ) + ";\n"; - } - - str += leave; -} - -void VulkanHppGenerator::appendType( std::string & str, - std::string const & typeName, - std::set & listedTypes ) const -{ - if ( listedTypes.find( typeName ) == listedTypes.end() ) - { - auto typeIt = m_types.find( typeName ); - assert( typeIt != m_types.end() ); - switch ( typeIt->second.category ) - { - case TypeCategory::Handle: - { - auto handleIt = m_handles.find( typeName ); - if ( handleIt == m_handles.end() ) - { - handleIt = std::find_if( m_handles.begin(), - m_handles.end(), - [&typeName]( std::pair const & hd ) - { return hd.second.alias == typeName; } ); - assert( handleIt != m_handles.end() ); - if ( listedTypes.find( handleIt->first ) == listedTypes.end() ) - { - str += generateHandle( *handleIt, listedTypes ); - } - } - else - { - str += generateHandle( *handleIt, listedTypes ); - } - } - break; - case TypeCategory::Struct: - case TypeCategory::Union: - { - auto structIt = m_structures.find( typeName ); - if ( structIt == m_structures.end() ) - { - structIt = std::find_if( m_structures.begin(), - m_structures.end(), - [&typeName]( std::pair const & sd ) - { return sd.second.aliases.find( typeName ) != sd.second.aliases.end(); } ); - assert( structIt != m_structures.end() ); - if ( listedTypes.find( structIt->first ) == listedTypes.end() ) - { - appendStruct( str, *structIt, listedTypes ); - } - } - else - { - appendStruct( str, *structIt, listedTypes ); - } - } - break; - default: listedTypes.insert( typeIt->first ); break; - } - } -} - -void VulkanHppGenerator::appendUnion( std::string & str, std::pair const & structure ) const -{ - std::string enter, leave; - std::tie( enter, leave ) = generateProtection( structure.first, !structure.second.aliases.empty() ); - - str += "\n" + enter; - std::string unionName = stripPrefix( structure.first, "Vk" ); - str += " union " + unionName + - "\n" - " {\n" - "#if !defined( VULKAN_HPP_NO_UNION_CONSTRUCTORS )\n" - " " + - unionName + "( VULKAN_HPP_NAMESPACE::" + unionName + - " const & rhs ) VULKAN_HPP_NOEXCEPT\n" - " {\n" - " memcpy( static_cast( this ), &rhs, sizeof( VULKAN_HPP_NAMESPACE::" + - unionName + - " ) );\n" - " }\n"; - - bool firstMember = true; - for ( auto const & member : structure.second.members ) - { - // VkBool32 is aliased to uint32_t. Don't create a VkBool32 constructor if the union also contains a uint32_t - // constructor. - auto compareBool32Alias = []( MemberData const & member ) - { - return member.type.type == std::string( "uint32_t" ); - }; - if ( member.type.type == "VkBool32" ) - { - if ( std::find_if( structure.second.members.begin(), structure.second.members.end(), compareBool32Alias ) != - structure.second.members.end() ) - { - continue; - } - } - - static const std::string constructorTemplate = R"( - ${unionName}( ${memberType} ${memberName}_${defaultAssignment} ) - : ${memberName}( ${memberName}_ ) - {} -)"; - - std::string memberType = ( member.arraySizes.empty() ) - ? member.type.compose() - : ( "const " + generateStandardArray( member.type.compose(), member.arraySizes ) + "&" ); - str += replaceWithMap( constructorTemplate, - { { "defaultAssignment", firstMember ? " = {}" : "" }, - { "memberName", member.name }, - { "memberType", memberType }, - { "unionName", stripPrefix( structure.first, "Vk" ) } } ); - firstMember = false; - } - str += "#endif /*VULKAN_HPP_NO_UNION_CONSTRUCTORS*/\n"; - - str += "\n#if !defined( VULKAN_HPP_NO_UNION_SETTERS )"; - // one setter per union element - for ( size_t i = 0; i < structure.second.members.size(); i++ ) - { - appendStructSetter( str, stripPrefix( structure.first, "Vk" ), structure.second.members, i ); - } - str += "#endif /*VULKAN_HPP_NO_UNION_SETTERS*/\n"; - - // assignment operator - static const std::string operatorsTemplate = R"( - VULKAN_HPP_NAMESPACE::${unionName} & operator=( VULKAN_HPP_NAMESPACE::${unionName} const & rhs ) VULKAN_HPP_NOEXCEPT - { - memcpy( static_cast( this ), &rhs, sizeof( VULKAN_HPP_NAMESPACE::${unionName} ) ); - return *this; - } - - operator Vk${unionName} const &() const - { - return *reinterpret_cast( this ); - } - - operator Vk${unionName} &() - { - return *reinterpret_cast( this ); - } - -)"; - str += replaceWithMap( operatorsTemplate, { { "unionName", stripPrefix( structure.first, "Vk" ) } } ); - - // the union member variables - // if there's at least one Vk... type in this union, check for unrestricted unions support - bool needsUnrestrictedUnions = ( std::find_if( structure.second.members.begin(), - structure.second.members.end(), - []( MemberData const & member ) { - return beginsWith( member.type.type, "Vk" ); - } ) != structure.second.members.end() ); - if ( needsUnrestrictedUnions ) - { - str += "#ifdef VULKAN_HPP_HAS_UNRESTRICTED_UNIONS\n"; - } - for ( auto const & member : structure.second.members ) - { - str += " " + - ( member.arraySizes.empty() ? member.type.compose() - : generateStandardArrayWrapper( member.type.compose(), member.arraySizes ) ) + - " " + member.name + ";\n"; - } - if ( needsUnrestrictedUnions ) - { - str += "#else\n"; - for ( auto const & member : structure.second.members ) - { - str += " " + member.type.prefix + ( member.type.prefix.empty() ? "" : " " ) + member.type.type + - member.type.postfix + " " + member.name + generateCArraySizes( member.arraySizes ) + ";\n"; - } - str += "#endif /*VULKAN_HPP_HAS_UNRESTRICTED_UNIONS*/\n"; - } - str += " };\n" + leave; -} - -void VulkanHppGenerator::appendUniqueTypes( std::string & str, - std::string const & parentType, - std::set const & childrenTypes ) const -{ - str += - "\n" - "#ifndef VULKAN_HPP_NO_SMART_HANDLE\n"; - if ( !parentType.empty() ) - { - str += " class " + stripPrefix( parentType, "Vk" ) + ";\n"; - } - - for ( auto const & childType : childrenTypes ) - { - auto handleIt = m_handles.find( childType ); - assert( handleIt != m_handles.end() ); - - std::string type = stripPrefix( childType, "Vk" ); - std::string deleterType = handleIt->second.deletePool.empty() ? "Object" : "Pool"; - std::string deleterAction = ( handleIt->second.deleteCommand.substr( 2, 4 ) == "Free" ) ? "Free" : "Destroy"; - std::string deleterParent = parentType.empty() ? "NoParent" : stripPrefix( parentType, "Vk" ); - std::string deleterPool = - handleIt->second.deletePool.empty() ? "" : ", " + stripPrefix( handleIt->second.deletePool, "Vk" ); - - std::string enter, leave; - std::tie( enter, leave ) = generateProtection( handleIt->first, !handleIt->second.alias.empty() ); - - str += enter + " template class UniqueHandleTraits<" + type + - ", Dispatch> { public: using deleter = " + deleterType + deleterAction + "<" + deleterParent + deleterPool + - ", Dispatch>; };\n" - " using Unique" + - type + " = UniqueHandle<" + type + ", VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>;\n"; - - if ( !handleIt->second.alias.empty() ) - { - str += " using Unique" + stripPrefix( handleIt->second.alias, "Vk" ) + " = UniqueHandle<" + type + - ", VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>;\n"; - } - str += leave; - } - str += "#endif /*VULKAN_HPP_NO_SMART_HANDLE*/\n"; -} - void VulkanHppGenerator::EnumData::addEnumAlias( int line, std::string const & name, std::string const & aliasName ) { auto aliasIt = aliases.find( name ); @@ -9722,6 +7279,179 @@ std::string VulkanHppGenerator::findBaseName( std::string return baseName; } +std::string VulkanHppGenerator::generateArgumentListEnhanced( std::vector const & params, + std::set const & skippedParams, + std::set const & singularParams, + bool definition, + bool withAllocators, + bool structureChain, + bool withDispatcher ) const +{ + size_t defaultStartIndex = withAllocators ? ~0 : determineDefaultStartIndex( params, skippedParams ); + + std::string argumentList; + bool encounteredArgument = false; + for ( size_t i = 0; i < params.size(); ++i ) + { + if ( skippedParams.find( i ) == skippedParams.end() ) + { + if ( encounteredArgument ) + { + argumentList += ", "; + } + bool hasDefaultAssignment = false; + if ( singularParams.find( i ) != singularParams.end() ) + { + assert( !params[i].optional ); + assert( params[i].type.isConstPointer() && !params[i].len.empty() && + !isLenByStructMember( params[i].len, params ) && beginsWith( params[i].type.type, "Vk" ) ); + assert( !isHandleType( params[i].type.type ) ); + argumentList += "const VULKAN_HPP_NAMESPACE::" + stripPrefix( params[i].type.type, "Vk" ) + " & " + + stripPluralS( startLowerCase( stripPrefix( params[i].name, "p" ) ) ); + } + else if ( params[i].type.isConstPointer() ) + { + std::string name = startLowerCase( stripPrefix( params[i].name, "p" ) ); + if ( params[i].len.empty() ) + { + assert( withDispatcher || !isHandleType( params[i].type.type ) ); + assert( !params[i].type.prefix.empty() && ( params[i].type.postfix == "*" ) ); + assert( params[i].arraySizes.empty() ); + if ( params[i].type.type == "void" ) + { + assert( !params[i].optional ); + argumentList += params[i].type.compose() + " " + params[i].name; + } + else if ( params[i].optional ) + { + argumentList += + "Optional " + name + + ( ( definition || withAllocators ) ? "" : " VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT" ); + hasDefaultAssignment = true; + } + else + { + argumentList += params[i].type.prefix + " " + stripPrefix( params[i].type.type, "Vk" ) + " & " + name; + } + } + else + { + // a const-pointer with a non-empty len is either null-terminated (aka a string) or represented by an + // ArrayProxy + assert( params[i].arraySizes.empty() ); + if ( params[i].len == "null-terminated" ) + { + assert( params[i].type.type == "char" ); + if ( params[i].optional ) + { + argumentList += + "Optional " + name + + ( ( definition || withAllocators ) ? "" : " VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT" ); + hasDefaultAssignment = true; + } + else + { + argumentList += "const std::string & " + name; + } + } + else + { + // an ArrayProxy also covers no data, so any optiona flag can be ignored here + assert( endsWith( params[i].type.postfix, "*" ) ); + std::string type = stripPostfix( params[i].type.compose(), "*" ); + size_t pos = type.find( "void" ); + if ( pos != std::string::npos ) + { + type.replace( pos, 4, "T" ); + } + argumentList += "ArrayProxy<" + type + "> const & " + name; + if ( params[i].optional && !definition ) + { + argumentList += " VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT"; + hasDefaultAssignment = true; + } + } + } + } + else if ( params[i].type.isNonConstPointer() ) + { + assert( withDispatcher || !isHandleType( params[i].type.type ) ); + assert( params[i].len.empty() && !params[i].optional ); + if ( !params[i].type.prefix.empty() ) + { + argumentList += params[i].type.prefix + " "; + } + argumentList += params[i].type.type + " & " + params[i].name; + } + else + { + assert( params[i].type.isValue() ); + argumentList += params[i].type.compose() + " " + params[i].name + generateCArraySizes( params[i].arraySizes ); + } + argumentList += std::string( !definition && ( defaultStartIndex <= i ) && !hasDefaultAssignment + ? " VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT" + : "" ); + encounteredArgument = true; + } + } + if ( withAllocators ) + { + if ( structureChain ) + { + if ( encounteredArgument ) + { + argumentList += ", "; + } + argumentList += "StructureChainAllocator & structureChainAllocator"; + encounteredArgument = true; + } + else + { + for ( auto sp : skippedParams ) + { + if ( !params[sp].len.empty() ) + { + if ( encounteredArgument ) + { + argumentList += ", "; + } + std::string type = ( params[sp].type.type == "void" ) + ? "Uint8_t" + : startUpperCase( stripPrefix( params[sp].type.type, "Vk" ) ); + argumentList += type + "Allocator & " + startLowerCase( type ) + "Allocator"; + encounteredArgument = true; + } + } + } + } + if ( withDispatcher ) + { + if ( encounteredArgument ) + { + argumentList += ", "; + } + argumentList += + std::string( "Dispatch const & d" ) + ( definition ? "" : " VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT" ); + } + return argumentList; +} + +std::string VulkanHppGenerator::generateArgumentListStandard( std::vector const & params, + std::set const & skippedParams ) const +{ + std::string argumentList; + for ( size_t i = 0; i < params.size(); ++i ) + { + if ( skippedParams.find( i ) == skippedParams.end() ) + { + argumentList += + params[i].type.compose() + " " + params[i].name + generateCArraySizes( params[i].arraySizes ) + ", "; + } + } + argumentList += "Dispatch const & d "; + return argumentList; +} + std::string VulkanHppGenerator::generateBitmask( std::map::const_iterator bitmaskIt ) const { auto bitmaskBits = m_enums.find( bitmaskIt->second.requirements ); @@ -9873,7 +7603,293 @@ std::string VulkanHppGenerator::generateBitmasks( std::vector const } } } - return addTitleAndProtection( str, title ); + return addTitleAndProtection( title, str ); +} + +std::string VulkanHppGenerator::generateCallArgumentEnhanced( std::vector const & params, + size_t paramIndex, + bool nonConstPointerAsNullptr, + std::set const & singularParams, + std::vector const & returnParamIndices, + bool raiiHandleMemberFunction ) const +{ + std::string argument; + ParamData const & param = params[paramIndex]; + if ( param.type.isConstPointer() || ( specialPointerTypes.find( param.type.type ) != specialPointerTypes.end() ) ) + { + std::string name = startLowerCase( stripPrefix( param.name, "p" ) ); + if ( isHandleType( param.type.type ) && param.type.isValue() ) + { + assert( !param.optional ); + // if at all, this is the first argument, and it's the implicitly provided member handle + assert( paramIndex == 0 ); + assert( param.arraySizes.empty() && param.len.empty() ); + argument += "m_" + startLowerCase( stripPrefix( param.type.type, "Vk" ) ); + } + else if ( param.len.empty() ) + { + // this const-pointer parameter has no length, that is it's a const-pointer to a single value + if ( param.type.type == "void" ) + { + assert( !param.optional ); + // use the original name here, as void-pointer are not mapped to some reference + argument = param.name; + } + else if ( param.optional ) + { + argument = "static_cast<" + param.type.compose() + ">( " + name + " )"; + } + else + { + argument = "&" + name; + } + if ( beginsWith( param.type.type, "Vk" ) ) + { + argument = "reinterpret_cast( " + argument + " )"; + } + } + else if ( param.len == "null-terminated" ) + { + // this const-pointer parameter is "null-terminated", that is it's a string + assert( ( param.type.type == "char" ) && param.arraySizes.empty() ); + if ( param.optional ) + { + argument = name + " ? " + name + "->c_str() : nullptr"; + } + else + { + argument = name + ".c_str()"; + } + } + else + { + // this const-pointer parameter has some explicit length + if ( singularParams.find( paramIndex ) != singularParams.end() ) + { + assert( !param.optional ); + argument = "&" + stripPluralS( name ); + } + else + { + // this const-parameter is represented by some array, where data() also works with no data (optional) + argument = name + ".data()"; + } + if ( beginsWith( param.type.type, "Vk" ) || ( param.type.type == "void" ) ) + { + argument = "reinterpret_cast<" + param.type.prefix + " " + param.type.type + " " + param.type.postfix + ">( " + + argument + " )"; + } + } + } + else if ( param.type.isNonConstPointer() && + ( specialPointerTypes.find( param.type.type ) == specialPointerTypes.end() ) ) + { + // parameter is a non-const pointer (and none of the special pointer types, that are considered const-pointers, + // even though they are not!) + std::string name = startLowerCase( stripPrefix( param.name, "p" ) ); + if ( param.len.empty() ) + { + assert( param.arraySizes.empty() ); + if ( beginsWith( param.type.type, "Vk" ) ) + { + argument = "reinterpret_cast<" + param.type.type + " *>( &" + name + " )"; + } + else + { + assert( !param.optional ); + argument = "&" + name; + } + } + else + { + // the non-const pointer has a len -> it will be represented by some array + assert( param.arraySizes.empty() ); + if ( nonConstPointerAsNullptr ) + { + argument = "nullptr"; + } + else if ( beginsWith( param.type.type, "Vk" ) || ( param.type.type == "void" ) ) + { + if ( singularParams.find( paramIndex ) != singularParams.end() ) + { + argument = "&" + stripPluralS( name ); + } + else + { + // get the data of the array, which also covers no data -> no need to look at param.optional + argument = name + ".data()"; + } + if ( !raiiHandleMemberFunction || !isHandleType( param.type.type ) ) + { + argument = "reinterpret_cast<" + param.type.type + " *>( " + argument + " )"; + } + } + else + { + assert( !param.optional ); + argument = name + ".data()"; + } + } + } + else + { + assert( param.len.empty() ); + if ( beginsWith( param.type.type, "Vk" ) ) + { + if ( param.arraySizes.empty() ) + { + auto pointerIt = std::find_if( + params.begin(), params.end(), [¶m]( ParamData const & pd ) { return pd.len == param.name; } ); + if ( pointerIt != params.end() ) + { + assert( !param.optional ); + argument = startLowerCase( stripPrefix( pointerIt->name, "p" ) ) + ".size()"; + if ( pointerIt->type.type == "void" ) + { + argument += " * sizeof( T )"; + } + } + else + { + argument = "static_cast<" + param.type.type + ">( " + param.name + " )"; + } + } + else + { + assert( !param.optional ); + assert( param.arraySizes.size() == 1 ); + assert( param.type.prefix == "const" ); + argument = "reinterpret_cast( " + param.name + " )"; + } + } + else + { + if ( singularParams.find( paramIndex ) != singularParams.end() ) + { + assert( !param.optional ); + assert( param.arraySizes.empty() ); + assert( ( param.type.type == "size_t" ) || ( param.type.type == "uint32_t" ) ); + assert( returnParamIndices.size() == 1 ); + if ( params[returnParamIndices[0]].type.type == "void" ) + { + argument = "sizeof( T )"; + } + else + { + argument = "1"; + } + } + else + { + auto pointerIt = std::find_if( + params.begin(), params.end(), [¶m]( ParamData const & pd ) { return pd.len == param.name; } ); + if ( pointerIt != params.end() ) + { + // this parameter is the len of some other -> replace it with that parameter's size + assert( param.arraySizes.empty() ); + assert( ( param.type.type == "size_t" ) || ( param.type.type == "uint32_t" ) ); + argument = startLowerCase( stripPrefix( pointerIt->name, "p" ) ) + ".size()"; + if ( pointerIt->type.type == "void" ) + { + argument += " * sizeof( T )"; + } + } + else + { + assert( !param.optional ); + assert( param.arraySizes.size() <= 1 ); + argument = param.name; + } + } + } + } + assert( !argument.empty() ); + return argument; +} + +std::string VulkanHppGenerator::generateCallArgumentsEnhanced( std::vector const & params, + size_t initialSkipCount, + bool nonConstPointerAsNullptr, + std::set const & singularParams, + std::vector const & returnParamIndices, + bool raiiHandleMemberFunction ) const +{ + assert( initialSkipCount <= params.size() ); + std::string arguments; + bool encounteredArgument = false; + for ( size_t i = 0; i < initialSkipCount; ++i ) + { + if ( encounteredArgument ) + { + arguments += ", "; + } + assert( isHandleType( params[i].type.type ) && params[i].type.isValue() ); + assert( params[i].arraySizes.empty() && params[i].len.empty() ); + std::string argument = "m_" + startLowerCase( stripPrefix( params[i].type.type, "Vk" ) ); + if ( raiiHandleMemberFunction ) + { + argument = "static_cast<" + params[i].type.type + ">( " + argument + " )"; + } + arguments += argument; + encounteredArgument = true; + } + for ( size_t i = initialSkipCount; i < params.size(); ++i ) + { + if ( encounteredArgument ) + { + arguments += ", "; + } + arguments += generateCallArgumentEnhanced( + params, i, nonConstPointerAsNullptr, singularParams, returnParamIndices, raiiHandleMemberFunction ); + encounteredArgument = true; + } + return arguments; +} + +std::string VulkanHppGenerator::generateCallArgumentsStandard( std::string const & handle, + std::vector const & params ) const +{ + std::string arguments; + bool encounteredArgument = false; + for ( auto const & param : params ) + { + if ( encounteredArgument ) + { + arguments += ", "; + } + if ( ( param.type.type == handle ) && param.type.isValue() ) + { + assert( param.arraySizes.empty() && param.len.empty() ); + arguments += "m_" + startLowerCase( stripPrefix( param.type.type, "Vk" ) ); + } + else + { + std::string argument = param.name; + if ( beginsWith( param.type.type, "Vk" ) ) + { + if ( !param.arraySizes.empty() ) + { + assert( param.arraySizes.size() == 1 ); + assert( param.type.isValue() ); + assert( param.type.prefix == "const" ); + argument = "reinterpret_cast( " + argument + " )"; + } + else if ( param.type.isValue() ) + { + argument = "static_cast<" + param.type.type + ">( " + argument + " )"; + } + else + { + assert( !param.type.postfix.empty() ); + argument = "reinterpret_cast<" + ( param.type.prefix.empty() ? "" : param.type.prefix ) + " " + + param.type.type + " " + param.type.postfix + ">( " + argument + " )"; + } + } + arguments += argument; + } + encounteredArgument = true; + } + return arguments; } std::string VulkanHppGenerator::generateCommand( std::string const & name, @@ -9906,6 +7922,65 @@ std::string VulkanHppGenerator::generateCommand( std::string const & name, return str; } +std::string VulkanHppGenerator::generateCommandBoolGetValue( std::string const & name, + CommandData const & commandData, + size_t initialSkipCount, + bool definition, + size_t nonConstPointerIndex ) const +{ + assert( commandData.returnType == "VkBool32" ); + + std::set skippedParams = + determineSkippedParams( commandData.params, initialSkipCount, {}, { nonConstPointerIndex }, false ); + + std::string argumentList = + generateArgumentListEnhanced( commandData.params, skippedParams, {}, definition, false, false, true ); + std::string commandName = generateCommandName( name, commandData.params, initialSkipCount, m_tags ); + std::string returnType = stripPostfix( commandData.params[nonConstPointerIndex].type.compose(), "*" ); + assert( !beginsWith( returnType, "Vk" ) ); + + if ( definition ) + { + std::string const functionTemplate = + R"( template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::pair ${className}${classSeparator}${commandName}( ${argumentList} )${const} + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + std::pair result; + ${returnType} & ${returnValueName} = result.second; + result.first = static_cast( d.${vkCommand}( ${callArguments} ) ); + return result; + })"; + + return replaceWithMap( + functionTemplate, + { { "argumentList", argumentList }, + { "callArguments", + generateCallArgumentsEnhanced( + commandData.params, initialSkipCount, false, {}, { nonConstPointerIndex }, false ) }, + { "className", + initialSkipCount ? stripPrefix( commandData.params[initialSkipCount - 1].type.type, "Vk" ) : "" }, + { "classSeparator", commandData.handle.empty() ? "" : "::" }, + { "const", commandData.handle.empty() ? "" : " const" }, + { "commandName", commandName }, + { "returnValueName", startLowerCase( stripPrefix( commandData.params[nonConstPointerIndex].name, "p" ) ) }, + { "returnType", returnType }, + { "vkCommand", name } } ); + } + else + { + std::string const functionTemplate = + R"( template + VULKAN_HPP_NODISCARD std::pair ${commandName}( ${argumentList} )${const};)"; + + return replaceWithMap( functionTemplate, + { { "argumentList", argumentList }, + { "commandName", commandName }, + { "const", commandData.handle.empty() ? "" : " const" }, + { "returnType", returnType } } ); + } +} + std::string VulkanHppGenerator::generateCommandDefinitions( std::vector const & requireData, std::set & listedCommands, std::string const & title ) const @@ -9915,17 +7990,15 @@ std::string VulkanHppGenerator::generateCommandDefinitions( std::vectorsecond.handle ); } } } - return addTitleAndProtection( str, title ); + return addTitleAndProtection( title, str ); } std::string VulkanHppGenerator::generateCommandDefinitions( std::string const & command, @@ -10055,6 +8128,62 @@ std::string VulkanHppGenerator::generateCommandResult( std::string const & name, } } +std::string VulkanHppGenerator::generateCommandResult( std::string const & name, + CommandData const & commandData, + size_t initialSkipCount, + bool definition, + std::map const & vectorParamIndices ) const +{ + assert( commandData.returnType == "VkResult" ); + + std::set skippedParameters = + determineSkippedParams( commandData.params, initialSkipCount, vectorParamIndices, {}, false ); + + std::string argumentList = + generateArgumentListEnhanced( commandData.params, skippedParameters, {}, definition, false, false, true ); + std::string commandName = generateCommandName( name, commandData.params, initialSkipCount, m_tags ); + std::string nodiscard = generateNoDiscard( 1 < commandData.successCodes.size(), 1 < commandData.errorCodes.size() ); + std::string returnType = ( 1 < commandData.successCodes.size() ) ? "Result" : "typename ResultValueType::type"; + + if ( definition ) + { + std::string const functionTemplate = + R"( template + ${nodiscard}VULKAN_HPP_INLINE ${returnType} ${className}${classSeparator}${commandName}( ${argumentList} ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + Result result = static_cast( d.${vkCommand}( ${callArguments} ) ); + return createResultValue( result, VULKAN_HPP_NAMESPACE_STRING "::${className}${classSeparator}${commandName}"${successCodeList} ); + })"; + + return replaceWithMap( + functionTemplate, + { { "argumentList", argumentList }, + { "callArguments", + generateCallArgumentsEnhanced( commandData.params, initialSkipCount, false, {}, {}, false ) }, + { "className", + initialSkipCount ? stripPrefix( commandData.params[initialSkipCount - 1].type.type, "Vk" ) : "" }, + { "classSeparator", commandData.handle.empty() ? "" : "::" }, + { "commandName", commandName }, + { "nodiscard", nodiscard }, + { "returnType", returnType }, + { "successCodeList", constructSuccessCodeList( commandData.successCodes ) }, + { "vkCommand", name } } ); + } + else + { + std::string const functionTemplate = + R"( template + ${nodiscard}${returnType} ${commandName}( ${argumentList} ) const;)"; + + return replaceWithMap( functionTemplate, + { { "argumentList", argumentList }, + { "commandName", commandName }, + { "nodiscard", nodiscard }, + { "returnType", returnType } } ); + } +} + std::string VulkanHppGenerator::generateCommandResult0Return( std::string const & name, CommandData const & commandData, size_t initialSkipCount, @@ -10243,6 +8372,847 @@ std::string VulkanHppGenerator::generateCommandResult3Return( std::string const return ""; } +std::string VulkanHppGenerator::generateCommandResultEnumerate( std::string const & name, + CommandData const & commandData, + size_t initialSkipCount, + bool definition, + std::pair const & vectorParamIndices, + bool withAllocator ) const +{ + assert( commandData.returnType == "VkResult" ); + assert( ( commandData.successCodes.size() == 2 ) && ( commandData.successCodes[0] == "VK_SUCCESS" ) && + ( commandData.successCodes[1] == "VK_INCOMPLETE" ) ); + + std::set skippedParams = determineSkippedParams( commandData.params, + initialSkipCount, + { vectorParamIndices }, + { vectorParamIndices.second, vectorParamIndices.first }, + false ); + + std::string argumentList = + generateArgumentListEnhanced( commandData.params, skippedParams, {}, definition, withAllocator, false, true ); + std::string commandName = generateCommandName( name, commandData.params, initialSkipCount, m_tags ); + std::string nodiscard = generateNoDiscard( 1 < commandData.successCodes.size(), 1 < commandData.errorCodes.size() ); + std::string vectorElementType = ( commandData.params[vectorParamIndices.first].type.type == "void" ) + ? "uint8_t" + : stripPrefix( commandData.params[vectorParamIndices.first].type.type, "Vk" ); + std::string allocatorType = startUpperCase( vectorElementType ) + "Allocator"; + + if ( definition ) + { + const std::string functionTemplate = + R"( template + ${nodiscard}VULKAN_HPP_INLINE typename ResultValueType>::type ${className}${classSeparator}${commandName}( ${argumentList} )${const} + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + std::vector<${vectorElementType}, ${allocatorType}> ${vectorName}${vectorAllocator}; + ${counterType} ${counterName}; + Result result; + do + { + result = static_cast( d.${vkCommand}( ${firstCallArguments} ) ); + if ( ( result == Result::eSuccess ) && ${counterName} ) + { + ${vectorName}.resize( ${counterName} ); + result = static_cast( d.${vkCommand}( ${secondCallArguments} ) ); + VULKAN_HPP_ASSERT( ${counterName} <= ${vectorName}.size() ); + } + } while ( result == Result::eIncomplete ); + if ( ( result == Result::eSuccess ) && ( ${counterName} < ${vectorName}.size() ) ) + { + ${vectorName}.resize( ${counterName} ); + } + return createResultValue( result, ${vectorName}, VULKAN_HPP_NAMESPACE_STRING"::${className}${classSeparator}${commandName}" ); + })"; + + std::string typenameCheck = withAllocator + ? ( ", typename B, typename std::enable_if::value, int>::type " ) + : ""; + + return replaceWithMap( + functionTemplate, + { { "allocatorType", allocatorType }, + { "argumentList", argumentList }, + { "className", + initialSkipCount ? stripPrefix( commandData.params[initialSkipCount - 1].type.type, "Vk" ) : "" }, + { "classSeparator", commandData.handle.empty() ? "" : "::" }, + { "commandName", commandName }, + { "const", commandData.handle.empty() ? "" : " const" }, + { "counterName", startLowerCase( stripPrefix( commandData.params[vectorParamIndices.second].name, "p" ) ) }, + { "counterType", commandData.params[vectorParamIndices.second].type.type }, + { "firstCallArguments", + generateCallArgumentsEnhanced( commandData.params, initialSkipCount, true, {}, {}, false ) }, + { "nodiscard", nodiscard }, + { "secondCallArguments", + generateCallArgumentsEnhanced( commandData.params, initialSkipCount, false, {}, {}, false ) }, + { "typenameCheck", typenameCheck }, + { "vectorAllocator", withAllocator ? ( "( " + startLowerCase( allocatorType ) + " )" ) : "" }, + { "vectorElementType", vectorElementType }, + { "vectorName", startLowerCase( stripPrefix( commandData.params[vectorParamIndices.first].name, "p" ) ) }, + { "vkCommand", name } } ); + } + else + { + const std::string functionTemplate = + R"( template , typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE${typenameCheck}> + ${nodiscard}typename ResultValueType>::type ${commandName}( ${argumentList} )${const};)"; + + std::string typenameCheck = withAllocator ? ( ", typename B = " + allocatorType + + ", typename std::enable_if::value, int>::type = 0" ) + : ""; + + return replaceWithMap( functionTemplate, + { { "allocatorType", allocatorType }, + { "argumentList", argumentList }, + { "const", commandData.handle.empty() ? "" : " const" }, + { "commandName", commandName }, + { "nodiscard", nodiscard }, + { "typenameCheck", typenameCheck }, + { "vectorElementType", vectorElementType } } ); + } +} + +std::string + VulkanHppGenerator::generateCommandResultEnumerateChained( std::string const & name, + CommandData const & commandData, + size_t initialSkipCount, + bool definition, + std::pair const & vectorParamIndex, + std::vector const & returnParamIndices, + bool withAllocator ) const +{ + assert( commandData.returnType == "VkResult" ); + assert( ( commandData.successCodes.size() == 2 ) && ( commandData.successCodes[0] == "VK_SUCCESS" ) && + ( commandData.successCodes[1] == "VK_INCOMPLETE" ) ); + + std::set skippedParams = + determineSkippedParams( commandData.params, initialSkipCount, { vectorParamIndex }, returnParamIndices, false ); + + std::string argumentList = + generateArgumentListEnhanced( commandData.params, skippedParams, {}, definition, withAllocator, true, true ); + std::string commandName = generateCommandName( name, commandData.params, initialSkipCount, m_tags ); + std::string nodiscard = generateNoDiscard( 1 < commandData.successCodes.size(), 1 < commandData.errorCodes.size() ); + assert( beginsWith( commandData.params[vectorParamIndex.first].type.type, "Vk" ) ); + std::string vectorElementType = + "VULKAN_HPP_NAMESPACE::" + stripPrefix( commandData.params[vectorParamIndex.first].type.type, "Vk" ); + std::string allocatorType = startUpperCase( vectorElementType ) + "Allocator"; + + if ( definition ) + { + const std::string functionTemplate = + R"( template + ${nodiscard}VULKAN_HPP_INLINE typename ResultValueType>::type ${className}${classSeparator}${commandName}( ${argumentList} ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + std::vector returnVector${structureChainAllocator}; + std::vector<${vectorElementType}> ${vectorName}; + ${counterType} ${counterName}; + Result result; + do + { + result = static_cast( d.${vkCommand}( ${firstCallArguments} ) ); + if ( ( result == Result::eSuccess ) && ${counterName} ) + { + returnVector.resize( ${counterName} ); + ${vectorName}.resize( ${counterName} ); + for ( ${counterType} i = 0; i < ${counterName}; i++ ) + { + ${vectorName}[i].pNext = + returnVector[i].template get<${vectorElementType}>().pNext; + } + result = static_cast( d.${vkCommand}( ${secondCallArguments} ) ); + VULKAN_HPP_ASSERT( ${counterName} <= ${vectorName}.size() ); + } + } while ( result == Result::eIncomplete ); + if ( ( result == Result::eSuccess ) && ( ${counterName} < ${vectorName}.size() ) ) + { + returnVector.resize( ${counterName} ); + ${vectorName}.resize( ${counterName} ); + } + for ( ${counterType} i = 0; i < ${counterName}; i++ ) + { + returnVector[i].template get<${vectorElementType}>() = ${vectorName}[i]; + } + return createResultValue( result, returnVector, VULKAN_HPP_NAMESPACE_STRING"::${className}${classSeparator}${commandName}" ); + })"; + + std::string vectorName = startLowerCase( stripPrefix( commandData.params[vectorParamIndex.first].name, "p" ) ); + std::string typenameCheck = + withAllocator + ? ( ", typename B, typename std::enable_if::value, int>::type" ) + : ""; + + return replaceWithMap( + functionTemplate, + { { "argumentList", argumentList }, + { "className", + initialSkipCount ? stripPrefix( commandData.params[initialSkipCount - 1].type.type, "Vk" ) : "" }, + { "classSeparator", commandData.handle.empty() ? "" : "::" }, + { "commandName", commandName }, + { "counterName", startLowerCase( stripPrefix( commandData.params[vectorParamIndex.second].name, "p" ) ) }, + { "counterType", commandData.params[vectorParamIndex.second].type.type }, + { "firstCallArguments", + generateCallArgumentsEnhanced( commandData.params, initialSkipCount, true, {}, returnParamIndices, false ) }, + { "nodiscard", nodiscard }, + { "secondCallArguments", + generateCallArgumentsEnhanced( commandData.params, initialSkipCount, false, {}, returnParamIndices, false ) }, + { "structureChainAllocator", withAllocator ? ( "( structureChainAllocator )" ) : "" }, + { "typenameCheck", typenameCheck }, + { "vectorElementType", vectorElementType }, + { "vectorName", vectorName }, + { "vkCommand", name } } ); + } + else + { + const std::string functionTemplate = + R"( template , typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE${typenameCheck}> + ${nodiscard}typename ResultValueType>::type ${commandName}( ${argumentList} ) const;)"; + + std::string typenameCheck = + withAllocator + ? ( ", typename B = StructureChainAllocator, typename std::enable_if::value, int>::type = 0" ) + : ""; + + return replaceWithMap( functionTemplate, + { { "argumentList", argumentList }, + { "commandName", commandName }, + { "nodiscard", nodiscard }, + { "typenameCheck", typenameCheck } } ); + } +} + +std::string + VulkanHppGenerator::generateCommandResultEnumerateTwoVectors( std::string const & name, + CommandData const & commandData, + size_t initialSkipCount, + bool definition, + std::map const & vectorParamIndices, + std::vector const & returnParamIndices, + bool withAllocators ) const +{ + assert( !commandData.handle.empty() && ( commandData.returnType == "VkResult" ) ); + assert( ( commandData.successCodes.size() == 2 ) && ( commandData.successCodes[0] == "VK_SUCCESS" ) && + ( commandData.successCodes[1] == "VK_INCOMPLETE" ) ); + + auto firstVectorParamIt = vectorParamIndices.begin(); + auto secondVectorParamIt = std::next( firstVectorParamIt ); + + assert( commandData.params[0].type.type == commandData.handle ); + assert( firstVectorParamIt->second == secondVectorParamIt->second ); + + std::set skippedParams = + determineSkippedParams( commandData.params, initialSkipCount, vectorParamIndices, returnParamIndices, false ); + + std::string argumentList = + generateArgumentListEnhanced( commandData.params, skippedParams, {}, definition, withAllocators, false, true ); + std::string commandName = generateCommandName( name, commandData.params, initialSkipCount, m_tags ); + std::string nodiscard = generateNoDiscard( 1 < commandData.successCodes.size(), 1 < commandData.errorCodes.size() ); + std::string templateTypeFirst = stripPrefix( commandData.params[firstVectorParamIt->first].type.type, "Vk" ); + std::string templateTypeSecond = stripPrefix( commandData.params[secondVectorParamIt->first].type.type, "Vk" ); + + if ( definition ) + { + const std::string functionTemplate = + R"( template + ${nodiscard}VULKAN_HPP_INLINE typename ResultValueType, std::vector<${templateTypeSecond}, ${templateTypeSecond}Allocator>>>::type ${className}${classSeparator}${commandName}( ${argumentList} ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + std::pair, std::vector<${templateTypeSecond}, ${templateTypeSecond}Allocator>> data${pairConstructor}; + std::vector<${templateTypeFirst}, ${templateTypeFirst}Allocator> & ${firstVectorName} = data.first; + std::vector<${templateTypeSecond}, ${templateTypeSecond}Allocator> & ${secondVectorName} = data.second; + ${counterType} ${counterName}; + Result result; + do + { + result = static_cast( d.${vkCommand}( ${firstCallArguments} ) ); + if ( ( result == Result::eSuccess ) && counterCount ) + { + ${firstVectorName}.resize( ${counterName} ); + ${secondVectorName}.resize( ${counterName} ); + result = static_cast( d.${vkCommand}( ${secondCallArguments} ) ); + VULKAN_HPP_ASSERT( ${counterName} <= ${firstVectorName}.size() ); + } + } while ( result == Result::eIncomplete ); + if ( ( result == Result::eSuccess ) && ( ${counterName} < ${firstVectorName}.size() ) ) + { + ${firstVectorName}.resize( ${counterName} ); + ${secondVectorName}.resize( ${counterName} ); + } + return createResultValue( result, data, VULKAN_HPP_NAMESPACE_STRING"::${className}${classSeparator}${commandName}" ); + })"; + + std::string pairConstructor = + withAllocators + ? ( "( std::piecewise_construct, std::forward_as_tuple( " + + startLowerCase( stripPrefix( commandData.params[firstVectorParamIt->first].type.type, "Vk" ) ) + + "Allocator ), std::forward_as_tuple( " + + startLowerCase( stripPrefix( commandData.params[secondVectorParamIt->first].type.type, "Vk" ) ) + + "Allocator ) )" ) + : ""; + std::string typenameCheck = + withAllocators ? ( ", typename B1, typename B2, typename std::enable_if::value && std::is_same::value, int>::type " ) + : ""; + + return replaceWithMap( + functionTemplate, + { { "argumentList", argumentList }, + { "className", + initialSkipCount ? stripPrefix( commandData.params[initialSkipCount - 1].type.type, "Vk" ) : "" }, + { "classSeparator", commandData.handle.empty() ? "" : "::" }, + { "commandName", commandName }, + { "counterName", + startLowerCase( stripPrefix( stripPluralS( commandData.params[firstVectorParamIt->second].name ), "p" ) ) }, + { "counterType", commandData.params[firstVectorParamIt->second].type.type }, + { "firstCallArguments", + generateCallArgumentsEnhanced( commandData.params, initialSkipCount, true, {}, returnParamIndices, false ) }, + { "firstVectorName", startLowerCase( stripPrefix( commandData.params[firstVectorParamIt->first].name, "p" ) ) }, + { "nodiscard", nodiscard }, + { "pairConstructor", pairConstructor }, + { "secondCallArguments", + generateCallArgumentsEnhanced( commandData.params, initialSkipCount, false, {}, returnParamIndices, false ) }, + { "secondVectorName", + startLowerCase( stripPrefix( commandData.params[secondVectorParamIt->first].name, "p" ) ) }, + { "templateTypeFirst", templateTypeFirst }, + { "templateTypeSecond", templateTypeSecond }, + { "typenameCheck", typenameCheck }, + { "vkCommand", name } } ); + } + else + { + const std::string functionTemplate = + R"( template , typename ${templateTypeSecond}Allocator = std::allocator<${templateTypeSecond}>, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE${typenameCheck}> + ${nodiscard}typename ResultValueType, std::vector<${templateTypeSecond}, ${templateTypeSecond}Allocator>>>::type ${commandName}( ${argumentList} ) const;)"; + + std::string typenameCheck = + withAllocators + ? ( ", typename B1 = " + templateTypeFirst + "Allocator, typename B2 = " + templateTypeSecond + + "Allocator, typename std::enable_if::value && std::is_same::value, int>::type = 0" ) + : ""; + + return replaceWithMap( functionTemplate, + { { "argumentList", argumentList }, + { "commandName", commandName }, + { "nodiscard", nodiscard }, + { "templateTypeFirst", templateTypeFirst }, + { "templateTypeSecond", templateTypeSecond }, + { "typenameCheck", typenameCheck } } ); + } +} + +std::string VulkanHppGenerator::generateCommandResultEnumerateTwoVectorsDeprecated( + std::string const & name, + CommandData const & commandData, + size_t initialSkipCount, + bool definition, + std::map const & vectorParamIndices, + bool withAllocators ) const +{ + size_t returnParamIndex = determineReturnParamIndex( commandData, vectorParamIndices, true ); + + std::string argumentList = constructFunctionHeaderArgumentsEnhanced( + commandData, returnParamIndex, returnParamIndex, vectorParamIndices, !definition, withAllocators ); + std::string commandName = generateCommandName( name, commandData.params, initialSkipCount, m_tags ); + std::string nodiscard = generateNoDiscard( 1 < commandData.successCodes.size(), 1 < commandData.errorCodes.size() ); + std::string returnType = determineEnhancedReturnType( commandData, returnParamIndex, false ); + std::string templateType = stripPrefix( commandData.params[returnParamIndex].type.type, "Vk" ); + + if ( definition ) + { + const std::string functionTemplate = + R"( template + VULKAN_HPP_DEPRECATED( "This function is deprecated. Use one of the other flavours of it.") + ${nodiscard}VULKAN_HPP_INLINE typename ResultValueType<${returnType}>::type ${className}${classSeparator}${commandName}( ${argumentList} ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + ${functionBody} + })"; + + std::string typeCheck = withAllocators + ? ", typename B, typename std::enable_if::value, int>::type" + : ""; + + return replaceWithMap( + functionTemplate, + { { "argumentList", argumentList }, + { "className", + initialSkipCount ? stripPrefix( commandData.params[initialSkipCount - 1].type.type, "Vk" ) : "" }, + { "classSeparator", commandData.handle.empty() ? "" : "::" }, + { "commandName", commandName }, + { "functionBody", + constructFunctionBodyEnhanced( " ", + name, + commandData, + initialSkipCount, + returnParamIndex, + returnParamIndex, + vectorParamIndices, + true, + returnType, + withAllocators ) }, + { "nodiscard", nodiscard }, + { "returnType", returnType }, + { "typeCheck", typeCheck } } ); + } + else + { + const std::string functionTemplate = + R"( template , typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE${typeCheck}> + ${nodiscard}typename ResultValueType<${returnType}>::type ${commandName}( ${argumentList} ) const;)"; + + std::string typeCheck = + withAllocators ? ", typename B = Allocator, typename std::enable_if::value, int>::type = 0" + : ""; + + return replaceWithMap( functionTemplate, + { { "argumentList", argumentList }, + { "commandName", commandName }, + { "nodiscard", nodiscard }, + { "returnType", returnType }, + { "templateType", templateType }, + { "typeCheck", typeCheck } } ); + } +} + +std::string VulkanHppGenerator::generateCommandResultGetChain( std::string const & name, + CommandData const & commandData, + size_t initialSkipCount, + bool definition, + size_t nonConstPointerIndex ) const +{ + assert( !commandData.handle.empty() && ( commandData.returnType == "VkResult" ) && !commandData.errorCodes.empty() ); + + std::set skippedParams = + determineSkippedParams( commandData.params, initialSkipCount, {}, { nonConstPointerIndex }, false ); + + std::string argumentList = + generateArgumentListEnhanced( commandData.params, skippedParams, {}, definition, false, false, true ); + std::string commandName = generateCommandName( name, commandData.params, initialSkipCount, m_tags ); + std::string nodiscard = generateNoDiscard( 1 < commandData.successCodes.size(), 1 < commandData.errorCodes.size() ); + assert( beginsWith( commandData.params[nonConstPointerIndex].type.type, "Vk" ) ); + std::string returnType = + "VULKAN_HPP_NAMESPACE::" + stripPrefix( commandData.params[nonConstPointerIndex].type.type, "Vk" ); + + if ( definition ) + { + std::string const functionTemplate = + R"( template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType>::type ${className}${classSeparator}${commandName}( ${argumentList} ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + StructureChain structureChain; + ${returnType} & ${returnVariable} = structureChain.template get<${returnType}>(); + Result result = static_cast( d.${vkCommand}( ${callArguments} ) ); + return createResultValue( result, structureChain, VULKAN_HPP_NAMESPACE_STRING"::${className}${classSeparator}${commandName}"${successCodeList} ); + })"; + + return replaceWithMap( + functionTemplate, + { { "argumentList", argumentList }, + { "callArguments", + generateCallArgumentsEnhanced( + commandData.params, initialSkipCount, false, {}, { nonConstPointerIndex }, false ) }, + { "className", + initialSkipCount ? stripPrefix( commandData.params[initialSkipCount - 1].type.type, "Vk" ) : "" }, + { "classSeparator", commandData.handle.empty() ? "" : "::" }, + { "commandName", commandName }, + { "returnVariable", startLowerCase( stripPrefix( commandData.params[nonConstPointerIndex].name, "p" ) ) }, + { "returnType", returnType }, + { "successCodeList", constructSuccessCodeList( commandData.successCodes ) }, + { "vkCommand", name } } ); + } + else + { + std::string const functionTemplate = + R"( template + VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType>::type ${commandName}( ${argumentList} ) const;)"; + + return replaceWithMap( functionTemplate, { { "argumentList", argumentList }, { "commandName", commandName } } ); + } +} + +std::string VulkanHppGenerator::generateCommandResultGetHandleUnique( std::string const & name, + CommandData const & commandData, + size_t initialSkipCount, + bool definition, + size_t nonConstPointerIndex ) const +{ + assert( ( commandData.returnType == "VkResult" ) && ( commandData.successCodes.size() == 1 ) ); + + std::set skippedParams = + determineSkippedParams( commandData.params, initialSkipCount, {}, { nonConstPointerIndex }, false ); + + std::string argumentList = + generateArgumentListEnhanced( commandData.params, skippedParams, {}, definition, false, false, true ); + std::string commandName = generateCommandName( name, commandData.params, initialSkipCount, m_tags ); + std::string nodiscard = generateNoDiscard( 1 < commandData.successCodes.size(), 1 < commandData.errorCodes.size() ); + std::string returnBaseType = commandData.params[nonConstPointerIndex].type.compose(); + assert( endsWith( returnBaseType, "*" ) ); + returnBaseType.pop_back(); + + if ( definition ) + { + std::string const functionTemplate = + R"( template + ${nodiscard}VULKAN_HPP_INLINE typename ResultValueType>::type ${className}${classSeparator}${commandName}Unique( ${argumentList} )${const} + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + ${returnBaseType} ${returnValueName}; + Result result = static_cast( d.${vkCommand}( ${callArguments} ) ); + ${ObjectDeleter}<${parentName}, Dispatch> deleter( ${this}${allocator}d ); + return createResultValue<${returnBaseType}, Dispatch>( result, ${returnValueName}, VULKAN_HPP_NAMESPACE_STRING "::${className}${classSeparator}${commandName}Unique", deleter ); + })"; + + std::string objectDeleter, allocator; + if ( ( name.find( "Acquire" ) != std::string::npos ) || ( name.find( "Get" ) != std::string::npos ) ) + { + if ( ( name == "vkAcquirePerformanceConfigurationINTEL" ) || ( name == "vkGetRandROutputDisplayEXT" ) || + ( name == "vkGetWinrtDisplayNV" ) || ( name == "vkGetDrmDisplayEXT" ) ) + { + objectDeleter = "ObjectRelease"; + } + else + { + throw std::runtime_error( "Found " + name + " which requires special handling for the object deleter" ); + } + } + else if ( name.find( "Allocate" ) != std::string::npos ) + { + objectDeleter = "ObjectFree"; + allocator = "allocator, "; + } + else + { + assert( ( name.find( "Create" ) != std::string::npos ) || ( name.find( "Register" ) != std::string::npos ) ); + assert( ( name.find( "Create" ) != std::string::npos ) || ( name == "vkRegisterDeviceEventEXT" ) || + ( name == "vkRegisterDisplayEventEXT" ) ); + objectDeleter = "ObjectDestroy"; + allocator = "allocator, "; + } + std::string className = + initialSkipCount ? stripPrefix( commandData.params[initialSkipCount - 1].type.type, "Vk" ) : ""; + std::string parentName = + ( className.empty() || ( commandData.params[nonConstPointerIndex].type.type == "VkDevice" ) ) ? "NoParent" + : className; + + return replaceWithMap( + functionTemplate, + { { "allocator", allocator }, + { "argumentList", argumentList }, + { "callArguments", + generateCallArgumentsEnhanced( + commandData.params, initialSkipCount, false, {}, { nonConstPointerIndex }, false ) }, + { "className", className }, + { "classSeparator", className.empty() ? "" : "::" }, + { "commandName", commandName }, + { "const", commandData.handle.empty() ? "" : " const" }, + { "nodiscard", nodiscard }, + { "ObjectDeleter", objectDeleter }, + { "parentName", parentName }, + { "returnBaseType", returnBaseType }, + { "returnValueName", startLowerCase( stripPrefix( commandData.params[nonConstPointerIndex].name, "p" ) ) }, + { "this", ( parentName == "NoParent" ) ? "" : "*this, " }, + { "vkCommand", name } } ); + } + else + { + std::string const functionTemplate = + R"( template + ${nodiscard}VULKAN_HPP_INLINE typename ResultValueType>::type ${commandName}Unique( ${argumentList} )${const};)"; + + return replaceWithMap( functionTemplate, + { { "argumentList", argumentList }, + { "commandName", commandName }, + { "const", commandData.handle.empty() ? "" : " const" }, + { "nodiscard", nodiscard }, + { "returnBaseType", returnBaseType } } ); + } +} + +std::string + VulkanHppGenerator::generateCommandResultGetTwoValues( std::string const & name, + CommandData const & commandData, + size_t initialSkipCount, + bool definition, + std::vector const & nonConstPointerParamIndices ) const +{ + assert( ( commandData.returnType == "VkResult" ) && ( 1 < commandData.successCodes.size() ) && + ( nonConstPointerParamIndices.size() == 2 ) && !commandData.handle.empty() ); + + std::set skippedParams = + determineSkippedParams( commandData.params, initialSkipCount, {}, nonConstPointerParamIndices, false ); + + std::string argumentList = + generateArgumentListEnhanced( commandData.params, skippedParams, {}, definition, false, false, true ); + std::string commandName = generateCommandName( name, commandData.params, initialSkipCount, m_tags ); + std::string firstType = commandData.params[nonConstPointerParamIndices[0]].type.compose(); + assert( endsWith( firstType, "*" ) ); + firstType.pop_back(); + std::string secondType = commandData.params[nonConstPointerParamIndices[1]].type.compose(); + assert( endsWith( secondType, "*" ) ); + secondType.pop_back(); + std::string returnBaseType = "std::pair<" + firstType + ", " + secondType + ">"; + std::string returnType = constructReturnType( commandData, returnBaseType ); + + if ( definition ) + { + std::string const functionTemplate = + R"( template + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ${returnType} ${className}${classSeparator}${commandName}( ${argumentList} ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + std::pair<${firstType}, ${secondType}> returnValues; + ${firstType} & ${firstValueName} = returnValues.first; + ${secondType} & ${secondValueName} = returnValues.second; + Result result = static_cast( d.${vkCommand}( ${callArguments} ) ); + return createResultValue( result, returnValues, VULKAN_HPP_NAMESPACE_STRING "::${className}${classSeparator}${commandName}"${successCodeList} ); + })"; + + return replaceWithMap( + functionTemplate, + { { "argumentList", argumentList }, + { "callArguments", + generateCallArgumentsEnhanced( + commandData.params, initialSkipCount, false, {}, nonConstPointerParamIndices, false ) }, + { "className", + initialSkipCount ? stripPrefix( commandData.params[initialSkipCount - 1].type.type, "Vk" ) : "" }, + { "classSeparator", commandData.handle.empty() ? "" : "::" }, + { "commandName", commandName }, + { "firstType", firstType }, + { "firstValueName", + startLowerCase( stripPrefix( commandData.params[nonConstPointerParamIndices[0]].name, "p" ) ) }, + { "returnType", returnType }, + { "secondType", secondType }, + { "secondValueName", + startLowerCase( stripPrefix( commandData.params[nonConstPointerParamIndices[1]].name, "p" ) ) }, + { "successCodeList", constructSuccessCodeList( commandData.successCodes ) }, + { "vkCommand", name } } ); + } + else + { + std::string const functionTemplate = + R"( template + VULKAN_HPP_NODISCARD ${returnType} ${commandName}( ${argumentList} ) const;)"; + + return replaceWithMap( + functionTemplate, + { { "argumentList", argumentList }, { "commandName", commandName }, { "returnType", returnType } } ); + } +} + +std::string + VulkanHppGenerator::generateCommandResultGetTwoVectors( std::string const & name, + CommandData const & commandData, + size_t initialSkipCount, + bool definition, + std::map const & vectorParamIndices ) const +{ + assert( commandData.returnType == "VkResult" ); + + assert( commandData.params[0].type.type == commandData.handle ); + +#if !defined( NDEBUG ) + auto firstVectorParamIt = vectorParamIndices.begin(); + auto secondVectorParamIt = std::next( firstVectorParamIt ); + assert( firstVectorParamIt->second == secondVectorParamIt->second ); +#endif + + std::set skippedParameters = + determineSkippedParams( commandData.params, initialSkipCount, vectorParamIndices, {}, false ); + + std::string argumentList = + generateArgumentListEnhanced( commandData.params, skippedParameters, {}, definition, false, false, true ); + std::string commandName = generateCommandName( name, commandData.params, initialSkipCount, m_tags ); + std::pair>> vectorSizeCheck = needsVectorSizeCheck( vectorParamIndices ); + std::string noexceptString = vectorSizeCheck.first ? "VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS" : "VULKAN_HPP_NOEXCEPT"; + + if ( definition ) + { + const std::string functionTemplate = + R"( template + VULKAN_HPP_INLINE Result ${className}${classSeparator}${commandName}( ${argumentList} ) const ${noexcept} + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );${vectorSizeCheck} + Result result = static_cast( d.${vkCommand}( ${callArguments} ) ); + return createResultValue( result, VULKAN_HPP_NAMESPACE_STRING "::${className}${classSeparator}${commandName}"${successCodeList} ); + })"; + + return replaceWithMap( + functionTemplate, + { { "argumentList", argumentList }, + { "callArguments", + generateCallArgumentsEnhanced( commandData.params, initialSkipCount, false, {}, {}, false ) }, + { "className", + initialSkipCount ? stripPrefix( commandData.params[initialSkipCount - 1].type.type, "Vk" ) : "" }, + { "classSeparator", commandData.handle.empty() ? "" : "::" }, + { "commandName", commandName }, + { "noexcept", noexceptString }, + { "successCodeList", constructSuccessCodeList( commandData.successCodes ) }, + { "vectorSizeCheck", + vectorSizeCheck.first + ? constructVectorSizeCheck( name, commandData, initialSkipCount, vectorSizeCheck.second, skippedParameters ) + : "" }, + { "vkCommand", name } } ); + } + else + { + const std::string functionTemplate = + R"( template + Result ${commandName}( ${argumentList} ) const ${noexcept};)"; + + return replaceWithMap( functionTemplate, + { + { "argumentList", argumentList }, + { "commandName", commandName }, + { "noexcept", noexceptString }, + } ); + } +} + +std::string VulkanHppGenerator::generateCommandResultGetValue( std::string const & name, + CommandData const & commandData, + size_t initialSkipCount, + bool definition, + size_t nonConstPointerIndex ) const +{ + assert( commandData.returnType == "VkResult" ); + + std::set skippedParams = + determineSkippedParams( commandData.params, initialSkipCount, {}, { nonConstPointerIndex }, false ); + + std::string argumentList = + generateArgumentListEnhanced( commandData.params, skippedParams, {}, definition, false, false, true ); + std::string commandName = generateCommandName( name, commandData.params, initialSkipCount, m_tags ); + std::string nodiscard = generateNoDiscard( 1 < commandData.successCodes.size(), 1 < commandData.errorCodes.size() ); + std::string returnBaseType = commandData.params[nonConstPointerIndex].type.compose(); + assert( endsWith( returnBaseType, "*" ) ); + returnBaseType.pop_back(); + std::string typenameT; + if ( returnBaseType == "void" ) + { + returnBaseType = "T"; + typenameT = "typename T, "; + } + std::string returnType = constructReturnType( commandData, returnBaseType ); + + if ( definition ) + { + std::string const functionTemplate = + R"( template <${typenameT}typename Dispatch> + ${nodiscard}VULKAN_HPP_INLINE ${returnType} ${className}${classSeparator}${commandName}( ${argumentList} )${const} + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + ${returnBaseType} ${returnValueName}; + Result result = static_cast( d.${vkCommand}( ${callArguments} ) ); + return createResultValue( result, ${returnValueName}, VULKAN_HPP_NAMESPACE_STRING "::${className}${classSeparator}${commandName}"${successCodeList} ); + })"; + + return replaceWithMap( + functionTemplate, + { { "argumentList", argumentList }, + { "callArguments", + generateCallArgumentsEnhanced( + commandData.params, initialSkipCount, false, {}, { nonConstPointerIndex }, false ) }, + { "className", + initialSkipCount ? stripPrefix( commandData.params[initialSkipCount - 1].type.type, "Vk" ) : "" }, + { "classSeparator", commandData.handle.empty() ? "" : "::" }, + { "const", commandData.handle.empty() ? "" : " const" }, + { "commandName", commandName }, + { "returnBaseType", returnBaseType }, + { "returnValueName", startLowerCase( stripPrefix( commandData.params[nonConstPointerIndex].name, "p" ) ) }, + { "nodiscard", nodiscard }, + { "returnType", returnType }, + { "successCodeList", constructSuccessCodeList( commandData.successCodes ) }, + { "typenameT", typenameT }, + { "vkCommand", name } } ); + } + else + { + std::string const functionTemplate = + R"( template <${typenameT}typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE> + ${nodiscard}${returnType} ${commandName}( ${argumentList} )${const};)"; + + return replaceWithMap( functionTemplate, + { { "argumentList", argumentList }, + { "commandName", commandName }, + { "const", commandData.handle.empty() ? "" : " const" }, + { "nodiscard", nodiscard }, + { "returnType", returnType }, + { "typenameT", typenameT } } ); + } +} + +std::string + VulkanHppGenerator::generateCommandResultGetValueDeprecated( std::string const & name, + CommandData const & commandData, + size_t initialSkipCount, + bool definition, + std::map const & vectorParamIndices, + size_t returnParamIndex ) const +{ + assert( commandData.returnType == "VkResult" ); + assert( ( vectorParamIndices.find( returnParamIndex ) == vectorParamIndices.end() ) ); + + std::string argumentList = constructFunctionHeaderArgumentsEnhanced( + commandData, returnParamIndex, INVALID_INDEX, vectorParamIndices, !definition, false ); + std::string commandName = generateCommandName( name, commandData.params, initialSkipCount, m_tags ); + std::string nodiscard = generateNoDiscard( 1 < commandData.successCodes.size(), 1 < commandData.errorCodes.size() ); + + assert( !beginsWith( commandData.params[returnParamIndex].type.type, "Vk" ) ); + std::string returnType = commandData.params[returnParamIndex].type.type; + + if ( definition ) + { + std::string const functionTemplate = + R"( template + VULKAN_HPP_DEPRECATED( "This function is deprecated. Use one of the other flavours of it.") + ${nodiscard}VULKAN_HPP_INLINE typename ResultValueType<${returnType}>::type ${className}${classSeparator}${commandName}( ${argumentList} ) const + { + VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION ); + ${functionBody} + })"; + + return replaceWithMap( + functionTemplate, + { { "argumentList", argumentList }, + { "className", + initialSkipCount ? stripPrefix( commandData.params[initialSkipCount - 1].type.type, "Vk" ) : "" }, + { "classSeparator", commandData.handle.empty() ? "" : "::" }, + { "commandName", commandName }, + { "functionBody", + constructFunctionBodyEnhanced( " ", + name, + commandData, + initialSkipCount, + returnParamIndex, + INVALID_INDEX, + vectorParamIndices, + false, + returnType, + false ) }, + { "nodiscard", nodiscard }, + { "returnType", returnType } } ); + } + else + { + std::string const functionTemplate = + R"( template + ${nodiscard}typename ResultValueType<${returnType}>::type ${commandName}( ${argumentList} ) const;)"; + + return replaceWithMap( functionTemplate, + { { "argumentList", argumentList }, + { "commandName", commandName }, + { "nodiscard", nodiscard }, + { "returnType", returnType } } ); + } +} + std::string VulkanHppGenerator::generateCommandSetStandard( std::string const & name, CommandData const & commandData, size_t initialSkipCount, @@ -10289,14 +9259,14 @@ ${commandEnhanced} case 0: case 1: commandEnhanced = - constructCommandResult( name, commandData, initialSkipCount, definition, vectorParamIndices ); + generateCommandResult( name, commandData, initialSkipCount, definition, vectorParamIndices ); break; case 2: if ( ( vectorParamIndices.begin()->second != INVALID_INDEX ) && ( vectorParamIndices.begin()->second == std::next( vectorParamIndices.begin() )->second ) && ( commandData.params[vectorParamIndices.begin()->second].type.isValue() ) ) { - commandEnhanced = constructCommandResultGetTwoVectors( + commandEnhanced = generateCommandResultGetTwoVectors( name, commandData, initialSkipCount, definition, vectorParamIndices ); } break; @@ -10310,12 +9280,12 @@ ${commandEnhanced} case 1: if ( commandData.returnType == "VkBool32" ) { - commandEnhanced = constructCommandBoolGetValue( + commandEnhanced = generateCommandBoolGetValue( name, commandData, initialSkipCount, definition, nonConstPointerParamIndices[0] ); } else if ( commandData.returnType == "VkResult" ) { - commandEnhanced = constructCommandResultGetValue( + commandEnhanced = generateCommandResultGetValue( name, commandData, initialSkipCount, definition, nonConstPointerParamIndices[0] ); } else if ( commandData.returnType == "void" ) @@ -10327,7 +9297,7 @@ ${commandEnhanced} case 2: if ( ( commandData.returnType == "VkResult" ) && ( 1 < commandData.successCodes.size() ) ) { - commandEnhanced = constructCommandResultGetTwoValues( + commandEnhanced = generateCommandResultGetTwoValues( name, commandData, initialSkipCount, definition, nonConstPointerParamIndices ); } break; @@ -10375,7 +9345,7 @@ ${commandEnhancedWithAllocator} constructCommandResultGetVectorAndValue( name, commandData, initialSkipCount, definition, vectorParamIndices, nonConstPointerParamIndices, false ) }, { "commandEnhancedDeprecated", - constructCommandResultGetValueDeprecated( + generateCommandResultGetValueDeprecated( name, commandData, initialSkipCount, definition, vectorParamIndices, nonConstPointerParamIndices[1] ) }, { "commandEnhancedWithAllocator", constructCommandResultGetVectorAndValue( @@ -10402,7 +9372,7 @@ ${commandEnhanced} return replaceWithMap( functionTemplate, std::map( { - { "commandEnhanced", constructCommandResult( name, commandData, initialSkipCount, definition, {} ) }, + { "commandEnhanced", generateCommandResult( name, commandData, initialSkipCount, definition, {} ) }, { "commandStandard", constructCommandStandard( name, commandData, initialSkipCount, definition ) }, } ) ); } @@ -10427,9 +9397,9 @@ ${commandEnhancedUnique} functionTemplate, std::map( { { "commandEnhanced", - constructCommandResultGetValue( name, commandData, initialSkipCount, definition, nonConstPointerIndex ) }, + generateCommandResultGetValue( name, commandData, initialSkipCount, definition, nonConstPointerIndex ) }, { "commandEnhancedUnique", - constructCommandResultGetHandleUnique( + generateCommandResultGetHandleUnique( name, commandData, initialSkipCount, definition, nonConstPointerIndex ) }, { "commandStandard", constructCommandStandard( name, commandData, initialSkipCount, definition ) }, { "newlineOnDefinition", definition ? "\n" : "" } } ) ); @@ -10457,13 +9427,12 @@ ${commandEnhancedWithAllocators} std::map( { { "commandEnhanced", ( commandData.returnType == "VkResult" ) - ? constructCommandResultEnumerate( - name, commandData, initialSkipCount, definition, vectorParamIndex, false ) + ? generateCommandResultEnumerate( name, commandData, initialSkipCount, definition, vectorParamIndex, false ) : constructCommandVoidEnumerate( name, commandData, initialSkipCount, definition, vectorParamIndex, returnParamIndices, false ) }, { "commandEnhancedWithAllocators", ( commandData.returnType == "VkResult" ) - ? constructCommandResultEnumerate( name, commandData, initialSkipCount, definition, vectorParamIndex, true ) + ? generateCommandResultEnumerate( name, commandData, initialSkipCount, definition, vectorParamIndex, true ) : constructCommandVoidEnumerate( name, commandData, initialSkipCount, definition, vectorParamIndex, returnParamIndices, true ) }, { "commandStandard", constructCommandStandard( name, commandData, initialSkipCount, definition ) }, @@ -10495,7 +9464,7 @@ ${commandEnhancedChainedWithAllocator} std::map( { { "commandEnhanced", ( commandData.returnType == "VkResult" ) - ? constructCommandResultEnumerate( + ? generateCommandResultEnumerate( name, commandData, initialSkipCount, definition, *vectorParamIndices.begin(), false ) : constructCommandVoidEnumerate( name, commandData, @@ -10505,24 +9474,23 @@ ${commandEnhancedChainedWithAllocator} returnParamIndices, false ) }, { "commandEnhancedChained", - ( commandData.returnType == "VkResult" ) - ? constructCommandResultEnumerateChained( name, - commandData, - initialSkipCount, - definition, - *vectorParamIndices.begin(), - returnParamIndices, - false ) - : constructCommandVoidEnumerateChained( name, - commandData, - initialSkipCount, - definition, - *vectorParamIndices.begin(), - returnParamIndices, - false ) }, + ( commandData.returnType == "VkResult" ) ? generateCommandResultEnumerateChained( name, + commandData, + initialSkipCount, + definition, + *vectorParamIndices.begin(), + returnParamIndices, + false ) + : constructCommandVoidEnumerateChained( name, + commandData, + initialSkipCount, + definition, + *vectorParamIndices.begin(), + returnParamIndices, + false ) }, { "commandEnhancedChainedWithAllocator", ( commandData.returnType == "VkResult" ) - ? constructCommandResultEnumerateChained( + ? generateCommandResultEnumerateChained( name, commandData, initialSkipCount, definition, *vectorParamIndices.begin(), returnParamIndices, true ) : constructCommandVoidEnumerateChained( name, commandData, @@ -10533,7 +9501,7 @@ ${commandEnhancedChainedWithAllocator} true ) }, { "commandEnhancedWithAllocator", ( commandData.returnType == "VkResult" ) - ? constructCommandResultEnumerate( + ? generateCommandResultEnumerate( name, commandData, initialSkipCount, definition, *vectorParamIndices.begin(), true ) : constructCommandVoidEnumerate( name, commandData, @@ -10570,16 +9538,16 @@ ${commandEnhancedWithAllocators} functionTemplate, std::map( { { "commandEnhanced", - constructCommandResultEnumerateTwoVectors( + generateCommandResultEnumerateTwoVectors( name, commandData, initialSkipCount, definition, vectorParamIndices, returnParamIndices, false ) }, { "commandEnhancedDeprecated", - constructCommandResultEnumerateTwoVectorsDeprecated( + generateCommandResultEnumerateTwoVectorsDeprecated( name, commandData, initialSkipCount, definition, vectorParamIndices, false ) }, { "commandEnhancedWithAllocators", - constructCommandResultEnumerateTwoVectors( + generateCommandResultEnumerateTwoVectors( name, commandData, initialSkipCount, definition, vectorParamIndices, returnParamIndices, true ) }, { "commandEnhancedWithAllocatorsDeprecated", - constructCommandResultEnumerateTwoVectorsDeprecated( + generateCommandResultEnumerateTwoVectorsDeprecated( name, commandData, initialSkipCount, definition, vectorParamIndices, true ) }, { "commandStandard", constructCommandStandard( name, commandData, initialSkipCount, definition ) }, { "newlineOnDefinition", definition ? "\n" : "" } } ) ); @@ -10766,11 +9734,11 @@ ${commandEnhancedChained} ( commandData.returnType == "void" ) ? constructCommandVoidGetValue( name, commandData, initialSkipCount, definition, vectorParamIndices, nonConstPointerIndex ) - : constructCommandResultGetValue( name, commandData, initialSkipCount, definition, nonConstPointerIndex ) }, + : generateCommandResultGetValue( name, commandData, initialSkipCount, definition, nonConstPointerIndex ) }, { "commandEnhancedChained", ( commandData.returnType == "void" ) ? constructCommandVoidGetChain( name, commandData, initialSkipCount, definition, nonConstPointerIndex ) - : constructCommandResultGetChain( name, commandData, initialSkipCount, definition, nonConstPointerIndex ) }, + : generateCommandResultGetChain( name, commandData, initialSkipCount, definition, nonConstPointerIndex ) }, { "commandStandard", constructCommandStandard( name, commandData, initialSkipCount, definition ) }, { "newlineOnDefinition", definition ? "\n" : "" } } ) ); } @@ -11019,10 +9987,8 @@ std::string VulkanHppGenerator::generateDispatchLoaderStaticCommands( std::vecto for ( auto const & command : require.commands ) { // some commands are listed for multiple extensions ! - if ( listedCommands.find( command ) == listedCommands.end() ) + if ( listedCommands.insert( command ).second ) { - listedCommands.insert( command ); - auto commandIt = m_commands.find( command ); assert( commandIt != m_commands.end() ); @@ -11054,7 +10020,7 @@ std::string VulkanHppGenerator::generateDispatchLoaderStaticCommands( std::vecto } } } - return addTitleAndProtection( str, title ); + return addTitleAndProtection( title, str ); } std::string VulkanHppGenerator::generateEnum( std::pair const & enumData ) const @@ -11215,7 +10181,7 @@ std::string VulkanHppGenerator::generateEnums( std::vector const & } } } - return addTitleAndProtection( str, title ); + return addTitleAndProtection( title, str ); } std::string VulkanHppGenerator::generateEnumToString( std::pair const & enumData ) const @@ -11591,13 +10557,32 @@ std::string else { // the argument is a vector - appendFunctionHeaderArgumentEnhancedVector( - str, param, strippedParameterName, it->second != INVALID_INDEX, isTemplateParam ); + str += generateFunctionHeaderArgumentEnhancedVector( + param, strippedParameterName, it->second != INVALID_INDEX, isTemplateParam ); } } return str; } +std::string VulkanHppGenerator::generateFunctionHeaderArgumentEnhancedVector( ParamData const & param, + std::string const & strippedParameterName, + bool hasSizeParam, + bool isTemplateParam ) const +{ + assert( param.type.postfix.back() == '*' ); + // it's optional, if it's marked as optional and there's no size specified + bool optional = param.optional && !hasSizeParam; + + std::string optionalBegin = optional ? "Optional<" : ""; + std::string optionalEnd = optional ? "> " : ""; + + // use our ArrayProxy + bool isConst = ( param.type.prefix.find( "const" ) != std::string::npos ); + return optionalBegin + "ArrayProxy<" + + ( isTemplateParam ? ( isConst ? "const T" : "T" ) : stripPostfix( param.type.compose(), "*" ) ) + "> const &" + + optionalEnd + strippedParameterName; +} + std::string VulkanHppGenerator::generateHandle( std::pair const & handleData, std::set & listedHandles ) const { @@ -11614,7 +10599,7 @@ std::string VulkanHppGenerator::generateHandle( std::pairsecond.childrenHandles.find( "VkInstance" ) != handleIt->second.childrenHandles.end() ); #endif - appendUniqueTypes( str, "", { "VkInstance" } ); + str += generateUniqueTypes( "", { "VkInstance" } ); } str += "\n"; @@ -11666,12 +10651,12 @@ std::string VulkanHppGenerator::generateHandle( std::pair } } } - return addTitleAndProtection( str, title ); + return addTitleAndProtection( title, str ); } std::string VulkanHppGenerator::generateLenInitializer( @@ -12000,15 +10985,234 @@ std::string VulkanHppGenerator::generateRAIICommandDefinitions( std::vector const & handle, + std::set & listedHandles, + std::set const & specialFunctions ) const +{ + std::string str; + if ( listedHandles.find( handle.first ) == listedHandles.end() ) + { + rescheduleRAIIHandle( str, handle, listedHandles, specialFunctions ); + + std::string enter, leave; + std::tie( enter, leave ) = generateProtection( handle.first, !handle.second.alias.empty() ); + std::string handleType = stripPrefix( handle.first, "Vk" ); + std::string handleName = startLowerCase( handleType ); + + std::string singularConstructors, arrayConstructors; + std::tie( singularConstructors, arrayConstructors ) = constructRAIIHandleConstructors( handle ); + std::string upgradeConstructor = arrayConstructors.empty() ? "" : constructRAIIHandleUpgradeConstructor( handle ); + std::string destructor, destructorCall; + std::tie( destructor, destructorCall ) = + ( handle.second.destructorIt == m_commands.end() ) + ? std::make_pair( "", "" ) + : constructRAIIHandleDestructor( handle.first, handle.second.destructorIt, enter ); + + std::string getConstructorSuccessCode, memberVariables, moveConstructorInitializerList, moveAssignmentInstructions; + std::tie( getConstructorSuccessCode, memberVariables, moveConstructorInitializerList, moveAssignmentInstructions ) = + constructRAIIHandleDetails( handle, destructorCall ); + + std::string declarations = constructRAIIHandleMemberFunctionDeclarations( handle, specialFunctions ); + + assert( !handle.second.objTypeEnum.empty() ); + auto enumIt = m_enums.find( "VkObjectType" ); + assert( enumIt != m_enums.end() ); + auto valueIt = + std::find_if( enumIt->second.values.begin(), + enumIt->second.values.end(), + [&handle]( EnumValueData const & evd ) { return evd.name == handle.second.objTypeEnum; } ); + assert( valueIt != enumIt->second.values.end() ); + std::string objTypeEnum = generateEnumValueName( enumIt->first, valueIt->name, false, m_tags ); + + enumIt = m_enums.find( "VkDebugReportObjectTypeEXT" ); + assert( enumIt != m_enums.end() ); + std::string valueName = handle.second.objTypeEnum; + valueName = valueName.replace( 3, 0, "DEBUG_REPORT_" ) + "_EXT"; + valueIt = std::find_if( enumIt->second.values.begin(), + enumIt->second.values.end(), + [&valueName]( EnumValueData const & evd ) { return valueName == evd.name; } ); + std::string debugReportObjectType = ( valueIt != enumIt->second.values.end() ) + ? generateEnumValueName( enumIt->first, valueIt->name, false, m_tags ) + : "eUnknown"; + + std::string dispatcherType = + ( ( handle.first == "VkDevice" ) || + ( handle.second.constructorIts.front()->second.params.front().type.type == "VkDevice" ) ) + ? "VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher" + : "VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher"; + + const std::string handleTemplate = R"( +${enter} class ${handleType} + { + public: + using CType = Vk${handleType}; + + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType = VULKAN_HPP_NAMESPACE::ObjectType::${objTypeEnum}; + static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType = VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::${debugReportObjectType}; + + public: +${singularConstructors} +${upgradeConstructor} +${destructor} + +#if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS ) + ${handleType}() = default; +#else + ${handleType}() = delete; +#endif + ${handleType}( ${handleType} const & ) = delete; + ${handleType}( ${handleType} && rhs ) VULKAN_HPP_NOEXCEPT + : ${moveConstructorInitializerList} + {} + ${handleType} & operator=( ${handleType} const & ) = delete; + ${handleType} & operator=( ${handleType} && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { +${moveAssignmentInstructions} + } + return *this; + } + + VULKAN_HPP_NAMESPACE::${handleType} const & operator*() const VULKAN_HPP_NOEXCEPT + { + return m_${handleName}; + } + +${getConstructorSuccessCode} + ${dispatcherType} const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher${dispatcherAccess}getVkHeaderVersion() == VK_HEADER_VERSION ); + return ${getDispatcherReturn}m_dispatcher; + } + +#if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS ) + explicit operator bool() const VULKAN_HPP_NOEXCEPT + { + return m_${handleName}.operator bool(); + } + + bool operator!() const VULKAN_HPP_NOEXCEPT + { + return m_${handleName}.operator!(); + } +#endif +${memberFunctionsDeclarations} + + private: + ${memberVariables} + }; +${leave})"; + + str += replaceWithMap( + handleTemplate, + { { "debugReportObjectType", debugReportObjectType }, + { "destructor", destructor }, + { "dispatcherAccess", ( handleType == "Device" ) || ( handleType == "Instance" ) ? "." : "->" }, + { "dispatcherType", dispatcherType }, + { "enter", enter }, + { "getConstructorSuccessCode", getConstructorSuccessCode }, + { "getDispatcherReturn", ( handleType == "Device" ) || ( handleType == "Instance" ) ? "&" : "" }, + { "handleName", handleName }, + { "handleType", handleType }, + { "leave", leave }, + { "memberFunctionsDeclarations", declarations }, + { "memberVariables", memberVariables }, + { "moveAssignmentInstructions", moveAssignmentInstructions }, + { "moveConstructorInitializerList", moveConstructorInitializerList }, + { "objTypeEnum", objTypeEnum }, + { "singularConstructors", singularConstructors }, + { "upgradeConstructor", upgradeConstructor } } ); + + if ( !arrayConstructors.empty() ) + { + // it's a handle class with a friendly handles class + const std::string handlesTemplate = R"( +${enter} class ${handleType}s : public std::vector + { + public: + ${arrayConstructors} + +#if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS ) + ${handleType}s() = default; +#else + ${handleType}s() = delete; +#endif + ${handleType}s( ${handleType}s const & ) = delete; + ${handleType}s( ${handleType}s && rhs ) = default; + ${handleType}s & operator=( ${handleType}s const & ) = delete; + ${handleType}s & operator=( ${handleType}s && rhs ) = default; + }; +${leave} +)"; + + str += replaceWithMap( handlesTemplate, + { { "arrayConstructors", arrayConstructors }, + { "enter", enter }, + { "handleType", handleType }, + { "leave", leave } } ); + } + } + return str; +} + +std::string VulkanHppGenerator::generateRAIIHandleContext( std::pair const & handle, + std::set const & specialFunctions ) const +{ + const std::string contextTemplate = R"( + class Context + { + public: + Context() + : m_dispatcher( m_dynamicLoader.getProcAddress( "vkGetInstanceProcAddr" ) ) + {} + + ~Context() = default; + + Context( Context const & ) = delete; + Context( Context && rhs ) VULKAN_HPP_NOEXCEPT + : m_dynamicLoader( std::move( rhs.m_dynamicLoader ) ) + , m_dispatcher( std::move( rhs.m_dispatcher ) ) + {} + Context & operator=( Context const & ) = delete; + Context & operator=( Context && rhs ) VULKAN_HPP_NOEXCEPT + { + if ( this != &rhs ) + { + m_dynamicLoader = std::move( rhs.m_dynamicLoader ); + m_dispatcher = std::move( rhs.m_dispatcher ); + } + return *this; + } + +${memberFunctionDeclarations} + + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::ContextDispatcher const * getDispatcher() const + { + VULKAN_HPP_ASSERT( m_dispatcher.getVkHeaderVersion() == VK_HEADER_VERSION ); + return &m_dispatcher; + } + + private: + VULKAN_HPP_NAMESPACE::DynamicLoader m_dynamicLoader; + VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::ContextDispatcher m_dispatcher; + }; + +)"; + + return replaceWithMap( + contextTemplate, + { { "memberFunctionDeclarations", constructRAIIHandleMemberFunctionDeclarations( handle, specialFunctions ) } } ); } std::string @@ -12080,6 +11284,302 @@ std::string return sizeCheck; } +std::string VulkanHppGenerator::generateStruct( std::pair const & structure, + std::set & listedStructs ) const +{ + assert( listedStructs.find( structure.first ) == listedStructs.end() ); + + std::string str; + for ( auto const & member : structure.second.members ) + { + if ( !isHandleType( member.type.type ) && + ( structure.first != member.type.type ) ) // some structures hold a pointer to the very same structure type + { + str += generateType( member.type.type, listedStructs ); + } + } + + if ( !structure.second.subStruct.empty() ) + { + auto structureIt = m_structures.find( structure.second.subStruct ); + if ( ( structureIt != m_structures.end() ) && ( listedStructs.find( structureIt->first ) == listedStructs.end() ) ) + { + str += generateStruct( *structureIt, listedStructs ); + } + } + + if ( structure.second.isUnion ) + { + str += generateUnion( structure ); + } + else + { + str += generateStructure( structure ); + } + + listedStructs.insert( structure.first ); + return str; +} + +std::string + VulkanHppGenerator::generateStructAssignmentOperators( std::pair const & structData, + std::string const & prefix ) const +{ + static const std::string assignmentFromVulkanType = R"( +${prefix}${constexpr_assign}${structName} & operator=( ${structName} const & rhs ) VULKAN_HPP_NOEXCEPT = default; + +${prefix}${structName} & operator=( Vk${structName} const & rhs ) VULKAN_HPP_NOEXCEPT +${prefix}{ +${prefix} *this = *reinterpret_cast( &rhs ); +${prefix} return *this; +${prefix}} +)"; + return replaceWithMap( assignmentFromVulkanType, + { { "constexpr_assign", constructConstexprString( structData, true ) }, + { "prefix", prefix }, + { "structName", stripPrefix( structData.first, "Vk" ) } } ); +} + +std::string + VulkanHppGenerator::generateStructCompareOperators( std::pair const & structData ) const +{ + static const std::set simpleTypes = { "char", "double", "DWORD", "float", "HANDLE", + "HINSTANCE", "HMONITOR", "HWND", "int", "int8_t", + "int16_t", "int32_t", "int64_t", "LPCWSTR", "size_t", + "uint8_t", "uint16_t", "uint32_t", "uint64_t" }; + // two structs are compared by comparing each of the elements + std::string compareMembers; + std::string intro = ""; + for ( size_t i = 0; i < structData.second.members.size(); i++ ) + { + MemberData const & member = structData.second.members[i]; + auto typeIt = m_types.find( member.type.type ); + assert( typeIt != m_types.end() ); + if ( ( typeIt->second.category == TypeCategory::Requires ) && member.type.postfix.empty() && + ( simpleTypes.find( member.type.type ) == simpleTypes.end() ) ) + { + // this type might support operator==()... that is, use memcmp + compareMembers += + intro + "( memcmp( &" + member.name + ", &rhs." + member.name + ", sizeof( " + member.type.type + " ) ) == 0 )"; + } + else + { + // for all others, we use the operator== of that type + compareMembers += intro + "( " + member.name + " == rhs." + member.name + " )"; + } + intro = "\n && "; + } + + static const std::string compareTemplate = R"( +#if defined(VULKAN_HPP_HAS_SPACESHIP_OPERATOR) + auto operator<=>( ${name} const & ) const = default; +#else + bool operator==( ${name} const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return ${compareMembers}; + } + + bool operator!=( ${name} const & rhs ) const VULKAN_HPP_NOEXCEPT + { + return !operator==( rhs ); + } +#endif +)"; + + return replaceWithMap( compareTemplate, + { { "name", stripPrefix( structData.first, "Vk" ) }, { "compareMembers", compareMembers } } ); +} + +std::string VulkanHppGenerator::generateStructConstructorArgument( bool listedArgument, + MemberData const & memberData, + bool withDefault ) const +{ + // skip members 'pNext' and members with a single value, as they are never explicitly set + std::string str; + if ( ( memberData.name != "pNext" ) && ( memberData.values.size() != 1 ) ) + { + str += ( listedArgument ? ( ", " ) : "" ); + if ( memberData.arraySizes.empty() ) + { + str += memberData.type.compose() + " "; + } + else + { + str += generateStandardArray( memberData.type.compose(), memberData.arraySizes ) + " const & "; + } + str += memberData.name + "_"; + + if ( withDefault ) + { + str += " = "; + auto enumIt = m_enums.find( memberData.type.type ); + if ( enumIt != m_enums.end() && memberData.type.postfix.empty() ) + { + str += generateEnumInitializer( + memberData.type, memberData.arraySizes, enumIt->second.values, enumIt->second.isBitmask ); + } + else + { + assert( memberData.values.empty() ); + // all the rest can be initialized with just {} + str += "{}"; + } + } + } + return str; +} + +std::string VulkanHppGenerator::generateStructConstructors( std::pair const & structData, + std::string const & prefix ) const +{ + // the constructor with all the elements as arguments, with defaults + // and the simple copy constructor from the corresponding vulkan structure + static const std::string constructors = R"( +${prefix}${constexpr}${structName}(${arguments}) VULKAN_HPP_NOEXCEPT +${prefix}${initializers} +${prefix}{} + +${prefix}${constexpr}${structName}( ${structName} const & rhs ) VULKAN_HPP_NOEXCEPT = default; + +${prefix}${structName}( Vk${structName} const & rhs ) VULKAN_HPP_NOEXCEPT +${prefix} : ${structName}( *reinterpret_cast<${structName} const *>( &rhs ) ) +${prefix}{} +)"; + + std::string arguments, initializers; + bool listedArgument = false; + bool firstArgument = true; + for ( auto const & member : structData.second.members ) + { + // gather the arguments + std::string argument = generateStructConstructorArgument( listedArgument, member, true ); + if ( !argument.empty() ) + { + listedArgument = true; + arguments += argument; + } + + // gather the initializers; skip member 'pNext' and members with exactly one legal value + if ( ( member.name != "pNext" ) && ( member.values.size() != 1 ) ) + { + initializers += ( firstArgument ? ":" : "," ) + std::string( " " ) + member.name + "( " + member.name + "_ )"; + firstArgument = false; + } + } + + std::string str = replaceWithMap( constructors, + { { "arguments", arguments }, + { "constexpr", constructConstexprString( structData, false ) }, + { "initializers", initializers }, + { "prefix", prefix }, + { "structName", stripPrefix( structData.first, "Vk" ) } } ); + + str += generateStructConstructorsEnhanced( structData, prefix ); + return str; +} + +std::string + VulkanHppGenerator::generateStructConstructorsEnhanced( std::pair const & structData, + std::string const & prefix ) const +{ + auto memberIts = findAll( structData.second.members.begin(), + structData.second.members.end(), + []( MemberData const & md ) + { return !md.len.empty() && ( ignoreLens.find( md.len.front() ) == ignoreLens.end() ); } ); + if ( !memberIts.empty() ) + { + // map from len-members to all the array members using that len + std::map::const_iterator, std::vector::const_iterator>> lenIts; + for ( auto const & mit : memberIts ) + { + std::string lenName = + ( mit->len.front() == R"(latexmath:[\textrm{codeSize} \over 4])" ) ? "codeSize" : mit->len.front(); + auto lenIt = std::find_if( + structData.second.members.begin(), mit, [&lenName]( MemberData const & md ) { return md.name == lenName; } ); + assert( lenIt != mit ); + lenIts[lenIt].push_back( mit ); + } + + std::string arguments, initializers; + bool listedArgument = false; + bool firstArgument = true; + bool arrayListed = false; + std::string templateHeader, sizeChecks; + for ( auto mit = structData.second.members.begin(); mit != structData.second.members.end(); ++mit ) + { + // gather the initializers; skip member 'pNext' and constant members + if ( ( mit->name != "pNext" ) && ( mit->values.size() != 1 ) ) + { + auto litit = lenIts.find( mit ); + if ( litit != lenIts.end() ) + { + // len arguments just have an initalizer, from the ArrayProxyNoTemporaries size + initializers += ( firstArgument ? ": " : ", " ) + mit->name + "( " + + generateLenInitializer( mit, litit, structData.second.mutualExclusiveLens ) + " )"; + sizeChecks += generateSizeCheck( + litit->second, stripPrefix( structData.first, "Vk" ), prefix, structData.second.mutualExclusiveLens ); + } + else if ( std::find( memberIts.begin(), memberIts.end(), mit ) != memberIts.end() ) + { + assert( beginsWith( mit->name, "p" ) ); + std::string argumentName = startLowerCase( stripPrefix( mit->name, "p" ) ) + "_"; + + assert( endsWith( mit->type.postfix, "*" ) ); + std::string argumentType = trimEnd( stripPostfix( mit->type.compose(), "*" ) ); + if ( ( mit->type.type == "void" ) && ( argumentType.find( '*' ) == std::string::npos ) ) + { + // the argument after stripping one pointer is just void + assert( templateHeader.empty() ); + templateHeader = prefix + "template \n"; + + size_t pos = argumentType.find( "void" ); + assert( pos != std::string::npos ); + argumentType.replace( pos, strlen( "void" ), "T" ); + } + + arguments += listedArgument ? ", " : ""; + arguments += "VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<" + argumentType + "> const & " + argumentName; + if ( arrayListed ) + { + arguments += " = {}"; + } + listedArgument = true; + arrayListed = true; + + initializers += ( firstArgument ? ": " : ", " ) + mit->name + "( " + argumentName + ".data() )"; + } + else + { + std::string argument = generateStructConstructorArgument( listedArgument, *mit, arrayListed ); + if ( !argument.empty() ) + { + listedArgument = true; + arguments += argument; + } + initializers += ( firstArgument ? ": " : ", " ) + mit->name + "( " + mit->name + "_ )"; + } + firstArgument = false; + } + } + static const std::string constructorTemplate = R"( +#if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) +${templateHeader}${prefix}${structName}( ${arguments} ) +${prefix}${initializers} +${prefix}{${sizeChecks}} +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +)"; + + return replaceWithMap( constructorTemplate, + { { "arguments", arguments }, + { "initializers", initializers }, + { "prefix", prefix }, + { "sizeChecks", sizeChecks }, + { "structName", stripPrefix( structData.first, "Vk" ) }, + { "templateHeader", templateHeader } } ); + } + return ""; +} + std::string VulkanHppGenerator::generateStructExtendsStructs( std::vector const & requireData, std::set & listedStructs, std::string const & title ) const @@ -12149,7 +11649,556 @@ std::string VulkanHppGenerator::generateStructExtendsStructs( std::vector + VulkanHppGenerator::generateStructMembers( std::pair const & structData, + std::string const & prefix ) const +{ + std::string str, sTypeValue; + for ( auto const & member : structData.second.members ) + { + str += prefix; + if ( !member.bitCount.empty() && beginsWith( member.type.type, "Vk" ) ) + { + assert( member.type.prefix.empty() && member.type.postfix.empty() ); // never encounterd a different case + str += member.type.type; + } + else if ( member.arraySizes.empty() ) + { + str += member.type.compose(); + } + else + { + assert( member.type.prefix.empty() && member.type.postfix.empty() ); + str += generateStandardArrayWrapper( member.type.compose(), member.arraySizes ); + } + str += " " + member.name; + if ( !member.values.empty() ) + { + // special handling for members with legal value: arbitrarily use the first one as the default + str += " = "; + if ( member.type.type == "uint32_t" ) + { + str += member.values.front(); + } + else + { + auto enumIt = m_enums.find( member.type.type ); + assert( enumIt != m_enums.end() ); + std::string enumValue = member.values.front(); + auto valueIt = std::find_if( enumIt->second.values.begin(), + enumIt->second.values.end(), + [&enumValue]( EnumValueData const & evd ) { return enumValue == evd.name; } ); + assert( valueIt != enumIt->second.values.end() ); + std::string valueName = generateEnumValueName( enumIt->first, valueIt->name, enumIt->second.isBitmask, m_tags ); + str += stripPrefix( member.type.type, "Vk" ) + "::" + valueName; + if ( member.name == "sType" ) + { + sTypeValue = valueName; + } + } + } + else + { + // as we don't have any meaningful default initialization values, everything can be initialized by just '{}' ! + assert( member.arraySizes.empty() || member.bitCount.empty() ); + if ( !member.bitCount.empty() ) + { + str += " : " + member.bitCount; // except for bitfield members, where no default member initializatin is + // supported (up to C++20) + } + else + { + str += " = "; + auto enumIt = m_enums.find( member.type.type ); + if ( member.arraySizes.empty() && ( enumIt != m_enums.end() ) && member.type.postfix.empty() ) + { + str += + generateEnumInitializer( member.type, member.arraySizes, enumIt->second.values, enumIt->second.isBitmask ); + } + else + { + str += "{}"; + } + } + } + str += ";\n"; + } + return std::make_pair( str, sTypeValue ); +} + +std::string VulkanHppGenerator::generateStructSetter( std::string const & structureName, + std::vector const & memberData, + size_t index ) const +{ + std::string str; + MemberData const & member = memberData[index]; + if ( member.type.type != "VkStructureType" ) // filter out StructureType, which is supposed to be immutable ! + { + static const std::string templateString = R"( + ${structureName} & set${MemberName}( ${memberType} ${reference}${memberName}_ ) VULKAN_HPP_NOEXCEPT + { + ${assignment}; + return *this; + } +)"; + + std::string memberType = member.arraySizes.empty() + ? member.type.compose() + : generateStandardArray( member.type.compose(), member.arraySizes ); + std::string assignment; + if ( !member.bitCount.empty() && beginsWith( member.type.type, "Vk" ) ) + { + assignment = member.name + " = " + "*reinterpret_cast<" + member.type.type + "*>(&" + member.name + "_)"; + } + else + { + assignment = member.name + " = " + member.name + "_"; + } + + str += replaceWithMap( + templateString, + { { "assignment", assignment }, + { "memberName", member.name }, + { "MemberName", startUpperCase( member.name ) }, + { "memberType", memberType }, + { "reference", + ( member.type.postfix.empty() && ( m_structures.find( member.type.type ) != m_structures.end() ) ) + ? "const & " + : "" }, + { "structureName", structureName } } ); + + if ( !member.len.empty() && ( ignoreLens.find( member.len[0] ) == ignoreLens.end() ) ) + { + assert( member.name.front() == 'p' ); + std::string arrayName = startLowerCase( stripPrefix( member.name, "p" ) ); + + std::string lenName, lenValue; + if ( member.len[0] == R"(latexmath:[\textrm{codeSize} \over 4])" ) + { + lenName = "codeSize"; + lenValue = arrayName + "_.size() * 4"; + } + else + { + lenName = member.len[0]; + lenValue = arrayName + "_.size()"; + } + + assert( memberType.back() == '*' ); + memberType = trimEnd( stripPostfix( memberType, "*" ) ); + + std::string templateHeader; + if ( ( member.type.type == "void" ) && ( memberType.find( '*' ) == std::string::npos ) ) + { + assert( templateHeader.empty() ); + templateHeader = "template \n "; + + size_t pos = memberType.find( "void" ); + assert( pos != std::string::npos ); + memberType.replace( pos, strlen( "void" ), "T" ); + + lenValue += " * sizeof(T)"; + } + + auto lenMember = std::find_if( + memberData.begin(), memberData.end(), [&lenName]( MemberData const & md ) { return md.name == lenName; } ); + assert( lenMember != memberData.end() && lenMember->type.prefix.empty() && lenMember->type.postfix.empty() ); + if ( lenMember->type.type != "size_t" ) + { + lenValue = "static_cast<" + lenMember->type.type + ">( " + lenValue + " )"; + } + + static const std::string setArrayTemplate = R"( +#if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE ) + ${templateHeader}${structureName} & set${ArrayName}( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<${memberType}> const & ${arrayName}_ ) VULKAN_HPP_NOEXCEPT + { + ${lenName} = ${lenValue}; + ${memberName} = ${arrayName}_.data(); + return *this; + } +#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/ +)"; + + str += replaceWithMap( setArrayTemplate, + { { "arrayName", arrayName }, + { "ArrayName", startUpperCase( arrayName ) }, + { "lenName", lenName }, + { "lenValue", lenValue }, + { "memberName", member.name }, + { "memberType", memberType }, + { "structureName", structureName }, + { "templateHeader", templateHeader } } ); + } + } + return str; +} + +std::string VulkanHppGenerator::generateStructSubConstructor( std::pair const & structData, + std::string const & prefix ) const +{ + if ( !structData.second.subStruct.empty() ) + { + auto const & subStruct = m_structures.find( structData.second.subStruct ); + assert( subStruct != m_structures.end() ); + + std::string subStructArgumentName = startLowerCase( stripPrefix( subStruct->first, "Vk" ) ); + std::string ctorOpening = prefix + "explicit " + stripPrefix( structData.first, "Vk" ) + "( "; + std::string indentation = std::string( ctorOpening.size(), ' ' ); + + std::string subCopies; + bool firstArgument = true; + for ( size_t i = 0; i < subStruct->second.members.size(); i++ ) + { + assert( structData.second.members[i].arraySizes.empty() ); + subCopies += prefix + " " + ( firstArgument ? ":" : "," ) + " " + structData.second.members[i].name + "( " + + subStructArgumentName + "." + subStruct->second.members[i].name + " )\n"; + firstArgument = false; + } + + std::string subArguments; + bool listedArgument = true; + for ( size_t i = subStruct->second.members.size(); i < structData.second.members.size(); i++ ) + { + std::string argument = generateStructConstructorArgument( listedArgument, structData.second.members[i], true ); + if ( !argument.empty() ) + { + listedArgument = true; + subArguments += argument; + } + + assert( structData.second.members[i].arraySizes.empty() ); + subCopies += + prefix + " , " + structData.second.members[i].name + "( " + structData.second.members[i].name + "_ )\n"; + } + + return "\n" + " explicit " + + stripPrefix( structData.first, "Vk" ) + "( " + stripPrefix( subStruct->first, "Vk" ) + " const & " + + subStructArgumentName + subArguments + " )\n" + subCopies + " {}\n"; + } + return ""; +} + +std::string VulkanHppGenerator::generateStructure( std::pair const & structure ) const +{ + std::string enter, leave; + std::tie( enter, leave ) = generateProtection( structure.first, !structure.second.aliases.empty() ); + + std::string str = "\n" + enter; + + std::string constructorAndSetters; + constructorAndSetters += "#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )"; + constructorAndSetters += generateStructConstructors( structure, " " ); + constructorAndSetters += generateStructSubConstructor( structure, " " ); + constructorAndSetters += "#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/\n"; + constructorAndSetters += generateStructAssignmentOperators( structure, " " ); + if ( !structure.second.returnedOnly ) + { + // only structs that are not returnedOnly get setters! + constructorAndSetters += "\n#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )"; + for ( size_t i = 0; i < structure.second.members.size(); i++ ) + { + constructorAndSetters += + generateStructSetter( stripPrefix( structure.first, "Vk" ), structure.second.members, i ); + } + constructorAndSetters += "#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/\n"; + } + + // operator==() and operator!=() + // only structs without a union as a member can have a meaningfull == and != operation; we filter them out + std::string compareOperators; + if ( !containsUnion( structure.first ) ) + { + compareOperators += generateStructCompareOperators( structure ); + } + + // the member variables + std::string members, sTypeValue; + std::tie( members, sTypeValue ) = generateStructMembers( structure, " " ); + + static const std::string structureTemplate = R"( struct ${structureName} + { +${allowDuplicate} +${structureType} +${constructorAndSetters} + + operator ${vkName} const &() const VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast( this ); + } + + operator ${vkName} &() VULKAN_HPP_NOEXCEPT + { + return *reinterpret_cast<${vkName}*>( this ); + } + +${compareOperators} + + public: +${members} + }; + static_assert( sizeof( ${structureName} ) == sizeof( ${vkName} ), "struct and wrapper have different size!" ); + static_assert( std::is_standard_layout<${structureName}>::value, "struct wrapper is not a standard layout!" ); +)"; + + std::string structureName = stripPrefix( structure.first, "Vk" ); + std::string allowDuplicate, structureType; + if ( !sTypeValue.empty() ) + { + allowDuplicate = std::string( " static const bool allowDuplicate = " ) + + ( structure.second.allowDuplicate ? "true;" : "false;" ); + structureType = + " static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::" + sTypeValue + ";\n"; + } + str += replaceWithMap( structureTemplate, + { { "allowDuplicate", allowDuplicate }, + { "structureName", structureName }, + { "structureType", structureType }, + { "constructorAndSetters", constructorAndSetters }, + { "vkName", structure.first }, + { "compareOperators", compareOperators }, + { "members", members } } ); + + if ( !sTypeValue.empty() ) + { + std::string cppTypeTemplate = R"( + template <> + struct CppType + { + using Type = ${structureName}; + }; +)"; + str += replaceWithMap( cppTypeTemplate, { { "sTypeValue", sTypeValue }, { "structureName", structureName } } ); + } + + for ( std::string const & alias : structure.second.aliases ) + { + str += " using " + stripPrefix( alias, "Vk" ) + " = " + stripPrefix( structure.first, "Vk" ) + ";\n"; + } + + str += leave; + return str; +} + +std::string VulkanHppGenerator::generateType( std::string const & typeName, std::set & listedTypes ) const +{ + std::string str; + if ( listedTypes.find( typeName ) == listedTypes.end() ) + { + auto typeIt = m_types.find( typeName ); + assert( typeIt != m_types.end() ); + switch ( typeIt->second.category ) + { + case TypeCategory::Handle: + { + auto handleIt = m_handles.find( typeName ); + if ( handleIt == m_handles.end() ) + { + handleIt = std::find_if( m_handles.begin(), + m_handles.end(), + [&typeName]( std::pair const & hd ) + { return hd.second.alias == typeName; } ); + assert( handleIt != m_handles.end() ); + if ( listedTypes.find( handleIt->first ) == listedTypes.end() ) + { + str += generateHandle( *handleIt, listedTypes ); + } + } + else + { + str += generateHandle( *handleIt, listedTypes ); + } + } + break; + case TypeCategory::Struct: + case TypeCategory::Union: + { + auto structIt = m_structures.find( typeName ); + if ( structIt == m_structures.end() ) + { + structIt = std::find_if( m_structures.begin(), + m_structures.end(), + [&typeName]( std::pair const & sd ) + { return sd.second.aliases.find( typeName ) != sd.second.aliases.end(); } ); + assert( structIt != m_structures.end() ); + if ( listedTypes.find( structIt->first ) == listedTypes.end() ) + { + str += generateStruct( *structIt, listedTypes ); + } + } + else + { + str += generateStruct( *structIt, listedTypes ); + } + } + break; + default: listedTypes.insert( typeIt->first ); break; + } + } + return str; +} + +std::string VulkanHppGenerator::generateUnion( std::pair const & structure ) const +{ + std::string enter, leave; + std::tie( enter, leave ) = generateProtection( structure.first, !structure.second.aliases.empty() ); + + std::string str = "\n" + enter; + std::string unionName = stripPrefix( structure.first, "Vk" ); + str += " union " + unionName + + "\n" + " {\n" + "#if !defined( VULKAN_HPP_NO_UNION_CONSTRUCTORS )\n" + " " + + unionName + "( VULKAN_HPP_NAMESPACE::" + unionName + + " const & rhs ) VULKAN_HPP_NOEXCEPT\n" + " {\n" + " memcpy( static_cast( this ), &rhs, sizeof( VULKAN_HPP_NAMESPACE::" + + unionName + + " ) );\n" + " }\n"; + + bool firstMember = true; + for ( auto const & member : structure.second.members ) + { + // VkBool32 is aliased to uint32_t. Don't create a VkBool32 constructor if the union also contains a uint32_t + // constructor. + auto compareBool32Alias = []( MemberData const & member ) + { + return member.type.type == std::string( "uint32_t" ); + }; + if ( member.type.type == "VkBool32" ) + { + if ( std::find_if( structure.second.members.begin(), structure.second.members.end(), compareBool32Alias ) != + structure.second.members.end() ) + { + continue; + } + } + + static const std::string constructorTemplate = R"( + ${unionName}( ${memberType} ${memberName}_${defaultAssignment} ) + : ${memberName}( ${memberName}_ ) + {} +)"; + + std::string memberType = ( member.arraySizes.empty() ) + ? member.type.compose() + : ( "const " + generateStandardArray( member.type.compose(), member.arraySizes ) + "&" ); + str += replaceWithMap( constructorTemplate, + { { "defaultAssignment", firstMember ? " = {}" : "" }, + { "memberName", member.name }, + { "memberType", memberType }, + { "unionName", stripPrefix( structure.first, "Vk" ) } } ); + firstMember = false; + } + str += "#endif /*VULKAN_HPP_NO_UNION_CONSTRUCTORS*/\n"; + + str += "\n#if !defined( VULKAN_HPP_NO_UNION_SETTERS )"; + // one setter per union element + for ( size_t i = 0; i < structure.second.members.size(); i++ ) + { + str += generateStructSetter( stripPrefix( structure.first, "Vk" ), structure.second.members, i ); + } + str += "#endif /*VULKAN_HPP_NO_UNION_SETTERS*/\n"; + + // assignment operator + static const std::string operatorsTemplate = R"( + VULKAN_HPP_NAMESPACE::${unionName} & operator=( VULKAN_HPP_NAMESPACE::${unionName} const & rhs ) VULKAN_HPP_NOEXCEPT + { + memcpy( static_cast( this ), &rhs, sizeof( VULKAN_HPP_NAMESPACE::${unionName} ) ); + return *this; + } + + operator Vk${unionName} const &() const + { + return *reinterpret_cast( this ); + } + + operator Vk${unionName} &() + { + return *reinterpret_cast( this ); + } + +)"; + str += replaceWithMap( operatorsTemplate, { { "unionName", stripPrefix( structure.first, "Vk" ) } } ); + + // the union member variables + // if there's at least one Vk... type in this union, check for unrestricted unions support + bool needsUnrestrictedUnions = ( std::find_if( structure.second.members.begin(), + structure.second.members.end(), + []( MemberData const & member ) { + return beginsWith( member.type.type, "Vk" ); + } ) != structure.second.members.end() ); + if ( needsUnrestrictedUnions ) + { + str += "#ifdef VULKAN_HPP_HAS_UNRESTRICTED_UNIONS\n"; + } + for ( auto const & member : structure.second.members ) + { + str += " " + + ( member.arraySizes.empty() ? member.type.compose() + : generateStandardArrayWrapper( member.type.compose(), member.arraySizes ) ) + + " " + member.name + ";\n"; + } + if ( needsUnrestrictedUnions ) + { + str += "#else\n"; + for ( auto const & member : structure.second.members ) + { + str += " " + member.type.prefix + ( member.type.prefix.empty() ? "" : " " ) + member.type.type + + member.type.postfix + " " + member.name + generateCArraySizes( member.arraySizes ) + ";\n"; + } + str += "#endif /*VULKAN_HPP_HAS_UNRESTRICTED_UNIONS*/\n"; + } + str += " };\n" + leave; + return str; +} + +std::string VulkanHppGenerator::generateUniqueTypes( std::string const & parentType, + std::set const & childrenTypes ) const +{ + std::string str = + "\n" + "#ifndef VULKAN_HPP_NO_SMART_HANDLE\n"; + if ( !parentType.empty() ) + { + str += " class " + stripPrefix( parentType, "Vk" ) + ";\n"; + } + + for ( auto const & childType : childrenTypes ) + { + auto handleIt = m_handles.find( childType ); + assert( handleIt != m_handles.end() ); + + std::string type = stripPrefix( childType, "Vk" ); + std::string deleterType = handleIt->second.deletePool.empty() ? "Object" : "Pool"; + std::string deleterAction = ( handleIt->second.deleteCommand.substr( 2, 4 ) == "Free" ) ? "Free" : "Destroy"; + std::string deleterParent = parentType.empty() ? "NoParent" : stripPrefix( parentType, "Vk" ); + std::string deleterPool = + handleIt->second.deletePool.empty() ? "" : ", " + stripPrefix( handleIt->second.deletePool, "Vk" ); + + std::string enter, leave; + std::tie( enter, leave ) = generateProtection( handleIt->first, !handleIt->second.alias.empty() ); + + str += enter + " template class UniqueHandleTraits<" + type + + ", Dispatch> { public: using deleter = " + deleterType + deleterAction + "<" + deleterParent + deleterPool + + ", Dispatch>; };\n" + " using Unique" + + type + " = UniqueHandle<" + type + ", VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>;\n"; + + if ( !handleIt->second.alias.empty() ) + { + str += " using Unique" + stripPrefix( handleIt->second.alias, "Vk" ) + " = UniqueHandle<" + type + + ", VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>;\n"; + } + str += leave; + } + str += "#endif /*VULKAN_HPP_NO_SMART_HANDLE*/\n"; + return str; } std::string VulkanHppGenerator::getPlatform( std::string const & title ) const @@ -14689,7 +14738,7 @@ void VulkanHppGenerator::rescheduleRAIIHandle( std::string & { auto parentIt = m_handles.find( handle.second.parent ); assert( parentIt != m_handles.end() ); - appendRAIIHandle( str, *parentIt, listedHandles, specialFunctions ); + str += generateRAIIHandle( *parentIt, listedHandles, specialFunctions ); } for ( auto constructorIt : handle.second.constructorIts ) @@ -14699,7 +14748,7 @@ void VulkanHppGenerator::rescheduleRAIIHandle( std::string & auto handleIt = m_handles.find( param.type.type ); if ( handleIt != m_handles.end() && ( listedHandles.find( param.type.type ) == listedHandles.end() ) ) { - appendRAIIHandle( str, *handleIt, listedHandles, specialFunctions ); + str += generateRAIIHandle( *handleIt, listedHandles, specialFunctions ); } } } @@ -14707,17 +14756,15 @@ void VulkanHppGenerator::rescheduleRAIIHandle( std::string & std::vector VulkanHppGenerator::selectCommandsByHandle( std::vector const & requireData, std::set const & handleCommands, - std::set & listedCommands ) const + std::set & listedCommands ) const { std::vector selectedCommands; for ( auto const & require : requireData ) { for ( auto const & command : require.commands ) { - if ( ( handleCommands.find( command ) != handleCommands.end() ) && - ( listedCommands.find( command ) == listedCommands.end() ) ) + if ( ( handleCommands.find( command ) != handleCommands.end() ) && listedCommands.insert( command ).second ) { - listedCommands.insert( command ); selectedCommands.push_back( command ); } } diff --git a/VulkanHppGenerator.hpp b/VulkanHppGenerator.hpp index 5fbe5ff..315d28c 100644 --- a/VulkanHppGenerator.hpp +++ b/VulkanHppGenerator.hpp @@ -317,7 +317,9 @@ private: private: void addCommand( std::string const & name, CommandData & commandData ); void addMissingFlagBits( std::vector & requireData, std::string const & referencedIn ); - std::string addTitleAndProtection( std::string const & str, std::string const & title ) const; + std::string addTitleAndProtection( std::string const & title, + std::string const & strIf, + std::string const & strElse = {} ) const; void appendDispatchLoaderDynamicCommands( std::vector const & requireData, std::set & listedCommands, std::string const & title, @@ -325,144 +327,19 @@ private: std::string & initialCommandAssignments, std::string & instanceCommandAssignments, std::string & deviceCommandAssignments ) const; - void appendFunctionHeaderArgumentEnhancedVector( std::string & str, - ParamData const & param, - std::string const & strippedParameterName, - bool hasSizeParam, - bool isTemplateParam ) const; - void appendRAIIHandle( std::string & str, - std::pair const & handle, - std::set & listedHandles, - std::set const & specialFunctions ) const; - void appendRAIIHandleContext( std::string & str, - std::pair const & handle, - std::set const & specialFunctions ) const; - void appendStruct( std::string & str, - std::pair const & structure, - std::set & listedStructs ) const; - void appendStructAssignmentOperators( std::string & str, - std::pair const & structure, - std::string const & prefix ) const; - void appendStructCompareOperators( std::string & str, std::pair const & structure ) const; - void appendStructConstructors( std::string & str, - std::pair const & structData, - std::string const & prefix ) const; - void appendStructConstructorsEnhanced( std::string & str, - std::pair const & structData, - std::string const & prefix ) const; - bool appendStructConstructorArgument( std::string & str, - bool listedArgument, - MemberData const & memberData, - bool withDefault ) const; - std::string appendStructMembers( std::string & str, - std::pair const & structData, - std::string const & prefix ) const; - void appendStructSetter( std::string & str, - std::string const & structureName, - std::vector const & memberData, - size_t index ) const; - void appendStructSubConstructor( std::string & str, - std::pair const & structData, - std::string const & prefix ) const; - void appendStructure( std::string & str, std::pair const & structure ) const; - void appendType( std::string & str, std::string const & typeName, std::set & listedTypes ) const; - void appendUnion( std::string & str, std::pair const & structure ) const; - void appendUniqueTypes( std::string & str, - std::string const & parentType, - std::set const & childrenTypes ) const; + void appendRAIIDispatcherCommands( std::vector const & requireData, + std::set & listedCommands, + std::string const & title, + std::string & contextInitializers, + std::string & contextMembers, + std::string & deviceAssignments, + std::string & deviceMembers, + std::string & instanceAssignments, + std::string & instanceMembers ) const; bool checkEquivalentSingularConstructor( std::vector::const_iterator> const & constructorIts, std::map::const_iterator constructorIt, std::vector::const_iterator lenIt ) const; - std::string constructArgumentListEnhanced( std::vector const & params, - std::set const & skippedParams, - std::set const & singularParams, - bool definition, - bool withAllocators, - bool structureChain, - bool withDispatcher ) const; - std::string constructArgumentListStandard( std::vector const & params, - std::set const & skippedParams ) const; - std::string constructCallArgumentEnhanced( std::vector const & params, - size_t paramIndex, - bool nonConstPointerAsNullptr, - std::set const & singularParams, - std::vector const & returnParamIndices, - bool raiiHandleMemberFunction ) const; - std::string constructCallArgumentsEnhanced( std::vector const & params, - size_t initialSkipCount, - bool nonConstPointerAsNullptr, - std::set const & singularParams, - std::vector const & returnParamIndices, - bool raiiHandleMemberFunction ) const; - std::string constructCallArgumentsStandard( std::string const & handle, std::vector const & params ) const; - std::string constructCommandBoolGetValue( std::string const & name, - CommandData const & commandData, - size_t initialSkipCount, - bool definition, - size_t nonConstPointerIndex ) const; - std::string constructCommandResult( std::string const & name, - CommandData const & commandData, - size_t initialSkipCount, - bool definition, - std::map const & vectorParamIndices ) const; - std::string constructCommandResultEnumerate( std::string const & name, - CommandData const & commandData, - size_t initialSkipCount, - bool definition, - std::pair const & vectorParamIndices, - bool withAllocators ) const; - std::string constructCommandResultEnumerateChained( std::string const & name, - CommandData const & commandData, - size_t initialSkipCount, - bool definition, - std::pair const & vectorParamIndex, - std::vector const & returnParamIndices, - bool withAllocator ) const; - std::string constructCommandResultEnumerateTwoVectors( std::string const & name, - CommandData const & commandData, - size_t initialSkipCount, - bool definition, - std::map const & vectorParamIndices, - std::vector const & returnParamIndices, - bool withAllocators ) const; - std::string constructCommandResultEnumerateTwoVectorsDeprecated( std::string const & name, - CommandData const & commandData, - size_t initialSkipCount, - bool definition, - std::map const & vectorParamIndices, - bool withAllocators ) const; - std::string constructCommandResultGetChain( std::string const & name, - CommandData const & commandData, - size_t initialSkipCount, - bool definition, - size_t nonConstPointerIndex ) const; - std::string constructCommandResultGetHandleUnique( std::string const & name, - CommandData const & commandData, - size_t initialSkipCount, - bool definition, - size_t nonConstPointerIndex ) const; - std::string constructCommandResultGetTwoValues( std::string const & name, - CommandData const & commandData, - size_t initialSkipCount, - bool definition, - std::vector const & nonConstPointerParamIndices ) const; - std::string constructCommandResultGetTwoVectors( std::string const & name, - CommandData const & commandData, - size_t initialSkipCount, - bool definition, - std::map const & vectorParamIndices ) const; - std::string constructCommandResultGetValue( std::string const & name, - CommandData const & commandData, - size_t initialSkipCount, - bool definition, - size_t nonConstPointerIndex ) const; - std::string constructCommandResultGetValueDeprecated( std::string const & name, - CommandData const & commandData, - size_t initialSkipCount, - bool definition, - std::map const & vectorParamIndices, - size_t returnParamIndex ) const; std::string constructCommandResultGetVector( std::string const & name, CommandData const & commandData, size_t initialSkipCount, @@ -881,14 +758,41 @@ private: std::map determineVectorParamIndicesNew( std::vector const & params ) const; void distributeSecondLevelCommands( std::set const & specialFunctions ); std::string findBaseName( std::string aliasName, std::map const & aliases ) const; + std::string generateArgumentListEnhanced( std::vector const & params, + std::set const & skippedParams, + std::set const & singularParams, + bool definition, + bool withAllocators, + bool structureChain, + bool withDispatcher ) const; + std::string generateArgumentListStandard( std::vector const & params, + std::set const & skippedParams ) const; std::string generateBitmask( std::map::const_iterator bitmaskIt ) const; std::string generateBitmasks( std::vector const & requireData, std::set & listedBitmasks, std::string const & title ) const; + std::string generateCallArgumentEnhanced( std::vector const & params, + size_t paramIndex, + bool nonConstPointerAsNullptr, + std::set const & singularParams, + std::vector const & returnParamIndices, + bool raiiHandleMemberFunction ) const; + std::string generateCallArgumentsEnhanced( std::vector const & params, + size_t initialSkipCount, + bool nonConstPointerAsNullptr, + std::set const & singularParams, + std::vector const & returnParamIndices, + bool raiiHandleMemberFunction ) const; + std::string generateCallArgumentsStandard( std::string const & handle, std::vector const & params ) const; std::string generateCommand( std::string const & name, CommandData const & commandData, size_t initialSkipCount, bool definition ) const; + std::string generateCommandBoolGetValue( std::string const & name, + CommandData const & commandData, + size_t initialSkipCount, + bool definition, + size_t nonConstPointerIndex ) const; std::string generateCommandDefinitions( std::vector const & requireData, std::set & listedCommands, std::string const & title ) const; @@ -901,6 +805,11 @@ private: CommandData const & commandData, size_t initialSkipCount, bool definition ) const; + std::string generateCommandResult( std::string const & name, + CommandData const & commandData, + size_t initialSkipCount, + bool definition, + std::map const & vectorParamIndices ) const; std::string generateCommandResult0Return( std::string const & name, CommandData const & commandData, size_t initialSkipCount, @@ -920,6 +829,63 @@ private: size_t initialSkipCount, bool definition, std::vector const & returnParamIndices ) const; + std::string generateCommandResultEnumerate( std::string const & name, + CommandData const & commandData, + size_t initialSkipCount, + bool definition, + std::pair const & vectorParamIndices, + bool withAllocators ) const; + std::string generateCommandResultEnumerateChained( std::string const & name, + CommandData const & commandData, + size_t initialSkipCount, + bool definition, + std::pair const & vectorParamIndex, + std::vector const & returnParamIndices, + bool withAllocator ) const; + std::string generateCommandResultEnumerateTwoVectors( std::string const & name, + CommandData const & commandData, + size_t initialSkipCount, + bool definition, + std::map const & vectorParamIndices, + std::vector const & returnParamIndices, + bool withAllocators ) const; + std::string generateCommandResultEnumerateTwoVectorsDeprecated( std::string const & name, + CommandData const & commandData, + size_t initialSkipCount, + bool definition, + std::map const & vectorParamIndices, + bool withAllocators ) const; + std::string generateCommandResultGetChain( std::string const & name, + CommandData const & commandData, + size_t initialSkipCount, + bool definition, + size_t nonConstPointerIndex ) const; + std::string generateCommandResultGetHandleUnique( std::string const & name, + CommandData const & commandData, + size_t initialSkipCount, + bool definition, + size_t nonConstPointerIndex ) const; + std::string generateCommandResultGetTwoValues( std::string const & name, + CommandData const & commandData, + size_t initialSkipCount, + bool definition, + std::vector const & nonConstPointerParamIndices ) const; + std::string generateCommandResultGetTwoVectors( std::string const & name, + CommandData const & commandData, + size_t initialSkipCount, + bool definition, + std::map const & vectorParamIndices ) const; + std::string generateCommandResultGetValue( std::string const & name, + CommandData const & commandData, + size_t initialSkipCount, + bool definition, + size_t nonConstPointerIndex ) const; + std::string generateCommandResultGetValueDeprecated( std::string const & name, + CommandData const & commandData, + size_t initialSkipCount, + bool definition, + std::map const & vectorParamIndices, + size_t returnParamIndex ) const; std::string generateCommandSetStandard( std::string const & name, CommandData const & commandData, size_t initialSkipCount, @@ -1074,6 +1040,10 @@ private: std::map const & vectorParamIndices, bool skip, bool isTemplateParam ) const; + std::string generateFunctionHeaderArgumentEnhancedVector( ParamData const & param, + std::string const & strippedParameterName, + bool hasSizeParam, + bool isTemplateParam ) const; std::string generateHandle( std::pair const & handle, std::set & listedHandles ) const; std::string generateHashStructures( std::vector const & requireData, std::string const & title ) const; @@ -1088,13 +1058,40 @@ private: std::string generateRAIICommandDefinitions( std::vector const & requireData, std::set & listedCommands, std::string const & title ) const; + std::string generateRAIIHandle( std::pair const & handle, + std::set & listedHandles, + std::set const & specialFunctions ) const; + std::string generateRAIIHandleContext( std::pair const & handle, + std::set const & specialFunctions ) const; std::string generateSizeCheck( std::vector::const_iterator> const & arrayIts, std::string const & structName, std::string const & prefix, bool mutualExclusiveLens ) const; + std::string generateStruct( std::pair const & structure, + std::set & listedStructs ) const; + std::string generateStructAssignmentOperators( std::pair const & structure, + std::string const & prefix ) const; + std::string generateStructCompareOperators( std::pair const & structure ) const; + std::string + generateStructConstructorArgument( bool listedArgument, MemberData const & memberData, bool withDefault ) const; + std::string generateStructConstructors( std::pair const & structData, + std::string const & prefix ) const; + std::string generateStructConstructorsEnhanced( std::pair const & structData, + std::string const & prefix ) const; std::string generateStructExtendsStructs( std::vector const & requireData, std::set & listedStructs, std::string const & title ) const; + std::pair generateStructMembers( std::pair const & structData, + std::string const & prefix ) const; + std::string generateStructSetter( std::string const & structureName, + std::vector const & memberData, + size_t index ) const; + std::string generateStructSubConstructor( std::pair const & structData, + std::string const & prefix ) const; + std::string generateStructure( std::pair const & structure ) const; + std::string generateType( std::string const & typeName, std::set & listedTypes ) const; + std::string generateUnion( std::pair const & structure ) const; + std::string generateUniqueTypes( std::string const & parentType, std::set const & childrenTypes ) const; std::string getPlatform( std::string const & title ) const; std::pair getPoolTypeAndName( std::string const & type ) const; std::string getVectorSize( std::vector const & params, @@ -1191,19 +1188,19 @@ private: void readType( tinyxml2::XMLElement const * element ); void readTypeEnum( tinyxml2::XMLElement const * element, std::map const & attributes ); void readTypeInclude( tinyxml2::XMLElement const * element, std::map const & attributes ); - TypeInfo readTypeInfo( tinyxml2::XMLElement const * element ) const; - void readTypes( tinyxml2::XMLElement const * element ); - void registerDeleter( std::string const & name, std::pair const & commandData ); - void renameFunctionParameters(); - void rescheduleRAIIHandle( std::string & str, - std::pair const & handle, - std::set & listedHandles, - std::set const & specialFunctions ) const; + TypeInfo readTypeInfo( tinyxml2::XMLElement const * element ) const; + void readTypes( tinyxml2::XMLElement const * element ); + void registerDeleter( std::string const & name, std::pair const & commandData ); + void renameFunctionParameters(); + void rescheduleRAIIHandle( std::string & str, + std::pair const & handle, + std::set & listedHandles, + std::set const & specialFunctions ) const; std::vector selectCommandsByHandle( std::vector const & requireData, std::set const & handleCommands, std::set & listedCommands ) const; void setVulkanLicenseHeader( int line, std::string const & comment ); - std::string toString( TypeCategory category ); + std::string toString( TypeCategory category ); private: std::map m_baseTypes; diff --git a/vulkan/vulkan_raii.hpp b/vulkan/vulkan_raii.hpp index 715efe4..2ffa37f 100644 --- a/vulkan/vulkan_raii.hpp +++ b/vulkan/vulkan_raii.hpp @@ -37,21 +37,27 @@ namespace VULKAN_HPP_NAMESPACE public: ContextDispatcher( PFN_vkGetInstanceProcAddr getProcAddr ) : vkGetInstanceProcAddr( getProcAddr ) + //=== VK_VERSION_1_0 === , vkCreateInstance( PFN_vkCreateInstance( getProcAddr( NULL, "vkCreateInstance" ) ) ) , vkEnumerateInstanceExtensionProperties( PFN_vkEnumerateInstanceExtensionProperties( getProcAddr( NULL, "vkEnumerateInstanceExtensionProperties" ) ) ) , vkEnumerateInstanceLayerProperties( PFN_vkEnumerateInstanceLayerProperties( getProcAddr( NULL, "vkEnumerateInstanceLayerProperties" ) ) ) + //=== VK_VERSION_1_1 === , vkEnumerateInstanceVersion( PFN_vkEnumerateInstanceVersion( getProcAddr( NULL, "vkEnumerateInstanceVersion" ) ) ) {} public: - PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr = 0; + PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr = 0; + + //=== VK_VERSION_1_0 === PFN_vkCreateInstance vkCreateInstance = 0; PFN_vkEnumerateInstanceExtensionProperties vkEnumerateInstanceExtensionProperties = 0; PFN_vkEnumerateInstanceLayerProperties vkEnumerateInstanceLayerProperties = 0; - PFN_vkEnumerateInstanceVersion vkEnumerateInstanceVersion = 0; + + //=== VK_VERSION_1_1 === + PFN_vkEnumerateInstanceVersion vkEnumerateInstanceVersion = 0; }; class InstanceDispatcher : public DispatchLoaderBase @@ -65,485 +71,610 @@ namespace VULKAN_HPP_NAMESPACE void init( VkInstance instance ) { - vkAcquireDrmDisplayEXT = - PFN_vkAcquireDrmDisplayEXT( vkGetInstanceProcAddr( instance, "vkAcquireDrmDisplayEXT" ) ); -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - vkAcquireWinrtDisplayNV = - PFN_vkAcquireWinrtDisplayNV( vkGetInstanceProcAddr( instance, "vkAcquireWinrtDisplayNV" ) ); -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ -# if defined( VK_USE_PLATFORM_XLIB_XRANDR_EXT ) - vkAcquireXlibDisplayEXT = - PFN_vkAcquireXlibDisplayEXT( vkGetInstanceProcAddr( instance, "vkAcquireXlibDisplayEXT" ) ); -# endif /*VK_USE_PLATFORM_XLIB_XRANDR_EXT*/ -# if defined( VK_USE_PLATFORM_ANDROID_KHR ) - vkCreateAndroidSurfaceKHR = - PFN_vkCreateAndroidSurfaceKHR( vkGetInstanceProcAddr( instance, "vkCreateAndroidSurfaceKHR" ) ); -# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - vkCreateDebugReportCallbackEXT = - PFN_vkCreateDebugReportCallbackEXT( vkGetInstanceProcAddr( instance, "vkCreateDebugReportCallbackEXT" ) ); - vkCreateDebugUtilsMessengerEXT = - PFN_vkCreateDebugUtilsMessengerEXT( vkGetInstanceProcAddr( instance, "vkCreateDebugUtilsMessengerEXT" ) ); - vkCreateDevice = PFN_vkCreateDevice( vkGetInstanceProcAddr( instance, "vkCreateDevice" ) ); -# if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) - vkCreateDirectFBSurfaceEXT = - PFN_vkCreateDirectFBSurfaceEXT( vkGetInstanceProcAddr( instance, "vkCreateDirectFBSurfaceEXT" ) ); -# endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ - vkCreateDisplayModeKHR = - PFN_vkCreateDisplayModeKHR( vkGetInstanceProcAddr( instance, "vkCreateDisplayModeKHR" ) ); - vkCreateDisplayPlaneSurfaceKHR = - PFN_vkCreateDisplayPlaneSurfaceKHR( vkGetInstanceProcAddr( instance, "vkCreateDisplayPlaneSurfaceKHR" ) ); - vkCreateHeadlessSurfaceEXT = - PFN_vkCreateHeadlessSurfaceEXT( vkGetInstanceProcAddr( instance, "vkCreateHeadlessSurfaceEXT" ) ); -# if defined( VK_USE_PLATFORM_IOS_MVK ) - vkCreateIOSSurfaceMVK = PFN_vkCreateIOSSurfaceMVK( vkGetInstanceProcAddr( instance, "vkCreateIOSSurfaceMVK" ) ); -# endif /*VK_USE_PLATFORM_IOS_MVK*/ -# if defined( VK_USE_PLATFORM_FUCHSIA ) - vkCreateImagePipeSurfaceFUCHSIA = - PFN_vkCreateImagePipeSurfaceFUCHSIA( vkGetInstanceProcAddr( instance, "vkCreateImagePipeSurfaceFUCHSIA" ) ); -# endif /*VK_USE_PLATFORM_FUCHSIA*/ -# if defined( VK_USE_PLATFORM_MACOS_MVK ) - vkCreateMacOSSurfaceMVK = - PFN_vkCreateMacOSSurfaceMVK( vkGetInstanceProcAddr( instance, "vkCreateMacOSSurfaceMVK" ) ); -# endif /*VK_USE_PLATFORM_MACOS_MVK*/ -# if defined( VK_USE_PLATFORM_METAL_EXT ) - vkCreateMetalSurfaceEXT = - PFN_vkCreateMetalSurfaceEXT( vkGetInstanceProcAddr( instance, "vkCreateMetalSurfaceEXT" ) ); -# endif /*VK_USE_PLATFORM_METAL_EXT*/ -# if defined( VK_USE_PLATFORM_SCREEN_QNX ) - vkCreateScreenSurfaceQNX = - PFN_vkCreateScreenSurfaceQNX( vkGetInstanceProcAddr( instance, "vkCreateScreenSurfaceQNX" ) ); -# endif /*VK_USE_PLATFORM_SCREEN_QNX*/ -# if defined( VK_USE_PLATFORM_GGP ) - vkCreateStreamDescriptorSurfaceGGP = PFN_vkCreateStreamDescriptorSurfaceGGP( - vkGetInstanceProcAddr( instance, "vkCreateStreamDescriptorSurfaceGGP" ) ); -# endif /*VK_USE_PLATFORM_GGP*/ -# if defined( VK_USE_PLATFORM_VI_NN ) - vkCreateViSurfaceNN = PFN_vkCreateViSurfaceNN( vkGetInstanceProcAddr( instance, "vkCreateViSurfaceNN" ) ); -# endif /*VK_USE_PLATFORM_VI_NN*/ -# if defined( VK_USE_PLATFORM_WAYLAND_KHR ) - vkCreateWaylandSurfaceKHR = - PFN_vkCreateWaylandSurfaceKHR( vkGetInstanceProcAddr( instance, "vkCreateWaylandSurfaceKHR" ) ); -# endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - vkCreateWin32SurfaceKHR = - PFN_vkCreateWin32SurfaceKHR( vkGetInstanceProcAddr( instance, "vkCreateWin32SurfaceKHR" ) ); -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ -# if defined( VK_USE_PLATFORM_XCB_KHR ) - vkCreateXcbSurfaceKHR = PFN_vkCreateXcbSurfaceKHR( vkGetInstanceProcAddr( instance, "vkCreateXcbSurfaceKHR" ) ); -# endif /*VK_USE_PLATFORM_XCB_KHR*/ -# if defined( VK_USE_PLATFORM_XLIB_KHR ) - vkCreateXlibSurfaceKHR = - PFN_vkCreateXlibSurfaceKHR( vkGetInstanceProcAddr( instance, "vkCreateXlibSurfaceKHR" ) ); -# endif /*VK_USE_PLATFORM_XLIB_KHR*/ - vkDebugReportMessageEXT = - PFN_vkDebugReportMessageEXT( vkGetInstanceProcAddr( instance, "vkDebugReportMessageEXT" ) ); - vkDestroyDebugReportCallbackEXT = - PFN_vkDestroyDebugReportCallbackEXT( vkGetInstanceProcAddr( instance, "vkDestroyDebugReportCallbackEXT" ) ); - vkDestroyDebugUtilsMessengerEXT = - PFN_vkDestroyDebugUtilsMessengerEXT( vkGetInstanceProcAddr( instance, "vkDestroyDebugUtilsMessengerEXT" ) ); - vkDestroyInstance = PFN_vkDestroyInstance( vkGetInstanceProcAddr( instance, "vkDestroyInstance" ) ); - vkDestroySurfaceKHR = PFN_vkDestroySurfaceKHR( vkGetInstanceProcAddr( instance, "vkDestroySurfaceKHR" ) ); + //=== VK_VERSION_1_0 === + vkDestroyInstance = PFN_vkDestroyInstance( vkGetInstanceProcAddr( instance, "vkDestroyInstance" ) ); + vkEnumeratePhysicalDevices = + PFN_vkEnumeratePhysicalDevices( vkGetInstanceProcAddr( instance, "vkEnumeratePhysicalDevices" ) ); + vkGetPhysicalDeviceFeatures = + PFN_vkGetPhysicalDeviceFeatures( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFeatures" ) ); + vkGetPhysicalDeviceFormatProperties = PFN_vkGetPhysicalDeviceFormatProperties( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFormatProperties" ) ); + vkGetPhysicalDeviceImageFormatProperties = PFN_vkGetPhysicalDeviceImageFormatProperties( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceImageFormatProperties" ) ); + vkGetPhysicalDeviceProperties = + PFN_vkGetPhysicalDeviceProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceProperties" ) ); + vkGetPhysicalDeviceQueueFamilyProperties = PFN_vkGetPhysicalDeviceQueueFamilyProperties( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceQueueFamilyProperties" ) ); + vkGetPhysicalDeviceMemoryProperties = PFN_vkGetPhysicalDeviceMemoryProperties( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceMemoryProperties" ) ); + vkGetInstanceProcAddr = PFN_vkGetInstanceProcAddr( vkGetInstanceProcAddr( instance, "vkGetInstanceProcAddr" ) ); + vkCreateDevice = PFN_vkCreateDevice( vkGetInstanceProcAddr( instance, "vkCreateDevice" ) ); vkEnumerateDeviceExtensionProperties = PFN_vkEnumerateDeviceExtensionProperties( vkGetInstanceProcAddr( instance, "vkEnumerateDeviceExtensionProperties" ) ); vkEnumerateDeviceLayerProperties = PFN_vkEnumerateDeviceLayerProperties( vkGetInstanceProcAddr( instance, "vkEnumerateDeviceLayerProperties" ) ); + vkGetPhysicalDeviceSparseImageFormatProperties = PFN_vkGetPhysicalDeviceSparseImageFormatProperties( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSparseImageFormatProperties" ) ); + + //=== VK_VERSION_1_1 === vkEnumeratePhysicalDeviceGroups = PFN_vkEnumeratePhysicalDeviceGroups( vkGetInstanceProcAddr( instance, "vkEnumeratePhysicalDeviceGroups" ) ); + vkGetPhysicalDeviceFeatures2 = + PFN_vkGetPhysicalDeviceFeatures2( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFeatures2" ) ); + vkGetPhysicalDeviceProperties2 = + PFN_vkGetPhysicalDeviceProperties2( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceProperties2" ) ); + vkGetPhysicalDeviceFormatProperties2 = PFN_vkGetPhysicalDeviceFormatProperties2( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFormatProperties2" ) ); + vkGetPhysicalDeviceImageFormatProperties2 = PFN_vkGetPhysicalDeviceImageFormatProperties2( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceImageFormatProperties2" ) ); + vkGetPhysicalDeviceQueueFamilyProperties2 = PFN_vkGetPhysicalDeviceQueueFamilyProperties2( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceQueueFamilyProperties2" ) ); + vkGetPhysicalDeviceMemoryProperties2 = PFN_vkGetPhysicalDeviceMemoryProperties2( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceMemoryProperties2" ) ); + vkGetPhysicalDeviceSparseImageFormatProperties2 = PFN_vkGetPhysicalDeviceSparseImageFormatProperties2( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSparseImageFormatProperties2" ) ); + vkGetPhysicalDeviceExternalBufferProperties = PFN_vkGetPhysicalDeviceExternalBufferProperties( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalBufferProperties" ) ); + vkGetPhysicalDeviceExternalFenceProperties = PFN_vkGetPhysicalDeviceExternalFenceProperties( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalFenceProperties" ) ); + vkGetPhysicalDeviceExternalSemaphoreProperties = PFN_vkGetPhysicalDeviceExternalSemaphoreProperties( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalSemaphoreProperties" ) ); + + //=== VK_EXT_acquire_drm_display === + vkAcquireDrmDisplayEXT = + PFN_vkAcquireDrmDisplayEXT( vkGetInstanceProcAddr( instance, "vkAcquireDrmDisplayEXT" ) ); + vkGetDrmDisplayEXT = PFN_vkGetDrmDisplayEXT( vkGetInstanceProcAddr( instance, "vkGetDrmDisplayEXT" ) ); + +# if defined( VK_USE_PLATFORM_XLIB_XRANDR_EXT ) + //=== VK_EXT_acquire_xlib_display === + vkAcquireXlibDisplayEXT = + PFN_vkAcquireXlibDisplayEXT( vkGetInstanceProcAddr( instance, "vkAcquireXlibDisplayEXT" ) ); + vkGetRandROutputDisplayEXT = + PFN_vkGetRandROutputDisplayEXT( vkGetInstanceProcAddr( instance, "vkGetRandROutputDisplayEXT" ) ); +# endif /*VK_USE_PLATFORM_XLIB_XRANDR_EXT*/ + + //=== VK_EXT_calibrated_timestamps === + vkGetPhysicalDeviceCalibrateableTimeDomainsEXT = PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceCalibrateableTimeDomainsEXT" ) ); + + //=== VK_EXT_debug_report === + vkCreateDebugReportCallbackEXT = + PFN_vkCreateDebugReportCallbackEXT( vkGetInstanceProcAddr( instance, "vkCreateDebugReportCallbackEXT" ) ); + vkDestroyDebugReportCallbackEXT = + PFN_vkDestroyDebugReportCallbackEXT( vkGetInstanceProcAddr( instance, "vkDestroyDebugReportCallbackEXT" ) ); + vkDebugReportMessageEXT = + PFN_vkDebugReportMessageEXT( vkGetInstanceProcAddr( instance, "vkDebugReportMessageEXT" ) ); + + //=== VK_EXT_debug_utils === + vkCreateDebugUtilsMessengerEXT = + PFN_vkCreateDebugUtilsMessengerEXT( vkGetInstanceProcAddr( instance, "vkCreateDebugUtilsMessengerEXT" ) ); + vkDestroyDebugUtilsMessengerEXT = + PFN_vkDestroyDebugUtilsMessengerEXT( vkGetInstanceProcAddr( instance, "vkDestroyDebugUtilsMessengerEXT" ) ); + vkSubmitDebugUtilsMessageEXT = + PFN_vkSubmitDebugUtilsMessageEXT( vkGetInstanceProcAddr( instance, "vkSubmitDebugUtilsMessageEXT" ) ); + + //=== VK_EXT_direct_mode_display === + vkReleaseDisplayEXT = PFN_vkReleaseDisplayEXT( vkGetInstanceProcAddr( instance, "vkReleaseDisplayEXT" ) ); + +# if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) + //=== VK_EXT_directfb_surface === + vkCreateDirectFBSurfaceEXT = + PFN_vkCreateDirectFBSurfaceEXT( vkGetInstanceProcAddr( instance, "vkCreateDirectFBSurfaceEXT" ) ); + vkGetPhysicalDeviceDirectFBPresentationSupportEXT = PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceDirectFBPresentationSupportEXT" ) ); +# endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ + + //=== VK_EXT_display_surface_counter === + vkGetPhysicalDeviceSurfaceCapabilities2EXT = PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfaceCapabilities2EXT" ) ); + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_EXT_full_screen_exclusive === + vkGetPhysicalDeviceSurfacePresentModes2EXT = PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfacePresentModes2EXT" ) ); +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_headless_surface === + vkCreateHeadlessSurfaceEXT = + PFN_vkCreateHeadlessSurfaceEXT( vkGetInstanceProcAddr( instance, "vkCreateHeadlessSurfaceEXT" ) ); + +# if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_metal_surface === + vkCreateMetalSurfaceEXT = + PFN_vkCreateMetalSurfaceEXT( vkGetInstanceProcAddr( instance, "vkCreateMetalSurfaceEXT" ) ); +# endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_EXT_sample_locations === + vkGetPhysicalDeviceMultisamplePropertiesEXT = PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceMultisamplePropertiesEXT" ) ); + + //=== VK_EXT_tooling_info === + vkGetPhysicalDeviceToolPropertiesEXT = PFN_vkGetPhysicalDeviceToolPropertiesEXT( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceToolPropertiesEXT" ) ); + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_imagepipe_surface === + vkCreateImagePipeSurfaceFUCHSIA = + PFN_vkCreateImagePipeSurfaceFUCHSIA( vkGetInstanceProcAddr( instance, "vkCreateImagePipeSurfaceFUCHSIA" ) ); +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + +# if defined( VK_USE_PLATFORM_GGP ) + //=== VK_GGP_stream_descriptor_surface === + vkCreateStreamDescriptorSurfaceGGP = PFN_vkCreateStreamDescriptorSurfaceGGP( + vkGetInstanceProcAddr( instance, "vkCreateStreamDescriptorSurfaceGGP" ) ); +# endif /*VK_USE_PLATFORM_GGP*/ + +# if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_KHR_android_surface === + vkCreateAndroidSurfaceKHR = + PFN_vkCreateAndroidSurfaceKHR( vkGetInstanceProcAddr( instance, "vkCreateAndroidSurfaceKHR" ) ); +# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + + //=== VK_KHR_device_group === + vkGetPhysicalDevicePresentRectanglesKHR = PFN_vkGetPhysicalDevicePresentRectanglesKHR( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDevicePresentRectanglesKHR" ) ); + + //=== VK_KHR_device_group_creation === vkEnumeratePhysicalDeviceGroupsKHR = PFN_vkEnumeratePhysicalDeviceGroupsKHR( vkGetInstanceProcAddr( instance, "vkEnumeratePhysicalDeviceGroupsKHR" ) ); if ( !vkEnumeratePhysicalDeviceGroups ) vkEnumeratePhysicalDeviceGroups = vkEnumeratePhysicalDeviceGroupsKHR; - vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR = - PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR( - vkGetInstanceProcAddr( instance, "vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR" ) ); - vkEnumeratePhysicalDevices = - PFN_vkEnumeratePhysicalDevices( vkGetInstanceProcAddr( instance, "vkEnumeratePhysicalDevices" ) ); - vkGetDisplayModeProperties2KHR = - PFN_vkGetDisplayModeProperties2KHR( vkGetInstanceProcAddr( instance, "vkGetDisplayModeProperties2KHR" ) ); - vkGetDisplayModePropertiesKHR = - PFN_vkGetDisplayModePropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetDisplayModePropertiesKHR" ) ); - vkGetDisplayPlaneCapabilities2KHR = PFN_vkGetDisplayPlaneCapabilities2KHR( - vkGetInstanceProcAddr( instance, "vkGetDisplayPlaneCapabilities2KHR" ) ); - vkGetDisplayPlaneCapabilitiesKHR = - PFN_vkGetDisplayPlaneCapabilitiesKHR( vkGetInstanceProcAddr( instance, "vkGetDisplayPlaneCapabilitiesKHR" ) ); - vkGetDisplayPlaneSupportedDisplaysKHR = PFN_vkGetDisplayPlaneSupportedDisplaysKHR( - vkGetInstanceProcAddr( instance, "vkGetDisplayPlaneSupportedDisplaysKHR" ) ); - vkGetDrmDisplayEXT = PFN_vkGetDrmDisplayEXT( vkGetInstanceProcAddr( instance, "vkGetDrmDisplayEXT" ) ); - vkGetInstanceProcAddr = PFN_vkGetInstanceProcAddr( vkGetInstanceProcAddr( instance, "vkGetInstanceProcAddr" ) ); - vkGetPhysicalDeviceCalibrateableTimeDomainsEXT = PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT( - vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceCalibrateableTimeDomainsEXT" ) ); - vkGetPhysicalDeviceCooperativeMatrixPropertiesNV = PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV( - vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceCooperativeMatrixPropertiesNV" ) ); -# if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) - vkGetPhysicalDeviceDirectFBPresentationSupportEXT = PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT( - vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceDirectFBPresentationSupportEXT" ) ); -# endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ - vkGetPhysicalDeviceDisplayPlaneProperties2KHR = PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR( - vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceDisplayPlaneProperties2KHR" ) ); - vkGetPhysicalDeviceDisplayPlanePropertiesKHR = PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR( - vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceDisplayPlanePropertiesKHR" ) ); - vkGetPhysicalDeviceDisplayProperties2KHR = PFN_vkGetPhysicalDeviceDisplayProperties2KHR( - vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceDisplayProperties2KHR" ) ); + + //=== VK_KHR_display === vkGetPhysicalDeviceDisplayPropertiesKHR = PFN_vkGetPhysicalDeviceDisplayPropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceDisplayPropertiesKHR" ) ); - vkGetPhysicalDeviceExternalBufferProperties = PFN_vkGetPhysicalDeviceExternalBufferProperties( - vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalBufferProperties" ) ); - vkGetPhysicalDeviceExternalBufferPropertiesKHR = PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR( - vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalBufferPropertiesKHR" ) ); - if ( !vkGetPhysicalDeviceExternalBufferProperties ) - vkGetPhysicalDeviceExternalBufferProperties = vkGetPhysicalDeviceExternalBufferPropertiesKHR; - vkGetPhysicalDeviceExternalFenceProperties = PFN_vkGetPhysicalDeviceExternalFenceProperties( - vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalFenceProperties" ) ); + vkGetPhysicalDeviceDisplayPlanePropertiesKHR = PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceDisplayPlanePropertiesKHR" ) ); + vkGetDisplayPlaneSupportedDisplaysKHR = PFN_vkGetDisplayPlaneSupportedDisplaysKHR( + vkGetInstanceProcAddr( instance, "vkGetDisplayPlaneSupportedDisplaysKHR" ) ); + vkGetDisplayModePropertiesKHR = + PFN_vkGetDisplayModePropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetDisplayModePropertiesKHR" ) ); + vkCreateDisplayModeKHR = + PFN_vkCreateDisplayModeKHR( vkGetInstanceProcAddr( instance, "vkCreateDisplayModeKHR" ) ); + vkGetDisplayPlaneCapabilitiesKHR = + PFN_vkGetDisplayPlaneCapabilitiesKHR( vkGetInstanceProcAddr( instance, "vkGetDisplayPlaneCapabilitiesKHR" ) ); + vkCreateDisplayPlaneSurfaceKHR = + PFN_vkCreateDisplayPlaneSurfaceKHR( vkGetInstanceProcAddr( instance, "vkCreateDisplayPlaneSurfaceKHR" ) ); + + //=== VK_KHR_external_fence_capabilities === vkGetPhysicalDeviceExternalFencePropertiesKHR = PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalFencePropertiesKHR" ) ); if ( !vkGetPhysicalDeviceExternalFenceProperties ) vkGetPhysicalDeviceExternalFenceProperties = vkGetPhysicalDeviceExternalFencePropertiesKHR; - vkGetPhysicalDeviceExternalImageFormatPropertiesNV = PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV( - vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalImageFormatPropertiesNV" ) ); - vkGetPhysicalDeviceExternalSemaphoreProperties = PFN_vkGetPhysicalDeviceExternalSemaphoreProperties( - vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalSemaphoreProperties" ) ); + + //=== VK_KHR_external_memory_capabilities === + vkGetPhysicalDeviceExternalBufferPropertiesKHR = PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalBufferPropertiesKHR" ) ); + if ( !vkGetPhysicalDeviceExternalBufferProperties ) + vkGetPhysicalDeviceExternalBufferProperties = vkGetPhysicalDeviceExternalBufferPropertiesKHR; + + //=== VK_KHR_external_semaphore_capabilities === vkGetPhysicalDeviceExternalSemaphorePropertiesKHR = PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalSemaphorePropertiesKHR" ) ); if ( !vkGetPhysicalDeviceExternalSemaphoreProperties ) vkGetPhysicalDeviceExternalSemaphoreProperties = vkGetPhysicalDeviceExternalSemaphorePropertiesKHR; - vkGetPhysicalDeviceFeatures = - PFN_vkGetPhysicalDeviceFeatures( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFeatures" ) ); - vkGetPhysicalDeviceFeatures2 = - PFN_vkGetPhysicalDeviceFeatures2( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFeatures2" ) ); + + //=== VK_KHR_fragment_shading_rate === + vkGetPhysicalDeviceFragmentShadingRatesKHR = PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFragmentShadingRatesKHR" ) ); + + //=== VK_KHR_get_display_properties2 === + vkGetPhysicalDeviceDisplayProperties2KHR = PFN_vkGetPhysicalDeviceDisplayProperties2KHR( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceDisplayProperties2KHR" ) ); + vkGetPhysicalDeviceDisplayPlaneProperties2KHR = PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceDisplayPlaneProperties2KHR" ) ); + vkGetDisplayModeProperties2KHR = + PFN_vkGetDisplayModeProperties2KHR( vkGetInstanceProcAddr( instance, "vkGetDisplayModeProperties2KHR" ) ); + vkGetDisplayPlaneCapabilities2KHR = PFN_vkGetDisplayPlaneCapabilities2KHR( + vkGetInstanceProcAddr( instance, "vkGetDisplayPlaneCapabilities2KHR" ) ); + + //=== VK_KHR_get_physical_device_properties2 === vkGetPhysicalDeviceFeatures2KHR = PFN_vkGetPhysicalDeviceFeatures2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFeatures2KHR" ) ); if ( !vkGetPhysicalDeviceFeatures2 ) vkGetPhysicalDeviceFeatures2 = vkGetPhysicalDeviceFeatures2KHR; - vkGetPhysicalDeviceFormatProperties = PFN_vkGetPhysicalDeviceFormatProperties( - vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFormatProperties" ) ); - vkGetPhysicalDeviceFormatProperties2 = PFN_vkGetPhysicalDeviceFormatProperties2( - vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFormatProperties2" ) ); - vkGetPhysicalDeviceFormatProperties2KHR = PFN_vkGetPhysicalDeviceFormatProperties2KHR( - vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFormatProperties2KHR" ) ); - if ( !vkGetPhysicalDeviceFormatProperties2 ) - vkGetPhysicalDeviceFormatProperties2 = vkGetPhysicalDeviceFormatProperties2KHR; - vkGetPhysicalDeviceFragmentShadingRatesKHR = PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR( - vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFragmentShadingRatesKHR" ) ); - vkGetPhysicalDeviceImageFormatProperties = PFN_vkGetPhysicalDeviceImageFormatProperties( - vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceImageFormatProperties" ) ); - vkGetPhysicalDeviceImageFormatProperties2 = PFN_vkGetPhysicalDeviceImageFormatProperties2( - vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceImageFormatProperties2" ) ); - vkGetPhysicalDeviceImageFormatProperties2KHR = PFN_vkGetPhysicalDeviceImageFormatProperties2KHR( - vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceImageFormatProperties2KHR" ) ); - if ( !vkGetPhysicalDeviceImageFormatProperties2 ) - vkGetPhysicalDeviceImageFormatProperties2 = vkGetPhysicalDeviceImageFormatProperties2KHR; - vkGetPhysicalDeviceMemoryProperties = PFN_vkGetPhysicalDeviceMemoryProperties( - vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceMemoryProperties" ) ); - vkGetPhysicalDeviceMemoryProperties2 = PFN_vkGetPhysicalDeviceMemoryProperties2( - vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceMemoryProperties2" ) ); - vkGetPhysicalDeviceMemoryProperties2KHR = PFN_vkGetPhysicalDeviceMemoryProperties2KHR( - vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceMemoryProperties2KHR" ) ); - if ( !vkGetPhysicalDeviceMemoryProperties2 ) - vkGetPhysicalDeviceMemoryProperties2 = vkGetPhysicalDeviceMemoryProperties2KHR; - vkGetPhysicalDeviceMultisamplePropertiesEXT = PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT( - vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceMultisamplePropertiesEXT" ) ); - vkGetPhysicalDevicePresentRectanglesKHR = PFN_vkGetPhysicalDevicePresentRectanglesKHR( - vkGetInstanceProcAddr( instance, "vkGetPhysicalDevicePresentRectanglesKHR" ) ); - vkGetPhysicalDeviceProperties = - PFN_vkGetPhysicalDeviceProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceProperties" ) ); - vkGetPhysicalDeviceProperties2 = - PFN_vkGetPhysicalDeviceProperties2( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceProperties2" ) ); vkGetPhysicalDeviceProperties2KHR = PFN_vkGetPhysicalDeviceProperties2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceProperties2KHR" ) ); if ( !vkGetPhysicalDeviceProperties2 ) vkGetPhysicalDeviceProperties2 = vkGetPhysicalDeviceProperties2KHR; - vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR = - PFN_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR( - vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR" ) ); - vkGetPhysicalDeviceQueueFamilyProperties = PFN_vkGetPhysicalDeviceQueueFamilyProperties( - vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceQueueFamilyProperties" ) ); - vkGetPhysicalDeviceQueueFamilyProperties2 = PFN_vkGetPhysicalDeviceQueueFamilyProperties2( - vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceQueueFamilyProperties2" ) ); + vkGetPhysicalDeviceFormatProperties2KHR = PFN_vkGetPhysicalDeviceFormatProperties2KHR( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceFormatProperties2KHR" ) ); + if ( !vkGetPhysicalDeviceFormatProperties2 ) + vkGetPhysicalDeviceFormatProperties2 = vkGetPhysicalDeviceFormatProperties2KHR; + vkGetPhysicalDeviceImageFormatProperties2KHR = PFN_vkGetPhysicalDeviceImageFormatProperties2KHR( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceImageFormatProperties2KHR" ) ); + if ( !vkGetPhysicalDeviceImageFormatProperties2 ) + vkGetPhysicalDeviceImageFormatProperties2 = vkGetPhysicalDeviceImageFormatProperties2KHR; vkGetPhysicalDeviceQueueFamilyProperties2KHR = PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceQueueFamilyProperties2KHR" ) ); if ( !vkGetPhysicalDeviceQueueFamilyProperties2 ) vkGetPhysicalDeviceQueueFamilyProperties2 = vkGetPhysicalDeviceQueueFamilyProperties2KHR; -# if defined( VK_USE_PLATFORM_SCREEN_QNX ) - vkGetPhysicalDeviceScreenPresentationSupportQNX = PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX( - vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceScreenPresentationSupportQNX" ) ); -# endif /*VK_USE_PLATFORM_SCREEN_QNX*/ - vkGetPhysicalDeviceSparseImageFormatProperties = PFN_vkGetPhysicalDeviceSparseImageFormatProperties( - vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSparseImageFormatProperties" ) ); - vkGetPhysicalDeviceSparseImageFormatProperties2 = PFN_vkGetPhysicalDeviceSparseImageFormatProperties2( - vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSparseImageFormatProperties2" ) ); + vkGetPhysicalDeviceMemoryProperties2KHR = PFN_vkGetPhysicalDeviceMemoryProperties2KHR( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceMemoryProperties2KHR" ) ); + if ( !vkGetPhysicalDeviceMemoryProperties2 ) + vkGetPhysicalDeviceMemoryProperties2 = vkGetPhysicalDeviceMemoryProperties2KHR; vkGetPhysicalDeviceSparseImageFormatProperties2KHR = PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSparseImageFormatProperties2KHR" ) ); if ( !vkGetPhysicalDeviceSparseImageFormatProperties2 ) vkGetPhysicalDeviceSparseImageFormatProperties2 = vkGetPhysicalDeviceSparseImageFormatProperties2KHR; - vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV = - PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV( - vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV" ) ); - vkGetPhysicalDeviceSurfaceCapabilities2EXT = PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT( - vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfaceCapabilities2EXT" ) ); + + //=== VK_KHR_get_surface_capabilities2 === vkGetPhysicalDeviceSurfaceCapabilities2KHR = PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfaceCapabilities2KHR" ) ); - vkGetPhysicalDeviceSurfaceCapabilitiesKHR = PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR( - vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfaceCapabilitiesKHR" ) ); vkGetPhysicalDeviceSurfaceFormats2KHR = PFN_vkGetPhysicalDeviceSurfaceFormats2KHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfaceFormats2KHR" ) ); - vkGetPhysicalDeviceSurfaceFormatsKHR = PFN_vkGetPhysicalDeviceSurfaceFormatsKHR( - vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfaceFormatsKHR" ) ); -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - vkGetPhysicalDeviceSurfacePresentModes2EXT = PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT( - vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfacePresentModes2EXT" ) ); -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - vkGetPhysicalDeviceSurfacePresentModesKHR = PFN_vkGetPhysicalDeviceSurfacePresentModesKHR( - vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfacePresentModesKHR" ) ); + + //=== VK_KHR_performance_query === + vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR = + PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR( + vkGetInstanceProcAddr( instance, "vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR" ) ); + vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR = + PFN_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR" ) ); + + //=== VK_KHR_surface === + vkDestroySurfaceKHR = PFN_vkDestroySurfaceKHR( vkGetInstanceProcAddr( instance, "vkDestroySurfaceKHR" ) ); vkGetPhysicalDeviceSurfaceSupportKHR = PFN_vkGetPhysicalDeviceSurfaceSupportKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfaceSupportKHR" ) ); - vkGetPhysicalDeviceToolPropertiesEXT = PFN_vkGetPhysicalDeviceToolPropertiesEXT( - vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceToolPropertiesEXT" ) ); + vkGetPhysicalDeviceSurfaceCapabilitiesKHR = PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfaceCapabilitiesKHR" ) ); + vkGetPhysicalDeviceSurfaceFormatsKHR = PFN_vkGetPhysicalDeviceSurfaceFormatsKHR( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfaceFormatsKHR" ) ); + vkGetPhysicalDeviceSurfacePresentModesKHR = PFN_vkGetPhysicalDeviceSurfacePresentModesKHR( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfacePresentModesKHR" ) ); + # if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_KHR_video_queue === vkGetPhysicalDeviceVideoCapabilitiesKHR = PFN_vkGetPhysicalDeviceVideoCapabilitiesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceVideoCapabilitiesKHR" ) ); -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ -# if defined( VK_ENABLE_BETA_EXTENSIONS ) vkGetPhysicalDeviceVideoFormatPropertiesKHR = PFN_vkGetPhysicalDeviceVideoFormatPropertiesKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceVideoFormatPropertiesKHR" ) ); # endif /*VK_ENABLE_BETA_EXTENSIONS*/ + # if defined( VK_USE_PLATFORM_WAYLAND_KHR ) + //=== VK_KHR_wayland_surface === + vkCreateWaylandSurfaceKHR = + PFN_vkCreateWaylandSurfaceKHR( vkGetInstanceProcAddr( instance, "vkCreateWaylandSurfaceKHR" ) ); vkGetPhysicalDeviceWaylandPresentationSupportKHR = PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceWaylandPresentationSupportKHR" ) ); # endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ + # if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_win32_surface === + vkCreateWin32SurfaceKHR = + PFN_vkCreateWin32SurfaceKHR( vkGetInstanceProcAddr( instance, "vkCreateWin32SurfaceKHR" ) ); vkGetPhysicalDeviceWin32PresentationSupportKHR = PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceWin32PresentationSupportKHR" ) ); # endif /*VK_USE_PLATFORM_WIN32_KHR*/ + # if defined( VK_USE_PLATFORM_XCB_KHR ) + //=== VK_KHR_xcb_surface === + vkCreateXcbSurfaceKHR = PFN_vkCreateXcbSurfaceKHR( vkGetInstanceProcAddr( instance, "vkCreateXcbSurfaceKHR" ) ); vkGetPhysicalDeviceXcbPresentationSupportKHR = PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceXcbPresentationSupportKHR" ) ); # endif /*VK_USE_PLATFORM_XCB_KHR*/ + # if defined( VK_USE_PLATFORM_XLIB_KHR ) + //=== VK_KHR_xlib_surface === + vkCreateXlibSurfaceKHR = + PFN_vkCreateXlibSurfaceKHR( vkGetInstanceProcAddr( instance, "vkCreateXlibSurfaceKHR" ) ); vkGetPhysicalDeviceXlibPresentationSupportKHR = PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceXlibPresentationSupportKHR" ) ); # endif /*VK_USE_PLATFORM_XLIB_KHR*/ -# if defined( VK_USE_PLATFORM_XLIB_XRANDR_EXT ) - vkGetRandROutputDisplayEXT = - PFN_vkGetRandROutputDisplayEXT( vkGetInstanceProcAddr( instance, "vkGetRandROutputDisplayEXT" ) ); -# endif /*VK_USE_PLATFORM_XLIB_XRANDR_EXT*/ + +# if defined( VK_USE_PLATFORM_IOS_MVK ) + //=== VK_MVK_ios_surface === + vkCreateIOSSurfaceMVK = PFN_vkCreateIOSSurfaceMVK( vkGetInstanceProcAddr( instance, "vkCreateIOSSurfaceMVK" ) ); +# endif /*VK_USE_PLATFORM_IOS_MVK*/ + +# if defined( VK_USE_PLATFORM_MACOS_MVK ) + //=== VK_MVK_macos_surface === + vkCreateMacOSSurfaceMVK = + PFN_vkCreateMacOSSurfaceMVK( vkGetInstanceProcAddr( instance, "vkCreateMacOSSurfaceMVK" ) ); +# endif /*VK_USE_PLATFORM_MACOS_MVK*/ + +# if defined( VK_USE_PLATFORM_VI_NN ) + //=== VK_NN_vi_surface === + vkCreateViSurfaceNN = PFN_vkCreateViSurfaceNN( vkGetInstanceProcAddr( instance, "vkCreateViSurfaceNN" ) ); +# endif /*VK_USE_PLATFORM_VI_NN*/ + # if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_NV_acquire_winrt_display === + vkAcquireWinrtDisplayNV = + PFN_vkAcquireWinrtDisplayNV( vkGetInstanceProcAddr( instance, "vkAcquireWinrtDisplayNV" ) ); vkGetWinrtDisplayNV = PFN_vkGetWinrtDisplayNV( vkGetInstanceProcAddr( instance, "vkGetWinrtDisplayNV" ) ); # endif /*VK_USE_PLATFORM_WIN32_KHR*/ - vkReleaseDisplayEXT = PFN_vkReleaseDisplayEXT( vkGetInstanceProcAddr( instance, "vkReleaseDisplayEXT" ) ); - vkSubmitDebugUtilsMessageEXT = - PFN_vkSubmitDebugUtilsMessageEXT( vkGetInstanceProcAddr( instance, "vkSubmitDebugUtilsMessageEXT" ) ); + + //=== VK_NV_cooperative_matrix === + vkGetPhysicalDeviceCooperativeMatrixPropertiesNV = PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceCooperativeMatrixPropertiesNV" ) ); + + //=== VK_NV_coverage_reduction_mode === + vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV = + PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV" ) ); + + //=== VK_NV_external_memory_capabilities === + vkGetPhysicalDeviceExternalImageFormatPropertiesNV = PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalImageFormatPropertiesNV" ) ); + +# if defined( VK_USE_PLATFORM_SCREEN_QNX ) + //=== VK_QNX_screen_surface === + vkCreateScreenSurfaceQNX = + PFN_vkCreateScreenSurfaceQNX( vkGetInstanceProcAddr( instance, "vkCreateScreenSurfaceQNX" ) ); + vkGetPhysicalDeviceScreenPresentationSupportQNX = PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX( + vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceScreenPresentationSupportQNX" ) ); +# endif /*VK_USE_PLATFORM_SCREEN_QNX*/ vkGetDeviceProcAddr = PFN_vkGetDeviceProcAddr( vkGetInstanceProcAddr( instance, "vkGetDeviceProcAddr" ) ); } public: + //=== VK_VERSION_1_0 === + PFN_vkDestroyInstance vkDestroyInstance = 0; + PFN_vkEnumeratePhysicalDevices vkEnumeratePhysicalDevices = 0; + PFN_vkGetPhysicalDeviceFeatures vkGetPhysicalDeviceFeatures = 0; + PFN_vkGetPhysicalDeviceFormatProperties vkGetPhysicalDeviceFormatProperties = 0; + PFN_vkGetPhysicalDeviceImageFormatProperties vkGetPhysicalDeviceImageFormatProperties = 0; + PFN_vkGetPhysicalDeviceProperties vkGetPhysicalDeviceProperties = 0; + PFN_vkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceQueueFamilyProperties = 0; + PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties = 0; + PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr = 0; + PFN_vkCreateDevice vkCreateDevice = 0; + PFN_vkEnumerateDeviceExtensionProperties vkEnumerateDeviceExtensionProperties = 0; + PFN_vkEnumerateDeviceLayerProperties vkEnumerateDeviceLayerProperties = 0; + PFN_vkGetPhysicalDeviceSparseImageFormatProperties vkGetPhysicalDeviceSparseImageFormatProperties = 0; + + //=== VK_VERSION_1_1 === + PFN_vkEnumeratePhysicalDeviceGroups vkEnumeratePhysicalDeviceGroups = 0; + PFN_vkGetPhysicalDeviceFeatures2 vkGetPhysicalDeviceFeatures2 = 0; + PFN_vkGetPhysicalDeviceProperties2 vkGetPhysicalDeviceProperties2 = 0; + PFN_vkGetPhysicalDeviceFormatProperties2 vkGetPhysicalDeviceFormatProperties2 = 0; + PFN_vkGetPhysicalDeviceImageFormatProperties2 vkGetPhysicalDeviceImageFormatProperties2 = 0; + PFN_vkGetPhysicalDeviceQueueFamilyProperties2 vkGetPhysicalDeviceQueueFamilyProperties2 = 0; + PFN_vkGetPhysicalDeviceMemoryProperties2 vkGetPhysicalDeviceMemoryProperties2 = 0; + PFN_vkGetPhysicalDeviceSparseImageFormatProperties2 vkGetPhysicalDeviceSparseImageFormatProperties2 = 0; + PFN_vkGetPhysicalDeviceExternalBufferProperties vkGetPhysicalDeviceExternalBufferProperties = 0; + PFN_vkGetPhysicalDeviceExternalFenceProperties vkGetPhysicalDeviceExternalFenceProperties = 0; + PFN_vkGetPhysicalDeviceExternalSemaphoreProperties vkGetPhysicalDeviceExternalSemaphoreProperties = 0; + + //=== VK_EXT_acquire_drm_display === PFN_vkAcquireDrmDisplayEXT vkAcquireDrmDisplayEXT = 0; -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - PFN_vkAcquireWinrtDisplayNV vkAcquireWinrtDisplayNV = 0; -# else - PFN_dummy vkAcquireWinrtDisplayNV_placeholder = 0; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + PFN_vkGetDrmDisplayEXT vkGetDrmDisplayEXT = 0; + # if defined( VK_USE_PLATFORM_XLIB_XRANDR_EXT ) - PFN_vkAcquireXlibDisplayEXT vkAcquireXlibDisplayEXT = 0; + //=== VK_EXT_acquire_xlib_display === + PFN_vkAcquireXlibDisplayEXT vkAcquireXlibDisplayEXT = 0; + PFN_vkGetRandROutputDisplayEXT vkGetRandROutputDisplayEXT = 0; # else PFN_dummy vkAcquireXlibDisplayEXT_placeholder = 0; + PFN_dummy vkGetRandROutputDisplayEXT_placeholder = 0; # endif /*VK_USE_PLATFORM_XLIB_XRANDR_EXT*/ -# if defined( VK_USE_PLATFORM_ANDROID_KHR ) - PFN_vkCreateAndroidSurfaceKHR vkCreateAndroidSurfaceKHR = 0; -# else - PFN_dummy vkCreateAndroidSurfaceKHR_placeholder = 0; -# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - PFN_vkCreateDebugReportCallbackEXT vkCreateDebugReportCallbackEXT = 0; - PFN_vkCreateDebugUtilsMessengerEXT vkCreateDebugUtilsMessengerEXT = 0; - PFN_vkCreateDevice vkCreateDevice = 0; -# if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) - PFN_vkCreateDirectFBSurfaceEXT vkCreateDirectFBSurfaceEXT = 0; -# else - PFN_dummy vkCreateDirectFBSurfaceEXT_placeholder = 0; -# endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ - PFN_vkCreateDisplayModeKHR vkCreateDisplayModeKHR = 0; - PFN_vkCreateDisplayPlaneSurfaceKHR vkCreateDisplayPlaneSurfaceKHR = 0; - PFN_vkCreateHeadlessSurfaceEXT vkCreateHeadlessSurfaceEXT = 0; -# if defined( VK_USE_PLATFORM_IOS_MVK ) - PFN_vkCreateIOSSurfaceMVK vkCreateIOSSurfaceMVK = 0; -# else - PFN_dummy vkCreateIOSSurfaceMVK_placeholder = 0; -# endif /*VK_USE_PLATFORM_IOS_MVK*/ -# if defined( VK_USE_PLATFORM_FUCHSIA ) - PFN_vkCreateImagePipeSurfaceFUCHSIA vkCreateImagePipeSurfaceFUCHSIA = 0; -# else - PFN_dummy vkCreateImagePipeSurfaceFUCHSIA_placeholder = 0; -# endif /*VK_USE_PLATFORM_FUCHSIA*/ -# if defined( VK_USE_PLATFORM_MACOS_MVK ) - PFN_vkCreateMacOSSurfaceMVK vkCreateMacOSSurfaceMVK = 0; -# else - PFN_dummy vkCreateMacOSSurfaceMVK_placeholder = 0; -# endif /*VK_USE_PLATFORM_MACOS_MVK*/ -# if defined( VK_USE_PLATFORM_METAL_EXT ) - PFN_vkCreateMetalSurfaceEXT vkCreateMetalSurfaceEXT = 0; -# else - PFN_dummy vkCreateMetalSurfaceEXT_placeholder = 0; -# endif /*VK_USE_PLATFORM_METAL_EXT*/ -# if defined( VK_USE_PLATFORM_SCREEN_QNX ) - PFN_vkCreateScreenSurfaceQNX vkCreateScreenSurfaceQNX = 0; -# else - PFN_dummy vkCreateScreenSurfaceQNX_placeholder = 0; -# endif /*VK_USE_PLATFORM_SCREEN_QNX*/ -# if defined( VK_USE_PLATFORM_GGP ) - PFN_vkCreateStreamDescriptorSurfaceGGP vkCreateStreamDescriptorSurfaceGGP = 0; -# else - PFN_dummy vkCreateStreamDescriptorSurfaceGGP_placeholder = 0; -# endif /*VK_USE_PLATFORM_GGP*/ -# if defined( VK_USE_PLATFORM_VI_NN ) - PFN_vkCreateViSurfaceNN vkCreateViSurfaceNN = 0; -# else - PFN_dummy vkCreateViSurfaceNN_placeholder = 0; -# endif /*VK_USE_PLATFORM_VI_NN*/ -# if defined( VK_USE_PLATFORM_WAYLAND_KHR ) - PFN_vkCreateWaylandSurfaceKHR vkCreateWaylandSurfaceKHR = 0; -# else - PFN_dummy vkCreateWaylandSurfaceKHR_placeholder = 0; -# endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - PFN_vkCreateWin32SurfaceKHR vkCreateWin32SurfaceKHR = 0; -# else - PFN_dummy vkCreateWin32SurfaceKHR_placeholder = 0; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ -# if defined( VK_USE_PLATFORM_XCB_KHR ) - PFN_vkCreateXcbSurfaceKHR vkCreateXcbSurfaceKHR = 0; -# else - PFN_dummy vkCreateXcbSurfaceKHR_placeholder = 0; -# endif /*VK_USE_PLATFORM_XCB_KHR*/ -# if defined( VK_USE_PLATFORM_XLIB_KHR ) - PFN_vkCreateXlibSurfaceKHR vkCreateXlibSurfaceKHR = 0; -# else - PFN_dummy vkCreateXlibSurfaceKHR_placeholder = 0; -# endif /*VK_USE_PLATFORM_XLIB_KHR*/ - PFN_vkDebugReportMessageEXT vkDebugReportMessageEXT = 0; - PFN_vkDestroyDebugReportCallbackEXT vkDestroyDebugReportCallbackEXT = 0; - PFN_vkDestroyDebugUtilsMessengerEXT vkDestroyDebugUtilsMessengerEXT = 0; - PFN_vkDestroyInstance vkDestroyInstance = 0; - PFN_vkDestroySurfaceKHR vkDestroySurfaceKHR = 0; - PFN_vkEnumerateDeviceExtensionProperties vkEnumerateDeviceExtensionProperties = 0; - PFN_vkEnumerateDeviceLayerProperties vkEnumerateDeviceLayerProperties = 0; - PFN_vkEnumeratePhysicalDeviceGroups vkEnumeratePhysicalDeviceGroups = 0; - PFN_vkEnumeratePhysicalDeviceGroupsKHR vkEnumeratePhysicalDeviceGroupsKHR = 0; - PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR - vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR = 0; - PFN_vkEnumeratePhysicalDevices vkEnumeratePhysicalDevices = 0; - PFN_vkGetDisplayModeProperties2KHR vkGetDisplayModeProperties2KHR = 0; - PFN_vkGetDisplayModePropertiesKHR vkGetDisplayModePropertiesKHR = 0; - PFN_vkGetDisplayPlaneCapabilities2KHR vkGetDisplayPlaneCapabilities2KHR = 0; - PFN_vkGetDisplayPlaneCapabilitiesKHR vkGetDisplayPlaneCapabilitiesKHR = 0; - PFN_vkGetDisplayPlaneSupportedDisplaysKHR vkGetDisplayPlaneSupportedDisplaysKHR = 0; - PFN_vkGetDrmDisplayEXT vkGetDrmDisplayEXT = 0; - PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr = 0; - PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT vkGetPhysicalDeviceCalibrateableTimeDomainsEXT = 0; - PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV vkGetPhysicalDeviceCooperativeMatrixPropertiesNV = 0; + + //=== VK_EXT_calibrated_timestamps === + PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT vkGetPhysicalDeviceCalibrateableTimeDomainsEXT = 0; + + //=== VK_EXT_debug_report === + PFN_vkCreateDebugReportCallbackEXT vkCreateDebugReportCallbackEXT = 0; + PFN_vkDestroyDebugReportCallbackEXT vkDestroyDebugReportCallbackEXT = 0; + PFN_vkDebugReportMessageEXT vkDebugReportMessageEXT = 0; + + //=== VK_EXT_debug_utils === + PFN_vkCreateDebugUtilsMessengerEXT vkCreateDebugUtilsMessengerEXT = 0; + PFN_vkDestroyDebugUtilsMessengerEXT vkDestroyDebugUtilsMessengerEXT = 0; + PFN_vkSubmitDebugUtilsMessageEXT vkSubmitDebugUtilsMessageEXT = 0; + + //=== VK_EXT_direct_mode_display === + PFN_vkReleaseDisplayEXT vkReleaseDisplayEXT = 0; + # if defined( VK_USE_PLATFORM_DIRECTFB_EXT ) + //=== VK_EXT_directfb_surface === + PFN_vkCreateDirectFBSurfaceEXT vkCreateDirectFBSurfaceEXT = 0; PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT vkGetPhysicalDeviceDirectFBPresentationSupportEXT = 0; # else + PFN_dummy vkCreateDirectFBSurfaceEXT_placeholder = 0; PFN_dummy vkGetPhysicalDeviceDirectFBPresentationSupportEXT_placeholder = 0; # endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/ - PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR vkGetPhysicalDeviceDisplayPlaneProperties2KHR = 0; - PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR vkGetPhysicalDeviceDisplayPlanePropertiesKHR = 0; - PFN_vkGetPhysicalDeviceDisplayProperties2KHR vkGetPhysicalDeviceDisplayProperties2KHR = 0; - PFN_vkGetPhysicalDeviceDisplayPropertiesKHR vkGetPhysicalDeviceDisplayPropertiesKHR = 0; - PFN_vkGetPhysicalDeviceExternalBufferProperties vkGetPhysicalDeviceExternalBufferProperties = 0; - PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR vkGetPhysicalDeviceExternalBufferPropertiesKHR = 0; - PFN_vkGetPhysicalDeviceExternalFenceProperties vkGetPhysicalDeviceExternalFenceProperties = 0; - PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR vkGetPhysicalDeviceExternalFencePropertiesKHR = 0; - PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV vkGetPhysicalDeviceExternalImageFormatPropertiesNV = 0; - PFN_vkGetPhysicalDeviceExternalSemaphoreProperties vkGetPhysicalDeviceExternalSemaphoreProperties = 0; - PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR vkGetPhysicalDeviceExternalSemaphorePropertiesKHR = 0; - PFN_vkGetPhysicalDeviceFeatures vkGetPhysicalDeviceFeatures = 0; - PFN_vkGetPhysicalDeviceFeatures2 vkGetPhysicalDeviceFeatures2 = 0; - PFN_vkGetPhysicalDeviceFeatures2KHR vkGetPhysicalDeviceFeatures2KHR = 0; - PFN_vkGetPhysicalDeviceFormatProperties vkGetPhysicalDeviceFormatProperties = 0; - PFN_vkGetPhysicalDeviceFormatProperties2 vkGetPhysicalDeviceFormatProperties2 = 0; - PFN_vkGetPhysicalDeviceFormatProperties2KHR vkGetPhysicalDeviceFormatProperties2KHR = 0; - PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR vkGetPhysicalDeviceFragmentShadingRatesKHR = 0; - PFN_vkGetPhysicalDeviceImageFormatProperties vkGetPhysicalDeviceImageFormatProperties = 0; - PFN_vkGetPhysicalDeviceImageFormatProperties2 vkGetPhysicalDeviceImageFormatProperties2 = 0; - PFN_vkGetPhysicalDeviceImageFormatProperties2KHR vkGetPhysicalDeviceImageFormatProperties2KHR = 0; - PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties = 0; - PFN_vkGetPhysicalDeviceMemoryProperties2 vkGetPhysicalDeviceMemoryProperties2 = 0; - PFN_vkGetPhysicalDeviceMemoryProperties2KHR vkGetPhysicalDeviceMemoryProperties2KHR = 0; - PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT vkGetPhysicalDeviceMultisamplePropertiesEXT = 0; - PFN_vkGetPhysicalDevicePresentRectanglesKHR vkGetPhysicalDevicePresentRectanglesKHR = 0; - PFN_vkGetPhysicalDeviceProperties vkGetPhysicalDeviceProperties = 0; - PFN_vkGetPhysicalDeviceProperties2 vkGetPhysicalDeviceProperties2 = 0; - PFN_vkGetPhysicalDeviceProperties2KHR vkGetPhysicalDeviceProperties2KHR = 0; - PFN_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR - vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR = 0; - PFN_vkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceQueueFamilyProperties = 0; - PFN_vkGetPhysicalDeviceQueueFamilyProperties2 vkGetPhysicalDeviceQueueFamilyProperties2 = 0; - PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR vkGetPhysicalDeviceQueueFamilyProperties2KHR = 0; -# if defined( VK_USE_PLATFORM_SCREEN_QNX ) - PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX vkGetPhysicalDeviceScreenPresentationSupportQNX = 0; -# else - PFN_dummy vkGetPhysicalDeviceScreenPresentationSupportQNX_placeholder = 0; -# endif /*VK_USE_PLATFORM_SCREEN_QNX*/ - PFN_vkGetPhysicalDeviceSparseImageFormatProperties vkGetPhysicalDeviceSparseImageFormatProperties = 0; - PFN_vkGetPhysicalDeviceSparseImageFormatProperties2 vkGetPhysicalDeviceSparseImageFormatProperties2 = 0; - PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR vkGetPhysicalDeviceSparseImageFormatProperties2KHR = 0; - PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV - vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV = 0; + + //=== VK_EXT_display_surface_counter === PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT vkGetPhysicalDeviceSurfaceCapabilities2EXT = 0; - PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR vkGetPhysicalDeviceSurfaceCapabilities2KHR = 0; - PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR vkGetPhysicalDeviceSurfaceCapabilitiesKHR = 0; - PFN_vkGetPhysicalDeviceSurfaceFormats2KHR vkGetPhysicalDeviceSurfaceFormats2KHR = 0; - PFN_vkGetPhysicalDeviceSurfaceFormatsKHR vkGetPhysicalDeviceSurfaceFormatsKHR = 0; + # if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_EXT_full_screen_exclusive === PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT vkGetPhysicalDeviceSurfacePresentModes2EXT = 0; # else PFN_dummy vkGetPhysicalDeviceSurfacePresentModes2EXT_placeholder = 0; # endif /*VK_USE_PLATFORM_WIN32_KHR*/ - PFN_vkGetPhysicalDeviceSurfacePresentModesKHR vkGetPhysicalDeviceSurfacePresentModesKHR = 0; - PFN_vkGetPhysicalDeviceSurfaceSupportKHR vkGetPhysicalDeviceSurfaceSupportKHR = 0; - PFN_vkGetPhysicalDeviceToolPropertiesEXT vkGetPhysicalDeviceToolPropertiesEXT = 0; -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - PFN_vkGetPhysicalDeviceVideoCapabilitiesKHR vkGetPhysicalDeviceVideoCapabilitiesKHR = 0; + + //=== VK_EXT_headless_surface === + PFN_vkCreateHeadlessSurfaceEXT vkCreateHeadlessSurfaceEXT = 0; + +# if defined( VK_USE_PLATFORM_METAL_EXT ) + //=== VK_EXT_metal_surface === + PFN_vkCreateMetalSurfaceEXT vkCreateMetalSurfaceEXT = 0; # else - PFN_dummy vkGetPhysicalDeviceVideoCapabilitiesKHR_placeholder = 0; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + PFN_dummy vkCreateMetalSurfaceEXT_placeholder = 0; +# endif /*VK_USE_PLATFORM_METAL_EXT*/ + + //=== VK_EXT_sample_locations === + PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT vkGetPhysicalDeviceMultisamplePropertiesEXT = 0; + + //=== VK_EXT_tooling_info === + PFN_vkGetPhysicalDeviceToolPropertiesEXT vkGetPhysicalDeviceToolPropertiesEXT = 0; + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_imagepipe_surface === + PFN_vkCreateImagePipeSurfaceFUCHSIA vkCreateImagePipeSurfaceFUCHSIA = 0; +# else + PFN_dummy vkCreateImagePipeSurfaceFUCHSIA_placeholder = 0; +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + +# if defined( VK_USE_PLATFORM_GGP ) + //=== VK_GGP_stream_descriptor_surface === + PFN_vkCreateStreamDescriptorSurfaceGGP vkCreateStreamDescriptorSurfaceGGP = 0; +# else + PFN_dummy vkCreateStreamDescriptorSurfaceGGP_placeholder = 0; +# endif /*VK_USE_PLATFORM_GGP*/ + +# if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_KHR_android_surface === + PFN_vkCreateAndroidSurfaceKHR vkCreateAndroidSurfaceKHR = 0; +# else + PFN_dummy vkCreateAndroidSurfaceKHR_placeholder = 0; +# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + + //=== VK_KHR_device_group === + PFN_vkGetPhysicalDevicePresentRectanglesKHR vkGetPhysicalDevicePresentRectanglesKHR = 0; + + //=== VK_KHR_device_group_creation === + PFN_vkEnumeratePhysicalDeviceGroupsKHR vkEnumeratePhysicalDeviceGroupsKHR = 0; + + //=== VK_KHR_display === + PFN_vkGetPhysicalDeviceDisplayPropertiesKHR vkGetPhysicalDeviceDisplayPropertiesKHR = 0; + PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR vkGetPhysicalDeviceDisplayPlanePropertiesKHR = 0; + PFN_vkGetDisplayPlaneSupportedDisplaysKHR vkGetDisplayPlaneSupportedDisplaysKHR = 0; + PFN_vkGetDisplayModePropertiesKHR vkGetDisplayModePropertiesKHR = 0; + PFN_vkCreateDisplayModeKHR vkCreateDisplayModeKHR = 0; + PFN_vkGetDisplayPlaneCapabilitiesKHR vkGetDisplayPlaneCapabilitiesKHR = 0; + PFN_vkCreateDisplayPlaneSurfaceKHR vkCreateDisplayPlaneSurfaceKHR = 0; + + //=== VK_KHR_external_fence_capabilities === + PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR vkGetPhysicalDeviceExternalFencePropertiesKHR = 0; + + //=== VK_KHR_external_memory_capabilities === + PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR vkGetPhysicalDeviceExternalBufferPropertiesKHR = 0; + + //=== VK_KHR_external_semaphore_capabilities === + PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR vkGetPhysicalDeviceExternalSemaphorePropertiesKHR = 0; + + //=== VK_KHR_fragment_shading_rate === + PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR vkGetPhysicalDeviceFragmentShadingRatesKHR = 0; + + //=== VK_KHR_get_display_properties2 === + PFN_vkGetPhysicalDeviceDisplayProperties2KHR vkGetPhysicalDeviceDisplayProperties2KHR = 0; + PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR vkGetPhysicalDeviceDisplayPlaneProperties2KHR = 0; + PFN_vkGetDisplayModeProperties2KHR vkGetDisplayModeProperties2KHR = 0; + PFN_vkGetDisplayPlaneCapabilities2KHR vkGetDisplayPlaneCapabilities2KHR = 0; + + //=== VK_KHR_get_physical_device_properties2 === + PFN_vkGetPhysicalDeviceFeatures2KHR vkGetPhysicalDeviceFeatures2KHR = 0; + PFN_vkGetPhysicalDeviceProperties2KHR vkGetPhysicalDeviceProperties2KHR = 0; + PFN_vkGetPhysicalDeviceFormatProperties2KHR vkGetPhysicalDeviceFormatProperties2KHR = 0; + PFN_vkGetPhysicalDeviceImageFormatProperties2KHR vkGetPhysicalDeviceImageFormatProperties2KHR = 0; + PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR vkGetPhysicalDeviceQueueFamilyProperties2KHR = 0; + PFN_vkGetPhysicalDeviceMemoryProperties2KHR vkGetPhysicalDeviceMemoryProperties2KHR = 0; + PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR vkGetPhysicalDeviceSparseImageFormatProperties2KHR = 0; + + //=== VK_KHR_get_surface_capabilities2 === + PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR vkGetPhysicalDeviceSurfaceCapabilities2KHR = 0; + PFN_vkGetPhysicalDeviceSurfaceFormats2KHR vkGetPhysicalDeviceSurfaceFormats2KHR = 0; + + //=== VK_KHR_performance_query === + PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR + vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR = 0; + PFN_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR + vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR = 0; + + //=== VK_KHR_surface === + PFN_vkDestroySurfaceKHR vkDestroySurfaceKHR = 0; + PFN_vkGetPhysicalDeviceSurfaceSupportKHR vkGetPhysicalDeviceSurfaceSupportKHR = 0; + PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR vkGetPhysicalDeviceSurfaceCapabilitiesKHR = 0; + PFN_vkGetPhysicalDeviceSurfaceFormatsKHR vkGetPhysicalDeviceSurfaceFormatsKHR = 0; + PFN_vkGetPhysicalDeviceSurfacePresentModesKHR vkGetPhysicalDeviceSurfacePresentModesKHR = 0; + # if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_KHR_video_queue === + PFN_vkGetPhysicalDeviceVideoCapabilitiesKHR vkGetPhysicalDeviceVideoCapabilitiesKHR = 0; PFN_vkGetPhysicalDeviceVideoFormatPropertiesKHR vkGetPhysicalDeviceVideoFormatPropertiesKHR = 0; # else + PFN_dummy vkGetPhysicalDeviceVideoCapabilitiesKHR_placeholder = 0; PFN_dummy vkGetPhysicalDeviceVideoFormatPropertiesKHR_placeholder = 0; # endif /*VK_ENABLE_BETA_EXTENSIONS*/ + # if defined( VK_USE_PLATFORM_WAYLAND_KHR ) + //=== VK_KHR_wayland_surface === + PFN_vkCreateWaylandSurfaceKHR vkCreateWaylandSurfaceKHR = 0; PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR vkGetPhysicalDeviceWaylandPresentationSupportKHR = 0; # else + PFN_dummy vkCreateWaylandSurfaceKHR_placeholder = 0; PFN_dummy vkGetPhysicalDeviceWaylandPresentationSupportKHR_placeholder = 0; # endif /*VK_USE_PLATFORM_WAYLAND_KHR*/ + # if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_win32_surface === + PFN_vkCreateWin32SurfaceKHR vkCreateWin32SurfaceKHR = 0; PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR vkGetPhysicalDeviceWin32PresentationSupportKHR = 0; # else + PFN_dummy vkCreateWin32SurfaceKHR_placeholder = 0; PFN_dummy vkGetPhysicalDeviceWin32PresentationSupportKHR_placeholder = 0; # endif /*VK_USE_PLATFORM_WIN32_KHR*/ + # if defined( VK_USE_PLATFORM_XCB_KHR ) + //=== VK_KHR_xcb_surface === + PFN_vkCreateXcbSurfaceKHR vkCreateXcbSurfaceKHR = 0; PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR vkGetPhysicalDeviceXcbPresentationSupportKHR = 0; # else + PFN_dummy vkCreateXcbSurfaceKHR_placeholder = 0; PFN_dummy vkGetPhysicalDeviceXcbPresentationSupportKHR_placeholder = 0; # endif /*VK_USE_PLATFORM_XCB_KHR*/ + # if defined( VK_USE_PLATFORM_XLIB_KHR ) + //=== VK_KHR_xlib_surface === + PFN_vkCreateXlibSurfaceKHR vkCreateXlibSurfaceKHR = 0; PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR vkGetPhysicalDeviceXlibPresentationSupportKHR = 0; # else + PFN_dummy vkCreateXlibSurfaceKHR_placeholder = 0; PFN_dummy vkGetPhysicalDeviceXlibPresentationSupportKHR_placeholder = 0; # endif /*VK_USE_PLATFORM_XLIB_KHR*/ -# if defined( VK_USE_PLATFORM_XLIB_XRANDR_EXT ) - PFN_vkGetRandROutputDisplayEXT vkGetRandROutputDisplayEXT = 0; + +# if defined( VK_USE_PLATFORM_IOS_MVK ) + //=== VK_MVK_ios_surface === + PFN_vkCreateIOSSurfaceMVK vkCreateIOSSurfaceMVK = 0; # else - PFN_dummy vkGetRandROutputDisplayEXT_placeholder = 0; -# endif /*VK_USE_PLATFORM_XLIB_XRANDR_EXT*/ + PFN_dummy vkCreateIOSSurfaceMVK_placeholder = 0; +# endif /*VK_USE_PLATFORM_IOS_MVK*/ + +# if defined( VK_USE_PLATFORM_MACOS_MVK ) + //=== VK_MVK_macos_surface === + PFN_vkCreateMacOSSurfaceMVK vkCreateMacOSSurfaceMVK = 0; +# else + PFN_dummy vkCreateMacOSSurfaceMVK_placeholder = 0; +# endif /*VK_USE_PLATFORM_MACOS_MVK*/ + +# if defined( VK_USE_PLATFORM_VI_NN ) + //=== VK_NN_vi_surface === + PFN_vkCreateViSurfaceNN vkCreateViSurfaceNN = 0; +# else + PFN_dummy vkCreateViSurfaceNN_placeholder = 0; +# endif /*VK_USE_PLATFORM_VI_NN*/ + # if defined( VK_USE_PLATFORM_WIN32_KHR ) - PFN_vkGetWinrtDisplayNV vkGetWinrtDisplayNV = 0; + //=== VK_NV_acquire_winrt_display === + PFN_vkAcquireWinrtDisplayNV vkAcquireWinrtDisplayNV = 0; + PFN_vkGetWinrtDisplayNV vkGetWinrtDisplayNV = 0; # else + PFN_dummy vkAcquireWinrtDisplayNV_placeholder = 0; PFN_dummy vkGetWinrtDisplayNV_placeholder = 0; # endif /*VK_USE_PLATFORM_WIN32_KHR*/ - PFN_vkReleaseDisplayEXT vkReleaseDisplayEXT = 0; - PFN_vkSubmitDebugUtilsMessageEXT vkSubmitDebugUtilsMessageEXT = 0; + + //=== VK_NV_cooperative_matrix === + PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV vkGetPhysicalDeviceCooperativeMatrixPropertiesNV = 0; + + //=== VK_NV_coverage_reduction_mode === + PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV + vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV = 0; + + //=== VK_NV_external_memory_capabilities === + PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV vkGetPhysicalDeviceExternalImageFormatPropertiesNV = 0; + +# if defined( VK_USE_PLATFORM_SCREEN_QNX ) + //=== VK_QNX_screen_surface === + PFN_vkCreateScreenSurfaceQNX vkCreateScreenSurfaceQNX = 0; + PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX vkGetPhysicalDeviceScreenPresentationSupportQNX = 0; +# else + PFN_dummy vkCreateScreenSurfaceQNX_placeholder = 0; + PFN_dummy vkGetPhysicalDeviceScreenPresentationSupportQNX_placeholder = 0; +# endif /*VK_USE_PLATFORM_SCREEN_QNX*/ PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr = 0; }; @@ -559,1246 +690,1483 @@ namespace VULKAN_HPP_NAMESPACE void init( VkDevice device ) { -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - vkAcquireFullScreenExclusiveModeEXT = PFN_vkAcquireFullScreenExclusiveModeEXT( - vkGetDeviceProcAddr( device, "vkAcquireFullScreenExclusiveModeEXT" ) ); -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - vkAcquireNextImage2KHR = PFN_vkAcquireNextImage2KHR( vkGetDeviceProcAddr( device, "vkAcquireNextImage2KHR" ) ); - vkAcquireNextImageKHR = PFN_vkAcquireNextImageKHR( vkGetDeviceProcAddr( device, "vkAcquireNextImageKHR" ) ); - vkAcquirePerformanceConfigurationINTEL = PFN_vkAcquirePerformanceConfigurationINTEL( - vkGetDeviceProcAddr( device, "vkAcquirePerformanceConfigurationINTEL" ) ); - vkAcquireProfilingLockKHR = - PFN_vkAcquireProfilingLockKHR( vkGetDeviceProcAddr( device, "vkAcquireProfilingLockKHR" ) ); - vkAllocateCommandBuffers = - PFN_vkAllocateCommandBuffers( vkGetDeviceProcAddr( device, "vkAllocateCommandBuffers" ) ); + //=== VK_VERSION_1_0 === + vkGetDeviceProcAddr = PFN_vkGetDeviceProcAddr( vkGetDeviceProcAddr( device, "vkGetDeviceProcAddr" ) ); + vkDestroyDevice = PFN_vkDestroyDevice( vkGetDeviceProcAddr( device, "vkDestroyDevice" ) ); + vkGetDeviceQueue = PFN_vkGetDeviceQueue( vkGetDeviceProcAddr( device, "vkGetDeviceQueue" ) ); + vkQueueSubmit = PFN_vkQueueSubmit( vkGetDeviceProcAddr( device, "vkQueueSubmit" ) ); + vkQueueWaitIdle = PFN_vkQueueWaitIdle( vkGetDeviceProcAddr( device, "vkQueueWaitIdle" ) ); + vkDeviceWaitIdle = PFN_vkDeviceWaitIdle( vkGetDeviceProcAddr( device, "vkDeviceWaitIdle" ) ); + vkAllocateMemory = PFN_vkAllocateMemory( vkGetDeviceProcAddr( device, "vkAllocateMemory" ) ); + vkFreeMemory = PFN_vkFreeMemory( vkGetDeviceProcAddr( device, "vkFreeMemory" ) ); + vkMapMemory = PFN_vkMapMemory( vkGetDeviceProcAddr( device, "vkMapMemory" ) ); + vkUnmapMemory = PFN_vkUnmapMemory( vkGetDeviceProcAddr( device, "vkUnmapMemory" ) ); + vkFlushMappedMemoryRanges = + PFN_vkFlushMappedMemoryRanges( vkGetDeviceProcAddr( device, "vkFlushMappedMemoryRanges" ) ); + vkInvalidateMappedMemoryRanges = + PFN_vkInvalidateMappedMemoryRanges( vkGetDeviceProcAddr( device, "vkInvalidateMappedMemoryRanges" ) ); + vkGetDeviceMemoryCommitment = + PFN_vkGetDeviceMemoryCommitment( vkGetDeviceProcAddr( device, "vkGetDeviceMemoryCommitment" ) ); + vkBindBufferMemory = PFN_vkBindBufferMemory( vkGetDeviceProcAddr( device, "vkBindBufferMemory" ) ); + vkBindImageMemory = PFN_vkBindImageMemory( vkGetDeviceProcAddr( device, "vkBindImageMemory" ) ); + vkGetBufferMemoryRequirements = + PFN_vkGetBufferMemoryRequirements( vkGetDeviceProcAddr( device, "vkGetBufferMemoryRequirements" ) ); + vkGetImageMemoryRequirements = + PFN_vkGetImageMemoryRequirements( vkGetDeviceProcAddr( device, "vkGetImageMemoryRequirements" ) ); + vkGetImageSparseMemoryRequirements = + PFN_vkGetImageSparseMemoryRequirements( vkGetDeviceProcAddr( device, "vkGetImageSparseMemoryRequirements" ) ); + vkQueueBindSparse = PFN_vkQueueBindSparse( vkGetDeviceProcAddr( device, "vkQueueBindSparse" ) ); + vkCreateFence = PFN_vkCreateFence( vkGetDeviceProcAddr( device, "vkCreateFence" ) ); + vkDestroyFence = PFN_vkDestroyFence( vkGetDeviceProcAddr( device, "vkDestroyFence" ) ); + vkResetFences = PFN_vkResetFences( vkGetDeviceProcAddr( device, "vkResetFences" ) ); + vkGetFenceStatus = PFN_vkGetFenceStatus( vkGetDeviceProcAddr( device, "vkGetFenceStatus" ) ); + vkWaitForFences = PFN_vkWaitForFences( vkGetDeviceProcAddr( device, "vkWaitForFences" ) ); + vkCreateSemaphore = PFN_vkCreateSemaphore( vkGetDeviceProcAddr( device, "vkCreateSemaphore" ) ); + vkDestroySemaphore = PFN_vkDestroySemaphore( vkGetDeviceProcAddr( device, "vkDestroySemaphore" ) ); + vkCreateEvent = PFN_vkCreateEvent( vkGetDeviceProcAddr( device, "vkCreateEvent" ) ); + vkDestroyEvent = PFN_vkDestroyEvent( vkGetDeviceProcAddr( device, "vkDestroyEvent" ) ); + vkGetEventStatus = PFN_vkGetEventStatus( vkGetDeviceProcAddr( device, "vkGetEventStatus" ) ); + vkSetEvent = PFN_vkSetEvent( vkGetDeviceProcAddr( device, "vkSetEvent" ) ); + vkResetEvent = PFN_vkResetEvent( vkGetDeviceProcAddr( device, "vkResetEvent" ) ); + vkCreateQueryPool = PFN_vkCreateQueryPool( vkGetDeviceProcAddr( device, "vkCreateQueryPool" ) ); + vkDestroyQueryPool = PFN_vkDestroyQueryPool( vkGetDeviceProcAddr( device, "vkDestroyQueryPool" ) ); + vkGetQueryPoolResults = PFN_vkGetQueryPoolResults( vkGetDeviceProcAddr( device, "vkGetQueryPoolResults" ) ); + vkCreateBuffer = PFN_vkCreateBuffer( vkGetDeviceProcAddr( device, "vkCreateBuffer" ) ); + vkDestroyBuffer = PFN_vkDestroyBuffer( vkGetDeviceProcAddr( device, "vkDestroyBuffer" ) ); + vkCreateBufferView = PFN_vkCreateBufferView( vkGetDeviceProcAddr( device, "vkCreateBufferView" ) ); + vkDestroyBufferView = PFN_vkDestroyBufferView( vkGetDeviceProcAddr( device, "vkDestroyBufferView" ) ); + vkCreateImage = PFN_vkCreateImage( vkGetDeviceProcAddr( device, "vkCreateImage" ) ); + vkDestroyImage = PFN_vkDestroyImage( vkGetDeviceProcAddr( device, "vkDestroyImage" ) ); + vkGetImageSubresourceLayout = + PFN_vkGetImageSubresourceLayout( vkGetDeviceProcAddr( device, "vkGetImageSubresourceLayout" ) ); + vkCreateImageView = PFN_vkCreateImageView( vkGetDeviceProcAddr( device, "vkCreateImageView" ) ); + vkDestroyImageView = PFN_vkDestroyImageView( vkGetDeviceProcAddr( device, "vkDestroyImageView" ) ); + vkCreateShaderModule = PFN_vkCreateShaderModule( vkGetDeviceProcAddr( device, "vkCreateShaderModule" ) ); + vkDestroyShaderModule = PFN_vkDestroyShaderModule( vkGetDeviceProcAddr( device, "vkDestroyShaderModule" ) ); + vkCreatePipelineCache = PFN_vkCreatePipelineCache( vkGetDeviceProcAddr( device, "vkCreatePipelineCache" ) ); + vkDestroyPipelineCache = PFN_vkDestroyPipelineCache( vkGetDeviceProcAddr( device, "vkDestroyPipelineCache" ) ); + vkGetPipelineCacheData = PFN_vkGetPipelineCacheData( vkGetDeviceProcAddr( device, "vkGetPipelineCacheData" ) ); + vkMergePipelineCaches = PFN_vkMergePipelineCaches( vkGetDeviceProcAddr( device, "vkMergePipelineCaches" ) ); + vkCreateGraphicsPipelines = + PFN_vkCreateGraphicsPipelines( vkGetDeviceProcAddr( device, "vkCreateGraphicsPipelines" ) ); + vkCreateComputePipelines = + PFN_vkCreateComputePipelines( vkGetDeviceProcAddr( device, "vkCreateComputePipelines" ) ); + vkDestroyPipeline = PFN_vkDestroyPipeline( vkGetDeviceProcAddr( device, "vkDestroyPipeline" ) ); + vkCreatePipelineLayout = PFN_vkCreatePipelineLayout( vkGetDeviceProcAddr( device, "vkCreatePipelineLayout" ) ); + vkDestroyPipelineLayout = + PFN_vkDestroyPipelineLayout( vkGetDeviceProcAddr( device, "vkDestroyPipelineLayout" ) ); + vkCreateSampler = PFN_vkCreateSampler( vkGetDeviceProcAddr( device, "vkCreateSampler" ) ); + vkDestroySampler = PFN_vkDestroySampler( vkGetDeviceProcAddr( device, "vkDestroySampler" ) ); + vkCreateDescriptorSetLayout = + PFN_vkCreateDescriptorSetLayout( vkGetDeviceProcAddr( device, "vkCreateDescriptorSetLayout" ) ); + vkDestroyDescriptorSetLayout = + PFN_vkDestroyDescriptorSetLayout( vkGetDeviceProcAddr( device, "vkDestroyDescriptorSetLayout" ) ); + vkCreateDescriptorPool = PFN_vkCreateDescriptorPool( vkGetDeviceProcAddr( device, "vkCreateDescriptorPool" ) ); + vkDestroyDescriptorPool = + PFN_vkDestroyDescriptorPool( vkGetDeviceProcAddr( device, "vkDestroyDescriptorPool" ) ); + vkResetDescriptorPool = PFN_vkResetDescriptorPool( vkGetDeviceProcAddr( device, "vkResetDescriptorPool" ) ); vkAllocateDescriptorSets = PFN_vkAllocateDescriptorSets( vkGetDeviceProcAddr( device, "vkAllocateDescriptorSets" ) ); - vkAllocateMemory = PFN_vkAllocateMemory( vkGetDeviceProcAddr( device, "vkAllocateMemory" ) ); - vkBeginCommandBuffer = PFN_vkBeginCommandBuffer( vkGetDeviceProcAddr( device, "vkBeginCommandBuffer" ) ); - vkBindAccelerationStructureMemoryNV = PFN_vkBindAccelerationStructureMemoryNV( - vkGetDeviceProcAddr( device, "vkBindAccelerationStructureMemoryNV" ) ); - vkBindBufferMemory = PFN_vkBindBufferMemory( vkGetDeviceProcAddr( device, "vkBindBufferMemory" ) ); - vkBindBufferMemory2 = PFN_vkBindBufferMemory2( vkGetDeviceProcAddr( device, "vkBindBufferMemory2" ) ); - vkBindBufferMemory2KHR = PFN_vkBindBufferMemory2KHR( vkGetDeviceProcAddr( device, "vkBindBufferMemory2KHR" ) ); - if ( !vkBindBufferMemory2 ) - vkBindBufferMemory2 = vkBindBufferMemory2KHR; - vkBindImageMemory = PFN_vkBindImageMemory( vkGetDeviceProcAddr( device, "vkBindImageMemory" ) ); - vkBindImageMemory2 = PFN_vkBindImageMemory2( vkGetDeviceProcAddr( device, "vkBindImageMemory2" ) ); - vkBindImageMemory2KHR = PFN_vkBindImageMemory2KHR( vkGetDeviceProcAddr( device, "vkBindImageMemory2KHR" ) ); - if ( !vkBindImageMemory2 ) - vkBindImageMemory2 = vkBindImageMemory2KHR; -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - vkBindVideoSessionMemoryKHR = - PFN_vkBindVideoSessionMemoryKHR( vkGetDeviceProcAddr( device, "vkBindVideoSessionMemoryKHR" ) ); -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - vkBuildAccelerationStructuresKHR = - PFN_vkBuildAccelerationStructuresKHR( vkGetDeviceProcAddr( device, "vkBuildAccelerationStructuresKHR" ) ); - vkCmdBeginConditionalRenderingEXT = - PFN_vkCmdBeginConditionalRenderingEXT( vkGetDeviceProcAddr( device, "vkCmdBeginConditionalRenderingEXT" ) ); - vkCmdBeginDebugUtilsLabelEXT = - PFN_vkCmdBeginDebugUtilsLabelEXT( vkGetDeviceProcAddr( device, "vkCmdBeginDebugUtilsLabelEXT" ) ); - vkCmdBeginQuery = PFN_vkCmdBeginQuery( vkGetDeviceProcAddr( device, "vkCmdBeginQuery" ) ); - vkCmdBeginQueryIndexedEXT = - PFN_vkCmdBeginQueryIndexedEXT( vkGetDeviceProcAddr( device, "vkCmdBeginQueryIndexedEXT" ) ); - vkCmdBeginRenderPass = PFN_vkCmdBeginRenderPass( vkGetDeviceProcAddr( device, "vkCmdBeginRenderPass" ) ); - vkCmdBeginRenderPass2 = PFN_vkCmdBeginRenderPass2( vkGetDeviceProcAddr( device, "vkCmdBeginRenderPass2" ) ); - vkCmdBeginRenderPass2KHR = - PFN_vkCmdBeginRenderPass2KHR( vkGetDeviceProcAddr( device, "vkCmdBeginRenderPass2KHR" ) ); - if ( !vkCmdBeginRenderPass2 ) - vkCmdBeginRenderPass2 = vkCmdBeginRenderPass2KHR; - vkCmdBeginTransformFeedbackEXT = - PFN_vkCmdBeginTransformFeedbackEXT( vkGetDeviceProcAddr( device, "vkCmdBeginTransformFeedbackEXT" ) ); -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - vkCmdBeginVideoCodingKHR = - PFN_vkCmdBeginVideoCodingKHR( vkGetDeviceProcAddr( device, "vkCmdBeginVideoCodingKHR" ) ); -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + vkFreeDescriptorSets = PFN_vkFreeDescriptorSets( vkGetDeviceProcAddr( device, "vkFreeDescriptorSets" ) ); + vkUpdateDescriptorSets = PFN_vkUpdateDescriptorSets( vkGetDeviceProcAddr( device, "vkUpdateDescriptorSets" ) ); + vkCreateFramebuffer = PFN_vkCreateFramebuffer( vkGetDeviceProcAddr( device, "vkCreateFramebuffer" ) ); + vkDestroyFramebuffer = PFN_vkDestroyFramebuffer( vkGetDeviceProcAddr( device, "vkDestroyFramebuffer" ) ); + vkCreateRenderPass = PFN_vkCreateRenderPass( vkGetDeviceProcAddr( device, "vkCreateRenderPass" ) ); + vkDestroyRenderPass = PFN_vkDestroyRenderPass( vkGetDeviceProcAddr( device, "vkDestroyRenderPass" ) ); + vkGetRenderAreaGranularity = + PFN_vkGetRenderAreaGranularity( vkGetDeviceProcAddr( device, "vkGetRenderAreaGranularity" ) ); + vkCreateCommandPool = PFN_vkCreateCommandPool( vkGetDeviceProcAddr( device, "vkCreateCommandPool" ) ); + vkDestroyCommandPool = PFN_vkDestroyCommandPool( vkGetDeviceProcAddr( device, "vkDestroyCommandPool" ) ); + vkResetCommandPool = PFN_vkResetCommandPool( vkGetDeviceProcAddr( device, "vkResetCommandPool" ) ); + vkAllocateCommandBuffers = + PFN_vkAllocateCommandBuffers( vkGetDeviceProcAddr( device, "vkAllocateCommandBuffers" ) ); + vkFreeCommandBuffers = PFN_vkFreeCommandBuffers( vkGetDeviceProcAddr( device, "vkFreeCommandBuffers" ) ); + vkBeginCommandBuffer = PFN_vkBeginCommandBuffer( vkGetDeviceProcAddr( device, "vkBeginCommandBuffer" ) ); + vkEndCommandBuffer = PFN_vkEndCommandBuffer( vkGetDeviceProcAddr( device, "vkEndCommandBuffer" ) ); + vkResetCommandBuffer = PFN_vkResetCommandBuffer( vkGetDeviceProcAddr( device, "vkResetCommandBuffer" ) ); + vkCmdBindPipeline = PFN_vkCmdBindPipeline( vkGetDeviceProcAddr( device, "vkCmdBindPipeline" ) ); + vkCmdSetViewport = PFN_vkCmdSetViewport( vkGetDeviceProcAddr( device, "vkCmdSetViewport" ) ); + vkCmdSetScissor = PFN_vkCmdSetScissor( vkGetDeviceProcAddr( device, "vkCmdSetScissor" ) ); + vkCmdSetLineWidth = PFN_vkCmdSetLineWidth( vkGetDeviceProcAddr( device, "vkCmdSetLineWidth" ) ); + vkCmdSetDepthBias = PFN_vkCmdSetDepthBias( vkGetDeviceProcAddr( device, "vkCmdSetDepthBias" ) ); + vkCmdSetBlendConstants = PFN_vkCmdSetBlendConstants( vkGetDeviceProcAddr( device, "vkCmdSetBlendConstants" ) ); + vkCmdSetDepthBounds = PFN_vkCmdSetDepthBounds( vkGetDeviceProcAddr( device, "vkCmdSetDepthBounds" ) ); + vkCmdSetStencilCompareMask = + PFN_vkCmdSetStencilCompareMask( vkGetDeviceProcAddr( device, "vkCmdSetStencilCompareMask" ) ); + vkCmdSetStencilWriteMask = + PFN_vkCmdSetStencilWriteMask( vkGetDeviceProcAddr( device, "vkCmdSetStencilWriteMask" ) ); + vkCmdSetStencilReference = + PFN_vkCmdSetStencilReference( vkGetDeviceProcAddr( device, "vkCmdSetStencilReference" ) ); vkCmdBindDescriptorSets = PFN_vkCmdBindDescriptorSets( vkGetDeviceProcAddr( device, "vkCmdBindDescriptorSets" ) ); - vkCmdBindIndexBuffer = PFN_vkCmdBindIndexBuffer( vkGetDeviceProcAddr( device, "vkCmdBindIndexBuffer" ) ); - vkCmdBindInvocationMaskHUAWEI = - PFN_vkCmdBindInvocationMaskHUAWEI( vkGetDeviceProcAddr( device, "vkCmdBindInvocationMaskHUAWEI" ) ); - vkCmdBindPipeline = PFN_vkCmdBindPipeline( vkGetDeviceProcAddr( device, "vkCmdBindPipeline" ) ); - vkCmdBindPipelineShaderGroupNV = - PFN_vkCmdBindPipelineShaderGroupNV( vkGetDeviceProcAddr( device, "vkCmdBindPipelineShaderGroupNV" ) ); - vkCmdBindShadingRateImageNV = - PFN_vkCmdBindShadingRateImageNV( vkGetDeviceProcAddr( device, "vkCmdBindShadingRateImageNV" ) ); - vkCmdBindTransformFeedbackBuffersEXT = PFN_vkCmdBindTransformFeedbackBuffersEXT( - vkGetDeviceProcAddr( device, "vkCmdBindTransformFeedbackBuffersEXT" ) ); + vkCmdBindIndexBuffer = PFN_vkCmdBindIndexBuffer( vkGetDeviceProcAddr( device, "vkCmdBindIndexBuffer" ) ); vkCmdBindVertexBuffers = PFN_vkCmdBindVertexBuffers( vkGetDeviceProcAddr( device, "vkCmdBindVertexBuffers" ) ); - vkCmdBindVertexBuffers2EXT = - PFN_vkCmdBindVertexBuffers2EXT( vkGetDeviceProcAddr( device, "vkCmdBindVertexBuffers2EXT" ) ); - vkCmdBlitImage = PFN_vkCmdBlitImage( vkGetDeviceProcAddr( device, "vkCmdBlitImage" ) ); - vkCmdBlitImage2KHR = PFN_vkCmdBlitImage2KHR( vkGetDeviceProcAddr( device, "vkCmdBlitImage2KHR" ) ); - vkCmdBuildAccelerationStructureNV = - PFN_vkCmdBuildAccelerationStructureNV( vkGetDeviceProcAddr( device, "vkCmdBuildAccelerationStructureNV" ) ); - vkCmdBuildAccelerationStructuresIndirectKHR = PFN_vkCmdBuildAccelerationStructuresIndirectKHR( - vkGetDeviceProcAddr( device, "vkCmdBuildAccelerationStructuresIndirectKHR" ) ); - vkCmdBuildAccelerationStructuresKHR = PFN_vkCmdBuildAccelerationStructuresKHR( - vkGetDeviceProcAddr( device, "vkCmdBuildAccelerationStructuresKHR" ) ); - vkCmdClearAttachments = PFN_vkCmdClearAttachments( vkGetDeviceProcAddr( device, "vkCmdClearAttachments" ) ); - vkCmdClearColorImage = PFN_vkCmdClearColorImage( vkGetDeviceProcAddr( device, "vkCmdClearColorImage" ) ); + vkCmdDraw = PFN_vkCmdDraw( vkGetDeviceProcAddr( device, "vkCmdDraw" ) ); + vkCmdDrawIndexed = PFN_vkCmdDrawIndexed( vkGetDeviceProcAddr( device, "vkCmdDrawIndexed" ) ); + vkCmdDrawIndirect = PFN_vkCmdDrawIndirect( vkGetDeviceProcAddr( device, "vkCmdDrawIndirect" ) ); + vkCmdDrawIndexedIndirect = + PFN_vkCmdDrawIndexedIndirect( vkGetDeviceProcAddr( device, "vkCmdDrawIndexedIndirect" ) ); + vkCmdDispatch = PFN_vkCmdDispatch( vkGetDeviceProcAddr( device, "vkCmdDispatch" ) ); + vkCmdDispatchIndirect = PFN_vkCmdDispatchIndirect( vkGetDeviceProcAddr( device, "vkCmdDispatchIndirect" ) ); + vkCmdCopyBuffer = PFN_vkCmdCopyBuffer( vkGetDeviceProcAddr( device, "vkCmdCopyBuffer" ) ); + vkCmdCopyImage = PFN_vkCmdCopyImage( vkGetDeviceProcAddr( device, "vkCmdCopyImage" ) ); + vkCmdBlitImage = PFN_vkCmdBlitImage( vkGetDeviceProcAddr( device, "vkCmdBlitImage" ) ); + vkCmdCopyBufferToImage = PFN_vkCmdCopyBufferToImage( vkGetDeviceProcAddr( device, "vkCmdCopyBufferToImage" ) ); + vkCmdCopyImageToBuffer = PFN_vkCmdCopyImageToBuffer( vkGetDeviceProcAddr( device, "vkCmdCopyImageToBuffer" ) ); + vkCmdUpdateBuffer = PFN_vkCmdUpdateBuffer( vkGetDeviceProcAddr( device, "vkCmdUpdateBuffer" ) ); + vkCmdFillBuffer = PFN_vkCmdFillBuffer( vkGetDeviceProcAddr( device, "vkCmdFillBuffer" ) ); + vkCmdClearColorImage = PFN_vkCmdClearColorImage( vkGetDeviceProcAddr( device, "vkCmdClearColorImage" ) ); vkCmdClearDepthStencilImage = PFN_vkCmdClearDepthStencilImage( vkGetDeviceProcAddr( device, "vkCmdClearDepthStencilImage" ) ); -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - vkCmdControlVideoCodingKHR = - PFN_vkCmdControlVideoCodingKHR( vkGetDeviceProcAddr( device, "vkCmdControlVideoCodingKHR" ) ); -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - vkCmdCopyAccelerationStructureKHR = - PFN_vkCmdCopyAccelerationStructureKHR( vkGetDeviceProcAddr( device, "vkCmdCopyAccelerationStructureKHR" ) ); - vkCmdCopyAccelerationStructureNV = - PFN_vkCmdCopyAccelerationStructureNV( vkGetDeviceProcAddr( device, "vkCmdCopyAccelerationStructureNV" ) ); - vkCmdCopyAccelerationStructureToMemoryKHR = PFN_vkCmdCopyAccelerationStructureToMemoryKHR( - vkGetDeviceProcAddr( device, "vkCmdCopyAccelerationStructureToMemoryKHR" ) ); - vkCmdCopyBuffer = PFN_vkCmdCopyBuffer( vkGetDeviceProcAddr( device, "vkCmdCopyBuffer" ) ); - vkCmdCopyBuffer2KHR = PFN_vkCmdCopyBuffer2KHR( vkGetDeviceProcAddr( device, "vkCmdCopyBuffer2KHR" ) ); - vkCmdCopyBufferToImage = PFN_vkCmdCopyBufferToImage( vkGetDeviceProcAddr( device, "vkCmdCopyBufferToImage" ) ); - vkCmdCopyBufferToImage2KHR = - PFN_vkCmdCopyBufferToImage2KHR( vkGetDeviceProcAddr( device, "vkCmdCopyBufferToImage2KHR" ) ); - vkCmdCopyImage = PFN_vkCmdCopyImage( vkGetDeviceProcAddr( device, "vkCmdCopyImage" ) ); - vkCmdCopyImage2KHR = PFN_vkCmdCopyImage2KHR( vkGetDeviceProcAddr( device, "vkCmdCopyImage2KHR" ) ); - vkCmdCopyImageToBuffer = PFN_vkCmdCopyImageToBuffer( vkGetDeviceProcAddr( device, "vkCmdCopyImageToBuffer" ) ); - vkCmdCopyImageToBuffer2KHR = - PFN_vkCmdCopyImageToBuffer2KHR( vkGetDeviceProcAddr( device, "vkCmdCopyImageToBuffer2KHR" ) ); - vkCmdCopyMemoryToAccelerationStructureKHR = PFN_vkCmdCopyMemoryToAccelerationStructureKHR( - vkGetDeviceProcAddr( device, "vkCmdCopyMemoryToAccelerationStructureKHR" ) ); + vkCmdClearAttachments = PFN_vkCmdClearAttachments( vkGetDeviceProcAddr( device, "vkCmdClearAttachments" ) ); + vkCmdResolveImage = PFN_vkCmdResolveImage( vkGetDeviceProcAddr( device, "vkCmdResolveImage" ) ); + vkCmdSetEvent = PFN_vkCmdSetEvent( vkGetDeviceProcAddr( device, "vkCmdSetEvent" ) ); + vkCmdResetEvent = PFN_vkCmdResetEvent( vkGetDeviceProcAddr( device, "vkCmdResetEvent" ) ); + vkCmdWaitEvents = PFN_vkCmdWaitEvents( vkGetDeviceProcAddr( device, "vkCmdWaitEvents" ) ); + vkCmdPipelineBarrier = PFN_vkCmdPipelineBarrier( vkGetDeviceProcAddr( device, "vkCmdPipelineBarrier" ) ); + vkCmdBeginQuery = PFN_vkCmdBeginQuery( vkGetDeviceProcAddr( device, "vkCmdBeginQuery" ) ); + vkCmdEndQuery = PFN_vkCmdEndQuery( vkGetDeviceProcAddr( device, "vkCmdEndQuery" ) ); + vkCmdResetQueryPool = PFN_vkCmdResetQueryPool( vkGetDeviceProcAddr( device, "vkCmdResetQueryPool" ) ); + vkCmdWriteTimestamp = PFN_vkCmdWriteTimestamp( vkGetDeviceProcAddr( device, "vkCmdWriteTimestamp" ) ); vkCmdCopyQueryPoolResults = PFN_vkCmdCopyQueryPoolResults( vkGetDeviceProcAddr( device, "vkCmdCopyQueryPoolResults" ) ); - vkCmdCuLaunchKernelNVX = PFN_vkCmdCuLaunchKernelNVX( vkGetDeviceProcAddr( device, "vkCmdCuLaunchKernelNVX" ) ); + vkCmdPushConstants = PFN_vkCmdPushConstants( vkGetDeviceProcAddr( device, "vkCmdPushConstants" ) ); + vkCmdBeginRenderPass = PFN_vkCmdBeginRenderPass( vkGetDeviceProcAddr( device, "vkCmdBeginRenderPass" ) ); + vkCmdNextSubpass = PFN_vkCmdNextSubpass( vkGetDeviceProcAddr( device, "vkCmdNextSubpass" ) ); + vkCmdEndRenderPass = PFN_vkCmdEndRenderPass( vkGetDeviceProcAddr( device, "vkCmdEndRenderPass" ) ); + vkCmdExecuteCommands = PFN_vkCmdExecuteCommands( vkGetDeviceProcAddr( device, "vkCmdExecuteCommands" ) ); + + //=== VK_VERSION_1_1 === + vkBindBufferMemory2 = PFN_vkBindBufferMemory2( vkGetDeviceProcAddr( device, "vkBindBufferMemory2" ) ); + vkBindImageMemory2 = PFN_vkBindImageMemory2( vkGetDeviceProcAddr( device, "vkBindImageMemory2" ) ); + vkGetDeviceGroupPeerMemoryFeatures = + PFN_vkGetDeviceGroupPeerMemoryFeatures( vkGetDeviceProcAddr( device, "vkGetDeviceGroupPeerMemoryFeatures" ) ); + vkCmdSetDeviceMask = PFN_vkCmdSetDeviceMask( vkGetDeviceProcAddr( device, "vkCmdSetDeviceMask" ) ); + vkCmdDispatchBase = PFN_vkCmdDispatchBase( vkGetDeviceProcAddr( device, "vkCmdDispatchBase" ) ); + vkGetImageMemoryRequirements2 = + PFN_vkGetImageMemoryRequirements2( vkGetDeviceProcAddr( device, "vkGetImageMemoryRequirements2" ) ); + vkGetBufferMemoryRequirements2 = + PFN_vkGetBufferMemoryRequirements2( vkGetDeviceProcAddr( device, "vkGetBufferMemoryRequirements2" ) ); + vkGetImageSparseMemoryRequirements2 = PFN_vkGetImageSparseMemoryRequirements2( + vkGetDeviceProcAddr( device, "vkGetImageSparseMemoryRequirements2" ) ); + vkTrimCommandPool = PFN_vkTrimCommandPool( vkGetDeviceProcAddr( device, "vkTrimCommandPool" ) ); + vkGetDeviceQueue2 = PFN_vkGetDeviceQueue2( vkGetDeviceProcAddr( device, "vkGetDeviceQueue2" ) ); + vkCreateSamplerYcbcrConversion = + PFN_vkCreateSamplerYcbcrConversion( vkGetDeviceProcAddr( device, "vkCreateSamplerYcbcrConversion" ) ); + vkDestroySamplerYcbcrConversion = + PFN_vkDestroySamplerYcbcrConversion( vkGetDeviceProcAddr( device, "vkDestroySamplerYcbcrConversion" ) ); + vkCreateDescriptorUpdateTemplate = + PFN_vkCreateDescriptorUpdateTemplate( vkGetDeviceProcAddr( device, "vkCreateDescriptorUpdateTemplate" ) ); + vkDestroyDescriptorUpdateTemplate = + PFN_vkDestroyDescriptorUpdateTemplate( vkGetDeviceProcAddr( device, "vkDestroyDescriptorUpdateTemplate" ) ); + vkUpdateDescriptorSetWithTemplate = + PFN_vkUpdateDescriptorSetWithTemplate( vkGetDeviceProcAddr( device, "vkUpdateDescriptorSetWithTemplate" ) ); + vkGetDescriptorSetLayoutSupport = + PFN_vkGetDescriptorSetLayoutSupport( vkGetDeviceProcAddr( device, "vkGetDescriptorSetLayoutSupport" ) ); + + //=== VK_VERSION_1_2 === + vkCmdDrawIndirectCount = PFN_vkCmdDrawIndirectCount( vkGetDeviceProcAddr( device, "vkCmdDrawIndirectCount" ) ); + vkCmdDrawIndexedIndirectCount = + PFN_vkCmdDrawIndexedIndirectCount( vkGetDeviceProcAddr( device, "vkCmdDrawIndexedIndirectCount" ) ); + vkCreateRenderPass2 = PFN_vkCreateRenderPass2( vkGetDeviceProcAddr( device, "vkCreateRenderPass2" ) ); + vkCmdBeginRenderPass2 = PFN_vkCmdBeginRenderPass2( vkGetDeviceProcAddr( device, "vkCmdBeginRenderPass2" ) ); + vkCmdNextSubpass2 = PFN_vkCmdNextSubpass2( vkGetDeviceProcAddr( device, "vkCmdNextSubpass2" ) ); + vkCmdEndRenderPass2 = PFN_vkCmdEndRenderPass2( vkGetDeviceProcAddr( device, "vkCmdEndRenderPass2" ) ); + vkResetQueryPool = PFN_vkResetQueryPool( vkGetDeviceProcAddr( device, "vkResetQueryPool" ) ); + vkGetSemaphoreCounterValue = + PFN_vkGetSemaphoreCounterValue( vkGetDeviceProcAddr( device, "vkGetSemaphoreCounterValue" ) ); + vkWaitSemaphores = PFN_vkWaitSemaphores( vkGetDeviceProcAddr( device, "vkWaitSemaphores" ) ); + vkSignalSemaphore = PFN_vkSignalSemaphore( vkGetDeviceProcAddr( device, "vkSignalSemaphore" ) ); + vkGetBufferDeviceAddress = + PFN_vkGetBufferDeviceAddress( vkGetDeviceProcAddr( device, "vkGetBufferDeviceAddress" ) ); + vkGetBufferOpaqueCaptureAddress = + PFN_vkGetBufferOpaqueCaptureAddress( vkGetDeviceProcAddr( device, "vkGetBufferOpaqueCaptureAddress" ) ); + vkGetDeviceMemoryOpaqueCaptureAddress = PFN_vkGetDeviceMemoryOpaqueCaptureAddress( + vkGetDeviceProcAddr( device, "vkGetDeviceMemoryOpaqueCaptureAddress" ) ); + + //=== VK_AMD_buffer_marker === + vkCmdWriteBufferMarkerAMD = + PFN_vkCmdWriteBufferMarkerAMD( vkGetDeviceProcAddr( device, "vkCmdWriteBufferMarkerAMD" ) ); + + //=== VK_AMD_display_native_hdr === + vkSetLocalDimmingAMD = PFN_vkSetLocalDimmingAMD( vkGetDeviceProcAddr( device, "vkSetLocalDimmingAMD" ) ); + + //=== VK_AMD_draw_indirect_count === + vkCmdDrawIndirectCountAMD = + PFN_vkCmdDrawIndirectCountAMD( vkGetDeviceProcAddr( device, "vkCmdDrawIndirectCountAMD" ) ); + if ( !vkCmdDrawIndirectCount ) + vkCmdDrawIndirectCount = vkCmdDrawIndirectCountAMD; + vkCmdDrawIndexedIndirectCountAMD = + PFN_vkCmdDrawIndexedIndirectCountAMD( vkGetDeviceProcAddr( device, "vkCmdDrawIndexedIndirectCountAMD" ) ); + if ( !vkCmdDrawIndexedIndirectCount ) + vkCmdDrawIndexedIndirectCount = vkCmdDrawIndexedIndirectCountAMD; + + //=== VK_AMD_shader_info === + vkGetShaderInfoAMD = PFN_vkGetShaderInfoAMD( vkGetDeviceProcAddr( device, "vkGetShaderInfoAMD" ) ); + +# if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_ANDROID_external_memory_android_hardware_buffer === + vkGetAndroidHardwareBufferPropertiesANDROID = PFN_vkGetAndroidHardwareBufferPropertiesANDROID( + vkGetDeviceProcAddr( device, "vkGetAndroidHardwareBufferPropertiesANDROID" ) ); + vkGetMemoryAndroidHardwareBufferANDROID = PFN_vkGetMemoryAndroidHardwareBufferANDROID( + vkGetDeviceProcAddr( device, "vkGetMemoryAndroidHardwareBufferANDROID" ) ); +# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + + //=== VK_EXT_buffer_device_address === + vkGetBufferDeviceAddressEXT = + PFN_vkGetBufferDeviceAddressEXT( vkGetDeviceProcAddr( device, "vkGetBufferDeviceAddressEXT" ) ); + if ( !vkGetBufferDeviceAddress ) + vkGetBufferDeviceAddress = vkGetBufferDeviceAddressEXT; + + //=== VK_EXT_calibrated_timestamps === + vkGetCalibratedTimestampsEXT = + PFN_vkGetCalibratedTimestampsEXT( vkGetDeviceProcAddr( device, "vkGetCalibratedTimestampsEXT" ) ); + + //=== VK_EXT_color_write_enable === + vkCmdSetColorWriteEnableEXT = + PFN_vkCmdSetColorWriteEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetColorWriteEnableEXT" ) ); + + //=== VK_EXT_conditional_rendering === + vkCmdBeginConditionalRenderingEXT = + PFN_vkCmdBeginConditionalRenderingEXT( vkGetDeviceProcAddr( device, "vkCmdBeginConditionalRenderingEXT" ) ); + vkCmdEndConditionalRenderingEXT = + PFN_vkCmdEndConditionalRenderingEXT( vkGetDeviceProcAddr( device, "vkCmdEndConditionalRenderingEXT" ) ); + + //=== VK_EXT_debug_marker === + vkDebugMarkerSetObjectTagEXT = + PFN_vkDebugMarkerSetObjectTagEXT( vkGetDeviceProcAddr( device, "vkDebugMarkerSetObjectTagEXT" ) ); + vkDebugMarkerSetObjectNameEXT = + PFN_vkDebugMarkerSetObjectNameEXT( vkGetDeviceProcAddr( device, "vkDebugMarkerSetObjectNameEXT" ) ); vkCmdDebugMarkerBeginEXT = PFN_vkCmdDebugMarkerBeginEXT( vkGetDeviceProcAddr( device, "vkCmdDebugMarkerBeginEXT" ) ); vkCmdDebugMarkerEndEXT = PFN_vkCmdDebugMarkerEndEXT( vkGetDeviceProcAddr( device, "vkCmdDebugMarkerEndEXT" ) ); vkCmdDebugMarkerInsertEXT = PFN_vkCmdDebugMarkerInsertEXT( vkGetDeviceProcAddr( device, "vkCmdDebugMarkerInsertEXT" ) ); -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - vkCmdDecodeVideoKHR = PFN_vkCmdDecodeVideoKHR( vkGetDeviceProcAddr( device, "vkCmdDecodeVideoKHR" ) ); -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - vkCmdDispatch = PFN_vkCmdDispatch( vkGetDeviceProcAddr( device, "vkCmdDispatch" ) ); - vkCmdDispatchBase = PFN_vkCmdDispatchBase( vkGetDeviceProcAddr( device, "vkCmdDispatchBase" ) ); - vkCmdDispatchBaseKHR = PFN_vkCmdDispatchBaseKHR( vkGetDeviceProcAddr( device, "vkCmdDispatchBaseKHR" ) ); - if ( !vkCmdDispatchBase ) - vkCmdDispatchBase = vkCmdDispatchBaseKHR; - vkCmdDispatchIndirect = PFN_vkCmdDispatchIndirect( vkGetDeviceProcAddr( device, "vkCmdDispatchIndirect" ) ); - vkCmdDraw = PFN_vkCmdDraw( vkGetDeviceProcAddr( device, "vkCmdDraw" ) ); - vkCmdDrawIndexed = PFN_vkCmdDrawIndexed( vkGetDeviceProcAddr( device, "vkCmdDrawIndexed" ) ); - vkCmdDrawIndexedIndirect = - PFN_vkCmdDrawIndexedIndirect( vkGetDeviceProcAddr( device, "vkCmdDrawIndexedIndirect" ) ); - vkCmdDrawIndexedIndirectCount = - PFN_vkCmdDrawIndexedIndirectCount( vkGetDeviceProcAddr( device, "vkCmdDrawIndexedIndirectCount" ) ); - vkCmdDrawIndexedIndirectCountAMD = - PFN_vkCmdDrawIndexedIndirectCountAMD( vkGetDeviceProcAddr( device, "vkCmdDrawIndexedIndirectCountAMD" ) ); - if ( !vkCmdDrawIndexedIndirectCount ) - vkCmdDrawIndexedIndirectCount = vkCmdDrawIndexedIndirectCountAMD; - vkCmdDrawIndexedIndirectCountKHR = - PFN_vkCmdDrawIndexedIndirectCountKHR( vkGetDeviceProcAddr( device, "vkCmdDrawIndexedIndirectCountKHR" ) ); - if ( !vkCmdDrawIndexedIndirectCount ) - vkCmdDrawIndexedIndirectCount = vkCmdDrawIndexedIndirectCountKHR; - vkCmdDrawIndirect = PFN_vkCmdDrawIndirect( vkGetDeviceProcAddr( device, "vkCmdDrawIndirect" ) ); - vkCmdDrawIndirectByteCountEXT = - PFN_vkCmdDrawIndirectByteCountEXT( vkGetDeviceProcAddr( device, "vkCmdDrawIndirectByteCountEXT" ) ); - vkCmdDrawIndirectCount = PFN_vkCmdDrawIndirectCount( vkGetDeviceProcAddr( device, "vkCmdDrawIndirectCount" ) ); - vkCmdDrawIndirectCountAMD = - PFN_vkCmdDrawIndirectCountAMD( vkGetDeviceProcAddr( device, "vkCmdDrawIndirectCountAMD" ) ); - if ( !vkCmdDrawIndirectCount ) - vkCmdDrawIndirectCount = vkCmdDrawIndirectCountAMD; - vkCmdDrawIndirectCountKHR = - PFN_vkCmdDrawIndirectCountKHR( vkGetDeviceProcAddr( device, "vkCmdDrawIndirectCountKHR" ) ); - if ( !vkCmdDrawIndirectCount ) - vkCmdDrawIndirectCount = vkCmdDrawIndirectCountKHR; - vkCmdDrawMeshTasksIndirectCountNV = - PFN_vkCmdDrawMeshTasksIndirectCountNV( vkGetDeviceProcAddr( device, "vkCmdDrawMeshTasksIndirectCountNV" ) ); - vkCmdDrawMeshTasksIndirectNV = - PFN_vkCmdDrawMeshTasksIndirectNV( vkGetDeviceProcAddr( device, "vkCmdDrawMeshTasksIndirectNV" ) ); - vkCmdDrawMeshTasksNV = PFN_vkCmdDrawMeshTasksNV( vkGetDeviceProcAddr( device, "vkCmdDrawMeshTasksNV" ) ); - vkCmdDrawMultiEXT = PFN_vkCmdDrawMultiEXT( vkGetDeviceProcAddr( device, "vkCmdDrawMultiEXT" ) ); - vkCmdDrawMultiIndexedEXT = - PFN_vkCmdDrawMultiIndexedEXT( vkGetDeviceProcAddr( device, "vkCmdDrawMultiIndexedEXT" ) ); -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - vkCmdEncodeVideoKHR = PFN_vkCmdEncodeVideoKHR( vkGetDeviceProcAddr( device, "vkCmdEncodeVideoKHR" ) ); -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - vkCmdEndConditionalRenderingEXT = - PFN_vkCmdEndConditionalRenderingEXT( vkGetDeviceProcAddr( device, "vkCmdEndConditionalRenderingEXT" ) ); + + //=== VK_EXT_debug_utils === + vkSetDebugUtilsObjectNameEXT = + PFN_vkSetDebugUtilsObjectNameEXT( vkGetDeviceProcAddr( device, "vkSetDebugUtilsObjectNameEXT" ) ); + vkSetDebugUtilsObjectTagEXT = + PFN_vkSetDebugUtilsObjectTagEXT( vkGetDeviceProcAddr( device, "vkSetDebugUtilsObjectTagEXT" ) ); + vkQueueBeginDebugUtilsLabelEXT = + PFN_vkQueueBeginDebugUtilsLabelEXT( vkGetDeviceProcAddr( device, "vkQueueBeginDebugUtilsLabelEXT" ) ); + vkQueueEndDebugUtilsLabelEXT = + PFN_vkQueueEndDebugUtilsLabelEXT( vkGetDeviceProcAddr( device, "vkQueueEndDebugUtilsLabelEXT" ) ); + vkQueueInsertDebugUtilsLabelEXT = + PFN_vkQueueInsertDebugUtilsLabelEXT( vkGetDeviceProcAddr( device, "vkQueueInsertDebugUtilsLabelEXT" ) ); + vkCmdBeginDebugUtilsLabelEXT = + PFN_vkCmdBeginDebugUtilsLabelEXT( vkGetDeviceProcAddr( device, "vkCmdBeginDebugUtilsLabelEXT" ) ); vkCmdEndDebugUtilsLabelEXT = PFN_vkCmdEndDebugUtilsLabelEXT( vkGetDeviceProcAddr( device, "vkCmdEndDebugUtilsLabelEXT" ) ); - vkCmdEndQuery = PFN_vkCmdEndQuery( vkGetDeviceProcAddr( device, "vkCmdEndQuery" ) ); - vkCmdEndQueryIndexedEXT = - PFN_vkCmdEndQueryIndexedEXT( vkGetDeviceProcAddr( device, "vkCmdEndQueryIndexedEXT" ) ); - vkCmdEndRenderPass = PFN_vkCmdEndRenderPass( vkGetDeviceProcAddr( device, "vkCmdEndRenderPass" ) ); - vkCmdEndRenderPass2 = PFN_vkCmdEndRenderPass2( vkGetDeviceProcAddr( device, "vkCmdEndRenderPass2" ) ); - vkCmdEndRenderPass2KHR = PFN_vkCmdEndRenderPass2KHR( vkGetDeviceProcAddr( device, "vkCmdEndRenderPass2KHR" ) ); - if ( !vkCmdEndRenderPass2 ) - vkCmdEndRenderPass2 = vkCmdEndRenderPass2KHR; - vkCmdEndTransformFeedbackEXT = - PFN_vkCmdEndTransformFeedbackEXT( vkGetDeviceProcAddr( device, "vkCmdEndTransformFeedbackEXT" ) ); -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - vkCmdEndVideoCodingKHR = PFN_vkCmdEndVideoCodingKHR( vkGetDeviceProcAddr( device, "vkCmdEndVideoCodingKHR" ) ); -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - vkCmdExecuteCommands = PFN_vkCmdExecuteCommands( vkGetDeviceProcAddr( device, "vkCmdExecuteCommands" ) ); - vkCmdExecuteGeneratedCommandsNV = - PFN_vkCmdExecuteGeneratedCommandsNV( vkGetDeviceProcAddr( device, "vkCmdExecuteGeneratedCommandsNV" ) ); - vkCmdFillBuffer = PFN_vkCmdFillBuffer( vkGetDeviceProcAddr( device, "vkCmdFillBuffer" ) ); vkCmdInsertDebugUtilsLabelEXT = PFN_vkCmdInsertDebugUtilsLabelEXT( vkGetDeviceProcAddr( device, "vkCmdInsertDebugUtilsLabelEXT" ) ); - vkCmdNextSubpass = PFN_vkCmdNextSubpass( vkGetDeviceProcAddr( device, "vkCmdNextSubpass" ) ); - vkCmdNextSubpass2 = PFN_vkCmdNextSubpass2( vkGetDeviceProcAddr( device, "vkCmdNextSubpass2" ) ); - vkCmdNextSubpass2KHR = PFN_vkCmdNextSubpass2KHR( vkGetDeviceProcAddr( device, "vkCmdNextSubpass2KHR" ) ); - if ( !vkCmdNextSubpass2 ) - vkCmdNextSubpass2 = vkCmdNextSubpass2KHR; - vkCmdPipelineBarrier = PFN_vkCmdPipelineBarrier( vkGetDeviceProcAddr( device, "vkCmdPipelineBarrier" ) ); - vkCmdPipelineBarrier2KHR = - PFN_vkCmdPipelineBarrier2KHR( vkGetDeviceProcAddr( device, "vkCmdPipelineBarrier2KHR" ) ); - vkCmdPreprocessGeneratedCommandsNV = - PFN_vkCmdPreprocessGeneratedCommandsNV( vkGetDeviceProcAddr( device, "vkCmdPreprocessGeneratedCommandsNV" ) ); - vkCmdPushConstants = PFN_vkCmdPushConstants( vkGetDeviceProcAddr( device, "vkCmdPushConstants" ) ); - vkCmdPushDescriptorSetKHR = - PFN_vkCmdPushDescriptorSetKHR( vkGetDeviceProcAddr( device, "vkCmdPushDescriptorSetKHR" ) ); - vkCmdPushDescriptorSetWithTemplateKHR = PFN_vkCmdPushDescriptorSetWithTemplateKHR( - vkGetDeviceProcAddr( device, "vkCmdPushDescriptorSetWithTemplateKHR" ) ); - vkCmdResetEvent = PFN_vkCmdResetEvent( vkGetDeviceProcAddr( device, "vkCmdResetEvent" ) ); - vkCmdResetEvent2KHR = PFN_vkCmdResetEvent2KHR( vkGetDeviceProcAddr( device, "vkCmdResetEvent2KHR" ) ); - vkCmdResetQueryPool = PFN_vkCmdResetQueryPool( vkGetDeviceProcAddr( device, "vkCmdResetQueryPool" ) ); - vkCmdResolveImage = PFN_vkCmdResolveImage( vkGetDeviceProcAddr( device, "vkCmdResolveImage" ) ); - vkCmdResolveImage2KHR = PFN_vkCmdResolveImage2KHR( vkGetDeviceProcAddr( device, "vkCmdResolveImage2KHR" ) ); - vkCmdSetBlendConstants = PFN_vkCmdSetBlendConstants( vkGetDeviceProcAddr( device, "vkCmdSetBlendConstants" ) ); - vkCmdSetCheckpointNV = PFN_vkCmdSetCheckpointNV( vkGetDeviceProcAddr( device, "vkCmdSetCheckpointNV" ) ); - vkCmdSetCoarseSampleOrderNV = - PFN_vkCmdSetCoarseSampleOrderNV( vkGetDeviceProcAddr( device, "vkCmdSetCoarseSampleOrderNV" ) ); - vkCmdSetColorWriteEnableEXT = - PFN_vkCmdSetColorWriteEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetColorWriteEnableEXT" ) ); - vkCmdSetCullModeEXT = PFN_vkCmdSetCullModeEXT( vkGetDeviceProcAddr( device, "vkCmdSetCullModeEXT" ) ); - vkCmdSetDepthBias = PFN_vkCmdSetDepthBias( vkGetDeviceProcAddr( device, "vkCmdSetDepthBias" ) ); - vkCmdSetDepthBiasEnableEXT = - PFN_vkCmdSetDepthBiasEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthBiasEnableEXT" ) ); - vkCmdSetDepthBounds = PFN_vkCmdSetDepthBounds( vkGetDeviceProcAddr( device, "vkCmdSetDepthBounds" ) ); - vkCmdSetDepthBoundsTestEnableEXT = - PFN_vkCmdSetDepthBoundsTestEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthBoundsTestEnableEXT" ) ); - vkCmdSetDepthCompareOpEXT = - PFN_vkCmdSetDepthCompareOpEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthCompareOpEXT" ) ); + + //=== VK_EXT_discard_rectangles === + vkCmdSetDiscardRectangleEXT = + PFN_vkCmdSetDiscardRectangleEXT( vkGetDeviceProcAddr( device, "vkCmdSetDiscardRectangleEXT" ) ); + + //=== VK_EXT_display_control === + vkDisplayPowerControlEXT = + PFN_vkDisplayPowerControlEXT( vkGetDeviceProcAddr( device, "vkDisplayPowerControlEXT" ) ); + vkRegisterDeviceEventEXT = + PFN_vkRegisterDeviceEventEXT( vkGetDeviceProcAddr( device, "vkRegisterDeviceEventEXT" ) ); + vkRegisterDisplayEventEXT = + PFN_vkRegisterDisplayEventEXT( vkGetDeviceProcAddr( device, "vkRegisterDisplayEventEXT" ) ); + vkGetSwapchainCounterEXT = + PFN_vkGetSwapchainCounterEXT( vkGetDeviceProcAddr( device, "vkGetSwapchainCounterEXT" ) ); + + //=== VK_EXT_extended_dynamic_state === + vkCmdSetCullModeEXT = PFN_vkCmdSetCullModeEXT( vkGetDeviceProcAddr( device, "vkCmdSetCullModeEXT" ) ); + vkCmdSetFrontFaceEXT = PFN_vkCmdSetFrontFaceEXT( vkGetDeviceProcAddr( device, "vkCmdSetFrontFaceEXT" ) ); + vkCmdSetPrimitiveTopologyEXT = + PFN_vkCmdSetPrimitiveTopologyEXT( vkGetDeviceProcAddr( device, "vkCmdSetPrimitiveTopologyEXT" ) ); + vkCmdSetViewportWithCountEXT = + PFN_vkCmdSetViewportWithCountEXT( vkGetDeviceProcAddr( device, "vkCmdSetViewportWithCountEXT" ) ); + vkCmdSetScissorWithCountEXT = + PFN_vkCmdSetScissorWithCountEXT( vkGetDeviceProcAddr( device, "vkCmdSetScissorWithCountEXT" ) ); + vkCmdBindVertexBuffers2EXT = + PFN_vkCmdBindVertexBuffers2EXT( vkGetDeviceProcAddr( device, "vkCmdBindVertexBuffers2EXT" ) ); vkCmdSetDepthTestEnableEXT = PFN_vkCmdSetDepthTestEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthTestEnableEXT" ) ); vkCmdSetDepthWriteEnableEXT = PFN_vkCmdSetDepthWriteEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthWriteEnableEXT" ) ); - vkCmdSetDeviceMask = PFN_vkCmdSetDeviceMask( vkGetDeviceProcAddr( device, "vkCmdSetDeviceMask" ) ); - vkCmdSetDeviceMaskKHR = PFN_vkCmdSetDeviceMaskKHR( vkGetDeviceProcAddr( device, "vkCmdSetDeviceMaskKHR" ) ); - if ( !vkCmdSetDeviceMask ) - vkCmdSetDeviceMask = vkCmdSetDeviceMaskKHR; - vkCmdSetDiscardRectangleEXT = - PFN_vkCmdSetDiscardRectangleEXT( vkGetDeviceProcAddr( device, "vkCmdSetDiscardRectangleEXT" ) ); - vkCmdSetEvent = PFN_vkCmdSetEvent( vkGetDeviceProcAddr( device, "vkCmdSetEvent" ) ); - vkCmdSetEvent2KHR = PFN_vkCmdSetEvent2KHR( vkGetDeviceProcAddr( device, "vkCmdSetEvent2KHR" ) ); - vkCmdSetExclusiveScissorNV = - PFN_vkCmdSetExclusiveScissorNV( vkGetDeviceProcAddr( device, "vkCmdSetExclusiveScissorNV" ) ); - vkCmdSetFragmentShadingRateEnumNV = - PFN_vkCmdSetFragmentShadingRateEnumNV( vkGetDeviceProcAddr( device, "vkCmdSetFragmentShadingRateEnumNV" ) ); - vkCmdSetFragmentShadingRateKHR = - PFN_vkCmdSetFragmentShadingRateKHR( vkGetDeviceProcAddr( device, "vkCmdSetFragmentShadingRateKHR" ) ); - vkCmdSetFrontFaceEXT = PFN_vkCmdSetFrontFaceEXT( vkGetDeviceProcAddr( device, "vkCmdSetFrontFaceEXT" ) ); - vkCmdSetLineStippleEXT = PFN_vkCmdSetLineStippleEXT( vkGetDeviceProcAddr( device, "vkCmdSetLineStippleEXT" ) ); - vkCmdSetLineWidth = PFN_vkCmdSetLineWidth( vkGetDeviceProcAddr( device, "vkCmdSetLineWidth" ) ); - vkCmdSetLogicOpEXT = PFN_vkCmdSetLogicOpEXT( vkGetDeviceProcAddr( device, "vkCmdSetLogicOpEXT" ) ); - vkCmdSetPatchControlPointsEXT = - PFN_vkCmdSetPatchControlPointsEXT( vkGetDeviceProcAddr( device, "vkCmdSetPatchControlPointsEXT" ) ); - vkCmdSetPerformanceMarkerINTEL = - PFN_vkCmdSetPerformanceMarkerINTEL( vkGetDeviceProcAddr( device, "vkCmdSetPerformanceMarkerINTEL" ) ); - vkCmdSetPerformanceOverrideINTEL = - PFN_vkCmdSetPerformanceOverrideINTEL( vkGetDeviceProcAddr( device, "vkCmdSetPerformanceOverrideINTEL" ) ); - vkCmdSetPerformanceStreamMarkerINTEL = PFN_vkCmdSetPerformanceStreamMarkerINTEL( - vkGetDeviceProcAddr( device, "vkCmdSetPerformanceStreamMarkerINTEL" ) ); - vkCmdSetPrimitiveRestartEnableEXT = - PFN_vkCmdSetPrimitiveRestartEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetPrimitiveRestartEnableEXT" ) ); - vkCmdSetPrimitiveTopologyEXT = - PFN_vkCmdSetPrimitiveTopologyEXT( vkGetDeviceProcAddr( device, "vkCmdSetPrimitiveTopologyEXT" ) ); - vkCmdSetRasterizerDiscardEnableEXT = - PFN_vkCmdSetRasterizerDiscardEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetRasterizerDiscardEnableEXT" ) ); - vkCmdSetRayTracingPipelineStackSizeKHR = PFN_vkCmdSetRayTracingPipelineStackSizeKHR( - vkGetDeviceProcAddr( device, "vkCmdSetRayTracingPipelineStackSizeKHR" ) ); - vkCmdSetSampleLocationsEXT = - PFN_vkCmdSetSampleLocationsEXT( vkGetDeviceProcAddr( device, "vkCmdSetSampleLocationsEXT" ) ); - vkCmdSetScissor = PFN_vkCmdSetScissor( vkGetDeviceProcAddr( device, "vkCmdSetScissor" ) ); - vkCmdSetScissorWithCountEXT = - PFN_vkCmdSetScissorWithCountEXT( vkGetDeviceProcAddr( device, "vkCmdSetScissorWithCountEXT" ) ); - vkCmdSetStencilCompareMask = - PFN_vkCmdSetStencilCompareMask( vkGetDeviceProcAddr( device, "vkCmdSetStencilCompareMask" ) ); - vkCmdSetStencilOpEXT = PFN_vkCmdSetStencilOpEXT( vkGetDeviceProcAddr( device, "vkCmdSetStencilOpEXT" ) ); - vkCmdSetStencilReference = - PFN_vkCmdSetStencilReference( vkGetDeviceProcAddr( device, "vkCmdSetStencilReference" ) ); + vkCmdSetDepthCompareOpEXT = + PFN_vkCmdSetDepthCompareOpEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthCompareOpEXT" ) ); + vkCmdSetDepthBoundsTestEnableEXT = + PFN_vkCmdSetDepthBoundsTestEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthBoundsTestEnableEXT" ) ); vkCmdSetStencilTestEnableEXT = PFN_vkCmdSetStencilTestEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetStencilTestEnableEXT" ) ); - vkCmdSetStencilWriteMask = - PFN_vkCmdSetStencilWriteMask( vkGetDeviceProcAddr( device, "vkCmdSetStencilWriteMask" ) ); + vkCmdSetStencilOpEXT = PFN_vkCmdSetStencilOpEXT( vkGetDeviceProcAddr( device, "vkCmdSetStencilOpEXT" ) ); + + //=== VK_EXT_extended_dynamic_state2 === + vkCmdSetPatchControlPointsEXT = + PFN_vkCmdSetPatchControlPointsEXT( vkGetDeviceProcAddr( device, "vkCmdSetPatchControlPointsEXT" ) ); + vkCmdSetRasterizerDiscardEnableEXT = + PFN_vkCmdSetRasterizerDiscardEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetRasterizerDiscardEnableEXT" ) ); + vkCmdSetDepthBiasEnableEXT = + PFN_vkCmdSetDepthBiasEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthBiasEnableEXT" ) ); + vkCmdSetLogicOpEXT = PFN_vkCmdSetLogicOpEXT( vkGetDeviceProcAddr( device, "vkCmdSetLogicOpEXT" ) ); + vkCmdSetPrimitiveRestartEnableEXT = + PFN_vkCmdSetPrimitiveRestartEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetPrimitiveRestartEnableEXT" ) ); + + //=== VK_EXT_external_memory_host === + vkGetMemoryHostPointerPropertiesEXT = PFN_vkGetMemoryHostPointerPropertiesEXT( + vkGetDeviceProcAddr( device, "vkGetMemoryHostPointerPropertiesEXT" ) ); + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_EXT_full_screen_exclusive === + vkAcquireFullScreenExclusiveModeEXT = PFN_vkAcquireFullScreenExclusiveModeEXT( + vkGetDeviceProcAddr( device, "vkAcquireFullScreenExclusiveModeEXT" ) ); + vkReleaseFullScreenExclusiveModeEXT = PFN_vkReleaseFullScreenExclusiveModeEXT( + vkGetDeviceProcAddr( device, "vkReleaseFullScreenExclusiveModeEXT" ) ); + vkGetDeviceGroupSurfacePresentModes2EXT = PFN_vkGetDeviceGroupSurfacePresentModes2EXT( + vkGetDeviceProcAddr( device, "vkGetDeviceGroupSurfacePresentModes2EXT" ) ); +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_hdr_metadata === + vkSetHdrMetadataEXT = PFN_vkSetHdrMetadataEXT( vkGetDeviceProcAddr( device, "vkSetHdrMetadataEXT" ) ); + + //=== VK_EXT_host_query_reset === + vkResetQueryPoolEXT = PFN_vkResetQueryPoolEXT( vkGetDeviceProcAddr( device, "vkResetQueryPoolEXT" ) ); + if ( !vkResetQueryPool ) + vkResetQueryPool = vkResetQueryPoolEXT; + + //=== VK_EXT_image_drm_format_modifier === + vkGetImageDrmFormatModifierPropertiesEXT = PFN_vkGetImageDrmFormatModifierPropertiesEXT( + vkGetDeviceProcAddr( device, "vkGetImageDrmFormatModifierPropertiesEXT" ) ); + + //=== VK_EXT_line_rasterization === + vkCmdSetLineStippleEXT = PFN_vkCmdSetLineStippleEXT( vkGetDeviceProcAddr( device, "vkCmdSetLineStippleEXT" ) ); + + //=== VK_EXT_multi_draw === + vkCmdDrawMultiEXT = PFN_vkCmdDrawMultiEXT( vkGetDeviceProcAddr( device, "vkCmdDrawMultiEXT" ) ); + vkCmdDrawMultiIndexedEXT = + PFN_vkCmdDrawMultiIndexedEXT( vkGetDeviceProcAddr( device, "vkCmdDrawMultiIndexedEXT" ) ); + + //=== VK_EXT_private_data === + vkCreatePrivateDataSlotEXT = + PFN_vkCreatePrivateDataSlotEXT( vkGetDeviceProcAddr( device, "vkCreatePrivateDataSlotEXT" ) ); + vkDestroyPrivateDataSlotEXT = + PFN_vkDestroyPrivateDataSlotEXT( vkGetDeviceProcAddr( device, "vkDestroyPrivateDataSlotEXT" ) ); + vkSetPrivateDataEXT = PFN_vkSetPrivateDataEXT( vkGetDeviceProcAddr( device, "vkSetPrivateDataEXT" ) ); + vkGetPrivateDataEXT = PFN_vkGetPrivateDataEXT( vkGetDeviceProcAddr( device, "vkGetPrivateDataEXT" ) ); + + //=== VK_EXT_sample_locations === + vkCmdSetSampleLocationsEXT = + PFN_vkCmdSetSampleLocationsEXT( vkGetDeviceProcAddr( device, "vkCmdSetSampleLocationsEXT" ) ); + + //=== VK_EXT_transform_feedback === + vkCmdBindTransformFeedbackBuffersEXT = PFN_vkCmdBindTransformFeedbackBuffersEXT( + vkGetDeviceProcAddr( device, "vkCmdBindTransformFeedbackBuffersEXT" ) ); + vkCmdBeginTransformFeedbackEXT = + PFN_vkCmdBeginTransformFeedbackEXT( vkGetDeviceProcAddr( device, "vkCmdBeginTransformFeedbackEXT" ) ); + vkCmdEndTransformFeedbackEXT = + PFN_vkCmdEndTransformFeedbackEXT( vkGetDeviceProcAddr( device, "vkCmdEndTransformFeedbackEXT" ) ); + vkCmdBeginQueryIndexedEXT = + PFN_vkCmdBeginQueryIndexedEXT( vkGetDeviceProcAddr( device, "vkCmdBeginQueryIndexedEXT" ) ); + vkCmdEndQueryIndexedEXT = + PFN_vkCmdEndQueryIndexedEXT( vkGetDeviceProcAddr( device, "vkCmdEndQueryIndexedEXT" ) ); + vkCmdDrawIndirectByteCountEXT = + PFN_vkCmdDrawIndirectByteCountEXT( vkGetDeviceProcAddr( device, "vkCmdDrawIndirectByteCountEXT" ) ); + + //=== VK_EXT_validation_cache === + vkCreateValidationCacheEXT = + PFN_vkCreateValidationCacheEXT( vkGetDeviceProcAddr( device, "vkCreateValidationCacheEXT" ) ); + vkDestroyValidationCacheEXT = + PFN_vkDestroyValidationCacheEXT( vkGetDeviceProcAddr( device, "vkDestroyValidationCacheEXT" ) ); + vkMergeValidationCachesEXT = + PFN_vkMergeValidationCachesEXT( vkGetDeviceProcAddr( device, "vkMergeValidationCachesEXT" ) ); + vkGetValidationCacheDataEXT = + PFN_vkGetValidationCacheDataEXT( vkGetDeviceProcAddr( device, "vkGetValidationCacheDataEXT" ) ); + + //=== VK_EXT_vertex_input_dynamic_state === vkCmdSetVertexInputEXT = PFN_vkCmdSetVertexInputEXT( vkGetDeviceProcAddr( device, "vkCmdSetVertexInputEXT" ) ); - vkCmdSetViewport = PFN_vkCmdSetViewport( vkGetDeviceProcAddr( device, "vkCmdSetViewport" ) ); - vkCmdSetViewportShadingRatePaletteNV = PFN_vkCmdSetViewportShadingRatePaletteNV( - vkGetDeviceProcAddr( device, "vkCmdSetViewportShadingRatePaletteNV" ) ); - vkCmdSetViewportWScalingNV = - PFN_vkCmdSetViewportWScalingNV( vkGetDeviceProcAddr( device, "vkCmdSetViewportWScalingNV" ) ); - vkCmdSetViewportWithCountEXT = - PFN_vkCmdSetViewportWithCountEXT( vkGetDeviceProcAddr( device, "vkCmdSetViewportWithCountEXT" ) ); + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_external_memory === + vkGetMemoryZirconHandleFUCHSIA = + PFN_vkGetMemoryZirconHandleFUCHSIA( vkGetDeviceProcAddr( device, "vkGetMemoryZirconHandleFUCHSIA" ) ); + vkGetMemoryZirconHandlePropertiesFUCHSIA = PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA( + vkGetDeviceProcAddr( device, "vkGetMemoryZirconHandlePropertiesFUCHSIA" ) ); +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_external_semaphore === + vkImportSemaphoreZirconHandleFUCHSIA = PFN_vkImportSemaphoreZirconHandleFUCHSIA( + vkGetDeviceProcAddr( device, "vkImportSemaphoreZirconHandleFUCHSIA" ) ); + vkGetSemaphoreZirconHandleFUCHSIA = + PFN_vkGetSemaphoreZirconHandleFUCHSIA( vkGetDeviceProcAddr( device, "vkGetSemaphoreZirconHandleFUCHSIA" ) ); +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + + //=== VK_GOOGLE_display_timing === + vkGetRefreshCycleDurationGOOGLE = + PFN_vkGetRefreshCycleDurationGOOGLE( vkGetDeviceProcAddr( device, "vkGetRefreshCycleDurationGOOGLE" ) ); + vkGetPastPresentationTimingGOOGLE = + PFN_vkGetPastPresentationTimingGOOGLE( vkGetDeviceProcAddr( device, "vkGetPastPresentationTimingGOOGLE" ) ); + + //=== VK_HUAWEI_invocation_mask === + vkCmdBindInvocationMaskHUAWEI = + PFN_vkCmdBindInvocationMaskHUAWEI( vkGetDeviceProcAddr( device, "vkCmdBindInvocationMaskHUAWEI" ) ); + + //=== VK_HUAWEI_subpass_shading === + vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI = PFN_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI( + vkGetDeviceProcAddr( device, "vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI" ) ); vkCmdSubpassShadingHUAWEI = PFN_vkCmdSubpassShadingHUAWEI( vkGetDeviceProcAddr( device, "vkCmdSubpassShadingHUAWEI" ) ); - vkCmdTraceRaysIndirectKHR = - PFN_vkCmdTraceRaysIndirectKHR( vkGetDeviceProcAddr( device, "vkCmdTraceRaysIndirectKHR" ) ); - vkCmdTraceRaysKHR = PFN_vkCmdTraceRaysKHR( vkGetDeviceProcAddr( device, "vkCmdTraceRaysKHR" ) ); - vkCmdTraceRaysNV = PFN_vkCmdTraceRaysNV( vkGetDeviceProcAddr( device, "vkCmdTraceRaysNV" ) ); - vkCmdUpdateBuffer = PFN_vkCmdUpdateBuffer( vkGetDeviceProcAddr( device, "vkCmdUpdateBuffer" ) ); - vkCmdWaitEvents = PFN_vkCmdWaitEvents( vkGetDeviceProcAddr( device, "vkCmdWaitEvents" ) ); - vkCmdWaitEvents2KHR = PFN_vkCmdWaitEvents2KHR( vkGetDeviceProcAddr( device, "vkCmdWaitEvents2KHR" ) ); - vkCmdWriteAccelerationStructuresPropertiesKHR = PFN_vkCmdWriteAccelerationStructuresPropertiesKHR( - vkGetDeviceProcAddr( device, "vkCmdWriteAccelerationStructuresPropertiesKHR" ) ); - vkCmdWriteAccelerationStructuresPropertiesNV = PFN_vkCmdWriteAccelerationStructuresPropertiesNV( - vkGetDeviceProcAddr( device, "vkCmdWriteAccelerationStructuresPropertiesNV" ) ); - vkCmdWriteBufferMarker2AMD = - PFN_vkCmdWriteBufferMarker2AMD( vkGetDeviceProcAddr( device, "vkCmdWriteBufferMarker2AMD" ) ); - vkCmdWriteBufferMarkerAMD = - PFN_vkCmdWriteBufferMarkerAMD( vkGetDeviceProcAddr( device, "vkCmdWriteBufferMarkerAMD" ) ); - vkCmdWriteTimestamp = PFN_vkCmdWriteTimestamp( vkGetDeviceProcAddr( device, "vkCmdWriteTimestamp" ) ); - vkCmdWriteTimestamp2KHR = - PFN_vkCmdWriteTimestamp2KHR( vkGetDeviceProcAddr( device, "vkCmdWriteTimestamp2KHR" ) ); - vkCompileDeferredNV = PFN_vkCompileDeferredNV( vkGetDeviceProcAddr( device, "vkCompileDeferredNV" ) ); + + //=== VK_INTEL_performance_query === + vkInitializePerformanceApiINTEL = + PFN_vkInitializePerformanceApiINTEL( vkGetDeviceProcAddr( device, "vkInitializePerformanceApiINTEL" ) ); + vkUninitializePerformanceApiINTEL = + PFN_vkUninitializePerformanceApiINTEL( vkGetDeviceProcAddr( device, "vkUninitializePerformanceApiINTEL" ) ); + vkCmdSetPerformanceMarkerINTEL = + PFN_vkCmdSetPerformanceMarkerINTEL( vkGetDeviceProcAddr( device, "vkCmdSetPerformanceMarkerINTEL" ) ); + vkCmdSetPerformanceStreamMarkerINTEL = PFN_vkCmdSetPerformanceStreamMarkerINTEL( + vkGetDeviceProcAddr( device, "vkCmdSetPerformanceStreamMarkerINTEL" ) ); + vkCmdSetPerformanceOverrideINTEL = + PFN_vkCmdSetPerformanceOverrideINTEL( vkGetDeviceProcAddr( device, "vkCmdSetPerformanceOverrideINTEL" ) ); + vkAcquirePerformanceConfigurationINTEL = PFN_vkAcquirePerformanceConfigurationINTEL( + vkGetDeviceProcAddr( device, "vkAcquirePerformanceConfigurationINTEL" ) ); + vkReleasePerformanceConfigurationINTEL = PFN_vkReleasePerformanceConfigurationINTEL( + vkGetDeviceProcAddr( device, "vkReleasePerformanceConfigurationINTEL" ) ); + vkQueueSetPerformanceConfigurationINTEL = PFN_vkQueueSetPerformanceConfigurationINTEL( + vkGetDeviceProcAddr( device, "vkQueueSetPerformanceConfigurationINTEL" ) ); + vkGetPerformanceParameterINTEL = + PFN_vkGetPerformanceParameterINTEL( vkGetDeviceProcAddr( device, "vkGetPerformanceParameterINTEL" ) ); + + //=== VK_KHR_acceleration_structure === + vkCreateAccelerationStructureKHR = + PFN_vkCreateAccelerationStructureKHR( vkGetDeviceProcAddr( device, "vkCreateAccelerationStructureKHR" ) ); + vkDestroyAccelerationStructureKHR = + PFN_vkDestroyAccelerationStructureKHR( vkGetDeviceProcAddr( device, "vkDestroyAccelerationStructureKHR" ) ); + vkCmdBuildAccelerationStructuresKHR = PFN_vkCmdBuildAccelerationStructuresKHR( + vkGetDeviceProcAddr( device, "vkCmdBuildAccelerationStructuresKHR" ) ); + vkCmdBuildAccelerationStructuresIndirectKHR = PFN_vkCmdBuildAccelerationStructuresIndirectKHR( + vkGetDeviceProcAddr( device, "vkCmdBuildAccelerationStructuresIndirectKHR" ) ); + vkBuildAccelerationStructuresKHR = + PFN_vkBuildAccelerationStructuresKHR( vkGetDeviceProcAddr( device, "vkBuildAccelerationStructuresKHR" ) ); vkCopyAccelerationStructureKHR = PFN_vkCopyAccelerationStructureKHR( vkGetDeviceProcAddr( device, "vkCopyAccelerationStructureKHR" ) ); vkCopyAccelerationStructureToMemoryKHR = PFN_vkCopyAccelerationStructureToMemoryKHR( vkGetDeviceProcAddr( device, "vkCopyAccelerationStructureToMemoryKHR" ) ); vkCopyMemoryToAccelerationStructureKHR = PFN_vkCopyMemoryToAccelerationStructureKHR( vkGetDeviceProcAddr( device, "vkCopyMemoryToAccelerationStructureKHR" ) ); - vkCreateAccelerationStructureKHR = - PFN_vkCreateAccelerationStructureKHR( vkGetDeviceProcAddr( device, "vkCreateAccelerationStructureKHR" ) ); - vkCreateAccelerationStructureNV = - PFN_vkCreateAccelerationStructureNV( vkGetDeviceProcAddr( device, "vkCreateAccelerationStructureNV" ) ); - vkCreateBuffer = PFN_vkCreateBuffer( vkGetDeviceProcAddr( device, "vkCreateBuffer" ) ); - vkCreateBufferView = PFN_vkCreateBufferView( vkGetDeviceProcAddr( device, "vkCreateBufferView" ) ); - vkCreateCommandPool = PFN_vkCreateCommandPool( vkGetDeviceProcAddr( device, "vkCreateCommandPool" ) ); - vkCreateComputePipelines = - PFN_vkCreateComputePipelines( vkGetDeviceProcAddr( device, "vkCreateComputePipelines" ) ); - vkCreateCuFunctionNVX = PFN_vkCreateCuFunctionNVX( vkGetDeviceProcAddr( device, "vkCreateCuFunctionNVX" ) ); - vkCreateCuModuleNVX = PFN_vkCreateCuModuleNVX( vkGetDeviceProcAddr( device, "vkCreateCuModuleNVX" ) ); - vkCreateDeferredOperationKHR = - PFN_vkCreateDeferredOperationKHR( vkGetDeviceProcAddr( device, "vkCreateDeferredOperationKHR" ) ); - vkCreateDescriptorPool = PFN_vkCreateDescriptorPool( vkGetDeviceProcAddr( device, "vkCreateDescriptorPool" ) ); - vkCreateDescriptorSetLayout = - PFN_vkCreateDescriptorSetLayout( vkGetDeviceProcAddr( device, "vkCreateDescriptorSetLayout" ) ); - vkCreateDescriptorUpdateTemplate = - PFN_vkCreateDescriptorUpdateTemplate( vkGetDeviceProcAddr( device, "vkCreateDescriptorUpdateTemplate" ) ); - vkCreateDescriptorUpdateTemplateKHR = PFN_vkCreateDescriptorUpdateTemplateKHR( - vkGetDeviceProcAddr( device, "vkCreateDescriptorUpdateTemplateKHR" ) ); - if ( !vkCreateDescriptorUpdateTemplate ) - vkCreateDescriptorUpdateTemplate = vkCreateDescriptorUpdateTemplateKHR; - vkCreateEvent = PFN_vkCreateEvent( vkGetDeviceProcAddr( device, "vkCreateEvent" ) ); - vkCreateFence = PFN_vkCreateFence( vkGetDeviceProcAddr( device, "vkCreateFence" ) ); - vkCreateFramebuffer = PFN_vkCreateFramebuffer( vkGetDeviceProcAddr( device, "vkCreateFramebuffer" ) ); - vkCreateGraphicsPipelines = - PFN_vkCreateGraphicsPipelines( vkGetDeviceProcAddr( device, "vkCreateGraphicsPipelines" ) ); - vkCreateImage = PFN_vkCreateImage( vkGetDeviceProcAddr( device, "vkCreateImage" ) ); - vkCreateImageView = PFN_vkCreateImageView( vkGetDeviceProcAddr( device, "vkCreateImageView" ) ); - vkCreateIndirectCommandsLayoutNV = - PFN_vkCreateIndirectCommandsLayoutNV( vkGetDeviceProcAddr( device, "vkCreateIndirectCommandsLayoutNV" ) ); - vkCreatePipelineCache = PFN_vkCreatePipelineCache( vkGetDeviceProcAddr( device, "vkCreatePipelineCache" ) ); - vkCreatePipelineLayout = PFN_vkCreatePipelineLayout( vkGetDeviceProcAddr( device, "vkCreatePipelineLayout" ) ); - vkCreatePrivateDataSlotEXT = - PFN_vkCreatePrivateDataSlotEXT( vkGetDeviceProcAddr( device, "vkCreatePrivateDataSlotEXT" ) ); - vkCreateQueryPool = PFN_vkCreateQueryPool( vkGetDeviceProcAddr( device, "vkCreateQueryPool" ) ); - vkCreateRayTracingPipelinesKHR = - PFN_vkCreateRayTracingPipelinesKHR( vkGetDeviceProcAddr( device, "vkCreateRayTracingPipelinesKHR" ) ); - vkCreateRayTracingPipelinesNV = - PFN_vkCreateRayTracingPipelinesNV( vkGetDeviceProcAddr( device, "vkCreateRayTracingPipelinesNV" ) ); - vkCreateRenderPass = PFN_vkCreateRenderPass( vkGetDeviceProcAddr( device, "vkCreateRenderPass" ) ); - vkCreateRenderPass2 = PFN_vkCreateRenderPass2( vkGetDeviceProcAddr( device, "vkCreateRenderPass2" ) ); - vkCreateRenderPass2KHR = PFN_vkCreateRenderPass2KHR( vkGetDeviceProcAddr( device, "vkCreateRenderPass2KHR" ) ); - if ( !vkCreateRenderPass2 ) - vkCreateRenderPass2 = vkCreateRenderPass2KHR; - vkCreateSampler = PFN_vkCreateSampler( vkGetDeviceProcAddr( device, "vkCreateSampler" ) ); - vkCreateSamplerYcbcrConversion = - PFN_vkCreateSamplerYcbcrConversion( vkGetDeviceProcAddr( device, "vkCreateSamplerYcbcrConversion" ) ); - vkCreateSamplerYcbcrConversionKHR = - PFN_vkCreateSamplerYcbcrConversionKHR( vkGetDeviceProcAddr( device, "vkCreateSamplerYcbcrConversionKHR" ) ); - if ( !vkCreateSamplerYcbcrConversion ) - vkCreateSamplerYcbcrConversion = vkCreateSamplerYcbcrConversionKHR; - vkCreateSemaphore = PFN_vkCreateSemaphore( vkGetDeviceProcAddr( device, "vkCreateSemaphore" ) ); - vkCreateShaderModule = PFN_vkCreateShaderModule( vkGetDeviceProcAddr( device, "vkCreateShaderModule" ) ); - vkCreateSharedSwapchainsKHR = - PFN_vkCreateSharedSwapchainsKHR( vkGetDeviceProcAddr( device, "vkCreateSharedSwapchainsKHR" ) ); - vkCreateSwapchainKHR = PFN_vkCreateSwapchainKHR( vkGetDeviceProcAddr( device, "vkCreateSwapchainKHR" ) ); - vkCreateValidationCacheEXT = - PFN_vkCreateValidationCacheEXT( vkGetDeviceProcAddr( device, "vkCreateValidationCacheEXT" ) ); -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - vkCreateVideoSessionKHR = - PFN_vkCreateVideoSessionKHR( vkGetDeviceProcAddr( device, "vkCreateVideoSessionKHR" ) ); -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - vkCreateVideoSessionParametersKHR = - PFN_vkCreateVideoSessionParametersKHR( vkGetDeviceProcAddr( device, "vkCreateVideoSessionParametersKHR" ) ); -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - vkDebugMarkerSetObjectNameEXT = - PFN_vkDebugMarkerSetObjectNameEXT( vkGetDeviceProcAddr( device, "vkDebugMarkerSetObjectNameEXT" ) ); - vkDebugMarkerSetObjectTagEXT = - PFN_vkDebugMarkerSetObjectTagEXT( vkGetDeviceProcAddr( device, "vkDebugMarkerSetObjectTagEXT" ) ); - vkDeferredOperationJoinKHR = - PFN_vkDeferredOperationJoinKHR( vkGetDeviceProcAddr( device, "vkDeferredOperationJoinKHR" ) ); - vkDestroyAccelerationStructureKHR = - PFN_vkDestroyAccelerationStructureKHR( vkGetDeviceProcAddr( device, "vkDestroyAccelerationStructureKHR" ) ); - vkDestroyAccelerationStructureNV = - PFN_vkDestroyAccelerationStructureNV( vkGetDeviceProcAddr( device, "vkDestroyAccelerationStructureNV" ) ); - vkDestroyBuffer = PFN_vkDestroyBuffer( vkGetDeviceProcAddr( device, "vkDestroyBuffer" ) ); - vkDestroyBufferView = PFN_vkDestroyBufferView( vkGetDeviceProcAddr( device, "vkDestroyBufferView" ) ); - vkDestroyCommandPool = PFN_vkDestroyCommandPool( vkGetDeviceProcAddr( device, "vkDestroyCommandPool" ) ); - vkDestroyCuFunctionNVX = PFN_vkDestroyCuFunctionNVX( vkGetDeviceProcAddr( device, "vkDestroyCuFunctionNVX" ) ); - vkDestroyCuModuleNVX = PFN_vkDestroyCuModuleNVX( vkGetDeviceProcAddr( device, "vkDestroyCuModuleNVX" ) ); - vkDestroyDeferredOperationKHR = - PFN_vkDestroyDeferredOperationKHR( vkGetDeviceProcAddr( device, "vkDestroyDeferredOperationKHR" ) ); - vkDestroyDescriptorPool = - PFN_vkDestroyDescriptorPool( vkGetDeviceProcAddr( device, "vkDestroyDescriptorPool" ) ); - vkDestroyDescriptorSetLayout = - PFN_vkDestroyDescriptorSetLayout( vkGetDeviceProcAddr( device, "vkDestroyDescriptorSetLayout" ) ); - vkDestroyDescriptorUpdateTemplate = - PFN_vkDestroyDescriptorUpdateTemplate( vkGetDeviceProcAddr( device, "vkDestroyDescriptorUpdateTemplate" ) ); - vkDestroyDescriptorUpdateTemplateKHR = PFN_vkDestroyDescriptorUpdateTemplateKHR( - vkGetDeviceProcAddr( device, "vkDestroyDescriptorUpdateTemplateKHR" ) ); - if ( !vkDestroyDescriptorUpdateTemplate ) - vkDestroyDescriptorUpdateTemplate = vkDestroyDescriptorUpdateTemplateKHR; - vkDestroyDevice = PFN_vkDestroyDevice( vkGetDeviceProcAddr( device, "vkDestroyDevice" ) ); - vkDestroyEvent = PFN_vkDestroyEvent( vkGetDeviceProcAddr( device, "vkDestroyEvent" ) ); - vkDestroyFence = PFN_vkDestroyFence( vkGetDeviceProcAddr( device, "vkDestroyFence" ) ); - vkDestroyFramebuffer = PFN_vkDestroyFramebuffer( vkGetDeviceProcAddr( device, "vkDestroyFramebuffer" ) ); - vkDestroyImage = PFN_vkDestroyImage( vkGetDeviceProcAddr( device, "vkDestroyImage" ) ); - vkDestroyImageView = PFN_vkDestroyImageView( vkGetDeviceProcAddr( device, "vkDestroyImageView" ) ); - vkDestroyIndirectCommandsLayoutNV = - PFN_vkDestroyIndirectCommandsLayoutNV( vkGetDeviceProcAddr( device, "vkDestroyIndirectCommandsLayoutNV" ) ); - vkDestroyPipeline = PFN_vkDestroyPipeline( vkGetDeviceProcAddr( device, "vkDestroyPipeline" ) ); - vkDestroyPipelineCache = PFN_vkDestroyPipelineCache( vkGetDeviceProcAddr( device, "vkDestroyPipelineCache" ) ); - vkDestroyPipelineLayout = - PFN_vkDestroyPipelineLayout( vkGetDeviceProcAddr( device, "vkDestroyPipelineLayout" ) ); - vkDestroyPrivateDataSlotEXT = - PFN_vkDestroyPrivateDataSlotEXT( vkGetDeviceProcAddr( device, "vkDestroyPrivateDataSlotEXT" ) ); - vkDestroyQueryPool = PFN_vkDestroyQueryPool( vkGetDeviceProcAddr( device, "vkDestroyQueryPool" ) ); - vkDestroyRenderPass = PFN_vkDestroyRenderPass( vkGetDeviceProcAddr( device, "vkDestroyRenderPass" ) ); - vkDestroySampler = PFN_vkDestroySampler( vkGetDeviceProcAddr( device, "vkDestroySampler" ) ); - vkDestroySamplerYcbcrConversion = - PFN_vkDestroySamplerYcbcrConversion( vkGetDeviceProcAddr( device, "vkDestroySamplerYcbcrConversion" ) ); - vkDestroySamplerYcbcrConversionKHR = - PFN_vkDestroySamplerYcbcrConversionKHR( vkGetDeviceProcAddr( device, "vkDestroySamplerYcbcrConversionKHR" ) ); - if ( !vkDestroySamplerYcbcrConversion ) - vkDestroySamplerYcbcrConversion = vkDestroySamplerYcbcrConversionKHR; - vkDestroySemaphore = PFN_vkDestroySemaphore( vkGetDeviceProcAddr( device, "vkDestroySemaphore" ) ); - vkDestroyShaderModule = PFN_vkDestroyShaderModule( vkGetDeviceProcAddr( device, "vkDestroyShaderModule" ) ); - vkDestroySwapchainKHR = PFN_vkDestroySwapchainKHR( vkGetDeviceProcAddr( device, "vkDestroySwapchainKHR" ) ); - vkDestroyValidationCacheEXT = - PFN_vkDestroyValidationCacheEXT( vkGetDeviceProcAddr( device, "vkDestroyValidationCacheEXT" ) ); -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - vkDestroyVideoSessionKHR = - PFN_vkDestroyVideoSessionKHR( vkGetDeviceProcAddr( device, "vkDestroyVideoSessionKHR" ) ); -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - vkDestroyVideoSessionParametersKHR = - PFN_vkDestroyVideoSessionParametersKHR( vkGetDeviceProcAddr( device, "vkDestroyVideoSessionParametersKHR" ) ); -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - vkDeviceWaitIdle = PFN_vkDeviceWaitIdle( vkGetDeviceProcAddr( device, "vkDeviceWaitIdle" ) ); - vkDisplayPowerControlEXT = - PFN_vkDisplayPowerControlEXT( vkGetDeviceProcAddr( device, "vkDisplayPowerControlEXT" ) ); - vkEndCommandBuffer = PFN_vkEndCommandBuffer( vkGetDeviceProcAddr( device, "vkEndCommandBuffer" ) ); - vkFlushMappedMemoryRanges = - PFN_vkFlushMappedMemoryRanges( vkGetDeviceProcAddr( device, "vkFlushMappedMemoryRanges" ) ); - vkFreeCommandBuffers = PFN_vkFreeCommandBuffers( vkGetDeviceProcAddr( device, "vkFreeCommandBuffers" ) ); - vkFreeDescriptorSets = PFN_vkFreeDescriptorSets( vkGetDeviceProcAddr( device, "vkFreeDescriptorSets" ) ); - vkFreeMemory = PFN_vkFreeMemory( vkGetDeviceProcAddr( device, "vkFreeMemory" ) ); - vkGetAccelerationStructureBuildSizesKHR = PFN_vkGetAccelerationStructureBuildSizesKHR( - vkGetDeviceProcAddr( device, "vkGetAccelerationStructureBuildSizesKHR" ) ); + vkWriteAccelerationStructuresPropertiesKHR = PFN_vkWriteAccelerationStructuresPropertiesKHR( + vkGetDeviceProcAddr( device, "vkWriteAccelerationStructuresPropertiesKHR" ) ); + vkCmdCopyAccelerationStructureKHR = + PFN_vkCmdCopyAccelerationStructureKHR( vkGetDeviceProcAddr( device, "vkCmdCopyAccelerationStructureKHR" ) ); + vkCmdCopyAccelerationStructureToMemoryKHR = PFN_vkCmdCopyAccelerationStructureToMemoryKHR( + vkGetDeviceProcAddr( device, "vkCmdCopyAccelerationStructureToMemoryKHR" ) ); + vkCmdCopyMemoryToAccelerationStructureKHR = PFN_vkCmdCopyMemoryToAccelerationStructureKHR( + vkGetDeviceProcAddr( device, "vkCmdCopyMemoryToAccelerationStructureKHR" ) ); vkGetAccelerationStructureDeviceAddressKHR = PFN_vkGetAccelerationStructureDeviceAddressKHR( vkGetDeviceProcAddr( device, "vkGetAccelerationStructureDeviceAddressKHR" ) ); - vkGetAccelerationStructureHandleNV = - PFN_vkGetAccelerationStructureHandleNV( vkGetDeviceProcAddr( device, "vkGetAccelerationStructureHandleNV" ) ); - vkGetAccelerationStructureMemoryRequirementsNV = PFN_vkGetAccelerationStructureMemoryRequirementsNV( - vkGetDeviceProcAddr( device, "vkGetAccelerationStructureMemoryRequirementsNV" ) ); -# if defined( VK_USE_PLATFORM_ANDROID_KHR ) - vkGetAndroidHardwareBufferPropertiesANDROID = PFN_vkGetAndroidHardwareBufferPropertiesANDROID( - vkGetDeviceProcAddr( device, "vkGetAndroidHardwareBufferPropertiesANDROID" ) ); -# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - vkGetBufferDeviceAddress = - PFN_vkGetBufferDeviceAddress( vkGetDeviceProcAddr( device, "vkGetBufferDeviceAddress" ) ); - vkGetBufferDeviceAddressEXT = - PFN_vkGetBufferDeviceAddressEXT( vkGetDeviceProcAddr( device, "vkGetBufferDeviceAddressEXT" ) ); - if ( !vkGetBufferDeviceAddress ) - vkGetBufferDeviceAddress = vkGetBufferDeviceAddressEXT; + vkCmdWriteAccelerationStructuresPropertiesKHR = PFN_vkCmdWriteAccelerationStructuresPropertiesKHR( + vkGetDeviceProcAddr( device, "vkCmdWriteAccelerationStructuresPropertiesKHR" ) ); + vkGetDeviceAccelerationStructureCompatibilityKHR = PFN_vkGetDeviceAccelerationStructureCompatibilityKHR( + vkGetDeviceProcAddr( device, "vkGetDeviceAccelerationStructureCompatibilityKHR" ) ); + vkGetAccelerationStructureBuildSizesKHR = PFN_vkGetAccelerationStructureBuildSizesKHR( + vkGetDeviceProcAddr( device, "vkGetAccelerationStructureBuildSizesKHR" ) ); + + //=== VK_KHR_bind_memory2 === + vkBindBufferMemory2KHR = PFN_vkBindBufferMemory2KHR( vkGetDeviceProcAddr( device, "vkBindBufferMemory2KHR" ) ); + if ( !vkBindBufferMemory2 ) + vkBindBufferMemory2 = vkBindBufferMemory2KHR; + vkBindImageMemory2KHR = PFN_vkBindImageMemory2KHR( vkGetDeviceProcAddr( device, "vkBindImageMemory2KHR" ) ); + if ( !vkBindImageMemory2 ) + vkBindImageMemory2 = vkBindImageMemory2KHR; + + //=== VK_KHR_buffer_device_address === vkGetBufferDeviceAddressKHR = PFN_vkGetBufferDeviceAddressKHR( vkGetDeviceProcAddr( device, "vkGetBufferDeviceAddressKHR" ) ); if ( !vkGetBufferDeviceAddress ) vkGetBufferDeviceAddress = vkGetBufferDeviceAddressKHR; - vkGetBufferMemoryRequirements = - PFN_vkGetBufferMemoryRequirements( vkGetDeviceProcAddr( device, "vkGetBufferMemoryRequirements" ) ); - vkGetBufferMemoryRequirements2 = - PFN_vkGetBufferMemoryRequirements2( vkGetDeviceProcAddr( device, "vkGetBufferMemoryRequirements2" ) ); - vkGetBufferMemoryRequirements2KHR = - PFN_vkGetBufferMemoryRequirements2KHR( vkGetDeviceProcAddr( device, "vkGetBufferMemoryRequirements2KHR" ) ); - if ( !vkGetBufferMemoryRequirements2 ) - vkGetBufferMemoryRequirements2 = vkGetBufferMemoryRequirements2KHR; - vkGetBufferOpaqueCaptureAddress = - PFN_vkGetBufferOpaqueCaptureAddress( vkGetDeviceProcAddr( device, "vkGetBufferOpaqueCaptureAddress" ) ); vkGetBufferOpaqueCaptureAddressKHR = PFN_vkGetBufferOpaqueCaptureAddressKHR( vkGetDeviceProcAddr( device, "vkGetBufferOpaqueCaptureAddressKHR" ) ); if ( !vkGetBufferOpaqueCaptureAddress ) vkGetBufferOpaqueCaptureAddress = vkGetBufferOpaqueCaptureAddressKHR; - vkGetCalibratedTimestampsEXT = - PFN_vkGetCalibratedTimestampsEXT( vkGetDeviceProcAddr( device, "vkGetCalibratedTimestampsEXT" ) ); - vkGetDeferredOperationMaxConcurrencyKHR = PFN_vkGetDeferredOperationMaxConcurrencyKHR( - vkGetDeviceProcAddr( device, "vkGetDeferredOperationMaxConcurrencyKHR" ) ); - vkGetDeferredOperationResultKHR = - PFN_vkGetDeferredOperationResultKHR( vkGetDeviceProcAddr( device, "vkGetDeferredOperationResultKHR" ) ); - vkGetDescriptorSetLayoutSupport = - PFN_vkGetDescriptorSetLayoutSupport( vkGetDeviceProcAddr( device, "vkGetDescriptorSetLayoutSupport" ) ); - vkGetDescriptorSetLayoutSupportKHR = - PFN_vkGetDescriptorSetLayoutSupportKHR( vkGetDeviceProcAddr( device, "vkGetDescriptorSetLayoutSupportKHR" ) ); - if ( !vkGetDescriptorSetLayoutSupport ) - vkGetDescriptorSetLayoutSupport = vkGetDescriptorSetLayoutSupportKHR; - vkGetDeviceAccelerationStructureCompatibilityKHR = PFN_vkGetDeviceAccelerationStructureCompatibilityKHR( - vkGetDeviceProcAddr( device, "vkGetDeviceAccelerationStructureCompatibilityKHR" ) ); - vkGetDeviceGroupPeerMemoryFeatures = - PFN_vkGetDeviceGroupPeerMemoryFeatures( vkGetDeviceProcAddr( device, "vkGetDeviceGroupPeerMemoryFeatures" ) ); - vkGetDeviceGroupPeerMemoryFeaturesKHR = PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR( - vkGetDeviceProcAddr( device, "vkGetDeviceGroupPeerMemoryFeaturesKHR" ) ); - if ( !vkGetDeviceGroupPeerMemoryFeatures ) - vkGetDeviceGroupPeerMemoryFeatures = vkGetDeviceGroupPeerMemoryFeaturesKHR; - vkGetDeviceGroupPresentCapabilitiesKHR = PFN_vkGetDeviceGroupPresentCapabilitiesKHR( - vkGetDeviceProcAddr( device, "vkGetDeviceGroupPresentCapabilitiesKHR" ) ); -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - vkGetDeviceGroupSurfacePresentModes2EXT = PFN_vkGetDeviceGroupSurfacePresentModes2EXT( - vkGetDeviceProcAddr( device, "vkGetDeviceGroupSurfacePresentModes2EXT" ) ); -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - vkGetDeviceGroupSurfacePresentModesKHR = PFN_vkGetDeviceGroupSurfacePresentModesKHR( - vkGetDeviceProcAddr( device, "vkGetDeviceGroupSurfacePresentModesKHR" ) ); - vkGetDeviceMemoryCommitment = - PFN_vkGetDeviceMemoryCommitment( vkGetDeviceProcAddr( device, "vkGetDeviceMemoryCommitment" ) ); - vkGetDeviceMemoryOpaqueCaptureAddress = PFN_vkGetDeviceMemoryOpaqueCaptureAddress( - vkGetDeviceProcAddr( device, "vkGetDeviceMemoryOpaqueCaptureAddress" ) ); vkGetDeviceMemoryOpaqueCaptureAddressKHR = PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR( vkGetDeviceProcAddr( device, "vkGetDeviceMemoryOpaqueCaptureAddressKHR" ) ); if ( !vkGetDeviceMemoryOpaqueCaptureAddress ) vkGetDeviceMemoryOpaqueCaptureAddress = vkGetDeviceMemoryOpaqueCaptureAddressKHR; - vkGetDeviceProcAddr = PFN_vkGetDeviceProcAddr( vkGetDeviceProcAddr( device, "vkGetDeviceProcAddr" ) ); - vkGetDeviceQueue = PFN_vkGetDeviceQueue( vkGetDeviceProcAddr( device, "vkGetDeviceQueue" ) ); - vkGetDeviceQueue2 = PFN_vkGetDeviceQueue2( vkGetDeviceProcAddr( device, "vkGetDeviceQueue2" ) ); - vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI = PFN_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI( - vkGetDeviceProcAddr( device, "vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI" ) ); - vkGetEventStatus = PFN_vkGetEventStatus( vkGetDeviceProcAddr( device, "vkGetEventStatus" ) ); - vkGetFenceFdKHR = PFN_vkGetFenceFdKHR( vkGetDeviceProcAddr( device, "vkGetFenceFdKHR" ) ); - vkGetFenceStatus = PFN_vkGetFenceStatus( vkGetDeviceProcAddr( device, "vkGetFenceStatus" ) ); -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - vkGetFenceWin32HandleKHR = - PFN_vkGetFenceWin32HandleKHR( vkGetDeviceProcAddr( device, "vkGetFenceWin32HandleKHR" ) ); -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - vkGetGeneratedCommandsMemoryRequirementsNV = PFN_vkGetGeneratedCommandsMemoryRequirementsNV( - vkGetDeviceProcAddr( device, "vkGetGeneratedCommandsMemoryRequirementsNV" ) ); - vkGetImageDrmFormatModifierPropertiesEXT = PFN_vkGetImageDrmFormatModifierPropertiesEXT( - vkGetDeviceProcAddr( device, "vkGetImageDrmFormatModifierPropertiesEXT" ) ); - vkGetImageMemoryRequirements = - PFN_vkGetImageMemoryRequirements( vkGetDeviceProcAddr( device, "vkGetImageMemoryRequirements" ) ); - vkGetImageMemoryRequirements2 = - PFN_vkGetImageMemoryRequirements2( vkGetDeviceProcAddr( device, "vkGetImageMemoryRequirements2" ) ); - vkGetImageMemoryRequirements2KHR = - PFN_vkGetImageMemoryRequirements2KHR( vkGetDeviceProcAddr( device, "vkGetImageMemoryRequirements2KHR" ) ); - if ( !vkGetImageMemoryRequirements2 ) - vkGetImageMemoryRequirements2 = vkGetImageMemoryRequirements2KHR; - vkGetImageSparseMemoryRequirements = - PFN_vkGetImageSparseMemoryRequirements( vkGetDeviceProcAddr( device, "vkGetImageSparseMemoryRequirements" ) ); - vkGetImageSparseMemoryRequirements2 = PFN_vkGetImageSparseMemoryRequirements2( - vkGetDeviceProcAddr( device, "vkGetImageSparseMemoryRequirements2" ) ); - vkGetImageSparseMemoryRequirements2KHR = PFN_vkGetImageSparseMemoryRequirements2KHR( - vkGetDeviceProcAddr( device, "vkGetImageSparseMemoryRequirements2KHR" ) ); - if ( !vkGetImageSparseMemoryRequirements2 ) - vkGetImageSparseMemoryRequirements2 = vkGetImageSparseMemoryRequirements2KHR; - vkGetImageSubresourceLayout = - PFN_vkGetImageSubresourceLayout( vkGetDeviceProcAddr( device, "vkGetImageSubresourceLayout" ) ); - vkGetImageViewAddressNVX = - PFN_vkGetImageViewAddressNVX( vkGetDeviceProcAddr( device, "vkGetImageViewAddressNVX" ) ); - vkGetImageViewHandleNVX = - PFN_vkGetImageViewHandleNVX( vkGetDeviceProcAddr( device, "vkGetImageViewHandleNVX" ) ); -# if defined( VK_USE_PLATFORM_ANDROID_KHR ) - vkGetMemoryAndroidHardwareBufferANDROID = PFN_vkGetMemoryAndroidHardwareBufferANDROID( - vkGetDeviceProcAddr( device, "vkGetMemoryAndroidHardwareBufferANDROID" ) ); -# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - vkGetMemoryFdKHR = PFN_vkGetMemoryFdKHR( vkGetDeviceProcAddr( device, "vkGetMemoryFdKHR" ) ); - vkGetMemoryFdPropertiesKHR = - PFN_vkGetMemoryFdPropertiesKHR( vkGetDeviceProcAddr( device, "vkGetMemoryFdPropertiesKHR" ) ); - vkGetMemoryHostPointerPropertiesEXT = PFN_vkGetMemoryHostPointerPropertiesEXT( - vkGetDeviceProcAddr( device, "vkGetMemoryHostPointerPropertiesEXT" ) ); - vkGetMemoryRemoteAddressNV = - PFN_vkGetMemoryRemoteAddressNV( vkGetDeviceProcAddr( device, "vkGetMemoryRemoteAddressNV" ) ); -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - vkGetMemoryWin32HandleKHR = - PFN_vkGetMemoryWin32HandleKHR( vkGetDeviceProcAddr( device, "vkGetMemoryWin32HandleKHR" ) ); -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - vkGetMemoryWin32HandleNV = - PFN_vkGetMemoryWin32HandleNV( vkGetDeviceProcAddr( device, "vkGetMemoryWin32HandleNV" ) ); -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - vkGetMemoryWin32HandlePropertiesKHR = PFN_vkGetMemoryWin32HandlePropertiesKHR( - vkGetDeviceProcAddr( device, "vkGetMemoryWin32HandlePropertiesKHR" ) ); -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ -# if defined( VK_USE_PLATFORM_FUCHSIA ) - vkGetMemoryZirconHandleFUCHSIA = - PFN_vkGetMemoryZirconHandleFUCHSIA( vkGetDeviceProcAddr( device, "vkGetMemoryZirconHandleFUCHSIA" ) ); -# endif /*VK_USE_PLATFORM_FUCHSIA*/ -# if defined( VK_USE_PLATFORM_FUCHSIA ) - vkGetMemoryZirconHandlePropertiesFUCHSIA = PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA( - vkGetDeviceProcAddr( device, "vkGetMemoryZirconHandlePropertiesFUCHSIA" ) ); -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - vkGetPastPresentationTimingGOOGLE = - PFN_vkGetPastPresentationTimingGOOGLE( vkGetDeviceProcAddr( device, "vkGetPastPresentationTimingGOOGLE" ) ); - vkGetPerformanceParameterINTEL = - PFN_vkGetPerformanceParameterINTEL( vkGetDeviceProcAddr( device, "vkGetPerformanceParameterINTEL" ) ); - vkGetPipelineCacheData = PFN_vkGetPipelineCacheData( vkGetDeviceProcAddr( device, "vkGetPipelineCacheData" ) ); - vkGetPipelineExecutableInternalRepresentationsKHR = PFN_vkGetPipelineExecutableInternalRepresentationsKHR( - vkGetDeviceProcAddr( device, "vkGetPipelineExecutableInternalRepresentationsKHR" ) ); - vkGetPipelineExecutablePropertiesKHR = PFN_vkGetPipelineExecutablePropertiesKHR( - vkGetDeviceProcAddr( device, "vkGetPipelineExecutablePropertiesKHR" ) ); - vkGetPipelineExecutableStatisticsKHR = PFN_vkGetPipelineExecutableStatisticsKHR( - vkGetDeviceProcAddr( device, "vkGetPipelineExecutableStatisticsKHR" ) ); - vkGetPrivateDataEXT = PFN_vkGetPrivateDataEXT( vkGetDeviceProcAddr( device, "vkGetPrivateDataEXT" ) ); - vkGetQueryPoolResults = PFN_vkGetQueryPoolResults( vkGetDeviceProcAddr( device, "vkGetQueryPoolResults" ) ); - vkGetQueueCheckpointData2NV = - PFN_vkGetQueueCheckpointData2NV( vkGetDeviceProcAddr( device, "vkGetQueueCheckpointData2NV" ) ); - vkGetQueueCheckpointDataNV = - PFN_vkGetQueueCheckpointDataNV( vkGetDeviceProcAddr( device, "vkGetQueueCheckpointDataNV" ) ); - vkGetRayTracingCaptureReplayShaderGroupHandlesKHR = PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR( - vkGetDeviceProcAddr( device, "vkGetRayTracingCaptureReplayShaderGroupHandlesKHR" ) ); - vkGetRayTracingShaderGroupHandlesKHR = PFN_vkGetRayTracingShaderGroupHandlesKHR( - vkGetDeviceProcAddr( device, "vkGetRayTracingShaderGroupHandlesKHR" ) ); - vkGetRayTracingShaderGroupHandlesNV = PFN_vkGetRayTracingShaderGroupHandlesNV( - vkGetDeviceProcAddr( device, "vkGetRayTracingShaderGroupHandlesNV" ) ); - if ( !vkGetRayTracingShaderGroupHandlesKHR ) - vkGetRayTracingShaderGroupHandlesKHR = vkGetRayTracingShaderGroupHandlesNV; - vkGetRayTracingShaderGroupStackSizeKHR = PFN_vkGetRayTracingShaderGroupStackSizeKHR( - vkGetDeviceProcAddr( device, "vkGetRayTracingShaderGroupStackSizeKHR" ) ); - vkGetRefreshCycleDurationGOOGLE = - PFN_vkGetRefreshCycleDurationGOOGLE( vkGetDeviceProcAddr( device, "vkGetRefreshCycleDurationGOOGLE" ) ); - vkGetRenderAreaGranularity = - PFN_vkGetRenderAreaGranularity( vkGetDeviceProcAddr( device, "vkGetRenderAreaGranularity" ) ); - vkGetSemaphoreCounterValue = - PFN_vkGetSemaphoreCounterValue( vkGetDeviceProcAddr( device, "vkGetSemaphoreCounterValue" ) ); - vkGetSemaphoreCounterValueKHR = - PFN_vkGetSemaphoreCounterValueKHR( vkGetDeviceProcAddr( device, "vkGetSemaphoreCounterValueKHR" ) ); - if ( !vkGetSemaphoreCounterValue ) - vkGetSemaphoreCounterValue = vkGetSemaphoreCounterValueKHR; - vkGetSemaphoreFdKHR = PFN_vkGetSemaphoreFdKHR( vkGetDeviceProcAddr( device, "vkGetSemaphoreFdKHR" ) ); -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - vkGetSemaphoreWin32HandleKHR = - PFN_vkGetSemaphoreWin32HandleKHR( vkGetDeviceProcAddr( device, "vkGetSemaphoreWin32HandleKHR" ) ); -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ -# if defined( VK_USE_PLATFORM_FUCHSIA ) - vkGetSemaphoreZirconHandleFUCHSIA = - PFN_vkGetSemaphoreZirconHandleFUCHSIA( vkGetDeviceProcAddr( device, "vkGetSemaphoreZirconHandleFUCHSIA" ) ); -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - vkGetShaderInfoAMD = PFN_vkGetShaderInfoAMD( vkGetDeviceProcAddr( device, "vkGetShaderInfoAMD" ) ); - vkGetSwapchainCounterEXT = - PFN_vkGetSwapchainCounterEXT( vkGetDeviceProcAddr( device, "vkGetSwapchainCounterEXT" ) ); - vkGetSwapchainImagesKHR = - PFN_vkGetSwapchainImagesKHR( vkGetDeviceProcAddr( device, "vkGetSwapchainImagesKHR" ) ); - vkGetSwapchainStatusKHR = - PFN_vkGetSwapchainStatusKHR( vkGetDeviceProcAddr( device, "vkGetSwapchainStatusKHR" ) ); - vkGetValidationCacheDataEXT = - PFN_vkGetValidationCacheDataEXT( vkGetDeviceProcAddr( device, "vkGetValidationCacheDataEXT" ) ); -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - vkGetVideoSessionMemoryRequirementsKHR = PFN_vkGetVideoSessionMemoryRequirementsKHR( - vkGetDeviceProcAddr( device, "vkGetVideoSessionMemoryRequirementsKHR" ) ); -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - vkImportFenceFdKHR = PFN_vkImportFenceFdKHR( vkGetDeviceProcAddr( device, "vkImportFenceFdKHR" ) ); -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - vkImportFenceWin32HandleKHR = - PFN_vkImportFenceWin32HandleKHR( vkGetDeviceProcAddr( device, "vkImportFenceWin32HandleKHR" ) ); -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - vkImportSemaphoreFdKHR = PFN_vkImportSemaphoreFdKHR( vkGetDeviceProcAddr( device, "vkImportSemaphoreFdKHR" ) ); -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - vkImportSemaphoreWin32HandleKHR = - PFN_vkImportSemaphoreWin32HandleKHR( vkGetDeviceProcAddr( device, "vkImportSemaphoreWin32HandleKHR" ) ); -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ -# if defined( VK_USE_PLATFORM_FUCHSIA ) - vkImportSemaphoreZirconHandleFUCHSIA = PFN_vkImportSemaphoreZirconHandleFUCHSIA( - vkGetDeviceProcAddr( device, "vkImportSemaphoreZirconHandleFUCHSIA" ) ); -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - vkInitializePerformanceApiINTEL = - PFN_vkInitializePerformanceApiINTEL( vkGetDeviceProcAddr( device, "vkInitializePerformanceApiINTEL" ) ); - vkInvalidateMappedMemoryRanges = - PFN_vkInvalidateMappedMemoryRanges( vkGetDeviceProcAddr( device, "vkInvalidateMappedMemoryRanges" ) ); - vkMapMemory = PFN_vkMapMemory( vkGetDeviceProcAddr( device, "vkMapMemory" ) ); - vkMergePipelineCaches = PFN_vkMergePipelineCaches( vkGetDeviceProcAddr( device, "vkMergePipelineCaches" ) ); - vkMergeValidationCachesEXT = - PFN_vkMergeValidationCachesEXT( vkGetDeviceProcAddr( device, "vkMergeValidationCachesEXT" ) ); - vkQueueBeginDebugUtilsLabelEXT = - PFN_vkQueueBeginDebugUtilsLabelEXT( vkGetDeviceProcAddr( device, "vkQueueBeginDebugUtilsLabelEXT" ) ); - vkQueueBindSparse = PFN_vkQueueBindSparse( vkGetDeviceProcAddr( device, "vkQueueBindSparse" ) ); - vkQueueEndDebugUtilsLabelEXT = - PFN_vkQueueEndDebugUtilsLabelEXT( vkGetDeviceProcAddr( device, "vkQueueEndDebugUtilsLabelEXT" ) ); - vkQueueInsertDebugUtilsLabelEXT = - PFN_vkQueueInsertDebugUtilsLabelEXT( vkGetDeviceProcAddr( device, "vkQueueInsertDebugUtilsLabelEXT" ) ); - vkQueuePresentKHR = PFN_vkQueuePresentKHR( vkGetDeviceProcAddr( device, "vkQueuePresentKHR" ) ); - vkQueueSetPerformanceConfigurationINTEL = PFN_vkQueueSetPerformanceConfigurationINTEL( - vkGetDeviceProcAddr( device, "vkQueueSetPerformanceConfigurationINTEL" ) ); - vkQueueSubmit = PFN_vkQueueSubmit( vkGetDeviceProcAddr( device, "vkQueueSubmit" ) ); - vkQueueSubmit2KHR = PFN_vkQueueSubmit2KHR( vkGetDeviceProcAddr( device, "vkQueueSubmit2KHR" ) ); - vkQueueWaitIdle = PFN_vkQueueWaitIdle( vkGetDeviceProcAddr( device, "vkQueueWaitIdle" ) ); - vkRegisterDeviceEventEXT = - PFN_vkRegisterDeviceEventEXT( vkGetDeviceProcAddr( device, "vkRegisterDeviceEventEXT" ) ); - vkRegisterDisplayEventEXT = - PFN_vkRegisterDisplayEventEXT( vkGetDeviceProcAddr( device, "vkRegisterDisplayEventEXT" ) ); -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - vkReleaseFullScreenExclusiveModeEXT = PFN_vkReleaseFullScreenExclusiveModeEXT( - vkGetDeviceProcAddr( device, "vkReleaseFullScreenExclusiveModeEXT" ) ); -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - vkReleasePerformanceConfigurationINTEL = PFN_vkReleasePerformanceConfigurationINTEL( - vkGetDeviceProcAddr( device, "vkReleasePerformanceConfigurationINTEL" ) ); - vkReleaseProfilingLockKHR = - PFN_vkReleaseProfilingLockKHR( vkGetDeviceProcAddr( device, "vkReleaseProfilingLockKHR" ) ); - vkResetCommandBuffer = PFN_vkResetCommandBuffer( vkGetDeviceProcAddr( device, "vkResetCommandBuffer" ) ); - vkResetCommandPool = PFN_vkResetCommandPool( vkGetDeviceProcAddr( device, "vkResetCommandPool" ) ); - vkResetDescriptorPool = PFN_vkResetDescriptorPool( vkGetDeviceProcAddr( device, "vkResetDescriptorPool" ) ); - vkResetEvent = PFN_vkResetEvent( vkGetDeviceProcAddr( device, "vkResetEvent" ) ); - vkResetFences = PFN_vkResetFences( vkGetDeviceProcAddr( device, "vkResetFences" ) ); - vkResetQueryPool = PFN_vkResetQueryPool( vkGetDeviceProcAddr( device, "vkResetQueryPool" ) ); - vkResetQueryPoolEXT = PFN_vkResetQueryPoolEXT( vkGetDeviceProcAddr( device, "vkResetQueryPoolEXT" ) ); - if ( !vkResetQueryPool ) - vkResetQueryPool = vkResetQueryPoolEXT; - vkSetDebugUtilsObjectNameEXT = - PFN_vkSetDebugUtilsObjectNameEXT( vkGetDeviceProcAddr( device, "vkSetDebugUtilsObjectNameEXT" ) ); - vkSetDebugUtilsObjectTagEXT = - PFN_vkSetDebugUtilsObjectTagEXT( vkGetDeviceProcAddr( device, "vkSetDebugUtilsObjectTagEXT" ) ); - vkSetEvent = PFN_vkSetEvent( vkGetDeviceProcAddr( device, "vkSetEvent" ) ); - vkSetHdrMetadataEXT = PFN_vkSetHdrMetadataEXT( vkGetDeviceProcAddr( device, "vkSetHdrMetadataEXT" ) ); - vkSetLocalDimmingAMD = PFN_vkSetLocalDimmingAMD( vkGetDeviceProcAddr( device, "vkSetLocalDimmingAMD" ) ); - vkSetPrivateDataEXT = PFN_vkSetPrivateDataEXT( vkGetDeviceProcAddr( device, "vkSetPrivateDataEXT" ) ); - vkSignalSemaphore = PFN_vkSignalSemaphore( vkGetDeviceProcAddr( device, "vkSignalSemaphore" ) ); - vkSignalSemaphoreKHR = PFN_vkSignalSemaphoreKHR( vkGetDeviceProcAddr( device, "vkSignalSemaphoreKHR" ) ); - if ( !vkSignalSemaphore ) - vkSignalSemaphore = vkSignalSemaphoreKHR; - vkTrimCommandPool = PFN_vkTrimCommandPool( vkGetDeviceProcAddr( device, "vkTrimCommandPool" ) ); - vkTrimCommandPoolKHR = PFN_vkTrimCommandPoolKHR( vkGetDeviceProcAddr( device, "vkTrimCommandPoolKHR" ) ); - if ( !vkTrimCommandPool ) - vkTrimCommandPool = vkTrimCommandPoolKHR; - vkUninitializePerformanceApiINTEL = - PFN_vkUninitializePerformanceApiINTEL( vkGetDeviceProcAddr( device, "vkUninitializePerformanceApiINTEL" ) ); - vkUnmapMemory = PFN_vkUnmapMemory( vkGetDeviceProcAddr( device, "vkUnmapMemory" ) ); - vkUpdateDescriptorSetWithTemplate = - PFN_vkUpdateDescriptorSetWithTemplate( vkGetDeviceProcAddr( device, "vkUpdateDescriptorSetWithTemplate" ) ); + + //=== VK_KHR_copy_commands2 === + vkCmdCopyBuffer2KHR = PFN_vkCmdCopyBuffer2KHR( vkGetDeviceProcAddr( device, "vkCmdCopyBuffer2KHR" ) ); + vkCmdCopyImage2KHR = PFN_vkCmdCopyImage2KHR( vkGetDeviceProcAddr( device, "vkCmdCopyImage2KHR" ) ); + vkCmdCopyBufferToImage2KHR = + PFN_vkCmdCopyBufferToImage2KHR( vkGetDeviceProcAddr( device, "vkCmdCopyBufferToImage2KHR" ) ); + vkCmdCopyImageToBuffer2KHR = + PFN_vkCmdCopyImageToBuffer2KHR( vkGetDeviceProcAddr( device, "vkCmdCopyImageToBuffer2KHR" ) ); + vkCmdBlitImage2KHR = PFN_vkCmdBlitImage2KHR( vkGetDeviceProcAddr( device, "vkCmdBlitImage2KHR" ) ); + vkCmdResolveImage2KHR = PFN_vkCmdResolveImage2KHR( vkGetDeviceProcAddr( device, "vkCmdResolveImage2KHR" ) ); + + //=== VK_KHR_create_renderpass2 === + vkCreateRenderPass2KHR = PFN_vkCreateRenderPass2KHR( vkGetDeviceProcAddr( device, "vkCreateRenderPass2KHR" ) ); + if ( !vkCreateRenderPass2 ) + vkCreateRenderPass2 = vkCreateRenderPass2KHR; + vkCmdBeginRenderPass2KHR = + PFN_vkCmdBeginRenderPass2KHR( vkGetDeviceProcAddr( device, "vkCmdBeginRenderPass2KHR" ) ); + if ( !vkCmdBeginRenderPass2 ) + vkCmdBeginRenderPass2 = vkCmdBeginRenderPass2KHR; + vkCmdNextSubpass2KHR = PFN_vkCmdNextSubpass2KHR( vkGetDeviceProcAddr( device, "vkCmdNextSubpass2KHR" ) ); + if ( !vkCmdNextSubpass2 ) + vkCmdNextSubpass2 = vkCmdNextSubpass2KHR; + vkCmdEndRenderPass2KHR = PFN_vkCmdEndRenderPass2KHR( vkGetDeviceProcAddr( device, "vkCmdEndRenderPass2KHR" ) ); + if ( !vkCmdEndRenderPass2 ) + vkCmdEndRenderPass2 = vkCmdEndRenderPass2KHR; + + //=== VK_KHR_deferred_host_operations === + vkCreateDeferredOperationKHR = + PFN_vkCreateDeferredOperationKHR( vkGetDeviceProcAddr( device, "vkCreateDeferredOperationKHR" ) ); + vkDestroyDeferredOperationKHR = + PFN_vkDestroyDeferredOperationKHR( vkGetDeviceProcAddr( device, "vkDestroyDeferredOperationKHR" ) ); + vkGetDeferredOperationMaxConcurrencyKHR = PFN_vkGetDeferredOperationMaxConcurrencyKHR( + vkGetDeviceProcAddr( device, "vkGetDeferredOperationMaxConcurrencyKHR" ) ); + vkGetDeferredOperationResultKHR = + PFN_vkGetDeferredOperationResultKHR( vkGetDeviceProcAddr( device, "vkGetDeferredOperationResultKHR" ) ); + vkDeferredOperationJoinKHR = + PFN_vkDeferredOperationJoinKHR( vkGetDeviceProcAddr( device, "vkDeferredOperationJoinKHR" ) ); + + //=== VK_KHR_descriptor_update_template === + vkCreateDescriptorUpdateTemplateKHR = PFN_vkCreateDescriptorUpdateTemplateKHR( + vkGetDeviceProcAddr( device, "vkCreateDescriptorUpdateTemplateKHR" ) ); + if ( !vkCreateDescriptorUpdateTemplate ) + vkCreateDescriptorUpdateTemplate = vkCreateDescriptorUpdateTemplateKHR; + vkDestroyDescriptorUpdateTemplateKHR = PFN_vkDestroyDescriptorUpdateTemplateKHR( + vkGetDeviceProcAddr( device, "vkDestroyDescriptorUpdateTemplateKHR" ) ); + if ( !vkDestroyDescriptorUpdateTemplate ) + vkDestroyDescriptorUpdateTemplate = vkDestroyDescriptorUpdateTemplateKHR; vkUpdateDescriptorSetWithTemplateKHR = PFN_vkUpdateDescriptorSetWithTemplateKHR( vkGetDeviceProcAddr( device, "vkUpdateDescriptorSetWithTemplateKHR" ) ); if ( !vkUpdateDescriptorSetWithTemplate ) vkUpdateDescriptorSetWithTemplate = vkUpdateDescriptorSetWithTemplateKHR; - vkUpdateDescriptorSets = PFN_vkUpdateDescriptorSets( vkGetDeviceProcAddr( device, "vkUpdateDescriptorSets" ) ); -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - vkUpdateVideoSessionParametersKHR = - PFN_vkUpdateVideoSessionParametersKHR( vkGetDeviceProcAddr( device, "vkUpdateVideoSessionParametersKHR" ) ); -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - vkWaitForFences = PFN_vkWaitForFences( vkGetDeviceProcAddr( device, "vkWaitForFences" ) ); + vkCmdPushDescriptorSetWithTemplateKHR = PFN_vkCmdPushDescriptorSetWithTemplateKHR( + vkGetDeviceProcAddr( device, "vkCmdPushDescriptorSetWithTemplateKHR" ) ); + + //=== VK_KHR_device_group === + vkGetDeviceGroupPeerMemoryFeaturesKHR = PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR( + vkGetDeviceProcAddr( device, "vkGetDeviceGroupPeerMemoryFeaturesKHR" ) ); + if ( !vkGetDeviceGroupPeerMemoryFeatures ) + vkGetDeviceGroupPeerMemoryFeatures = vkGetDeviceGroupPeerMemoryFeaturesKHR; + vkCmdSetDeviceMaskKHR = PFN_vkCmdSetDeviceMaskKHR( vkGetDeviceProcAddr( device, "vkCmdSetDeviceMaskKHR" ) ); + if ( !vkCmdSetDeviceMask ) + vkCmdSetDeviceMask = vkCmdSetDeviceMaskKHR; + vkCmdDispatchBaseKHR = PFN_vkCmdDispatchBaseKHR( vkGetDeviceProcAddr( device, "vkCmdDispatchBaseKHR" ) ); + if ( !vkCmdDispatchBase ) + vkCmdDispatchBase = vkCmdDispatchBaseKHR; + vkGetDeviceGroupPresentCapabilitiesKHR = PFN_vkGetDeviceGroupPresentCapabilitiesKHR( + vkGetDeviceProcAddr( device, "vkGetDeviceGroupPresentCapabilitiesKHR" ) ); + vkGetDeviceGroupSurfacePresentModesKHR = PFN_vkGetDeviceGroupSurfacePresentModesKHR( + vkGetDeviceProcAddr( device, "vkGetDeviceGroupSurfacePresentModesKHR" ) ); + vkAcquireNextImage2KHR = PFN_vkAcquireNextImage2KHR( vkGetDeviceProcAddr( device, "vkAcquireNextImage2KHR" ) ); + + //=== VK_KHR_display_swapchain === + vkCreateSharedSwapchainsKHR = + PFN_vkCreateSharedSwapchainsKHR( vkGetDeviceProcAddr( device, "vkCreateSharedSwapchainsKHR" ) ); + + //=== VK_KHR_draw_indirect_count === + vkCmdDrawIndirectCountKHR = + PFN_vkCmdDrawIndirectCountKHR( vkGetDeviceProcAddr( device, "vkCmdDrawIndirectCountKHR" ) ); + if ( !vkCmdDrawIndirectCount ) + vkCmdDrawIndirectCount = vkCmdDrawIndirectCountKHR; + vkCmdDrawIndexedIndirectCountKHR = + PFN_vkCmdDrawIndexedIndirectCountKHR( vkGetDeviceProcAddr( device, "vkCmdDrawIndexedIndirectCountKHR" ) ); + if ( !vkCmdDrawIndexedIndirectCount ) + vkCmdDrawIndexedIndirectCount = vkCmdDrawIndexedIndirectCountKHR; + + //=== VK_KHR_external_fence_fd === + vkImportFenceFdKHR = PFN_vkImportFenceFdKHR( vkGetDeviceProcAddr( device, "vkImportFenceFdKHR" ) ); + vkGetFenceFdKHR = PFN_vkGetFenceFdKHR( vkGetDeviceProcAddr( device, "vkGetFenceFdKHR" ) ); + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_fence_win32 === + vkImportFenceWin32HandleKHR = + PFN_vkImportFenceWin32HandleKHR( vkGetDeviceProcAddr( device, "vkImportFenceWin32HandleKHR" ) ); + vkGetFenceWin32HandleKHR = + PFN_vkGetFenceWin32HandleKHR( vkGetDeviceProcAddr( device, "vkGetFenceWin32HandleKHR" ) ); +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_memory_fd === + vkGetMemoryFdKHR = PFN_vkGetMemoryFdKHR( vkGetDeviceProcAddr( device, "vkGetMemoryFdKHR" ) ); + vkGetMemoryFdPropertiesKHR = + PFN_vkGetMemoryFdPropertiesKHR( vkGetDeviceProcAddr( device, "vkGetMemoryFdPropertiesKHR" ) ); + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_memory_win32 === + vkGetMemoryWin32HandleKHR = + PFN_vkGetMemoryWin32HandleKHR( vkGetDeviceProcAddr( device, "vkGetMemoryWin32HandleKHR" ) ); + vkGetMemoryWin32HandlePropertiesKHR = PFN_vkGetMemoryWin32HandlePropertiesKHR( + vkGetDeviceProcAddr( device, "vkGetMemoryWin32HandlePropertiesKHR" ) ); +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_semaphore_fd === + vkImportSemaphoreFdKHR = PFN_vkImportSemaphoreFdKHR( vkGetDeviceProcAddr( device, "vkImportSemaphoreFdKHR" ) ); + vkGetSemaphoreFdKHR = PFN_vkGetSemaphoreFdKHR( vkGetDeviceProcAddr( device, "vkGetSemaphoreFdKHR" ) ); + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_semaphore_win32 === + vkImportSemaphoreWin32HandleKHR = + PFN_vkImportSemaphoreWin32HandleKHR( vkGetDeviceProcAddr( device, "vkImportSemaphoreWin32HandleKHR" ) ); + vkGetSemaphoreWin32HandleKHR = + PFN_vkGetSemaphoreWin32HandleKHR( vkGetDeviceProcAddr( device, "vkGetSemaphoreWin32HandleKHR" ) ); +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_fragment_shading_rate === + vkCmdSetFragmentShadingRateKHR = + PFN_vkCmdSetFragmentShadingRateKHR( vkGetDeviceProcAddr( device, "vkCmdSetFragmentShadingRateKHR" ) ); + + //=== VK_KHR_get_memory_requirements2 === + vkGetImageMemoryRequirements2KHR = + PFN_vkGetImageMemoryRequirements2KHR( vkGetDeviceProcAddr( device, "vkGetImageMemoryRequirements2KHR" ) ); + if ( !vkGetImageMemoryRequirements2 ) + vkGetImageMemoryRequirements2 = vkGetImageMemoryRequirements2KHR; + vkGetBufferMemoryRequirements2KHR = + PFN_vkGetBufferMemoryRequirements2KHR( vkGetDeviceProcAddr( device, "vkGetBufferMemoryRequirements2KHR" ) ); + if ( !vkGetBufferMemoryRequirements2 ) + vkGetBufferMemoryRequirements2 = vkGetBufferMemoryRequirements2KHR; + vkGetImageSparseMemoryRequirements2KHR = PFN_vkGetImageSparseMemoryRequirements2KHR( + vkGetDeviceProcAddr( device, "vkGetImageSparseMemoryRequirements2KHR" ) ); + if ( !vkGetImageSparseMemoryRequirements2 ) + vkGetImageSparseMemoryRequirements2 = vkGetImageSparseMemoryRequirements2KHR; + + //=== VK_KHR_maintenance1 === + vkTrimCommandPoolKHR = PFN_vkTrimCommandPoolKHR( vkGetDeviceProcAddr( device, "vkTrimCommandPoolKHR" ) ); + if ( !vkTrimCommandPool ) + vkTrimCommandPool = vkTrimCommandPoolKHR; + + //=== VK_KHR_maintenance3 === + vkGetDescriptorSetLayoutSupportKHR = + PFN_vkGetDescriptorSetLayoutSupportKHR( vkGetDeviceProcAddr( device, "vkGetDescriptorSetLayoutSupportKHR" ) ); + if ( !vkGetDescriptorSetLayoutSupport ) + vkGetDescriptorSetLayoutSupport = vkGetDescriptorSetLayoutSupportKHR; + + //=== VK_KHR_performance_query === + vkAcquireProfilingLockKHR = + PFN_vkAcquireProfilingLockKHR( vkGetDeviceProcAddr( device, "vkAcquireProfilingLockKHR" ) ); + vkReleaseProfilingLockKHR = + PFN_vkReleaseProfilingLockKHR( vkGetDeviceProcAddr( device, "vkReleaseProfilingLockKHR" ) ); + + //=== VK_KHR_pipeline_executable_properties === + vkGetPipelineExecutablePropertiesKHR = PFN_vkGetPipelineExecutablePropertiesKHR( + vkGetDeviceProcAddr( device, "vkGetPipelineExecutablePropertiesKHR" ) ); + vkGetPipelineExecutableStatisticsKHR = PFN_vkGetPipelineExecutableStatisticsKHR( + vkGetDeviceProcAddr( device, "vkGetPipelineExecutableStatisticsKHR" ) ); + vkGetPipelineExecutableInternalRepresentationsKHR = PFN_vkGetPipelineExecutableInternalRepresentationsKHR( + vkGetDeviceProcAddr( device, "vkGetPipelineExecutableInternalRepresentationsKHR" ) ); + + //=== VK_KHR_present_wait === vkWaitForPresentKHR = PFN_vkWaitForPresentKHR( vkGetDeviceProcAddr( device, "vkWaitForPresentKHR" ) ); - vkWaitSemaphores = PFN_vkWaitSemaphores( vkGetDeviceProcAddr( device, "vkWaitSemaphores" ) ); + + //=== VK_KHR_push_descriptor === + vkCmdPushDescriptorSetKHR = + PFN_vkCmdPushDescriptorSetKHR( vkGetDeviceProcAddr( device, "vkCmdPushDescriptorSetKHR" ) ); + + //=== VK_KHR_ray_tracing_pipeline === + vkCmdTraceRaysKHR = PFN_vkCmdTraceRaysKHR( vkGetDeviceProcAddr( device, "vkCmdTraceRaysKHR" ) ); + vkCreateRayTracingPipelinesKHR = + PFN_vkCreateRayTracingPipelinesKHR( vkGetDeviceProcAddr( device, "vkCreateRayTracingPipelinesKHR" ) ); + vkGetRayTracingShaderGroupHandlesKHR = PFN_vkGetRayTracingShaderGroupHandlesKHR( + vkGetDeviceProcAddr( device, "vkGetRayTracingShaderGroupHandlesKHR" ) ); + vkGetRayTracingCaptureReplayShaderGroupHandlesKHR = PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR( + vkGetDeviceProcAddr( device, "vkGetRayTracingCaptureReplayShaderGroupHandlesKHR" ) ); + vkCmdTraceRaysIndirectKHR = + PFN_vkCmdTraceRaysIndirectKHR( vkGetDeviceProcAddr( device, "vkCmdTraceRaysIndirectKHR" ) ); + vkGetRayTracingShaderGroupStackSizeKHR = PFN_vkGetRayTracingShaderGroupStackSizeKHR( + vkGetDeviceProcAddr( device, "vkGetRayTracingShaderGroupStackSizeKHR" ) ); + vkCmdSetRayTracingPipelineStackSizeKHR = PFN_vkCmdSetRayTracingPipelineStackSizeKHR( + vkGetDeviceProcAddr( device, "vkCmdSetRayTracingPipelineStackSizeKHR" ) ); + + //=== VK_KHR_sampler_ycbcr_conversion === + vkCreateSamplerYcbcrConversionKHR = + PFN_vkCreateSamplerYcbcrConversionKHR( vkGetDeviceProcAddr( device, "vkCreateSamplerYcbcrConversionKHR" ) ); + if ( !vkCreateSamplerYcbcrConversion ) + vkCreateSamplerYcbcrConversion = vkCreateSamplerYcbcrConversionKHR; + vkDestroySamplerYcbcrConversionKHR = + PFN_vkDestroySamplerYcbcrConversionKHR( vkGetDeviceProcAddr( device, "vkDestroySamplerYcbcrConversionKHR" ) ); + if ( !vkDestroySamplerYcbcrConversion ) + vkDestroySamplerYcbcrConversion = vkDestroySamplerYcbcrConversionKHR; + + //=== VK_KHR_shared_presentable_image === + vkGetSwapchainStatusKHR = + PFN_vkGetSwapchainStatusKHR( vkGetDeviceProcAddr( device, "vkGetSwapchainStatusKHR" ) ); + + //=== VK_KHR_swapchain === + vkCreateSwapchainKHR = PFN_vkCreateSwapchainKHR( vkGetDeviceProcAddr( device, "vkCreateSwapchainKHR" ) ); + vkDestroySwapchainKHR = PFN_vkDestroySwapchainKHR( vkGetDeviceProcAddr( device, "vkDestroySwapchainKHR" ) ); + vkGetSwapchainImagesKHR = + PFN_vkGetSwapchainImagesKHR( vkGetDeviceProcAddr( device, "vkGetSwapchainImagesKHR" ) ); + vkAcquireNextImageKHR = PFN_vkAcquireNextImageKHR( vkGetDeviceProcAddr( device, "vkAcquireNextImageKHR" ) ); + vkQueuePresentKHR = PFN_vkQueuePresentKHR( vkGetDeviceProcAddr( device, "vkQueuePresentKHR" ) ); + + //=== VK_KHR_synchronization2 === + vkCmdSetEvent2KHR = PFN_vkCmdSetEvent2KHR( vkGetDeviceProcAddr( device, "vkCmdSetEvent2KHR" ) ); + vkCmdResetEvent2KHR = PFN_vkCmdResetEvent2KHR( vkGetDeviceProcAddr( device, "vkCmdResetEvent2KHR" ) ); + vkCmdWaitEvents2KHR = PFN_vkCmdWaitEvents2KHR( vkGetDeviceProcAddr( device, "vkCmdWaitEvents2KHR" ) ); + vkCmdPipelineBarrier2KHR = + PFN_vkCmdPipelineBarrier2KHR( vkGetDeviceProcAddr( device, "vkCmdPipelineBarrier2KHR" ) ); + vkCmdWriteTimestamp2KHR = + PFN_vkCmdWriteTimestamp2KHR( vkGetDeviceProcAddr( device, "vkCmdWriteTimestamp2KHR" ) ); + vkQueueSubmit2KHR = PFN_vkQueueSubmit2KHR( vkGetDeviceProcAddr( device, "vkQueueSubmit2KHR" ) ); + vkCmdWriteBufferMarker2AMD = + PFN_vkCmdWriteBufferMarker2AMD( vkGetDeviceProcAddr( device, "vkCmdWriteBufferMarker2AMD" ) ); + vkGetQueueCheckpointData2NV = + PFN_vkGetQueueCheckpointData2NV( vkGetDeviceProcAddr( device, "vkGetQueueCheckpointData2NV" ) ); + + //=== VK_KHR_timeline_semaphore === + vkGetSemaphoreCounterValueKHR = + PFN_vkGetSemaphoreCounterValueKHR( vkGetDeviceProcAddr( device, "vkGetSemaphoreCounterValueKHR" ) ); + if ( !vkGetSemaphoreCounterValue ) + vkGetSemaphoreCounterValue = vkGetSemaphoreCounterValueKHR; vkWaitSemaphoresKHR = PFN_vkWaitSemaphoresKHR( vkGetDeviceProcAddr( device, "vkWaitSemaphoresKHR" ) ); if ( !vkWaitSemaphores ) vkWaitSemaphores = vkWaitSemaphoresKHR; - vkWriteAccelerationStructuresPropertiesKHR = PFN_vkWriteAccelerationStructuresPropertiesKHR( - vkGetDeviceProcAddr( device, "vkWriteAccelerationStructuresPropertiesKHR" ) ); + vkSignalSemaphoreKHR = PFN_vkSignalSemaphoreKHR( vkGetDeviceProcAddr( device, "vkSignalSemaphoreKHR" ) ); + if ( !vkSignalSemaphore ) + vkSignalSemaphore = vkSignalSemaphoreKHR; + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_KHR_video_decode_queue === + vkCmdDecodeVideoKHR = PFN_vkCmdDecodeVideoKHR( vkGetDeviceProcAddr( device, "vkCmdDecodeVideoKHR" ) ); +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_KHR_video_encode_queue === + vkCmdEncodeVideoKHR = PFN_vkCmdEncodeVideoKHR( vkGetDeviceProcAddr( device, "vkCmdEncodeVideoKHR" ) ); +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + +# if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_KHR_video_queue === + vkCreateVideoSessionKHR = + PFN_vkCreateVideoSessionKHR( vkGetDeviceProcAddr( device, "vkCreateVideoSessionKHR" ) ); + vkDestroyVideoSessionKHR = + PFN_vkDestroyVideoSessionKHR( vkGetDeviceProcAddr( device, "vkDestroyVideoSessionKHR" ) ); + vkGetVideoSessionMemoryRequirementsKHR = PFN_vkGetVideoSessionMemoryRequirementsKHR( + vkGetDeviceProcAddr( device, "vkGetVideoSessionMemoryRequirementsKHR" ) ); + vkBindVideoSessionMemoryKHR = + PFN_vkBindVideoSessionMemoryKHR( vkGetDeviceProcAddr( device, "vkBindVideoSessionMemoryKHR" ) ); + vkCreateVideoSessionParametersKHR = + PFN_vkCreateVideoSessionParametersKHR( vkGetDeviceProcAddr( device, "vkCreateVideoSessionParametersKHR" ) ); + vkUpdateVideoSessionParametersKHR = + PFN_vkUpdateVideoSessionParametersKHR( vkGetDeviceProcAddr( device, "vkUpdateVideoSessionParametersKHR" ) ); + vkDestroyVideoSessionParametersKHR = + PFN_vkDestroyVideoSessionParametersKHR( vkGetDeviceProcAddr( device, "vkDestroyVideoSessionParametersKHR" ) ); + vkCmdBeginVideoCodingKHR = + PFN_vkCmdBeginVideoCodingKHR( vkGetDeviceProcAddr( device, "vkCmdBeginVideoCodingKHR" ) ); + vkCmdEndVideoCodingKHR = PFN_vkCmdEndVideoCodingKHR( vkGetDeviceProcAddr( device, "vkCmdEndVideoCodingKHR" ) ); + vkCmdControlVideoCodingKHR = + PFN_vkCmdControlVideoCodingKHR( vkGetDeviceProcAddr( device, "vkCmdControlVideoCodingKHR" ) ); +# endif /*VK_ENABLE_BETA_EXTENSIONS*/ + + //=== VK_NVX_binary_import === + vkCreateCuModuleNVX = PFN_vkCreateCuModuleNVX( vkGetDeviceProcAddr( device, "vkCreateCuModuleNVX" ) ); + vkCreateCuFunctionNVX = PFN_vkCreateCuFunctionNVX( vkGetDeviceProcAddr( device, "vkCreateCuFunctionNVX" ) ); + vkDestroyCuModuleNVX = PFN_vkDestroyCuModuleNVX( vkGetDeviceProcAddr( device, "vkDestroyCuModuleNVX" ) ); + vkDestroyCuFunctionNVX = PFN_vkDestroyCuFunctionNVX( vkGetDeviceProcAddr( device, "vkDestroyCuFunctionNVX" ) ); + vkCmdCuLaunchKernelNVX = PFN_vkCmdCuLaunchKernelNVX( vkGetDeviceProcAddr( device, "vkCmdCuLaunchKernelNVX" ) ); + + //=== VK_NVX_image_view_handle === + vkGetImageViewHandleNVX = + PFN_vkGetImageViewHandleNVX( vkGetDeviceProcAddr( device, "vkGetImageViewHandleNVX" ) ); + vkGetImageViewAddressNVX = + PFN_vkGetImageViewAddressNVX( vkGetDeviceProcAddr( device, "vkGetImageViewAddressNVX" ) ); + + //=== VK_NV_clip_space_w_scaling === + vkCmdSetViewportWScalingNV = + PFN_vkCmdSetViewportWScalingNV( vkGetDeviceProcAddr( device, "vkCmdSetViewportWScalingNV" ) ); + + //=== VK_NV_device_diagnostic_checkpoints === + vkCmdSetCheckpointNV = PFN_vkCmdSetCheckpointNV( vkGetDeviceProcAddr( device, "vkCmdSetCheckpointNV" ) ); + vkGetQueueCheckpointDataNV = + PFN_vkGetQueueCheckpointDataNV( vkGetDeviceProcAddr( device, "vkGetQueueCheckpointDataNV" ) ); + + //=== VK_NV_device_generated_commands === + vkGetGeneratedCommandsMemoryRequirementsNV = PFN_vkGetGeneratedCommandsMemoryRequirementsNV( + vkGetDeviceProcAddr( device, "vkGetGeneratedCommandsMemoryRequirementsNV" ) ); + vkCmdPreprocessGeneratedCommandsNV = + PFN_vkCmdPreprocessGeneratedCommandsNV( vkGetDeviceProcAddr( device, "vkCmdPreprocessGeneratedCommandsNV" ) ); + vkCmdExecuteGeneratedCommandsNV = + PFN_vkCmdExecuteGeneratedCommandsNV( vkGetDeviceProcAddr( device, "vkCmdExecuteGeneratedCommandsNV" ) ); + vkCmdBindPipelineShaderGroupNV = + PFN_vkCmdBindPipelineShaderGroupNV( vkGetDeviceProcAddr( device, "vkCmdBindPipelineShaderGroupNV" ) ); + vkCreateIndirectCommandsLayoutNV = + PFN_vkCreateIndirectCommandsLayoutNV( vkGetDeviceProcAddr( device, "vkCreateIndirectCommandsLayoutNV" ) ); + vkDestroyIndirectCommandsLayoutNV = + PFN_vkDestroyIndirectCommandsLayoutNV( vkGetDeviceProcAddr( device, "vkDestroyIndirectCommandsLayoutNV" ) ); + + //=== VK_NV_external_memory_rdma === + vkGetMemoryRemoteAddressNV = + PFN_vkGetMemoryRemoteAddressNV( vkGetDeviceProcAddr( device, "vkGetMemoryRemoteAddressNV" ) ); + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_NV_external_memory_win32 === + vkGetMemoryWin32HandleNV = + PFN_vkGetMemoryWin32HandleNV( vkGetDeviceProcAddr( device, "vkGetMemoryWin32HandleNV" ) ); +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_NV_fragment_shading_rate_enums === + vkCmdSetFragmentShadingRateEnumNV = + PFN_vkCmdSetFragmentShadingRateEnumNV( vkGetDeviceProcAddr( device, "vkCmdSetFragmentShadingRateEnumNV" ) ); + + //=== VK_NV_mesh_shader === + vkCmdDrawMeshTasksNV = PFN_vkCmdDrawMeshTasksNV( vkGetDeviceProcAddr( device, "vkCmdDrawMeshTasksNV" ) ); + vkCmdDrawMeshTasksIndirectNV = + PFN_vkCmdDrawMeshTasksIndirectNV( vkGetDeviceProcAddr( device, "vkCmdDrawMeshTasksIndirectNV" ) ); + vkCmdDrawMeshTasksIndirectCountNV = + PFN_vkCmdDrawMeshTasksIndirectCountNV( vkGetDeviceProcAddr( device, "vkCmdDrawMeshTasksIndirectCountNV" ) ); + + //=== VK_NV_ray_tracing === + vkCreateAccelerationStructureNV = + PFN_vkCreateAccelerationStructureNV( vkGetDeviceProcAddr( device, "vkCreateAccelerationStructureNV" ) ); + vkDestroyAccelerationStructureNV = + PFN_vkDestroyAccelerationStructureNV( vkGetDeviceProcAddr( device, "vkDestroyAccelerationStructureNV" ) ); + vkGetAccelerationStructureMemoryRequirementsNV = PFN_vkGetAccelerationStructureMemoryRequirementsNV( + vkGetDeviceProcAddr( device, "vkGetAccelerationStructureMemoryRequirementsNV" ) ); + vkBindAccelerationStructureMemoryNV = PFN_vkBindAccelerationStructureMemoryNV( + vkGetDeviceProcAddr( device, "vkBindAccelerationStructureMemoryNV" ) ); + vkCmdBuildAccelerationStructureNV = + PFN_vkCmdBuildAccelerationStructureNV( vkGetDeviceProcAddr( device, "vkCmdBuildAccelerationStructureNV" ) ); + vkCmdCopyAccelerationStructureNV = + PFN_vkCmdCopyAccelerationStructureNV( vkGetDeviceProcAddr( device, "vkCmdCopyAccelerationStructureNV" ) ); + vkCmdTraceRaysNV = PFN_vkCmdTraceRaysNV( vkGetDeviceProcAddr( device, "vkCmdTraceRaysNV" ) ); + vkCreateRayTracingPipelinesNV = + PFN_vkCreateRayTracingPipelinesNV( vkGetDeviceProcAddr( device, "vkCreateRayTracingPipelinesNV" ) ); + vkGetRayTracingShaderGroupHandlesNV = PFN_vkGetRayTracingShaderGroupHandlesNV( + vkGetDeviceProcAddr( device, "vkGetRayTracingShaderGroupHandlesNV" ) ); + if ( !vkGetRayTracingShaderGroupHandlesKHR ) + vkGetRayTracingShaderGroupHandlesKHR = vkGetRayTracingShaderGroupHandlesNV; + vkGetAccelerationStructureHandleNV = + PFN_vkGetAccelerationStructureHandleNV( vkGetDeviceProcAddr( device, "vkGetAccelerationStructureHandleNV" ) ); + vkCmdWriteAccelerationStructuresPropertiesNV = PFN_vkCmdWriteAccelerationStructuresPropertiesNV( + vkGetDeviceProcAddr( device, "vkCmdWriteAccelerationStructuresPropertiesNV" ) ); + vkCompileDeferredNV = PFN_vkCompileDeferredNV( vkGetDeviceProcAddr( device, "vkCompileDeferredNV" ) ); + + //=== VK_NV_scissor_exclusive === + vkCmdSetExclusiveScissorNV = + PFN_vkCmdSetExclusiveScissorNV( vkGetDeviceProcAddr( device, "vkCmdSetExclusiveScissorNV" ) ); + + //=== VK_NV_shading_rate_image === + vkCmdBindShadingRateImageNV = + PFN_vkCmdBindShadingRateImageNV( vkGetDeviceProcAddr( device, "vkCmdBindShadingRateImageNV" ) ); + vkCmdSetViewportShadingRatePaletteNV = PFN_vkCmdSetViewportShadingRatePaletteNV( + vkGetDeviceProcAddr( device, "vkCmdSetViewportShadingRatePaletteNV" ) ); + vkCmdSetCoarseSampleOrderNV = + PFN_vkCmdSetCoarseSampleOrderNV( vkGetDeviceProcAddr( device, "vkCmdSetCoarseSampleOrderNV" ) ); } public: + //=== VK_VERSION_1_0 === + PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr = 0; + PFN_vkDestroyDevice vkDestroyDevice = 0; + PFN_vkGetDeviceQueue vkGetDeviceQueue = 0; + PFN_vkQueueSubmit vkQueueSubmit = 0; + PFN_vkQueueWaitIdle vkQueueWaitIdle = 0; + PFN_vkDeviceWaitIdle vkDeviceWaitIdle = 0; + PFN_vkAllocateMemory vkAllocateMemory = 0; + PFN_vkFreeMemory vkFreeMemory = 0; + PFN_vkMapMemory vkMapMemory = 0; + PFN_vkUnmapMemory vkUnmapMemory = 0; + PFN_vkFlushMappedMemoryRanges vkFlushMappedMemoryRanges = 0; + PFN_vkInvalidateMappedMemoryRanges vkInvalidateMappedMemoryRanges = 0; + PFN_vkGetDeviceMemoryCommitment vkGetDeviceMemoryCommitment = 0; + PFN_vkBindBufferMemory vkBindBufferMemory = 0; + PFN_vkBindImageMemory vkBindImageMemory = 0; + PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements = 0; + PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements = 0; + PFN_vkGetImageSparseMemoryRequirements vkGetImageSparseMemoryRequirements = 0; + PFN_vkQueueBindSparse vkQueueBindSparse = 0; + PFN_vkCreateFence vkCreateFence = 0; + PFN_vkDestroyFence vkDestroyFence = 0; + PFN_vkResetFences vkResetFences = 0; + PFN_vkGetFenceStatus vkGetFenceStatus = 0; + PFN_vkWaitForFences vkWaitForFences = 0; + PFN_vkCreateSemaphore vkCreateSemaphore = 0; + PFN_vkDestroySemaphore vkDestroySemaphore = 0; + PFN_vkCreateEvent vkCreateEvent = 0; + PFN_vkDestroyEvent vkDestroyEvent = 0; + PFN_vkGetEventStatus vkGetEventStatus = 0; + PFN_vkSetEvent vkSetEvent = 0; + PFN_vkResetEvent vkResetEvent = 0; + PFN_vkCreateQueryPool vkCreateQueryPool = 0; + PFN_vkDestroyQueryPool vkDestroyQueryPool = 0; + PFN_vkGetQueryPoolResults vkGetQueryPoolResults = 0; + PFN_vkCreateBuffer vkCreateBuffer = 0; + PFN_vkDestroyBuffer vkDestroyBuffer = 0; + PFN_vkCreateBufferView vkCreateBufferView = 0; + PFN_vkDestroyBufferView vkDestroyBufferView = 0; + PFN_vkCreateImage vkCreateImage = 0; + PFN_vkDestroyImage vkDestroyImage = 0; + PFN_vkGetImageSubresourceLayout vkGetImageSubresourceLayout = 0; + PFN_vkCreateImageView vkCreateImageView = 0; + PFN_vkDestroyImageView vkDestroyImageView = 0; + PFN_vkCreateShaderModule vkCreateShaderModule = 0; + PFN_vkDestroyShaderModule vkDestroyShaderModule = 0; + PFN_vkCreatePipelineCache vkCreatePipelineCache = 0; + PFN_vkDestroyPipelineCache vkDestroyPipelineCache = 0; + PFN_vkGetPipelineCacheData vkGetPipelineCacheData = 0; + PFN_vkMergePipelineCaches vkMergePipelineCaches = 0; + PFN_vkCreateGraphicsPipelines vkCreateGraphicsPipelines = 0; + PFN_vkCreateComputePipelines vkCreateComputePipelines = 0; + PFN_vkDestroyPipeline vkDestroyPipeline = 0; + PFN_vkCreatePipelineLayout vkCreatePipelineLayout = 0; + PFN_vkDestroyPipelineLayout vkDestroyPipelineLayout = 0; + PFN_vkCreateSampler vkCreateSampler = 0; + PFN_vkDestroySampler vkDestroySampler = 0; + PFN_vkCreateDescriptorSetLayout vkCreateDescriptorSetLayout = 0; + PFN_vkDestroyDescriptorSetLayout vkDestroyDescriptorSetLayout = 0; + PFN_vkCreateDescriptorPool vkCreateDescriptorPool = 0; + PFN_vkDestroyDescriptorPool vkDestroyDescriptorPool = 0; + PFN_vkResetDescriptorPool vkResetDescriptorPool = 0; + PFN_vkAllocateDescriptorSets vkAllocateDescriptorSets = 0; + PFN_vkFreeDescriptorSets vkFreeDescriptorSets = 0; + PFN_vkUpdateDescriptorSets vkUpdateDescriptorSets = 0; + PFN_vkCreateFramebuffer vkCreateFramebuffer = 0; + PFN_vkDestroyFramebuffer vkDestroyFramebuffer = 0; + PFN_vkCreateRenderPass vkCreateRenderPass = 0; + PFN_vkDestroyRenderPass vkDestroyRenderPass = 0; + PFN_vkGetRenderAreaGranularity vkGetRenderAreaGranularity = 0; + PFN_vkCreateCommandPool vkCreateCommandPool = 0; + PFN_vkDestroyCommandPool vkDestroyCommandPool = 0; + PFN_vkResetCommandPool vkResetCommandPool = 0; + PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers = 0; + PFN_vkFreeCommandBuffers vkFreeCommandBuffers = 0; + PFN_vkBeginCommandBuffer vkBeginCommandBuffer = 0; + PFN_vkEndCommandBuffer vkEndCommandBuffer = 0; + PFN_vkResetCommandBuffer vkResetCommandBuffer = 0; + PFN_vkCmdBindPipeline vkCmdBindPipeline = 0; + PFN_vkCmdSetViewport vkCmdSetViewport = 0; + PFN_vkCmdSetScissor vkCmdSetScissor = 0; + PFN_vkCmdSetLineWidth vkCmdSetLineWidth = 0; + PFN_vkCmdSetDepthBias vkCmdSetDepthBias = 0; + PFN_vkCmdSetBlendConstants vkCmdSetBlendConstants = 0; + PFN_vkCmdSetDepthBounds vkCmdSetDepthBounds = 0; + PFN_vkCmdSetStencilCompareMask vkCmdSetStencilCompareMask = 0; + PFN_vkCmdSetStencilWriteMask vkCmdSetStencilWriteMask = 0; + PFN_vkCmdSetStencilReference vkCmdSetStencilReference = 0; + PFN_vkCmdBindDescriptorSets vkCmdBindDescriptorSets = 0; + PFN_vkCmdBindIndexBuffer vkCmdBindIndexBuffer = 0; + PFN_vkCmdBindVertexBuffers vkCmdBindVertexBuffers = 0; + PFN_vkCmdDraw vkCmdDraw = 0; + PFN_vkCmdDrawIndexed vkCmdDrawIndexed = 0; + PFN_vkCmdDrawIndirect vkCmdDrawIndirect = 0; + PFN_vkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirect = 0; + PFN_vkCmdDispatch vkCmdDispatch = 0; + PFN_vkCmdDispatchIndirect vkCmdDispatchIndirect = 0; + PFN_vkCmdCopyBuffer vkCmdCopyBuffer = 0; + PFN_vkCmdCopyImage vkCmdCopyImage = 0; + PFN_vkCmdBlitImage vkCmdBlitImage = 0; + PFN_vkCmdCopyBufferToImage vkCmdCopyBufferToImage = 0; + PFN_vkCmdCopyImageToBuffer vkCmdCopyImageToBuffer = 0; + PFN_vkCmdUpdateBuffer vkCmdUpdateBuffer = 0; + PFN_vkCmdFillBuffer vkCmdFillBuffer = 0; + PFN_vkCmdClearColorImage vkCmdClearColorImage = 0; + PFN_vkCmdClearDepthStencilImage vkCmdClearDepthStencilImage = 0; + PFN_vkCmdClearAttachments vkCmdClearAttachments = 0; + PFN_vkCmdResolveImage vkCmdResolveImage = 0; + PFN_vkCmdSetEvent vkCmdSetEvent = 0; + PFN_vkCmdResetEvent vkCmdResetEvent = 0; + PFN_vkCmdWaitEvents vkCmdWaitEvents = 0; + PFN_vkCmdPipelineBarrier vkCmdPipelineBarrier = 0; + PFN_vkCmdBeginQuery vkCmdBeginQuery = 0; + PFN_vkCmdEndQuery vkCmdEndQuery = 0; + PFN_vkCmdResetQueryPool vkCmdResetQueryPool = 0; + PFN_vkCmdWriteTimestamp vkCmdWriteTimestamp = 0; + PFN_vkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResults = 0; + PFN_vkCmdPushConstants vkCmdPushConstants = 0; + PFN_vkCmdBeginRenderPass vkCmdBeginRenderPass = 0; + PFN_vkCmdNextSubpass vkCmdNextSubpass = 0; + PFN_vkCmdEndRenderPass vkCmdEndRenderPass = 0; + PFN_vkCmdExecuteCommands vkCmdExecuteCommands = 0; + + //=== VK_VERSION_1_1 === + PFN_vkBindBufferMemory2 vkBindBufferMemory2 = 0; + PFN_vkBindImageMemory2 vkBindImageMemory2 = 0; + PFN_vkGetDeviceGroupPeerMemoryFeatures vkGetDeviceGroupPeerMemoryFeatures = 0; + PFN_vkCmdSetDeviceMask vkCmdSetDeviceMask = 0; + PFN_vkCmdDispatchBase vkCmdDispatchBase = 0; + PFN_vkGetImageMemoryRequirements2 vkGetImageMemoryRequirements2 = 0; + PFN_vkGetBufferMemoryRequirements2 vkGetBufferMemoryRequirements2 = 0; + PFN_vkGetImageSparseMemoryRequirements2 vkGetImageSparseMemoryRequirements2 = 0; + PFN_vkTrimCommandPool vkTrimCommandPool = 0; + PFN_vkGetDeviceQueue2 vkGetDeviceQueue2 = 0; + PFN_vkCreateSamplerYcbcrConversion vkCreateSamplerYcbcrConversion = 0; + PFN_vkDestroySamplerYcbcrConversion vkDestroySamplerYcbcrConversion = 0; + PFN_vkCreateDescriptorUpdateTemplate vkCreateDescriptorUpdateTemplate = 0; + PFN_vkDestroyDescriptorUpdateTemplate vkDestroyDescriptorUpdateTemplate = 0; + PFN_vkUpdateDescriptorSetWithTemplate vkUpdateDescriptorSetWithTemplate = 0; + PFN_vkGetDescriptorSetLayoutSupport vkGetDescriptorSetLayoutSupport = 0; + + //=== VK_VERSION_1_2 === + PFN_vkCmdDrawIndirectCount vkCmdDrawIndirectCount = 0; + PFN_vkCmdDrawIndexedIndirectCount vkCmdDrawIndexedIndirectCount = 0; + PFN_vkCreateRenderPass2 vkCreateRenderPass2 = 0; + PFN_vkCmdBeginRenderPass2 vkCmdBeginRenderPass2 = 0; + PFN_vkCmdNextSubpass2 vkCmdNextSubpass2 = 0; + PFN_vkCmdEndRenderPass2 vkCmdEndRenderPass2 = 0; + PFN_vkResetQueryPool vkResetQueryPool = 0; + PFN_vkGetSemaphoreCounterValue vkGetSemaphoreCounterValue = 0; + PFN_vkWaitSemaphores vkWaitSemaphores = 0; + PFN_vkSignalSemaphore vkSignalSemaphore = 0; + PFN_vkGetBufferDeviceAddress vkGetBufferDeviceAddress = 0; + PFN_vkGetBufferOpaqueCaptureAddress vkGetBufferOpaqueCaptureAddress = 0; + PFN_vkGetDeviceMemoryOpaqueCaptureAddress vkGetDeviceMemoryOpaqueCaptureAddress = 0; + + //=== VK_AMD_buffer_marker === + PFN_vkCmdWriteBufferMarkerAMD vkCmdWriteBufferMarkerAMD = 0; + + //=== VK_AMD_display_native_hdr === + PFN_vkSetLocalDimmingAMD vkSetLocalDimmingAMD = 0; + + //=== VK_AMD_draw_indirect_count === + PFN_vkCmdDrawIndirectCountAMD vkCmdDrawIndirectCountAMD = 0; + PFN_vkCmdDrawIndexedIndirectCountAMD vkCmdDrawIndexedIndirectCountAMD = 0; + + //=== VK_AMD_shader_info === + PFN_vkGetShaderInfoAMD vkGetShaderInfoAMD = 0; + +# if defined( VK_USE_PLATFORM_ANDROID_KHR ) + //=== VK_ANDROID_external_memory_android_hardware_buffer === + PFN_vkGetAndroidHardwareBufferPropertiesANDROID vkGetAndroidHardwareBufferPropertiesANDROID = 0; + PFN_vkGetMemoryAndroidHardwareBufferANDROID vkGetMemoryAndroidHardwareBufferANDROID = 0; +# else + PFN_dummy vkGetAndroidHardwareBufferPropertiesANDROID_placeholder = 0; + PFN_dummy vkGetMemoryAndroidHardwareBufferANDROID_placeholder = 0; +# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ + + //=== VK_EXT_buffer_device_address === + PFN_vkGetBufferDeviceAddressEXT vkGetBufferDeviceAddressEXT = 0; + + //=== VK_EXT_calibrated_timestamps === + PFN_vkGetCalibratedTimestampsEXT vkGetCalibratedTimestampsEXT = 0; + + //=== VK_EXT_color_write_enable === + PFN_vkCmdSetColorWriteEnableEXT vkCmdSetColorWriteEnableEXT = 0; + + //=== VK_EXT_conditional_rendering === + PFN_vkCmdBeginConditionalRenderingEXT vkCmdBeginConditionalRenderingEXT = 0; + PFN_vkCmdEndConditionalRenderingEXT vkCmdEndConditionalRenderingEXT = 0; + + //=== VK_EXT_debug_marker === + PFN_vkDebugMarkerSetObjectTagEXT vkDebugMarkerSetObjectTagEXT = 0; + PFN_vkDebugMarkerSetObjectNameEXT vkDebugMarkerSetObjectNameEXT = 0; + PFN_vkCmdDebugMarkerBeginEXT vkCmdDebugMarkerBeginEXT = 0; + PFN_vkCmdDebugMarkerEndEXT vkCmdDebugMarkerEndEXT = 0; + PFN_vkCmdDebugMarkerInsertEXT vkCmdDebugMarkerInsertEXT = 0; + + //=== VK_EXT_debug_utils === + PFN_vkSetDebugUtilsObjectNameEXT vkSetDebugUtilsObjectNameEXT = 0; + PFN_vkSetDebugUtilsObjectTagEXT vkSetDebugUtilsObjectTagEXT = 0; + PFN_vkQueueBeginDebugUtilsLabelEXT vkQueueBeginDebugUtilsLabelEXT = 0; + PFN_vkQueueEndDebugUtilsLabelEXT vkQueueEndDebugUtilsLabelEXT = 0; + PFN_vkQueueInsertDebugUtilsLabelEXT vkQueueInsertDebugUtilsLabelEXT = 0; + PFN_vkCmdBeginDebugUtilsLabelEXT vkCmdBeginDebugUtilsLabelEXT = 0; + PFN_vkCmdEndDebugUtilsLabelEXT vkCmdEndDebugUtilsLabelEXT = 0; + PFN_vkCmdInsertDebugUtilsLabelEXT vkCmdInsertDebugUtilsLabelEXT = 0; + + //=== VK_EXT_discard_rectangles === + PFN_vkCmdSetDiscardRectangleEXT vkCmdSetDiscardRectangleEXT = 0; + + //=== VK_EXT_display_control === + PFN_vkDisplayPowerControlEXT vkDisplayPowerControlEXT = 0; + PFN_vkRegisterDeviceEventEXT vkRegisterDeviceEventEXT = 0; + PFN_vkRegisterDisplayEventEXT vkRegisterDisplayEventEXT = 0; + PFN_vkGetSwapchainCounterEXT vkGetSwapchainCounterEXT = 0; + + //=== VK_EXT_extended_dynamic_state === + PFN_vkCmdSetCullModeEXT vkCmdSetCullModeEXT = 0; + PFN_vkCmdSetFrontFaceEXT vkCmdSetFrontFaceEXT = 0; + PFN_vkCmdSetPrimitiveTopologyEXT vkCmdSetPrimitiveTopologyEXT = 0; + PFN_vkCmdSetViewportWithCountEXT vkCmdSetViewportWithCountEXT = 0; + PFN_vkCmdSetScissorWithCountEXT vkCmdSetScissorWithCountEXT = 0; + PFN_vkCmdBindVertexBuffers2EXT vkCmdBindVertexBuffers2EXT = 0; + PFN_vkCmdSetDepthTestEnableEXT vkCmdSetDepthTestEnableEXT = 0; + PFN_vkCmdSetDepthWriteEnableEXT vkCmdSetDepthWriteEnableEXT = 0; + PFN_vkCmdSetDepthCompareOpEXT vkCmdSetDepthCompareOpEXT = 0; + PFN_vkCmdSetDepthBoundsTestEnableEXT vkCmdSetDepthBoundsTestEnableEXT = 0; + PFN_vkCmdSetStencilTestEnableEXT vkCmdSetStencilTestEnableEXT = 0; + PFN_vkCmdSetStencilOpEXT vkCmdSetStencilOpEXT = 0; + + //=== VK_EXT_extended_dynamic_state2 === + PFN_vkCmdSetPatchControlPointsEXT vkCmdSetPatchControlPointsEXT = 0; + PFN_vkCmdSetRasterizerDiscardEnableEXT vkCmdSetRasterizerDiscardEnableEXT = 0; + PFN_vkCmdSetDepthBiasEnableEXT vkCmdSetDepthBiasEnableEXT = 0; + PFN_vkCmdSetLogicOpEXT vkCmdSetLogicOpEXT = 0; + PFN_vkCmdSetPrimitiveRestartEnableEXT vkCmdSetPrimitiveRestartEnableEXT = 0; + + //=== VK_EXT_external_memory_host === + PFN_vkGetMemoryHostPointerPropertiesEXT vkGetMemoryHostPointerPropertiesEXT = 0; + # if defined( VK_USE_PLATFORM_WIN32_KHR ) - PFN_vkAcquireFullScreenExclusiveModeEXT vkAcquireFullScreenExclusiveModeEXT = 0; + //=== VK_EXT_full_screen_exclusive === + PFN_vkAcquireFullScreenExclusiveModeEXT vkAcquireFullScreenExclusiveModeEXT = 0; + PFN_vkReleaseFullScreenExclusiveModeEXT vkReleaseFullScreenExclusiveModeEXT = 0; + PFN_vkGetDeviceGroupSurfacePresentModes2EXT vkGetDeviceGroupSurfacePresentModes2EXT = 0; # else PFN_dummy vkAcquireFullScreenExclusiveModeEXT_placeholder = 0; + PFN_dummy vkReleaseFullScreenExclusiveModeEXT_placeholder = 0; + PFN_dummy vkGetDeviceGroupSurfacePresentModes2EXT_placeholder = 0; # endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_EXT_hdr_metadata === + PFN_vkSetHdrMetadataEXT vkSetHdrMetadataEXT = 0; + + //=== VK_EXT_host_query_reset === + PFN_vkResetQueryPoolEXT vkResetQueryPoolEXT = 0; + + //=== VK_EXT_image_drm_format_modifier === + PFN_vkGetImageDrmFormatModifierPropertiesEXT vkGetImageDrmFormatModifierPropertiesEXT = 0; + + //=== VK_EXT_line_rasterization === + PFN_vkCmdSetLineStippleEXT vkCmdSetLineStippleEXT = 0; + + //=== VK_EXT_multi_draw === + PFN_vkCmdDrawMultiEXT vkCmdDrawMultiEXT = 0; + PFN_vkCmdDrawMultiIndexedEXT vkCmdDrawMultiIndexedEXT = 0; + + //=== VK_EXT_private_data === + PFN_vkCreatePrivateDataSlotEXT vkCreatePrivateDataSlotEXT = 0; + PFN_vkDestroyPrivateDataSlotEXT vkDestroyPrivateDataSlotEXT = 0; + PFN_vkSetPrivateDataEXT vkSetPrivateDataEXT = 0; + PFN_vkGetPrivateDataEXT vkGetPrivateDataEXT = 0; + + //=== VK_EXT_sample_locations === + PFN_vkCmdSetSampleLocationsEXT vkCmdSetSampleLocationsEXT = 0; + + //=== VK_EXT_transform_feedback === + PFN_vkCmdBindTransformFeedbackBuffersEXT vkCmdBindTransformFeedbackBuffersEXT = 0; + PFN_vkCmdBeginTransformFeedbackEXT vkCmdBeginTransformFeedbackEXT = 0; + PFN_vkCmdEndTransformFeedbackEXT vkCmdEndTransformFeedbackEXT = 0; + PFN_vkCmdBeginQueryIndexedEXT vkCmdBeginQueryIndexedEXT = 0; + PFN_vkCmdEndQueryIndexedEXT vkCmdEndQueryIndexedEXT = 0; + PFN_vkCmdDrawIndirectByteCountEXT vkCmdDrawIndirectByteCountEXT = 0; + + //=== VK_EXT_validation_cache === + PFN_vkCreateValidationCacheEXT vkCreateValidationCacheEXT = 0; + PFN_vkDestroyValidationCacheEXT vkDestroyValidationCacheEXT = 0; + PFN_vkMergeValidationCachesEXT vkMergeValidationCachesEXT = 0; + PFN_vkGetValidationCacheDataEXT vkGetValidationCacheDataEXT = 0; + + //=== VK_EXT_vertex_input_dynamic_state === + PFN_vkCmdSetVertexInputEXT vkCmdSetVertexInputEXT = 0; + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_external_memory === + PFN_vkGetMemoryZirconHandleFUCHSIA vkGetMemoryZirconHandleFUCHSIA = 0; + PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA vkGetMemoryZirconHandlePropertiesFUCHSIA = 0; +# else + PFN_dummy vkGetMemoryZirconHandleFUCHSIA_placeholder = 0; + PFN_dummy vkGetMemoryZirconHandlePropertiesFUCHSIA_placeholder = 0; +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + +# if defined( VK_USE_PLATFORM_FUCHSIA ) + //=== VK_FUCHSIA_external_semaphore === + PFN_vkImportSemaphoreZirconHandleFUCHSIA vkImportSemaphoreZirconHandleFUCHSIA = 0; + PFN_vkGetSemaphoreZirconHandleFUCHSIA vkGetSemaphoreZirconHandleFUCHSIA = 0; +# else + PFN_dummy vkImportSemaphoreZirconHandleFUCHSIA_placeholder = 0; + PFN_dummy vkGetSemaphoreZirconHandleFUCHSIA_placeholder = 0; +# endif /*VK_USE_PLATFORM_FUCHSIA*/ + + //=== VK_GOOGLE_display_timing === + PFN_vkGetRefreshCycleDurationGOOGLE vkGetRefreshCycleDurationGOOGLE = 0; + PFN_vkGetPastPresentationTimingGOOGLE vkGetPastPresentationTimingGOOGLE = 0; + + //=== VK_HUAWEI_invocation_mask === + PFN_vkCmdBindInvocationMaskHUAWEI vkCmdBindInvocationMaskHUAWEI = 0; + + //=== VK_HUAWEI_subpass_shading === + PFN_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI = 0; + PFN_vkCmdSubpassShadingHUAWEI vkCmdSubpassShadingHUAWEI = 0; + + //=== VK_INTEL_performance_query === + PFN_vkInitializePerformanceApiINTEL vkInitializePerformanceApiINTEL = 0; + PFN_vkUninitializePerformanceApiINTEL vkUninitializePerformanceApiINTEL = 0; + PFN_vkCmdSetPerformanceMarkerINTEL vkCmdSetPerformanceMarkerINTEL = 0; + PFN_vkCmdSetPerformanceStreamMarkerINTEL vkCmdSetPerformanceStreamMarkerINTEL = 0; + PFN_vkCmdSetPerformanceOverrideINTEL vkCmdSetPerformanceOverrideINTEL = 0; + PFN_vkAcquirePerformanceConfigurationINTEL vkAcquirePerformanceConfigurationINTEL = 0; + PFN_vkReleasePerformanceConfigurationINTEL vkReleasePerformanceConfigurationINTEL = 0; + PFN_vkQueueSetPerformanceConfigurationINTEL vkQueueSetPerformanceConfigurationINTEL = 0; + PFN_vkGetPerformanceParameterINTEL vkGetPerformanceParameterINTEL = 0; + + //=== VK_KHR_acceleration_structure === + PFN_vkCreateAccelerationStructureKHR vkCreateAccelerationStructureKHR = 0; + PFN_vkDestroyAccelerationStructureKHR vkDestroyAccelerationStructureKHR = 0; + PFN_vkCmdBuildAccelerationStructuresKHR vkCmdBuildAccelerationStructuresKHR = 0; + PFN_vkCmdBuildAccelerationStructuresIndirectKHR vkCmdBuildAccelerationStructuresIndirectKHR = 0; + PFN_vkBuildAccelerationStructuresKHR vkBuildAccelerationStructuresKHR = 0; + PFN_vkCopyAccelerationStructureKHR vkCopyAccelerationStructureKHR = 0; + PFN_vkCopyAccelerationStructureToMemoryKHR vkCopyAccelerationStructureToMemoryKHR = 0; + PFN_vkCopyMemoryToAccelerationStructureKHR vkCopyMemoryToAccelerationStructureKHR = 0; + PFN_vkWriteAccelerationStructuresPropertiesKHR vkWriteAccelerationStructuresPropertiesKHR = 0; + PFN_vkCmdCopyAccelerationStructureKHR vkCmdCopyAccelerationStructureKHR = 0; + PFN_vkCmdCopyAccelerationStructureToMemoryKHR vkCmdCopyAccelerationStructureToMemoryKHR = 0; + PFN_vkCmdCopyMemoryToAccelerationStructureKHR vkCmdCopyMemoryToAccelerationStructureKHR = 0; + PFN_vkGetAccelerationStructureDeviceAddressKHR vkGetAccelerationStructureDeviceAddressKHR = 0; + PFN_vkCmdWriteAccelerationStructuresPropertiesKHR vkCmdWriteAccelerationStructuresPropertiesKHR = 0; + PFN_vkGetDeviceAccelerationStructureCompatibilityKHR vkGetDeviceAccelerationStructureCompatibilityKHR = 0; + PFN_vkGetAccelerationStructureBuildSizesKHR vkGetAccelerationStructureBuildSizesKHR = 0; + + //=== VK_KHR_bind_memory2 === + PFN_vkBindBufferMemory2KHR vkBindBufferMemory2KHR = 0; + PFN_vkBindImageMemory2KHR vkBindImageMemory2KHR = 0; + + //=== VK_KHR_buffer_device_address === + PFN_vkGetBufferDeviceAddressKHR vkGetBufferDeviceAddressKHR = 0; + PFN_vkGetBufferOpaqueCaptureAddressKHR vkGetBufferOpaqueCaptureAddressKHR = 0; + PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR vkGetDeviceMemoryOpaqueCaptureAddressKHR = 0; + + //=== VK_KHR_copy_commands2 === + PFN_vkCmdCopyBuffer2KHR vkCmdCopyBuffer2KHR = 0; + PFN_vkCmdCopyImage2KHR vkCmdCopyImage2KHR = 0; + PFN_vkCmdCopyBufferToImage2KHR vkCmdCopyBufferToImage2KHR = 0; + PFN_vkCmdCopyImageToBuffer2KHR vkCmdCopyImageToBuffer2KHR = 0; + PFN_vkCmdBlitImage2KHR vkCmdBlitImage2KHR = 0; + PFN_vkCmdResolveImage2KHR vkCmdResolveImage2KHR = 0; + + //=== VK_KHR_create_renderpass2 === + PFN_vkCreateRenderPass2KHR vkCreateRenderPass2KHR = 0; + PFN_vkCmdBeginRenderPass2KHR vkCmdBeginRenderPass2KHR = 0; + PFN_vkCmdNextSubpass2KHR vkCmdNextSubpass2KHR = 0; + PFN_vkCmdEndRenderPass2KHR vkCmdEndRenderPass2KHR = 0; + + //=== VK_KHR_deferred_host_operations === + PFN_vkCreateDeferredOperationKHR vkCreateDeferredOperationKHR = 0; + PFN_vkDestroyDeferredOperationKHR vkDestroyDeferredOperationKHR = 0; + PFN_vkGetDeferredOperationMaxConcurrencyKHR vkGetDeferredOperationMaxConcurrencyKHR = 0; + PFN_vkGetDeferredOperationResultKHR vkGetDeferredOperationResultKHR = 0; + PFN_vkDeferredOperationJoinKHR vkDeferredOperationJoinKHR = 0; + + //=== VK_KHR_descriptor_update_template === + PFN_vkCreateDescriptorUpdateTemplateKHR vkCreateDescriptorUpdateTemplateKHR = 0; + PFN_vkDestroyDescriptorUpdateTemplateKHR vkDestroyDescriptorUpdateTemplateKHR = 0; + PFN_vkUpdateDescriptorSetWithTemplateKHR vkUpdateDescriptorSetWithTemplateKHR = 0; + PFN_vkCmdPushDescriptorSetWithTemplateKHR vkCmdPushDescriptorSetWithTemplateKHR = 0; + + //=== VK_KHR_device_group === + PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR vkGetDeviceGroupPeerMemoryFeaturesKHR = 0; + PFN_vkCmdSetDeviceMaskKHR vkCmdSetDeviceMaskKHR = 0; + PFN_vkCmdDispatchBaseKHR vkCmdDispatchBaseKHR = 0; + PFN_vkGetDeviceGroupPresentCapabilitiesKHR vkGetDeviceGroupPresentCapabilitiesKHR = 0; + PFN_vkGetDeviceGroupSurfacePresentModesKHR vkGetDeviceGroupSurfacePresentModesKHR = 0; PFN_vkAcquireNextImage2KHR vkAcquireNextImage2KHR = 0; - PFN_vkAcquireNextImageKHR vkAcquireNextImageKHR = 0; - PFN_vkAcquirePerformanceConfigurationINTEL vkAcquirePerformanceConfigurationINTEL = 0; - PFN_vkAcquireProfilingLockKHR vkAcquireProfilingLockKHR = 0; - PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers = 0; - PFN_vkAllocateDescriptorSets vkAllocateDescriptorSets = 0; - PFN_vkAllocateMemory vkAllocateMemory = 0; - PFN_vkBeginCommandBuffer vkBeginCommandBuffer = 0; - PFN_vkBindAccelerationStructureMemoryNV vkBindAccelerationStructureMemoryNV = 0; - PFN_vkBindBufferMemory vkBindBufferMemory = 0; - PFN_vkBindBufferMemory2 vkBindBufferMemory2 = 0; - PFN_vkBindBufferMemory2KHR vkBindBufferMemory2KHR = 0; - PFN_vkBindImageMemory vkBindImageMemory = 0; - PFN_vkBindImageMemory2 vkBindImageMemory2 = 0; - PFN_vkBindImageMemory2KHR vkBindImageMemory2KHR = 0; -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - PFN_vkBindVideoSessionMemoryKHR vkBindVideoSessionMemoryKHR = 0; + + //=== VK_KHR_display_swapchain === + PFN_vkCreateSharedSwapchainsKHR vkCreateSharedSwapchainsKHR = 0; + + //=== VK_KHR_draw_indirect_count === + PFN_vkCmdDrawIndirectCountKHR vkCmdDrawIndirectCountKHR = 0; + PFN_vkCmdDrawIndexedIndirectCountKHR vkCmdDrawIndexedIndirectCountKHR = 0; + + //=== VK_KHR_external_fence_fd === + PFN_vkImportFenceFdKHR vkImportFenceFdKHR = 0; + PFN_vkGetFenceFdKHR vkGetFenceFdKHR = 0; + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_fence_win32 === + PFN_vkImportFenceWin32HandleKHR vkImportFenceWin32HandleKHR = 0; + PFN_vkGetFenceWin32HandleKHR vkGetFenceWin32HandleKHR = 0; # else - PFN_dummy vkBindVideoSessionMemoryKHR_placeholder = 0; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - PFN_vkBuildAccelerationStructuresKHR vkBuildAccelerationStructuresKHR = 0; - PFN_vkCmdBeginConditionalRenderingEXT vkCmdBeginConditionalRenderingEXT = 0; - PFN_vkCmdBeginDebugUtilsLabelEXT vkCmdBeginDebugUtilsLabelEXT = 0; - PFN_vkCmdBeginQuery vkCmdBeginQuery = 0; - PFN_vkCmdBeginQueryIndexedEXT vkCmdBeginQueryIndexedEXT = 0; - PFN_vkCmdBeginRenderPass vkCmdBeginRenderPass = 0; - PFN_vkCmdBeginRenderPass2 vkCmdBeginRenderPass2 = 0; - PFN_vkCmdBeginRenderPass2KHR vkCmdBeginRenderPass2KHR = 0; - PFN_vkCmdBeginTransformFeedbackEXT vkCmdBeginTransformFeedbackEXT = 0; -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - PFN_vkCmdBeginVideoCodingKHR vkCmdBeginVideoCodingKHR = 0; + PFN_dummy vkImportFenceWin32HandleKHR_placeholder = 0; + PFN_dummy vkGetFenceWin32HandleKHR_placeholder = 0; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_memory_fd === + PFN_vkGetMemoryFdKHR vkGetMemoryFdKHR = 0; + PFN_vkGetMemoryFdPropertiesKHR vkGetMemoryFdPropertiesKHR = 0; + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_memory_win32 === + PFN_vkGetMemoryWin32HandleKHR vkGetMemoryWin32HandleKHR = 0; + PFN_vkGetMemoryWin32HandlePropertiesKHR vkGetMemoryWin32HandlePropertiesKHR = 0; # else - PFN_dummy vkCmdBeginVideoCodingKHR_placeholder = 0; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - PFN_vkCmdBindDescriptorSets vkCmdBindDescriptorSets = 0; - PFN_vkCmdBindIndexBuffer vkCmdBindIndexBuffer = 0; - PFN_vkCmdBindInvocationMaskHUAWEI vkCmdBindInvocationMaskHUAWEI = 0; - PFN_vkCmdBindPipeline vkCmdBindPipeline = 0; - PFN_vkCmdBindPipelineShaderGroupNV vkCmdBindPipelineShaderGroupNV = 0; - PFN_vkCmdBindShadingRateImageNV vkCmdBindShadingRateImageNV = 0; - PFN_vkCmdBindTransformFeedbackBuffersEXT vkCmdBindTransformFeedbackBuffersEXT = 0; - PFN_vkCmdBindVertexBuffers vkCmdBindVertexBuffers = 0; - PFN_vkCmdBindVertexBuffers2EXT vkCmdBindVertexBuffers2EXT = 0; - PFN_vkCmdBlitImage vkCmdBlitImage = 0; - PFN_vkCmdBlitImage2KHR vkCmdBlitImage2KHR = 0; - PFN_vkCmdBuildAccelerationStructureNV vkCmdBuildAccelerationStructureNV = 0; - PFN_vkCmdBuildAccelerationStructuresIndirectKHR vkCmdBuildAccelerationStructuresIndirectKHR = 0; - PFN_vkCmdBuildAccelerationStructuresKHR vkCmdBuildAccelerationStructuresKHR = 0; - PFN_vkCmdClearAttachments vkCmdClearAttachments = 0; - PFN_vkCmdClearColorImage vkCmdClearColorImage = 0; - PFN_vkCmdClearDepthStencilImage vkCmdClearDepthStencilImage = 0; -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - PFN_vkCmdControlVideoCodingKHR vkCmdControlVideoCodingKHR = 0; + PFN_dummy vkGetMemoryWin32HandleKHR_placeholder = 0; + PFN_dummy vkGetMemoryWin32HandlePropertiesKHR_placeholder = 0; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_external_semaphore_fd === + PFN_vkImportSemaphoreFdKHR vkImportSemaphoreFdKHR = 0; + PFN_vkGetSemaphoreFdKHR vkGetSemaphoreFdKHR = 0; + +# if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_KHR_external_semaphore_win32 === + PFN_vkImportSemaphoreWin32HandleKHR vkImportSemaphoreWin32HandleKHR = 0; + PFN_vkGetSemaphoreWin32HandleKHR vkGetSemaphoreWin32HandleKHR = 0; # else - PFN_dummy vkCmdControlVideoCodingKHR_placeholder = 0; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - PFN_vkCmdCopyAccelerationStructureKHR vkCmdCopyAccelerationStructureKHR = 0; - PFN_vkCmdCopyAccelerationStructureNV vkCmdCopyAccelerationStructureNV = 0; - PFN_vkCmdCopyAccelerationStructureToMemoryKHR vkCmdCopyAccelerationStructureToMemoryKHR = 0; - PFN_vkCmdCopyBuffer vkCmdCopyBuffer = 0; - PFN_vkCmdCopyBuffer2KHR vkCmdCopyBuffer2KHR = 0; - PFN_vkCmdCopyBufferToImage vkCmdCopyBufferToImage = 0; - PFN_vkCmdCopyBufferToImage2KHR vkCmdCopyBufferToImage2KHR = 0; - PFN_vkCmdCopyImage vkCmdCopyImage = 0; - PFN_vkCmdCopyImage2KHR vkCmdCopyImage2KHR = 0; - PFN_vkCmdCopyImageToBuffer vkCmdCopyImageToBuffer = 0; - PFN_vkCmdCopyImageToBuffer2KHR vkCmdCopyImageToBuffer2KHR = 0; - PFN_vkCmdCopyMemoryToAccelerationStructureKHR vkCmdCopyMemoryToAccelerationStructureKHR = 0; - PFN_vkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResults = 0; - PFN_vkCmdCuLaunchKernelNVX vkCmdCuLaunchKernelNVX = 0; - PFN_vkCmdDebugMarkerBeginEXT vkCmdDebugMarkerBeginEXT = 0; - PFN_vkCmdDebugMarkerEndEXT vkCmdDebugMarkerEndEXT = 0; - PFN_vkCmdDebugMarkerInsertEXT vkCmdDebugMarkerInsertEXT = 0; + PFN_dummy vkImportSemaphoreWin32HandleKHR_placeholder = 0; + PFN_dummy vkGetSemaphoreWin32HandleKHR_placeholder = 0; +# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_KHR_fragment_shading_rate === + PFN_vkCmdSetFragmentShadingRateKHR vkCmdSetFragmentShadingRateKHR = 0; + + //=== VK_KHR_get_memory_requirements2 === + PFN_vkGetImageMemoryRequirements2KHR vkGetImageMemoryRequirements2KHR = 0; + PFN_vkGetBufferMemoryRequirements2KHR vkGetBufferMemoryRequirements2KHR = 0; + PFN_vkGetImageSparseMemoryRequirements2KHR vkGetImageSparseMemoryRequirements2KHR = 0; + + //=== VK_KHR_maintenance1 === + PFN_vkTrimCommandPoolKHR vkTrimCommandPoolKHR = 0; + + //=== VK_KHR_maintenance3 === + PFN_vkGetDescriptorSetLayoutSupportKHR vkGetDescriptorSetLayoutSupportKHR = 0; + + //=== VK_KHR_performance_query === + PFN_vkAcquireProfilingLockKHR vkAcquireProfilingLockKHR = 0; + PFN_vkReleaseProfilingLockKHR vkReleaseProfilingLockKHR = 0; + + //=== VK_KHR_pipeline_executable_properties === + PFN_vkGetPipelineExecutablePropertiesKHR vkGetPipelineExecutablePropertiesKHR = 0; + PFN_vkGetPipelineExecutableStatisticsKHR vkGetPipelineExecutableStatisticsKHR = 0; + PFN_vkGetPipelineExecutableInternalRepresentationsKHR vkGetPipelineExecutableInternalRepresentationsKHR = 0; + + //=== VK_KHR_present_wait === + PFN_vkWaitForPresentKHR vkWaitForPresentKHR = 0; + + //=== VK_KHR_push_descriptor === + PFN_vkCmdPushDescriptorSetKHR vkCmdPushDescriptorSetKHR = 0; + + //=== VK_KHR_ray_tracing_pipeline === + PFN_vkCmdTraceRaysKHR vkCmdTraceRaysKHR = 0; + PFN_vkCreateRayTracingPipelinesKHR vkCreateRayTracingPipelinesKHR = 0; + PFN_vkGetRayTracingShaderGroupHandlesKHR vkGetRayTracingShaderGroupHandlesKHR = 0; + PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR vkGetRayTracingCaptureReplayShaderGroupHandlesKHR = 0; + PFN_vkCmdTraceRaysIndirectKHR vkCmdTraceRaysIndirectKHR = 0; + PFN_vkGetRayTracingShaderGroupStackSizeKHR vkGetRayTracingShaderGroupStackSizeKHR = 0; + PFN_vkCmdSetRayTracingPipelineStackSizeKHR vkCmdSetRayTracingPipelineStackSizeKHR = 0; + + //=== VK_KHR_sampler_ycbcr_conversion === + PFN_vkCreateSamplerYcbcrConversionKHR vkCreateSamplerYcbcrConversionKHR = 0; + PFN_vkDestroySamplerYcbcrConversionKHR vkDestroySamplerYcbcrConversionKHR = 0; + + //=== VK_KHR_shared_presentable_image === + PFN_vkGetSwapchainStatusKHR vkGetSwapchainStatusKHR = 0; + + //=== VK_KHR_swapchain === + PFN_vkCreateSwapchainKHR vkCreateSwapchainKHR = 0; + PFN_vkDestroySwapchainKHR vkDestroySwapchainKHR = 0; + PFN_vkGetSwapchainImagesKHR vkGetSwapchainImagesKHR = 0; + PFN_vkAcquireNextImageKHR vkAcquireNextImageKHR = 0; + PFN_vkQueuePresentKHR vkQueuePresentKHR = 0; + + //=== VK_KHR_synchronization2 === + PFN_vkCmdSetEvent2KHR vkCmdSetEvent2KHR = 0; + PFN_vkCmdResetEvent2KHR vkCmdResetEvent2KHR = 0; + PFN_vkCmdWaitEvents2KHR vkCmdWaitEvents2KHR = 0; + PFN_vkCmdPipelineBarrier2KHR vkCmdPipelineBarrier2KHR = 0; + PFN_vkCmdWriteTimestamp2KHR vkCmdWriteTimestamp2KHR = 0; + PFN_vkQueueSubmit2KHR vkQueueSubmit2KHR = 0; + PFN_vkCmdWriteBufferMarker2AMD vkCmdWriteBufferMarker2AMD = 0; + PFN_vkGetQueueCheckpointData2NV vkGetQueueCheckpointData2NV = 0; + + //=== VK_KHR_timeline_semaphore === + PFN_vkGetSemaphoreCounterValueKHR vkGetSemaphoreCounterValueKHR = 0; + PFN_vkWaitSemaphoresKHR vkWaitSemaphoresKHR = 0; + PFN_vkSignalSemaphoreKHR vkSignalSemaphoreKHR = 0; + # if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_KHR_video_decode_queue === PFN_vkCmdDecodeVideoKHR vkCmdDecodeVideoKHR = 0; # else PFN_dummy vkCmdDecodeVideoKHR_placeholder = 0; # endif /*VK_ENABLE_BETA_EXTENSIONS*/ - PFN_vkCmdDispatch vkCmdDispatch = 0; - PFN_vkCmdDispatchBase vkCmdDispatchBase = 0; - PFN_vkCmdDispatchBaseKHR vkCmdDispatchBaseKHR = 0; - PFN_vkCmdDispatchIndirect vkCmdDispatchIndirect = 0; - PFN_vkCmdDraw vkCmdDraw = 0; - PFN_vkCmdDrawIndexed vkCmdDrawIndexed = 0; - PFN_vkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirect = 0; - PFN_vkCmdDrawIndexedIndirectCount vkCmdDrawIndexedIndirectCount = 0; - PFN_vkCmdDrawIndexedIndirectCountAMD vkCmdDrawIndexedIndirectCountAMD = 0; - PFN_vkCmdDrawIndexedIndirectCountKHR vkCmdDrawIndexedIndirectCountKHR = 0; - PFN_vkCmdDrawIndirect vkCmdDrawIndirect = 0; - PFN_vkCmdDrawIndirectByteCountEXT vkCmdDrawIndirectByteCountEXT = 0; - PFN_vkCmdDrawIndirectCount vkCmdDrawIndirectCount = 0; - PFN_vkCmdDrawIndirectCountAMD vkCmdDrawIndirectCountAMD = 0; - PFN_vkCmdDrawIndirectCountKHR vkCmdDrawIndirectCountKHR = 0; - PFN_vkCmdDrawMeshTasksIndirectCountNV vkCmdDrawMeshTasksIndirectCountNV = 0; - PFN_vkCmdDrawMeshTasksIndirectNV vkCmdDrawMeshTasksIndirectNV = 0; - PFN_vkCmdDrawMeshTasksNV vkCmdDrawMeshTasksNV = 0; - PFN_vkCmdDrawMultiEXT vkCmdDrawMultiEXT = 0; - PFN_vkCmdDrawMultiIndexedEXT vkCmdDrawMultiIndexedEXT = 0; + # if defined( VK_ENABLE_BETA_EXTENSIONS ) + //=== VK_KHR_video_encode_queue === PFN_vkCmdEncodeVideoKHR vkCmdEncodeVideoKHR = 0; # else PFN_dummy vkCmdEncodeVideoKHR_placeholder = 0; # endif /*VK_ENABLE_BETA_EXTENSIONS*/ - PFN_vkCmdEndConditionalRenderingEXT vkCmdEndConditionalRenderingEXT = 0; - PFN_vkCmdEndDebugUtilsLabelEXT vkCmdEndDebugUtilsLabelEXT = 0; - PFN_vkCmdEndQuery vkCmdEndQuery = 0; - PFN_vkCmdEndQueryIndexedEXT vkCmdEndQueryIndexedEXT = 0; - PFN_vkCmdEndRenderPass vkCmdEndRenderPass = 0; - PFN_vkCmdEndRenderPass2 vkCmdEndRenderPass2 = 0; - PFN_vkCmdEndRenderPass2KHR vkCmdEndRenderPass2KHR = 0; - PFN_vkCmdEndTransformFeedbackEXT vkCmdEndTransformFeedbackEXT = 0; + # if defined( VK_ENABLE_BETA_EXTENSIONS ) - PFN_vkCmdEndVideoCodingKHR vkCmdEndVideoCodingKHR = 0; -# else - PFN_dummy vkCmdEndVideoCodingKHR_placeholder = 0; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - PFN_vkCmdExecuteCommands vkCmdExecuteCommands = 0; - PFN_vkCmdExecuteGeneratedCommandsNV vkCmdExecuteGeneratedCommandsNV = 0; - PFN_vkCmdFillBuffer vkCmdFillBuffer = 0; - PFN_vkCmdInsertDebugUtilsLabelEXT vkCmdInsertDebugUtilsLabelEXT = 0; - PFN_vkCmdNextSubpass vkCmdNextSubpass = 0; - PFN_vkCmdNextSubpass2 vkCmdNextSubpass2 = 0; - PFN_vkCmdNextSubpass2KHR vkCmdNextSubpass2KHR = 0; - PFN_vkCmdPipelineBarrier vkCmdPipelineBarrier = 0; - PFN_vkCmdPipelineBarrier2KHR vkCmdPipelineBarrier2KHR = 0; - PFN_vkCmdPreprocessGeneratedCommandsNV vkCmdPreprocessGeneratedCommandsNV = 0; - PFN_vkCmdPushConstants vkCmdPushConstants = 0; - PFN_vkCmdPushDescriptorSetKHR vkCmdPushDescriptorSetKHR = 0; - PFN_vkCmdPushDescriptorSetWithTemplateKHR vkCmdPushDescriptorSetWithTemplateKHR = 0; - PFN_vkCmdResetEvent vkCmdResetEvent = 0; - PFN_vkCmdResetEvent2KHR vkCmdResetEvent2KHR = 0; - PFN_vkCmdResetQueryPool vkCmdResetQueryPool = 0; - PFN_vkCmdResolveImage vkCmdResolveImage = 0; - PFN_vkCmdResolveImage2KHR vkCmdResolveImage2KHR = 0; - PFN_vkCmdSetBlendConstants vkCmdSetBlendConstants = 0; - PFN_vkCmdSetCheckpointNV vkCmdSetCheckpointNV = 0; - PFN_vkCmdSetCoarseSampleOrderNV vkCmdSetCoarseSampleOrderNV = 0; - PFN_vkCmdSetColorWriteEnableEXT vkCmdSetColorWriteEnableEXT = 0; - PFN_vkCmdSetCullModeEXT vkCmdSetCullModeEXT = 0; - PFN_vkCmdSetDepthBias vkCmdSetDepthBias = 0; - PFN_vkCmdSetDepthBiasEnableEXT vkCmdSetDepthBiasEnableEXT = 0; - PFN_vkCmdSetDepthBounds vkCmdSetDepthBounds = 0; - PFN_vkCmdSetDepthBoundsTestEnableEXT vkCmdSetDepthBoundsTestEnableEXT = 0; - PFN_vkCmdSetDepthCompareOpEXT vkCmdSetDepthCompareOpEXT = 0; - PFN_vkCmdSetDepthTestEnableEXT vkCmdSetDepthTestEnableEXT = 0; - PFN_vkCmdSetDepthWriteEnableEXT vkCmdSetDepthWriteEnableEXT = 0; - PFN_vkCmdSetDeviceMask vkCmdSetDeviceMask = 0; - PFN_vkCmdSetDeviceMaskKHR vkCmdSetDeviceMaskKHR = 0; - PFN_vkCmdSetDiscardRectangleEXT vkCmdSetDiscardRectangleEXT = 0; - PFN_vkCmdSetEvent vkCmdSetEvent = 0; - PFN_vkCmdSetEvent2KHR vkCmdSetEvent2KHR = 0; - PFN_vkCmdSetExclusiveScissorNV vkCmdSetExclusiveScissorNV = 0; - PFN_vkCmdSetFragmentShadingRateEnumNV vkCmdSetFragmentShadingRateEnumNV = 0; - PFN_vkCmdSetFragmentShadingRateKHR vkCmdSetFragmentShadingRateKHR = 0; - PFN_vkCmdSetFrontFaceEXT vkCmdSetFrontFaceEXT = 0; - PFN_vkCmdSetLineStippleEXT vkCmdSetLineStippleEXT = 0; - PFN_vkCmdSetLineWidth vkCmdSetLineWidth = 0; - PFN_vkCmdSetLogicOpEXT vkCmdSetLogicOpEXT = 0; - PFN_vkCmdSetPatchControlPointsEXT vkCmdSetPatchControlPointsEXT = 0; - PFN_vkCmdSetPerformanceMarkerINTEL vkCmdSetPerformanceMarkerINTEL = 0; - PFN_vkCmdSetPerformanceOverrideINTEL vkCmdSetPerformanceOverrideINTEL = 0; - PFN_vkCmdSetPerformanceStreamMarkerINTEL vkCmdSetPerformanceStreamMarkerINTEL = 0; - PFN_vkCmdSetPrimitiveRestartEnableEXT vkCmdSetPrimitiveRestartEnableEXT = 0; - PFN_vkCmdSetPrimitiveTopologyEXT vkCmdSetPrimitiveTopologyEXT = 0; - PFN_vkCmdSetRasterizerDiscardEnableEXT vkCmdSetRasterizerDiscardEnableEXT = 0; - PFN_vkCmdSetRayTracingPipelineStackSizeKHR vkCmdSetRayTracingPipelineStackSizeKHR = 0; - PFN_vkCmdSetSampleLocationsEXT vkCmdSetSampleLocationsEXT = 0; - PFN_vkCmdSetScissor vkCmdSetScissor = 0; - PFN_vkCmdSetScissorWithCountEXT vkCmdSetScissorWithCountEXT = 0; - PFN_vkCmdSetStencilCompareMask vkCmdSetStencilCompareMask = 0; - PFN_vkCmdSetStencilOpEXT vkCmdSetStencilOpEXT = 0; - PFN_vkCmdSetStencilReference vkCmdSetStencilReference = 0; - PFN_vkCmdSetStencilTestEnableEXT vkCmdSetStencilTestEnableEXT = 0; - PFN_vkCmdSetStencilWriteMask vkCmdSetStencilWriteMask = 0; - PFN_vkCmdSetVertexInputEXT vkCmdSetVertexInputEXT = 0; - PFN_vkCmdSetViewport vkCmdSetViewport = 0; - PFN_vkCmdSetViewportShadingRatePaletteNV vkCmdSetViewportShadingRatePaletteNV = 0; - PFN_vkCmdSetViewportWScalingNV vkCmdSetViewportWScalingNV = 0; - PFN_vkCmdSetViewportWithCountEXT vkCmdSetViewportWithCountEXT = 0; - PFN_vkCmdSubpassShadingHUAWEI vkCmdSubpassShadingHUAWEI = 0; - PFN_vkCmdTraceRaysIndirectKHR vkCmdTraceRaysIndirectKHR = 0; - PFN_vkCmdTraceRaysKHR vkCmdTraceRaysKHR = 0; - PFN_vkCmdTraceRaysNV vkCmdTraceRaysNV = 0; - PFN_vkCmdUpdateBuffer vkCmdUpdateBuffer = 0; - PFN_vkCmdWaitEvents vkCmdWaitEvents = 0; - PFN_vkCmdWaitEvents2KHR vkCmdWaitEvents2KHR = 0; - PFN_vkCmdWriteAccelerationStructuresPropertiesKHR vkCmdWriteAccelerationStructuresPropertiesKHR = 0; - PFN_vkCmdWriteAccelerationStructuresPropertiesNV vkCmdWriteAccelerationStructuresPropertiesNV = 0; - PFN_vkCmdWriteBufferMarker2AMD vkCmdWriteBufferMarker2AMD = 0; - PFN_vkCmdWriteBufferMarkerAMD vkCmdWriteBufferMarkerAMD = 0; - PFN_vkCmdWriteTimestamp vkCmdWriteTimestamp = 0; - PFN_vkCmdWriteTimestamp2KHR vkCmdWriteTimestamp2KHR = 0; - PFN_vkCompileDeferredNV vkCompileDeferredNV = 0; - PFN_vkCopyAccelerationStructureKHR vkCopyAccelerationStructureKHR = 0; - PFN_vkCopyAccelerationStructureToMemoryKHR vkCopyAccelerationStructureToMemoryKHR = 0; - PFN_vkCopyMemoryToAccelerationStructureKHR vkCopyMemoryToAccelerationStructureKHR = 0; - PFN_vkCreateAccelerationStructureKHR vkCreateAccelerationStructureKHR = 0; - PFN_vkCreateAccelerationStructureNV vkCreateAccelerationStructureNV = 0; - PFN_vkCreateBuffer vkCreateBuffer = 0; - PFN_vkCreateBufferView vkCreateBufferView = 0; - PFN_vkCreateCommandPool vkCreateCommandPool = 0; - PFN_vkCreateComputePipelines vkCreateComputePipelines = 0; - PFN_vkCreateCuFunctionNVX vkCreateCuFunctionNVX = 0; - PFN_vkCreateCuModuleNVX vkCreateCuModuleNVX = 0; - PFN_vkCreateDeferredOperationKHR vkCreateDeferredOperationKHR = 0; - PFN_vkCreateDescriptorPool vkCreateDescriptorPool = 0; - PFN_vkCreateDescriptorSetLayout vkCreateDescriptorSetLayout = 0; - PFN_vkCreateDescriptorUpdateTemplate vkCreateDescriptorUpdateTemplate = 0; - PFN_vkCreateDescriptorUpdateTemplateKHR vkCreateDescriptorUpdateTemplateKHR = 0; - PFN_vkCreateEvent vkCreateEvent = 0; - PFN_vkCreateFence vkCreateFence = 0; - PFN_vkCreateFramebuffer vkCreateFramebuffer = 0; - PFN_vkCreateGraphicsPipelines vkCreateGraphicsPipelines = 0; - PFN_vkCreateImage vkCreateImage = 0; - PFN_vkCreateImageView vkCreateImageView = 0; - PFN_vkCreateIndirectCommandsLayoutNV vkCreateIndirectCommandsLayoutNV = 0; - PFN_vkCreatePipelineCache vkCreatePipelineCache = 0; - PFN_vkCreatePipelineLayout vkCreatePipelineLayout = 0; - PFN_vkCreatePrivateDataSlotEXT vkCreatePrivateDataSlotEXT = 0; - PFN_vkCreateQueryPool vkCreateQueryPool = 0; - PFN_vkCreateRayTracingPipelinesKHR vkCreateRayTracingPipelinesKHR = 0; - PFN_vkCreateRayTracingPipelinesNV vkCreateRayTracingPipelinesNV = 0; - PFN_vkCreateRenderPass vkCreateRenderPass = 0; - PFN_vkCreateRenderPass2 vkCreateRenderPass2 = 0; - PFN_vkCreateRenderPass2KHR vkCreateRenderPass2KHR = 0; - PFN_vkCreateSampler vkCreateSampler = 0; - PFN_vkCreateSamplerYcbcrConversion vkCreateSamplerYcbcrConversion = 0; - PFN_vkCreateSamplerYcbcrConversionKHR vkCreateSamplerYcbcrConversionKHR = 0; - PFN_vkCreateSemaphore vkCreateSemaphore = 0; - PFN_vkCreateShaderModule vkCreateShaderModule = 0; - PFN_vkCreateSharedSwapchainsKHR vkCreateSharedSwapchainsKHR = 0; - PFN_vkCreateSwapchainKHR vkCreateSwapchainKHR = 0; - PFN_vkCreateValidationCacheEXT vkCreateValidationCacheEXT = 0; -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - PFN_vkCreateVideoSessionKHR vkCreateVideoSessionKHR = 0; + //=== VK_KHR_video_queue === + PFN_vkCreateVideoSessionKHR vkCreateVideoSessionKHR = 0; + PFN_vkDestroyVideoSessionKHR vkDestroyVideoSessionKHR = 0; + PFN_vkGetVideoSessionMemoryRequirementsKHR vkGetVideoSessionMemoryRequirementsKHR = 0; + PFN_vkBindVideoSessionMemoryKHR vkBindVideoSessionMemoryKHR = 0; + PFN_vkCreateVideoSessionParametersKHR vkCreateVideoSessionParametersKHR = 0; + PFN_vkUpdateVideoSessionParametersKHR vkUpdateVideoSessionParametersKHR = 0; + PFN_vkDestroyVideoSessionParametersKHR vkDestroyVideoSessionParametersKHR = 0; + PFN_vkCmdBeginVideoCodingKHR vkCmdBeginVideoCodingKHR = 0; + PFN_vkCmdEndVideoCodingKHR vkCmdEndVideoCodingKHR = 0; + PFN_vkCmdControlVideoCodingKHR vkCmdControlVideoCodingKHR = 0; # else PFN_dummy vkCreateVideoSessionKHR_placeholder = 0; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - PFN_vkCreateVideoSessionParametersKHR vkCreateVideoSessionParametersKHR = 0; -# else - PFN_dummy vkCreateVideoSessionParametersKHR_placeholder = 0; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - PFN_vkDebugMarkerSetObjectNameEXT vkDebugMarkerSetObjectNameEXT = 0; - PFN_vkDebugMarkerSetObjectTagEXT vkDebugMarkerSetObjectTagEXT = 0; - PFN_vkDeferredOperationJoinKHR vkDeferredOperationJoinKHR = 0; - PFN_vkDestroyAccelerationStructureKHR vkDestroyAccelerationStructureKHR = 0; - PFN_vkDestroyAccelerationStructureNV vkDestroyAccelerationStructureNV = 0; - PFN_vkDestroyBuffer vkDestroyBuffer = 0; - PFN_vkDestroyBufferView vkDestroyBufferView = 0; - PFN_vkDestroyCommandPool vkDestroyCommandPool = 0; - PFN_vkDestroyCuFunctionNVX vkDestroyCuFunctionNVX = 0; - PFN_vkDestroyCuModuleNVX vkDestroyCuModuleNVX = 0; - PFN_vkDestroyDeferredOperationKHR vkDestroyDeferredOperationKHR = 0; - PFN_vkDestroyDescriptorPool vkDestroyDescriptorPool = 0; - PFN_vkDestroyDescriptorSetLayout vkDestroyDescriptorSetLayout = 0; - PFN_vkDestroyDescriptorUpdateTemplate vkDestroyDescriptorUpdateTemplate = 0; - PFN_vkDestroyDescriptorUpdateTemplateKHR vkDestroyDescriptorUpdateTemplateKHR = 0; - PFN_vkDestroyDevice vkDestroyDevice = 0; - PFN_vkDestroyEvent vkDestroyEvent = 0; - PFN_vkDestroyFence vkDestroyFence = 0; - PFN_vkDestroyFramebuffer vkDestroyFramebuffer = 0; - PFN_vkDestroyImage vkDestroyImage = 0; - PFN_vkDestroyImageView vkDestroyImageView = 0; - PFN_vkDestroyIndirectCommandsLayoutNV vkDestroyIndirectCommandsLayoutNV = 0; - PFN_vkDestroyPipeline vkDestroyPipeline = 0; - PFN_vkDestroyPipelineCache vkDestroyPipelineCache = 0; - PFN_vkDestroyPipelineLayout vkDestroyPipelineLayout = 0; - PFN_vkDestroyPrivateDataSlotEXT vkDestroyPrivateDataSlotEXT = 0; - PFN_vkDestroyQueryPool vkDestroyQueryPool = 0; - PFN_vkDestroyRenderPass vkDestroyRenderPass = 0; - PFN_vkDestroySampler vkDestroySampler = 0; - PFN_vkDestroySamplerYcbcrConversion vkDestroySamplerYcbcrConversion = 0; - PFN_vkDestroySamplerYcbcrConversionKHR vkDestroySamplerYcbcrConversionKHR = 0; - PFN_vkDestroySemaphore vkDestroySemaphore = 0; - PFN_vkDestroyShaderModule vkDestroyShaderModule = 0; - PFN_vkDestroySwapchainKHR vkDestroySwapchainKHR = 0; - PFN_vkDestroyValidationCacheEXT vkDestroyValidationCacheEXT = 0; -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - PFN_vkDestroyVideoSessionKHR vkDestroyVideoSessionKHR = 0; -# else PFN_dummy vkDestroyVideoSessionKHR_placeholder = 0; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - PFN_vkDestroyVideoSessionParametersKHR vkDestroyVideoSessionParametersKHR = 0; -# else + PFN_dummy vkGetVideoSessionMemoryRequirementsKHR_placeholder = 0; + PFN_dummy vkBindVideoSessionMemoryKHR_placeholder = 0; + PFN_dummy vkCreateVideoSessionParametersKHR_placeholder = 0; + PFN_dummy vkUpdateVideoSessionParametersKHR_placeholder = 0; PFN_dummy vkDestroyVideoSessionParametersKHR_placeholder = 0; + PFN_dummy vkCmdBeginVideoCodingKHR_placeholder = 0; + PFN_dummy vkCmdEndVideoCodingKHR_placeholder = 0; + PFN_dummy vkCmdControlVideoCodingKHR_placeholder = 0; # endif /*VK_ENABLE_BETA_EXTENSIONS*/ - PFN_vkDeviceWaitIdle vkDeviceWaitIdle = 0; - PFN_vkDisplayPowerControlEXT vkDisplayPowerControlEXT = 0; - PFN_vkEndCommandBuffer vkEndCommandBuffer = 0; - PFN_vkFlushMappedMemoryRanges vkFlushMappedMemoryRanges = 0; - PFN_vkFreeCommandBuffers vkFreeCommandBuffers = 0; - PFN_vkFreeDescriptorSets vkFreeDescriptorSets = 0; - PFN_vkFreeMemory vkFreeMemory = 0; - PFN_vkGetAccelerationStructureBuildSizesKHR vkGetAccelerationStructureBuildSizesKHR = 0; - PFN_vkGetAccelerationStructureDeviceAddressKHR vkGetAccelerationStructureDeviceAddressKHR = 0; - PFN_vkGetAccelerationStructureHandleNV vkGetAccelerationStructureHandleNV = 0; - PFN_vkGetAccelerationStructureMemoryRequirementsNV vkGetAccelerationStructureMemoryRequirementsNV = 0; -# if defined( VK_USE_PLATFORM_ANDROID_KHR ) - PFN_vkGetAndroidHardwareBufferPropertiesANDROID vkGetAndroidHardwareBufferPropertiesANDROID = 0; -# else - PFN_dummy vkGetAndroidHardwareBufferPropertiesANDROID_placeholder = 0; -# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - PFN_vkGetBufferDeviceAddress vkGetBufferDeviceAddress = 0; - PFN_vkGetBufferDeviceAddressEXT vkGetBufferDeviceAddressEXT = 0; - PFN_vkGetBufferDeviceAddressKHR vkGetBufferDeviceAddressKHR = 0; - PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements = 0; - PFN_vkGetBufferMemoryRequirements2 vkGetBufferMemoryRequirements2 = 0; - PFN_vkGetBufferMemoryRequirements2KHR vkGetBufferMemoryRequirements2KHR = 0; - PFN_vkGetBufferOpaqueCaptureAddress vkGetBufferOpaqueCaptureAddress = 0; - PFN_vkGetBufferOpaqueCaptureAddressKHR vkGetBufferOpaqueCaptureAddressKHR = 0; - PFN_vkGetCalibratedTimestampsEXT vkGetCalibratedTimestampsEXT = 0; - PFN_vkGetDeferredOperationMaxConcurrencyKHR vkGetDeferredOperationMaxConcurrencyKHR = 0; - PFN_vkGetDeferredOperationResultKHR vkGetDeferredOperationResultKHR = 0; - PFN_vkGetDescriptorSetLayoutSupport vkGetDescriptorSetLayoutSupport = 0; - PFN_vkGetDescriptorSetLayoutSupportKHR vkGetDescriptorSetLayoutSupportKHR = 0; - PFN_vkGetDeviceAccelerationStructureCompatibilityKHR vkGetDeviceAccelerationStructureCompatibilityKHR = 0; - PFN_vkGetDeviceGroupPeerMemoryFeatures vkGetDeviceGroupPeerMemoryFeatures = 0; - PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR vkGetDeviceGroupPeerMemoryFeaturesKHR = 0; - PFN_vkGetDeviceGroupPresentCapabilitiesKHR vkGetDeviceGroupPresentCapabilitiesKHR = 0; -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - PFN_vkGetDeviceGroupSurfacePresentModes2EXT vkGetDeviceGroupSurfacePresentModes2EXT = 0; -# else - PFN_dummy vkGetDeviceGroupSurfacePresentModes2EXT_placeholder = 0; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - PFN_vkGetDeviceGroupSurfacePresentModesKHR vkGetDeviceGroupSurfacePresentModesKHR = 0; - PFN_vkGetDeviceMemoryCommitment vkGetDeviceMemoryCommitment = 0; - PFN_vkGetDeviceMemoryOpaqueCaptureAddress vkGetDeviceMemoryOpaqueCaptureAddress = 0; - PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR vkGetDeviceMemoryOpaqueCaptureAddressKHR = 0; - PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr = 0; - PFN_vkGetDeviceQueue vkGetDeviceQueue = 0; - PFN_vkGetDeviceQueue2 vkGetDeviceQueue2 = 0; - PFN_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI = 0; - PFN_vkGetEventStatus vkGetEventStatus = 0; - PFN_vkGetFenceFdKHR vkGetFenceFdKHR = 0; - PFN_vkGetFenceStatus vkGetFenceStatus = 0; -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - PFN_vkGetFenceWin32HandleKHR vkGetFenceWin32HandleKHR = 0; -# else - PFN_dummy vkGetFenceWin32HandleKHR_placeholder = 0; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + + //=== VK_NVX_binary_import === + PFN_vkCreateCuModuleNVX vkCreateCuModuleNVX = 0; + PFN_vkCreateCuFunctionNVX vkCreateCuFunctionNVX = 0; + PFN_vkDestroyCuModuleNVX vkDestroyCuModuleNVX = 0; + PFN_vkDestroyCuFunctionNVX vkDestroyCuFunctionNVX = 0; + PFN_vkCmdCuLaunchKernelNVX vkCmdCuLaunchKernelNVX = 0; + + //=== VK_NVX_image_view_handle === + PFN_vkGetImageViewHandleNVX vkGetImageViewHandleNVX = 0; + PFN_vkGetImageViewAddressNVX vkGetImageViewAddressNVX = 0; + + //=== VK_NV_clip_space_w_scaling === + PFN_vkCmdSetViewportWScalingNV vkCmdSetViewportWScalingNV = 0; + + //=== VK_NV_device_diagnostic_checkpoints === + PFN_vkCmdSetCheckpointNV vkCmdSetCheckpointNV = 0; + PFN_vkGetQueueCheckpointDataNV vkGetQueueCheckpointDataNV = 0; + + //=== VK_NV_device_generated_commands === PFN_vkGetGeneratedCommandsMemoryRequirementsNV vkGetGeneratedCommandsMemoryRequirementsNV = 0; - PFN_vkGetImageDrmFormatModifierPropertiesEXT vkGetImageDrmFormatModifierPropertiesEXT = 0; - PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements = 0; - PFN_vkGetImageMemoryRequirements2 vkGetImageMemoryRequirements2 = 0; - PFN_vkGetImageMemoryRequirements2KHR vkGetImageMemoryRequirements2KHR = 0; - PFN_vkGetImageSparseMemoryRequirements vkGetImageSparseMemoryRequirements = 0; - PFN_vkGetImageSparseMemoryRequirements2 vkGetImageSparseMemoryRequirements2 = 0; - PFN_vkGetImageSparseMemoryRequirements2KHR vkGetImageSparseMemoryRequirements2KHR = 0; - PFN_vkGetImageSubresourceLayout vkGetImageSubresourceLayout = 0; - PFN_vkGetImageViewAddressNVX vkGetImageViewAddressNVX = 0; - PFN_vkGetImageViewHandleNVX vkGetImageViewHandleNVX = 0; -# if defined( VK_USE_PLATFORM_ANDROID_KHR ) - PFN_vkGetMemoryAndroidHardwareBufferANDROID vkGetMemoryAndroidHardwareBufferANDROID = 0; -# else - PFN_dummy vkGetMemoryAndroidHardwareBufferANDROID_placeholder = 0; -# endif /*VK_USE_PLATFORM_ANDROID_KHR*/ - PFN_vkGetMemoryFdKHR vkGetMemoryFdKHR = 0; - PFN_vkGetMemoryFdPropertiesKHR vkGetMemoryFdPropertiesKHR = 0; - PFN_vkGetMemoryHostPointerPropertiesEXT vkGetMemoryHostPointerPropertiesEXT = 0; - PFN_vkGetMemoryRemoteAddressNV vkGetMemoryRemoteAddressNV = 0; -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - PFN_vkGetMemoryWin32HandleKHR vkGetMemoryWin32HandleKHR = 0; -# else - PFN_dummy vkGetMemoryWin32HandleKHR_placeholder = 0; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ + PFN_vkCmdPreprocessGeneratedCommandsNV vkCmdPreprocessGeneratedCommandsNV = 0; + PFN_vkCmdExecuteGeneratedCommandsNV vkCmdExecuteGeneratedCommandsNV = 0; + PFN_vkCmdBindPipelineShaderGroupNV vkCmdBindPipelineShaderGroupNV = 0; + PFN_vkCreateIndirectCommandsLayoutNV vkCreateIndirectCommandsLayoutNV = 0; + PFN_vkDestroyIndirectCommandsLayoutNV vkDestroyIndirectCommandsLayoutNV = 0; + + //=== VK_NV_external_memory_rdma === + PFN_vkGetMemoryRemoteAddressNV vkGetMemoryRemoteAddressNV = 0; + # if defined( VK_USE_PLATFORM_WIN32_KHR ) + //=== VK_NV_external_memory_win32 === PFN_vkGetMemoryWin32HandleNV vkGetMemoryWin32HandleNV = 0; # else PFN_dummy vkGetMemoryWin32HandleNV_placeholder = 0; # endif /*VK_USE_PLATFORM_WIN32_KHR*/ -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - PFN_vkGetMemoryWin32HandlePropertiesKHR vkGetMemoryWin32HandlePropertiesKHR = 0; -# else - PFN_dummy vkGetMemoryWin32HandlePropertiesKHR_placeholder = 0; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ -# if defined( VK_USE_PLATFORM_FUCHSIA ) - PFN_vkGetMemoryZirconHandleFUCHSIA vkGetMemoryZirconHandleFUCHSIA = 0; -# else - PFN_dummy vkGetMemoryZirconHandleFUCHSIA_placeholder = 0; -# endif /*VK_USE_PLATFORM_FUCHSIA*/ -# if defined( VK_USE_PLATFORM_FUCHSIA ) - PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA vkGetMemoryZirconHandlePropertiesFUCHSIA = 0; -# else - PFN_dummy vkGetMemoryZirconHandlePropertiesFUCHSIA_placeholder = 0; -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - PFN_vkGetPastPresentationTimingGOOGLE vkGetPastPresentationTimingGOOGLE = 0; - PFN_vkGetPerformanceParameterINTEL vkGetPerformanceParameterINTEL = 0; - PFN_vkGetPipelineCacheData vkGetPipelineCacheData = 0; - PFN_vkGetPipelineExecutableInternalRepresentationsKHR vkGetPipelineExecutableInternalRepresentationsKHR = 0; - PFN_vkGetPipelineExecutablePropertiesKHR vkGetPipelineExecutablePropertiesKHR = 0; - PFN_vkGetPipelineExecutableStatisticsKHR vkGetPipelineExecutableStatisticsKHR = 0; - PFN_vkGetPrivateDataEXT vkGetPrivateDataEXT = 0; - PFN_vkGetQueryPoolResults vkGetQueryPoolResults = 0; - PFN_vkGetQueueCheckpointData2NV vkGetQueueCheckpointData2NV = 0; - PFN_vkGetQueueCheckpointDataNV vkGetQueueCheckpointDataNV = 0; - PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR vkGetRayTracingCaptureReplayShaderGroupHandlesKHR = 0; - PFN_vkGetRayTracingShaderGroupHandlesKHR vkGetRayTracingShaderGroupHandlesKHR = 0; - PFN_vkGetRayTracingShaderGroupHandlesNV vkGetRayTracingShaderGroupHandlesNV = 0; - PFN_vkGetRayTracingShaderGroupStackSizeKHR vkGetRayTracingShaderGroupStackSizeKHR = 0; - PFN_vkGetRefreshCycleDurationGOOGLE vkGetRefreshCycleDurationGOOGLE = 0; - PFN_vkGetRenderAreaGranularity vkGetRenderAreaGranularity = 0; - PFN_vkGetSemaphoreCounterValue vkGetSemaphoreCounterValue = 0; - PFN_vkGetSemaphoreCounterValueKHR vkGetSemaphoreCounterValueKHR = 0; - PFN_vkGetSemaphoreFdKHR vkGetSemaphoreFdKHR = 0; -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - PFN_vkGetSemaphoreWin32HandleKHR vkGetSemaphoreWin32HandleKHR = 0; -# else - PFN_dummy vkGetSemaphoreWin32HandleKHR_placeholder = 0; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ -# if defined( VK_USE_PLATFORM_FUCHSIA ) - PFN_vkGetSemaphoreZirconHandleFUCHSIA vkGetSemaphoreZirconHandleFUCHSIA = 0; -# else - PFN_dummy vkGetSemaphoreZirconHandleFUCHSIA_placeholder = 0; -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - PFN_vkGetShaderInfoAMD vkGetShaderInfoAMD = 0; - PFN_vkGetSwapchainCounterEXT vkGetSwapchainCounterEXT = 0; - PFN_vkGetSwapchainImagesKHR vkGetSwapchainImagesKHR = 0; - PFN_vkGetSwapchainStatusKHR vkGetSwapchainStatusKHR = 0; - PFN_vkGetValidationCacheDataEXT vkGetValidationCacheDataEXT = 0; -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - PFN_vkGetVideoSessionMemoryRequirementsKHR vkGetVideoSessionMemoryRequirementsKHR = 0; -# else - PFN_dummy vkGetVideoSessionMemoryRequirementsKHR_placeholder = 0; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - PFN_vkImportFenceFdKHR vkImportFenceFdKHR = 0; -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - PFN_vkImportFenceWin32HandleKHR vkImportFenceWin32HandleKHR = 0; -# else - PFN_dummy vkImportFenceWin32HandleKHR_placeholder = 0; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - PFN_vkImportSemaphoreFdKHR vkImportSemaphoreFdKHR = 0; -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - PFN_vkImportSemaphoreWin32HandleKHR vkImportSemaphoreWin32HandleKHR = 0; -# else - PFN_dummy vkImportSemaphoreWin32HandleKHR_placeholder = 0; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ -# if defined( VK_USE_PLATFORM_FUCHSIA ) - PFN_vkImportSemaphoreZirconHandleFUCHSIA vkImportSemaphoreZirconHandleFUCHSIA = 0; -# else - PFN_dummy vkImportSemaphoreZirconHandleFUCHSIA_placeholder = 0; -# endif /*VK_USE_PLATFORM_FUCHSIA*/ - PFN_vkInitializePerformanceApiINTEL vkInitializePerformanceApiINTEL = 0; - PFN_vkInvalidateMappedMemoryRanges vkInvalidateMappedMemoryRanges = 0; - PFN_vkMapMemory vkMapMemory = 0; - PFN_vkMergePipelineCaches vkMergePipelineCaches = 0; - PFN_vkMergeValidationCachesEXT vkMergeValidationCachesEXT = 0; - PFN_vkQueueBeginDebugUtilsLabelEXT vkQueueBeginDebugUtilsLabelEXT = 0; - PFN_vkQueueBindSparse vkQueueBindSparse = 0; - PFN_vkQueueEndDebugUtilsLabelEXT vkQueueEndDebugUtilsLabelEXT = 0; - PFN_vkQueueInsertDebugUtilsLabelEXT vkQueueInsertDebugUtilsLabelEXT = 0; - PFN_vkQueuePresentKHR vkQueuePresentKHR = 0; - PFN_vkQueueSetPerformanceConfigurationINTEL vkQueueSetPerformanceConfigurationINTEL = 0; - PFN_vkQueueSubmit vkQueueSubmit = 0; - PFN_vkQueueSubmit2KHR vkQueueSubmit2KHR = 0; - PFN_vkQueueWaitIdle vkQueueWaitIdle = 0; - PFN_vkRegisterDeviceEventEXT vkRegisterDeviceEventEXT = 0; - PFN_vkRegisterDisplayEventEXT vkRegisterDisplayEventEXT = 0; -# if defined( VK_USE_PLATFORM_WIN32_KHR ) - PFN_vkReleaseFullScreenExclusiveModeEXT vkReleaseFullScreenExclusiveModeEXT = 0; -# else - PFN_dummy vkReleaseFullScreenExclusiveModeEXT_placeholder = 0; -# endif /*VK_USE_PLATFORM_WIN32_KHR*/ - PFN_vkReleasePerformanceConfigurationINTEL vkReleasePerformanceConfigurationINTEL = 0; - PFN_vkReleaseProfilingLockKHR vkReleaseProfilingLockKHR = 0; - PFN_vkResetCommandBuffer vkResetCommandBuffer = 0; - PFN_vkResetCommandPool vkResetCommandPool = 0; - PFN_vkResetDescriptorPool vkResetDescriptorPool = 0; - PFN_vkResetEvent vkResetEvent = 0; - PFN_vkResetFences vkResetFences = 0; - PFN_vkResetQueryPool vkResetQueryPool = 0; - PFN_vkResetQueryPoolEXT vkResetQueryPoolEXT = 0; - PFN_vkSetDebugUtilsObjectNameEXT vkSetDebugUtilsObjectNameEXT = 0; - PFN_vkSetDebugUtilsObjectTagEXT vkSetDebugUtilsObjectTagEXT = 0; - PFN_vkSetEvent vkSetEvent = 0; - PFN_vkSetHdrMetadataEXT vkSetHdrMetadataEXT = 0; - PFN_vkSetLocalDimmingAMD vkSetLocalDimmingAMD = 0; - PFN_vkSetPrivateDataEXT vkSetPrivateDataEXT = 0; - PFN_vkSignalSemaphore vkSignalSemaphore = 0; - PFN_vkSignalSemaphoreKHR vkSignalSemaphoreKHR = 0; - PFN_vkTrimCommandPool vkTrimCommandPool = 0; - PFN_vkTrimCommandPoolKHR vkTrimCommandPoolKHR = 0; - PFN_vkUninitializePerformanceApiINTEL vkUninitializePerformanceApiINTEL = 0; - PFN_vkUnmapMemory vkUnmapMemory = 0; - PFN_vkUpdateDescriptorSetWithTemplate vkUpdateDescriptorSetWithTemplate = 0; - PFN_vkUpdateDescriptorSetWithTemplateKHR vkUpdateDescriptorSetWithTemplateKHR = 0; - PFN_vkUpdateDescriptorSets vkUpdateDescriptorSets = 0; -# if defined( VK_ENABLE_BETA_EXTENSIONS ) - PFN_vkUpdateVideoSessionParametersKHR vkUpdateVideoSessionParametersKHR = 0; -# else - PFN_dummy vkUpdateVideoSessionParametersKHR_placeholder = 0; -# endif /*VK_ENABLE_BETA_EXTENSIONS*/ - PFN_vkWaitForFences vkWaitForFences = 0; - PFN_vkWaitForPresentKHR vkWaitForPresentKHR = 0; - PFN_vkWaitSemaphores vkWaitSemaphores = 0; - PFN_vkWaitSemaphoresKHR vkWaitSemaphoresKHR = 0; - PFN_vkWriteAccelerationStructuresPropertiesKHR vkWriteAccelerationStructuresPropertiesKHR = 0; + + //=== VK_NV_fragment_shading_rate_enums === + PFN_vkCmdSetFragmentShadingRateEnumNV vkCmdSetFragmentShadingRateEnumNV = 0; + + //=== VK_NV_mesh_shader === + PFN_vkCmdDrawMeshTasksNV vkCmdDrawMeshTasksNV = 0; + PFN_vkCmdDrawMeshTasksIndirectNV vkCmdDrawMeshTasksIndirectNV = 0; + PFN_vkCmdDrawMeshTasksIndirectCountNV vkCmdDrawMeshTasksIndirectCountNV = 0; + + //=== VK_NV_ray_tracing === + PFN_vkCreateAccelerationStructureNV vkCreateAccelerationStructureNV = 0; + PFN_vkDestroyAccelerationStructureNV vkDestroyAccelerationStructureNV = 0; + PFN_vkGetAccelerationStructureMemoryRequirementsNV vkGetAccelerationStructureMemoryRequirementsNV = 0; + PFN_vkBindAccelerationStructureMemoryNV vkBindAccelerationStructureMemoryNV = 0; + PFN_vkCmdBuildAccelerationStructureNV vkCmdBuildAccelerationStructureNV = 0; + PFN_vkCmdCopyAccelerationStructureNV vkCmdCopyAccelerationStructureNV = 0; + PFN_vkCmdTraceRaysNV vkCmdTraceRaysNV = 0; + PFN_vkCreateRayTracingPipelinesNV vkCreateRayTracingPipelinesNV = 0; + PFN_vkGetRayTracingShaderGroupHandlesNV vkGetRayTracingShaderGroupHandlesNV = 0; + PFN_vkGetAccelerationStructureHandleNV vkGetAccelerationStructureHandleNV = 0; + PFN_vkCmdWriteAccelerationStructuresPropertiesNV vkCmdWriteAccelerationStructuresPropertiesNV = 0; + PFN_vkCompileDeferredNV vkCompileDeferredNV = 0; + + //=== VK_NV_scissor_exclusive === + PFN_vkCmdSetExclusiveScissorNV vkCmdSetExclusiveScissorNV = 0; + + //=== VK_NV_shading_rate_image === + PFN_vkCmdBindShadingRateImageNV vkCmdBindShadingRateImageNV = 0; + PFN_vkCmdSetViewportShadingRatePaletteNV vkCmdSetViewportShadingRatePaletteNV = 0; + PFN_vkCmdSetCoarseSampleOrderNV vkCmdSetCoarseSampleOrderNV = 0; }; //====================