diff options
Diffstat (limited to 'vaapi-fix-wayland-init.patch')
-rw-r--r-- | vaapi-fix-wayland-init.patch | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/vaapi-fix-wayland-init.patch b/vaapi-fix-wayland-init.patch new file mode 100644 index 000000000000..a07814969f41 --- /dev/null +++ b/vaapi-fix-wayland-init.patch @@ -0,0 +1,82 @@ +From 4a04af6bbd5b1a55e2e1a7c22f13f8571c2dd7ed Mon Sep 17 00:00:00 2001 +From: Julien Isorce <julien.isorce@chromium.org> +Date: Fri, 24 Jan 2020 00:30:33 +0000 +Subject: [PATCH] Reland "Call PreSandboxStartup after GL initialization in GpuInit" + +This is a reland of d17c53b341adcfc9e2626162536a08c9f3e24017 + +Original change's description: +> Call PreSandboxStartup after GL initialization in GpuInit +> +> Fixes "vaInitialize failed: unknown libva error" +> on Wayland with LIBVA_DRIVER_NAME=i965 +> +> VaapiWrapper relies on the GL implementation to decide +> which display to use. If the GL implementation is none, +> then VaapiWrapper is likely to do the wrong guess resulting +> in the above error. +> +> Bug: 1041229 +> Change-Id: I1255a032a5e14b3aaffe3026a886de7e6d9ff0d7 +> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2011640 +> Reviewed-by: Maggie Chen <magchen@chromium.org> +> Reviewed-by: Kenneth Russell <kbr@chromium.org> +> Commit-Queue: Julien Isorce <julien.isorce@chromium.org> +> Cr-Commit-Position: refs/heads/master@{#733847} + +Bug: 1041229 +Change-Id: I8e268596a1e2a1b3da7d7e75b8943accc85dd2d7 +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2013806 +Reviewed-by: Alexandre Courbot <acourbot@chromium.org> +Reviewed-by: Maggie Chen <magchen@chromium.org> +Reviewed-by: Kenneth Russell <kbr@chromium.org> +Commit-Queue: Julien Isorce <julien.isorce@chromium.org> +Cr-Commit-Position: refs/heads/master@{#734746} +--- + +diff --git a/gpu/ipc/service/gpu_init.cc b/gpu/ipc/service/gpu_init.cc +index 04883fc..4e63f7a 100644 +--- a/gpu/ipc/service/gpu_init.cc ++++ b/gpu/ipc/service/gpu_init.cc +@@ -221,10 +221,16 @@ + delayed_watchdog_enable = true; + #endif + ++#if defined(OS_LINUX) + // PreSandbox is mainly for resource handling and not related to the GPU + // driver, it doesn't need the GPU watchdog. The loadLibrary may take long + // time that killing and restarting the GPU process will not help. +- sandbox_helper_->PreSandboxStartup(); ++ if (gpu_preferences_.gpu_sandbox_start_early) { ++ // The sandbox will be started earlier than usual (i.e. before GL) so ++ // execute the pre-sandbox steps now. ++ sandbox_helper_->PreSandboxStartup(); ++ } ++#endif + + // Start the GPU watchdog only after anything that is expected to be time + // consuming has completed, otherwise the process is liable to be aborted. +@@ -320,6 +326,23 @@ + } + } + ++ // The ContentSandboxHelper is currently the only one implementation of ++ // gpu::GpuSandboxHelper and it has no dependency. Except on Linux where ++ // VaapiWrapper checks the GL implementation to determine which display ++ // to use. So call PreSandboxStartup after GL initialization. But make ++ // sure the watchdog is paused as loadLibrary may take a long time and ++ // restarting the GPU process will not help. ++ if (!attempted_startsandbox) { ++ if (watchdog_thread_) ++ watchdog_thread_->PauseWatchdog(); ++ ++ // The sandbox is not started yet. ++ sandbox_helper_->PreSandboxStartup(); ++ ++ if (watchdog_thread_) ++ watchdog_thread_->ResumeWatchdog(); ++ } ++ + bool gl_disabled = gl::GetGLImplementation() == gl::kGLImplementationDisabled; + + // Compute passthrough decoder status before ComputeGpuFeatureInfo below. |