diff --git a/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp index 7d4bd145f..e78a90c72 100644 --- a/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp @@ -1039,22 +1039,22 @@ QVariantList VulkanPipelineStateViewer::makeSampler(const QString &bindset, cons QString obj = ToQStr(descriptor.samplerResourceId); + if(descriptor.samplerSwizzle.red != TextureSwizzle::Red || + descriptor.samplerSwizzle.green != TextureSwizzle::Green || + descriptor.samplerSwizzle.blue != TextureSwizzle::Blue || + descriptor.samplerSwizzle.alpha != TextureSwizzle::Alpha) + { + obj += tr(" swizzle[%1%2%3%4]") + .arg(ToQStr(descriptor.swizzle.red)) + .arg(ToQStr(descriptor.swizzle.green)) + .arg(ToQStr(descriptor.swizzle.blue)) + .arg(ToQStr(descriptor.swizzle.alpha)); + } + if(descriptor.ycbcrSampler != ResourceId()) { obj += lit(" ") + ToQStr(descriptor.ycbcrSampler); - if(descriptor.ycbcrSwizzle.red != TextureSwizzle::Red || - descriptor.ycbcrSwizzle.green != TextureSwizzle::Green || - descriptor.ycbcrSwizzle.blue != TextureSwizzle::Blue || - descriptor.ycbcrSwizzle.alpha != TextureSwizzle::Alpha) - { - obj += tr(" swizzle[%1%2%3%4]") - .arg(ToQStr(descriptor.swizzle.red)) - .arg(ToQStr(descriptor.swizzle.green)) - .arg(ToQStr(descriptor.swizzle.blue)) - .arg(ToQStr(descriptor.swizzle.alpha)); - } - filter += QFormatStr(", %1 %2").arg(ToQStr(descriptor.ycbcrModel)).arg(ToQStr(descriptor.ycbcrRange)); diff --git a/renderdoc/api/replay/vk_pipestate.h b/renderdoc/api/replay/vk_pipestate.h index 6fd8eeeb2..b17fe434d 100644 --- a/renderdoc/api/replay/vk_pipestate.h +++ b/renderdoc/api/replay/vk_pipestate.h @@ -47,7 +47,8 @@ struct BindingElement filter == o.filter && addressU == o.addressU && addressV == o.addressV && addressW == o.addressW && mipBias == o.mipBias && maxAnisotropy == o.maxAnisotropy && compareFunction == o.compareFunction && minLOD == o.minLOD && maxLOD == o.maxLOD && - borderColor == o.borderColor && unnormalized == o.unnormalized; + borderColor == o.borderColor && unnormalized == o.unnormalized && + srgbBorder == o.srgbBorder; } bool operator<(const BindingElement &o) const { @@ -103,6 +104,8 @@ struct BindingElement return borderColor < o.borderColor; if(!(unnormalized == o.unnormalized)) return unnormalized < o.unnormalized; + if(!(srgbBorder == o.srgbBorder)) + return srgbBorder < o.srgbBorder; return false; } @@ -183,6 +186,16 @@ set's inline block data. :type: Tuple[float,float,float,float] )"); rdcfixedarray borderColor = {0.0f, 0.0f, 0.0f, 0.0f}; + DOCUMENT(R"(The swizzle applied to samplers. Primarily for ycbcr samplers applied before +conversion but for non-ycbcr samplers can be used for implementations that require sampler swizzle +information for border colors. + +:type: TextureSwizzle4 +)"); + TextureSwizzle4 samplerSwizzle; + DOCUMENT( + "For samplers - ``True`` if the border colour is swizzled with an sRGB formatted image."); + bool srgbBorder = false; DOCUMENT("For samplers - ``True`` if unnormalized co-ordinates are used in this sampler."); bool unnormalized = false; @@ -198,11 +211,6 @@ this sampler. YcbcrConversion ycbcrModel; DOCUMENT("For ycbcr samplers - the :class:`YcbcrRange` used for conversion."); YcbcrRange ycbcrRange; - DOCUMENT(R"(For ycbcr samplers - The swizzle applied before conversion. - -:type: TextureSwizzle4 -)"); - TextureSwizzle4 ycbcrSwizzle; DOCUMENT("For ycbcr samplers - the :class:`ChromaSampleLocation` X-axis chroma offset."); ChromaSampleLocation xChromaOffset; DOCUMENT("For ycbcr samplers - the :class:`ChromaSampleLocation` Y-axis chroma offset."); diff --git a/renderdoc/driver/vulkan/extension_support.md b/renderdoc/driver/vulkan/extension_support.md index eedcfa899..26a651b03 100644 --- a/renderdoc/driver/vulkan/extension_support.md +++ b/renderdoc/driver/vulkan/extension_support.md @@ -28,6 +28,7 @@ Maintainers can update this file by updating vk.xml in this folder and running ` * `VK_EXT_acquire_xlib_display` * `VK_EXT_astc_decode_mode` * `VK_EXT_attachment_feedback_loop_layout` +* `VK_EXT_border_color_swizzle` * `VK_EXT_buffer_device_address` * `VK_EXT_calibrated_timestamps` * `VK_EXT_color_write_enable` @@ -242,7 +243,6 @@ Ray tracing extensions are now standard and will likely be supported at some poi ## EXT Extensions * `VK_EXT_blend_operation_advanced` -* `VK_EXT_border_color_swizzle` * `VK_EXT_depth_clamp_zero_one` * `VK_EXT_descriptor_buffer` * `VK_EXT_device_address_binding_report` diff --git a/renderdoc/driver/vulkan/vk_common.h b/renderdoc/driver/vulkan/vk_common.h index 2c9b259ba..49308eac5 100644 --- a/renderdoc/driver/vulkan/vk_common.h +++ b/renderdoc/driver/vulkan/vk_common.h @@ -1136,6 +1136,7 @@ DECLARE_REFLECTION_STRUCT(VkPhysicalDevice4444FormatsFeaturesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDevice8BitStorageFeatures); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceASTCDecodeFeaturesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT); +DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceBorderColorSwizzleFeaturesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceBufferDeviceAddressFeatures); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceBufferDeviceAddressFeaturesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceCoherentMemoryFeaturesAMD); @@ -1328,6 +1329,7 @@ DECLARE_REFLECTION_STRUCT(VkRenderPassMultiviewCreateInfo); DECLARE_REFLECTION_STRUCT(VkRenderPassSampleLocationsBeginInfoEXT); DECLARE_REFLECTION_STRUCT(VkResolveImageInfo2); DECLARE_REFLECTION_STRUCT(VkSampleLocationsInfoEXT); +DECLARE_REFLECTION_STRUCT(VkSamplerBorderColorComponentMappingCreateInfoEXT); DECLARE_REFLECTION_STRUCT(VkSamplerCreateInfo); DECLARE_REFLECTION_STRUCT(VkSamplerCustomBorderColorCreateInfoEXT); DECLARE_REFLECTION_STRUCT(VkSamplerReductionModeCreateInfo); @@ -1535,6 +1537,7 @@ DECLARE_DESERIALISE_TYPE(VkPhysicalDevice4444FormatsFeaturesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDevice8BitStorageFeatures); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceASTCDecodeFeaturesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT); +DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceBorderColorSwizzleFeaturesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceCoherentMemoryFeaturesAMD); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceColorWriteEnableFeaturesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceComputeShaderDerivativesFeaturesNV); @@ -1722,6 +1725,7 @@ DECLARE_DESERIALISE_TYPE(VkRenderPassMultiviewCreateInfo); DECLARE_DESERIALISE_TYPE(VkRenderPassSampleLocationsBeginInfoEXT); DECLARE_DESERIALISE_TYPE(VkResolveImageInfo2); DECLARE_DESERIALISE_TYPE(VkSampleLocationsInfoEXT); +DECLARE_DESERIALISE_TYPE(VkSamplerBorderColorComponentMappingCreateInfoEXT); DECLARE_DESERIALISE_TYPE(VkSamplerCreateInfo); DECLARE_DESERIALISE_TYPE(VkSamplerCustomBorderColorCreateInfoEXT); DECLARE_DESERIALISE_TYPE(VkSamplerReductionModeCreateInfo); diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index cb0a315a9..a8070ccc3 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -903,6 +903,9 @@ static const VkExtensionProperties supportedExtensions[] = { VK_EXT_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_EXTENSION_NAME, VK_EXT_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_SPEC_VERSION, }, + { + VK_EXT_BORDER_COLOR_SWIZZLE_EXTENSION_NAME, VK_EXT_BORDER_COLOR_SWIZZLE_SPEC_VERSION, + }, { VK_EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME, VK_EXT_BUFFER_DEVICE_ADDRESS_SPEC_VERSION, }, diff --git a/renderdoc/driver/vulkan/vk_info.cpp b/renderdoc/driver/vulkan/vk_info.cpp index d847380d1..c3deb4afd 100644 --- a/renderdoc/driver/vulkan/vk_info.cpp +++ b/renderdoc/driver/vulkan/vk_info.cpp @@ -2015,6 +2015,18 @@ void VulkanCreationInfo::Sampler::Init(VulkanResourceManager *resourceMan, Vulka customBorderColor = border->customBorderColor; customBorderFormat = border->format; } + + RDCEraseEl(componentMapping); + srgbBorder = false; + + const VkSamplerBorderColorComponentMappingCreateInfoEXT *borderSwizzle = + (const VkSamplerBorderColorComponentMappingCreateInfoEXT *)FindNextStruct( + pCreateInfo, VK_STRUCTURE_TYPE_SAMPLER_BORDER_COLOR_COMPONENT_MAPPING_CREATE_INFO_EXT); + if(borderSwizzle) + { + componentMapping = borderSwizzle->components; + srgbBorder = borderSwizzle->srgb != VK_FALSE; + } } void VulkanCreationInfo::YCbCrSampler::Init(VulkanResourceManager *resourceMan, diff --git a/renderdoc/driver/vulkan/vk_info.h b/renderdoc/driver/vulkan/vk_info.h index 78fed0cbf..4b7344a45 100644 --- a/renderdoc/driver/vulkan/vk_info.h +++ b/renderdoc/driver/vulkan/vk_info.h @@ -678,6 +678,10 @@ struct VulkanCreationInfo bool customBorder; VkClearColorValue customBorderColor; VkFormat customBorderFormat; + + // VkSamplerBorderColorComponentMappingCreateInfoEXT + VkComponentMapping componentMapping; + bool srgbBorder; }; std::unordered_map m_Sampler; diff --git a/renderdoc/driver/vulkan/vk_next_chains.cpp b/renderdoc/driver/vulkan/vk_next_chains.cpp index cd8ea74aa..901f7bfd9 100644 --- a/renderdoc/driver/vulkan/vk_next_chains.cpp +++ b/renderdoc/driver/vulkan/vk_next_chains.cpp @@ -213,6 +213,8 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, VkPhysicalDeviceASTCDecodeFeaturesEXT); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_FEATURES_EXT, \ VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT); \ + COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT, \ + VkPhysicalDeviceBorderColorSwizzleFeaturesEXT); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT, \ VkPhysicalDeviceBufferDeviceAddressFeaturesEXT); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES, \ @@ -543,6 +545,8 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, COPY_STRUCT(VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT, \ VkRenderPassSampleLocationsBeginInfoEXT); \ COPY_STRUCT(VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT, VkSampleLocationsInfoEXT); \ + COPY_STRUCT(VK_STRUCTURE_TYPE_SAMPLER_BORDER_COLOR_COMPONENT_MAPPING_CREATE_INFO_EXT, \ + VkSamplerBorderColorComponentMappingCreateInfoEXT); \ COPY_STRUCT(VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO, VkSamplerCreateInfo); \ COPY_STRUCT(VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT, \ VkSamplerCustomBorderColorCreateInfoEXT); \ @@ -866,7 +870,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_AMIGO_PROFILING_FEATURES_SEC: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT: \ - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT: \ 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_COPY_MEMORY_INDIRECT_FEATURES_NV: \ @@ -980,7 +983,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, case VK_STRUCTURE_TYPE_RENDER_PASS_CREATION_FEEDBACK_CREATE_INFO_EXT: \ case VK_STRUCTURE_TYPE_RENDER_PASS_SUBPASS_FEEDBACK_CREATE_INFO_EXT: \ case VK_STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM: \ - case VK_STRUCTURE_TYPE_SAMPLER_BORDER_COLOR_COMPONENT_MAPPING_CREATE_INFO_EXT: \ case VK_STRUCTURE_TYPE_SAMPLER_CAPTURE_DESCRIPTOR_DATA_INFO_EXT: \ case VK_STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX: \ case VK_STRUCTURE_TYPE_SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA: \ diff --git a/renderdoc/driver/vulkan/vk_replay.cpp b/renderdoc/driver/vulkan/vk_replay.cpp index 0e47503dc..2ac82e028 100644 --- a/renderdoc/driver/vulkan/vk_replay.cpp +++ b/renderdoc/driver/vulkan/vk_replay.cpp @@ -2102,12 +2102,17 @@ void VulkanReplay::SavePipelineState(uint32_t eventId) el.ycbcrModel = ycbcr.ycbcrModel; el.ycbcrRange = ycbcr.ycbcrRange; - Convert(el.ycbcrSwizzle, ycbcr.componentMapping); + Convert(el.samplerSwizzle, ycbcr.componentMapping); el.xChromaOffset = ycbcr.xChromaOffset; el.yChromaOffset = ycbcr.yChromaOffset; el.chromaFilter = ycbcr.chromaFilter; el.forceExplicitReconstruction = ycbcr.forceExplicitReconstruction; } + else + { + Convert(el.samplerSwizzle, sampl.componentMapping); + el.srgbBorder = sampl.srgbBorder; + } if(sampl.customBorder) { diff --git a/renderdoc/driver/vulkan/vk_serialise.cpp b/renderdoc/driver/vulkan/vk_serialise.cpp index 4c97962ad..bdf73421e 100644 --- a/renderdoc/driver/vulkan/vk_serialise.cpp +++ b/renderdoc/driver/vulkan/vk_serialise.cpp @@ -569,6 +569,12 @@ SERIALISE_VK_HANDLES(); PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_FEATURES_EXT, \ VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT) \ \ + /* VK_EXT_border_color_swizzle */ \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT, \ + VkPhysicalDeviceBorderColorSwizzleFeaturesEXT) \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_SAMPLER_BORDER_COLOR_COMPONENT_MAPPING_CREATE_INFO_EXT, \ + VkSamplerBorderColorComponentMappingCreateInfoEXT) \ + \ /* VK_EXT_buffer_device_address */ \ PNEXT_STRUCT(VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT, \ VkBufferDeviceAddressCreateInfoEXT) \ @@ -1394,10 +1400,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_border_color_swizzle */ \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT) \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_SAMPLER_BORDER_COLOR_COMPONENT_MAPPING_CREATE_INFO_EXT) \ - \ /* VK_EXT_depth_clamp_zero_one */ \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_EXT) \ \ @@ -5455,6 +5457,40 @@ void Deserialise(const VkPhysicalDeviceCustomBorderColorPropertiesEXT &el) DeserialiseNext(el.pNext); } +template +void DoSerialise(SerialiserType &ser, VkSamplerBorderColorComponentMappingCreateInfoEXT &el) +{ + RDCASSERT(ser.IsReading() || + el.sType == VK_STRUCTURE_TYPE_SAMPLER_BORDER_COLOR_COMPONENT_MAPPING_CREATE_INFO_EXT); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(components); + SERIALISE_MEMBER(srgb); +} + +template <> +void Deserialise(const VkSamplerBorderColorComponentMappingCreateInfoEXT &el) +{ + DeserialiseNext(el.pNext); +} + +template +void DoSerialise(SerialiserType &ser, VkPhysicalDeviceBorderColorSwizzleFeaturesEXT &el) +{ + RDCASSERT(ser.IsReading() || + el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(borderColorSwizzle); + SERIALISE_MEMBER(borderColorSwizzleFromImage); +} + +template <> +void Deserialise(const VkPhysicalDeviceBorderColorSwizzleFeaturesEXT &el) +{ + DeserialiseNext(el.pNext); +} + template void DoSerialise(SerialiserType &ser, VkPhysicalDeviceCustomBorderColorFeaturesEXT &el) { @@ -11195,6 +11231,7 @@ INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevice4444FormatsFeaturesEXT); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevice8BitStorageFeatures); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceASTCDecodeFeaturesEXT) INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT); +INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceBorderColorSwizzleFeaturesEXT); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceBufferDeviceAddressFeatures); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceBufferDeviceAddressFeaturesEXT); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceCoherentMemoryFeaturesAMD); @@ -11385,6 +11422,7 @@ INSTANTIATE_SERIALISE_TYPE(VkRenderPassMultiviewCreateInfo); INSTANTIATE_SERIALISE_TYPE(VkRenderPassSampleLocationsBeginInfoEXT); INSTANTIATE_SERIALISE_TYPE(VkResolveImageInfo2); INSTANTIATE_SERIALISE_TYPE(VkSampleLocationsInfoEXT); +INSTANTIATE_SERIALISE_TYPE(VkSamplerBorderColorComponentMappingCreateInfoEXT); INSTANTIATE_SERIALISE_TYPE(VkSamplerCreateInfo); INSTANTIATE_SERIALISE_TYPE(VkSamplerCustomBorderColorCreateInfoEXT); INSTANTIATE_SERIALISE_TYPE(VkSamplerReductionModeCreateInfo); diff --git a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp index 16ce88364..814f02397 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp @@ -3036,6 +3036,14 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi CHECK_PHYS_EXT_FEATURE(swapchainMaintenance1); } END_PHYS_EXT_CHECK(); + + BEGIN_PHYS_EXT_CHECK(VkPhysicalDeviceBorderColorSwizzleFeaturesEXT, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT); + { + CHECK_PHYS_EXT_FEATURE(borderColorSwizzle); + CHECK_PHYS_EXT_FEATURE(borderColorSwizzleFromImage); + } + END_PHYS_EXT_CHECK(); } if(availFeatures.depthClamp) diff --git a/renderdoc/replay/renderdoc_serialise.inl b/renderdoc/replay/renderdoc_serialise.inl index 17609801f..fd6a9e418 100644 --- a/renderdoc/replay/renderdoc_serialise.inl +++ b/renderdoc/replay/renderdoc_serialise.inl @@ -1949,6 +1949,7 @@ void DoSerialise(SerialiserType &ser, VKPipe::BindingElement &el) SERIALISE_MEMBER(minLOD); SERIALISE_MEMBER(maxLOD); SERIALISE_MEMBER(borderColor); + SERIALISE_MEMBER(samplerSwizzle); SERIALISE_MEMBER(unnormalized); SERIALISE_MEMBER(inlineBlock); @@ -1956,13 +1957,12 @@ void DoSerialise(SerialiserType &ser, VKPipe::BindingElement &el) SERIALISE_MEMBER(ycbcrModel); SERIALISE_MEMBER(ycbcrRange); - SERIALISE_MEMBER(ycbcrSwizzle); SERIALISE_MEMBER(xChromaOffset); SERIALISE_MEMBER(yChromaOffset); SERIALISE_MEMBER(chromaFilter); SERIALISE_MEMBER(forceExplicitReconstruction); - SIZE_CHECK(192); + SIZE_CHECK(184); }; template