diff options
Diffstat (limited to 'src/angle/patches')
20 files changed, 0 insertions, 1156 deletions
diff --git a/src/angle/patches/0001-ANGLE-Use-pixel-sizes-in-the-XAML-swap-chain.patch b/src/angle/patches/0001-ANGLE-Use-pixel-sizes-in-the-XAML-swap-chain.patch deleted file mode 100644 index 618ad08b4b..0000000000 --- a/src/angle/patches/0001-ANGLE-Use-pixel-sizes-in-the-XAML-swap-chain.patch +++ /dev/null @@ -1,135 +0,0 @@ -From b1f0b50c19ec17df554faa1335d2b989e262b831 Mon Sep 17 00:00:00 2001 -From: Oliver Wolff <oliver.wolff@qt.io> -Date: Wed, 22 Aug 2018 09:21:04 +0200 -Subject: [PATCH 1/8] ANGLE: Use pixel sizes in the XAML swap chain - -This is necessary for Qt applications, as they render to GL in physical -pixels. This is consistent with the CoreWindow swap chain behavior. - -In order to achieve proper scaling, the scale factor has to be initialized -properly in InspectableNativeWindow. - -This change only affects Windows Runtime targets. - -Change-Id: I92a365f33752ed49c960e390bbf89cc33ccc8004 ---- - .../d3d/d3d11/winrt/CoreWindowNativeWindow.cpp | 23 ------------------- - .../d3d/d3d11/winrt/CoreWindowNativeWindow.h | 2 -- - .../d3d/d3d11/winrt/InspectableNativeWindow.cpp | 26 +++++++++++++++++++--- - .../d3d/d3d11/winrt/InspectableNativeWindow.h | 7 +++++- - 4 files changed, 29 insertions(+), 29 deletions(-) - -diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/winrt/CoreWindowNativeWindow.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/winrt/CoreWindowNativeWindow.cpp -index dd37ace87e..1ef90e7b09 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/winrt/CoreWindowNativeWindow.cpp -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/winrt/CoreWindowNativeWindow.cpp -@@ -205,27 +205,4 @@ HRESULT GetCoreWindowSizeInPixels(const ComPtr<ABI::Windows::UI::Core::ICoreWind - - return result; - } -- --static float GetLogicalDpi() --{ -- ComPtr<ABI::Windows::Graphics::Display::IDisplayPropertiesStatics> displayProperties; -- -- if (SUCCEEDED(GetActivationFactory(HStringReference(RuntimeClass_Windows_Graphics_Display_DisplayProperties).Get(), displayProperties.GetAddressOf()))) -- { -- float dpi = 96.0f; -- if (SUCCEEDED(displayProperties->get_LogicalDpi(&dpi))) -- { -- return dpi; -- } -- } -- -- // Return 96 dpi as a default if display properties cannot be obtained. -- return 96.0f; --} -- --float ConvertDipsToPixels(float dips) --{ -- static const float dipsPerInch = 96.0f; -- return dips * GetLogicalDpi() / dipsPerInch; --} - } -diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/winrt/CoreWindowNativeWindow.h b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/winrt/CoreWindowNativeWindow.h -index d43bf0ba5f..21855c2c3b 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/winrt/CoreWindowNativeWindow.h -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/winrt/CoreWindowNativeWindow.h -@@ -19,8 +19,6 @@ typedef ABI::Windows::Foundation::__FITypedEventHandler_2_Windows__CUI__CCore__C - - namespace rx - { --float ConvertDipsToPixels(float dips); -- - class CoreWindowNativeWindow : public InspectableNativeWindow, public std::enable_shared_from_this<CoreWindowNativeWindow> - { - public: -diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/winrt/InspectableNativeWindow.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/winrt/InspectableNativeWindow.cpp -index cc81521320..1bd796e58f 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/winrt/InspectableNativeWindow.cpp -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/winrt/InspectableNativeWindow.cpp -@@ -270,8 +270,28 @@ HRESULT GetOptionalSinglePropertyValue(const ComPtr<ABI::Windows::Foundation::Co - - RECT InspectableNativeWindow::clientRect(const Size &size) - { -- // We don't have to check if a swapchain scale was specified here; the default value is 1.0f -- // which will have no effect. -- return {0, 0, lround(size.Width * mSwapChainScale), lround(size.Height * mSwapChainScale)}; -+ return {0, 0, static_cast<long>(ConvertDipsToPixels(size.Width)), -+ static_cast<long>(ConvertDipsToPixels(size.Height))}; -+} -+ -+float GetLogicalDpi() -+{ -+ ComPtr<ABI::Windows::Graphics::Display::IDisplayPropertiesStatics> displayProperties; -+ float dpi = 96.0f; -+ -+ if (SUCCEEDED(GetActivationFactory(HStringReference(RuntimeClass_Windows_Graphics_Display_DisplayProperties).Get(), displayProperties.GetAddressOf()))) -+ { -+ if (SUCCEEDED(displayProperties->get_LogicalDpi(&dpi))) -+ { -+ return dpi; -+ } -+ } -+ return dpi; -+} -+ -+float ConvertDipsToPixels(float dips) -+{ -+ static const float dipsPerInch = 96.0f; -+ return lround((dips * GetLogicalDpi() / dipsPerInch)); - } - } -diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/winrt/InspectableNativeWindow.h b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/winrt/InspectableNativeWindow.h -index 3e67269f36..d81c3e5fb9 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/winrt/InspectableNativeWindow.h -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/winrt/InspectableNativeWindow.h -@@ -30,6 +30,9 @@ using namespace ABI::Windows::Foundation::Collections; - - namespace rx - { -+float ConvertDipsToPixels(float dips); -+float GetLogicalDpi(); -+ - class InspectableNativeWindow - { - public: -@@ -37,12 +40,14 @@ class InspectableNativeWindow - mSupportsSwapChainResize(true), - mSwapChainSizeSpecified(false), - mSwapChainScaleSpecified(false), -- mSwapChainScale(1.0f), - mClientRectChanged(false), - mClientRect({0,0,0,0}), - mNewClientRect({0,0,0,0}) - { - mSizeChangedEventToken.value = 0; -+ mSwapChainScale = 96.0f / GetLogicalDpi(); -+ if (mSwapChainScale != 1.0f) -+ mSwapChainScaleSpecified = true; - } - virtual ~InspectableNativeWindow(){} - --- -2.15.0.windows.1 - diff --git a/src/angle/patches/0001-Fix-build-for-MinGW.patch b/src/angle/patches/0001-Fix-build-for-MinGW.patch deleted file mode 100644 index 186acd39dc..0000000000 --- a/src/angle/patches/0001-Fix-build-for-MinGW.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 75f877269a86aa111afbf816be14ef6c36ea6478 Mon Sep 17 00:00:00 2001 -From: Oliver Wolff <oliver.wolff@qt.io> -Date: Mon, 2 Jul 2018 12:56:39 +0200 -Subject: [PATCH] Fix build for MinGW - -SSE is not properly supported for Mingw yet. ---- - src/common/platform.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/3rdparty/angle/src/common/platform.h b/src/3rdparty/angle/srccommon/platform.h -index 0065fd2..47cd57b 100644 ---- a/src/3rdparty/angle/src/common/platform.h -+++ b/src/3rdparty/angle/src/common/platform.h -@@ -86,7 +86,7 @@ - #if defined(_MSC_VER) && !defined(_M_ARM) - #include <intrin.h> - #define ANGLE_USE_SSE --#elif defined(__GNUC__) && (defined(__x86_64__) || defined(__i386__)) -+#elif defined(__GNUC__) && (defined(__x86_64__) || defined(__i386__)) && !defined(__MINGW32__) - #include <x86intrin.h> - #define ANGLE_USE_SSE - #endif --- -2.10.2.windows.1 - 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 deleted file mode 100644 index d548ce465f..0000000000 --- a/src/angle/patches/0002-ANGLE-Add-support-for-querying-platform-device.patch +++ /dev/null @@ -1,83 +0,0 @@ -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 - diff --git a/src/angle/patches/0002-ANGLE-Fix-build-for-ARM.patch b/src/angle/patches/0002-ANGLE-Fix-build-for-ARM.patch deleted file mode 100644 index 04517a116e..0000000000 --- a/src/angle/patches/0002-ANGLE-Fix-build-for-ARM.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 416fb93dae5009bb51da9f6720a95918a2c79e78 Mon Sep 17 00:00:00 2001 -From: Oliver Wolff <oliver.wolff@qt.io> -Date: Fri, 17 Aug 2018 09:54:15 +0200 -Subject: [PATCH] ANGLE: Fix build for ARM - -__popcnt is not available when building for ARM. This patch uses the -approach that is also used in Microsoft's ANGLE fork. - -Change-Id: I98bac36a3b36b0aa81f3b483d3d12cce9f6c5c87 ---- - src/3rdparty/angle/src/common/mathutil.h | 9 +++++++++ - 1 file changed, 9 insertions(+) - -diff --git a/src/3rdparty/angle/src/common/mathutil.h b/src/3rdparty/angle/src/common/mathutil.h -index ca6efc567f..372e432066 100644 ---- a/src/3rdparty/angle/src/common/mathutil.h -+++ b/src/3rdparty/angle/src/common/mathutil.h -@@ -884,6 +884,14 @@ inline uint32_t BitfieldReverse(uint32_t value) - - // Count the 1 bits. - #if defined(ANGLE_PLATFORM_WINDOWS) -+#if defined(_M_ARM) -+inline int BitCount(uint32_t bits) -+{ -+ bits = bits - ((bits >> 1) & 0x55555555); -+ bits = (bits & 0x33333333) + ((bits >> 2) & 0x33333333); -+ return (((bits + (bits >> 4)) & 0x0F0F0F0F) * 0x01010101) >> 24; -+} -+#else // _M_ARM - inline int BitCount(uint32_t bits) - { - return static_cast<int>(__popcnt(bits)); -@@ -893,6 +901,7 @@ inline int BitCount(uint64_t bits) - { - return static_cast<int>(__popcnt64(bits)); - } -+#endif // !_M_ARM - #endif // defined(ANGLE_IS_64_BIT_CPU) - #endif // defined(ANGLE_PLATFORM_WINDOWS) - --- -2.15.0.windows.1 - diff --git a/src/angle/patches/0003-ANGLE-Fix-Windows-Store-D3D-Trim-and-Level-9-require.patch b/src/angle/patches/0003-ANGLE-Fix-Windows-Store-D3D-Trim-and-Level-9-require.patch deleted file mode 100644 index 1f51619f18..0000000000 --- a/src/angle/patches/0003-ANGLE-Fix-Windows-Store-D3D-Trim-and-Level-9-require.patch +++ /dev/null @@ -1,58 +0,0 @@ -From 9b37d0fa0e9eaab3d8bb1dcbba85c072302ee08c Mon Sep 17 00:00:00 2001 -From: Oliver Wolff <oliver.wolff@qt.io> -Date: Wed, 22 Aug 2018 13:01:10 +0200 -Subject: [PATCH 3/8] ANGLE: Fix Windows Store D3D Trim and Level 9 - requirements - -Due to additional validation not covered in previous patches, the Windows -Store certification compatibility had regressed. These changes ensure that -the required D3D behaviors are met. - -Change-Id: If8bc2f8cd4b2f84e1d92a1627951da2537212125 ---- - .../angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp | 15 ++++++++++++++- - src/3rdparty/angle/src/libGLESv2/entry_points_egl_ext.cpp | 2 ++ - 2 files changed, 16 insertions(+), 1 deletion(-) - -diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp -index bd14f4de2a..f696e360ef 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp -@@ -523,7 +523,20 @@ Renderer11::Renderer11(egl::Display *display) - - if (requestedMajorVersion == 9 && requestedMinorVersion == 3) - { -- mAvailableFeatureLevels.push_back(D3D_FEATURE_LEVEL_9_3); -+ if (requestedMinorVersion == EGL_DONT_CARE || requestedMinorVersion >= 3) -+ { -+ mAvailableFeatureLevels.push_back(D3D_FEATURE_LEVEL_9_3); -+ } -+#if defined(ANGLE_ENABLE_WINDOWS_STORE) -+ if (requestedMinorVersion == EGL_DONT_CARE || requestedMinorVersion >= 2) -+ { -+ mAvailableFeatureLevels.push_back(D3D_FEATURE_LEVEL_9_2); -+ } -+ if (requestedMinorVersion == EGL_DONT_CARE || requestedMinorVersion >= 1) -+ { -+ mAvailableFeatureLevels.push_back(D3D_FEATURE_LEVEL_9_1); -+ } -+#endif - } - - EGLint requestedDeviceType = static_cast<EGLint>(attributes.get( -diff --git a/src/3rdparty/angle/src/libGLESv2/entry_points_egl_ext.cpp b/src/3rdparty/angle/src/libGLESv2/entry_points_egl_ext.cpp -index b863817920..ee8cdb94dc 100644 ---- a/src/3rdparty/angle/src/libGLESv2/entry_points_egl_ext.cpp -+++ b/src/3rdparty/angle/src/libGLESv2/entry_points_egl_ext.cpp -@@ -54,6 +54,8 @@ EGLBoolean EGLAPIENTRY QuerySurfacePointerANGLE(EGLDisplay dpy, EGLSurface surfa - // validate the attribute parameter - switch (attribute) - { -+ case EGL_DEVICE_EXT: -+ break; - case EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE: - if (!display->getExtensions().surfaceD3DTexture2DShareHandle) - { --- -2.15.0.windows.1 - diff --git a/src/angle/patches/0004-ANGLE-fix-usage-of-shared-handles-for-WinRT-applicat.patch b/src/angle/patches/0004-ANGLE-fix-usage-of-shared-handles-for-WinRT-applicat.patch deleted file mode 100644 index 72a72f15be..0000000000 --- a/src/angle/patches/0004-ANGLE-fix-usage-of-shared-handles-for-WinRT-applicat.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 67125df3f31dfad0feec81c49c2b317c6d418f4e Mon Sep 17 00:00:00 2001 -From: Oliver Wolff <oliver.wolff@qt.io> -Date: Wed, 22 Aug 2018 13:08:19 +0200 -Subject: [PATCH 4/8] ANGLE: fix usage of shared handles for WinRT applications - -The check is not relevant in Qt's context and was skipped before but -it sneaked back in with the latest ANGLE update. - -Change-Id: Ic44de5468a3254afd76ef4804d97d245676daeb1 ---- - src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp -index f696e360ef..cb4e51e42a 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp -@@ -2270,6 +2270,8 @@ bool Renderer11::getShareHandleSupport() const - return false; - } - -+ // Qt: we don't care about the 9_3 limitation -+#if 0 - // Also disable share handles on Feature Level 9_3, since it doesn't support share handles on - // RGBA8 textures/swapchains. - if (mRenderer11DeviceCaps.featureLevel <= D3D_FEATURE_LEVEL_9_3) -@@ -2277,6 +2279,7 @@ bool Renderer11::getShareHandleSupport() const - mSupportsShareHandles = false; - return false; - } -+#endif - - // Find out which type of D3D11 device the Renderer11 is using - d3d11::ANGLED3D11DeviceType deviceType = getDeviceType(); --- -2.15.0.windows.1 - diff --git a/src/angle/patches/0005-ANGLE-Fix-initialization-of-zero-sized-window.patch b/src/angle/patches/0005-ANGLE-Fix-initialization-of-zero-sized-window.patch deleted file mode 100644 index eb67278628..0000000000 --- a/src/angle/patches/0005-ANGLE-Fix-initialization-of-zero-sized-window.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 8e649097b0e11d8b975ba321f343142dd97889cb Mon Sep 17 00:00:00 2001 -From: Oliver Wolff <oliver.wolff@qt.io> -Date: Wed, 22 Aug 2018 13:12:07 +0200 -Subject: [PATCH 5/8] ANGLE: Fix initialization of zero-sized window - -The clientRect might be empty when creating a window of zero size. The -side effect of a division by zero is that matrix transformation fails -and hence the swapchain gets into an invalid state. - -Change-Id: Idbaed72deadb7b87052ac27e194a40d1810e6f7a ---- - .../libANGLE/renderer/d3d/d3d11/winrt/SwapChainPanelNativeWindow.cpp | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/winrt/SwapChainPanelNativeWindow.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/winrt/SwapChainPanelNativeWindow.cpp -index c6d07fc888..3425fad95d 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/winrt/SwapChainPanelNativeWindow.cpp -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/winrt/SwapChainPanelNativeWindow.cpp -@@ -324,8 +324,8 @@ HRESULT SwapChainPanelNativeWindow::createSwapChain(ID3D11Device *device, - - HRESULT SwapChainPanelNativeWindow::scaleSwapChain(const Size &windowSize, const RECT &clientRect) - { -- Size renderScale = {windowSize.Width / (float)clientRect.right, -- windowSize.Height / (float)clientRect.bottom}; -+ Size renderScale = {windowSize.Width / std::max(LONG(1), clientRect.right), -+ windowSize.Height / std::max(LONG(1), clientRect.bottom)}; - // Setup a scale matrix for the swap chain - DXGI_MATRIX_3X2_F scaleMatrix = {}; - scaleMatrix._11 = renderScale.Width; --- -2.15.0.windows.1 - diff --git a/src/angle/patches/0006-ANGLE-Fix-flickering-on-resize-when-D3D9-is-used.patch b/src/angle/patches/0006-ANGLE-Fix-flickering-on-resize-when-D3D9-is-used.patch deleted file mode 100644 index f515b0a072..0000000000 --- a/src/angle/patches/0006-ANGLE-Fix-flickering-on-resize-when-D3D9-is-used.patch +++ /dev/null @@ -1,165 +0,0 @@ -From 0fc1b9c7e87ab6cdb6bf7c81a1eee0a1d1f74e92 Mon Sep 17 00:00:00 2001 -From: Oliver Wolff <oliver.wolff@qt.io> -Date: Wed, 22 Aug 2018 13:24:43 +0200 -Subject: [PATCH 6/8] ANGLE: Fix flickering on resize when D3D9 is used - -By reverting ANGLE change d3b84ab51db09de238459b0dff2e8420c09aabf3 -we get rid of the flickering that happens on resize when D3D9 is -used. The issue that was fixed there is not relevant in Qt's -context so it is safe to revert the change. - -Task-number: QTBUG-59893 -Change-Id: I9306314b892612fbd1f7a058a2e606aedc0367bb ---- - .../angle/src/libANGLE/renderer/d3d/SurfaceD3D.cpp | 89 ++++++++++++++++++++++ - .../angle/src/libANGLE/renderer/d3d/SurfaceD3D.h | 4 + - 2 files changed, 93 insertions(+) - -diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/SurfaceD3D.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/SurfaceD3D.cpp -index ceb022d14c..8d3f44f2ad 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/SurfaceD3D.cpp -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/SurfaceD3D.cpp -@@ -38,6 +38,7 @@ SurfaceD3D::SurfaceD3D(const egl::SurfaceState &state, - mDepthStencilFormat(state.config->depthStencilFormat), - mSwapChain(nullptr), - mSwapIntervalDirty(true), -+ mWindowSubclassed(false), - mNativeWindow(renderer->createNativeWindow(window, state.config, attribs)), - mWidth(static_cast<EGLint>(attribs.get(EGL_WIDTH, 0))), - mHeight(static_cast<EGLint>(attribs.get(EGL_HEIGHT, 0))), -@@ -45,6 +46,7 @@ SurfaceD3D::SurfaceD3D(const egl::SurfaceState &state, - mShareHandle(0), - mD3DTexture(nullptr) - { -+ subclassWindow(); - if (window != nullptr && !mFixedSize) - { - mWidth = -1; -@@ -72,6 +74,7 @@ SurfaceD3D::SurfaceD3D(const egl::SurfaceState &state, - - SurfaceD3D::~SurfaceD3D() - { -+ unsubclassWindow(); - releaseSwapChain(); - SafeDelete(mNativeWindow); - SafeRelease(mD3DTexture); -@@ -256,6 +259,92 @@ egl::Error SurfaceD3D::swapRect(const gl::Context *context, - return egl::NoError(); - } - -+#if !defined(ANGLE_ENABLE_WINDOWS_STORE) -+#define kSurfaceProperty _TEXT("Egl::SurfaceOwner") -+#define kParentWndProc _TEXT("Egl::SurfaceParentWndProc") -+#define kDisplayProperty _TEXT("Egl::Display") -+ -+static LRESULT CALLBACK SurfaceWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) -+{ -+ if (message == WM_SIZE) -+ { -+ SurfaceD3D* surf = reinterpret_cast<SurfaceD3D*>(GetProp(hwnd, kSurfaceProperty)); -+ if(surf) -+ { -+ egl::Display *display = reinterpret_cast<egl::Display *>(GetProp(hwnd, kDisplayProperty)); -+ surf->checkForOutOfDateSwapChain(display->getProxyContext()); -+ } -+ } -+ WNDPROC prevWndFunc = reinterpret_cast<WNDPROC >(GetProp(hwnd, kParentWndProc)); -+ return CallWindowProc(prevWndFunc, hwnd, message, wparam, lparam); -+} -+#endif -+ -+void SurfaceD3D::subclassWindow() -+{ -+#if !defined(ANGLE_ENABLE_WINDOWS_STORE) -+ HWND window = mNativeWindow->getNativeWindow(); -+ if (!window) -+ { -+ return; -+ } -+ -+ DWORD processId; -+ DWORD threadId = GetWindowThreadProcessId(window, &processId); -+ if (processId != GetCurrentProcessId() || threadId != GetCurrentThreadId()) -+ { -+ return; -+ } -+ -+ SetLastError(0); -+ LONG_PTR oldWndProc = SetWindowLongPtr(window, GWLP_WNDPROC, reinterpret_cast<LONG_PTR>(SurfaceWindowProc)); -+ if(oldWndProc == 0 && GetLastError() != ERROR_SUCCESS) -+ { -+ mWindowSubclassed = false; -+ return; -+ } -+ -+ SetProp(window, kSurfaceProperty, reinterpret_cast<HANDLE>(this)); -+ SetProp(window, kParentWndProc, reinterpret_cast<HANDLE>(oldWndProc)); -+ SetProp(window, kDisplayProperty, reinterpret_cast<HANDLE>(mDisplay)); -+ mWindowSubclassed = true; -+#endif -+} -+ -+void SurfaceD3D::unsubclassWindow() -+{ -+ if (!mWindowSubclassed) -+ { -+ return; -+ } -+ -+#if !defined(ANGLE_ENABLE_WINDOWS_STORE) -+ HWND window = mNativeWindow->getNativeWindow(); -+ if (!window) -+ { -+ return; -+ } -+ -+ // un-subclass -+ LONG_PTR parentWndFunc = reinterpret_cast<LONG_PTR>(GetProp(window, kParentWndProc)); -+ -+ // Check the windowproc is still SurfaceWindowProc. -+ // If this assert fails, then it is likely the application has subclassed the -+ // hwnd as well and did not unsubclass before destroying its EGL context. The -+ // application should be modified to either subclass before initializing the -+ // EGL context, or to unsubclass before destroying the EGL context. -+ if(parentWndFunc) -+ { -+ LONG_PTR prevWndFunc = SetWindowLongPtr(window, GWLP_WNDPROC, parentWndFunc); -+ ASSERT(prevWndFunc == reinterpret_cast<LONG_PTR>(SurfaceWindowProc)); -+ } -+ -+ RemoveProp(window, kSurfaceProperty); -+ RemoveProp(window, kParentWndProc); -+ RemoveProp(window, kDisplayProperty); -+#endif -+ mWindowSubclassed = false; -+} -+ -+ - egl::Error SurfaceD3D::checkForOutOfDateSwapChain(const gl::Context *context) - { - RECT client; -diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/SurfaceD3D.h b/src/3rdparty/angle/src/libANGLE/renderer/d3d/SurfaceD3D.h -index 4fd45a6dfd..01d2573244 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/SurfaceD3D.h -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/SurfaceD3D.h -@@ -82,6 +82,9 @@ class SurfaceD3D : public SurfaceImpl - int backbufferWidth, - int backbufferHeight); - -+ void subclassWindow(); -+ void unsubclassWindow(); -+ - RendererD3D *mRenderer; - egl::Display *mDisplay; - -@@ -93,6 +96,7 @@ class SurfaceD3D : public SurfaceImpl - - SwapChainD3D *mSwapChain; - bool mSwapIntervalDirty; -+ bool mWindowSubclassed; // Indicates whether we successfully subclassed mWindow for WM_RESIZE hooking - - NativeWindowD3D *mNativeWindow; // Handler for the Window that the surface is created for. - EGLint mWidth; --- -2.15.0.windows.1 - diff --git a/src/angle/patches/0007-ANGLE-Fix-resizing-of-windows.patch b/src/angle/patches/0007-ANGLE-Fix-resizing-of-windows.patch deleted file mode 100644 index 2b4938be9b..0000000000 --- a/src/angle/patches/0007-ANGLE-Fix-resizing-of-windows.patch +++ /dev/null @@ -1,48 +0,0 @@ -From f1568e10c2bd46450adebbd838bd32e4833a0a5c Mon Sep 17 00:00:00 2001 -From: Oliver Wolff <oliver.wolff@qt.io> -Date: Wed, 22 Aug 2018 13:32:44 +0200 -Subject: [PATCH 7/8] ANGLE: Fix resizing of windows - -Use the correct height/width values when calculating -the vector for resizing the window content and the -new size as viewport size. - -Task-number: QTBUG-62475 -Change-Id: I33a8dc1379a908e991b04bc31dfc6254a6d005c9 ---- - .../src/libANGLE/renderer/d3d/d3d11/SwapChain11.cpp | 19 +++++++++---------- - 1 file changed, 9 insertions(+), 10 deletions(-) - -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 05bb5d9863..dcfd06484d 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.cpp -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.cpp -@@ -796,16 +796,15 @@ EGLint SwapChain11::copyOffscreenToBackbuffer(const gl::Context *context, - d3d11::PositionTexCoordVertex *vertices = static_cast<d3d11::PositionTexCoordVertex*>(mappedResource.pData); - - // Create a quad in homogeneous coordinates -- float x1 = (x / float(mWidth)) * 2.0f - 1.0f; -- float y1 = (y / float(mHeight)) * 2.0f - 1.0f; -- float x2 = ((x + width) / float(mWidth)) * 2.0f - 1.0f; -- float y2 = ((y + height) / float(mHeight)) * 2.0f - 1.0f; -- -- float u1 = x / float(mWidth); -- float v1 = y / float(mHeight); -- float u2 = (x + width) / float(mWidth); -- float v2 = (y + height) / float(mHeight); -- -+ float x1 = (x / float(width)) * 2.0f - 1.0f; -+ float y1 = (y / float(height)) * 2.0f - 1.0f; -+ float x2 = ((x + width) / float(width)) * 2.0f - 1.0f; -+ float y2 = ((y + height) / float(height)) * 2.0f - 1.0f; -+ -+ float u1 = x / float(width); -+ float v1 = y / float(height); -+ float u2 = (x + width) / float(width); -+ float v2 = (y + height) / float(height); - // Invert the quad vertices depending on the surface orientation. - if ((mOrientation & EGL_SURFACE_ORIENTATION_INVERT_X_ANGLE) != 0) - { --- -2.15.0.windows.1 - diff --git a/src/angle/patches/0008-ANGLE-winrt-Do-full-screen-update-if-the-the-window-.patch b/src/angle/patches/0008-ANGLE-winrt-Do-full-screen-update-if-the-the-window-.patch deleted file mode 100644 index d9b51fc411..0000000000 --- a/src/angle/patches/0008-ANGLE-winrt-Do-full-screen-update-if-the-the-window-.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 5a58c6c7d97f003aa4a34ae130697dc81cc8fdf8 Mon Sep 17 00:00:00 2001 -From: Oliver Wolff <oliver.wolff@qt.io> -Date: Wed, 22 Aug 2018 15:17:52 +0200 -Subject: [PATCH 8/8] ANGLE: winrt: Do full screen update if the the window - size is reduced - -We cannot do partial updates if the window size is reduced as this will -result in a "pDstBox is not a valid box for the destination subresource." -error. - -Change-Id: I9a8d91bca961f52e1aab1bec5321922cfc842fb3 ---- - .../src/libANGLE/renderer/d3d/d3d11/TextureStorage11.cpp | 11 ++++++++--- - 1 file changed, 8 insertions(+), 3 deletions(-) - -diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/TextureStorage11.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/TextureStorage11.cpp -index 8f76d16c30..b702450ded 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/TextureStorage11.cpp -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/TextureStorage11.cpp -@@ -664,9 +664,14 @@ gl::Error TextureStorage11::setData(const gl::Context *context, - // with compressed formats in the calling logic. - ASSERT(!internalFormatInfo.compressed); - -- const int width = destBox ? destBox->width : static_cast<int>(image->getWidth()); -- const int height = destBox ? destBox->height : static_cast<int>(image->getHeight()); -- const int depth = destBox ? destBox->depth : static_cast<int>(image->getDepth()); -+ const int imageWidth = static_cast<int>(image->getWidth()); -+ const int width = destBox ? destBox->width : imageWidth; -+ const int imageHeight = static_cast<int>(image->getHeight()); -+ const int height = destBox ? destBox->height : imageHeight; -+ const int imageDepth = static_cast<int>(image->getDepth()); -+ const int depth = destBox ? destBox->depth : imageDepth; -+ if (imageWidth < width || imageHeight < height || imageDepth < depth) -+ fullUpdate = true; - GLuint srcRowPitch = 0; - ANGLE_TRY_RESULT( - internalFormatInfo.computeRowPitch(type, width, unpack.alignment, unpack.rowLength), --- -2.15.0.windows.1 - diff --git a/src/angle/patches/0009-Revert-Fix-scanForWantedComponents-not-ignoring-attr.patch b/src/angle/patches/0009-Revert-Fix-scanForWantedComponents-not-ignoring-attr.patch deleted file mode 100644 index f57f528ad8..0000000000 --- a/src/angle/patches/0009-Revert-Fix-scanForWantedComponents-not-ignoring-attr.patch +++ /dev/null @@ -1,67 +0,0 @@ -From 2fb4d8087c4f324b7a3f2e21554374de7060e996 Mon Sep 17 00:00:00 2001 -From: Andre de la Rocha <andre.rocha@qt.io> -Date: Tue, 11 Sep 2018 12:52:28 +0200 -Subject: [PATCH] Revert "Fix scanForWantedComponents not ignoring - attribute values of 0." - -This patch reverts commit 2648d9297f25a0d1fa2837f020975a45d4e8a8b9 as a -workaround for the "banding" artifacts we were seeing in Qt. Angle -returns a list of supported graphic formats or configurations, sorting -it in a way that the first one should be the one that fits better the -requested format. In Qt we use the first thing we receive in the list. -In the current Angle version, however, a fix has changed the way in -which the list is sorted. In the old version the first element would be -a 32-bit graphic format, while now it's a 16-bit one, resulting in the -"banding" artifacts. The workaround reverts back to the previous sorting -behavior. ---- - .../libANGLE/Config.cpp | 29 +++++++++++++++++------------ - 1 file changed, 17 insertions(+), 12 deletions(-) - -diff --git a/src/3rdparty/angle/src/libANGLE/Config.cpp b/src/3rdparty/angle/src/libANGLE/Config.cpp -index ccf64c8f8..4f14e73ef 100644 ---- a/src/3rdparty/angle/src/libANGLE/Config.cpp -+++ b/src/3rdparty/angle/src/libANGLE/Config.cpp -@@ -181,22 +181,27 @@ class ConfigSorter - } - - private: -- static bool wantsComponent(const AttributeMap &attributeMap, EGLAttrib component) -+ void scanForWantedComponents(const AttributeMap &attributeMap) - { - // [EGL 1.5] section 3.4.1.2 page 30 - // Sorting rule #3: by larger total number of color bits, not considering - // components that are 0 or don't-care. -- EGLAttrib value = attributeMap.get(component, 0); -- return value != 0 && value != EGL_DONT_CARE; -- } -- -- void scanForWantedComponents(const AttributeMap &attributeMap) -- { -- mWantRed = wantsComponent(attributeMap, EGL_RED_SIZE); -- mWantGreen = wantsComponent(attributeMap, EGL_GREEN_SIZE); -- mWantBlue = wantsComponent(attributeMap, EGL_BLUE_SIZE); -- mWantAlpha = wantsComponent(attributeMap, EGL_ALPHA_SIZE); -- mWantLuminance = wantsComponent(attributeMap, EGL_LUMINANCE_SIZE); -+ for (auto attribIter = attributeMap.begin(); attribIter != attributeMap.end(); attribIter++) -+ { -+ EGLAttrib attributeKey = attribIter->first; -+ EGLAttrib attributeValue = attribIter->second; -+ if (attributeKey != 0 && attributeValue != EGL_DONT_CARE) -+ { -+ switch (attributeKey) -+ { -+ case EGL_RED_SIZE: mWantRed = true; break; -+ case EGL_GREEN_SIZE: mWantGreen = true; break; -+ case EGL_BLUE_SIZE: mWantBlue = true; break; -+ case EGL_ALPHA_SIZE: mWantAlpha = true; break; -+ case EGL_LUMINANCE_SIZE: mWantLuminance = true; break; -+ } -+ } -+ } - } - - EGLint wantedComponentsSize(const Config &config) const --- -2.14.1.windows.1 - diff --git a/src/angle/patches/0010-ANGLE-Disable-multisampling-to-avoid-crash-in-Qt-app.patch b/src/angle/patches/0010-ANGLE-Disable-multisampling-to-avoid-crash-in-Qt-app.patch deleted file mode 100644 index 2fb65ce220..0000000000 --- a/src/angle/patches/0010-ANGLE-Disable-multisampling-to-avoid-crash-in-Qt-app.patch +++ /dev/null @@ -1,41 +0,0 @@ -From d239cceef88fbbe4cf7479025f12934d9c3c83a5 Mon Sep 17 00:00:00 2001 -From: Andre de la Rocha <andre.rocha@qt.io> -Date: Tue, 11 Sep 2018 12:57:23 +0200 -Subject: [PATCH] ANGLE: Disable multisampling to avoid crash in Qt - applications - -This patch adds a workaround for the crash that occurs with multisampling -enabled in some Qt applications (e.g., the 2dpainting example). The old -Angle release we were using lacked support for multisampling, so it was -ignored when requested. This current version seems to support it, but is -causing a crash in the D3D11 shaders, so this workaround disables that -support. ---- - .../libANGLE/renderer/d3d/d3d11/Renderer11.cpp | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp -index bd14f4de2..f487538a5 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp -@@ -997,6 +997,8 @@ gl::SupportedSampleSet Renderer11::generateSampleSetForEGLConfig( - { - gl::SupportedSampleSet sampleCounts; - -+#if 0 // Qt: Disabling support for multisampling as it is causing a crash in the D3D11 shaders. -+ - // Generate a new set from the set intersection of sample counts between the color and depth - // format caps. - std::set_intersection(colorBufferFormatCaps.sampleCounts.begin(), -@@ -1017,6 +1019,8 @@ gl::SupportedSampleSet Renderer11::generateSampleSetForEGLConfig( - sampleCounts = depthStencilBufferFormatCaps.sampleCounts; - } - -+#endif -+ - // Always support 0 samples - sampleCounts.insert(0); - --- -2.14.1.windows.1 - diff --git a/src/angle/patches/0011-ANGLE-Fix-build-for-ARM64.patch b/src/angle/patches/0011-ANGLE-Fix-build-for-ARM64.patch deleted file mode 100644 index 3a43894a8a..0000000000 --- a/src/angle/patches/0011-ANGLE-Fix-build-for-ARM64.patch +++ /dev/null @@ -1,63 +0,0 @@ -From 416fb93dae5009bb51da9f6720a95918a2c79e78 Mon Sep 17 00:00:00 2001 -From: Thomas Miller <thomaslmiller91@gmail.com> -Date: Tue Oct 16 08:29:58 2018 -0700 -Subject: [PATCH] ANGLE: Fix build for ARM64 - -__popcnt, SSE, and intrin.h are not available when building for ARM64. ---- - src/3rdparty/angle/src/common/mathutil.h | 8 ++++---- - src/3rdparty/angle/src/common/platform.h | 2 +- - 2 files changed, 5 insertions(+), 5 deletions(-) - -diff --git a/src/3rdparty/angle/src/common/mathutil.h b/src/3rdparty/angle/src/common/mathutil.h -index 372e432066..88aedddfe8 100644 ---- a/src/3rdparty/angle/src/common/mathutil.h -+++ b/src/3rdparty/angle/src/common/mathutil.h -@@ -150,7 +150,7 @@ inline bool supportsSSE2() - return supports; - } - --#if defined(ANGLE_PLATFORM_WINDOWS) && !defined(_M_ARM) -+#if defined(ANGLE_PLATFORM_WINDOWS) && !defined(_M_ARM) && !defined(_M_ARM64) - { - int info[4]; - __cpuid(info, 0); -@@ -162,7 +162,7 @@ inline bool supportsSSE2() - supports = (info[3] >> 26) & 1; - } - } --#endif // defined(ANGLE_PLATFORM_WINDOWS) && !defined(_M_ARM) -+#endif // defined(ANGLE_PLATFORM_WINDOWS) && !defined(_M_ARM) && !defined(_M_ARM64) - checked = true; - return supports; - #else // defined(ANGLE_USE_SSE) -@@ -884,14 +884,14 @@ inline uint32_t BitfieldReverse(uint32_t value) - - // Count the 1 bits. - #if defined(ANGLE_PLATFORM_WINDOWS) --#if defined(_M_ARM) -+#if defined(_M_ARM) || defined(_M_ARM64) - inline int BitCount(uint32_t bits) - { - bits = bits - ((bits >> 1) & 0x55555555); - bits = (bits & 0x33333333) + ((bits >> 2) & 0x33333333); - return (((bits + (bits >> 4)) & 0x0F0F0F0F) * 0x01010101) >> 24; - } --#else // _M_ARM -+#else // _M_ARM || _M_ARM64 - inline int BitCount(uint32_t bits) - { - return static_cast<int>(__popcnt(bits)); -diff --git a/src/3rdparty/angle/src/common/platform.h b/src/3rdparty/angle/src/common/platform.h -index 47cd57b999..fb251da579 100644 ---- a/src/3rdparty/angle/src/common/platform.h -+++ b/src/3rdparty/angle/src/common/platform.h -@@ -83,7 +83,7 @@ - # undef far - #endif - --#if defined(_MSC_VER) && !defined(_M_ARM) -+#if defined(_MSC_VER) && !defined(_M_ARM) && !defined(_M_ARM64) - #include <intrin.h> - #define ANGLE_USE_SSE - #elif defined(__GNUC__) && (defined(__x86_64__) || defined(__i386__)) && !defined(__MINGW32__) diff --git a/src/angle/patches/0012-ANGLE-Dynamically-load-D3D-compiler-from-a-list.patch b/src/angle/patches/0012-ANGLE-Dynamically-load-D3D-compiler-from-a-list.patch deleted file mode 100644 index 7009dec1ba..0000000000 --- a/src/angle/patches/0012-ANGLE-Dynamically-load-D3D-compiler-from-a-list.patch +++ /dev/null @@ -1,59 +0,0 @@ -From dff9676c60c51fa7af0749e1cb54305f112183e3 Mon Sep 17 00:00:00 2001 -From: Oliver Wolff <oliver.wolff@qt.io> -Date: Mon, 10 Dec 2018 08:33:14 +0100 -Subject: [PATCH] ANGLE: Dynamically load D3D compiler from a list - -If the default compiler cannot be found, load it from a list of DLL names, -including a non-versioned proxy DLL provided by Qt. On Desktop Windows, -the default compiler can also be specified by an environment variable, -QT_D3DCOMPILER_DLL. ---- - src/3rdparty/angle/src/libANGLE/renderer/d3d/HLSLCompiler.cpp | 25 +++++++++++++++++++++++++ - 1 file changed, 25 insertions(+) - -diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/HLSLCompiler.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/HLSLCompiler.cpp -index b38765070..5d47308d6 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/HLSLCompiler.cpp -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/HLSLCompiler.cpp -@@ -14,6 +14,10 @@ - #include "libANGLE/histogram_macros.h" - #include "third_party/trace_event/trace_event.h" - -+#ifndef QT_D3DCOMPILER_DLL -+#define QT_D3DCOMPILER_DLL D3DCOMPILER_DLL -+#endif -+ - #if ANGLE_APPEND_ASSEMBLY_TO_SHADER_DEBUG_INFO == ANGLE_ENABLED - namespace - { -@@ -130,6 +134,27 @@ gl::Error HLSLCompiler::ensureInitialized() - } - #endif // ANGLE_PRELOADED_D3DCOMPILER_MODULE_NAMES - -+ // Load the compiler DLL specified by the environment, or default to QT_D3DCOMPILER_DLL -+ const wchar_t *defaultCompiler = _wgetenv(L"QT_D3DCOMPILER_DLL"); -+ if (!defaultCompiler) -+ defaultCompiler = QT_D3DCOMPILER_DLL; -+ -+ const wchar_t *compilerDlls[] = { -+ defaultCompiler, -+ L"d3dcompiler_47.dll", -+ L"d3dcompiler_46.dll", -+ L"d3dcompiler_43.dll", -+ 0 -+ }; -+ -+ // Load the first available known compiler DLL -+ for (int i = 0; compilerDlls[i]; ++i) -+ { -+ mD3DCompilerModule = LoadLibrary(compilerDlls[i]); -+ if (mD3DCompilerModule) -+ break; -+ } -+ - if (!mD3DCompilerModule) - { - // Load the version of the D3DCompiler DLL associated with the Direct3D version ANGLE was built with. --- -2.15.0.windows.1 - diff --git a/src/angle/patches/0013-ANGLE-clean-up-displays-on-dll-unload.patch b/src/angle/patches/0013-ANGLE-clean-up-displays-on-dll-unload.patch deleted file mode 100644 index fce3fd76b2..0000000000 --- a/src/angle/patches/0013-ANGLE-clean-up-displays-on-dll-unload.patch +++ /dev/null @@ -1,78 +0,0 @@ -From d8ca4f6d0d8fffd8319f340685e03751049678ae Mon Sep 17 00:00:00 2001 -From: Oliver Wolff <oliver.wolff@qt.io> -Date: Tue, 16 Apr 2019 10:19:27 +0200 -Subject: [PATCH] ANGLE: clean up displays on dll unload - -If the displays are not cleaned up on dll unloading, profilers might -report memory leaks. - -Change-Id: I04cbc3c2448bfb450f7d840e216827f86856e963 ---- - src/3rdparty/angle/src/libANGLE/Display.cpp | 17 +++++++++++++++++ - src/3rdparty/angle/src/libANGLE/Display.h | 1 + - .../angle/src/libGLESv2/global_state.cpp | 2 ++ - 3 files changed, 20 insertions(+) - -diff --git a/src/3rdparty/angle/src/libANGLE/Display.cpp b/src/3rdparty/angle/src/libANGLE/Display.cpp -index 735b472787..0bb0bb05b1 100644 ---- a/src/3rdparty/angle/src/libANGLE/Display.cpp -+++ b/src/3rdparty/angle/src/libANGLE/Display.cpp -@@ -364,6 +364,23 @@ Display *Display::GetDisplayFromDevice(Device *device, const AttributeMap &attri - return display; - } - -+//static -+void Display::CleanupDisplays() -+{ -+ // ~Display takes care of removing the entry from the according map -+ { -+ ANGLEPlatformDisplayMap *displays = GetANGLEPlatformDisplayMap(); -+ while (!displays->empty()) -+ delete displays->begin()->second; -+ } -+ -+ { -+ DevicePlatformDisplayMap *displays = GetDevicePlatformDisplayMap(); -+ while (!displays->empty()) -+ delete displays->begin()->second; -+ } -+} -+ - Display::Display(EGLenum platform, EGLNativeDisplayType displayId, Device *eglDevice) - : mImplementation(nullptr), - mDisplayId(displayId), -diff --git a/src/3rdparty/angle/src/libANGLE/Display.h b/src/3rdparty/angle/src/libANGLE/Display.h -index aa1d1c3b37..2a1c386d75 100644 ---- a/src/3rdparty/angle/src/libANGLE/Display.h -+++ b/src/3rdparty/angle/src/libANGLE/Display.h -@@ -65,6 +65,7 @@ class Display final : angle::NonCopyable - static Display *GetDisplayFromDevice(Device *device, const AttributeMap &attribMap); - static Display *GetDisplayFromNativeDisplay(EGLNativeDisplayType nativeDisplay, - const AttributeMap &attribMap); -+ static void CleanupDisplays(); - - static const ClientExtensions &GetClientExtensions(); - static const std::string &GetClientExtensionString(); -diff --git a/src/3rdparty/angle/src/libGLESv2/global_state.cpp b/src/3rdparty/angle/src/libGLESv2/global_state.cpp -index c5f3dfe4e1..26045bf5b2 100644 ---- a/src/3rdparty/angle/src/libGLESv2/global_state.cpp -+++ b/src/3rdparty/angle/src/libGLESv2/global_state.cpp -@@ -13,6 +13,7 @@ - #include "common/tls.h" - - #include "libANGLE/Thread.h" -+#include "libANGLE/Display.h" - - namespace gl - { -@@ -140,6 +141,7 @@ extern "C" BOOL WINAPI DllMain(HINSTANCE, DWORD reason, LPVOID) - return static_cast<BOOL>(egl::DeallocateCurrentThread()); - - case DLL_PROCESS_DETACH: -+ egl::Display::CleanupDisplays(); - return static_cast<BOOL>(egl::TerminateProcess()); - } - --- -2.20.1.windows.1 - diff --git a/src/angle/patches/0014-ANGLE-Backport-fix-for-compilation-on-mingw-64bit-wi.patch b/src/angle/patches/0014-ANGLE-Backport-fix-for-compilation-on-mingw-64bit-wi.patch deleted file mode 100644 index a32f25d2c0..0000000000 --- a/src/angle/patches/0014-ANGLE-Backport-fix-for-compilation-on-mingw-64bit-wi.patch +++ /dev/null @@ -1,35 +0,0 @@ -From e7ff4aa4ef2221aa02d39bdead7f35008016994e Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Martin=20Storsj=C3=B6?= <martin@martin.st> -Date: Fri, 26 Apr 2019 14:57:01 +0300 -Subject: [PATCH] ANGLE: Backport fix for compilation on mingw/64bit with clang - -This backports the following upstream fix from angle: -https://github.com/google/angle/commit/63cc351fbad06c6241d1c7372fe76f74e1d09a10 ---- - .../angle/src/common/third_party/smhasher/src/PMurHash.cpp | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/src/3rdparty/angle/src/common/third_party/smhasher/src/PMurHash.cpp b/src/3rdparty/angle/src/common/third_party/smhasher/src/PMurHash.cpp -index 071bc31539..93b48713cd 100644 ---- a/src/3rdparty/angle/src/common/third_party/smhasher/src/PMurHash.cpp -+++ b/src/3rdparty/angle/src/common/third_party/smhasher/src/PMurHash.cpp -@@ -49,6 +49,7 @@ on big endian machines, or a byte-by-byte read if the endianess is unknown. - - - #include "PMurHash.h" -+#include <stdint.h> - - /* I used ugly type names in the header to avoid potential conflicts with - * application or system typedefs & defines. Since I'm not including any more -@@ -208,7 +209,7 @@ void PMurHash32_Process(uint32_t *ph1, uint32_t *pcarry, const void *key, int le - /* This CPU does not handle unaligned word access */ - - /* Consume enough so that the next data byte is word aligned */ -- int i = -(long)ptr & 3; -+ int i = -(intptr_t)ptr & 3; - if(i && i <= len) { - DOBYTES(i, h1, c, n, ptr, len); - } --- -2.20.1 (Apple Git-117) - diff --git a/src/angle/patches/0015-ANGLE-Invalidate-client-window-area-when-resizing-sw.patch b/src/angle/patches/0015-ANGLE-Invalidate-client-window-area-when-resizing-sw.patch deleted file mode 100644 index 9380437761..0000000000 --- a/src/angle/patches/0015-ANGLE-Invalidate-client-window-area-when-resizing-sw.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 7d300c6e7d05f4e31c966f1298d11da3eae9d679 Mon Sep 17 00:00:00 2001 -From: Val Doroshchuk <valentyn.doroshchuk@qt.io> -Date: Fri, 21 Jun 2019 11:24:06 +0200 -Subject: [PATCH] ANGLE: Invalidate client window area when resizing swap chain - -Inspired by: -https://codereview.appspot.com/6812076/ -Resizing a window larger results in the newly exposed region being invalidated -but the old region is treated as valid. -This can result in the old region no longer updating. -Was added to D3D9. - -Improving a fix from Filippo Cucchetto: -https://codereview.qt-project.org/c/qt/qtbase/+/195336 -and pushing to D3D11. - -ifndef protects against compilation error for WinRT. -Invalidate() should be used only for desktop apps. - -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 dcfd06484d..e8f13b388f 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.cpp -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.cpp -@@ -504,6 +504,10 @@ EGLint SwapChain11::resize(const gl::Context *context, - ASSERT(SUCCEEDED(result)); - if (SUCCEEDED(result)) - { -+#ifndef ANGLE_ENABLE_WINDOWS_STORE -+ if (mNativeWindow->getNativeWindow()) -+ InvalidateRect(mNativeWindow->getNativeWindow(), nullptr, FALSE); -+#endif - const auto &format = - d3d11::Format::Get(mOffscreenRenderTargetFormat, mRenderer->getRenderer11DeviceCaps()); - mBackBufferTexture.set(backbufferTexture, format); --- -2.14.2.windows.1 - diff --git a/src/angle/patches/0016-ANGLE-Fix-severe-performance-regression.patch b/src/angle/patches/0016-ANGLE-Fix-severe-performance-regression.patch deleted file mode 100644 index e9cda1337f..0000000000 --- a/src/angle/patches/0016-ANGLE-Fix-severe-performance-regression.patch +++ /dev/null @@ -1,37 +0,0 @@ -From b215999d63d6e6b087e53e24a47b8b60520ec9e4 Mon Sep 17 00:00:00 2001 -From: Oliver Wolff <oliver.wolff@qt.io> -Date: Wed, 11 Mar 2020 13:59:39 +0100 -Subject: [PATCH] ANGLE: Fix severe performance regression - -The changed buffer usage priority that was introduced in our ANGLE -update caused severe performance regressions for Qt applications. - -Fixes: QTBUG-73835 -Change-Id: I49839bb272cdeec0027264f2751b88bc149665ad ---- - src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Buffer11.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Buffer11.h b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Buffer11.h -index ddbeeb90d2..f92a68454b 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Buffer11.h -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Buffer11.h -@@ -31,7 +31,6 @@ struct TranslatedAttribute; - // The order of this enum governs priority of 'getLatestBufferStorage'. - enum BufferUsage - { -- BUFFER_USAGE_SYSTEM_MEMORY, - BUFFER_USAGE_STAGING, - BUFFER_USAGE_VERTEX_OR_TRANSFORM_FEEDBACK, - BUFFER_USAGE_INDEX, -@@ -40,6 +39,7 @@ enum BufferUsage - BUFFER_USAGE_PIXEL_UNPACK, - BUFFER_USAGE_PIXEL_PACK, - BUFFER_USAGE_UNIFORM, -+ BUFFER_USAGE_SYSTEM_MEMORY, - BUFFER_USAGE_EMULATED_INDEXED_VERTEX, - - BUFFER_USAGE_COUNT, --- -2.20.1.windows.1 - diff --git a/src/angle/patches/0017-ANGLE-Fix-resizing-of-windows-Take-2.patch b/src/angle/patches/0017-ANGLE-Fix-resizing-of-windows-Take-2.patch deleted file mode 100644 index abab74b192..0000000000 --- a/src/angle/patches/0017-ANGLE-Fix-resizing-of-windows-Take-2.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 029d42d1049dcde7950c11fb9adf07c07a8c4c02 Mon Sep 17 00:00:00 2001 -From: Oliver Wolff <oliver.wolff@qt.io> -Date: Wed, 18 Mar 2020 10:56:53 +0100 -Subject: [PATCH] ANGLE: Fix resizing of windows (Take 2) - -Task-number: QTBUG-62475 -Change-Id: I0ea17e7875906508941ae64bb396a4236928b0f9 ---- - .../angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.cpp | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -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 e8f13b388f..9ece77ecbc 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.cpp -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.cpp -@@ -845,7 +845,7 @@ EGLint SwapChain11::copyOffscreenToBackbuffer(const gl::Context *context, - stateManager->setRenderTarget(mBackBufferRTView.get(), nullptr); - - // Set the viewport -- stateManager->setSimpleViewport(mWidth, mHeight); -+ stateManager->setSimpleViewport(width, height); - - // Apply textures - stateManager->setSimplePixelTextureAndSampler(mOffscreenSRView, mPassThroughSampler); --- -2.20.1.windows.1 - diff --git a/src/angle/patches/0018-ANGLE-d3d11-Do-not-register-windows-message-hooks-fo.patch b/src/angle/patches/0018-ANGLE-d3d11-Do-not-register-windows-message-hooks-fo.patch deleted file mode 100644 index 03529c6531..0000000000 --- a/src/angle/patches/0018-ANGLE-d3d11-Do-not-register-windows-message-hooks-fo.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 3d23de2ad72968d0bf43dac4a9a0f237cc9e03e2 Mon Sep 17 00:00:00 2001 -From: Oliver Wolff <oliver.wolff@qt.io> -Date: Wed, 1 Apr 2020 14:48:48 +0200 -Subject: [PATCH] ANGLE: d3d11: Do not register windows message hooks for d3d11 - windows - -These message hooks are used to handle ALT+ENTER to enter/exit fullscreen -mode and PRINTSCREEN to take screenshots. Qt is implementing these -functionalities itself so we do not have to register these hooks. - -If too many of these hooks are registered, callbacks are no longer called -and Qt's message queue is no longer handling messages. By saving these -hooks we can make sure that more Qt windows at the same time are possible -without getting unresponsive due to too many hooks being registered. - -Change-Id: I5354f91f08cbfeda5e8dc3ad7f824fbd5b3b2932 ---- - .../src/libANGLE/renderer/d3d/d3d11/win32/NativeWindow11Win32.cpp | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/win32/NativeWindow11Win32.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/win32/NativeWindow11Win32.cpp -index 5394e3d..f5e6c93 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/win32/NativeWindow11Win32.cpp -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/win32/NativeWindow11Win32.cpp -@@ -168,7 +168,7 @@ HRESULT NativeWindow11Win32::createSwapChain(ID3D11Device *device, - nullptr, nullptr, &swapChain1); - if (SUCCEEDED(result)) - { -- factory2->MakeWindowAssociation(getNativeWindow(), DXGI_MWA_NO_ALT_ENTER); -+ factory2->MakeWindowAssociation(getNativeWindow(), DXGI_MWA_NO_WINDOW_CHANGES); - *swapChain = static_cast<IDXGISwapChain *>(swapChain1); - } - SafeRelease(factory2); -@@ -196,7 +196,7 @@ HRESULT NativeWindow11Win32::createSwapChain(ID3D11Device *device, - HRESULT result = factory->CreateSwapChain(device, &swapChainDesc, swapChain); - if (SUCCEEDED(result)) - { -- factory->MakeWindowAssociation(getNativeWindow(), DXGI_MWA_NO_ALT_ENTER); -+ factory->MakeWindowAssociation(getNativeWindow(), DXGI_MWA_NO_WINDOW_CHANGES); - } - return result; - } --- -2.7.4.windows.1 - |