Skip to content

Commit 80f619c

Browse files
committed
Add support for VK_KHR_maintenance5
Change-Id: I3a5b3ea8dd7e8dc1a8ce75daef1051b1b4a13c7a
1 parent 1195487 commit 80f619c

30 files changed

+808
-124
lines changed

qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -1911,7 +1911,7 @@ void VulkanPipelineStateViewer::setState()
19111911
BufferDescription *buf = m_Ctx.GetBuffer(state.inputAssembly.indexBuffer.resourceId);
19121912

19131913
if(buf)
1914-
length = buf->length;
1914+
length = qMin(state.inputAssembly.indexBuffer.byteSize, buf->length);
19151915

19161916
RDTreeWidgetItem *node = new RDTreeWidgetItem(
19171917
{tr("Index"), state.inputAssembly.indexBuffer.resourceId, tr("Index"), lit("-"),
@@ -3494,7 +3494,7 @@ void VulkanPipelineStateViewer::exportHTML(QXmlStreamWriter &xml, const VKPipe::
34943494
if(ib)
34953495
{
34963496
name = m_Ctx.GetResourceName(ia.indexBuffer.resourceId);
3497-
length = ib->length;
3497+
length = qMin(ib->length, ia.indexBuffer.byteSize);
34983498
}
34993499

35003500
QString ifmt = lit("UNKNOWN");

renderdoc/api/replay/pipestate.inl

+1-1
Original file line numberDiff line numberDiff line change
@@ -515,7 +515,7 @@ BoundVBuffer PipeState::GetIBuffer() const
515515
ret.resourceId = m_Vulkan->inputAssembly.indexBuffer.resourceId;
516516
ret.byteOffset = m_Vulkan->inputAssembly.indexBuffer.byteOffset;
517517
ret.byteStride = m_Vulkan->inputAssembly.indexBuffer.byteStride;
518-
ret.byteSize = ~0ULL;
518+
ret.byteSize = m_Vulkan->inputAssembly.indexBuffer.byteSize;
519519
}
520520
}
521521

renderdoc/api/replay/vk_pipestate.h

+4-1
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ When not using pipeline libraries, this will be identical to :data:`pipelinePreR
126126
)");
127127
ResourceId pipelineFragmentLayoutResourceId;
128128
DOCUMENT("The flags used to create the pipeline object.");
129-
uint32_t flags = 0;
129+
uint64_t flags = 0;
130130

131131
DOCUMENT(R"(The bound descriptor sets.
132132
@@ -149,6 +149,9 @@ struct IndexBuffer
149149
DOCUMENT("The byte offset from the start of the buffer to the beginning of the index data.");
150150
uint64_t byteOffset = 0;
151151

152+
DOCUMENT("The byte size from the start offset to the end of the index data.");
153+
uint64_t byteSize = 0;
154+
152155
DOCUMENT(R"(The number of bytes for each index in the index buffer. Typically 2 or 4 bytes but
153156
it can be 0 if no index buffer is bound.
154157
)");

renderdoc/driver/vulkan/extension_support.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,7 @@ Maintainers can update this file by updating vk.xml in this folder and running `
179179
* `VK_KHR_maintenance2`
180180
* `VK_KHR_maintenance3`
181181
* `VK_KHR_maintenance4`
182+
* `VK_KHR_maintenance5`
182183
* `VK_KHR_multiview`
183184
* `VK_KHR_performance_query`
184185
* `VK_KHR_pipeline_executable_properties`
@@ -255,7 +256,6 @@ KHR extensions will definitely be implemented at some point, though KHR extensio
255256
## KHR Extensions
256257

257258
* `VK_KHR_cooperative_matrix`
258-
* `VK_KHR_maintenance5`
259259
* `VK_KHR_maintenance6`
260260
* `VK_KHR_maintenance7`
261261
* `VK_KHR_maintenance8`

renderdoc/driver/vulkan/vk_common.h

+34-2
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@
7373
#define VkAccessFlagBits2 VkAccessFlagBits2_VkFlags64_typedef
7474
#define VkPipelineStageFlagBits2 VkPipelineStageFlagBits2_VkFlags64_typedef
7575
#define VkFormatFeatureFlagBits2 VkFormatFeatureFlagBits2_VkFlags64_typedef
76+
#define VkBufferUsageFlagBits2 VkBufferUsageFlagBits2_VkFlags64_typedef
77+
#define VkPipelineCreateFlagBits2 VkPipelineCreateFlagBits2_VkFlags64_typedef
7678

7779
#include "core/core.h"
7880
#include "core/resource_manager.h"
@@ -84,6 +86,8 @@
8486
#undef VkAccessFlagBits2
8587
#undef VkPipelineStageFlagBits2
8688
#undef VkFormatFeatureFlagBits2
89+
#undef VkBufferUsageFlagBits2
90+
#undef VkPipelineCreateFlagBits2
8791

8892
#undef Bool
8993
#undef None
@@ -1150,6 +1154,7 @@ enum class VulkanChunk : uint32_t
11501154
vkCmdSetRenderingInputAttachmentIndicesKHR,
11511155
vkCmdTraceRaysIndirect2KHR,
11521156
vkCmdWriteAccelerationStructuresPropertiesKHR,
1157+
vkCmdBindIndexBuffer2KHR,
11531158
Max,
11541159
};
11551160

