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