diff --git a/renderdoc/driver/vulkan/vk_common.h b/renderdoc/driver/vulkan/vk_common.h index 264345993..f8f3f2b20 100644 --- a/renderdoc/driver/vulkan/vk_common.h +++ b/renderdoc/driver/vulkan/vk_common.h @@ -641,7 +641,9 @@ DECLARE_REFLECTION_STRUCT(VkAcquireNextImageInfoKHR); DECLARE_REFLECTION_STRUCT(VkAcquireProfilingLockInfoKHR); DECLARE_REFLECTION_STRUCT(VkApplicationInfo); DECLARE_REFLECTION_STRUCT(VkAttachmentDescription2KHR); +DECLARE_REFLECTION_STRUCT(VkAttachmentDescriptionStencilLayoutKHR); DECLARE_REFLECTION_STRUCT(VkAttachmentReference2KHR); +DECLARE_REFLECTION_STRUCT(VkAttachmentReferenceStencilLayoutKHR); DECLARE_REFLECTION_STRUCT(VkAttachmentSampleLocationsEXT); DECLARE_REFLECTION_STRUCT(VkBindBufferMemoryDeviceGroupInfo); DECLARE_REFLECTION_STRUCT(VkBindBufferMemoryInfo); @@ -816,6 +818,7 @@ DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceSampleLocationsPropertiesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceSamplerYcbcrConversionFeatures); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceScalarBlockLayoutFeaturesEXT); +DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderAtomicInt64FeaturesKHR); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderClockFeaturesKHR); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderCorePropertiesAMD); @@ -926,7 +929,9 @@ DECLARE_REFLECTION_STRUCT(VkWriteDescriptorSet); DECLARE_DESERIALISE_TYPE(VkAcquireNextImageInfoKHR); DECLARE_DESERIALISE_TYPE(VkApplicationInfo); DECLARE_DESERIALISE_TYPE(VkAttachmentDescription2KHR); +DECLARE_DESERIALISE_TYPE(VkAttachmentDescriptionStencilLayoutKHR); DECLARE_DESERIALISE_TYPE(VkAttachmentReference2KHR); +DECLARE_DESERIALISE_TYPE(VkAttachmentReferenceStencilLayoutKHR); DECLARE_DESERIALISE_TYPE(VkAttachmentSampleLocationsEXT); DECLARE_DESERIALISE_TYPE(VkBindBufferMemoryDeviceGroupInfo); DECLARE_DESERIALISE_TYPE(VkBindBufferMemoryInfo); @@ -1090,6 +1095,7 @@ DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceSampleLocationsPropertiesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceSamplerYcbcrConversionFeatures); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceScalarBlockLayoutFeaturesEXT); +DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderAtomicInt64FeaturesKHR); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderClockFeaturesKHR); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderCorePropertiesAMD); diff --git a/renderdoc/driver/vulkan/vk_core.h b/renderdoc/driver/vulkan/vk_core.h index 74360e9a6..34a38eda9 100644 --- a/renderdoc/driver/vulkan/vk_core.h +++ b/renderdoc/driver/vulkan/vk_core.h @@ -384,7 +384,7 @@ private: InstanceDeviceInfo m_EnabledExtensions; - const InstanceDeviceInfo &GetExtensions(VkResourceRecord *record) + const InstanceDeviceInfo &GetExtensions(VkResourceRecord *record) const { return record ? *record->instDevInfo : m_EnabledExtensions; } diff --git a/renderdoc/driver/vulkan/vk_hookset_defs.h b/renderdoc/driver/vulkan/vk_hookset_defs.h index ab488f806..572ad372b 100644 --- a/renderdoc/driver/vulkan/vk_hookset_defs.h +++ b/renderdoc/driver/vulkan/vk_hookset_defs.h @@ -485,7 +485,8 @@ DeclExt(KHR_timeline_semaphore); \ DeclExt(KHR_performance_query); \ DeclExt(KHR_buffer_device_address); \ - DeclExt(EXT_tooling_info); + DeclExt(EXT_tooling_info); \ + DeclExt(KHR_separate_depth_stencil_layouts); // for simplicity and since the check itself is platform agnostic, // these aren't protected in platform defines @@ -575,7 +576,8 @@ CheckExt(KHR_timeline_semaphore, VKXX); \ CheckExt(KHR_performance_query, VKXX); \ CheckExt(KHR_buffer_device_address, VKXX); \ - CheckExt(EXT_tooling_info, VKXX); + CheckExt(EXT_tooling_info, VKXX); \ + CheckExt(KHR_separate_depth_stencil_layouts, VKXX); #define HookInitVulkanInstanceExts_PhysDev() \ HookInitExtension(KHR_surface, GetPhysicalDeviceSurfaceSupportKHR); \ diff --git a/renderdoc/driver/vulkan/vk_next_chains.cpp b/renderdoc/driver/vulkan/vk_next_chains.cpp index 5338ce641..26159eca7 100644 --- a/renderdoc/driver/vulkan/vk_next_chains.cpp +++ b/renderdoc/driver/vulkan/vk_next_chains.cpp @@ -74,7 +74,11 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, #define PROCESS_SIMPLE_STRUCTS() \ COPY_STRUCT(VK_STRUCTURE_TYPE_APPLICATION_INFO, VkApplicationInfo); \ COPY_STRUCT(VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2_KHR, VkAttachmentDescription2KHR); \ + COPY_STRUCT(VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT_KHR, \ + VkAttachmentDescriptionStencilLayoutKHR); \ COPY_STRUCT(VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2_KHR, VkAttachmentReference2KHR); \ + COPY_STRUCT(VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT_KHR, \ + VkAttachmentReferenceStencilLayoutKHR); \ COPY_STRUCT(VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO, \ VkBindBufferMemoryDeviceGroupInfo); \ COPY_STRUCT(VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO, \ @@ -255,6 +259,8 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, VkPhysicalDeviceSamplerYcbcrConversionFeatures); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT, \ VkPhysicalDeviceScalarBlockLayoutFeaturesEXT); \ + COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES_KHR, \ + VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR, \ VkPhysicalDeviceShaderAtomicInt64FeaturesKHR); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD, \ @@ -527,8 +533,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, case VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID: \ case VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID: \ case VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID: \ - case VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT_KHR: \ - case VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT_KHR: \ case VK_STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_NV: \ case VK_STRUCTURE_TYPE_CHECKPOINT_DATA_NV: \ case VK_STRUCTURE_TYPE_CMD_PROCESS_COMMANDS_INFO_NVX: \ @@ -587,7 +591,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV: \ - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES_KHR: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV: \ diff --git a/renderdoc/driver/vulkan/vk_serialise.cpp b/renderdoc/driver/vulkan/vk_serialise.cpp index c2ad4bf05..70be6da54 100644 --- a/renderdoc/driver/vulkan/vk_serialise.cpp +++ b/renderdoc/driver/vulkan/vk_serialise.cpp @@ -958,6 +958,14 @@ SERIALISE_VK_HANDLES(); PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV, \ VkPhysicalDeviceShaderImageFootprintFeaturesNV) \ \ + /* VK_KHR_separate_depth_stencil_layouts */ \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES_KHR, \ + VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR) \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT_KHR, \ + VkAttachmentReferenceStencilLayoutKHR) \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT_KHR, \ + VkAttachmentDescriptionStencilLayoutKHR) \ + \ /* Surface creation structs. These would pull in dependencies on OS-specific includes. */ \ /* So treat them as unsupported. */ \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR) \ @@ -1025,11 +1033,6 @@ SERIALISE_VK_HANDLES(); /* VK_EXT_texture_compression_astc_hdr */ \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT) \ \ - /* VK_KHR_separate_depth_stencil_layouts */ \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES_KHR) \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT_KHR) \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT_KHR) \ - \ /* VK_KHR_performance_query */ \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR) \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR) \ @@ -7629,6 +7632,54 @@ void Deserialise(const VkPhysicalDeviceCoherentMemoryFeaturesAMD &el) DeserialiseNext(el.pNext); } +template +void DoSerialise(SerialiserType &ser, VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR &el) +{ + RDCASSERT(ser.IsReading() || + el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES_KHR); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(separateDepthStencilLayouts); +} + +template <> +void Deserialise(const VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR &el) +{ + DeserialiseNext(el.pNext); +} + +template +void DoSerialise(SerialiserType &ser, VkAttachmentDescriptionStencilLayoutKHR &el) +{ + RDCASSERT(ser.IsReading() || + el.sType == VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT_KHR); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(stencilInitialLayout); + SERIALISE_MEMBER(stencilFinalLayout); +} + +template <> +void Deserialise(const VkAttachmentDescriptionStencilLayoutKHR &el) +{ + DeserialiseNext(el.pNext); +} + +template +void DoSerialise(SerialiserType &ser, VkAttachmentReferenceStencilLayoutKHR &el) +{ + RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT_KHR); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(stencilLayout); +} + +template <> +void Deserialise(const VkAttachmentReferenceStencilLayoutKHR &el) +{ + DeserialiseNext(el.pNext); +} + // pNext structs - always have deserialise for the next chain INSTANTIATE_SERIALISE_TYPE(VkAcquireNextImageInfoKHR); INSTANTIATE_SERIALISE_TYPE(VkApplicationInfo); @@ -7908,6 +7959,9 @@ INSTANTIATE_SERIALISE_TYPE(VkValidationCacheCreateInfoEXT); INSTANTIATE_SERIALISE_TYPE(VkValidationFeaturesEXT); INSTANTIATE_SERIALISE_TYPE(VkValidationFlagsEXT); INSTANTIATE_SERIALISE_TYPE(VkWriteDescriptorSet); +INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR); +INSTANTIATE_SERIALISE_TYPE(VkAttachmentReferenceStencilLayoutKHR); +INSTANTIATE_SERIALISE_TYPE(VkAttachmentDescriptionStencilLayoutKHR); // plain structs with no next chain INSTANTIATE_SERIALISE_TYPE(VkAllocationCallbacks); diff --git a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp index b77eea8e3..845bd1adc 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp @@ -2336,6 +2336,14 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi CHECK_PHYS_EXT_FEATURE(timelineSemaphore); } END_PHYS_EXT_CHECK(); + + BEGIN_PHYS_EXT_CHECK( + VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES_KHR); + { + CHECK_PHYS_EXT_FEATURE(separateDepthStencilLayouts); + } + END_PHYS_EXT_CHECK(); } if(availFeatures.depthClamp)