1From 2f2aabec376cb749a7d0db9e7f754fbfd28b8a72 Mon Sep 17 00:00:00 2001
2From: Oliver Wolff <oliver.wolff@qt.io>
3Date: Wed, 22 Aug 2018 12:58:13 +0200
4Subject: [PATCH 2/8] ANGLE: Add support for querying platform device
5
6The EGL_EXT_device_base extension allows for querying the platform
7device of the graphics hardware via eglQueryDisplayAttribEXT().
8As that extension is not supported by ANGLE, this patch adds similar
9functionality to the existing eglQuerySurfacePointerANGLE API. When
10EGL_DEVICE_EXT is passed as the queried attribute, the underlying
11D3D/DXGI device pointer is passed back to the caller via the value
12argument.
13
14The D3D device is needed for video support in QtMultimedia as well as
15the IDXGIDevice3::Trim() calls required by the Windows Store.
16
17Change-Id: Ib3dfd3edc47dbcc02b07f71980ba785508f2ee57
18---
19 src/3rdparty/angle/src/libANGLE/renderer/d3d/SurfaceD3D.cpp        | 4 ++++
20 src/3rdparty/angle/src/libANGLE/renderer/d3d/SwapChainD3D.h        | 1 +
21 src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.cpp | 5 +++++
22 src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.h   | 2 ++
23 4 files changed, 12 insertions(+)
24
25diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/SurfaceD3D.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/SurfaceD3D.cpp
26index 8e78b71a36..ceb022d14c 100644
27--- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/SurfaceD3D.cpp
28+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/SurfaceD3D.cpp
29@@ -351,6 +351,10 @@ egl::Error SurfaceD3D::querySurfacePointerANGLE(EGLint attribute, void **value)
30     {
31         *value = mSwapChain->getKeyedMutex();
32     }
33+    else if (attribute == EGL_DEVICE_EXT)
34+    {
35+        *value = mSwapChain->getDevice();
36+    }
37     else UNREACHABLE();
38
39     return egl::NoError();
40diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/SwapChainD3D.h b/src/3rdparty/angle/src/libANGLE/renderer/d3d/SwapChainD3D.h
41index 81c3d13da4..017737b878 100644
42--- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/SwapChainD3D.h
43+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/SwapChainD3D.h
44@@ -58,6 +58,7 @@ class SwapChainD3D : angle::NonCopyable
45                             EGLint width,
46                             EGLint height) = 0;
47     virtual void recreate() = 0;
48+    virtual void *getDevice() { return nullptr; }
49
50     virtual RenderTargetD3D *getColorRenderTarget() = 0;
51     virtual RenderTargetD3D *getDepthStencilRenderTarget() = 0;
52diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.cpp
53index 19bcaae776..05bb5d9863 100644
54--- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.cpp
55+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.cpp
56@@ -1007,6 +1007,11 @@ void SwapChain11::recreate()
57     // possibly should use this method instead of reset
58 }
59
60+void *rx::SwapChain11::getDevice()
61+{
62+    return mRenderer->getDevice();
63+}
64+
65 RenderTargetD3D *SwapChain11::getColorRenderTarget()
66 {
67     return &mColorRenderTarget;
68diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.h b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.h
69index 5ce2af193d..eca068210b 100644
70--- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.h
71+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.h
72@@ -61,6 +61,8 @@ class SwapChain11 final : public SwapChainD3D
73     void *getKeyedMutex() override;
74     EGLint getSamples() const { return mEGLSamples; }
75
76+    void *getDevice() override;
77+
78     egl::Error getSyncValues(EGLuint64KHR *ust, EGLuint64KHR *msc, EGLuint64KHR *sbc) override;
79
80   private:
81--
822.15.0.windows.1
83
84