@@ -1233,6 +1238,7 @@ DECLARE_REFLECTION_STRUCT(VkBufferMemoryBarrier);
12331238
DECLARE_REFLECTION_STRUCT(VkBufferMemoryBarrier2);
12341239
DECLARE_REFLECTION_STRUCT(VkBufferMemoryRequirementsInfo2);
12351240
DECLARE_REFLECTION_STRUCT(VkBufferOpaqueCaptureAddressCreateInfo);
1241+
DECLARE_REFLECTION_STRUCT(VkBufferUsageFlags2CreateInfo);
12361242
DECLARE_REFLECTION_STRUCT(VkBufferViewCreateInfo);
12371243
DECLARE_REFLECTION_STRUCT(VkCalibratedTimestampInfoKHR);
12381244
DECLARE_REFLECTION_STRUCT(VkCommandBufferAllocateInfo);
@@ -1286,6 +1292,7 @@ DECLARE_REFLECTION_STRUCT(VkDeviceGroupRenderPassBeginInfo);
12861292
DECLARE_REFLECTION_STRUCT(VkDeviceGroupSubmitInfo);
12871293
DECLARE_REFLECTION_STRUCT(VkDeviceGroupSwapchainCreateInfoKHR);
12881294
DECLARE_REFLECTION_STRUCT(VkDeviceImageMemoryRequirements);
1295+
DECLARE_REFLECTION_STRUCT(VkDeviceImageSubresourceInfo);
12891296
DECLARE_REFLECTION_STRUCT(VkDeviceMemoryOpaqueCaptureAddressInfo);
12901297
DECLARE_REFLECTION_STRUCT(VkDeviceMemoryOverallocationCreateInfoAMD);
12911298
DECLARE_REFLECTION_STRUCT(VkDevicePrivateDataCreateInfo);
@@ -1337,6 +1344,7 @@ DECLARE_REFLECTION_STRUCT(VkImagePlaneMemoryRequirementsInfo);
13371344
DECLARE_REFLECTION_STRUCT(VkImageResolve2);
13381345
DECLARE_REFLECTION_STRUCT(VkImageSparseMemoryRequirementsInfo2);
13391346
DECLARE_REFLECTION_STRUCT(VkImageStencilUsageCreateInfo);
1347+
DECLARE_REFLECTION_STRUCT(VkImageSubresource2);
13401348
DECLARE_REFLECTION_STRUCT(VkImageSwapchainCreateInfoKHR);
13411349
DECLARE_REFLECTION_STRUCT(VkImageViewASTCDecodeModeEXT);
13421350
DECLARE_REFLECTION_STRUCT(VkImageViewCreateInfo);
@@ -1438,6 +1446,8 @@ DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceLineRasterizationProperties);
14381446
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceMaintenance3Properties);
14391447
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceMaintenance4Features);
14401448
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceMaintenance4Properties);
1449+
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceMaintenance5Features);
1450+
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceMaintenance5Properties);
14411451
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceMemoryBudgetPropertiesEXT);
14421452
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceMemoryPriorityFeaturesEXT);
14431453
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceMemoryProperties2);
@@ -1540,6 +1550,7 @@ DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures)
15401550
DECLARE_REFLECTION_STRUCT(VkPipelineCacheCreateInfo);
15411551
DECLARE_REFLECTION_STRUCT(VkPipelineColorBlendStateCreateInfo);
15421552
DECLARE_REFLECTION_STRUCT(VkPipelineColorWriteCreateInfoEXT);
1553+
DECLARE_REFLECTION_STRUCT(VkPipelineCreateFlags2CreateInfo);
15431554
DECLARE_REFLECTION_STRUCT(VkPipelineCreationFeedbackCreateInfo);
15441555
DECLARE_REFLECTION_STRUCT(VkPipelineDepthStencilStateCreateInfo);
15451556
DECLARE_REFLECTION_STRUCT(VkPipelineDiscardRectangleStateCreateInfoEXT);
@@ -1586,6 +1597,7 @@ DECLARE_REFLECTION_STRUCT(VkRayTracingPipelineInterfaceCreateInfoKHR);
15861597
DECLARE_REFLECTION_STRUCT(VkRayTracingShaderGroupCreateInfoKHR);
15871598
DECLARE_REFLECTION_STRUCT(VkRefreshCycleDurationGOOGLE);
15881599
DECLARE_REFLECTION_STRUCT(VkReleaseSwapchainImagesInfoEXT);
1600+
DECLARE_REFLECTION_STRUCT(VkRenderingAreaInfo);
15891601
DECLARE_REFLECTION_STRUCT(VkRenderingAttachmentInfo);
15901602
DECLARE_REFLECTION_STRUCT(VkRenderingAttachmentLocationInfo);
15911603
DECLARE_REFLECTION_STRUCT(VkRenderingFragmentDensityMapAttachmentInfoEXT);
@@ -1631,6 +1643,7 @@ DECLARE_REFLECTION_STRUCT(VkSubpassEndInfo);
16311643
DECLARE_REFLECTION_STRUCT(VkSubpassFragmentDensityMapOffsetEndInfoQCOM);
16321644
DECLARE_REFLECTION_STRUCT(VkSubpassResolvePerformanceQueryEXT);
16331645
DECLARE_REFLECTION_STRUCT(VkSubpassSampleLocationsEXT);
1646+
DECLARE_REFLECTION_STRUCT(VkSubresourceLayout2);
16341647
DECLARE_REFLECTION_STRUCT(VkSurfaceCapabilities2EXT);
16351648
DECLARE_REFLECTION_STRUCT(VkSurfaceCapabilities2KHR);
16361649
DECLARE_REFLECTION_STRUCT(VkSurfaceFormat2KHR);
@@ -1688,6 +1701,7 @@ DECLARE_DESERIALISE_TYPE(VkBufferMemoryBarrier);
16881701
DECLARE_DESERIALISE_TYPE(VkBufferMemoryBarrier2);
16891702
DECLARE_DESERIALISE_TYPE(VkBufferMemoryRequirementsInfo2);
16901703
DECLARE_DESERIALISE_TYPE(VkBufferOpaqueCaptureAddressCreateInfo);
1704+
DECLARE_DESERIALISE_TYPE(VkBufferUsageFlags2CreateInfo);
16911705
DECLARE_DESERIALISE_TYPE(VkBufferViewCreateInfo);
16921706
DECLARE_DESERIALISE_TYPE(VkCalibratedTimestampInfoKHR);
16931707
DECLARE_DESERIALISE_TYPE(VkCommandBufferAllocateInfo);
@@ -1741,6 +1755,7 @@ DECLARE_DESERIALISE_TYPE(VkDeviceGroupRenderPassBeginInfo);
17411755
DECLARE_DESERIALISE_TYPE(VkDeviceGroupSubmitInfo);
17421756
DECLARE_DESERIALISE_TYPE(VkDeviceGroupSwapchainCreateInfoKHR);
17431757
DECLARE_DESERIALISE_TYPE(VkDeviceImageMemoryRequirements);
1758+
DECLARE_DESERIALISE_TYPE(VkDeviceImageSubresourceInfo);
17441759
DECLARE_DESERIALISE_TYPE(VkDeviceMemoryOpaqueCaptureAddressInfo);
17451760
DECLARE_DESERIALISE_TYPE(VkDeviceMemoryOverallocationCreateInfoAMD);
17461761
DECLARE_DESERIALISE_TYPE(VkDevicePrivateDataCreateInfo);
@@ -1791,6 +1806,7 @@ DECLARE_DESERIALISE_TYPE(VkImagePlaneMemoryRequirementsInfo);
17911806
DECLARE_DESERIALISE_TYPE(VkImageResolve2);
17921807
DECLARE_DESERIALISE_TYPE(VkImageSparseMemoryRequirementsInfo2);
17931808
DECLARE_DESERIALISE_TYPE(VkImageStencilUsageCreateInfo);
1809+
DECLARE_DESERIALISE_TYPE(VkImageSubresource2);
17941810
DECLARE_DESERIALISE_TYPE(VkImageSwapchainCreateInfoKHR);
17951811
DECLARE_DESERIALISE_TYPE(VkImageViewASTCDecodeModeEXT);
17961812
DECLARE_DESERIALISE_TYPE(VkImageViewCreateInfo);
@@ -1889,6 +1905,8 @@ DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceLineRasterizationProperties);
18891905
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceMaintenance3Properties);
18901906
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceMaintenance4Features);
18911907
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceMaintenance4Properties);
1908+
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceMaintenance5Features);
1909+
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceMaintenance5Properties);
18921910
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceMemoryBudgetPropertiesEXT);
18931911
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceMemoryPriorityFeaturesEXT);
18941912
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceMemoryProperties2);
@@ -1974,8 +1992,8 @@ DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceTransformFeedbackPropertiesEXT);
19741992
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceUniformBufferStandardLayoutFeatures);
19751993
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceVariablePointersFeatures);
19761994
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceVertexAttributeDivisorFeatures);
1977-
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT);
19781995
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceVertexAttributeDivisorProperties);
1996+
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT);
19791997
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT);
19801998
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceVulkan11Features);
19811999
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceVulkan11Properties);
@@ -1991,6 +2009,7 @@ DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures);
19912009
DECLARE_DESERIALISE_TYPE(VkPipelineCacheCreateInfo);
19922010
DECLARE_DESERIALISE_TYPE(VkPipelineColorBlendStateCreateInfo);
19932011
DECLARE_DESERIALISE_TYPE(VkPipelineColorWriteCreateInfoEXT);
2012+
DECLARE_DESERIALISE_TYPE(VkPipelineCreateFlags2CreateInfo);
19942013
DECLARE_DESERIALISE_TYPE(VkPipelineCreationFeedbackCreateInfo);
19952014
DECLARE_DESERIALISE_TYPE(VkPipelineDepthStencilStateCreateInfo);
19962015
DECLARE_DESERIALISE_TYPE(VkPipelineDiscardRectangleStateCreateInfoEXT);
@@ -2035,12 +2054,13 @@ DECLARE_DESERIALISE_TYPE(VkRayTracingPipelineCreateInfoKHR);
20352054
DECLARE_DESERIALISE_TYPE(VkRayTracingPipelineInterfaceCreateInfoKHR);
20362055
DECLARE_DESERIALISE_TYPE(VkRayTracingShaderGroupCreateInfoKHR);
20372056
DECLARE_DESERIALISE_TYPE(VkReleaseSwapchainImagesInfoEXT);
2057+
DECLARE_DESERIALISE_TYPE(VkRenderingAreaInfo);
20382058
DECLARE_DESERIALISE_TYPE(VkRenderingAttachmentInfo);
20392059
DECLARE_DESERIALISE_TYPE(VkRenderingAttachmentLocationInfo);
20402060
DECLARE_DESERIALISE_TYPE(VkRenderingFragmentDensityMapAttachmentInfoEXT);
20412061
DECLARE_DESERIALISE_TYPE(VkRenderingFragmentShadingRateAttachmentInfoKHR);
2042-
DECLARE_DESERIALISE_TYPE(VkRenderingInputAttachmentIndexInfo);
20432062
DECLARE_DESERIALISE_TYPE(VkRenderingInfo);
2063+
DECLARE_DESERIALISE_TYPE(VkRenderingInputAttachmentIndexInfo);
20442064
DECLARE_DESERIALISE_TYPE(VkRenderPassAttachmentBeginInfo);
20452065
DECLARE_DESERIALISE_TYPE(VkRenderPassBeginInfo);
20462066
DECLARE_DESERIALISE_TYPE(VkRenderPassCreateInfo);
@@ -2079,6 +2099,7 @@ DECLARE_DESERIALISE_TYPE(VkSubpassEndInfo);
20792099
DECLARE_DESERIALISE_TYPE(VkSubpassFragmentDensityMapOffsetEndInfoQCOM);
20802100
DECLARE_DESERIALISE_TYPE(VkSubpassResolvePerformanceQueryEXT);
20812101
DECLARE_DESERIALISE_TYPE(VkSubpassSampleLocationsEXT);
2102+
DECLARE_DESERIALISE_TYPE(VkSubresourceLayout2);
20822103
DECLARE_DESERIALISE_TYPE(VkSurfaceCapabilities2EXT);
20832104
DECLARE_DESERIALISE_TYPE(VkSurfaceCapabilities2KHR);
20842105
DECLARE_DESERIALISE_TYPE(VkSurfaceFormat2KHR);
@@ -2183,6 +2204,7 @@ DECLARE_REFLECTION_STRUCT(VkStencilOpState);
21832204
DECLARE_REFLECTION_STRUCT(VkStridedDeviceAddressRegionKHR);
21842205
DECLARE_REFLECTION_STRUCT(VkSubpassDependency);
21852206
DECLARE_REFLECTION_STRUCT(VkSubpassDescription);
2207+
DECLARE_REFLECTION_STRUCT(VkSubresourceLayout);
21862208
DECLARE_REFLECTION_STRUCT(VkSurfaceCapabilitiesKHR);
21872209
DECLARE_REFLECTION_STRUCT(VkSurfaceFormatKHR);
21882210
DECLARE_REFLECTION_STRUCT(VkTransformMatrixKHR);
@@ -2281,6 +2303,14 @@ enum VkFormatFeatureFlagBits2 : uint64_t
22812303
{
22822304
};
22832305

