mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-04 17:10:47 +00:00
Enable support for EXT_descriptor_indexing. Closes #1111
This commit is contained in:
@@ -618,8 +618,11 @@ DECLARE_REFLECTION_STRUCT(VkDedicatedAllocationImageCreateInfoNV);
|
||||
DECLARE_REFLECTION_STRUCT(VkDedicatedAllocationMemoryAllocateInfoNV);
|
||||
DECLARE_REFLECTION_STRUCT(VkDescriptorPoolCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkDescriptorSetAllocateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkDescriptorSetLayoutBindingFlagsCreateInfoEXT)
|
||||
DECLARE_REFLECTION_STRUCT(VkDescriptorSetLayoutCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkDescriptorSetLayoutSupport);
|
||||
DECLARE_REFLECTION_STRUCT(VkDescriptorSetVariableDescriptorCountAllocateInfoEXT)
|
||||
DECLARE_REFLECTION_STRUCT(VkDescriptorSetVariableDescriptorCountLayoutSupportEXT)
|
||||
DECLARE_REFLECTION_STRUCT(VkDescriptorUpdateTemplateCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkDeviceCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkDeviceEventInfoEXT);
|
||||
@@ -696,6 +699,8 @@ DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceConditionalRenderingFeaturesEXT);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceConservativeRasterizationPropertiesEXT);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceDepthClipEnableFeaturesEXT);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceDepthStencilResolvePropertiesKHR);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceDescriptorIndexingFeaturesEXT)
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceDescriptorIndexingPropertiesEXT)
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceDiscardRectanglePropertiesEXT);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceDriverPropertiesKHR);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceExternalBufferInfo);
|
||||
@@ -843,8 +848,11 @@ DECLARE_DESERIALISE_TYPE(VkDedicatedAllocationImageCreateInfoNV);
|
||||
DECLARE_DESERIALISE_TYPE(VkDedicatedAllocationMemoryAllocateInfoNV);
|
||||
DECLARE_DESERIALISE_TYPE(VkDescriptorPoolCreateInfo);
|
||||
DECLARE_DESERIALISE_TYPE(VkDescriptorSetAllocateInfo);
|
||||
DECLARE_DESERIALISE_TYPE(VkDescriptorSetLayoutBindingFlagsCreateInfoEXT)
|
||||
DECLARE_DESERIALISE_TYPE(VkDescriptorSetLayoutCreateInfo);
|
||||
DECLARE_DESERIALISE_TYPE(VkDescriptorSetLayoutSupport);
|
||||
DECLARE_DESERIALISE_TYPE(VkDescriptorSetVariableDescriptorCountAllocateInfoEXT)
|
||||
DECLARE_DESERIALISE_TYPE(VkDescriptorSetVariableDescriptorCountLayoutSupportEXT)
|
||||
DECLARE_DESERIALISE_TYPE(VkDescriptorUpdateTemplateCreateInfo);
|
||||
DECLARE_DESERIALISE_TYPE(VkDeviceCreateInfo);
|
||||
DECLARE_DESERIALISE_TYPE(VkDeviceEventInfoEXT);
|
||||
@@ -920,6 +928,8 @@ DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceConditionalRenderingFeaturesEXT);
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceConservativeRasterizationPropertiesEXT);
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceDepthClipEnableFeaturesEXT);
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceDepthStencilResolvePropertiesKHR);
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceDescriptorIndexingFeaturesEXT)
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceDescriptorIndexingPropertiesEXT)
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceDiscardRectanglePropertiesEXT);
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceDriverPropertiesKHR);
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceExternalBufferInfo);
|
||||
@@ -1173,6 +1183,7 @@ DECLARE_REFLECTION_ENUM(VkDebugReportFlagBitsEXT);
|
||||
DECLARE_REFLECTION_ENUM(VkDebugUtilsMessageSeverityFlagBitsEXT);
|
||||
DECLARE_REFLECTION_ENUM(VkDebugUtilsMessageTypeFlagBitsEXT);
|
||||
DECLARE_REFLECTION_ENUM(VkDependencyFlagBits);
|
||||
DECLARE_REFLECTION_ENUM(VkDescriptorBindingFlagBitsEXT);
|
||||
DECLARE_REFLECTION_ENUM(VkDescriptorPoolCreateFlagBits);
|
||||
DECLARE_REFLECTION_ENUM(VkDescriptorSetLayoutCreateFlagBits);
|
||||
DECLARE_REFLECTION_ENUM(VkDescriptorType);
|
||||
|
||||
@@ -660,6 +660,9 @@ static const VkExtensionProperties supportedExtensions[] = {
|
||||
{
|
||||
VK_EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME, VK_EXT_DEPTH_RANGE_UNRESTRICTED_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME, VK_EXT_DESCRIPTOR_INDEXING_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME, VK_EXT_DIRECT_MODE_DISPLAY_SPEC_VERSION,
|
||||
},
|
||||
|
||||
@@ -99,7 +99,13 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV, \
|
||||
VkDedicatedAllocationImageCreateInfoNV); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO, VkDescriptorPoolCreateInfo); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT, \
|
||||
VkDescriptorSetLayoutBindingFlagsCreateInfoEXT); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT, VkDescriptorSetLayoutSupport); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT, \
|
||||
VkDescriptorSetVariableDescriptorCountAllocateInfoEXT); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT, \
|
||||
VkDescriptorSetVariableDescriptorCountLayoutSupportEXT); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, VkDeviceCreateInfo); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO, VkDeviceGroupBindSparseInfo); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO, \
|
||||
@@ -164,6 +170,10 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
|
||||
VkPhysicalDeviceDepthClipEnableFeaturesEXT) \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES_KHR, \
|
||||
VkPhysicalDeviceDepthStencilResolvePropertiesKHR); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT, \
|
||||
VkPhysicalDeviceDescriptorIndexingFeaturesEXT); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT, \
|
||||
VkPhysicalDeviceDescriptorIndexingPropertiesEXT); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT, \
|
||||
VkPhysicalDeviceDiscardRectanglePropertiesEXT); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR, \
|
||||
@@ -452,9 +462,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
|
||||
case VK_STRUCTURE_TYPE_CMD_RESERVE_SPACE_FOR_COMMANDS_INFO_NVX: \
|
||||
case VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV: \
|
||||
case VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT: \
|
||||
case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT: \
|
||||
case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT: \
|
||||
case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT: \
|
||||
case VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_FEATURES_NVX: \
|
||||
case VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_LIMITS_NVX: \
|
||||
case VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD: \
|
||||
@@ -482,8 +489,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV: \
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV: \
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV: \
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT: \
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT: \
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV: \
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT: \
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV: \
|
||||
|
||||
@@ -153,6 +153,7 @@ DECL_VKFLAG_EXT(VkSurfaceTransform, KHR);
|
||||
DECL_VKFLAG_EXT(VkSwapchainCreate, KHR);
|
||||
DECL_VKFLAG_EMPTY_EXT(VkValidationCacheCreate, EXT);
|
||||
DECL_VKFLAG_EMPTY_EXT(VkPipelineRasterizationDepthClipStateCreate, EXT);
|
||||
DECL_VKFLAG_EXT(VkDescriptorBinding, EXT);
|
||||
|
||||
// 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
|
||||
@@ -160,6 +161,9 @@ DECL_VKFLAG_EMPTY_EXT(VkPipelineRasterizationDepthClipStateCreate, EXT);
|
||||
#define SERIALISE_MEMBER_VKFLAGS(flagstype, name) \
|
||||
SERIALISE_MEMBER_TYPED(CONCAT(flagstype, Bits), name).TypedAs(STRINGIZE(flagstype))
|
||||
|
||||
#define SERIALISE_MEMBER_ARRAY_VKFLAGS(flagstype, name, count) \
|
||||
SERIALISE_MEMBER_ARRAY_TYPED(CONCAT(flagstype, Bits), name, count).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.
|
||||
@@ -462,6 +466,18 @@ SERIALISE_VK_HANDLES();
|
||||
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT, \
|
||||
VkPipelineRasterizationDepthClipStateCreateInfoEXT) \
|
||||
\
|
||||
/* VK_EXT_descriptor_indexing */ \
|
||||
PNEXT_STRUCT(VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT, \
|
||||
VkDescriptorSetLayoutBindingFlagsCreateInfoEXT) \
|
||||
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT, \
|
||||
VkPhysicalDeviceDescriptorIndexingFeaturesEXT) \
|
||||
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT, \
|
||||
VkPhysicalDeviceDescriptorIndexingPropertiesEXT) \
|
||||
PNEXT_STRUCT(VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT, \
|
||||
VkDescriptorSetVariableDescriptorCountAllocateInfoEXT) \
|
||||
PNEXT_STRUCT(VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT, \
|
||||
VkDescriptorSetVariableDescriptorCountLayoutSupportEXT) \
|
||||
\
|
||||
/* VK_EXT_discard_rectangles */ \
|
||||
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT, \
|
||||
VkPhysicalDeviceDiscardRectanglePropertiesEXT) \
|
||||
@@ -834,13 +850,6 @@ SERIALISE_VK_HANDLES();
|
||||
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT) \
|
||||
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT) \
|
||||
\
|
||||
/* VK_EXT_descriptor_indexing */ \
|
||||
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT) \
|
||||
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT) \
|
||||
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT) \
|
||||
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT) \
|
||||
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT) \
|
||||
\
|
||||
/* VK_EXT_external_memory_host */ \
|
||||
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT) \
|
||||
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT) \
|
||||
@@ -5187,6 +5196,131 @@ void Deserialise(const VkFenceGetFdInfoKHR &el)
|
||||
DeserialiseNext(el.pNext);
|
||||
}
|
||||
|
||||
template <typename SerialiserType>
|
||||
void DoSerialise(SerialiserType &ser, VkDescriptorSetLayoutBindingFlagsCreateInfoEXT &el)
|
||||
{
|
||||
RDCASSERT(ser.IsReading() ||
|
||||
el.sType == VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT);
|
||||
SerialiseNext(ser, el.sType, el.pNext);
|
||||
|
||||
SERIALISE_MEMBER(bindingCount);
|
||||
SERIALISE_MEMBER_ARRAY_VKFLAGS(VkDescriptorBindingFlagsEXT, pBindingFlags, bindingCount);
|
||||
}
|
||||
|
||||
template <>
|
||||
void Deserialise(const VkDescriptorSetLayoutBindingFlagsCreateInfoEXT &el)
|
||||
{
|
||||
DeserialiseNext(el.pNext);
|
||||
delete[] el.pBindingFlags;
|
||||
}
|
||||
|
||||
template <typename SerialiserType>
|
||||
void DoSerialise(SerialiserType &ser, VkPhysicalDeviceDescriptorIndexingFeaturesEXT &el)
|
||||
{
|
||||
RDCASSERT(ser.IsReading() ||
|
||||
el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT);
|
||||
SerialiseNext(ser, el.sType, el.pNext);
|
||||
|
||||
SERIALISE_MEMBER(shaderInputAttachmentArrayDynamicIndexing);
|
||||
SERIALISE_MEMBER(shaderUniformTexelBufferArrayDynamicIndexing);
|
||||
SERIALISE_MEMBER(shaderStorageTexelBufferArrayDynamicIndexing);
|
||||
SERIALISE_MEMBER(shaderUniformBufferArrayNonUniformIndexing);
|
||||
SERIALISE_MEMBER(shaderSampledImageArrayNonUniformIndexing);
|
||||
SERIALISE_MEMBER(shaderStorageBufferArrayNonUniformIndexing);
|
||||
SERIALISE_MEMBER(shaderStorageImageArrayNonUniformIndexing);
|
||||
SERIALISE_MEMBER(shaderInputAttachmentArrayNonUniformIndexing);
|
||||
SERIALISE_MEMBER(shaderUniformTexelBufferArrayNonUniformIndexing);
|
||||
SERIALISE_MEMBER(shaderStorageTexelBufferArrayNonUniformIndexing);
|
||||
SERIALISE_MEMBER(descriptorBindingUniformBufferUpdateAfterBind);
|
||||
SERIALISE_MEMBER(descriptorBindingSampledImageUpdateAfterBind);
|
||||
SERIALISE_MEMBER(descriptorBindingStorageImageUpdateAfterBind);
|
||||
SERIALISE_MEMBER(descriptorBindingStorageBufferUpdateAfterBind);
|
||||
SERIALISE_MEMBER(descriptorBindingUniformTexelBufferUpdateAfterBind);
|
||||
SERIALISE_MEMBER(descriptorBindingStorageTexelBufferUpdateAfterBind);
|
||||
SERIALISE_MEMBER(descriptorBindingUpdateUnusedWhilePending);
|
||||
SERIALISE_MEMBER(descriptorBindingPartiallyBound);
|
||||
SERIALISE_MEMBER(descriptorBindingVariableDescriptorCount);
|
||||
SERIALISE_MEMBER(runtimeDescriptorArray);
|
||||
}
|
||||
|
||||
template <>
|
||||
void Deserialise(const VkPhysicalDeviceDescriptorIndexingFeaturesEXT &el)
|
||||
{
|
||||
DeserialiseNext(el.pNext);
|
||||
}
|
||||
|
||||
template <typename SerialiserType>
|
||||
void DoSerialise(SerialiserType &ser, VkPhysicalDeviceDescriptorIndexingPropertiesEXT &el)
|
||||
{
|
||||
RDCASSERT(ser.IsReading() ||
|
||||
el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT);
|
||||
SerialiseNext(ser, el.sType, el.pNext);
|
||||
|
||||
SERIALISE_MEMBER(maxUpdateAfterBindDescriptorsInAllPools);
|
||||
SERIALISE_MEMBER(shaderUniformBufferArrayNonUniformIndexingNative);
|
||||
SERIALISE_MEMBER(shaderSampledImageArrayNonUniformIndexingNative);
|
||||
SERIALISE_MEMBER(shaderStorageBufferArrayNonUniformIndexingNative);
|
||||
SERIALISE_MEMBER(shaderStorageImageArrayNonUniformIndexingNative);
|
||||
SERIALISE_MEMBER(shaderInputAttachmentArrayNonUniformIndexingNative);
|
||||
SERIALISE_MEMBER(robustBufferAccessUpdateAfterBind);
|
||||
SERIALISE_MEMBER(quadDivergentImplicitLod);
|
||||
SERIALISE_MEMBER(maxPerStageDescriptorUpdateAfterBindSamplers);
|
||||
SERIALISE_MEMBER(maxPerStageDescriptorUpdateAfterBindUniformBuffers);
|
||||
SERIALISE_MEMBER(maxPerStageDescriptorUpdateAfterBindStorageBuffers);
|
||||
SERIALISE_MEMBER(maxPerStageDescriptorUpdateAfterBindSampledImages);
|
||||
SERIALISE_MEMBER(maxPerStageDescriptorUpdateAfterBindStorageImages);
|
||||
SERIALISE_MEMBER(maxPerStageDescriptorUpdateAfterBindInputAttachments);
|
||||
SERIALISE_MEMBER(maxPerStageUpdateAfterBindResources);
|
||||
SERIALISE_MEMBER(maxDescriptorSetUpdateAfterBindSamplers);
|
||||
SERIALISE_MEMBER(maxDescriptorSetUpdateAfterBindUniformBuffers);
|
||||
SERIALISE_MEMBER(maxDescriptorSetUpdateAfterBindUniformBuffersDynamic);
|
||||
SERIALISE_MEMBER(maxDescriptorSetUpdateAfterBindStorageBuffers);
|
||||
SERIALISE_MEMBER(maxDescriptorSetUpdateAfterBindStorageBuffersDynamic);
|
||||
SERIALISE_MEMBER(maxDescriptorSetUpdateAfterBindSampledImages);
|
||||
SERIALISE_MEMBER(maxDescriptorSetUpdateAfterBindStorageImages);
|
||||
SERIALISE_MEMBER(maxDescriptorSetUpdateAfterBindInputAttachments);
|
||||
}
|
||||
|
||||
template <>
|
||||
void Deserialise(const VkPhysicalDeviceDescriptorIndexingPropertiesEXT &el)
|
||||
{
|
||||
DeserialiseNext(el.pNext);
|
||||
}
|
||||
|
||||
template <typename SerialiserType>
|
||||
void DoSerialise(SerialiserType &ser, VkDescriptorSetVariableDescriptorCountAllocateInfoEXT &el)
|
||||
{
|
||||
RDCASSERT(ser.IsReading() ||
|
||||
el.sType == VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT);
|
||||
SerialiseNext(ser, el.sType, el.pNext);
|
||||
|
||||
SERIALISE_MEMBER(descriptorSetCount);
|
||||
SERIALISE_MEMBER_ARRAY(pDescriptorCounts, descriptorSetCount);
|
||||
}
|
||||
|
||||
template <>
|
||||
void Deserialise(const VkDescriptorSetVariableDescriptorCountAllocateInfoEXT &el)
|
||||
{
|
||||
DeserialiseNext(el.pNext);
|
||||
delete[] el.pDescriptorCounts;
|
||||
}
|
||||
|
||||
template <typename SerialiserType>
|
||||
void DoSerialise(SerialiserType &ser, VkDescriptorSetVariableDescriptorCountLayoutSupportEXT &el)
|
||||
{
|
||||
RDCASSERT(ser.IsReading() ||
|
||||
el.sType == VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT);
|
||||
SerialiseNext(ser, el.sType, el.pNext);
|
||||
|
||||
SERIALISE_MEMBER(maxVariableDescriptorCount);
|
||||
}
|
||||
|
||||
template <>
|
||||
void Deserialise(const VkDescriptorSetVariableDescriptorCountLayoutSupportEXT &el)
|
||||
{
|
||||
DeserialiseNext(el.pNext);
|
||||
}
|
||||
|
||||
template <typename SerialiserType>
|
||||
void DoSerialise(SerialiserType &ser, VkPhysicalDeviceDiscardRectanglePropertiesEXT &el)
|
||||
{
|
||||
@@ -6467,8 +6601,11 @@ INSTANTIATE_SERIALISE_TYPE(VkDedicatedAllocationImageCreateInfoNV);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkDedicatedAllocationMemoryAllocateInfoNV);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkDescriptorPoolCreateInfo);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkDescriptorSetAllocateInfo);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkDescriptorSetLayoutBindingFlagsCreateInfoEXT)
|
||||
INSTANTIATE_SERIALISE_TYPE(VkDescriptorSetLayoutCreateInfo);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkDescriptorSetLayoutSupport);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkDescriptorSetVariableDescriptorCountAllocateInfoEXT)
|
||||
INSTANTIATE_SERIALISE_TYPE(VkDescriptorSetVariableDescriptorCountLayoutSupportEXT)
|
||||
INSTANTIATE_SERIALISE_TYPE(VkDescriptorUpdateTemplateCreateInfo);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkDeviceCreateInfo);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkDeviceEventInfoEXT);
|
||||
@@ -6545,6 +6682,8 @@ INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceConditionalRenderingFeaturesEXT);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceConservativeRasterizationPropertiesEXT);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceDepthStencilResolvePropertiesKHR);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceDepthClipEnableFeaturesEXT);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceDescriptorIndexingFeaturesEXT)
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceDescriptorIndexingPropertiesEXT)
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceDiscardRectanglePropertiesEXT);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceDriverPropertiesKHR);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceExternalBufferInfo);
|
||||
|
||||
@@ -2448,6 +2448,19 @@ std::string DoStringise(const VkPipelineCreationFeedbackFlagBitsEXT &el)
|
||||
END_BITFIELD_STRINGISE();
|
||||
}
|
||||
|
||||
template <>
|
||||
std::string DoStringise(const VkDescriptorBindingFlagBitsEXT &el)
|
||||
{
|
||||
BEGIN_BITFIELD_STRINGISE(VkDescriptorBindingFlagBitsEXT);
|
||||
{
|
||||
STRINGISE_BITFIELD_BIT(VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT)
|
||||
STRINGISE_BITFIELD_BIT(VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT)
|
||||
STRINGISE_BITFIELD_BIT(VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT)
|
||||
STRINGISE_BITFIELD_BIT(VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT)
|
||||
}
|
||||
END_BITFIELD_STRINGISE();
|
||||
}
|
||||
|
||||
template <>
|
||||
std::string DoStringise(const VkExtent3D &el)
|
||||
{
|
||||
|
||||
@@ -1759,6 +1759,8 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi
|
||||
return false; \
|
||||
}
|
||||
|
||||
VkPhysicalDeviceDescriptorIndexingFeaturesEXT descIndexingFeatures = {};
|
||||
|
||||
if(ObjDisp(physicalDevice)->GetPhysicalDeviceFeatures2)
|
||||
{
|
||||
BEGIN_PHYS_EXT_CHECK(VkPhysicalDevice8BitStorageFeaturesKHR,
|
||||
@@ -1927,6 +1929,34 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi
|
||||
}
|
||||
}
|
||||
END_PHYS_EXT_CHECK();
|
||||
|
||||
BEGIN_PHYS_EXT_CHECK(VkPhysicalDeviceDescriptorIndexingFeaturesEXT,
|
||||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT);
|
||||
{
|
||||
descIndexingFeatures = *ext;
|
||||
|
||||
CHECK_PHYS_EXT_FEATURE(shaderInputAttachmentArrayDynamicIndexing);
|
||||
CHECK_PHYS_EXT_FEATURE(shaderUniformTexelBufferArrayDynamicIndexing);
|
||||
CHECK_PHYS_EXT_FEATURE(shaderStorageTexelBufferArrayDynamicIndexing);
|
||||
CHECK_PHYS_EXT_FEATURE(shaderUniformBufferArrayNonUniformIndexing);
|
||||
CHECK_PHYS_EXT_FEATURE(shaderSampledImageArrayNonUniformIndexing);
|
||||
CHECK_PHYS_EXT_FEATURE(shaderStorageBufferArrayNonUniformIndexing);
|
||||
CHECK_PHYS_EXT_FEATURE(shaderStorageImageArrayNonUniformIndexing);
|
||||
CHECK_PHYS_EXT_FEATURE(shaderInputAttachmentArrayNonUniformIndexing);
|
||||
CHECK_PHYS_EXT_FEATURE(shaderUniformTexelBufferArrayNonUniformIndexing);
|
||||
CHECK_PHYS_EXT_FEATURE(shaderStorageTexelBufferArrayNonUniformIndexing);
|
||||
CHECK_PHYS_EXT_FEATURE(descriptorBindingUniformBufferUpdateAfterBind);
|
||||
CHECK_PHYS_EXT_FEATURE(descriptorBindingSampledImageUpdateAfterBind);
|
||||
CHECK_PHYS_EXT_FEATURE(descriptorBindingStorageImageUpdateAfterBind);
|
||||
CHECK_PHYS_EXT_FEATURE(descriptorBindingStorageBufferUpdateAfterBind);
|
||||
CHECK_PHYS_EXT_FEATURE(descriptorBindingUniformTexelBufferUpdateAfterBind);
|
||||
CHECK_PHYS_EXT_FEATURE(descriptorBindingStorageTexelBufferUpdateAfterBind);
|
||||
CHECK_PHYS_EXT_FEATURE(descriptorBindingUpdateUnusedWhilePending);
|
||||
CHECK_PHYS_EXT_FEATURE(descriptorBindingPartiallyBound);
|
||||
CHECK_PHYS_EXT_FEATURE(descriptorBindingVariableDescriptorCount);
|
||||
CHECK_PHYS_EXT_FEATURE(runtimeDescriptorArray);
|
||||
}
|
||||
END_PHYS_EXT_CHECK();
|
||||
}
|
||||
|
||||
if(availFeatures.depthClamp)
|
||||
@@ -1947,12 +1977,44 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi
|
||||
"geometryShader = false, lit mesh rendering will not be available if rendering on this "
|
||||
"device.");
|
||||
|
||||
if(availFeatures.robustBufferAccess)
|
||||
enabledFeatures.robustBufferAccess = true;
|
||||
else
|
||||
bool descIndexingAllowsRBA = true;
|
||||
|
||||
if(descIndexingFeatures.descriptorBindingUniformBufferUpdateAfterBind ||
|
||||
descIndexingFeatures.descriptorBindingStorageBufferUpdateAfterBind ||
|
||||
descIndexingFeatures.descriptorBindingUniformTexelBufferUpdateAfterBind ||
|
||||
descIndexingFeatures.descriptorBindingStorageTexelBufferUpdateAfterBind)
|
||||
{
|
||||
// if any update after bind feature is enabled, check robustBufferAccessUpdateAfterBind
|
||||
VkPhysicalDeviceDescriptorIndexingPropertiesEXT descIndexingProps = {
|
||||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT,
|
||||
};
|
||||
|
||||
VkPhysicalDeviceProperties2 availBase = {VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2};
|
||||
availBase.pNext = &descIndexingProps;
|
||||
ObjDisp(physicalDevice)->GetPhysicalDeviceProperties2(Unwrap(physicalDevice), &availBase);
|
||||
|
||||
descIndexingAllowsRBA = descIndexingProps.robustBufferAccessUpdateAfterBind != VK_FALSE;
|
||||
}
|
||||
|
||||
if(availFeatures.robustBufferAccess && !descIndexingAllowsRBA)
|
||||
{
|
||||
// if the feature is available but we can't use it, warn
|
||||
RDCWARN(
|
||||
"robustBufferAccess = false, out of bounds access due to bugs in application or "
|
||||
"RenderDoc may cause crashes");
|
||||
"robustBufferAccess is available, but cannot be enabled due to "
|
||||
"robustBufferAccessUpdateAfterBind not being avilable and some UpdateAfterBind features "
|
||||
"being enabled. "
|
||||
"out of bounds access due to bugs in application or RenderDoc may cause crashes");
|
||||
}
|
||||
else
|
||||
{
|
||||
// either the feature is available, and we enable it, or it's not available at all.
|
||||
if(availFeatures.robustBufferAccess)
|
||||
enabledFeatures.robustBufferAccess = true;
|
||||
else
|
||||
RDCWARN(
|
||||
"robustBufferAccess = false, out of bounds access due to bugs in application or "
|
||||
"RenderDoc may cause crashes");
|
||||
}
|
||||
|
||||
if(availFeatures.shaderInt64)
|
||||
enabledFeatures.shaderInt64 = true;
|
||||
|
||||
@@ -2020,6 +2020,18 @@ struct ScopedDeserialiseArray<SerialiserType, byte *>
|
||||
#define SERIALISE_MEMBER_ARRAY(arrayObj, countObj) \
|
||||
ser.Serialise(#arrayObj, el.arrayObj, el.countObj, SerialiserFlags::AllocateMemory)
|
||||
|
||||
#define SERIALISE_MEMBER_ARRAY_TYPED(type, arrayObj, countObj) \
|
||||
if(ser.IsReading()) \
|
||||
el.arrayObj = NULL; \
|
||||
union \
|
||||
{ \
|
||||
type **t; \
|
||||
decltype(el.arrayObj) *o; \
|
||||
} CONCAT(union, __LINE__); \
|
||||
CONCAT(union, __LINE__).o = &el.arrayObj; \
|
||||
ser.template Serialise<type>(#arrayObj, *CONCAT(union, __LINE__).t, el.countObj, \
|
||||
SerialiserFlags::AllocateMemory)
|
||||
|
||||
// a member that is a pointer and could be NULL, so needs a hidden 'present'
|
||||
// flag serialised out
|
||||
#define SERIALISE_MEMBER_OPT(obj) ser.SerialiseNullable(#obj, el.obj)
|
||||
|
||||
Reference in New Issue
Block a user