From 22f8b2ac79d03e0fa851823fc8fb4b8cb5913a52 Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 9 Jan 2019 10:01:13 +0000 Subject: [PATCH] Specify original Vk*Flags in structured data instead of coerced FlagBits * We coerce the type to the FlagBits enum for serialisation so the stringification picks up the bits properly. However the variable is properly typed as just 'Flags' which is a uint32_t typedef, so manually specify its typename afterwards. --- renderdoc/driver/vulkan/vk_common.h | 1 + renderdoc/driver/vulkan/vk_serialise.cpp | 436 ++++++++++++------ renderdoc/driver/vulkan/vk_stringise.cpp | 10 + .../driver/vulkan/wrappers/vk_cmd_funcs.cpp | 14 +- .../vulkan/wrappers/vk_dynamic_funcs.cpp | 6 +- .../driver/vulkan/wrappers/vk_sync_funcs.cpp | 8 +- renderdoc/serialise/serialiser.h | 8 +- 7 files changed, 317 insertions(+), 166 deletions(-) diff --git a/renderdoc/driver/vulkan/vk_common.h b/renderdoc/driver/vulkan/vk_common.h index 9fb8bd0d0..692c8c149 100644 --- a/renderdoc/driver/vulkan/vk_common.h +++ b/renderdoc/driver/vulkan/vk_common.h @@ -1096,6 +1096,7 @@ DECLARE_REFLECTION_ENUM(VkCommandPoolResetFlagBits); DECLARE_REFLECTION_ENUM(VkCompareOp); DECLARE_REFLECTION_ENUM(VkComponentSwizzle); DECLARE_REFLECTION_ENUM(VkCompositeAlphaFlagBitsKHR); +DECLARE_REFLECTION_ENUM(VkConditionalRenderingFlagBitsEXT); DECLARE_REFLECTION_ENUM(VkConservativeRasterizationModeEXT); DECLARE_REFLECTION_ENUM(VkCullModeFlagBits); DECLARE_REFLECTION_ENUM(VkDebugReportFlagBitsEXT); diff --git a/renderdoc/driver/vulkan/vk_serialise.cpp b/renderdoc/driver/vulkan/vk_serialise.cpp index b8d1061d6..e85fc8ba9 100644 --- a/renderdoc/driver/vulkan/vk_serialise.cpp +++ b/renderdoc/driver/vulkan/vk_serialise.cpp @@ -26,8 +26,142 @@ #include "vk_manager.h" #include "vk_resources.h" +// there's an annoying little difference between VkFoo*Flags* and VkFoo*FlagBits* meaning we can't +// just append 'Bits' onto a flag type to get the bits enum. So we declare typedefs to do that for +// us so the macros are cleaner below. +// we could avoid this but we'd need to do the base + suffix thing in SERIALISE_MEMBER_VKFLAGS() +// which is uglier. + +#define DECL_VKFLAG(flagbase) typedef CONCAT(flagbase, FlagBits) CONCAT(flagbase, FlagsBits); +#define DECL_VKFLAG_EXT(flagbase, suffix) \ + typedef CONCAT(flagbase, CONCAT(FlagBits, suffix)) \ + CONCAT(flagbase, CONCAT(Flags, CONCAT(suffix, Bits))); + +// duplicates for enums that don't yet have a FlagBits enum, which we direct to VkFlagWithNoBits +// we declare our own enum of the same name will then compile error if this macro is mistakenly +// used for a flags type with some bits (for example, if a bit is later added to a previously empty +// flags field). +#define DECL_VKFLAG_EMPTY(flagbase) \ + enum CONCAT(flagbase, FlagBits) \ + { \ + }; \ + typedef VkFlagWithNoBits CONCAT(flagbase, FlagsBits); +#define DECL_VKFLAG_EMPTY_EXT(flagbase, suffix) \ + enum CONCAT(flagbase, CONCAT(FlagBits, suffix)) \ + { \ + }; \ + typedef VkFlagWithNoBits CONCAT(flagbase, CONCAT(Flags, CONCAT(suffix, Bits))); + +DECL_VKFLAG_EMPTY(VkInstanceCreate); +DECL_VKFLAG(VkFormatFeature); +DECL_VKFLAG(VkImageUsage); +DECL_VKFLAG(VkImageCreate); +DECL_VKFLAG(VkSampleCount); +DECL_VKFLAG(VkQueue); +DECL_VKFLAG(VkMemoryProperty); +DECL_VKFLAG(VkMemoryHeap); +DECL_VKFLAG_EMPTY(VkDeviceCreate); +DECL_VKFLAG(VkDeviceQueueCreate); +DECL_VKFLAG(VkPipelineStage); +DECL_VKFLAG_EMPTY(VkMemoryMap); +DECL_VKFLAG(VkImageAspect); +DECL_VKFLAG(VkSparseImageFormat); +DECL_VKFLAG(VkSparseMemoryBind); +DECL_VKFLAG(VkFenceCreate); +DECL_VKFLAG_EMPTY(VkSemaphoreCreate); +DECL_VKFLAG_EMPTY(VkEventCreate); +DECL_VKFLAG_EMPTY(VkQueryPoolCreate); +DECL_VKFLAG(VkQueryPipelineStatistic); +DECL_VKFLAG(VkQueryResult); +DECL_VKFLAG(VkBufferCreate); +DECL_VKFLAG(VkBufferUsage); +DECL_VKFLAG_EMPTY(VkBufferViewCreate); +DECL_VKFLAG_EMPTY(VkImageViewCreate); +DECL_VKFLAG_EMPTY(VkShaderModuleCreate); +DECL_VKFLAG_EMPTY(VkPipelineCacheCreate); +DECL_VKFLAG(VkPipelineCreate); +DECL_VKFLAG_EMPTY(VkPipelineShaderStageCreate); +DECL_VKFLAG_EMPTY(VkPipelineVertexInputStateCreate); +DECL_VKFLAG_EMPTY(VkPipelineInputAssemblyStateCreate); +DECL_VKFLAG_EMPTY(VkPipelineTessellationStateCreate); +DECL_VKFLAG_EMPTY(VkPipelineViewportStateCreate); +DECL_VKFLAG_EMPTY(VkPipelineRasterizationStateCreate); +DECL_VKFLAG(VkCullMode); +DECL_VKFLAG_EMPTY(VkPipelineMultisampleStateCreate); +DECL_VKFLAG_EMPTY(VkPipelineDepthStencilStateCreate); +DECL_VKFLAG_EMPTY(VkPipelineColorBlendStateCreate); +DECL_VKFLAG(VkColorComponent); +DECL_VKFLAG_EMPTY(VkPipelineDynamicStateCreate); +DECL_VKFLAG_EMPTY(VkPipelineLayoutCreate); +DECL_VKFLAG(VkShaderStage); +DECL_VKFLAG_EMPTY(VkSamplerCreate); +DECL_VKFLAG(VkDescriptorSetLayoutCreate); +DECL_VKFLAG(VkDescriptorPoolCreate); +DECL_VKFLAG_EMPTY(VkDescriptorPoolReset); +DECL_VKFLAG_EMPTY(VkFramebufferCreate); +DECL_VKFLAG_EMPTY(VkRenderPassCreate); +DECL_VKFLAG(VkAttachmentDescription); +DECL_VKFLAG(VkSubpassDescription); +DECL_VKFLAG(VkAccess); +DECL_VKFLAG(VkDependency); +DECL_VKFLAG(VkCommandPoolCreate); +DECL_VKFLAG(VkCommandPoolReset); +DECL_VKFLAG(VkCommandBufferUsage); +DECL_VKFLAG(VkQueryControl); +DECL_VKFLAG(VkCommandBufferReset); +DECL_VKFLAG(VkStencilFace); +DECL_VKFLAG(VkSubgroupFeature); +DECL_VKFLAG(VkPeerMemoryFeature); +DECL_VKFLAG(VkMemoryAllocate); +DECL_VKFLAG_EMPTY(VkCommandPoolTrim); +DECL_VKFLAG_EMPTY(VkDescriptorUpdateTemplateCreate); +DECL_VKFLAG(VkExternalMemoryHandleType); +DECL_VKFLAG(VkExternalMemoryFeature); +DECL_VKFLAG(VkExternalFenceHandleType); +DECL_VKFLAG(VkExternalFenceFeature); +DECL_VKFLAG(VkFenceImport); +DECL_VKFLAG(VkSemaphoreImport); +DECL_VKFLAG(VkExternalSemaphoreHandleType); +DECL_VKFLAG(VkExternalSemaphoreFeature); +DECL_VKFLAG_EXT(VkSurfaceTransform, KHR); +DECL_VKFLAG_EXT(VkCompositeAlpha, KHR); +DECL_VKFLAG_EXT(VkSwapchainCreate, KHR); +DECL_VKFLAG_EXT(VkDeviceGroupPresentMode, KHR); +DECL_VKFLAG_EXT(VkDisplayPlaneAlpha, KHR); +DECL_VKFLAG_EMPTY_EXT(VkDisplayModeCreate, KHR); +DECL_VKFLAG_EMPTY_EXT(VkDisplaySurfaceCreate, KHR); +DECL_VKFLAG_EXT(VkDebugReport, EXT); +DECL_VKFLAG_EMPTY_EXT(VkPipelineRasterizationStateStreamCreate, EXT); +DECL_VKFLAG_EXT(VkExternalMemoryHandleType, NV); +DECL_VKFLAG_EXT(VkExternalMemoryFeature, NV); +DECL_VKFLAG_EXT(VkConditionalRendering, EXT); +DECL_VKFLAG_EXT(VkIndirectCommandsLayoutUsage, NVX); +DECL_VKFLAG_EXT(VkObjectEntryUsage, NVX); +DECL_VKFLAG_EXT(VkSurfaceCounter, EXT); +DECL_VKFLAG_EMPTY_EXT(VkPipelineViewportSwizzleStateCreate, NV); +DECL_VKFLAG_EMPTY_EXT(VkPipelineDiscardRectangleStateCreate, EXT); +DECL_VKFLAG_EMPTY_EXT(VkPipelineRasterizationConservativeStateCreate, EXT); +DECL_VKFLAG_EMPTY_EXT(VkDebugUtilsMessengerCallbackData, EXT); +DECL_VKFLAG_EMPTY_EXT(VkDebugUtilsMessengerCreate, EXT); +DECL_VKFLAG_EXT(VkDebugUtilsMessageSeverity, EXT); +DECL_VKFLAG_EXT(VkDebugUtilsMessageType, EXT); +DECL_VKFLAG_EMPTY_EXT(VkPipelineCoverageToColorStateCreate, NV); +DECL_VKFLAG_EMPTY_EXT(VkPipelineCoverageModulationStateCreate, NV); +DECL_VKFLAG_EMPTY_EXT(VkValidationCacheCreate, EXT); +DECL_VKFLAG_EXT(VkDescriptorBinding, EXT); +DECL_VKFLAG_EXT(VkGeometry, NV); +DECL_VKFLAG_EXT(VkGeometryInstance, NV); +DECL_VKFLAG_EXT(VkBuildAccelerationStructure, NV); + +// serialise a member as flags - cast to the Bits enum for serialisation so the stringification +// picks up the bitfield and doesn't treat it as uint32_t. Then we rename the type back to the base +// flags type so the structured data is as accurate as possible. +#define SERIALISE_MEMBER_VKFLAGS(flagstype, name) \ + SERIALISE_MEMBER_TYPED(CONCAT(flagstype, Bits), name).TypedAs(STRINGIZE(flagstype)) + // simple way to express "resources referenced from this struct don't have to be present." -// since this is used during read when the processing is single-threaded, we make it a static flag. +// since this is used during read when the processing is single-threaded, we make it a static +// flag. // If we multi-thread reading, this could be stored in the Serialiser context somehow. template struct OptionalResources @@ -955,7 +1089,7 @@ void DoSerialise(SerialiserType &ser, VkDeviceQueueCreateInfo &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkDeviceQueueCreateFlagBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkDeviceQueueCreateFlags, flags); SERIALISE_MEMBER(queueFamilyIndex); SERIALISE_MEMBER(queueCount); SERIALISE_MEMBER_ARRAY(pQueuePriorities, queueCount); @@ -1034,13 +1168,13 @@ template void DoSerialise(SerialiserType &ser, VkMemoryHeap &el) { SERIALISE_MEMBER(size); - SERIALISE_MEMBER_TYPED(VkMemoryHeapFlagBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkMemoryHeapFlags, flags); } template void DoSerialise(SerialiserType &ser, VkMemoryType &el) { - SERIALISE_MEMBER_TYPED(VkMemoryPropertyFlagBits, propertyFlags); + SERIALISE_MEMBER_VKFLAGS(VkMemoryPropertyFlags, propertyFlags); SERIALISE_MEMBER(heapIndex); } @@ -1144,16 +1278,16 @@ void DoSerialise(SerialiserType &ser, VkPhysicalDeviceLimits &el) SERIALISE_MEMBER(maxFramebufferWidth); SERIALISE_MEMBER(maxFramebufferHeight); SERIALISE_MEMBER(maxFramebufferLayers); - SERIALISE_MEMBER_TYPED(VkSampleCountFlagBits, framebufferColorSampleCounts); - SERIALISE_MEMBER_TYPED(VkSampleCountFlagBits, framebufferDepthSampleCounts); - SERIALISE_MEMBER_TYPED(VkSampleCountFlagBits, framebufferStencilSampleCounts); - SERIALISE_MEMBER_TYPED(VkSampleCountFlagBits, framebufferNoAttachmentsSampleCounts); + SERIALISE_MEMBER_VKFLAGS(VkSampleCountFlags, framebufferColorSampleCounts); + SERIALISE_MEMBER_VKFLAGS(VkSampleCountFlags, framebufferDepthSampleCounts); + SERIALISE_MEMBER_VKFLAGS(VkSampleCountFlags, framebufferStencilSampleCounts); + SERIALISE_MEMBER_VKFLAGS(VkSampleCountFlags, framebufferNoAttachmentsSampleCounts); SERIALISE_MEMBER(maxColorAttachments); - SERIALISE_MEMBER_TYPED(VkSampleCountFlagBits, sampledImageColorSampleCounts); - SERIALISE_MEMBER_TYPED(VkSampleCountFlagBits, sampledImageIntegerSampleCounts); - SERIALISE_MEMBER_TYPED(VkSampleCountFlagBits, sampledImageDepthSampleCounts); - SERIALISE_MEMBER_TYPED(VkSampleCountFlagBits, sampledImageStencilSampleCounts); - SERIALISE_MEMBER_TYPED(VkSampleCountFlagBits, storageImageSampleCounts); + SERIALISE_MEMBER_VKFLAGS(VkSampleCountFlags, sampledImageColorSampleCounts); + SERIALISE_MEMBER_VKFLAGS(VkSampleCountFlags, sampledImageIntegerSampleCounts); + SERIALISE_MEMBER_VKFLAGS(VkSampleCountFlags, sampledImageDepthSampleCounts); + SERIALISE_MEMBER_VKFLAGS(VkSampleCountFlags, sampledImageStencilSampleCounts); + SERIALISE_MEMBER_VKFLAGS(VkSampleCountFlags, storageImageSampleCounts); SERIALISE_MEMBER(maxSampleMaskWords); SERIALISE_MEMBER(timestampComputeAndGraphics); SERIALISE_MEMBER(timestampPeriod); @@ -1185,7 +1319,7 @@ void DoSerialise(SerialiserType &ser, VkPhysicalDeviceSparseProperties &el) template void DoSerialise(SerialiserType &ser, VkQueueFamilyProperties &el) { - SERIALISE_MEMBER_TYPED(VkQueueFlagBits, queueFlags); + SERIALISE_MEMBER_VKFLAGS(VkQueueFlags, queueFlags); SERIALISE_MEMBER(queueCount); SERIALISE_MEMBER(timestampValidBits); SERIALISE_MEMBER(minImageTransferGranularity); @@ -1211,7 +1345,7 @@ void DoSerialise(SerialiserType &ser, VkDeviceCreateInfo &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkFlagWithNoBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkDeviceCreateFlags, flags); SERIALISE_MEMBER(queueCreateInfoCount); SERIALISE_MEMBER_ARRAY(pQueueCreateInfos, queueCreateInfoCount); SERIALISE_MEMBER(enabledLayerCount); @@ -1239,9 +1373,9 @@ void DoSerialise(SerialiserType &ser, VkBufferCreateInfo &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkBufferCreateFlagBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkBufferCreateFlags, flags); SERIALISE_MEMBER(size); - SERIALISE_MEMBER_TYPED(VkBufferUsageFlagBits, usage); + SERIALISE_MEMBER_VKFLAGS(VkBufferUsageFlags, usage); SERIALISE_MEMBER(sharingMode); // pQueueFamilyIndices should *only* be read if the sharing mode is concurrent @@ -1271,7 +1405,7 @@ void DoSerialise(SerialiserType &ser, VkBufferViewCreateInfo &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkFlagWithNoBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkBufferViewCreateFlags, flags); SERIALISE_MEMBER(buffer); SERIALISE_MEMBER(format); SERIALISE_MEMBER(offset); @@ -1290,7 +1424,7 @@ void DoSerialise(SerialiserType &ser, VkImageCreateInfo &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkImageCreateFlagBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkImageCreateFlags, flags); SERIALISE_MEMBER(imageType); SERIALISE_MEMBER(format); SERIALISE_MEMBER(extent); @@ -1298,7 +1432,7 @@ void DoSerialise(SerialiserType &ser, VkImageCreateInfo &el) SERIALISE_MEMBER(arrayLayers); SERIALISE_MEMBER(samples); SERIALISE_MEMBER(tiling); - SERIALISE_MEMBER_TYPED(VkImageUsageFlagBits, usage); + SERIALISE_MEMBER_VKFLAGS(VkImageUsageFlags, usage); SERIALISE_MEMBER(sharingMode); // pQueueFamilyIndices should *only* be read if the sharing mode is concurrent @@ -1338,7 +1472,7 @@ void DoSerialise(SerialiserType &ser, VkImageViewCreateInfo &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkFlagWithNoBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkImageViewCreateFlags, flags); SERIALISE_MEMBER(image); SERIALISE_MEMBER(viewType); SERIALISE_MEMBER(format); @@ -1359,7 +1493,7 @@ void DoSerialise(SerialiserType &ser, VkSparseMemoryBind &el) SERIALISE_MEMBER(size); SERIALISE_MEMBER(memory); SERIALISE_MEMBER(memoryOffset); - SERIALISE_MEMBER_TYPED(VkSparseMemoryBindFlagBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkSparseMemoryBindFlags, flags); } template @@ -1398,7 +1532,7 @@ void DoSerialise(SerialiserType &ser, VkSparseImageMemoryBind &el) SERIALISE_MEMBER(extent); SERIALISE_MEMBER(memory); SERIALISE_MEMBER(memoryOffset); - SERIALISE_MEMBER_TYPED(VkSparseMemoryBindFlagBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkSparseMemoryBindFlags, flags); } template @@ -1469,8 +1603,8 @@ void DoSerialise(SerialiserType &ser, VkSubmitInfo &el) } u; u.orig = &el.pWaitDstStageMask; - ser.Serialise("pWaitDstStageMask", *u.typed, el.waitSemaphoreCount, - SerialiserFlags::AllocateMemory); + ser.Serialise("pWaitDstStageMask", *u.typed, el.waitSemaphoreCount, SerialiserFlags::AllocateMemory) + .TypedAs("VkPipelineStageFlags"); SERIALISE_MEMBER(commandBufferCount); SERIALISE_MEMBER_ARRAY(pCommandBuffers, commandBufferCount); @@ -1493,7 +1627,7 @@ void DoSerialise(SerialiserType &ser, VkFramebufferCreateInfo &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkFlagWithNoBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkFramebufferCreateFlags, flags); SERIALISE_MEMBER(renderPass); SERIALISE_MEMBER(attachmentCount); SERIALISE_MEMBER_ARRAY(pAttachments, attachmentCount); @@ -1512,7 +1646,7 @@ void Deserialise(const VkFramebufferCreateInfo &el) template void DoSerialise(SerialiserType &ser, VkAttachmentDescription &el) { - SERIALISE_MEMBER_TYPED(VkAttachmentDescriptionFlagBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkAttachmentDescriptionFlags, flags); SERIALISE_MEMBER(format); SERIALISE_MEMBER(samples); SERIALISE_MEMBER(loadOp); @@ -1526,7 +1660,7 @@ void DoSerialise(SerialiserType &ser, VkAttachmentDescription &el) template void DoSerialise(SerialiserType &ser, VkSubpassDescription &el) { - SERIALISE_MEMBER_TYPED(VkSubpassDescriptionFlagBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkSubpassDescriptionFlags, flags); SERIALISE_MEMBER(pipelineBindPoint); SERIALISE_MEMBER(inputAttachmentCount); @@ -1557,11 +1691,11 @@ void DoSerialise(SerialiserType &ser, VkSubpassDependency &el) { SERIALISE_MEMBER(srcSubpass); SERIALISE_MEMBER(dstSubpass); - SERIALISE_MEMBER_TYPED(VkPipelineStageFlagBits, srcStageMask); - SERIALISE_MEMBER_TYPED(VkPipelineStageFlagBits, dstStageMask); - SERIALISE_MEMBER_TYPED(VkAccessFlagBits, srcAccessMask); - SERIALISE_MEMBER_TYPED(VkAccessFlagBits, dstAccessMask); - SERIALISE_MEMBER_TYPED(VkDependencyFlagBits, dependencyFlags); + SERIALISE_MEMBER_VKFLAGS(VkPipelineStageFlags, srcStageMask); + SERIALISE_MEMBER_VKFLAGS(VkPipelineStageFlags, dstStageMask); + SERIALISE_MEMBER_VKFLAGS(VkAccessFlags, srcAccessMask); + SERIALISE_MEMBER_VKFLAGS(VkAccessFlags, dstAccessMask); + SERIALISE_MEMBER_VKFLAGS(VkDependencyFlags, dependencyFlags); } template @@ -1577,7 +1711,7 @@ void DoSerialise(SerialiserType &ser, VkRenderPassCreateInfo &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkFlagWithNoBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkRenderPassCreateFlags, flags); SERIALISE_MEMBER(attachmentCount); SERIALISE_MEMBER_ARRAY(pAttachments, attachmentCount); SERIALISE_MEMBER(subpassCount); @@ -1640,7 +1774,7 @@ void DoSerialise(SerialiserType &ser, VkPipelineVertexInputStateCreateInfo &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkFlagWithNoBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkPipelineVertexInputStateCreateFlags, flags); SERIALISE_MEMBER(vertexBindingDescriptionCount); SERIALISE_MEMBER_ARRAY(pVertexBindingDescriptions, vertexBindingDescriptionCount); SERIALISE_MEMBER(vertexAttributeDescriptionCount); @@ -1662,7 +1796,7 @@ void DoSerialise(SerialiserType &ser, VkPipelineInputAssemblyStateCreateInfo &el el.sType == VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkFlagWithNoBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkPipelineInputAssemblyStateCreateFlags, flags); SERIALISE_MEMBER(topology); SERIALISE_MEMBER(primitiveRestartEnable); } @@ -1679,7 +1813,7 @@ void DoSerialise(SerialiserType &ser, VkPipelineTessellationStateCreateInfo &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkFlagWithNoBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkPipelineTessellationStateCreateFlags, flags); SERIALISE_MEMBER(patchControlPoints); } @@ -1695,7 +1829,7 @@ void DoSerialise(SerialiserType &ser, VkPipelineViewportStateCreateInfo &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkFlagWithNoBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkPipelineViewportStateCreateFlags, flags); SERIALISE_MEMBER(viewportCount); SERIALISE_MEMBER_ARRAY(pViewports, viewportCount); @@ -1718,11 +1852,11 @@ void DoSerialise(SerialiserType &ser, VkPipelineRasterizationStateCreateInfo &el el.sType == VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkFlagWithNoBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkPipelineRasterizationStateCreateFlags, flags); SERIALISE_MEMBER(depthClampEnable); SERIALISE_MEMBER(rasterizerDiscardEnable); SERIALISE_MEMBER(polygonMode); - SERIALISE_MEMBER_TYPED(VkCullModeFlagBits, cullMode); + SERIALISE_MEMBER_VKFLAGS(VkCullModeFlags, cullMode); SERIALISE_MEMBER(frontFace); SERIALISE_MEMBER(depthBiasEnable); SERIALISE_MEMBER(depthBiasConstantFactor); @@ -1743,7 +1877,7 @@ void DoSerialise(SerialiserType &ser, VkPipelineMultisampleStateCreateInfo &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkFlagWithNoBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkPipelineMultisampleStateCreateFlags, flags); SERIALISE_MEMBER(rasterizationSamples); RDCASSERT(el.rasterizationSamples <= VK_SAMPLE_COUNT_32_BIT); SERIALISE_MEMBER(sampleShadingEnable); @@ -1770,7 +1904,7 @@ void DoSerialise(SerialiserType &ser, VkPipelineColorBlendAttachmentState &el) SERIALISE_MEMBER(srcAlphaBlendFactor); SERIALISE_MEMBER(dstAlphaBlendFactor); SERIALISE_MEMBER(alphaBlendOp); - SERIALISE_MEMBER_TYPED(VkColorComponentFlagBits, colorWriteMask); + SERIALISE_MEMBER_VKFLAGS(VkColorComponentFlags, colorWriteMask); } template @@ -1779,7 +1913,7 @@ void DoSerialise(SerialiserType &ser, VkPipelineColorBlendStateCreateInfo &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkFlagWithNoBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkPipelineColorBlendStateCreateFlags, flags); SERIALISE_MEMBER(logicOpEnable); SERIALISE_MEMBER(logicOp); SERIALISE_MEMBER(attachmentCount); @@ -1801,7 +1935,7 @@ void DoSerialise(SerialiserType &ser, VkPipelineDepthStencilStateCreateInfo &el) el.sType == VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkFlagWithNoBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkPipelineDepthStencilStateCreateFlags, flags); SERIALISE_MEMBER(depthTestEnable); SERIALISE_MEMBER(depthWriteEnable); SERIALISE_MEMBER(depthCompareOp); @@ -1825,7 +1959,7 @@ void DoSerialise(SerialiserType &ser, VkPipelineDynamicStateCreateInfo &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkFlagWithNoBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkPipelineDynamicStateCreateFlags, flags); SERIALISE_MEMBER(dynamicStateCount); SERIALISE_MEMBER_ARRAY(pDynamicStates, dynamicStateCount); } @@ -1843,7 +1977,7 @@ void DoSerialise(SerialiserType &ser, VkCommandPoolCreateInfo &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkCommandPoolCreateFlagBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkCommandPoolCreateFlags, flags); SERIALISE_MEMBER(queueFamilyIndex); } @@ -1880,8 +2014,8 @@ void DoSerialise(SerialiserType &ser, VkCommandBufferInheritanceInfo &el) SERIALISE_MEMBER(subpass); SERIALISE_MEMBER(framebuffer); SERIALISE_MEMBER(occlusionQueryEnable); - SERIALISE_MEMBER_TYPED(VkQueryControlFlagBits, queryFlags); - SERIALISE_MEMBER_TYPED(VkQueryPipelineStatisticFlagBits, pipelineStatistics); + SERIALISE_MEMBER_VKFLAGS(VkQueryControlFlags, queryFlags); + SERIALISE_MEMBER_VKFLAGS(VkQueryPipelineStatisticFlags, pipelineStatistics); } template <> @@ -1896,7 +2030,7 @@ void DoSerialise(SerialiserType &ser, VkCommandBufferBeginInfo &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkCommandBufferUsageFlagBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkCommandBufferUsageFlags, flags); SERIALISE_MEMBER_OPT(pInheritanceInfo); } @@ -1927,10 +2061,10 @@ void DoSerialise(SerialiserType &ser, VkQueryPoolCreateInfo &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkFlagWithNoBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkQueryPoolCreateFlags, flags); SERIALISE_MEMBER(queryType); SERIALISE_MEMBER(queryCount); - SERIALISE_MEMBER_TYPED(VkQueryPipelineStatisticFlagBits, pipelineStatistics); + SERIALISE_MEMBER_VKFLAGS(VkQueryPipelineStatisticFlags, pipelineStatistics); } template <> @@ -1945,7 +2079,7 @@ void DoSerialise(SerialiserType &ser, VkSemaphoreCreateInfo &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkFlagWithNoBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkSemaphoreCreateFlags, flags); } template <> @@ -1960,7 +2094,7 @@ void DoSerialise(SerialiserType &ser, VkEventCreateInfo &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_EVENT_CREATE_INFO); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkFlagWithNoBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkEventCreateFlags, flags); } template <> @@ -1975,7 +2109,7 @@ void DoSerialise(SerialiserType &ser, VkFenceCreateInfo &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_FENCE_CREATE_INFO); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkFenceCreateFlagBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkFenceCreateFlags, flags); } template <> @@ -1990,7 +2124,7 @@ void DoSerialise(SerialiserType &ser, VkSamplerCreateInfo &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkFlagWithNoBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkSamplerCreateFlags, flags); SERIALISE_MEMBER(magFilter); SERIALISE_MEMBER(minFilter); SERIALISE_MEMBER(mipmapMode); @@ -2020,7 +2154,7 @@ void DoSerialise(SerialiserType &ser, VkPipelineShaderStageCreateInfo &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkFlagWithNoBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkPipelineShaderStageCreateFlags, flags); SERIALISE_MEMBER(stage); SERIALISE_MEMBER(module); SERIALISE_MEMBER(pName); @@ -2084,7 +2218,7 @@ void DoSerialise(SerialiserType &ser, VkPipelineCacheCreateInfo &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkFlagWithNoBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkPipelineCacheCreateFlags, flags); // don't serialise size_t, otherwise capture/replay between different bit-ness won't work { @@ -2110,7 +2244,7 @@ void DoSerialise(SerialiserType &ser, VkPipelineLayoutCreateInfo &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkFlagWithNoBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkPipelineLayoutCreateFlags, flags); SERIALISE_MEMBER(setLayoutCount); SERIALISE_MEMBER_ARRAY(pSetLayouts, setLayoutCount); SERIALISE_MEMBER(pushConstantRangeCount); @@ -2131,7 +2265,7 @@ void DoSerialise(SerialiserType &ser, VkShaderModuleCreateInfo &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkFlagWithNoBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkShaderModuleCreateFlags, flags); // don't serialise size_t, otherwise capture/replay between different bit-ness won't work { @@ -2160,7 +2294,7 @@ void Deserialise(const VkShaderModuleCreateInfo &el) template void DoSerialise(SerialiserType &ser, VkImageSubresourceRange &el) { - SERIALISE_MEMBER_TYPED(VkImageAspectFlagBits, aspectMask); + SERIALISE_MEMBER_VKFLAGS(VkImageAspectFlags, aspectMask); SERIALISE_MEMBER(baseMipLevel); SERIALISE_MEMBER(levelCount); SERIALISE_MEMBER(baseArrayLayer); @@ -2170,7 +2304,7 @@ void DoSerialise(SerialiserType &ser, VkImageSubresourceRange &el) template void DoSerialise(SerialiserType &ser, VkImageSubresourceLayers &el) { - SERIALISE_MEMBER_TYPED(VkImageAspectFlagBits, aspectMask); + SERIALISE_MEMBER_VKFLAGS(VkImageAspectFlags, aspectMask); SERIALISE_MEMBER(mipLevel); SERIALISE_MEMBER(baseArrayLayer); SERIALISE_MEMBER(layerCount); @@ -2179,7 +2313,7 @@ void DoSerialise(SerialiserType &ser, VkImageSubresourceLayers &el) template void DoSerialise(SerialiserType &ser, VkImageSubresource &el) { - SERIALISE_MEMBER_TYPED(VkImageAspectFlagBits, aspectMask); + SERIALISE_MEMBER_VKFLAGS(VkImageAspectFlags, aspectMask); SERIALISE_MEMBER(mipLevel); SERIALISE_MEMBER(arrayLayer); } @@ -2206,8 +2340,8 @@ void DoSerialise(SerialiserType &ser, VkMemoryBarrier &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_MEMORY_BARRIER); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkAccessFlagBits, srcAccessMask); - SERIALISE_MEMBER_TYPED(VkAccessFlagBits, dstAccessMask); + SERIALISE_MEMBER_VKFLAGS(VkAccessFlags, srcAccessMask); + SERIALISE_MEMBER_VKFLAGS(VkAccessFlags, dstAccessMask); } template <> @@ -2226,8 +2360,8 @@ void DoSerialise(SerialiserType &ser, VkBufferMemoryBarrier &el) // might still have recorded some barriers on it OPTIONAL_RESOURCES(); - SERIALISE_MEMBER_TYPED(VkAccessFlagBits, srcAccessMask); - SERIALISE_MEMBER_TYPED(VkAccessFlagBits, dstAccessMask); + SERIALISE_MEMBER_VKFLAGS(VkAccessFlags, srcAccessMask); + SERIALISE_MEMBER_VKFLAGS(VkAccessFlags, dstAccessMask); // serialise as signed because then QUEUE_FAMILY_IGNORED is -1 and queue // family index won't be legitimately larger than 2 billion SERIALISE_MEMBER_TYPED(int32_t, srcQueueFamilyIndex); @@ -2253,8 +2387,8 @@ void DoSerialise(SerialiserType &ser, VkImageMemoryBarrier &el) // might still have recorded some barriers on it OPTIONAL_RESOURCES(); - SERIALISE_MEMBER_TYPED(VkAccessFlagBits, srcAccessMask); - SERIALISE_MEMBER_TYPED(VkAccessFlagBits, dstAccessMask); + SERIALISE_MEMBER_VKFLAGS(VkAccessFlags, srcAccessMask); + SERIALISE_MEMBER_VKFLAGS(VkAccessFlags, dstAccessMask); SERIALISE_MEMBER(oldLayout); SERIALISE_MEMBER(newLayout); // serialise as signed because then QUEUE_FAMILY_IGNORED is -1 and queue @@ -2277,7 +2411,7 @@ void DoSerialise(SerialiserType &ser, VkGraphicsPipelineCreateInfo &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkPipelineCreateFlagBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkPipelineCreateFlags, flags); SERIALISE_MEMBER(stageCount); SERIALISE_MEMBER_ARRAY(pStages, stageCount); @@ -2368,7 +2502,7 @@ void DoSerialise(SerialiserType &ser, VkComputePipelineCreateInfo &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkPipelineCreateFlagBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkPipelineCreateFlags, flags); SERIALISE_MEMBER(stage); SERIALISE_MEMBER(layout); @@ -2405,7 +2539,7 @@ void DoSerialise(SerialiserType &ser, VkDescriptorPoolCreateInfo &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkDescriptorPoolCreateFlagBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkDescriptorPoolCreateFlags, flags); SERIALISE_MEMBER(maxSets); SERIALISE_MEMBER(poolSizeCount); SERIALISE_MEMBER_ARRAY(pPoolSizes, poolSizeCount); @@ -2591,7 +2725,7 @@ void Deserialise(const VkCopyDescriptorSet &el) template void DoSerialise(SerialiserType &ser, VkPushConstantRange &el) { - SERIALISE_MEMBER_TYPED(VkShaderStageFlagBits, stageFlags); + SERIALISE_MEMBER_VKFLAGS(VkShaderStageFlags, stageFlags); SERIALISE_MEMBER(offset); SERIALISE_MEMBER(size); } @@ -2602,7 +2736,7 @@ void DoSerialise(SerialiserType &ser, VkDescriptorSetLayoutBinding &el) SERIALISE_MEMBER(binding); SERIALISE_MEMBER(descriptorType); SERIALISE_MEMBER(descriptorCount); - SERIALISE_MEMBER_TYPED(VkShaderStageFlagBits, stageFlags); + SERIALISE_MEMBER_VKFLAGS(VkShaderStageFlags, stageFlags); SERIALISE_MEMBER_ARRAY(pImmutableSamplers, descriptorCount); } @@ -2618,7 +2752,7 @@ void DoSerialise(SerialiserType &ser, VkDescriptorSetLayoutCreateInfo &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkDescriptorSetLayoutCreateFlagBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkDescriptorSetLayoutCreateFlags, flags); SERIALISE_MEMBER(bindingCount); SERIALISE_MEMBER_ARRAY(pBindings, bindingCount); } @@ -2740,7 +2874,7 @@ void DoSerialise(SerialiserType &ser, VkClearRect &el) template void DoSerialise(SerialiserType &ser, VkClearAttachment &el) { - SERIALISE_MEMBER_TYPED(VkImageAspectFlagBits, aspectMask); + SERIALISE_MEMBER_VKFLAGS(VkImageAspectFlags, aspectMask); SERIALISE_MEMBER(colorAttachment); SERIALISE_MEMBER(clearValue); } @@ -2799,7 +2933,7 @@ void DoSerialise(SerialiserType &ser, VkSharedPresentSurfaceCapabilitiesKHR &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkImageUsageFlagBits, sharedPresentSupportedUsageFlags); + SERIALISE_MEMBER_VKFLAGS(VkImageUsageFlags, sharedPresentSupportedUsageFlags); } template <> @@ -2814,7 +2948,7 @@ void DoSerialise(SerialiserType &ser, VkSwapchainCreateInfoKHR &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkSwapchainCreateFlagBitsKHR, flags); + SERIALISE_MEMBER_VKFLAGS(VkSwapchainCreateFlagsKHR, flags); // don't need the surface SERIALISE_MEMBER_EMPTY(surface); @@ -2824,7 +2958,7 @@ void DoSerialise(SerialiserType &ser, VkSwapchainCreateInfoKHR &el) SERIALISE_MEMBER(imageColorSpace); SERIALISE_MEMBER(imageExtent); SERIALISE_MEMBER(imageArrayLayers); - SERIALISE_MEMBER_TYPED(VkImageUsageFlagBits, imageUsage); + SERIALISE_MEMBER_VKFLAGS(VkImageUsageFlags, imageUsage); SERIALISE_MEMBER(imageSharingMode); // pQueueFamilyIndices should *only* be read if the sharing mode is concurrent, and if the capture @@ -2957,7 +3091,7 @@ void DoSerialise(SerialiserType &ser, VkDebugReportCallbackCreateInfoEXT &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkDebugReportFlagBitsEXT, flags); + SERIALISE_MEMBER_VKFLAGS(VkDebugReportFlagsEXT, flags); // serialise pointers as uint64 to ensure portability. We can't do much with the values apart from // display them @@ -2995,7 +3129,7 @@ void DoSerialise(SerialiserType &ser, VkDebugUtilsMessengerCallbackDataEXT &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkFlagWithNoBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkDebugUtilsMessengerCallbackDataFlagsEXT, flags); SERIALISE_MEMBER(pMessageIdName); SERIALISE_MEMBER(messageIdNumber); SERIALISE_MEMBER(pMessage); @@ -3026,9 +3160,9 @@ void DoSerialise(SerialiserType &ser, VkDebugUtilsMessengerCreateInfoEXT &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkFlagWithNoBits, flags); - SERIALISE_MEMBER_TYPED(VkDebugUtilsMessageSeverityFlagBitsEXT, messageSeverity); - SERIALISE_MEMBER_TYPED(VkDebugUtilsMessageTypeFlagBitsEXT, messageType); + SERIALISE_MEMBER_VKFLAGS(VkDebugUtilsMessengerCreateFlagsEXT, flags); + SERIALISE_MEMBER_VKFLAGS(VkDebugUtilsMessageSeverityFlagsEXT, messageSeverity); + SERIALISE_MEMBER_VKFLAGS(VkDebugUtilsMessageTypeFlagsEXT, messageType); // serialise pointers as uint64 to ensure portability. We can't do much with the values apart from // display them @@ -3134,7 +3268,7 @@ void DoSerialise(SerialiserType &ser, VkDescriptorUpdateTemplateCreateInfo &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkFlagWithNoBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkDescriptorUpdateTemplateCreateFlags, flags); SERIALISE_MEMBER(descriptorUpdateEntryCount); SERIALISE_MEMBER_ARRAY(pDescriptorUpdateEntries, descriptorUpdateEntryCount); SERIALISE_MEMBER(templateType); @@ -3234,7 +3368,7 @@ void DoSerialise(SerialiserType &ser, VkPipelineRasterizationConservativeStateCr el.sType == VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkFlagWithNoBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkPipelineRasterizationConservativeStateCreateFlagsEXT, flags); SERIALISE_MEMBER(conservativeRasterizationMode); SERIALISE_MEMBER(extraPrimitiveOverestimationSize); } @@ -3267,7 +3401,7 @@ void DoSerialise(SerialiserType &ser, VkImageViewUsageCreateInfo &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkImageUsageFlagBits, usage); + SERIALISE_MEMBER_VKFLAGS(VkImageUsageFlags, usage); } template <> @@ -3281,7 +3415,7 @@ void DoSerialise(SerialiserType &ser, VkInputAttachmentAspectReference &el) { SERIALISE_MEMBER(subpass); SERIALISE_MEMBER(inputAttachmentIndex); - SERIALISE_MEMBER_TYPED(VkImageAspectFlagBits, aspectMask); + SERIALISE_MEMBER_VKFLAGS(VkImageAspectFlags, aspectMask); } template @@ -3595,10 +3729,10 @@ void DoSerialise(SerialiserType &ser, VkSurfaceCapabilitiesKHR &el) SERIALISE_MEMBER(minImageExtent); SERIALISE_MEMBER(maxImageExtent); SERIALISE_MEMBER(maxImageArrayLayers); - SERIALISE_MEMBER_TYPED(VkSurfaceTransformFlagBitsKHR, supportedTransforms); + SERIALISE_MEMBER_VKFLAGS(VkSurfaceTransformFlagsKHR, supportedTransforms); SERIALISE_MEMBER(currentTransform); - SERIALISE_MEMBER_TYPED(VkCompositeAlphaFlagBitsKHR, supportedCompositeAlpha); - SERIALISE_MEMBER_TYPED(VkImageUsageFlagBits, supportedUsageFlags); + SERIALISE_MEMBER_VKFLAGS(VkCompositeAlphaFlagsKHR, supportedCompositeAlpha); + SERIALISE_MEMBER_VKFLAGS(VkImageUsageFlags, supportedUsageFlags); } template @@ -3775,7 +3909,7 @@ void DoSerialise(SerialiserType &ser, VkValidationCacheCreateInfoEXT &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkFlagWithNoBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkValidationCacheCreateFlagsEXT, flags); // don't serialise size_t, otherwise capture/replay between different bit-ness won't work { @@ -3880,7 +4014,7 @@ void DoSerialise(SerialiserType &ser, VkPipelineRasterizationStateStreamCreateIn el.sType == VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkFlagWithNoBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkPipelineRasterizationStateStreamCreateFlagsEXT, flags); SERIALISE_MEMBER(rasterizationStream); } @@ -3896,7 +4030,7 @@ void DoSerialise(SerialiserType &ser, VkAttachmentDescription2KHR &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2_KHR); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkAttachmentDescriptionFlagBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkAttachmentDescriptionFlags, flags); SERIALISE_MEMBER(format); SERIALISE_MEMBER(samples); SERIALISE_MEMBER(loadOp); @@ -3921,7 +4055,7 @@ void DoSerialise(SerialiserType &ser, VkAttachmentReference2KHR &el) SERIALISE_MEMBER(attachment); SERIALISE_MEMBER(layout); - SERIALISE_MEMBER_TYPED(VkImageAspectFlagBits, aspectMask); + SERIALISE_MEMBER_VKFLAGS(VkImageAspectFlags, aspectMask); } template <> @@ -3936,7 +4070,7 @@ void DoSerialise(SerialiserType &ser, VkSubpassDescription2KHR &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2_KHR); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkSubpassDescriptionFlagBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkSubpassDescriptionFlags, flags); SERIALISE_MEMBER(pipelineBindPoint); SERIALISE_MEMBER(viewMask); @@ -3986,11 +4120,11 @@ void DoSerialise(SerialiserType &ser, VkSubpassDependency2KHR &el) SERIALISE_MEMBER(srcSubpass); SERIALISE_MEMBER(dstSubpass); - SERIALISE_MEMBER_TYPED(VkPipelineStageFlagBits, srcStageMask); - SERIALISE_MEMBER_TYPED(VkPipelineStageFlagBits, dstStageMask); - SERIALISE_MEMBER_TYPED(VkAccessFlagBits, srcAccessMask); - SERIALISE_MEMBER_TYPED(VkAccessFlagBits, dstAccessMask); - SERIALISE_MEMBER_TYPED(VkDependencyFlagBits, dependencyFlags); + SERIALISE_MEMBER_VKFLAGS(VkPipelineStageFlags, srcStageMask); + SERIALISE_MEMBER_VKFLAGS(VkPipelineStageFlags, dstStageMask); + SERIALISE_MEMBER_VKFLAGS(VkAccessFlags, srcAccessMask); + SERIALISE_MEMBER_VKFLAGS(VkAccessFlags, dstAccessMask); + SERIALISE_MEMBER_VKFLAGS(VkDependencyFlags, dependencyFlags); SERIALISE_MEMBER(viewOffset); } @@ -4006,7 +4140,7 @@ void DoSerialise(SerialiserType &ser, VkRenderPassCreateInfo2KHR &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2_KHR); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkFlagWithNoBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkRenderPassCreateFlags, flags); SERIALISE_MEMBER(attachmentCount); SERIALISE_MEMBER_ARRAY(pAttachments, attachmentCount); SERIALISE_MEMBER(subpassCount); @@ -4098,7 +4232,7 @@ void DoSerialise(SerialiserType &ser, VkDeviceQueueInfo2 &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkDeviceQueueCreateFlagBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkDeviceQueueCreateFlags, flags); SERIALISE_MEMBER(queueFamilyIndex); SERIALISE_MEMBER(queueIndex); } @@ -4163,7 +4297,7 @@ void DoSerialise(SerialiserType &ser, VkExportMemoryAllocateInfoNV &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkExternalMemoryHandleTypeFlagBitsNV, handleTypes); + SERIALISE_MEMBER_VKFLAGS(VkExternalMemoryHandleTypeFlagsNV, handleTypes); } template <> @@ -4178,7 +4312,7 @@ void DoSerialise(SerialiserType &ser, VkExternalMemoryImageCreateInfoNV &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkExternalMemoryHandleTypeFlagBitsNV, handleTypes); + SERIALISE_MEMBER_VKFLAGS(VkExternalMemoryHandleTypeFlagsNV, handleTypes); } template <> @@ -4209,7 +4343,7 @@ void DoSerialise(SerialiserType &ser, VkExternalMemoryImageCreateInfo &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkExternalMemoryHandleTypeFlagBits, handleTypes); + SERIALISE_MEMBER_VKFLAGS(VkExternalMemoryHandleTypeFlags, handleTypes); } template <> @@ -4237,9 +4371,9 @@ void Deserialise(const VkPhysicalDeviceExternalImageFormatInfo &el) template void DoSerialise(SerialiserType &ser, VkExternalMemoryProperties &el) { - SERIALISE_MEMBER_TYPED(VkExternalMemoryFeatureFlagBits, externalMemoryFeatures); - SERIALISE_MEMBER_TYPED(VkExternalMemoryHandleTypeFlagBits, exportFromImportedHandleTypes); - SERIALISE_MEMBER_TYPED(VkExternalMemoryHandleTypeFlagBits, compatibleHandleTypes); + SERIALISE_MEMBER_VKFLAGS(VkExternalMemoryFeatureFlags, externalMemoryFeatures); + SERIALISE_MEMBER_VKFLAGS(VkExternalMemoryHandleTypeFlags, exportFromImportedHandleTypes); + SERIALISE_MEMBER_VKFLAGS(VkExternalMemoryHandleTypeFlags, compatibleHandleTypes); } template @@ -4263,8 +4397,8 @@ void DoSerialise(SerialiserType &ser, VkPhysicalDeviceExternalBufferInfo &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkBufferCreateFlagBits, flags); - SERIALISE_MEMBER_TYPED(VkBufferUsageFlagBits, usage); + SERIALISE_MEMBER_VKFLAGS(VkBufferCreateFlags, flags); + SERIALISE_MEMBER_VKFLAGS(VkBufferUsageFlags, usage); SERIALISE_MEMBER(handleType); } @@ -4314,7 +4448,7 @@ void DoSerialise(SerialiserType &ser, VkExportMemoryAllocateInfo &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkExternalMemoryHandleTypeFlagBits, handleTypes); + SERIALISE_MEMBER_VKFLAGS(VkExternalMemoryHandleTypeFlags, handleTypes); } template <> @@ -4329,7 +4463,7 @@ void DoSerialise(SerialiserType &ser, VkExternalMemoryBufferCreateInfo &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkExternalMemoryHandleTypeFlagBits, handleTypes); + SERIALISE_MEMBER_VKFLAGS(VkExternalMemoryHandleTypeFlags, handleTypes); } template <> @@ -4406,9 +4540,9 @@ void DoSerialise(SerialiserType &ser, VkExternalSemaphoreProperties &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkExternalSemaphoreHandleTypeFlagBits, exportFromImportedHandleTypes); - SERIALISE_MEMBER_TYPED(VkExternalSemaphoreHandleTypeFlagBits, compatibleHandleTypes); - SERIALISE_MEMBER_TYPED(VkExternalSemaphoreFeatureFlagBits, externalSemaphoreFeatures); + SERIALISE_MEMBER_VKFLAGS(VkExternalSemaphoreHandleTypeFlags, exportFromImportedHandleTypes); + SERIALISE_MEMBER_VKFLAGS(VkExternalSemaphoreHandleTypeFlags, compatibleHandleTypes); + SERIALISE_MEMBER_VKFLAGS(VkExternalSemaphoreFeatureFlags, externalSemaphoreFeatures); } template <> @@ -4423,7 +4557,7 @@ void DoSerialise(SerialiserType &ser, VkExportSemaphoreCreateInfo &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkExternalSemaphoreHandleTypeFlagBits, handleTypes); + SERIALISE_MEMBER_VKFLAGS(VkExternalSemaphoreHandleTypeFlags, handleTypes); } template <> @@ -4439,8 +4573,8 @@ void DoSerialise(SerialiserType &ser, VkImportSemaphoreFdInfoKHR &el) SerialiseNext(ser, el.sType, el.pNext); SERIALISE_MEMBER(semaphore); - SERIALISE_MEMBER_TYPED(VkSemaphoreImportFlagBits, flags); - SERIALISE_MEMBER_TYPED(VkExternalSemaphoreHandleTypeFlagBits, handleType); + SERIALISE_MEMBER_VKFLAGS(VkSemaphoreImportFlags, flags); + SERIALISE_MEMBER_VKFLAGS(VkExternalSemaphoreHandleTypeFlags, handleType); SERIALISE_MEMBER_TYPED(int32_t, fd); } @@ -4457,7 +4591,7 @@ void DoSerialise(SerialiserType &ser, VkSemaphoreGetFdInfoKHR &el) SerialiseNext(ser, el.sType, el.pNext); SERIALISE_MEMBER(semaphore); - SERIALISE_MEMBER_TYPED(VkExternalSemaphoreHandleTypeFlagBits, handleType); + SERIALISE_MEMBER_VKFLAGS(VkExternalSemaphoreHandleTypeFlags, handleType); } template <> @@ -4531,9 +4665,9 @@ void DoSerialise(SerialiserType &ser, VkExternalFenceProperties &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkExternalFenceHandleTypeFlagBits, exportFromImportedHandleTypes); - SERIALISE_MEMBER_TYPED(VkExternalFenceHandleTypeFlagBits, compatibleHandleTypes); - SERIALISE_MEMBER_TYPED(VkExternalFenceFeatureFlagBits, externalFenceFeatures); + SERIALISE_MEMBER_VKFLAGS(VkExternalFenceHandleTypeFlags, exportFromImportedHandleTypes); + SERIALISE_MEMBER_VKFLAGS(VkExternalFenceHandleTypeFlags, compatibleHandleTypes); + SERIALISE_MEMBER_VKFLAGS(VkExternalFenceFeatureFlags, externalFenceFeatures); } template <> @@ -4548,7 +4682,7 @@ void DoSerialise(SerialiserType &ser, VkExportFenceCreateInfo &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkExternalFenceHandleTypeFlagBits, handleTypes); + SERIALISE_MEMBER_VKFLAGS(VkExternalFenceHandleTypeFlags, handleTypes); } template <> @@ -4564,8 +4698,8 @@ void DoSerialise(SerialiserType &ser, VkImportFenceFdInfoKHR &el) SerialiseNext(ser, el.sType, el.pNext); SERIALISE_MEMBER(fence); - SERIALISE_MEMBER_TYPED(VkFenceImportFlagBits, flags); - SERIALISE_MEMBER_TYPED(VkExternalFenceHandleTypeFlagBits, handleType); + SERIALISE_MEMBER_VKFLAGS(VkFenceImportFlags, flags); + SERIALISE_MEMBER_VKFLAGS(VkExternalFenceHandleTypeFlags, handleType); SERIALISE_MEMBER_TYPED(int32_t, fd); } @@ -4641,7 +4775,7 @@ void DoSerialise(SerialiserType &ser, VkSwapchainCounterCreateInfoEXT &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkSurfaceCounterFlagBitsEXT, surfaceCounters); + SERIALISE_MEMBER_VKFLAGS(VkSurfaceCounterFlagsEXT, surfaceCounters); } template <> @@ -4662,11 +4796,11 @@ void DoSerialise(SerialiserType &ser, VkSurfaceCapabilities2EXT &el) SERIALISE_MEMBER(minImageExtent); SERIALISE_MEMBER(maxImageExtent); SERIALISE_MEMBER(maxImageArrayLayers); - SERIALISE_MEMBER_TYPED(VkSurfaceTransformFlagBitsKHR, supportedTransforms); + SERIALISE_MEMBER_VKFLAGS(VkSurfaceTransformFlagsKHR, supportedTransforms); SERIALISE_MEMBER(currentTransform); - SERIALISE_MEMBER_TYPED(VkCompositeAlphaFlagBitsKHR, supportedCompositeAlpha); - SERIALISE_MEMBER_TYPED(VkImageUsageFlagBits, supportedUsageFlags); - SERIALISE_MEMBER_TYPED(VkSurfaceCounterFlagBitsEXT, supportedSurfaceCounters); + SERIALISE_MEMBER_VKFLAGS(VkCompositeAlphaFlagsKHR, supportedCompositeAlpha); + SERIALISE_MEMBER_VKFLAGS(VkImageUsageFlags, supportedUsageFlags); + SERIALISE_MEMBER_VKFLAGS(VkSurfaceCounterFlagsEXT, supportedSurfaceCounters); } template <> @@ -4891,7 +5025,7 @@ void DoSerialise(SerialiserType &ser, VkDeviceGroupSwapchainCreateInfoKHR &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkDeviceGroupPresentModeFlagBitsKHR, modes); + SERIALISE_MEMBER_VKFLAGS(VkDeviceGroupPresentModeFlagsKHR, modes); } template <> @@ -4923,7 +5057,7 @@ void DoSerialise(SerialiserType &ser, VkDeviceGroupPresentCapabilitiesKHR &el) SerialiseNext(ser, el.sType, el.pNext); SERIALISE_MEMBER(presentMask); - SERIALISE_MEMBER_TYPED(VkDeviceGroupPresentModeFlagBitsKHR, modes); + SERIALISE_MEMBER_VKFLAGS(VkDeviceGroupPresentModeFlagsKHR, modes); } template <> @@ -4940,7 +5074,7 @@ void DoSerialise(SerialiserType &ser, VkDeviceGroupPresentInfoKHR &el) SERIALISE_MEMBER(swapchainCount); SERIALISE_MEMBER_ARRAY(pDeviceMasks, swapchainCount); - SERIALISE_MEMBER_TYPED(VkDeviceGroupPresentModeFlagBitsKHR, mode); + SERIALISE_MEMBER_VKFLAGS(VkDeviceGroupPresentModeFlagsKHR, mode); } template <> @@ -5129,7 +5263,7 @@ void DoSerialise(SerialiserType &ser, VkMemoryAllocateFlagsInfo &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkMemoryAllocateFlagBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkMemoryAllocateFlags, flags); SERIALISE_MEMBER(deviceMask); } @@ -5146,8 +5280,8 @@ void DoSerialise(SerialiserType &ser, VkPhysicalDeviceSubgroupProperties &el) SerialiseNext(ser, el.sType, el.pNext); SERIALISE_MEMBER(subgroupSize); - SERIALISE_MEMBER_TYPED(VkShaderStageFlagBits, supportedStages); - SERIALISE_MEMBER_TYPED(VkSubgroupFeatureFlagBits, supportedOperations); + SERIALISE_MEMBER_VKFLAGS(VkShaderStageFlags, supportedStages); + SERIALISE_MEMBER_VKFLAGS(VkSubgroupFeatureFlags, supportedOperations); SERIALISE_MEMBER(quadOperationsInAllStages); } @@ -5192,7 +5326,7 @@ void Deserialise(const VkDisplayPlaneInfo2KHR &el) template void DoSerialise(SerialiserType &ser, VkDisplayPlaneCapabilitiesKHR &el) { - SERIALISE_MEMBER_TYPED(VkDisplayPlaneAlphaFlagBitsKHR, supportedAlpha); + SERIALISE_MEMBER_VKFLAGS(VkDisplayPlaneAlphaFlagsKHR, supportedAlpha); SERIALISE_MEMBER(minSrcPosition); SERIALISE_MEMBER(maxSrcPosition); SERIALISE_MEMBER(minSrcExtent); @@ -5226,7 +5360,7 @@ void DoSerialise(SerialiserType &ser, VkDisplayPropertiesKHR &el) SERIALISE_MEMBER(displayName); SERIALISE_MEMBER(physicalDimensions); SERIALISE_MEMBER(physicalResolution); - SERIALISE_MEMBER_TYPED(VkSurfaceTransformFlagBitsKHR, supportedTransforms); + SERIALISE_MEMBER_VKFLAGS(VkSurfaceTransformFlagsKHR, supportedTransforms); SERIALISE_MEMBER(planeReorderPossible); SERIALISE_MEMBER(persistentContent); } @@ -5417,9 +5551,9 @@ void Deserialise(const VkPhysicalDeviceProperties2 &el) template void DoSerialise(SerialiserType &ser, VkFormatProperties &el) { - SERIALISE_MEMBER_TYPED(VkFormatFeatureFlagBits, linearTilingFeatures); - SERIALISE_MEMBER_TYPED(VkFormatFeatureFlagBits, optimalTilingFeatures); - SERIALISE_MEMBER_TYPED(VkFormatFeatureFlagBits, bufferFeatures); + SERIALISE_MEMBER_VKFLAGS(VkFormatFeatureFlags, linearTilingFeatures); + SERIALISE_MEMBER_VKFLAGS(VkFormatFeatureFlags, optimalTilingFeatures); + SERIALISE_MEMBER_VKFLAGS(VkFormatFeatureFlags, bufferFeatures); } template @@ -5443,7 +5577,7 @@ void DoSerialise(SerialiserType &ser, VkImageFormatProperties &el) SERIALISE_MEMBER(maxExtent); SERIALISE_MEMBER(maxMipLevels); SERIALISE_MEMBER(maxArrayLayers); - SERIALISE_MEMBER_TYPED(VkSampleCountFlagBits, sampleCounts); + SERIALISE_MEMBER_VKFLAGS(VkSampleCountFlags, sampleCounts); SERIALISE_MEMBER(maxResourceSize); } @@ -5471,8 +5605,8 @@ void DoSerialise(SerialiserType &ser, VkPhysicalDeviceImageFormatInfo2 &el) SERIALISE_MEMBER(format); SERIALISE_MEMBER(type); SERIALISE_MEMBER(tiling); - SERIALISE_MEMBER_TYPED(VkImageUsageFlagBits, usage); - SERIALISE_MEMBER_TYPED(VkImageCreateFlagBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkImageUsageFlags, usage); + SERIALISE_MEMBER_VKFLAGS(VkImageCreateFlags, flags); } template <> @@ -5514,9 +5648,9 @@ void Deserialise(const VkPhysicalDeviceMemoryProperties2 &el) template void DoSerialise(SerialiserType &ser, VkSparseImageFormatProperties &el) { - SERIALISE_MEMBER_TYPED(VkImageAspectFlagBits, aspectMask); + SERIALISE_MEMBER_VKFLAGS(VkImageAspectFlags, aspectMask); SERIALISE_MEMBER(imageGranularity); - SERIALISE_MEMBER_TYPED(VkSparseImageFormatFlagBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkSparseImageFormatFlags, flags); } template @@ -5544,7 +5678,7 @@ void DoSerialise(SerialiserType &ser, VkPhysicalDeviceSparseImageFormatInfo2 &el SERIALISE_MEMBER(format); SERIALISE_MEMBER(type); SERIALISE_MEMBER(samples); - SERIALISE_MEMBER_TYPED(VkImageUsageFlagBits, usage); + SERIALISE_MEMBER_VKFLAGS(VkImageUsageFlags, usage); SERIALISE_MEMBER(tiling); } @@ -5595,7 +5729,7 @@ void DoSerialise(SerialiserType &ser, VkConditionalRenderingBeginInfoEXT &el) SERIALISE_MEMBER(buffer); SERIALISE_MEMBER(offset); - SERIALISE_MEMBER_TYPED(VkConditionalRenderingFlagsEXT, flags); + SERIALISE_MEMBER_VKFLAGS(VkConditionalRenderingFlagsEXT, flags); } template <> @@ -5884,7 +6018,7 @@ void DoSerialise(SerialiserType &ser, VkImportMemoryWin32HandleInfoNV &el) RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV); SerialiseNext(ser, el.sType, el.pNext); - SERIALISE_MEMBER_TYPED(VkExternalMemoryHandleTypeFlagBitsNV, handleType); + SERIALISE_MEMBER_VKFLAGS(VkExternalMemoryHandleTypeFlagsNV, handleType); { uint64_t handle = (uint64_t)el.handle; @@ -6078,7 +6212,7 @@ void DoSerialise(SerialiserType &ser, VkImportFenceWin32HandleInfoKHR &el) SerialiseNext(ser, el.sType, el.pNext); SERIALISE_MEMBER(fence); - SERIALISE_MEMBER_TYPED(VkFenceImportFlagBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkFenceImportFlags, flags); SERIALISE_MEMBER(handleType); { @@ -6171,7 +6305,7 @@ void DoSerialise(SerialiserType &ser, VkImportSemaphoreWin32HandleInfoKHR &el) SerialiseNext(ser, el.sType, el.pNext); SERIALISE_MEMBER(semaphore); - SERIALISE_MEMBER_TYPED(VkSemaphoreImportFlagBits, flags); + SERIALISE_MEMBER_VKFLAGS(VkSemaphoreImportFlags, flags); SERIALISE_MEMBER(handleType); { diff --git a/renderdoc/driver/vulkan/vk_stringise.cpp b/renderdoc/driver/vulkan/vk_stringise.cpp index 4122fffdb..209b52ba4 100644 --- a/renderdoc/driver/vulkan/vk_stringise.cpp +++ b/renderdoc/driver/vulkan/vk_stringise.cpp @@ -740,6 +740,16 @@ std::string DoStringise(const VkDebugUtilsMessageSeverityFlagBitsEXT &el) END_BITFIELD_STRINGISE(); } +template <> +std::string DoStringise(const VkConditionalRenderingFlagBitsEXT &el) +{ + BEGIN_BITFIELD_STRINGISE(VkConditionalRenderingFlagBitsEXT); + { + STRINGISE_BITFIELD_BIT(VK_CONDITIONAL_RENDERING_INVERTED_BIT_EXT); + } + END_BITFIELD_STRINGISE(); +} + template <> std::string DoStringise(const VkDebugUtilsMessageTypeFlagBitsEXT &el) { diff --git a/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp index a8ad95f3e..e6d404d25 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp @@ -2411,7 +2411,7 @@ bool WrappedVulkan::Serialise_vkCmdPushConstants(SerialiserType &ser, VkCommandB { SERIALISE_ELEMENT(commandBuffer); SERIALISE_ELEMENT(layout); - SERIALISE_ELEMENT_TYPED(VkShaderStageFlagBits, stageFlags); + SERIALISE_ELEMENT_TYPED(VkShaderStageFlagBits, stageFlags).TypedAs("VkShaderStageFlags"); SERIALISE_ELEMENT(start); SERIALISE_ELEMENT(length); SERIALISE_ELEMENT_ARRAY(values, length); @@ -2487,9 +2487,9 @@ bool WrappedVulkan::Serialise_vkCmdPipelineBarrier( uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier *pImageMemoryBarriers) { SERIALISE_ELEMENT(commandBuffer); - SERIALISE_ELEMENT_TYPED(VkPipelineStageFlagBits, srcStageMask); - SERIALISE_ELEMENT_TYPED(VkPipelineStageFlagBits, destStageMask); - SERIALISE_ELEMENT_TYPED(VkDependencyFlagBits, dependencyFlags); + SERIALISE_ELEMENT_TYPED(VkPipelineStageFlagBits, srcStageMask).TypedAs("VkPipelineStageFlags"); + SERIALISE_ELEMENT_TYPED(VkPipelineStageFlagBits, destStageMask).TypedAs("VkPipelineStageFlags"); + SERIALISE_ELEMENT_TYPED(VkDependencyFlagBits, dependencyFlags).TypedAs("VkDependencyFlags"); SERIALISE_ELEMENT(memoryBarrierCount); SERIALISE_ELEMENT_ARRAY(pMemoryBarriers, memoryBarrierCount); SERIALISE_ELEMENT(bufferMemoryBarrierCount); @@ -2710,7 +2710,7 @@ bool WrappedVulkan::Serialise_vkCmdCopyQueryPoolResults( SERIALISE_ELEMENT(destBuffer); SERIALISE_ELEMENT(destOffset); SERIALISE_ELEMENT(destStride); - SERIALISE_ELEMENT_TYPED(VkQueryResultFlagBits, flags); + SERIALISE_ELEMENT_TYPED(VkQueryResultFlagBits, flags).TypedAs("VkQueryResultFlags"); Serialise_DebugMessages(ser); @@ -2784,7 +2784,7 @@ bool WrappedVulkan::Serialise_vkCmdBeginQuery(SerialiserType &ser, VkCommandBuff SERIALISE_ELEMENT(commandBuffer); SERIALISE_ELEMENT(queryPool); SERIALISE_ELEMENT(query); - SERIALISE_ELEMENT_TYPED(VkQueryControlFlagBits, flags); + SERIALISE_ELEMENT_TYPED(VkQueryControlFlagBits, flags).TypedAs("VkQueryControlFlags"); Serialise_DebugMessages(ser); @@ -4659,7 +4659,7 @@ bool WrappedVulkan::Serialise_vkCmdBeginQueryIndexedEXT(SerialiserType &ser, SERIALISE_ELEMENT(commandBuffer); SERIALISE_ELEMENT(queryPool); SERIALISE_ELEMENT(query); - SERIALISE_ELEMENT_TYPED(VkQueryControlFlagBits, flags); + SERIALISE_ELEMENT_TYPED(VkQueryControlFlagBits, flags).TypedAs("VkQueryControlFlags"); SERIALISE_ELEMENT(index); Serialise_DebugMessages(ser); diff --git a/renderdoc/driver/vulkan/wrappers/vk_dynamic_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_dynamic_funcs.cpp index f11d842a1..e43d6f1d7 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_dynamic_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_dynamic_funcs.cpp @@ -410,7 +410,7 @@ bool WrappedVulkan::Serialise_vkCmdSetStencilCompareMask(SerialiserType &ser, uint32_t compareMask) { SERIALISE_ELEMENT(commandBuffer); - SERIALISE_ELEMENT_TYPED(VkStencilFaceFlagBits, faceMask); + SERIALISE_ELEMENT_TYPED(VkStencilFaceFlagBits, faceMask).TypedAs("VkStencilFaceFlags"); SERIALISE_ELEMENT(compareMask); Serialise_DebugMessages(ser); @@ -476,7 +476,7 @@ bool WrappedVulkan::Serialise_vkCmdSetStencilWriteMask(SerialiserType &ser, uint32_t writeMask) { SERIALISE_ELEMENT(commandBuffer); - SERIALISE_ELEMENT_TYPED(VkStencilFaceFlagBits, faceMask); + SERIALISE_ELEMENT_TYPED(VkStencilFaceFlagBits, faceMask).TypedAs("VkStencilFaceFlags"); SERIALISE_ELEMENT(writeMask); Serialise_DebugMessages(ser); @@ -542,7 +542,7 @@ bool WrappedVulkan::Serialise_vkCmdSetStencilReference(SerialiserType &ser, uint32_t reference) { SERIALISE_ELEMENT(commandBuffer); - SERIALISE_ELEMENT_TYPED(VkStencilFaceFlagBits, faceMask); + SERIALISE_ELEMENT_TYPED(VkStencilFaceFlagBits, faceMask).TypedAs("VkStencilFaceFlags"); SERIALISE_ELEMENT(reference); Serialise_DebugMessages(ser); diff --git a/renderdoc/driver/vulkan/wrappers/vk_sync_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_sync_funcs.cpp index 86d065cdb..e9ab1ca78 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_sync_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_sync_funcs.cpp @@ -615,7 +615,7 @@ bool WrappedVulkan::Serialise_vkCmdSetEvent(SerialiserType &ser, VkCommandBuffer { SERIALISE_ELEMENT(commandBuffer); SERIALISE_ELEMENT(event); - SERIALISE_ELEMENT_TYPED(VkPipelineStageFlagBits, stageMask); + SERIALISE_ELEMENT_TYPED(VkPipelineStageFlagBits, stageMask).TypedAs("VkPipelineStageFlags"); Serialise_DebugMessages(ser); @@ -670,7 +670,7 @@ bool WrappedVulkan::Serialise_vkCmdResetEvent(SerialiserType &ser, VkCommandBuff { SERIALISE_ELEMENT(commandBuffer); SERIALISE_ELEMENT(event); - SERIALISE_ELEMENT_TYPED(VkPipelineStageFlagBits, stageMask); + SERIALISE_ELEMENT_TYPED(VkPipelineStageFlagBits, stageMask).TypedAs("VkPipelineStageFlags"); Serialise_DebugMessages(ser); @@ -735,8 +735,8 @@ bool WrappedVulkan::Serialise_vkCmdWaitEvents( SERIALISE_ELEMENT(eventCount); SERIALISE_ELEMENT_ARRAY(pEvents, eventCount); - SERIALISE_ELEMENT_TYPED(VkPipelineStageFlagBits, srcStageMask); - SERIALISE_ELEMENT_TYPED(VkPipelineStageFlagBits, dstStageMask); + SERIALISE_ELEMENT_TYPED(VkPipelineStageFlagBits, srcStageMask).TypedAs("VkPipelineStageFlags"); + SERIALISE_ELEMENT_TYPED(VkPipelineStageFlagBits, dstStageMask).TypedAs("VkPipelineStageFlags"); SERIALISE_ELEMENT(memoryBarrierCount); SERIALISE_ELEMENT_ARRAY(pMemoryBarriers, memoryBarrierCount); diff --git a/renderdoc/serialise/serialiser.h b/renderdoc/serialise/serialiser.h index 8e68682df..01b02eca6 100644 --- a/renderdoc/serialise/serialiser.h +++ b/renderdoc/serialise/serialiser.h @@ -1323,7 +1323,13 @@ public: SDObject ¤t = *m_StructureStack.back(); if(!current.data.children.empty()) - current.data.children.back()->type.name = name; + { + SDObject *last = current.data.children.back(); + last->type.name = name; + + for(SDObject *obj : last->data.children) + obj->type.name = name; + } } return *this;