2306+
enum VkBufferUsageFlagBits2 : uint64_t
2307+
{
2308+
};
2309+
2310+
enum VkPipelineCreateFlagBits2 : uint64_t
2311+
{
2312+
};
2313+
22842314
// enums
22852315

22862316
DECLARE_REFLECTION_ENUM(VkAccelerationStructureBuildTypeKHR);
@@ -2298,6 +2328,7 @@ DECLARE_REFLECTION_ENUM(VkBlendOp);
22982328
DECLARE_REFLECTION_ENUM(VkBorderColor);
22992329
DECLARE_REFLECTION_ENUM(VkBufferCreateFlagBits);
23002330
DECLARE_REFLECTION_ENUM(VkBufferUsageFlagBits);
2331+
DECLARE_REFLECTION_ENUM(VkBufferUsageFlagBits2);
23012332
DECLARE_REFLECTION_ENUM(VkBuildAccelerationStructureFlagBitsKHR);
23022333
DECLARE_REFLECTION_ENUM(VkBuildAccelerationStructureModeKHR);
23032334
DECLARE_REFLECTION_ENUM(VkChromaLocation);
@@ -2379,6 +2410,7 @@ DECLARE_REFLECTION_ENUM(VkPipelineBindPoint);
23792410
DECLARE_REFLECTION_ENUM(VkPipelineCacheCreateFlagBits);
23802411
DECLARE_REFLECTION_ENUM(VkPipelineColorBlendStateCreateFlagBits);
23812412
DECLARE_REFLECTION_ENUM(VkPipelineCreateFlagBits);
2413+
DECLARE_REFLECTION_ENUM(VkPipelineCreateFlagBits2);
23822414
DECLARE_REFLECTION_ENUM(VkPipelineCreationFeedbackFlagBits);
23832415
DECLARE_REFLECTION_ENUM(VkPipelineDepthStencilStateCreateFlagBits);
23842416
DECLARE_REFLECTION_ENUM(VkPipelineExecutableStatisticFormatKHR);

