Skip to content

Commit f03a052

Browse files
authored
Add support for another command flavour, returning result and three values. (#2089)
1 parent 16da8bd commit f03a052

File tree

2 files changed

+59
-8
lines changed

2 files changed

+59
-8
lines changed

Diff for: VulkanHppGenerator.cpp

+58-8
Original file line numberDiff line numberDiff line change
@@ -1415,14 +1415,19 @@ std::string VulkanHppGenerator::combineDataTypes( std::map<size_t, VectorParamDa
14151415
combinedType = enumerating ? modifiedDataTypes[1] : ( "std::pair<" + modifiedDataTypes[0] + ", " + modifiedDataTypes[1] + ">" );
14161416
break;
14171417
case 3:
1418-
assert( enumerating );
14191418
switch ( vectorParams.size() )
14201419
{
1420+
case 0:
1421+
assert( !enumerating );
1422+
combinedType = "std::tuple<" + modifiedDataTypes[0] + ", " + modifiedDataTypes[1] + ", " + modifiedDataTypes[2] + ">";
1423+
break;
14211424
case 1:
1425+
assert( enumerating );
14221426
assert( ( vectorParams.begin()->first == returnParams[2] ) && ( vectorParams.begin()->second.lenParam == returnParams[1] ) );
14231427
combinedType = "std::pair<" + modifiedDataTypes[0] + ", " + modifiedDataTypes[2] + ">";
14241428
break;
14251429
case 2:
1430+
assert( enumerating );
14261431
assert( ( vectorParams.begin()->first == returnParams[1] ) && ( vectorParams.begin()->second.lenParam == returnParams[0] ) &&
14271432
( std::next( vectorParams.begin() )->first == returnParams[2] ) &&
14281433
( std::next( vectorParams.begin() )->second.lenParam == returnParams[0] ) );
@@ -3425,7 +3430,7 @@ std::string VulkanHppGenerator::generateCommandEnhanced( std::string const &
34253430
std::string typenameCheck = generateTypenameCheck( returnParams, vectorParams, chainedReturnParams, definition, dataTypes, flavourFlags );
34263431
std::string nodiscard = generateNoDiscard( !returnParams.empty(), 1 < commandData.successCodes.size(), 1 < commandData.errorCodes.size() );
34273432
std::string returnType = generateReturnType( returnParams, vectorParams, flavourFlags, false, dataTypes );
3428-
std::string decoratedReturnType = generateDecoratedReturnType( commandData, returnParams, vectorParams, flavourFlags, false, returnType );
3433+
std::string decoratedReturnType = generateDecoratedReturnType( commandData, returnParams, vectorParams, enumerating, flavourFlags, false, returnType );
34293434
std::string className = initialSkipCount ? stripPrefix( commandData.params[initialSkipCount - 1].type.type, "Vk" ) : "";
34303435
std::string classSeparator = commandData.handle.empty() ? "" : "::";
34313436
std::string commandName = generateCommandName( name, commandData.params, initialSkipCount, flavourFlags );
@@ -3879,6 +3884,28 @@ std::string VulkanHppGenerator::generateCommandResultMultiSuccessWithErrors3Retu
38793884
std::map<size_t, VectorParamData> vectorParams = determineVectorParams( commandData.params );
38803885
switch ( vectorParams.size() )
38813886
{
3887+
case 0:
3888+
if ( isStructureType( commandData.params[returnParams[0]].type.type ) && !isStructureChainAnchor( commandData.params[returnParams[0]].type.type ) )
3889+
{
3890+
if ( isStructureType( commandData.params[returnParams[1]].type.type ) && !isStructureChainAnchor( commandData.params[returnParams[1]].type.type ) )
3891+
{
3892+
if ( commandData.params[returnParams[2]].type.type == "uint64_t" )
3893+
{
3894+
return generateCommandSetInclusive( name,
3895+
commandData,
3896+
initialSkipCount,
3897+
definition,
3898+
returnParams,
3899+
vectorParams,
3900+
false,
3901+
{ CommandFlavourFlagBits::enhanced },
3902+
raii,
3903+
false,
3904+
{ CommandFlavourFlagBits::enhanced } );
3905+
}
3906+
}
3907+
}
3908+
break;
38823909
case 1:
38833910
if ( ( commandData.params[returnParams[0]].type.type != "void" ) && !isHandleType( commandData.params[returnParams[0]].type.type ) )
38843911
{
@@ -3941,7 +3968,6 @@ std::string VulkanHppGenerator::generateCommandResultMultiSuccessWithErrors3Retu
39413968
}
39423969
}
39433970
break;
3944-
default: assert( false ); break;
39453971
}
39463972
return "";
39473973
}
@@ -6155,6 +6181,22 @@ std::string VulkanHppGenerator::generateDataDeclarations3Returns( CommandData co
61556181
{
61566182
switch ( vectorParams.size() )
61576183
{
6184+
case 0:
6185+
{
6186+
std::string const dataDeclarationsTemplate = R"( std::tuple<${firstType}, ${secondType}, ${thirdType}> data_;
6187+
${firstType} &${firstVariable} = std::get<0>(data_);
6188+
${secondType} &${secondVariable} = std::get<1>(data_);
6189+
${thirdType} &${thirdVariable} = std::get<2>(data_);)";
6190+
6191+
return replaceWithMap( dataDeclarationsTemplate,
6192+
{ { "firstType", dataTypes[0] },
6193+
{ "firstVariable", startLowerCase( stripPrefix( commandData.params[returnParams[0]].name, "p" ) ) },
6194+
{ "secondType", dataTypes[1] },
6195+
{ "secondVariable", startLowerCase( stripPrefix( commandData.params[returnParams[1]].name, "p" ) ) },
6196+
{ "thirdType", dataTypes[2] },
6197+
{ "thirdVariable", startLowerCase( stripPrefix( commandData.params[returnParams[2]].name, "p" ) ) } } );
6198+
}
6199+
break;
61586200
case 1:
61596201
{
61606202
assert( ( returnParams[1] == vectorParams.begin()->second.lenParam ) && ( returnParams[2] == vectorParams.begin()->first ) );
@@ -6435,6 +6477,7 @@ std::string VulkanHppGenerator::generateDebugReportObjectType( std::string const
64356477
std::string VulkanHppGenerator::generateDecoratedReturnType( CommandData const & commandData,
64366478
std::vector<size_t> const & returnParams,
64376479
std::map<size_t, VectorParamData> const & vectorParams,
6480+
bool enumerating,
64386481
CommandFlavourFlags flavourFlags,
64396482
bool raii,
64406483
std::string const & returnType ) const
@@ -6478,14 +6521,16 @@ std::string VulkanHppGenerator::generateDecoratedReturnType( CommandData const &
64786521
{
64796522
assert( commandData.returnType == "VkResult" );
64806523
assert( !commandData.successCodes.empty() && ( commandData.successCodes[0] == "VK_SUCCESS" ) );
6481-
if ( ( commandData.successCodes.size() == 1 ) || ( ( commandData.successCodes.size() == 2 ) && ( commandData.successCodes[1] == "VK_INCOMPLETE" ) ) )
6524+
if ( ( commandData.successCodes.size() == 1 ) ||
6525+
( ( commandData.successCodes.size() == 2 ) && ( commandData.successCodes[1] == "VK_INCOMPLETE" ) && enumerating ) )
64826526
{
64836527
decoratedReturnType = raii ? returnType : ( "typename ResultValueType<" + returnType + ">::type" );
64846528
}
64856529
else if ( !commandData.errorCodes.empty() && ( 1 < commandData.successCodes.size() ) &&
64866530
( ( returnParams.size() == 1 ) ||
64876531
( ( returnParams.size() == 2 ) && ( vectorParams.empty() || ( ( vectorParams.size() == 1 ) && ( commandData.successCodes.size() == 3 ) &&
6488-
( commandData.successCodes[1] == "VK_INCOMPLETE" ) ) ) ) ) )
6532+
( commandData.successCodes[1] == "VK_INCOMPLETE" ) ) ) ) ||
6533+
( ( returnParams.size() == 3 ) && vectorParams.empty() ) ) )
64896534
{
64906535
decoratedReturnType = ( raii ? "std::pair<VULKAN_HPP_NAMESPACE::Result, " : "ResultValue<" ) + returnType + ">";
64916536
}
@@ -9295,7 +9340,7 @@ std::string VulkanHppGenerator::generateRAIIHandleCommandEnhanced( std::string c
92959340
needsVectorSizeCheck( commandData.params, vectorParams, returnParams, singularParams, skippedParams );
92969341
std::string noexceptString = generateNoExcept( commandData.errorCodes, returnParams, vectorParams, flavourFlags, vectorSizeCheck.first, true );
92979342
std::string returnType = generateReturnType( returnParams, vectorParams, flavourFlags, true, dataTypes );
9298-
std::string decoratedReturnType = generateDecoratedReturnType( commandData, returnParams, vectorParams, flavourFlags, true, returnType );
9343+
std::string decoratedReturnType = generateDecoratedReturnType( commandData, returnParams, vectorParams, enumerating, flavourFlags, true, returnType );
92999344

93009345
if ( definition )
93019346
{
@@ -10927,7 +10972,11 @@ std::string VulkanHppGenerator::generateReturnType( std::vector<size_t> const &
1092710972
}
1092810973
else
1092910974
{
10930-
if ( vectorParams.contains( returnParams[1] ) )
10975+
if ( vectorParams.empty() )
10976+
{
10977+
returnType = "std::tuple<" + dataTypes[0] + ", " + dataTypes[1] + ", " + dataTypes[2] + ">";
10978+
}
10979+
else if ( vectorParams.contains( returnParams[1] ) )
1093110980
{
1093210981
#if !defined( NDEBUG )
1093310982
auto vectorIt = vectorParams.find( returnParams[1] );
@@ -11013,7 +11062,8 @@ std::string VulkanHppGenerator::generateReturnVariable( CommandData const &
1101311062
break;
1101411063
case 3:
1101511064
assert( !singular );
11016-
assert( ( ( vectorParams.size() == 1 ) && ( vectorParams.begin()->first == returnParams[2] ) &&
11065+
assert( vectorParams.empty() ||
11066+
( ( vectorParams.size() == 1 ) && ( vectorParams.begin()->first == returnParams[2] ) &&
1101711067
( vectorParams.begin()->second.lenParam == returnParams[1] ) ) ||
1101811068
( ( vectorParams.size() == 2 ) && ( vectorParams.begin()->first == returnParams[1] ) &&
1101911069
( vectorParams.begin()->second.lenParam == returnParams[0] ) && ( std::next( vectorParams.begin() )->first == returnParams[2] ) &&

Diff for: VulkanHppGenerator.hpp

+1
Original file line numberDiff line numberDiff line change
@@ -817,6 +817,7 @@ class VulkanHppGenerator
817817
std::string generateDecoratedReturnType( CommandData const & commandData,
818818
std::vector<size_t> const & returnParams,
819819
std::map<size_t, VectorParamData> const & vectorParams,
820+
bool enumerating,
820821
CommandFlavourFlags flavourFlags,
821822
bool raii,
822823
std::string const & returnType ) const;

0 commit comments

Comments
 (0)