summaryrefslogtreecommitdiffstats
path: root/src/angle/patches/0002-ANGLE-Add-support-for-querying-platform-device.patch
diff options
context:
space:
mode:
Diffstat (limited to 'src/angle/patches/0002-ANGLE-Add-support-for-querying-platform-device.patch')
-rw-r--r--src/angle/patches/0002-ANGLE-Add-support-for-querying-platform-device.patch83
1 files changed, 83 insertions, 0 deletions
diff --git a/src/angle/patches/0002-ANGLE-Add-support-for-querying-platform-device.patch b/src/angle/patches/0002-ANGLE-Add-support-for-querying-platform-device.patch
new file mode 100644
index 0000000000..d548ce465f
--- /dev/null
+++ b/src/angle/patches/0002-ANGLE-Add-support-for-querying-platform-device.patch
@@ -0,0 +1,83 @@
+From 2f2aabec376cb749a7d0db9e7f754fbfd28b8a72 Mon Sep 17 00:00:00 2001
+From: Oliver Wolff <oliver.wolff@qt.io>
+Date: Wed, 22 Aug 2018 12:58:13 +0200
+Subject: [PATCH 2/8] ANGLE: Add support for querying platform device
+
+The EGL_EXT_device_base extension allows for querying the platform
+device of the graphics hardware via eglQueryDisplayAttribEXT().
+As that extension is not supported by ANGLE, this patch adds similar
+functionality to the existing eglQuerySurfacePointerANGLE API. When
+EGL_DEVICE_EXT is passed as the queried attribute, the underlying
+D3D/DXGI device pointer is passed back to the caller via the value
+argument.
+
+The D3D device is needed for video support in QtMultimedia as well as
+the IDXGIDevice3::Trim() calls required by the Windows Store.
+
+Change-Id: Ib3dfd3edc47dbcc02b07f71980ba785508f2ee57
+---
+ src/3rdparty/angle/src/libANGLE/renderer/d3d/SurfaceD3D.cpp | 4 ++++
+ src/3rdparty/angle/src/libANGLE/renderer/d3d/SwapChainD3D.h | 1 +
+ src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.cpp | 5 +++++
+ src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.h | 2 ++
+ 4 files changed, 12 insertions(+)
+
+diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/SurfaceD3D.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/SurfaceD3D.cpp
+index 8e78b71a36..ceb022d14c 100644
+--- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/SurfaceD3D.cpp
++++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/SurfaceD3D.cpp
+@@ -351,6 +351,10 @@ egl::Error SurfaceD3D::querySurfacePointerANGLE(EGLint attribute, void **value)
+ {
+ *value = mSwapChain->getKeyedMutex();
+ }
++ else if (attribute == EGL_DEVICE_EXT)
++ {
++ *value = mSwapChain->getDevice();
++ }
+ else UNREACHABLE();
+
+ return egl::NoError();
+diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/SwapChainD3D.h b/src/3rdparty/angle/src/libANGLE/renderer/d3d/SwapChainD3D.h
+index 81c3d13da4..017737b878 100644
+--- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/SwapChainD3D.h
++++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/SwapChainD3D.h
+@@ -58,6 +58,7 @@ class SwapChainD3D : angle::NonCopyable
+ EGLint width,
+ EGLint height) = 0;
+ virtual void recreate() = 0;
++ virtual void *getDevice() { return nullptr; }
+
+ virtual RenderTargetD3D *getColorRenderTarget() = 0;
+ virtual RenderTargetD3D *getDepthStencilRenderTarget() = 0;
+diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.cpp
+index 19bcaae776..05bb5d9863 100644
+--- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.cpp
++++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.cpp
+@@ -1007,6 +1007,11 @@ void SwapChain11::recreate()
+ // possibly should use this method instead of reset
+ }
+
++void *rx::SwapChain11::getDevice()
++{
++ return mRenderer->getDevice();
++}
++
+ RenderTargetD3D *SwapChain11::getColorRenderTarget()
+ {
+ return &mColorRenderTarget;
+diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.h b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.h
+index 5ce2af193d..eca068210b 100644
+--- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.h
++++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.h
+@@ -61,6 +61,8 @@ class SwapChain11 final : public SwapChainD3D
+ void *getKeyedMutex() override;
+ EGLint getSamples() const { return mEGLSamples; }
+
++ void *getDevice() override;
++
+ egl::Error getSyncValues(EGLuint64KHR *ust, EGLuint64KHR *msc, EGLuint64KHR *sbc) override;
+
+ private:
+--
+2.15.0.windows.1
+