[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)