renderdoc/driver/vulkan/vk_core.cpp

+7
Original file line numberDiff line numberDiff line change
@@ -1626,6 +1626,10 @@ static const VkExtensionProperties supportedExtensions[] = {
16261626
VK_KHR_MAINTENANCE_4_EXTENSION_NAME,
16271627
VK_KHR_MAINTENANCE_4_SPEC_VERSION,
16281628
},
1629+
{
1630+
VK_KHR_MAINTENANCE_5_EXTENSION_NAME,
1631+
VK_KHR_MAINTENANCE_5_SPEC_VERSION,
1632+
},
16291633
{
16301634
VK_KHR_MULTIVIEW_EXTENSION_NAME,
16311635
VK_KHR_MULTIVIEW_SPEC_VERSION,
@@ -4365,6 +4369,9 @@ bool WrappedVulkan::ProcessChunk(ReadSerialiser &ser, VulkanChunk chunk)
43654369
case VulkanChunk::vkCmdWriteAccelerationStructuresPropertiesKHR:
43664370
return Serialise_vkCmdWriteAccelerationStructuresPropertiesKHR(
43674371
ser, VK_NULL_HANDLE, 0, NULL, VK_QUERY_TYPE_MAX_ENUM, VK_NULL_HANDLE, 0);
4372+
case VulkanChunk::vkCmdBindIndexBuffer2KHR:
4373+
return Serialise_vkCmdBindIndexBuffer2KHR(ser, VK_NULL_HANDLE, VK_NULL_HANDLE, 0, 0,
4374+
VK_INDEX_TYPE_MAX_ENUM);
43684375

43694376
// chunks that are reserved but not yet serialised
43704377
case VulkanChunk::vkResetCommandPool:

renderdoc/driver/vulkan/vk_core.h

+78
Original file line numberDiff line numberDiff line change
@@ -1394,6 +1394,70 @@ class WrappedVulkan : public IFrameCapturer
13941394
VkExtensionProperties *pProperties);
13951395
static VkResult GetProvidedInstanceExtensionProperties(uint32_t *pPropertyCount,
13961396
VkExtensionProperties *pProperties);
1397+
// Generic getter/setter helpers to handle optional 64 flag structs in the pNext chain
1398+
template <typename ParentStruct>
1399+
uint64_t GetBufferUsageFlags(const ParentStruct *info, const VkDevice &device)
1400+
{
1401+
bool maintenance5 = GetExtensions(GetRecord(device)).ext_KHR_maintenance5;
1402+
if(maintenance5)
1403+
{
1404+
const VkBufferUsageFlags2CreateInfo *usage2 =
1405+
(const VkBufferUsageFlags2CreateInfo *)FindNextStruct(
1406+
info, VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO);
1407+
if(usage2)
1408+
return usage2->usage;
1409+
}
1410+
return info->usage;
1411+
}
1412+
1413+
template <typename ParentStruct>
1414+
void SetBufferUsageFlags(ParentStruct *info, uint64_t usage, const VkDevice &device)
1415+
{
1416+
bool maintenance5 = GetExtensions(GetRecord(device)).ext_KHR_maintenance5;
1417+
if(maintenance5)
1418+
{
1419+
VkBufferUsageFlags2CreateInfo *usage2 = (VkBufferUsageFlags2CreateInfo *)FindNextStruct(
1420+
info, VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO);
1421+
if(usage2)
1422+
{
1423+
usage2->usage = usage;
1424+
return;
1425+
}
1426+
}
1427+
info->usage = (VkBufferUsageFlags)usage;
1428+
}
1429+
1430+
template <typename ParentStruct>
1431+
uint64_t GetPipelineCreateFlags(const ParentStruct *info, const VkDevice &device)
1432+
{
1433+
bool maintenance5 = GetExtensions(GetRecord(device)).ext_KHR_maintenance5;
1434+
if(maintenance5)
1435+
{
1436+
const VkPipelineCreateFlags2CreateInfo *flags2 =
1437+
(const VkPipelineCreateFlags2CreateInfo *)FindNextStruct(
1438+
info, VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO);
1439+
if(flags2)
1440+
return flags2->flags;
1441+
}
1442+
return info->flags;
1443+
}
1444+
1445+
template <typename ParentStruct>
1446+
void SetPipelineCreateFlags(ParentStruct *info, uint64_t flags, const VkDevice &device)
1447+
{
1448+
bool maintenance5 = GetExtensions(GetRecord(device)).ext_KHR_maintenance5;
1449+
if(maintenance5)
1450+
{
1451+
VkPipelineCreateFlags2CreateInfo *flags2 = (VkPipelineCreateFlags2CreateInfo *)FindNextStruct(
1452+
info, VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO);
1453+
if(flags2)
1454+
{
1455+
flags2->flags = flags;
1456+
return;
1457+
}
1458+
}
1459+
info->flags = (VkPipelineCreateFlags)flags;
1460+
}
13971461

