summarylogtreecommitdiffstats
path: root/p010-Zero-Copy-for-VA-API-Decoding-for-Vulkan.patch
blob: 66df84050a105fb9852d99bb0dda9a0ec6b1cd39 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
From 882f184c471fc8e5c59ead4e4c8eaf06dc7f89da Mon Sep 17 00:00:00 2001
From: Jianhui Dai <jianhui.j.dai@intel.com>
Date: Wed, 4 Sep 2024 01:28:15 +0000
Subject: [PATCH] vaapi_decoder/linux: P010 Zero-Copy for VA-API Video Decoding
 for Vulkan

This CL adds P010 to the list of renderable formats for Vulkan, enabling
zero-copy video decoding via VA-API. By avoiding the unnecessary
conversion from P010 to NV12, this optimization preserves color depth
and improves overall performance.

Test on Ubuntu 22.04 for Alder Lake:
  Linux Ozone-Wayland Vulkan:
`
chrome --ignore-gpu-blocklist --disable-gpu-driver-bug-workaround
--enable-features=Vulkan,VaapiIgnoreDriverChecks,DefaultANGLEVulkan,VulkanFromANGLE
--use-gl=angle --use-angle=vulkan --ozone-platform=wayland
`

  Linux Ozone-X11 Vulkan:
`
chrome --ignore-gpu-blocklist --disable-gpu-driver-bug-workaround
--enable-features=Vulkan,VaapiIgnoreDriverChecks,DefaultANGLEVulkan,VulkanFromANGLE
--use-gl=angle --use-angle=vulkan --ozone-platform=x11
`

HEVC Main 10 10-bit test video:
https://developer.apple.com/videos/play/wwdc2024/10136/

Bug: 349428388
Change-Id: I4a5524d8224982e44a928467bb37a46b8404d402
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5831505
Reviewed-by: Ted (Chromium) Meyer <tmathmeyer@chromium.org>
Reviewed-by: Andres Calderon Jaramillo <andrescj@chromium.org>
Commit-Queue: Jianhui J Dai <jianhui.j.dai@intel.com>
Cr-Commit-Position: refs/heads/main@{#1350537}
---
 .../mojo/services/gpu_mojo_media_client_linux.cc  | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/media/mojo/services/gpu_mojo_media_client_linux.cc b/media/mojo/services/gpu_mojo_media_client_linux.cc
index 6c8dcffca050..c592c2e4c2c2 100644
--- a/media/mojo/services/gpu_mojo_media_client_linux.cc
+++ b/media/mojo/services/gpu_mojo_media_client_linux.cc
@@ -45,20 +45,21 @@ VideoDecoderType GetPreferredLinuxDecoderImplementation() {
 std::vector<Fourcc> GetPreferredRenderableFourccs(
     const gpu::GpuPreferences& gpu_preferences) {
   std::vector<Fourcc> renderable_fourccs;
-  // TODO(crbug.com/349428388): For HEVC Main 10 and VP9 Profile2 10-bit video,
-  // the current implementation requires additional VPP to convert the P010
-  // format to a renderable format. This VPP happens on the Vulkan path
-  // (P010 -> NV12) and OpenGL path (P010 -> AR24). While this VPP introduces a
-  // loss of color depth, it should be optimized for zero-copy path in the
-  // future.
 #if BUILDFLAG(ENABLE_VULKAN)
-  // Support for zero-copy NV12 textures preferentially.
+  // Support for zero-copy NV12/P010 textures preferentially.
   if (gpu_preferences.gr_context_type == gpu::GrContextType::kVulkan) {
     renderable_fourccs.emplace_back(Fourcc::NV12);
+    renderable_fourccs.emplace_back(Fourcc::P010);
   }
 #endif  // BUILDFLAG(ENABLE_VULKAN)
 
   // Support 1-copy argb textures.
+  //
+  // TODO(crbug.com/349428388): For VP9 Profile2 and HEVC Main 10 10-bit video,
+  // the current implementation requires additional VPP to convert the NV12/P010
+  // format to a renderable format AR24. While this VPP introduces a loss of
+  // color depth (P010 -> AR24), it should be optimized for zero-copy path in
+  // the future.
   renderable_fourccs.emplace_back(Fourcc::AR24);
 
   return renderable_fourccs;