diff options
Diffstat (limited to 'patches/chromium/0013-Add-seams-to-setup-GL-contexts-sharing-with-QtQuick.patch')
-rw-r--r-- | patches/chromium/0013-Add-seams-to-setup-GL-contexts-sharing-with-QtQuick.patch | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/patches/chromium/0013-Add-seams-to-setup-GL-contexts-sharing-with-QtQuick.patch b/patches/chromium/0013-Add-seams-to-setup-GL-contexts-sharing-with-QtQuick.patch new file mode 100644 index 000000000..a304c93bc --- /dev/null +++ b/patches/chromium/0013-Add-seams-to-setup-GL-contexts-sharing-with-QtQuick.patch @@ -0,0 +1,106 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Jocelyn Turcotte <jocelyn.turcotte@digia.com> +Date: Thu, 24 Oct 2013 18:26:59 +0200 +Subject: Add seams to setup GL contexts sharing with QtQuick. + +This will allow us to know right before the first GL context is +instantiated by Chromium so that we can install those contexts to +be shared with QtQuick GL contexts as well. +--- + content/common/gpu/gpu_channel_manager.cc | 8 +++++++- + content/public/browser/content_browser_client.h | 5 +++++ + ui/gl/gl_share_group.cc | 3 +++ + ui/gl/gl_share_group.h | 7 +++++-- + 4 files changed, 20 insertions(+), 3 deletions(-) + +diff --git a/content/common/gpu/gpu_channel_manager.cc b/content/common/gpu/gpu_channel_manager.cc +index 8b466bd..fe3f7b3 100644 +--- a/content/common/gpu/gpu_channel_manager.cc ++++ b/content/common/gpu/gpu_channel_manager.cc +@@ -11,6 +11,7 @@ + #include "content/common/gpu/gpu_memory_manager.h" + #include "content/common/gpu/gpu_messages.h" + #include "content/common/gpu/sync_point_manager.h" ++#include "content/public/browser/content_browser_client.h" + #include "gpu/command_buffer/service/feature_info.h" + #include "gpu/command_buffer/service/gpu_switches.h" + #include "gpu/command_buffer/service/mailbox_manager.h" +@@ -124,7 +125,12 @@ void GpuChannelManager::OnEstablishChannel(int client_id, bool share_context) { + DCHECK(!mailbox_manager_.get()); + mailbox_manager_ = new gpu::gles2::MailboxManager; + } +- share_group = share_group_.get(); ++ // Qt: Ask the browser client at the top to manage the context sharing. ++ // This can only work with --in-process-gpu or --single-process. ++ if (GetContentClient()->browser() && GetContentClient()->browser()->GetInProcessGpuShareGroup()) ++ share_group = GetContentClient()->browser()->GetInProcessGpuShareGroup(); ++ else ++ share_group = share_group_.get(); + mailbox_manager = mailbox_manager_.get(); + } + +diff --git a/content/public/browser/content_browser_client.h b/content/public/browser/content_browser_client.h +index cc664c6..f817cb2 100644 +--- a/content/public/browser/content_browser_client.h ++++ b/content/public/browser/content_browser_client.h +@@ -48,6 +48,7 @@ class CryptoModuleBlockingPasswordDelegate; + } + + namespace gfx { ++class GLShareGroup; + class ImageSkia; + } + +@@ -570,6 +571,10 @@ class CONTENT_EXPORT ContentBrowserClient { + // Return NULL to use the default one for the platform to be created. + virtual LocationProvider* OverrideSystemLocationProvider(); + ++ // Allow an embedder to provide a share group reimplementation to connect renderer ++ // GL contexts with the root compositor. ++ virtual gfx::GLShareGroup* GetInProcessGpuShareGroup() { return 0; } ++ + #if defined(OS_POSIX) && !defined(OS_MACOSX) + // Populates |mappings| with all files that need to be mapped before launching + // a child process. +diff --git a/ui/gl/gl_share_group.cc b/ui/gl/gl_share_group.cc +index 8e8958b..347873d 100644 +--- a/ui/gl/gl_share_group.cc ++++ b/ui/gl/gl_share_group.cc +@@ -18,6 +18,9 @@ GLShareGroup::GLShareGroup() + } + + void GLShareGroup::AddContext(GLContext* context) { ++ if (contexts_.empty()) ++ AboutToAddFirstContext(); ++ + contexts_.insert(context); + } + +diff --git a/ui/gl/gl_share_group.h b/ui/gl/gl_share_group.h +index 1deed63..f1b0369 100644 +--- a/ui/gl/gl_share_group.h ++++ b/ui/gl/gl_share_group.h +@@ -31,7 +31,7 @@ class GL_EXPORT GLShareGroup : public base::RefCounted<GLShareGroup> { + + // Returns a pointer to any initialized context in the share group + // or NULL if there are no initialized contexts in the share group. +- GLContext* GetContext(); ++ virtual GLContext* GetContext(); + + // Sets and returns the unique shared GL context. Used for context + // virtualization. +@@ -45,10 +45,13 @@ class GL_EXPORT GLShareGroup : public base::RefCounted<GLShareGroup> { + int GetRendererID(); + #endif + ++ protected: ++ virtual ~GLShareGroup(); ++ virtual void AboutToAddFirstContext() { } ++ + private: + friend class base::RefCounted<GLShareGroup>; + +- ~GLShareGroup(); + + // References to GLContext are by raw pointer to avoid a reference count + // cycle. |