@@ -1415,14 +1415,19 @@ std::string VulkanHppGenerator::combineDataTypes( std::map<size_t, VectorParamDa
1415
1415
combinedType = enumerating ? modifiedDataTypes[1] : ( "std::pair<" + modifiedDataTypes[0] + ", " + modifiedDataTypes[1] + ">" );
1416
1416
break;
1417
1417
case 3:
1418
- assert( enumerating );
1419
1418
switch ( vectorParams.size() )
1420
1419
{
1420
+ case 0:
1421
+ assert( !enumerating );
1422
+ combinedType = "std::tuple<" + modifiedDataTypes[0] + ", " + modifiedDataTypes[1] + ", " + modifiedDataTypes[2] + ">";
1423
+ break;
1421
1424
case 1:
1425
+ assert( enumerating );
1422
1426
assert( ( vectorParams.begin()->first == returnParams[2] ) && ( vectorParams.begin()->second.lenParam == returnParams[1] ) );
1423
1427
combinedType = "std::pair<" + modifiedDataTypes[0] + ", " + modifiedDataTypes[2] + ">";
1424
1428
break;
1425
1429
case 2:
1430
+ assert( enumerating );
1426
1431
assert( ( vectorParams.begin()->first == returnParams[1] ) && ( vectorParams.begin()->second.lenParam == returnParams[0] ) &&
1427
1432
( std::next( vectorParams.begin() )->first == returnParams[2] ) &&
1428
1433
( std::next( vectorParams.begin() )->second.lenParam == returnParams[0] ) );
@@ -3425,7 +3430,7 @@ std::string VulkanHppGenerator::generateCommandEnhanced( std::string const &
3425
3430
std::string typenameCheck = generateTypenameCheck( returnParams, vectorParams, chainedReturnParams, definition, dataTypes, flavourFlags );
3426
3431
std::string nodiscard = generateNoDiscard( !returnParams.empty(), 1 < commandData.successCodes.size(), 1 < commandData.errorCodes.size() );
3427
3432
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 );
3429
3434
std::string className = initialSkipCount ? stripPrefix( commandData.params[initialSkipCount - 1].type.type, "Vk" ) : "";
3430
3435
std::string classSeparator = commandData.handle.empty() ? "" : "::";
3431
3436
std::string commandName = generateCommandName( name, commandData.params, initialSkipCount, flavourFlags );
@@ -3879,6 +3884,28 @@ std::string VulkanHppGenerator::generateCommandResultMultiSuccessWithErrors3Retu
3879
3884
std::map<size_t, VectorParamData> vectorParams = determineVectorParams( commandData.params );
3880
3885
switch ( vectorParams.size() )
3881
3886
{
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;
3882
3909
case 1:
3883
3910
if ( ( commandData.params[returnParams[0]].type.type != "void" ) && !isHandleType( commandData.params[returnParams[0]].type.type ) )
3884
3911
{
@@ -3941,7 +3968,6 @@ std::string VulkanHppGenerator::generateCommandResultMultiSuccessWithErrors3Retu
3941
3968
}
3942
3969
}
3943
3970
break;
3944
- default: assert( false ); break;
3945
3971
}
3946
3972
return "";
3947
3973
}
@@ -6155,6 +6181,22 @@ std::string VulkanHppGenerator::generateDataDeclarations3Returns( CommandData co
6155
6181
{
6156
6182
switch ( vectorParams.size() )
6157
6183
{
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;
6158
6200
case 1:
6159
6201
{
6160
6202
assert( ( returnParams[1] == vectorParams.begin()->second.lenParam ) && ( returnParams[2] == vectorParams.begin()->first ) );
@@ -6435,6 +6477,7 @@ std::string VulkanHppGenerator::generateDebugReportObjectType( std::string const
6435
6477
std::string VulkanHppGenerator::generateDecoratedReturnType( CommandData const & commandData,
6436
6478
std::vector<size_t> const & returnParams,
6437
6479
std::map<size_t, VectorParamData> const & vectorParams,
6480
+ bool enumerating,
6438
6481
CommandFlavourFlags flavourFlags,
6439
6482
bool raii,
6440
6483
std::string const & returnType ) const
@@ -6478,14 +6521,16 @@ std::string VulkanHppGenerator::generateDecoratedReturnType( CommandData const &
6478
6521
{
6479
6522
assert( commandData.returnType == "VkResult" );
6480
6523
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 ) )
6482
6526
{
6483
6527
decoratedReturnType = raii ? returnType : ( "typename ResultValueType<" + returnType + ">::type" );
6484
6528
}
6485
6529
else if ( !commandData.errorCodes.empty() && ( 1 < commandData.successCodes.size() ) &&
6486
6530
( ( returnParams.size() == 1 ) ||
6487
6531
( ( 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() ) ) )
6489
6534
{
6490
6535
decoratedReturnType = ( raii ? "std::pair<VULKAN_HPP_NAMESPACE::Result, " : "ResultValue<" ) + returnType + ">";
6491
6536
}
@@ -9295,7 +9340,7 @@ std::string VulkanHppGenerator::generateRAIIHandleCommandEnhanced( std::string c
9295
9340
needsVectorSizeCheck( commandData.params, vectorParams, returnParams, singularParams, skippedParams );
9296
9341
std::string noexceptString = generateNoExcept( commandData.errorCodes, returnParams, vectorParams, flavourFlags, vectorSizeCheck.first, true );
9297
9342
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 );
9299
9344
9300
9345
if ( definition )
9301
9346
{
@@ -10927,7 +10972,11 @@ std::string VulkanHppGenerator::generateReturnType( std::vector<size_t> const &
10927
10972
}
10928
10973
else
10929
10974
{
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] ) )
10931
10980
{
10932
10981
#if !defined( NDEBUG )
10933
10982
auto vectorIt = vectorParams.find( returnParams[1] );
@@ -11013,7 +11062,8 @@ std::string VulkanHppGenerator::generateReturnVariable( CommandData const &
11013
11062
break;
11014
11063
case 3:
11015
11064
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] ) &&
11017
11067
( vectorParams.begin()->second.lenParam == returnParams[1] ) ) ||
11018
11068
( ( vectorParams.size() == 2 ) && ( vectorParams.begin()->first == returnParams[1] ) &&
11019
11069
( vectorParams.begin()->second.lenParam == returnParams[0] ) && ( std::next( vectorParams.begin() )->first == returnParams[2] ) &&
0 commit comments