From b3863a385be1bf6abfe79c600b7d2579f2d8be6d Mon Sep 17 00:00:00 2001 From: asuessenbach Date: Thu, 12 May 2022 09:02:27 +0200 Subject: [PATCH] Combine two types of commands into one generation function --- VulkanHppGenerator.cpp | 71 +++++++++++------------------------------- VulkanHppGenerator.hpp | 5 --- 2 files changed, 19 insertions(+), 57 deletions(-) diff --git a/VulkanHppGenerator.cpp b/VulkanHppGenerator.cpp index 07f55fe..fa54cc4 100644 --- a/VulkanHppGenerator.cpp +++ b/VulkanHppGenerator.cpp @@ -6127,13 +6127,20 @@ std::string VulkanHppGenerator::generateRAIIHandleCommandFactory( std::mapsecond.params[returnParams.back()].type.type ) ); - assert( returnParams.size() == 1 ); + assert( ( returnParams.size() == 1 ) || ( ( returnParams.size() == 2 ) && ( vectorParams.size() == 1 ) && + ( returnParams[0] == vectorParams.begin()->second ) && ( returnParams[1] == vectorParams.begin()->first ) ) ); std::set skippedParams = determineSkippedParams( commandIt->second.params, initialSkipCount, vectorParams, returnParams, singular ); - std::set singularParams = singular ? determineSingularParams( returnParams[0], vectorParams ) : std::set(); + std::set singularParams = singular ? determineSingularParams( returnParams.back(), vectorParams ) : std::set(); std::string argumentList = generateRAIIHandleCommandFactoryArgumentList( commandIt->second.params, skippedParams, definition, singular ); std::string commandName = generateCommandName( commandIt->first, commandIt->second.params, initialSkipCount, m_tags, singular, false ); - std::string handleType = stripPostfix( commandIt->second.params[returnParams[0]].type.compose( "VULKAN_HPP_RAII_NAMESPACE" ), " *" ); + std::string handleType = stripPostfix( commandIt->second.params[returnParams.back()].type.compose( "VULKAN_HPP_RAII_NAMESPACE" ), " *" ); + std::string returnType = handleType; + if ( ( vectorParams.find( returnParams.back() ) != vectorParams.end() ) && !singular ) + { + returnType = "std::vector<" + handleType + ">"; + handleType += "s"; + } if ( definition ) { @@ -6142,7 +6149,7 @@ std::string VulkanHppGenerator::generateRAIIHandleCommandFactory( std::map::const_iterator commandIt, - size_t initialSkipCount, - std::vector const & returnParams, - std::map const & vectorParams, - bool definition ) const -{ - assert( isHandleType( commandIt->second.params[returnParams.back()].type.type ) ); - - std::set skippedParams = determineSkippedParams( commandIt->second.params, initialSkipCount, vectorParams, returnParams, false ); - std::string argumentList = generateRAIIHandleCommandFactoryArgumentList( commandIt->second.params, skippedParams, definition, false ); - std::string commandName = generateCommandName( commandIt->first, commandIt->second.params, initialSkipCount, m_tags, false, false ); - std::string handleType = stripPostfix( commandIt->second.params[returnParams.back()].type.compose( "VULKAN_HPP_RAII_NAMESPACE" ), " *" ); - - if ( definition ) - { - std::string const definitionTemplate = - R"( - VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<${handleType}> ${className}::${commandName}( ${argumentList} ) const - { - return ${handleType}s( ${callArguments} ); - } -)"; - - return replaceWithMap( definitionTemplate, - { { "argumentList", argumentList }, - { "callArguments", generateCallArgumentsRAIIFactory( commandIt->second.params, initialSkipCount, skippedParams, {} ) }, - { "className", initialSkipCount ? stripPrefix( commandIt->second.params[initialSkipCount - 1].type.type, "Vk" ) : "Context" }, - { "commandName", commandName }, - { "handleType", handleType } } ); - } - else - { - std::string const declarationTemplate = - R"( - VULKAN_HPP_NODISCARD std::vector<${handleType}> ${commandName}( ${argumentList} ) const; -)"; - - return replaceWithMap( declarationTemplate, { { "argumentList", argumentList }, { "commandName", commandName }, { "handleType", handleType } } ); - } -} - std::string VulkanHppGenerator::generateRAIIHandleCommandResult( std::map::const_iterator commandIt, size_t initialSkipCount, bool definition ) const @@ -6558,7 +6525,7 @@ std::string VulkanHppGenerator::generateRAIIHandleCommandResultMultiSuccessWithE { if ( isStructureChainAnchor( commandIt->second.params[vectorParams.begin()->first].type.type ) ) { - str = generateRAIIHandleCommandFactoryVector( commandIt, initialSkipCount, { returnParam }, vectorParams, definition ); + str = generateRAIIHandleCommandFactory( commandIt, initialSkipCount, { returnParam }, vectorParams, definition, false ); str += generateRAIIHandleCommandFactory( commandIt, initialSkipCount, { returnParam }, vectorParams, definition, true ); } } @@ -6794,7 +6761,7 @@ std::string VulkanHppGenerator::generateRAIIHandleCommandResultMultiSuccessWithE // needs some very special handling of "vkGetSwapchainImagesKHR" !! if ( isHandleType( commandIt->second.params[returnParams[1]].type.type ) && ( commandIt->first != "vkGetSwapchainImagesKHR" ) ) { - return generateRAIIHandleCommandFactoryVector( commandIt, initialSkipCount, returnParams, vectorParams, definition ); + return generateRAIIHandleCommandFactory( commandIt, initialSkipCount, returnParams, vectorParams, definition, false ); } else { @@ -7441,7 +7408,7 @@ std::string VulkanHppGenerator::generateRAIIHandleCommandResultSingleSuccessWith { if ( m_structures.find( commandIt->second.params[vectorParams.begin()->second].type.type ) != m_structures.end() ) { - str = generateRAIIHandleCommandFactoryVector( commandIt, initialSkipCount, { returnParam }, vectorParams, definition ); + str = generateRAIIHandleCommandFactory( commandIt, initialSkipCount, { returnParam }, vectorParams, definition, false ); } } break; @@ -7454,7 +7421,7 @@ std::string VulkanHppGenerator::generateRAIIHandleCommandResultSingleSuccessWith { if ( isStructureChainAnchor( commandIt->second.params[vectorParams.begin()->first].type.type ) ) { - str = generateRAIIHandleCommandFactoryVector( commandIt, initialSkipCount, { returnParam }, vectorParams, definition ); + str = generateRAIIHandleCommandFactory( commandIt, initialSkipCount, { returnParam }, vectorParams, definition, false ); str += generateRAIIHandleCommandFactory( commandIt, initialSkipCount, { returnParam }, vectorParams, definition, true ); } } diff --git a/VulkanHppGenerator.hpp b/VulkanHppGenerator.hpp index 9f4b655..55f3efa 100644 --- a/VulkanHppGenerator.hpp +++ b/VulkanHppGenerator.hpp @@ -689,11 +689,6 @@ private: std::set const & skippedParams, bool definition, bool singular ) const; - std::string generateRAIIHandleCommandFactoryVector( std::map::const_iterator commandIt, - size_t initialSkipCount, - std::vector const & returnParamIndices, - std::map const & vectorParamIndices, - bool definition ) const; std::string generateRAIIHandleCommandResult( std::map::const_iterator commandIt, size_t initialSkipCount, bool definition ) const; std::string generateRAIIHandleCommandResultMultiSuccessNoErrors( std::map::const_iterator commandIt, size_t initialSkipCount,