diff --git a/src/dawn/native/vulkan/PhysicalDeviceVk.cpp b/src/dawn/native/vulkan/PhysicalDeviceVk.cpp
index 6080dc4..8d3ebca 100644
--- a/src/dawn/native/vulkan/PhysicalDeviceVk.cpp
+++ b/src/dawn/native/vulkan/PhysicalDeviceVk.cpp
@@ -300,6 +300,7 @@
     // Multiplanar formats.
     constexpr VkFormat multiplanarFormats[] = {
         VK_FORMAT_G8_B8R8_2PLANE_420_UNORM,
+        VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16,
     };
 
     bool allMultiplanarFormatsSupported = true;
@@ -320,6 +321,7 @@
     if (allMultiplanarFormatsSupported) {
         EnableFeature(Feature::DawnMultiPlanarFormats);
         EnableFeature(Feature::MultiPlanarFormatExtendedUsages);
+        EnableFeature(Feature::MultiPlanarFormatP010);
     }
 
     EnableFeature(Feature::SurfaceCapabilities);
diff --git a/src/dawn/tests/end2end/VideoViewsTests_gbm.cpp b/src/dawn/tests/end2end/VideoViewsTests_gbm.cpp
index e3d09c0..b5a3077 100644
--- a/src/dawn/tests/end2end/VideoViewsTests_gbm.cpp
+++ b/src/dawn/tests/end2end/VideoViewsTests_gbm.cpp
@@ -106,6 +106,8 @@
         switch (format) {
             case wgpu::TextureFormat::R8BG8Biplanar420Unorm:
                 return GBM_FORMAT_NV12;
+            case wgpu::TextureFormat::R10X6BG10X6Biplanar420Unorm:
+                return GBM_FORMAT_P010;
             default:
                 DAWN_UNREACHABLE();
         }
@@ -115,6 +117,8 @@
         switch (format) {
             case wgpu::TextureFormat::R8BG8Biplanar420Unorm:
                 return WGPUTextureFormat_R8BG8Biplanar420Unorm;
+            case wgpu::TextureFormat::R10X6BG10X6Biplanar420Unorm:
+                return WGPUTextureFormat_R10X6BG10X6Biplanar420Unorm;
             default:
                 DAWN_UNREACHABLE();
         }
@@ -157,14 +161,30 @@
                                     VideoViewsTestsBase::kYUVImageDataHeightInTexels,
                                     GBM_BO_TRANSFER_WRITE, &strideBytes, &mapHandle);
             EXPECT_NE(addr, nullptr);
-            std::vector<uint8_t> initialData =
-                VideoViewsTestsBase::GetTestTextureData<uint8_t>(format, isCheckerboard);
-            uint8_t* srcBegin = initialData.data();
-            uint8_t* srcEnd = srcBegin + initialData.size();
-            uint8_t* dstBegin = static_cast<uint8_t*>(addr);
-            for (; srcBegin < srcEnd; srcBegin += VideoViewsTestsBase::kYUVImageDataWidthInTexels,
-                                      dstBegin += strideBytes) {
-                std::memcpy(dstBegin, srcBegin, VideoViewsTestsBase::kYUVImageDataWidthInTexels);
+            if (format == wgpu::TextureFormat::R10X6BG10X6Biplanar420Unorm) {
+                std::vector<uint16_t> initialData =
+                    VideoViewsTestsBase::GetTestTextureData<uint16_t>(format, isCheckerboard);
+                uint16_t* srcBegin = initialData.data();
+                uint16_t* srcEnd = srcBegin + (initialData.size() * 2);
+                uint16_t* dstBegin = static_cast<uint16_t*>(addr);
+                for (; srcBegin < srcEnd;
+                     srcBegin += VideoViewsTestsBase::kYUVImageDataWidthInTexels,
+                     dstBegin += strideBytes) {
+                    std::memcpy(dstBegin, srcBegin,
+                                VideoViewsTestsBase::kYUVImageDataWidthInTexels);
+                }
+            } else {
+                std::vector<uint8_t> initialData =
+                    VideoViewsTestsBase::GetTestTextureData<uint8_t>(format, isCheckerboard);
+                uint8_t* srcBegin = initialData.data();
+                uint8_t* srcEnd = srcBegin + initialData.size();
+                uint8_t* dstBegin = static_cast<uint8_t*>(addr);
+                for (; srcBegin < srcEnd;
+                     srcBegin += VideoViewsTestsBase::kYUVImageDataWidthInTexels,
+                     dstBegin += strideBytes) {
+                    std::memcpy(dstBegin, srcBegin,
+                                VideoViewsTestsBase::kYUVImageDataWidthInTexels);
+                }
             }
 
             gbm_bo_unmap(gbmBo, mapHandle);
@@ -226,8 +246,8 @@
 
 // static
 std::vector<Format> VideoViewsTestBackend::Formats() {
-    // TODO(dawn:551): Support sharing P010 video surfaces.
-    return {wgpu::TextureFormat::R8BG8Biplanar420Unorm};
+    return {wgpu::TextureFormat::R8BG8Biplanar420Unorm,
+            wgpu::TextureFormat::R10X6BG10X6Biplanar420Unorm};
 }
 
 // static
