[YCbCr Samplers] Iterate over chain for external format validation
Change-Id: If9b15597bfa37f444305e1cbbddb30100f5639d3
Bug: dawn:2476
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/184623
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Saifuddin Hitawala <hitawala@chromium.org>
diff --git a/src/dawn/native/vulkan/SamplerVk.cpp b/src/dawn/native/vulkan/SamplerVk.cpp
index e10248f..e931213 100644
--- a/src/dawn/native/vulkan/SamplerVk.cpp
+++ b/src/dawn/native/vulkan/SamplerVk.cpp
@@ -127,12 +127,18 @@
const VkSamplerYcbcrConversionCreateInfo& vulkanYCbCrInfo =
vulkanYCbCrDescriptor->vulkanYCbCrInfo;
#if DAWN_PLATFORM_IS(ANDROID)
- const VkExternalFormatANDROID* vkExternalFormat =
- static_cast<const VkExternalFormatANDROID*>(vulkanYCbCrInfo.pNext);
- if (vkExternalFormat) {
- DAWN_INVALID_IF((vkExternalFormat->externalFormat == 0 &&
- vulkanYCbCrInfo.format == VK_FORMAT_UNDEFINED),
- "Both VkFormat and VkExternalFormatANDROID are undefined.");
+ const VkBaseInStructure* chain =
+ static_cast<const VkBaseInStructure*>(vulkanYCbCrInfo.pNext);
+ while (chain != nullptr) {
+ if (chain->sType == VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID) {
+ const VkExternalFormatANDROID* vkExternalFormat =
+ reinterpret_cast<const VkExternalFormatANDROID*>(chain);
+ DAWN_INVALID_IF((vkExternalFormat->externalFormat == 0 &&
+ vulkanYCbCrInfo.format == VK_FORMAT_UNDEFINED),
+ "Both VkFormat and VkExternalFormatANDROID are undefined.");
+ break;
+ }
+ chain = chain->pNext;
}
#endif // DAWN_PLATFORM_IS(ANDROID)