13981462
const VkPhysicalDeviceFeatures &GetDeviceEnabledFeatures()
13991463
{
@@ -3028,4 +3092,18 @@ class WrappedVulkan : public IFrameCapturer
30283092
// VK_KHR_ray_tracing_maintenance1
30293093
IMPLEMENT_FUNCTION_SERIALISED(void, vkCmdTraceRaysIndirect2KHR, VkCommandBuffer commandBuffer,
30303094
VkDeviceAddress indirectDeviceAddress);
3095+
3096+
// VK_KHR_maintenance5
3097+
IMPLEMENT_FUNCTION_SERIALISED(void, vkCmdBindIndexBuffer2KHR, VkCommandBuffer commandBuffer,
3098+
VkBuffer buffer, VkDeviceSize offset, VkDeviceSize size,
3099+
VkIndexType indexType);
3100+
void vkGetDeviceImageSubresourceLayoutKHR(VkDevice device,
3101+
const VkDeviceImageSubresourceInfo *pInfo,
3102+
VkSubresourceLayout2 *pLayout);
3103+
void vkGetImageSubresourceLayout2KHR(VkDevice device, VkImage image,
3104+
const VkImageSubresource2 *pSubresource,
3105+
VkSubresourceLayout2 *pLayout);
3106+
void vkGetRenderingAreaGranularityKHR(VkDevice device,
3107+
const VkRenderingAreaInfo *pRenderingAreaInfo,
3108+
VkExtent2D *pGranularity);
30313109
};

0 commit comments

Comments
 (0)