From 026eb221c1ffc72181ecc74bfc4b5f2f59fdadc9 Mon Sep 17 00:00:00 2001 From: Sandro Mani Date: Jan 16 2021 09:15:43 +0000 Subject: Update to angle 3280 --- diff --git a/.gitignore b/.gitignore index bc36566..72fe7dd 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ /angleproject-r2215.tar.bz2 /angle-git-30d6c2.tar.bz2 /angle-8613f49.tar.gz +/angle-57ea533.tar.gz diff --git a/0001-ANGLE-Improve-Windows-Phone-Support.patch b/0001-ANGLE-Improve-Windows-Phone-Support.patch deleted file mode 100644 index e8f11b5..0000000 --- a/0001-ANGLE-Improve-Windows-Phone-Support.patch +++ /dev/null @@ -1,464 +0,0 @@ -From bbc3a5f89821030dd2772cd8015070a3da9ad57e Mon Sep 17 00:00:00 2001 -From: Oliver Wolff -Date: Mon, 29 Feb 2016 11:09:24 +0100 -Subject: [PATCH 1/7] ANGLE: Improve Windows Phone Support - -This contains compile fixes for Windows Phone as well as improved -orientation handling. - -Change-Id: I5011e9980957ff0797db179b36c3be9cac6df497 ---- - src/3rdparty/angle/src/common/platform.h | 2 ++ - .../renderer/d3d/d3d11/DebugAnnotator11.cpp | 2 +- - .../src/libANGLE/renderer/d3d/d3d11/NativeWindow.h | 4 +++ - .../src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp | 8 ++++- - .../libANGLE/renderer/d3d/d3d11/SwapChain11.cpp | 40 ++++++++++++++++++++++ - .../d3d/d3d11/winrt/CoreWindowNativeWindow.cpp | 33 ++++++++++++++++-- - .../d3d/d3d11/winrt/CoreWindowNativeWindow.h | 35 ++++++++++++++++++- - .../d3d/d3d11/winrt/InspectableNativeWindow.cpp | 12 +++++++ - .../d3d/d3d11/winrt/InspectableNativeWindow.h | 14 +++++++- - src/3rdparty/angle/src/libANGLE/validationEGL.cpp | 4 ++- - .../src/third_party/systeminfo/SystemInfo.cpp | 4 +-- - 11 files changed, 148 insertions(+), 10 deletions(-) - -diff --git a/src/3rdparty/angle/src/common/platform.h b/src/3rdparty/angle/src/common/platform.h -index 56db297..4e3851c 100644 ---- a/src/3rdparty/angle/src/common/platform.h -+++ b/src/3rdparty/angle/src/common/platform.h -@@ -68,7 +68,9 @@ - # if defined(ANGLE_ENABLE_WINDOWS_STORE) - # include - # if defined(_DEBUG) -+# if WINAPI_FAMILY != WINAPI_FAMILY_PHONE_APP - # include -+# endif - # include - # endif - # endif -diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/DebugAnnotator11.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/DebugAnnotator11.cpp -index f9d28e8..2e42859 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/DebugAnnotator11.cpp -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/DebugAnnotator11.cpp -@@ -77,7 +77,7 @@ bool DebugAnnotator11::getStatus() - } - - return true; // Default if initializeDevice() failed --#elif defined(_DEBUG) -+#elif defined(_DEBUG) && (WINAPI_FAMILY != WINAPI_FAMILY_PHONE_APP) - static bool underCapture = true; - - // ID3DUserDefinedAnnotation::GetStatus doesn't work with the Graphics Diagnostics tools in -diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/NativeWindow.h b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/NativeWindow.h -index f28ce4f..1c94538 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/NativeWindow.h -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/NativeWindow.h -@@ -54,6 +54,7 @@ namespace rx - class NativeWindow - { - public: -+ enum RotationFlags { RotateNone = 0, RotateLeft = 1, RotateRight = 2 }; - explicit NativeWindow(EGLNativeWindowType window, - const egl::Config *config, - bool directComposition); -@@ -62,6 +63,9 @@ class NativeWindow - bool initialize(); - bool getClientRect(LPRECT rect); - bool isIconic(); -+#if defined(ANGLE_ENABLE_WINDOWS_STORE) && (WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP) -+ RotationFlags rotationFlags() const; -+#endif - static bool isValidNativeWindow(EGLNativeWindowType window); - - HRESULT createSwapChain(ID3D11Device* device, DXGIFactory* factory, -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 f7757df..03159bb 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp -@@ -10,7 +10,9 @@ - - #include - #include -+#if WINAPI_FAMILY != WINAPI_FAMILY_PHONE_APP - #include -+#endif - - #include "common/tls.h" - #include "common/utilities.h" -@@ -445,7 +447,11 @@ Renderer11::Renderer11(egl::Display *display) - } - } - -+#if defined(ANGLE_ENABLE_WINDOWS_STORE) -+ if (requestedMajorVersion == EGL_DONT_CARE || requestedMajorVersion >= 9) -+#else - if (requestedMajorVersion == 9 && requestedMinorVersion == 3) -+#endif - { - mAvailableFeatureLevels.push_back(D3D_FEATURE_LEVEL_9_3); - } -@@ -946,12 +952,12 @@ egl::ConfigSet Renderer11::generateConfigs() const - config.bindToTextureRGBA = (colorBufferFormatInfo.format == GL_RGBA || - colorBufferFormatInfo.format == GL_BGRA_EXT); - config.colorBufferType = EGL_RGB_BUFFER; -- config.configCaveat = EGL_NONE; - config.configID = static_cast(configs.size() + 1); - // Can only support a conformant ES2 with feature level greater than 10.0. - config.conformant = (mRenderer11DeviceCaps.featureLevel >= D3D_FEATURE_LEVEL_10_0) - ? (EGL_OPENGL_ES2_BIT | EGL_OPENGL_ES3_BIT_KHR) - : 0; -+ config.configCaveat = config.conformant == EGL_NONE ? EGL_NON_CONFORMANT_CONFIG : EGL_NONE; - - // PresentPathFast may not be conformant - if (mPresentPathFastEnabled) -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 a56d3fa..9432a7f 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.cpp -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.cpp -@@ -222,8 +222,14 @@ EGLint SwapChain11::resetOffscreenColorBuffer(int backbufferWidth, int backbuffe - const bool useSharedResource = !mNativeWindow.getNativeWindow() && mRenderer->getShareHandleSupport(); - - D3D11_TEXTURE2D_DESC offscreenTextureDesc = {0}; -+#if defined(ANGLE_ENABLE_WINDOWS_STORE) && (WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP) -+ const int textureLength = std::max(backbufferWidth, backbufferHeight); -+ offscreenTextureDesc.Width = textureLength; -+ offscreenTextureDesc.Height = textureLength; -+#else - offscreenTextureDesc.Width = backbufferWidth; - offscreenTextureDesc.Height = backbufferHeight; -+#endif - offscreenTextureDesc.Format = backbufferFormatInfo.texFormat; - offscreenTextureDesc.MipLevels = 1; - offscreenTextureDesc.ArraySize = 1; -@@ -336,8 +342,14 @@ EGLint SwapChain11::resetOffscreenDepthBuffer(int backbufferWidth, int backbuffe - d3d11::GetTextureFormatInfo(mDepthBufferFormat, mRenderer->getRenderer11DeviceCaps()); - - D3D11_TEXTURE2D_DESC depthStencilTextureDesc; -+#if defined(ANGLE_ENABLE_WINDOWS_STORE) && (WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP) -+ const int textureLength = std::max(backbufferWidth, backbufferHeight); -+ depthStencilTextureDesc.Width = textureLength; -+ depthStencilTextureDesc.Height = textureLength; -+#else - depthStencilTextureDesc.Width = backbufferWidth; - depthStencilTextureDesc.Height = backbufferHeight; -+#endif - depthStencilTextureDesc.Format = depthBufferFormatInfo.texFormat; - depthStencilTextureDesc.MipLevels = 1; - depthStencilTextureDesc.ArraySize = 1; -@@ -422,6 +434,7 @@ EGLint SwapChain11::resize(EGLint backbufferWidth, EGLint backbufferHeight) - return EGL_SUCCESS; - } - -+#if !defined(ANGLE_ENABLE_WINDOWS_STORE) || (WINAPI_FAMILY != WINAPI_FAMILY_PHONE_APP) - // Can only call resize if we have already created our swap buffer and resources - ASSERT(mSwapChain && mBackBufferTexture && mBackBufferRTView && mBackBufferSRView); - -@@ -479,6 +492,12 @@ EGLint SwapChain11::resize(EGLint backbufferWidth, EGLint backbufferHeight) - mFirstSwap = true; - - return resetOffscreenBuffers(backbufferWidth, backbufferHeight); -+#else -+ // Do nothing on Windows Phone apart from updating the internal buffer/width height -+ mWidth = backbufferWidth; -+ mHeight = backbufferHeight; -+ return EGL_SUCCESS; -+#endif - } - - DXGI_FORMAT SwapChain11::getSwapChainNativeFormat() const -@@ -704,6 +723,21 @@ EGLint SwapChain11::copyOffscreenToBackbuffer(EGLint x, EGLint y, EGLint width, - float x2 = ((x + width) / float(mWidth)) * 2.0f - 1.0f; - float y2 = ((y + height) / float(mHeight)) * 2.0f - 1.0f; - -+#if defined(ANGLE_ENABLE_WINDOWS_STORE) && (WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP) -+ const float dim = std::max(mWidth, mHeight); -+ float u1 = x / dim; -+ float v1 = y / dim; -+ float u2 = (x + width) / dim; -+ float v2 = (y + height) / dim; -+ -+ const NativeWindow::RotationFlags flags = mNativeWindow.rotationFlags(); -+ const bool rotateL = flags == NativeWindow::RotateLeft; -+ const bool rotateR = flags == NativeWindow::RotateRight; -+ d3d11::SetPositionTexCoordVertex(&vertices[0], x1, y1, rotateL ? u2 : u1, rotateR ? v2 : v1); -+ d3d11::SetPositionTexCoordVertex(&vertices[1], x1, y2, rotateR ? u2 : u1, rotateL ? v1 : v2); -+ d3d11::SetPositionTexCoordVertex(&vertices[2], x2, y1, rotateR ? u1 : u2, rotateL ? v2 : v1); -+ d3d11::SetPositionTexCoordVertex(&vertices[3], x2, y2, rotateL ? u1 : u2, rotateR ? v1 : v2); -+#else - float u1 = x / float(mWidth); - float v1 = y / float(mHeight); - float u2 = (x + width) / float(mWidth); -@@ -723,6 +757,7 @@ EGLint SwapChain11::copyOffscreenToBackbuffer(EGLint x, EGLint y, EGLint width, - d3d11::SetPositionTexCoordVertex(&vertices[1], x1, y2, u1, v2); - d3d11::SetPositionTexCoordVertex(&vertices[2], x2, y1, u2, v1); - d3d11::SetPositionTexCoordVertex(&vertices[3], x2, y2, u2, v2); -+#endif - - deviceContext->Unmap(mQuadVB, 0); - -@@ -752,8 +787,13 @@ EGLint SwapChain11::copyOffscreenToBackbuffer(EGLint x, EGLint y, EGLint width, - D3D11_VIEWPORT viewport; - viewport.TopLeftX = 0; - viewport.TopLeftY = 0; -+#if defined(ANGLE_ENABLE_WINDOWS_STORE) && (WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP) -+ viewport.Width = (rotateL || rotateR) ? mHeight : mWidth; -+ viewport.Height = (rotateL || rotateR) ? mWidth : mHeight; -+#else - viewport.Width = static_cast(mWidth); - viewport.Height = static_cast(mHeight); -+#endif - viewport.MinDepth = 0.0f; - viewport.MaxDepth = 1.0f; - deviceContext->RSSetViewports(1, &viewport); -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 71f0e42..6a4795a 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 -@@ -8,8 +8,6 @@ - - #include "libANGLE/renderer/d3d/d3d11/winrt/CoreWindowNativeWindow.h" - --#include -- - using namespace ABI::Windows::Foundation::Collections; - - namespace rx -@@ -21,6 +19,7 @@ CoreWindowNativeWindow::~CoreWindowNativeWindow() - - bool CoreWindowNativeWindow::initialize(EGLNativeWindowType window, IPropertySet *propertySet) - { -+ mOrientationChangedEventToken.value = 0; - ComPtr props = propertySet; - ComPtr win = window; - SIZE swapChainSize = {}; -@@ -100,6 +99,16 @@ bool CoreWindowNativeWindow::initialize(EGLNativeWindowType window, IPropertySet - - if (SUCCEEDED(result)) - { -+ ComPtr displayInformation; -+ result = GetActivationFactory(HStringReference(RuntimeClass_Windows_Graphics_Display_DisplayInformation).Get(), &displayInformation); -+ if (SUCCEEDED(result)) -+ { -+ result = displayInformation->GetForCurrentView(&mDisplayInformation); -+ } -+ } -+ -+ if (SUCCEEDED(result)) -+ { - mNewClientRect = mClientRect; - mClientRectChanged = false; - return registerForSizeChangeEvents(); -@@ -117,6 +126,15 @@ bool CoreWindowNativeWindow::registerForSizeChangeEvents() - result = mCoreWindow->add_SizeChanged(sizeChangedHandler.Get(), &mSizeChangedEventToken); - } - -+#if defined(ANGLE_ENABLE_WINDOWS_STORE) && (WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP) -+ ComPtr orientationChangedHandler; -+ result = sizeChangedHandler.As(&orientationChangedHandler); -+ if (SUCCEEDED(result)) -+ { -+ result = mDisplayInformation->add_OrientationChanged(orientationChangedHandler.Get(), &mOrientationChangedEventToken); -+ } -+#endif -+ - if (SUCCEEDED(result)) - { - return true; -@@ -131,7 +149,16 @@ void CoreWindowNativeWindow::unregisterForSizeChangeEvents() - { - (void)mCoreWindow->remove_SizeChanged(mSizeChangedEventToken); - } -+ -+#if defined(ANGLE_ENABLE_WINDOWS_STORE) && (WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP) -+ if (mDisplayInformation) -+ { -+ (void)mDisplayInformation->remove_OrientationChanged(mOrientationChangedEventToken); -+ } -+#endif -+ - mSizeChangedEventToken.value = 0; -+ mOrientationChangedEventToken.value = 0; - } - - HRESULT CoreWindowNativeWindow::createSwapChain(ID3D11Device *device, -@@ -168,7 +195,7 @@ HRESULT CoreWindowNativeWindow::createSwapChain(ID3D11Device *device, - if (SUCCEEDED(result)) - { - --#if (WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP) -+#if 0 //(WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP) // Qt: allow Windows Phone to resize, but don't modify the backing texture in the swap chain. - // Test if swapchain supports resize. On Windows Phone devices, this will return DXGI_ERROR_UNSUPPORTED. On - // other devices DXGI_ERROR_INVALID_CALL should be returned because the combination of flags passed - // (DXGI_SWAP_CHAIN_FLAG_NONPREROTATED | DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE) are invalid flag combinations. -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 7747005..4de235a 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 -@@ -12,8 +12,10 @@ - #include "libANGLE/renderer/d3d/d3d11/winrt/InspectableNativeWindow.h" - - #include -+#include - - typedef ABI::Windows::Foundation::__FITypedEventHandler_2_Windows__CUI__CCore__CCoreWindow_Windows__CUI__CCore__CWindowSizeChangedEventArgs_t IWindowSizeChangedEventHandler; -+typedef ABI::Windows::Foundation::__FITypedEventHandler_2_Windows__CGraphics__CDisplay__CDisplayInformation_IInspectable_t IDisplayOrientationEventHandler; - - namespace rx - { -@@ -42,11 +44,13 @@ class CoreWindowNativeWindow : public InspectableNativeWindow, public std::enabl - private: - ComPtr mCoreWindow; - ComPtr> mPropertyMap; -+ ComPtr mDisplayInformation; -+ EventRegistrationToken mOrientationChangedEventToken; - }; - - [uuid(7F924F66-EBAE-40E5-A10B-B8F35E245190)] - class CoreWindowSizeChangedHandler : -- public Microsoft::WRL::RuntimeClass, IWindowSizeChangedEventHandler> -+ public Microsoft::WRL::RuntimeClass, IWindowSizeChangedEventHandler, IDisplayOrientationEventHandler> - { - public: - CoreWindowSizeChangedHandler() { } -@@ -78,6 +82,35 @@ class CoreWindowSizeChangedHandler : - return S_OK; - } - -+ IFACEMETHOD(Invoke)(ABI::Windows::Graphics::Display::IDisplayInformation *displayInformation, IInspectable *) -+ { -+ #if defined(ANGLE_ENABLE_WINDOWS_STORE) && (WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP) -+ NativeWindow::RotationFlags flags = NativeWindow::RotateNone; -+ ABI::Windows::Graphics::Display::DisplayOrientations orientation; -+ if (SUCCEEDED(displayInformation->get_CurrentOrientation(&orientation))) -+ { -+ switch (orientation) -+ { -+ case ABI::Windows::Graphics::Display::DisplayOrientations_Landscape: -+ flags = NativeWindow::RotateLeft; -+ break; -+ case ABI::Windows::Graphics::Display::DisplayOrientations_LandscapeFlipped: -+ flags = NativeWindow::RotateRight; -+ break; -+ default: -+ break; -+ } -+ } -+ std::shared_ptr host = mHost.lock(); -+ if (host) -+ { -+ host->setRotationFlags(flags); -+ } -+ #endif -+ return S_OK; -+ } -+ -+ - private: - std::weak_ptr mHost; - }; -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 47a6dae..c9b203e 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 -@@ -80,6 +80,18 @@ bool NativeWindow::getClientRect(RECT *rect) - return false; - } - -+#if defined(ANGLE_ENABLE_WINDOWS_STORE) && (WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP) -+NativeWindow::RotationFlags NativeWindow::rotationFlags() const -+{ -+ if (mImpl) -+ { -+ return mImpl->rotationFlags(); -+ } -+ -+ return NativeWindow::RotateNone; -+} -+#endif -+ - bool NativeWindow::isIconic() - { - return false; -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 4b9cf80..70e5fe7 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 -@@ -36,7 +36,8 @@ class InspectableNativeWindow - mSwapChainScale(1.0f), - mClientRectChanged(false), - mClientRect({0,0,0,0}), -- mNewClientRect({0,0,0,0}) -+ mNewClientRect({0,0,0,0}), -+ mRotationFlags(NativeWindow::RotateNone) - { - mSizeChangedEventToken.value = 0; - } -@@ -94,6 +95,16 @@ class InspectableNativeWindow - } - } - -+ NativeWindow::RotationFlags rotationFlags() const -+ { -+ return mRotationFlags; -+ } -+ -+ void setRotationFlags(NativeWindow::RotationFlags flags) -+ { -+ mRotationFlags = flags; -+ } -+ - protected: - virtual HRESULT scaleSwapChain(const SIZE &windowSize, const RECT &clientRect) = 0; - -@@ -104,6 +115,7 @@ class InspectableNativeWindow - RECT mClientRect; - RECT mNewClientRect; - bool mClientRectChanged; -+ NativeWindow::RotationFlags mRotationFlags; - - EventRegistrationToken mSizeChangedEventToken; - }; -diff --git a/src/3rdparty/angle/src/libANGLE/validationEGL.cpp b/src/3rdparty/angle/src/libANGLE/validationEGL.cpp -index bff3c94..972f6a7 100644 ---- a/src/3rdparty/angle/src/libANGLE/validationEGL.cpp -+++ b/src/3rdparty/angle/src/libANGLE/validationEGL.cpp -@@ -269,7 +269,7 @@ Error ValidateCreateContext(Display *display, Config *configuration, gl::Context - return Error(EGL_BAD_CONFIG); - } - -- if (clientMajorVersion == 3 && !(configuration->conformant & EGL_OPENGL_ES3_BIT_KHR)) -+ if (clientMajorVersion == 3 && !(configuration->conformant & EGL_OPENGL_ES3_BIT_KHR) && !(configuration->configCaveat & EGL_NON_CONFORMANT_CONFIG)) - { - return Error(EGL_BAD_CONFIG); - } -@@ -496,6 +496,7 @@ Error ValidateCreatePbufferSurface(Display *display, Config *config, const Attri - return Error(EGL_BAD_MATCH); - } - -+#if !defined(ANGLE_ENABLE_WINDOWS_STORE) // On Windows Store, we know the originating texture came from D3D11, so bypass this check - const Caps &caps = display->getCaps(); - - EGLenum textureFormat = attributes.get(EGL_TEXTURE_FORMAT, EGL_NO_TEXTURE); -@@ -519,6 +520,7 @@ Error ValidateCreatePbufferSurface(Display *display, Config *config, const Attri - { - return Error(EGL_BAD_MATCH); - } -+#endif - - return Error(EGL_SUCCESS); - } -diff --git a/src/3rdparty/angle/src/third_party/systeminfo/SystemInfo.cpp b/src/3rdparty/angle/src/third_party/systeminfo/SystemInfo.cpp -index 97dfcaa..e082895 100644 ---- a/src/3rdparty/angle/src/third_party/systeminfo/SystemInfo.cpp -+++ b/src/3rdparty/angle/src/third_party/systeminfo/SystemInfo.cpp -@@ -26,7 +26,7 @@ - #include - #include "common/platform.h" - --#if _WIN32_WINNT_WINBLUE -+#if _WIN32_WINNT_WINBLUE && WINAPI_FAMILY != WINAPI_FAMILY_PHONE_APP - #include - #endif - --- -2.7.0.windows.1 - diff --git a/0001-ANGLE-Use-pixel-sizes-in-the-XAML-swap-chain.patch b/0001-ANGLE-Use-pixel-sizes-in-the-XAML-swap-chain.patch new file mode 100644 index 0000000..618ad08 --- /dev/null +++ b/0001-ANGLE-Use-pixel-sizes-in-the-XAML-swap-chain.patch @@ -0,0 +1,135 @@ +From b1f0b50c19ec17df554faa1335d2b989e262b831 Mon Sep 17 00:00:00 2001 +From: Oliver Wolff +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 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 + { + 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(ConvertDipsToPixels(size.Width)), ++ static_cast(ConvertDipsToPixels(size.Height))}; ++} ++ ++float GetLogicalDpi() ++{ ++ ComPtr 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/0001-Fix-build-for-MinGW.patch b/0001-Fix-build-for-MinGW.patch new file mode 100644 index 0000000..186acd3 --- /dev/null +++ b/0001-Fix-build-for-MinGW.patch @@ -0,0 +1,26 @@ +From 75f877269a86aa111afbf816be14ef6c36ea6478 Mon Sep 17 00:00:00 2001 +From: Oliver Wolff +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 + #define ANGLE_USE_SSE +-#elif defined(__GNUC__) && (defined(__x86_64__) || defined(__i386__)) ++#elif defined(__GNUC__) && (defined(__x86_64__) || defined(__i386__)) && !defined(__MINGW32__) + #include + #define ANGLE_USE_SSE + #endif +-- +2.10.2.windows.1 + diff --git a/0002-ANGLE-Add-support-for-querying-platform-device.patch b/0002-ANGLE-Add-support-for-querying-platform-device.patch new file mode 100644 index 0000000..d548ce4 --- /dev/null +++ b/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 +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/0002-ANGLE-Dynamically-load-D3D-compiler-from-a-list.patch b/0002-ANGLE-Dynamically-load-D3D-compiler-from-a-list.patch deleted file mode 100644 index 9503ae1..0000000 --- a/0002-ANGLE-Dynamically-load-D3D-compiler-from-a-list.patch +++ /dev/null @@ -1,62 +0,0 @@ -From 7dd1de8a519324e6ec7dbfede1b446980cb5954f Mon Sep 17 00:00:00 2001 -From: Oliver Wolff -Date: Tue, 1 Mar 2016 13:28:02 +0100 -Subject: [PATCH 2/7] 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. - -Change-Id: Ic6d6e37095b838b8a636b029b72467f156b850cb ---- - .../src/libANGLE/renderer/d3d/HLSLCompiler.cpp | 26 ++++++++++++++++++++++ - 1 file changed, 26 insertions(+) - -diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/HLSLCompiler.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/HLSLCompiler.cpp -index e8b1af3..0d298bb 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/HLSLCompiler.cpp -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/HLSLCompiler.cpp -@@ -12,6 +12,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 - { -@@ -128,6 +132,28 @@ gl::Error HLSLCompiler::initialize() - } - #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.7.0.windows.1 - diff --git a/0002-ANGLE-Fix-build-for-ARM.patch b/0002-ANGLE-Fix-build-for-ARM.patch new file mode 100644 index 0000000..04517a1 --- /dev/null +++ b/0002-ANGLE-Fix-build-for-ARM.patch @@ -0,0 +1,43 @@ +From 416fb93dae5009bb51da9f6720a95918a2c79e78 Mon Sep 17 00:00:00 2001 +From: Oliver Wolff +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(__popcnt(bits)); +@@ -893,6 +901,7 @@ inline int BitCount(uint64_t bits) + { + return static_cast(__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/0002-ANGLE-Fix-compilation-with-MinGW.patch b/0002-ANGLE-Fix-compilation-with-MinGW.patch deleted file mode 100644 index e9d1285..0000000 --- a/0002-ANGLE-Fix-compilation-with-MinGW.patch +++ /dev/null @@ -1,696 +0,0 @@ -From c6b9e598384563a641efdff56fdbdb0d7a561ec4 Mon Sep 17 00:00:00 2001 -From: Oliver Wolff -Date: Thu, 10 Mar 2016 15:12:58 +0100 -Subject: [PATCH] ANGLE: Fix compilation with MinGW - -This adds definition guards for Direct3D 11 and DirectX SDK layers, which -are only available in very recent versions (4.9.2 rev 4) of MinGW builds. -It additionally adds a few missing includes needed for compilation. - -Change-Id: I254c208209c0071fae5efb6727f2b3cfd5542da6 ---- - src/3rdparty/angle/src/common/platform.h | 10 ++- - .../src/libANGLE/renderer/d3d/HLSLCompiler.cpp | 9 +++ - .../src/libANGLE/renderer/d3d/d3d11/Buffer11.cpp | 6 ++ - .../src/libANGLE/renderer/d3d/d3d11/Clear11.cpp | 4 + - .../renderer/d3d/d3d11/DebugAnnotator11.cpp | 10 +++ - .../libANGLE/renderer/d3d/d3d11/DebugAnnotator11.h | 2 + - .../libANGLE/renderer/d3d/d3d11/Framebuffer11.cpp | 2 + - .../src/libANGLE/renderer/d3d/d3d11/Query11.cpp | 14 ++++++++++++++ - .../src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp | 32 +++++++- - .../src/libANGLE/renderer/d3d/d3d11/Renderer11.h | 4 + - .../libANGLE/renderer/d3d/d3d11/SwapChain11.cpp | 10 +++ - .../src/libANGLE/renderer/d3d/d3d11/SwapChain11.h | 2 + - .../renderer/d3d/d3d11/renderer11_utils.cpp | 92 ++++++++++++++++++++++ - .../renderer/d3d/d3d11/win32/NativeWindow.cpp | 8 ++ - .../src/libANGLE/renderer/d3d/d3d9/Renderer9.cpp | 4 +- - src/3rdparty/angle/src/libEGL/libEGL_mingw32.def | 27 ++++--- - src/3rdparty/angle/src/libEGL/libEGLd_mingw32.def | 19 +++++ - .../angle/src/libGLESv2/libGLESv2_mingw32.def | 32 +++++++- - .../angle/src/libGLESv2/libGLESv2d_mingw32.def | 32 +++++++- - 19 files changed, 296 insertions(+), 21 deletions(-) - -diff --git a/src/3rdparty/angle/src/common/platform.h b/src/3rdparty/angle/src/common/platform.h -index 4e3851c..be4cb94 100644 ---- a/src/3rdparty/angle/src/common/platform.h -+++ b/src/3rdparty/angle/src/common/platform.h -@@ -59,9 +59,18 @@ - # if defined(ANGLE_ENABLE_D3D11) - # include - # include --# include -+# include - # include -+# if defined(__MINGW32__) -+# define ANGLE_MINGW32_COMPAT -+# endif -+# if defined(_MSC_VER) && _MSC_VER >= 1800 -+# define ANGLE_ENABLE_D3D11_1 -+# endif -+# if defined(ANGLE_ENABLE_D3D11_1) -+# include - # include -+# endif - # include - # endif - -diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/HLSLCompiler.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/HLSLCompiler.cpp -index 0d298bb..df0257e 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/HLSLCompiler.cpp -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/HLSLCompiler.cpp -@@ -25,6 +25,15 @@ namespace - - #define CREATE_COMPILER_FLAG_INFO(flag) { flag, #flag } - -+#if defined(ANGLE_MINGW32_COMPAT) -+#ifndef D3DCOMPILE_RESERVED16 -+#define D3DCOMPILE_RESERVED16 0x10000 -+#endif -+#ifndef D3DCOMPILE_RESERVED17 -+#define D3DCOMPILE_RESERVED17 0x20000 -+#endif -+#endif -+ - struct CompilerFlagInfo - { - UINT mFlag; -diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Clear11.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Clear11.cpp -index 03b28c2..cd95c65 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Clear11.cpp -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Clear11.cpp -@@ -262,7 +262,9 @@ gl::Error Clear11::clearFramebuffer(const ClearParameters &clearParams, const gl - RenderTarget11* maskedClearDepthStencil = nullptr; - - ID3D11DeviceContext *deviceContext = mRenderer->getDeviceContext(); -+#if defined(ANGLE_ENABLE_D3D11_1) - ID3D11DeviceContext1 *deviceContext1 = mRenderer->getDeviceContext1IfSupported(); -+#endif - ID3D11Device *device = mRenderer->getDevice(); - - for (size_t colorAttachmentIndex = 0; colorAttachmentIndex < colorAttachments.size(); -@@ -347,6 +349,7 @@ gl::Error Clear11::clearFramebuffer(const ClearParameters &clearParams, const gl - clearValues[3] = (clearParams.colorFClearValue.alpha >= 0.5f) ? 1.0f : 0.0f; - } - -+#if defined(ANGLE_ENABLE_D3D11_1) - if (needScissoredClear) - { - // We shouldn't reach here if deviceContext1 is unavailable. -@@ -361,6 +364,7 @@ gl::Error Clear11::clearFramebuffer(const ClearParameters &clearParams, const gl - deviceContext1->ClearView(framebufferRTV, clearValues, &rect, 1); - } - else -+#endif - { - deviceContext->ClearRenderTargetView(framebufferRTV, clearValues); - } -diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/DebugAnnotator11.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/DebugAnnotator11.cpp -index 2e42859..1c35ab4 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/DebugAnnotator11.cpp -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/DebugAnnotator11.cpp -@@ -27,7 +27,9 @@ DebugAnnotator11::~DebugAnnotator11() - { - if (mInitialized) - { -+#if defined(ANGLE_ENABLE_D3D11_1) - SafeRelease(mUserDefinedAnnotation); -+#endif - - #if !defined(ANGLE_ENABLE_WINDOWS_STORE) - FreeLibrary(mD3d11Module); -@@ -41,7 +43,9 @@ void DebugAnnotator11::beginEvent(const wchar_t *eventName) - - if (mUserDefinedAnnotation != nullptr) - { -+#if defined(ANGLE_ENABLE_D3D11_1) - mUserDefinedAnnotation->BeginEvent(eventName); -+#endif - } - } - -@@ -51,7 +55,9 @@ void DebugAnnotator11::endEvent() - - if (mUserDefinedAnnotation != nullptr) - { -+#if defined(ANGLE_ENABLE_D3D11_1) - mUserDefinedAnnotation->EndEvent(); -+#endif - } - } - -@@ -61,7 +67,9 @@ void DebugAnnotator11::setMarker(const wchar_t *markerName) - - if (mUserDefinedAnnotation != nullptr) - { -+#if defined(ANGLE_ENABLE_D3D11_1) - mUserDefinedAnnotation->SetMarker(markerName); -+#endif - } - } - -@@ -137,8 +145,10 @@ void DebugAnnotator11::initializeDevice() - ASSERT(SUCCEEDED(hr)); - if (SUCCEEDED(hr)) - { -+#if defined(ANGLE_ENABLE_D3D11_1) - mUserDefinedAnnotation = d3d11::DynamicCastComObject(context); - ASSERT(mUserDefinedAnnotation != nullptr); -+#endif - mInitialized = true; - } - -diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/DebugAnnotator11.h b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/DebugAnnotator11.h -index 9da4fa2..d1a0f7f 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/DebugAnnotator11.h -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/DebugAnnotator11.h -@@ -11,6 +11,8 @@ - - #include "common/debug.h" - -+struct ID3DUserDefinedAnnotation; -+ - namespace rx - { - -diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Framebuffer11.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Framebuffer11.cpp -index beffa30..186a035 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Framebuffer11.cpp -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Framebuffer11.cpp -@@ -140,6 +140,7 @@ gl::Error Framebuffer11::discard(size_t count, const GLenum *attachments) - - gl::Error Framebuffer11::invalidateBase(size_t count, const GLenum *attachments, bool useEXTBehavior) const - { -+#if defined(ANGLE_ENABLE_D3D11_1) - ID3D11DeviceContext1 *deviceContext1 = mRenderer->getDeviceContext1IfSupported(); - - if (!deviceContext1) -@@ -272,6 +273,7 @@ gl::Error Framebuffer11::invalidateBase(size_t count, const GLenum *attachments, - deviceContext1->DiscardView(stencilView); - } - } -+#endif // ANGLE_ENABLE_D3D11_1 - - return gl::Error(GL_NO_ERROR); - } -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 ea84783..62badcc 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp -@@ -10,7 +10,7 @@ - - #include - #include --#if WINAPI_FAMILY != WINAPI_FAMILY_PHONE_APP -+#if !defined(ANGLE_MINGW32_COMPAT) && WINAPI_FAMILY != WINAPI_FAMILY_PHONE_APP - #include - #endif - -@@ -89,6 +89,7 @@ enum - MAX_TEXTURE_IMAGE_UNITS_VTF_SM4 = 16 - }; - -+#if defined(ANGLE_ENABLE_D3D11_1) - void CalculateConstantBufferParams(GLintptr offset, GLsizeiptr size, UINT *outFirstConstant, UINT *outNumConstants) - { - // The offset must be aligned to 256 bytes (should have been enforced by glBindBufferRange). -@@ -105,6 +106,7 @@ void CalculateConstantBufferParams(GLintptr offset, GLsizeiptr size, UINT *outFi - // This behaviour is explictly allowed according to the documentation on ID3D11DeviceContext1::PSSetConstantBuffers1 - // https://msdn.microsoft.com/en-us/library/windows/desktop/hh404649%28v=vs.85%29.aspx - } -+#endif - - enum ANGLEFeatureLevel - { -@@ -369,8 +371,10 @@ Renderer11::Renderer11(egl::Display *display) - : RendererD3D(display), - mStateCache(this), - mStateManager(this), -- mLastHistogramUpdateTime(ANGLEPlatformCurrent()->monotonicallyIncreasingTime()), -- mDebug(nullptr) -+ mLastHistogramUpdateTime(ANGLEPlatformCurrent()->monotonicallyIncreasingTime()) -+#if !defined(ANGLE_MINGW32_COMPAT) -+ ,mDebug(nullptr) -+#endif - { - mVertexDataManager = NULL; - mIndexDataManager = NULL; -@@ -572,7 +576,9 @@ egl::Error Renderer11::initialize() - // Cast the DeviceContext to a DeviceContext1. - // This could fail on Windows 7 without the Platform Update. - // Don't error in this case- just don't use mDeviceContext1. -+#if defined(ANGLE_ENABLE_D3D11_1) - mDeviceContext1 = d3d11::DynamicCastComObject(mDeviceContext); -+#endif - - IDXGIDevice *dxgiDevice = NULL; - result = mDevice->QueryInterface(__uuidof(IDXGIDevice), (void**)&dxgiDevice); -@@ -595,6 +601,7 @@ egl::Error Renderer11::initialize() - - SafeRelease(dxgiDevice); - -+#if defined(ANGLE_ENABLE_D3D11_1) - IDXGIAdapter2 *dxgiAdapter2 = d3d11::DynamicCastComObject(mDxgiAdapter); - - // On D3D_FEATURE_LEVEL_9_*, IDXGIAdapter::GetDesc returns "Software Adapter" for the description string. -@@ -618,11 +625,14 @@ egl::Error Renderer11::initialize() - } - } - else -+#endif - { - result = mDxgiAdapter->GetDesc(&mAdapterDescription); - } - -+#if defined(ANGLE_ENABLE_D3D11_1) - SafeRelease(dxgiAdapter2); -+#endif - - if (FAILED(result)) - { -@@ -644,6 +654,7 @@ egl::Error Renderer11::initialize() - } - } - -+#if !defined(ANGLE_MINGW32_COMPAT) - // Disable some spurious D3D11 debug warnings to prevent them from flooding the output log - #if defined(ANGLE_SUPPRESS_D3D11_HAZARD_WARNINGS) && defined(_DEBUG) - { -@@ -671,6 +682,7 @@ egl::Error Renderer11::initialize() - #if !defined(NDEBUG) - mDebug = d3d11::DynamicCastComObject(mDevice); - #endif -+#endif // !ANGLE_MINGW32_COMPAT - - initializeDevice(); - -@@ -859,6 +871,7 @@ void Renderer11::populateRenderer11DeviceCaps() - { - HRESULT hr = S_OK; - -+#if defined(ANGLE_ENABLE_D3D11_1) - if (mDeviceContext1) - { - D3D11_FEATURE_DATA_D3D11_OPTIONS d3d11Options; -@@ -869,6 +882,7 @@ void Renderer11::populateRenderer11DeviceCaps() - mRenderer11DeviceCaps.supportsConstantBufferOffsets = (d3d11Options.ConstantBufferOffsetting != FALSE); - } - } -+#endif - - hr = mDevice->CheckFormatSupport(DXGI_FORMAT_B5G6R5_UNORM, &(mRenderer11DeviceCaps.B5G6R5support)); - if (FAILED(hr)) -@@ -888,9 +902,11 @@ void Renderer11::populateRenderer11DeviceCaps() - mRenderer11DeviceCaps.B5G5R5A1support = 0; - } - -+#if defined(ANGLE_ENABLE_D3D11_1) - IDXGIAdapter2 *dxgiAdapter2 = d3d11::DynamicCastComObject(mDxgiAdapter); - mRenderer11DeviceCaps.supportsDXGI1_2 = (dxgiAdapter2 != nullptr); - SafeRelease(dxgiAdapter2); -+#endif - } - - egl::ConfigSet Renderer11::generateConfigs() const -@@ -1308,6 +1324,7 @@ gl::Error Renderer11::setUniformBuffers(const gl::Data &data, - mCurrentConstantBufferVSOffset[uniformBufferIndex] != uniformBufferOffset || - mCurrentConstantBufferVSSize[uniformBufferIndex] != uniformBufferSize) - { -+#if defined(ANGLE_ENABLE_D3D11_1) - if (mRenderer11DeviceCaps.supportsConstantBufferOffsets && uniformBufferSize != 0) - { - UINT firstConstant = 0, numConstants = 0; -@@ -1318,6 +1335,7 @@ gl::Error Renderer11::setUniformBuffers(const gl::Data &data, - 1, &constantBuffer, &firstConstant, &numConstants); - } - else -+#endif - { - mDeviceContext->VSSetConstantBuffers( - getReservedVertexUniformBuffers() + -@@ -1369,6 +1387,7 @@ gl::Error Renderer11::setUniformBuffers(const gl::Data &data, - mCurrentConstantBufferPSOffset[uniformBufferIndex] != uniformBufferOffset || - mCurrentConstantBufferPSSize[uniformBufferIndex] != uniformBufferSize) - { -+#if defined(ANGLE_ENABLE_D3D11_1) - if (mRenderer11DeviceCaps.supportsConstantBufferOffsets && uniformBufferSize != 0) - { - UINT firstConstant = 0, numConstants = 0; -@@ -1379,6 +1398,7 @@ gl::Error Renderer11::setUniformBuffers(const gl::Data &data, - 1, &constantBuffer, &firstConstant, &numConstants); - } - else -+#endif - { - mDeviceContext->PSSetConstantBuffers( - getReservedFragmentUniformBuffers() + -@@ -2448,7 +2468,9 @@ void Renderer11::release() - SafeRelease(mDxgiFactory); - SafeRelease(mDxgiAdapter); - -+#if defined(ANGLE_ENABLE_D3D11_1) - SafeRelease(mDeviceContext1); -+#endif - - if (mDeviceContext) - { -@@ -2458,7 +2480,9 @@ void Renderer11::release() - } - - SafeRelease(mDevice); -+#if !defined(ANGLE_MINGW32_COMPAT) - SafeRelease(mDebug); -+#endif - - if (mD3d11Module) - { -@@ -2618,7 +2642,7 @@ bool Renderer11::getShareHandleSupport() const - - if (deviceType == d3d11::ANGLE_D3D11_DEVICE_TYPE_WARP) - { --#ifndef ANGLE_ENABLE_WINDOWS_STORE -+#if !defined(ANGLE_ENABLE_WINDOWS_STORE) && !defined(__GNUC__) - if (!IsWindows8OrGreater()) - { - // WARP on Windows 7 doesn't support shared handles -diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.h b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.h -index 62e9816..b4e7761 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.h -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.h -@@ -28,6 +28,8 @@ class FramebufferAttachment; - struct ImageIndex; - } - -+struct ID3D11DeviceContext1; -+ - namespace rx - { - -@@ -442,7 +444,9 @@ class Renderer11 : public RendererD3D - DXGI_ADAPTER_DESC mAdapterDescription; - char mDescription[128]; - DXGIFactory *mDxgiFactory; -+#if !defined(ANGLE_MINGW32_COMPAT) - ID3D11Debug *mDebug; -+#endif - - std::vector mScratchIndexDataBuffer; - -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 f669f56..f80f24b 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.cpp -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.cpp -@@ -58,7 +58,9 @@ SwapChain11::SwapChain11(Renderer11 *renderer, - mPassThroughResourcesInit(false), - mFirstSwap(true), - mSwapChain(nullptr), -+#if defined(ANGLE_ENABLE_D3D11_1) - mSwapChain1(nullptr), -+#endif - mKeyedMutex(nullptr), - mBackBufferTexture(nullptr), - mBackBufferRTView(nullptr), -@@ -90,7 +92,9 @@ SwapChain11::~SwapChain11() - - void SwapChain11::release() - { -+#if defined(ANGLE_ENABLE_D3D11_1) - SafeRelease(mSwapChain1); -+#endif - SafeRelease(mSwapChain); - SafeRelease(mKeyedMutex); - SafeRelease(mBackBufferTexture); -@@ -533,7 +537,9 @@ EGLint SwapChain11::reset(int backbufferWidth, int backbufferHeight, EGLint swap - - // Release specific resources to free up memory for the new render target, while the - // old render target still exists for the purpose of preserving its contents. -+#if defined(ANGLE_ENABLE_D3D11_1) - SafeRelease(mSwapChain1); -+#endif - SafeRelease(mSwapChain); - SafeRelease(mBackBufferTexture); - SafeRelease(mBackBufferRTView); -@@ -568,7 +574,9 @@ EGLint SwapChain11::reset(int backbufferWidth, int backbufferHeight, EGLint swap - - if (mRenderer->getRenderer11DeviceCaps().supportsDXGI1_2) - { -+#if defined(ANGLE_ENABLE_D3D11_1) - mSwapChain1 = d3d11::DynamicCastComObject(mSwapChain); -+#endif - } - - result = mSwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (LPVOID*)&mBackBufferTexture); -@@ -837,6 +845,7 @@ EGLint SwapChain11::present(EGLint x, EGLint y, EGLint width, EGLint height) - - HRESULT result = S_OK; - -+#if defined(ANGLE_ENABLE_D3D11_1) - // Use IDXGISwapChain1::Present1 with a dirty rect if DXGI 1.2 is available. - if (mSwapChain1 != nullptr) - { -@@ -855,6 +864,7 @@ EGLint SwapChain11::present(EGLint x, EGLint y, EGLint width, EGLint height) - } - } - else -+#endif - { - result = mSwapChain->Present(swapInterval, 0); - } -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 99198c6..adcd07a 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.h -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.h -@@ -75,7 +75,9 @@ class SwapChain11 : public SwapChainD3D - - bool mFirstSwap; - DXGISwapChain *mSwapChain; -+#if defined(ANGLE_ENABLE_D3D11_1) - IDXGISwapChain1 *mSwapChain1; -+#endif - IDXGIKeyedMutex *mKeyedMutex; - - ID3D11Texture2D *mBackBufferTexture; -diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.cpp -index d1f3ea0..a1175db 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.cpp -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.cpp -@@ -23,6 +23,85 @@ - #include "libANGLE/renderer/d3d/FramebufferD3D.h" - #include "libANGLE/renderer/d3d/WorkaroundsD3D.h" - -+#ifndef D3D_FL9_1_DEFAULT_MAX_ANISOTROPY -+# define D3D_FL9_1_DEFAULT_MAX_ANISOTROPY 2 -+#endif -+#ifndef D3D_FL9_1_SIMULTANEOUS_RENDER_TARGET_COUNT -+# define D3D_FL9_1_SIMULTANEOUS_RENDER_TARGET_COUNT 1 -+#endif -+#ifndef D3D_FL9_3_SIMULTANEOUS_RENDER_TARGET_COUNT -+# define D3D_FL9_3_SIMULTANEOUS_RENDER_TARGET_COUNT 4 -+#endif -+#ifndef D3D_FL9_1_IA_PRIMITIVE_MAX_COUNT -+# define D3D_FL9_1_IA_PRIMITIVE_MAX_COUNT 65535 -+#endif -+#ifndef D3D_FL9_2_IA_PRIMITIVE_MAX_COUNT -+# define D3D_FL9_2_IA_PRIMITIVE_MAX_COUNT 1048575 -+#endif -+#ifndef D3D_FL9_1_REQ_TEXTURECUBE_DIMENSION -+# define D3D_FL9_1_REQ_TEXTURECUBE_DIMENSION 512 -+#endif -+#ifndef D3D_FL9_3_REQ_TEXTURECUBE_DIMENSION -+# define D3D_FL9_3_REQ_TEXTURECUBE_DIMENSION 4096 -+#endif -+#ifndef D3D_FL9_1_REQ_TEXTURE2D_U_OR_V_DIMENSION -+# define D3D_FL9_1_REQ_TEXTURE2D_U_OR_V_DIMENSION 2048 -+#endif -+#ifndef D3D_FL9_1_REQ_TEXTURE3D_U_V_OR_W_DIMENSION -+# define D3D_FL9_1_REQ_TEXTURE3D_U_V_OR_W_DIMENSION 256 -+#endif -+#ifndef D3D_FL9_3_REQ_TEXTURE2D_U_OR_V_DIMENSION -+# define D3D_FL9_3_REQ_TEXTURE2D_U_OR_V_DIMENSION 4096 -+#endif -+#ifndef D3D11_REQ_TEXTURECUBE_DIMENSION -+# define D3D11_REQ_TEXTURECUBE_DIMENSION 16384 -+#endif -+#ifndef D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION -+# define D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION 2048 -+#endif -+#ifndef D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION -+# define D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION 2048 -+#endif -+#ifndef D3D11_REQ_DRAWINDEXED_INDEX_COUNT_2_TO_EXP -+# define D3D11_REQ_DRAWINDEXED_INDEX_COUNT_2_TO_EXP 32 -+#endif -+#ifndef D3D11_REQ_DRAW_VERTEX_COUNT_2_TO_EXP -+# define D3D11_REQ_DRAW_VERTEX_COUNT_2_TO_EXP 32 -+#endif -+#ifndef D3D10_1_STANDARD_VERTEX_ELEMENT_COUNT -+# define D3D10_1_STANDARD_VERTEX_ELEMENT_COUNT 32 -+#endif -+#ifndef D3D11_STANDARD_VERTEX_ELEMENT_COUNT -+# define D3D11_STANDARD_VERTEX_ELEMENT_COUNT 32 -+#endif -+#ifndef D3D10_1_SO_BUFFER_SLOT_COUNT -+# define D3D10_1_SO_BUFFER_SLOT_COUNT 4 -+#endif -+#ifndef D3D11_SO_BUFFER_SLOT_COUNT -+# define D3D11_SO_BUFFER_SLOT_COUNT 4 -+#endif -+#ifndef D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT -+# define D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT 14 -+#endif -+#ifndef D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT -+# define D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT 16 -+#endif -+#ifndef D3D11_COMMONSHADER_TEXEL_OFFSET_MAX_NEGATIVE -+# define D3D11_COMMONSHADER_TEXEL_OFFSET_MAX_NEGATIVE -8 -+#endif -+#ifndef D3D11_COMMONSHADER_TEXEL_OFFSET_MAX_POSITIVE -+# define D3D11_COMMONSHADER_TEXEL_OFFSET_MAX_POSITIVE 7 -+#endif -+#ifndef D3D11_REQ_CONSTANT_BUFFER_ELEMENT_COUNT -+# define D3D11_REQ_CONSTANT_BUFFER_ELEMENT_COUNT 4096 -+#endif -+#ifndef D3D11_PS_INPUT_REGISTER_COUNT -+# define D3D11_PS_INPUT_REGISTER_COUNT 32 -+#endif -+#ifndef D3D10_1_VS_OUTPUT_REGISTER_COUNT -+# define D3D10_1_VS_OUTPUT_REGISTER_COUNT 32 -+#endif -+ - namespace rx - { - -@@ -601,7 +683,9 @@ static size_t GetMaximumCubeMapTextureSize(D3D_FEATURE_LEVEL featureLevel) - { - switch (featureLevel) - { -+#if defined(ANGLE_ENABLE_D3D11_1) - case D3D_FEATURE_LEVEL_11_1: -+#endif - case D3D_FEATURE_LEVEL_11_0: return D3D11_REQ_TEXTURECUBE_DIMENSION; - - case D3D_FEATURE_LEVEL_10_1: -@@ -619,7 +703,9 @@ static size_t GetMaximum2DTextureArraySize(D3D_FEATURE_LEVEL featureLevel) - { - switch (featureLevel) - { -+#if defined(ANGLE_ENABLE_D3D11_1) - case D3D_FEATURE_LEVEL_11_1: -+#endif - case D3D_FEATURE_LEVEL_11_0: return D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION; - - case D3D_FEATURE_LEVEL_10_1: -@@ -1266,7 +1352,9 @@ ANGLED3D11DeviceType GetDeviceType(ID3D11Device *device) - - IDXGIDevice *dxgiDevice = nullptr; - IDXGIAdapter *dxgiAdapter = nullptr; -+#if defined(ANGLE_ENABLE_D3D11_1) - IDXGIAdapter2 *dxgiAdapter2 = nullptr; -+#endif - - ANGLED3D11DeviceType retDeviceType = ANGLE_D3D11_DEVICE_TYPE_UNKNOWN; - -@@ -1277,6 +1365,7 @@ ANGLED3D11DeviceType GetDeviceType(ID3D11Device *device) - if (SUCCEEDED(hr)) - { - std::wstring adapterString; -+#if defined(ANGLE_ENABLE_D3D11_1) - HRESULT adapter2hr = - dxgiAdapter->QueryInterface(__uuidof(dxgiAdapter2), (void **)&dxgiAdapter2); - if (SUCCEEDED(adapter2hr)) -@@ -1289,6 +1378,7 @@ ANGLED3D11DeviceType GetDeviceType(ID3D11Device *device) - adapterString = std::wstring(adapterDesc2.Description); - } - else -+#endif - { - DXGI_ADAPTER_DESC adapterDesc; - dxgiAdapter->GetDesc(&adapterDesc); -@@ -1320,7 +1410,9 @@ ANGLED3D11DeviceType GetDeviceType(ID3D11Device *device) - - SafeRelease(dxgiDevice); - SafeRelease(dxgiAdapter); -+#if defined(ANGLE_ENABLE_D3D11_1) - SafeRelease(dxgiAdapter2); -+#endif - - return retDeviceType; - } -diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/win32/NativeWindow.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/win32/NativeWindow.cpp -index 123b481..cd63789 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/win32/NativeWindow.cpp -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/win32/NativeWindow.cpp -@@ -12,7 +12,9 @@ - #include "common/debug.h" - - #include -+#if !defined(__MINGW32__) - #include -+#endif - - namespace rx - { -@@ -31,9 +33,11 @@ NativeWindow::NativeWindow(EGLNativeWindowType window, - - NativeWindow::~NativeWindow() - { -+#if !defined(__MINGW32__) - SafeRelease(mCompositionTarget); - SafeRelease(mDevice); - SafeRelease(mVisual); -+#endif - } - - bool NativeWindow::initialize() -@@ -66,6 +70,7 @@ HRESULT NativeWindow::createSwapChain(ID3D11Device* device, DXGIFactory* factory - return E_INVALIDARG; - } - -+#if !defined(__MINGW32__) - if (mDirectComposition) - { - HMODULE dcomp = ::GetModuleHandle(TEXT("dcomp.dll")); -@@ -171,6 +176,7 @@ HRESULT NativeWindow::createSwapChain(ID3D11Device* device, DXGIFactory* factory - SafeRelease(factory2); - return result; - } -+#endif // !__MINGW32__ - - DXGI_SWAP_CHAIN_DESC swapChainDesc = {}; - swapChainDesc.BufferCount = 1; -@@ -202,9 +208,11 @@ HRESULT NativeWindow::createSwapChain(ID3D11Device* device, DXGIFactory* factory - - void NativeWindow::commitChange() - { -+#if !defined(__MINGW32__) - if (mDevice) - { - mDevice->Commit(); - } -+#endif - } - } -diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d9/Renderer9.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d9/Renderer9.cpp -index cba74c1..6bb975b 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d9/Renderer9.cpp -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d9/Renderer9.cpp -@@ -193,7 +193,7 @@ egl::Error Renderer9::initialize() - { - TRACE_EVENT0("gpu.angle", "D3d9Ex_QueryInterface"); - ASSERT(mD3d9Ex); -- mD3d9Ex->QueryInterface(__uuidof(IDirect3D9), reinterpret_cast(&mD3d9)); -+ mD3d9Ex->QueryInterface(IID_IDirect3D9, reinterpret_cast(&mD3d9)); - ASSERT(mD3d9); - } - else -@@ -301,7 +301,7 @@ egl::Error Renderer9::initialize() - if (mD3d9Ex) - { - TRACE_EVENT0("gpu.angle", "mDevice_QueryInterface"); -- result = mDevice->QueryInterface(__uuidof(IDirect3DDevice9Ex), (void**)&mDeviceEx); -+ result = mDevice->QueryInterface(IID_IDirect3DDevice9Ex, (void**)&mDeviceEx); - ASSERT(SUCCEEDED(result)); - } - --- -2.7.0.windows.1 - diff --git a/0003-ANGLE-Add-support-for-querying-platform-device.patch b/0003-ANGLE-Add-support-for-querying-platform-device.patch deleted file mode 100644 index ed0f724..0000000 --- a/0003-ANGLE-Add-support-for-querying-platform-device.patch +++ /dev/null @@ -1,81 +0,0 @@ -From 037550af14ce0ecebad96d637d7185b60d760b5d Mon Sep 17 00:00:00 2001 -From: Oliver Wolff -Date: Tue, 1 Mar 2016 13:31:08 +0100 -Subject: [PATCH 3/7] 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 93f6990..0347828 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/SurfaceD3D.cpp -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/SurfaceD3D.cpp -@@ -334,6 +334,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::Error(EGL_SUCCESS); -diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/SwapChainD3D.h b/src/3rdparty/angle/src/libANGLE/renderer/d3d/SwapChainD3D.h -index 1ef6611..171cab5 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/SwapChainD3D.h -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/SwapChainD3D.h -@@ -41,6 +41,7 @@ class SwapChainD3D : angle::NonCopyable - virtual EGLint reset(EGLint backbufferWidth, EGLint backbufferHeight, EGLint swapInterval) = 0; - virtual EGLint swapRect(EGLint x, EGLint y, EGLint width, EGLint height) = 0; - virtual void recreate() = 0; -+ virtual void *getDevice() { return NULL; } - - 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 9432a7f..5a6f202 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.cpp -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.cpp -@@ -915,4 +915,9 @@ void SwapChain11::recreate() - // possibly should use this method instead of reset - } - -+void *rx::SwapChain11::getDevice() -+{ -+ return mRenderer->getDevice(); -+} -+ - } -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 583e29c..99198c6 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.h -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.h -@@ -48,6 +48,8 @@ class SwapChain11 : public SwapChainD3D - EGLint getHeight() const { return mHeight; } - void *getKeyedMutex() override { return mKeyedMutex; } - -+ virtual void *getDevice(); -+ - private: - void release(); - void initPassThroughResources(); --- -2.7.0.windows.1 - diff --git a/0003-ANGLE-Fix-Windows-Store-D3D-Trim-and-Level-9-require.patch b/0003-ANGLE-Fix-Windows-Store-D3D-Trim-and-Level-9-require.patch new file mode 100644 index 0000000..1f51619 --- /dev/null +++ b/0003-ANGLE-Fix-Windows-Store-D3D-Trim-and-Level-9-require.patch @@ -0,0 +1,58 @@ +From 9b37d0fa0e9eaab3d8bb1dcbba85c072302ee08c Mon Sep 17 00:00:00 2001 +From: Oliver Wolff +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(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/0004-ANGLE-Allow-Windows-Phone-to-communicate-swap-region.patch b/0004-ANGLE-Allow-Windows-Phone-to-communicate-swap-region.patch deleted file mode 100644 index 4d7080e..0000000 --- a/0004-ANGLE-Allow-Windows-Phone-to-communicate-swap-region.patch +++ /dev/null @@ -1,146 +0,0 @@ -From a0c84bec77dd2dab4dd87add17dd1f21e6d8087d Mon Sep 17 00:00:00 2001 -From: Oliver Wolff -Date: Tue, 1 Mar 2016 13:39:06 +0100 -Subject: [PATCH 4/7] ANGLE: Allow Windows Phone to communicate swap region - -eglPostSubBufferNV is used to communicate the size of the window, as -otherwise there is no way for the renderer to know if the last frame was -rendered in landscape or portrait, causing rendering glitches when the -orientation changes. The rotation flags are utilized in a few additional -places now to fix some corner cases where the rotation was not applied. - -This patch should be squashed into "ANGLE-Improve-Windows-Phone-Support" -during the next ANGLE rebase. - -Task-number: QTBUG-44333 -Task-number: QTBUG-43502 - -Change-Id: I2b35c41ed17004524f383350253a936e6bf85117 ---- - .../angle/src/libANGLE/renderer/d3d/SurfaceD3D.cpp | 2 ++ - .../libANGLE/renderer/d3d/d3d11/SwapChain11.cpp | 28 +++++++++++++--------- - .../d3d/d3d11/winrt/CoreWindowNativeWindow.cpp | 5 ++-- - .../angle/src/libGLESv2/entry_points_egl_ext.cpp | 2 ++ - 4 files changed, 24 insertions(+), 13 deletions(-) - -diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/SurfaceD3D.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/SurfaceD3D.cpp -index 0347828..3d27548 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/SurfaceD3D.cpp -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/SurfaceD3D.cpp -@@ -211,6 +211,7 @@ egl::Error SurfaceD3D::swapRect(EGLint x, EGLint y, EGLint width, EGLint height) - return egl::Error(EGL_SUCCESS); - } - -+#if !defined(ANGLE_ENABLE_WINDOWS_STORE) || (defined(ANGLE_ENABLE_WINDOWS_STORE) && WINAPI_FAMILY == WINAPI_FAMILY_PC_APP) // Qt WP: eglPostSubBufferNV comes here - if (x + width > mWidth) - { - width = mWidth - x; -@@ -220,6 +221,7 @@ egl::Error SurfaceD3D::swapRect(EGLint x, EGLint y, EGLint width, EGLint height) - { - height = mHeight - y; - } -+#endif - - if (width != 0 && height != 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 5a6f202..f669f56 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.cpp -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.cpp -@@ -717,18 +717,18 @@ EGLint SwapChain11::copyOffscreenToBackbuffer(EGLint x, EGLint y, EGLint width, - - d3d11::PositionTexCoordVertex *vertices = static_cast(mappedResource.pData); - -+#if defined(ANGLE_ENABLE_WINDOWS_STORE) && (WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP) - // 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 x1 = -1.0f; -+ float y1 = -1.0f; -+ float x2 = 1.0f; -+ float y2 = 1.0f; - --#if defined(ANGLE_ENABLE_WINDOWS_STORE) && (WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP) - const float dim = std::max(mWidth, mHeight); -- float u1 = x / dim; -- float v1 = y / dim; -- float u2 = (x + width) / dim; -- float v2 = (y + height) / dim; -+ float u1 = 0; -+ float v1 = 0; -+ float u2 = float(width) / dim; -+ float v2 = float(height) / dim; - - const NativeWindow::RotationFlags flags = mNativeWindow.rotationFlags(); - const bool rotateL = flags == NativeWindow::RotateLeft; -@@ -738,6 +738,12 @@ EGLint SwapChain11::copyOffscreenToBackbuffer(EGLint x, EGLint y, EGLint width, - d3d11::SetPositionTexCoordVertex(&vertices[2], x2, y1, rotateR ? u1 : u2, rotateL ? v2 : v1); - d3d11::SetPositionTexCoordVertex(&vertices[3], x2, y2, rotateL ? u1 : u2, rotateR ? v1 : v2); - #else -+ // 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); -@@ -788,8 +794,8 @@ EGLint SwapChain11::copyOffscreenToBackbuffer(EGLint x, EGLint y, EGLint width, - viewport.TopLeftX = 0; - viewport.TopLeftY = 0; - #if defined(ANGLE_ENABLE_WINDOWS_STORE) && (WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP) -- viewport.Width = (rotateL || rotateR) ? mHeight : mWidth; -- viewport.Height = (rotateL || rotateR) ? mWidth : mHeight; -+ viewport.Width = (rotateL || rotateR) ? height : width; -+ viewport.Height = (rotateL || rotateR) ? width : height; - #else - viewport.Width = static_cast(mWidth); - viewport.Height = static_cast(mHeight); -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 6a4795a..b074e8c 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 -@@ -132,6 +132,7 @@ bool CoreWindowNativeWindow::registerForSizeChangeEvents() - if (SUCCEEDED(result)) - { - result = mDisplayInformation->add_OrientationChanged(orientationChangedHandler.Get(), &mOrientationChangedEventToken); -+ orientationChangedHandler->Invoke(mDisplayInformation.Get(), nullptr); - } - #endif - -@@ -175,8 +176,8 @@ HRESULT CoreWindowNativeWindow::createSwapChain(ID3D11Device *device, - } - - DXGI_SWAP_CHAIN_DESC1 swapChainDesc = { 0 }; -- swapChainDesc.Width = width; -- swapChainDesc.Height = height; -+ swapChainDesc.Width = mRotationFlags ? height : width; -+ swapChainDesc.Height = mRotationFlags ? width : height; - swapChainDesc.Format = format; - swapChainDesc.Stereo = FALSE; - swapChainDesc.SampleDesc.Count = 1; -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 7536b19..e3c35d5 100644 ---- a/src/3rdparty/angle/src/libGLESv2/entry_points_egl_ext.cpp -+++ b/src/3rdparty/angle/src/libGLESv2/entry_points_egl_ext.cpp -@@ -108,12 +108,14 @@ EGLBoolean EGLAPIENTRY PostSubBufferNV(EGLDisplay dpy, EGLSurface surface, EGLin - return EGL_FALSE; - } - -+#if !defined(ANGLE_ENABLE_WINDOWS_STORE) || (defined(ANGLE_ENABLE_WINDOWS_STORE) && WINAPI_FAMILY == WINAPI_FAMILY_PC_APP) // Qt WP: Allow this entry point as a workaround - if (!display->getExtensions().postSubBuffer) - { - // Spec is not clear about how this should be handled. - SetGlobalError(Error(EGL_SUCCESS)); - return EGL_TRUE; - } -+#endif - - error = eglSurface->postSubBuffer(x, y, width, height); - if (error.isError()) --- -2.7.0.windows.1 - diff --git a/0004-ANGLE-fix-usage-of-shared-handles-for-WinRT-applicat.patch b/0004-ANGLE-fix-usage-of-shared-handles-for-WinRT-applicat.patch new file mode 100644 index 0000000..72a72f1 --- /dev/null +++ b/0004-ANGLE-fix-usage-of-shared-handles-for-WinRT-applicat.patch @@ -0,0 +1,37 @@ +From 67125df3f31dfad0feec81c49c2b317c6d418f4e Mon Sep 17 00:00:00 2001 +From: Oliver Wolff +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/0005-ANGLE-Fix-compilation-without-d3d11.patch b/0005-ANGLE-Fix-compilation-without-d3d11.patch deleted file mode 100644 index f32702d..0000000 --- a/0005-ANGLE-Fix-compilation-without-d3d11.patch +++ /dev/null @@ -1,59 +0,0 @@ -From c224d27faf33fe2830b35eba22af0a637e1309cb Mon Sep 17 00:00:00 2001 -From: Oliver Wolff -Date: Tue, 1 Mar 2016 14:14:29 +0100 -Subject: [PATCH 5/7] ANGLE: Fix compilation without d3d11 - -Change-Id: I70ca8ef8ed205465a20c47756634ef6efc16ce85 ---- - src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/NativeWindow.h | 4 +++- - .../angle/src/libANGLE/renderer/d3d/d3d11/win32/NativeWindow.cpp | 2 ++ - 2 files changed, 5 insertions(+), 1 deletion(-) - -diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/NativeWindow.h b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/NativeWindow.h -index 1c94538..612b06b 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/NativeWindow.h -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/NativeWindow.h -@@ -39,7 +39,7 @@ class InspectableNativeWindow; - using namespace Microsoft::WRL; - using namespace Microsoft::WRL::Wrappers; - --#else -+#elif defined(ANGLE_ENABLE_D3D11) - typedef IDXGISwapChain DXGISwapChain; - typedef IDXGIFactory DXGIFactory; - #endif -@@ -68,9 +68,11 @@ class NativeWindow - #endif - static bool isValidNativeWindow(EGLNativeWindowType window); - -+#if defined(ANGLE_ENABLE_D3D11) - HRESULT createSwapChain(ID3D11Device* device, DXGIFactory* factory, - DXGI_FORMAT format, UINT width, UINT height, - DXGISwapChain** swapChain); -+#endif - - inline EGLNativeWindowType getNativeWindow() const { return mWindow; } - -diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/win32/NativeWindow.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/win32/NativeWindow.cpp -index 05d7a46..d96fed7 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/win32/NativeWindow.cpp -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/win32/NativeWindow.cpp -@@ -56,6 +56,7 @@ bool NativeWindow::isValidNativeWindow(EGLNativeWindowType window) - return IsWindow(window) == TRUE; - } - -+#if defined(ANGLE_ENABLE_D3D11) - HRESULT NativeWindow::createSwapChain(ID3D11Device* device, DXGIFactory* factory, - DXGI_FORMAT format, unsigned int width, unsigned int height, - DXGISwapChain** swapChain) -@@ -191,6 +192,7 @@ HRESULT NativeWindow::createSwapChain(ID3D11Device* device, DXGIFactory* factory - - return factory->CreateSwapChain(device, &swapChainDesc, swapChain); - } -+#endif - - void NativeWindow::commitChange() - { --- -2.7.0.windows.1 - diff --git a/0005-ANGLE-Fix-initialization-of-zero-sized-window.patch b/0005-ANGLE-Fix-initialization-of-zero-sized-window.patch new file mode 100644 index 0000000..eb67278 --- /dev/null +++ b/0005-ANGLE-Fix-initialization-of-zero-sized-window.patch @@ -0,0 +1,32 @@ +From 8e649097b0e11d8b975ba321f343142dd97889cb Mon Sep 17 00:00:00 2001 +From: Oliver Wolff +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/0006-ANGLE-Fix-Windows-Store-D3D-Trim-and-Level-9-requirements.patch b/0006-ANGLE-Fix-Windows-Store-D3D-Trim-and-Level-9-requirements.patch deleted file mode 100644 index eb0572f..0000000 --- a/0006-ANGLE-Fix-Windows-Store-D3D-Trim-and-Level-9-requirements.patch +++ /dev/null @@ -1,57 +0,0 @@ -From b250c8e9c04cd1adccab7a6885273c9e6129131f Mon Sep 17 00:00:00 2001 -From: Oliver Wolff -Date: Tue, 1 Mar 2016 14:16:52 +0100 -Subject: [PATCH 6/7] 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 03159bb..ea84783 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp -@@ -453,7 +453,20 @@ Renderer11::Renderer11(egl::Display *display) - if (requestedMajorVersion == 9 && requestedMinorVersion == 3) - #endif - { -- 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 = attributes.get(EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE, -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 e3c35d5..6c7e2ff 100644 ---- a/src/3rdparty/angle/src/libGLESv2/entry_points_egl_ext.cpp -+++ b/src/3rdparty/angle/src/libGLESv2/entry_points_egl_ext.cpp -@@ -50,6 +50,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.7.0.windows.1 - diff --git a/0006-ANGLE-Fix-flickering-on-resize-when-D3D9-is-used.patch b/0006-ANGLE-Fix-flickering-on-resize-when-D3D9-is-used.patch new file mode 100644 index 0000000..4a2f906 --- /dev/null +++ b/0006-ANGLE-Fix-flickering-on-resize-when-D3D9-is-used.patch @@ -0,0 +1,165 @@ +From 0fc1b9c7e87ab6cdb6bf7c81a1eee0a1d1f74e92 Mon Sep 17 00:00:00 2001 +From: Oliver Wolff +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(attribs.get(EGL_WIDTH, 0))), + mHeight(static_cast(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,94 @@ 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(GetProp(hwnd, kSurfaceProperty)); ++ if(surf) ++ { ++ egl::Display *display = reinterpret_cast(GetProp(hwnd, kDisplayProperty)); ++ surf->checkForOutOfDateSwapChain(display->getProxyContext()); ++ } ++ } ++ WNDPROC prevWndFunc = reinterpret_cast(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(SurfaceWindowProc)); ++ if(oldWndProc == 0 && GetLastError() != ERROR_SUCCESS) ++ { ++ mWindowSubclassed = false; ++ return; ++ } ++ ++ SetProp(window, kSurfaceProperty, reinterpret_cast(this)); ++ SetProp(window, kParentWndProc, reinterpret_cast(oldWndProc)); ++ SetProp(window, kDisplayProperty, reinterpret_cast(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(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(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/0007-ANGLE-D3D11-Suppress-keyboard-handling-of-DXGI.patch b/0007-ANGLE-D3D11-Suppress-keyboard-handling-of-DXGI.patch deleted file mode 100644 index 5caf6e0..0000000 --- a/0007-ANGLE-D3D11-Suppress-keyboard-handling-of-DXGI.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 955357382b1bb02043ec744ef3b5929e29c4f8cc Mon Sep 17 00:00:00 2001 -From: Oliver Wolff -Date: Tue, 12 Apr 2016 14:44:26 +0200 -Subject: [PATCH 7/7] ANGLE/D3D11: Suppress keyboard handling of DXGI. - -Set the DXGI_MWA_NO_ALT_ENTER to suppress the Alt-Enter shortcut -causing the window to become full screen. - -Task-number: QTBUG-44904 -Change-Id: If24c32df69a5a47e29d14be8f2624abfac5cd634 ---- - .../src/libANGLE/renderer/d3d/d3d11/win32/NativeWindow.cpp | 10 +++++++++- - 1 file changed, 9 insertions(+), 1 deletion(-) - -diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/win32/NativeWindow.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/win32/NativeWindow.cpp -index 7da7f31..da6460b 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/win32/NativeWindow.cpp -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/win32/NativeWindow.cpp -@@ -171,6 +171,8 @@ HRESULT NativeWindow::createSwapChain(ID3D11Device* device, DXGIFactory* factory - HRESULT result = factory2->CreateSwapChainForHwnd(device, mWindow, &swapChainDesc, nullptr, nullptr, &swapChain1); - if (SUCCEEDED(result)) - { -+ const HRESULT makeWindowAssociationResult = factory->MakeWindowAssociation(mWindow, DXGI_MWA_NO_ALT_ENTER); -+ UNUSED_VARIABLE(makeWindowAssociationResult); - *swapChain = static_cast(swapChain1); - } - SafeRelease(factory2); -@@ -196,7 +198,13 @@ HRESULT NativeWindow::createSwapChain(ID3D11Device* device, DXGIFactory* factory - swapChainDesc.Windowed = TRUE; - swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_DISCARD; - -- return factory->CreateSwapChain(device, &swapChainDesc, swapChain); -+ const HRESULT result = factory->CreateSwapChain(device, &swapChainDesc, swapChain); -+ if (SUCCEEDED(result)) -+ { -+ const HRESULT makeWindowAssociationResult = factory->MakeWindowAssociation(mWindow, DXGI_MWA_NO_ALT_ENTER); -+ UNUSED_VARIABLE(makeWindowAssociationResult); -+ } -+ return result; - } - #endif - --- -2.7.0.windows.1 - diff --git a/0007-ANGLE-Fix-resizing-of-windows.patch b/0007-ANGLE-Fix-resizing-of-windows.patch new file mode 100644 index 0000000..2b4938b --- /dev/null +++ b/0007-ANGLE-Fix-resizing-of-windows.patch @@ -0,0 +1,48 @@ +From f1568e10c2bd46450adebbd838bd32e4833a0a5c Mon Sep 17 00:00:00 2001 +From: Oliver Wolff +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(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/0008-ANGLE-Use-pixel-sizes-in-the-XAML-swap-chain.patch b/0008-ANGLE-Use-pixel-sizes-in-the-XAML-swap-chain.patch deleted file mode 100644 index cadc628..0000000 --- a/0008-ANGLE-Use-pixel-sizes-in-the-XAML-swap-chain.patch +++ /dev/null @@ -1,401 +0,0 @@ -From 7a3851e74393eb254826face20b8e9af74bbdf0b Mon Sep 17 00:00:00 2001 -From: Oliver Wolff -Date: Thu, 17 Mar 2016 15:46:56 +0100 -Subject: [PATCH] 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. - -This includes a partial revert of "ANGLE: Improve Windows Phone Support" -as the modifications to SwapChain11 are incompatible with the XAML swap -chain. - -This change only affects Windows Runtime targets. - -Change-Id: I401ae81028a9dfdb9da37f51c60844467c476f76 ---- - .../libANGLE/renderer/d3d/d3d11/SwapChain11.cpp | 46 ---------------------- - .../d3d/d3d11/winrt/CoreWindowNativeWindow.cpp | 25 +----------- - .../d3d/d3d11/winrt/CoreWindowNativeWindow.h | 7 +--- - .../d3d/d3d11/winrt/InspectableNativeWindow.cpp | 20 ++++++++++ - .../d3d/d3d11/winrt/InspectableNativeWindow.h | 9 +++-- - .../d3d/d3d11/winrt/SwapChainPanelNativeWindow.cpp | 43 ++++++++++++-------- - .../d3d/d3d11/winrt/SwapChainPanelNativeWindow.h | 7 ++-- - 7 files changed, 58 insertions(+), 99 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 f80f24b..785a83c 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.cpp -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/SwapChain11.cpp -@@ -226,14 +226,8 @@ EGLint SwapChain11::resetOffscreenColorBuffer(int backbufferWidth, int backbuffe - const bool useSharedResource = !mNativeWindow.getNativeWindow() && mRenderer->getShareHandleSupport(); - - D3D11_TEXTURE2D_DESC offscreenTextureDesc = {0}; --#if defined(ANGLE_ENABLE_WINDOWS_STORE) && (WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP) -- const int textureLength = std::max(backbufferWidth, backbufferHeight); -- offscreenTextureDesc.Width = textureLength; -- offscreenTextureDesc.Height = textureLength; --#else - offscreenTextureDesc.Width = backbufferWidth; - offscreenTextureDesc.Height = backbufferHeight; --#endif - offscreenTextureDesc.Format = backbufferFormatInfo.texFormat; - offscreenTextureDesc.MipLevels = 1; - offscreenTextureDesc.ArraySize = 1; -@@ -346,14 +340,8 @@ EGLint SwapChain11::resetOffscreenDepthBuffer(int backbufferWidth, int backbuffe - d3d11::GetTextureFormatInfo(mDepthBufferFormat, mRenderer->getRenderer11DeviceCaps()); - - D3D11_TEXTURE2D_DESC depthStencilTextureDesc; --#if defined(ANGLE_ENABLE_WINDOWS_STORE) && (WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP) -- const int textureLength = std::max(backbufferWidth, backbufferHeight); -- depthStencilTextureDesc.Width = textureLength; -- depthStencilTextureDesc.Height = textureLength; --#else - depthStencilTextureDesc.Width = backbufferWidth; - depthStencilTextureDesc.Height = backbufferHeight; --#endif - depthStencilTextureDesc.Format = depthBufferFormatInfo.texFormat; - depthStencilTextureDesc.MipLevels = 1; - depthStencilTextureDesc.ArraySize = 1; -@@ -438,7 +426,6 @@ EGLint SwapChain11::resize(EGLint backbufferWidth, EGLint backbufferHeight) - return EGL_SUCCESS; - } - --#if !defined(ANGLE_ENABLE_WINDOWS_STORE) || (WINAPI_FAMILY != WINAPI_FAMILY_PHONE_APP) - // Can only call resize if we have already created our swap buffer and resources - ASSERT(mSwapChain && mBackBufferTexture && mBackBufferRTView && mBackBufferSRView); - -@@ -496,12 +483,6 @@ EGLint SwapChain11::resize(EGLint backbufferWidth, EGLint backbufferHeight) - mFirstSwap = true; - - return resetOffscreenBuffers(backbufferWidth, backbufferHeight); --#else -- // Do nothing on Windows Phone apart from updating the internal buffer/width height -- mWidth = backbufferWidth; -- mHeight = backbufferHeight; -- return EGL_SUCCESS; --#endif - } - - DXGI_FORMAT SwapChain11::getSwapChainNativeFormat() const -@@ -725,27 +706,6 @@ EGLint SwapChain11::copyOffscreenToBackbuffer(EGLint x, EGLint y, EGLint width, - - d3d11::PositionTexCoordVertex *vertices = static_cast(mappedResource.pData); - --#if defined(ANGLE_ENABLE_WINDOWS_STORE) && (WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP) -- // Create a quad in homogeneous coordinates -- float x1 = -1.0f; -- float y1 = -1.0f; -- float x2 = 1.0f; -- float y2 = 1.0f; -- -- const float dim = std::max(mWidth, mHeight); -- float u1 = 0; -- float v1 = 0; -- float u2 = float(width) / dim; -- float v2 = float(height) / dim; -- -- const NativeWindow::RotationFlags flags = mNativeWindow.rotationFlags(); -- const bool rotateL = flags == NativeWindow::RotateLeft; -- const bool rotateR = flags == NativeWindow::RotateRight; -- d3d11::SetPositionTexCoordVertex(&vertices[0], x1, y1, rotateL ? u2 : u1, rotateR ? v2 : v1); -- d3d11::SetPositionTexCoordVertex(&vertices[1], x1, y2, rotateR ? u2 : u1, rotateL ? v1 : v2); -- d3d11::SetPositionTexCoordVertex(&vertices[2], x2, y1, rotateR ? u1 : u2, rotateL ? v2 : v1); -- d3d11::SetPositionTexCoordVertex(&vertices[3], x2, y2, rotateL ? u1 : u2, rotateR ? v1 : v2); --#else - // Create a quad in homogeneous coordinates - float x1 = (x / float(mWidth)) * 2.0f - 1.0f; - float y1 = (y / float(mHeight)) * 2.0f - 1.0f; -@@ -771,7 +731,6 @@ EGLint SwapChain11::copyOffscreenToBackbuffer(EGLint x, EGLint y, EGLint width, - d3d11::SetPositionTexCoordVertex(&vertices[1], x1, y2, u1, v2); - d3d11::SetPositionTexCoordVertex(&vertices[2], x2, y1, u2, v1); - d3d11::SetPositionTexCoordVertex(&vertices[3], x2, y2, u2, v2); --#endif - - deviceContext->Unmap(mQuadVB, 0); - -@@ -801,13 +760,8 @@ EGLint SwapChain11::copyOffscreenToBackbuffer(EGLint x, EGLint y, EGLint width, - D3D11_VIEWPORT viewport; - viewport.TopLeftX = 0; - viewport.TopLeftY = 0; --#if defined(ANGLE_ENABLE_WINDOWS_STORE) && (WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP) -- viewport.Width = (rotateL || rotateR) ? height : width; -- viewport.Height = (rotateL || rotateR) ? width : height; --#else - viewport.Width = static_cast(mWidth); - viewport.Height = static_cast(mHeight); --#endif - viewport.MinDepth = 0.0f; - viewport.MaxDepth = 1.0f; - deviceContext->RSSetViewports(1, &viewport); -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 b074e8c..f401db6 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 -@@ -222,7 +222,7 @@ HRESULT CoreWindowNativeWindow::createSwapChain(ID3D11Device *device, - return result; - } - --inline HRESULT CoreWindowNativeWindow::scaleSwapChain(const SIZE &windowSize, const RECT &clientRect) -+inline HRESULT CoreWindowNativeWindow::scaleSwapChain(const Size &windowSize, const RECT &clientRect) - { - // We don't need to do any additional work to scale CoreWindow swapchains. - // Using DXGI_SCALING_STRETCH to create the swapchain above does all the necessary work. -@@ -240,27 +240,4 @@ HRESULT GetCoreWindowSizeInPixels(const ComPtr 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; --} -- --long 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/CoreWindowNativeWindow.h b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/winrt/CoreWindowNativeWindow.h -index 4de235a..fc1cd12 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__CGraphics__CD - - namespace rx - { --long ConvertDipsToPixels(float dips); -- - class CoreWindowNativeWindow : public InspectableNativeWindow, public std::enable_shared_from_this - { - public: -@@ -36,7 +34,7 @@ class CoreWindowNativeWindow : public InspectableNativeWindow, public std::enabl - DXGISwapChain **swapChain) override; - - protected: -- HRESULT scaleSwapChain(const SIZE &windowSize, const RECT &clientRect) override; -+ HRESULT scaleSwapChain(const Size &windowSize, const RECT &clientRect) override; - - bool registerForSizeChangeEvents(); - void unregisterForSizeChangeEvents(); -@@ -74,8 +72,7 @@ class CoreWindowSizeChangedHandler : - ABI::Windows::Foundation::Size windowSize; - if (SUCCEEDED(sizeChangedEventArgs->get_Size(&windowSize))) - { -- SIZE windowSizeInPixels = { ConvertDipsToPixels(windowSize.Width), ConvertDipsToPixels(windowSize.Height) }; -- host->setNewClientSize(windowSizeInPixels); -+ host->setNewClientSize(windowSize); - } - } - -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 c9b203e..aacfadd 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 -@@ -381,4 +381,24 @@ HRESULT GetOptionalSinglePropertyValue(const ComPtr 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; -+} -+ -+long 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 70e5fe7..cdbf40e 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 -@@ -26,6 +26,8 @@ using namespace ABI::Windows::Foundation::Collections; - - namespace rx - { -+long ConvertDipsToPixels(float dips); -+ - class InspectableNativeWindow - { - public: -@@ -65,7 +67,7 @@ class InspectableNativeWindow - } - - // setNewClientSize is used by the WinRT size change handler. It isn't used by the rest of ANGLE. -- void setNewClientSize(const SIZE &newWindowSize) -+ void setNewClientSize(const Size &newWindowSize) - { - // If the client doesn't support swapchain resizing then we should have already unregistered from size change handler - ASSERT(mSupportsSwapChainResize); -@@ -76,7 +78,7 @@ class InspectableNativeWindow - if (!mSwapChainSizeSpecified) - { - // We don't have to check if a swapchain scale was specified here; the default value is 1.0f which will have no effect. -- mNewClientRect = { 0, 0, static_cast(newWindowSize.cx * mSwapChainScale), static_cast(newWindowSize.cy * mSwapChainScale) }; -+ mNewClientRect = { 0, 0, ConvertDipsToPixels(newSize.Width), ConvertDipsToPixels(newSize.Height) }; - mClientRectChanged = true; - - // If a scale was specified, then now is the time to apply the scale matrix for the new swapchain size and window size -@@ -106,7 +109,7 @@ class InspectableNativeWindow - } - - protected: -- virtual HRESULT scaleSwapChain(const SIZE &windowSize, const RECT &clientRect) = 0; -+ virtual HRESULT scaleSwapChain(const Size &windowSize, const RECT &clientRect) = 0; - - bool mSupportsSwapChainResize; // Support for IDXGISwapChain::ResizeBuffers method - bool mSwapChainSizeSpecified; // If an EGLRenderSurfaceSizeProperty was specified -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 1ed3645..d3ed35b 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 -@@ -171,12 +171,15 @@ bool SwapChainPanelNativeWindow::initialize(EGLNativeWindowType window, IPropert - { - SIZE swapChainPanelSize; - result = GetSwapChainPanelSize(mSwapChainPanel, mSwapChainPanelDispatcher, -- &swapChainPanelSize); -+ &swapChainPanelSize, &mSwapChainScale); -+ if (mSwapChainScale != 1.0f) -+ mSwapChainScaleSpecified = true; - - if (SUCCEEDED(result)) - { - // Update the client rect to account for any swapchain scale factor -- mClientRect = { 0, 0, static_cast(swapChainPanelSize.cx * mSwapChainScale), static_cast(swapChainPanelSize.cy * mSwapChainScale) }; -+ mClientRect = { 0, 0, static_cast(ConvertDipsToPixels(swapChainPanelSize.cx * mSwapChainScale)), -+ static_cast(ConvertDipsToPixels(swapChainPanelSize.cy * mSwapChainScale)) }; - } - } - } -@@ -269,7 +272,6 @@ HRESULT SwapChainPanelNativeWindow::createSwapChain(ID3D11Device *device, - - ComPtr newSwapChain; - ComPtr swapChainPanelNative; -- SIZE currentPanelSize = {}; - - HRESULT result = factory->CreateSwapChainForComposition(device, &swapChainDesc, nullptr, newSwapChain.ReleaseAndGetAddressOf()); - -@@ -304,24 +306,24 @@ HRESULT SwapChainPanelNativeWindow::createSwapChain(ID3D11Device *device, - { - if (mSwapChainSizeSpecified || mSwapChainScaleSpecified) - { -- result = GetSwapChainPanelSize(mSwapChainPanel, mSwapChainPanelDispatcher, -- ¤tPanelSize); -- -- // Scale the swapchain to fit inside the contents of the panel. -- if (SUCCEEDED(result)) -- { -- result = scaleSwapChain(currentPanelSize, mClientRect); -- } -+ ComPtr uiElement; -+ result = mSwapChainPanel.As(&uiElement); -+ ASSERT(SUCCEEDED(result)); -+ -+ Size currentSize; -+ result = uiElement->get_RenderSize(¤tSize); -+ ASSERT(SUCCEEDED(result)); -+ result = scaleSwapChain(currentSize, mClientRect); - } - } - - return result; - } - --HRESULT SwapChainPanelNativeWindow::scaleSwapChain(const SIZE &windowSize, const RECT &clientRect) -+HRESULT SwapChainPanelNativeWindow::scaleSwapChain(const Size &windowSize, const RECT &clientRect) - { -- Size renderScale = {(float)windowSize.cx / (float)clientRect.right, -- (float)windowSize.cy / (float)clientRect.bottom}; -+ Size renderScale = {windowSize.Width / clientRect.right, -+ windowSize.Height / clientRect.bottom}; - // Setup a scale matrix for the swap chain - DXGI_MATRIX_3X2_F scaleMatrix = {}; - scaleMatrix._11 = renderScale.Width; -@@ -340,7 +342,7 @@ HRESULT SwapChainPanelNativeWindow::scaleSwapChain(const SIZE &windowSize, const - HRESULT GetSwapChainPanelSize( - const ComPtr &swapChainPanel, - const ComPtr &dispatcher, -- SIZE *windowSize) -+ SIZE *windowSize, float *scaleFactor) - { - ComPtr uiElement; - Size renderSize = {0, 0}; -@@ -357,9 +359,16 @@ HRESULT GetSwapChainPanelSize( - - if (SUCCEEDED(result)) - { -- *windowSize = { lround(renderSize.Width), lround(renderSize.Height) }; -+ long width = ConvertDipsToPixels(renderSize.Width); -+ long height = ConvertDipsToPixels(renderSize.Height); -+ *windowSize = { width, height }; -+ -+ if (scaleFactor) -+ { -+ *scaleFactor = renderSize.Width / width; -+ } - } - - return result; - } --} -\ No newline at end of file -+} -diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/winrt/SwapChainPanelNativeWindow.h b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/winrt/SwapChainPanelNativeWindow.h -index 9cc051d..09d87ad 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/winrt/SwapChainPanelNativeWindow.h -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/winrt/SwapChainPanelNativeWindow.h -@@ -28,7 +28,7 @@ class SwapChainPanelNativeWindow : public InspectableNativeWindow, public std::e - DXGISwapChain **swapChain) override; - - protected: -- HRESULT scaleSwapChain(const SIZE &windowSize, const RECT &clientRect) override; -+ HRESULT scaleSwapChain(const Size &windowSize, const RECT &clientRect) override; - - bool registerForSizeChangeEvents(); - void unregisterForSizeChangeEvents(); -@@ -72,8 +72,7 @@ class SwapChainPanelSizeChangedHandler : - HRESULT result = sizeChangedEventArgs->get_NewSize(&newSize); - if (SUCCEEDED(result)) - { -- SIZE windowSize = { lround(newSize.Width), lround(newSize.Height) }; -- host->setNewClientSize(windowSize); -+ host->setNewClientSize(newSize); - } - } - -@@ -87,6 +86,6 @@ class SwapChainPanelSizeChangedHandler : - HRESULT GetSwapChainPanelSize( - const ComPtr &swapChainPanel, - const ComPtr &dispatcher, -- SIZE *windowSize); -+ SIZE *windowSize, float *scaleFactor); - } - #endif // LIBANGLE_RENDERER_D3D_D3D11_WINRT_SWAPCHAINPANELNATIVEWINDOW_H_ --- -2.7.0.windows.1 - diff --git a/0008-ANGLE-winrt-Do-full-screen-update-if-the-the-window-.patch b/0008-ANGLE-winrt-Do-full-screen-update-if-the-the-window-.patch new file mode 100644 index 0000000..d9b51fc --- /dev/null +++ b/0008-ANGLE-winrt-Do-full-screen-update-if-the-the-window-.patch @@ -0,0 +1,40 @@ +From 5a58c6c7d97f003aa4a34ae130697dc81cc8fdf8 Mon Sep 17 00:00:00 2001 +From: Oliver Wolff +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(image->getWidth()); +- const int height = destBox ? destBox->height : static_cast(image->getHeight()); +- const int depth = destBox ? destBox->depth : static_cast(image->getDepth()); ++ const int imageWidth = static_cast(image->getWidth()); ++ const int width = destBox ? destBox->width : imageWidth; ++ const int imageHeight = static_cast(image->getHeight()); ++ const int height = destBox ? destBox->height : imageHeight; ++ const int imageDepth = static_cast(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/0009-ANGLE-glGetUniform-v-functions-to-work-properly.patch b/0009-ANGLE-glGetUniform-v-functions-to-work-properly.patch deleted file mode 100644 index b53e110..0000000 --- a/0009-ANGLE-glGetUniform-v-functions-to-work-properly.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 2d4a7aec7957e507cbf0b4b8dcf68abb26667e33 Mon Sep 17 00:00:00 2001 -From: Miikka Heikkinen -Date: Mon, 9 May 2016 13:13:20 +0300 -Subject: [PATCH] Fix ANGLE glGetUniform*v functions to work properly array - uniforms - -glGetUniform*v functions are supposed to return just a single -array element, so returning the whole array is always incorrect. - -Task-number: QTBUG-53072 -Change-Id: I22f05d420082d4d9de06d975b3d0f5e64d3e0c41 ---- - src/3rdparty/angle/src/libANGLE/Program.cpp | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/3rdparty/angle/src/libANGLE/Program.cpp b/src/3rdparty/angle/src/libANGLE/Program.cpp -index 748ceae..69497c4 100644 ---- a/src/3rdparty/angle/src/libANGLE/Program.cpp -+++ b/src/3rdparty/angle/src/libANGLE/Program.cpp -@@ -2510,7 +2510,7 @@ void Program::getUniformInternal(GLint location, DestT *dataOut) const - return; - } - -- int components = VariableComponentCount(uniform.type) * uniform.elementCount(); -+ int components = VariableComponentCount(uniform.type); - - switch (componentType) - { --- -2.6.3.windows.1 - diff --git a/0009-Revert-Fix-scanForWantedComponents-not-ignoring-attr.patch b/0009-Revert-Fix-scanForWantedComponents-not-ignoring-attr.patch new file mode 100644 index 0000000..f57f528 --- /dev/null +++ b/0009-Revert-Fix-scanForWantedComponents-not-ignoring-attr.patch @@ -0,0 +1,67 @@ +From 2fb4d8087c4f324b7a3f2e21554374de7060e996 Mon Sep 17 00:00:00 2001 +From: Andre de la Rocha +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/0010-ANGLE-Disable-multisampling-to-avoid-crash-in-Qt-app.patch b/0010-ANGLE-Disable-multisampling-to-avoid-crash-in-Qt-app.patch new file mode 100644 index 0000000..2fb65ce --- /dev/null +++ b/0010-ANGLE-Disable-multisampling-to-avoid-crash-in-Qt-app.patch @@ -0,0 +1,41 @@ +From d239cceef88fbbe4cf7479025f12934d9c3c83a5 Mon Sep 17 00:00:00 2001 +From: Andre de la Rocha +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/0010-ANGLE-fixed-usage-of-shared-handles-for-WinRT-WinPho.patch b/0010-ANGLE-fixed-usage-of-shared-handles-for-WinRT-WinPho.patch deleted file mode 100644 index 8f17018..0000000 --- a/0010-ANGLE-fixed-usage-of-shared-handles-for-WinRT-WinPho.patch +++ /dev/null @@ -1,57 +0,0 @@ -From 5cacddc702624d64a4917a7a704dbbb92aeba53c Mon Sep 17 00:00:00 2001 -From: Oliver Wolff -Date: Thu, 19 May 2016 10:55:46 +0200 -Subject: [PATCH] ANGLE: fixed usage of shared handles for WinRT/WinPhone - applications - -Both checks are not relevant in Qt's context and were skipped before but -they sneaked back in with the latest ANGLE update. - -Change-Id: Ic44de5468a3254afd76ef4804d97d245676daeb1 ---- - src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp | 3 +++ - src/3rdparty/angle/src/libANGLE/validationEGL.cpp | 3 +++ - 2 files changed, 6 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 62badcc..0173311 100644 ---- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp -+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp -@@ -2618,12 +2618,15 @@ 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) - { - mSupportsShareHandles = false; - return false; - } -+#endif - - // Find out which type of D3D11 device the Renderer11 is using - d3d11::ANGLED3D11DeviceType deviceType = getDeviceType(); -diff --git a/src/3rdparty/angle/src/libANGLE/validationEGL.cpp b/src/3rdparty/angle/src/libANGLE/validationEGL.cpp -index 972f6a7..903f51b 100644 ---- a/src/3rdparty/angle/src/libANGLE/validationEGL.cpp -+++ b/src/3rdparty/angle/src/libANGLE/validationEGL.cpp -@@ -642,11 +642,14 @@ Error ValidateCreatePbufferFromClientBuffer(Display *display, EGLenum buftype, E - return Error(EGL_BAD_ATTRIBUTE); - } - -+// On Windows Store, we know the originating texture came from D3D11, so bypass this check -+#if !defined(ANGLE_ENABLE_WINDOWS_STORE) - const Caps &caps = display->getCaps(); - if (textureFormat != EGL_NO_TEXTURE && !caps.textureNPOT && (!gl::isPow2(width) || !gl::isPow2(height))) - { - return Error(EGL_BAD_MATCH); - } -+#endif - } - - return Error(EGL_SUCCESS); --- -2.7.0.windows.1 - diff --git a/0011-ANGLE-Fix-build-for-ARM64.patch b/0011-ANGLE-Fix-build-for-ARM64.patch new file mode 100644 index 0000000..3a43894 --- /dev/null +++ b/0011-ANGLE-Fix-build-for-ARM64.patch @@ -0,0 +1,63 @@ +From 416fb93dae5009bb51da9f6720a95918a2c79e78 Mon Sep 17 00:00:00 2001 +From: Thomas Miller +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(__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 + #define ANGLE_USE_SSE + #elif defined(__GNUC__) && (defined(__x86_64__) || defined(__i386__)) && !defined(__MINGW32__) diff --git a/0012-ANGLE-Dynamically-load-D3D-compiler-from-a-list.patch b/0012-ANGLE-Dynamically-load-D3D-compiler-from-a-list.patch new file mode 100644 index 0000000..7009dec --- /dev/null +++ b/0012-ANGLE-Dynamically-load-D3D-compiler-from-a-list.patch @@ -0,0 +1,59 @@ +From dff9676c60c51fa7af0749e1cb54305f112183e3 Mon Sep 17 00:00:00 2001 +From: Oliver Wolff +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/0012-ANGLE-Fix-initialization-of-zero-sized-window.patch b/0012-ANGLE-Fix-initialization-of-zero-sized-window.patch deleted file mode 100644 index fe65af7..0000000 --- a/0012-ANGLE-Fix-initialization-of-zero-sized-window.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 79d2bac44cb2a0793c00886f0499422ab6ffa09c Mon Sep 17 00:00:00 2001 -From: Maurice Kalinowski -Date: Fri, 12 Aug 2016 08:11:16 +0200 -Subject: [PATCH] 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 d3ed35b..548b460 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 -@@ -322,8 +322,8 @@ HRESULT SwapChainPanelNativeWindow::createSwapChain(ID3D11Device *device, - - HRESULT SwapChainPanelNativeWindow::scaleSwapChain(const Size &windowSize, const RECT &clientRect) - { -- Size renderScale = {windowSize.Width / clientRect.right, -- windowSize.Height / 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.9.2.windows.1 - diff --git a/0013-ANGLE-clean-up-displays-on-dll-unload.patch b/0013-ANGLE-clean-up-displays-on-dll-unload.patch new file mode 100644 index 0000000..fce3fd7 --- /dev/null +++ b/0013-ANGLE-clean-up-displays-on-dll-unload.patch @@ -0,0 +1,78 @@ +From d8ca4f6d0d8fffd8319f340685e03751049678ae Mon Sep 17 00:00:00 2001 +From: Oliver Wolff +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(egl::DeallocateCurrentThread()); + + case DLL_PROCESS_DETACH: ++ egl::Display::CleanupDisplays(); + return static_cast(egl::TerminateProcess()); + } + +-- +2.20.1.windows.1 + diff --git a/0014-ANGLE-Backport-fix-for-compilation-on-mingw-64bit-wi.patch b/0014-ANGLE-Backport-fix-for-compilation-on-mingw-64bit-wi.patch new file mode 100644 index 0000000..a32f25d --- /dev/null +++ b/0014-ANGLE-Backport-fix-for-compilation-on-mingw-64bit-wi.patch @@ -0,0 +1,35 @@ +From e7ff4aa4ef2221aa02d39bdead7f35008016994e Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Martin=20Storsj=C3=B6?= +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 + + /* 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/0015-ANGLE-Invalidate-client-window-area-when-resizing-sw.patch b/0015-ANGLE-Invalidate-client-window-area-when-resizing-sw.patch new file mode 100644 index 0000000..9380437 --- /dev/null +++ b/0015-ANGLE-Invalidate-client-window-area-when-resizing-sw.patch @@ -0,0 +1,37 @@ +From 7d300c6e7d05f4e31c966f1298d11da3eae9d679 Mon Sep 17 00:00:00 2001 +From: Val Doroshchuk +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/0016-ANGLE-Fix-severe-performance-regression.patch b/0016-ANGLE-Fix-severe-performance-regression.patch new file mode 100644 index 0000000..e9cda13 --- /dev/null +++ b/0016-ANGLE-Fix-severe-performance-regression.patch @@ -0,0 +1,37 @@ +From b215999d63d6e6b087e53e24a47b8b60520ec9e4 Mon Sep 17 00:00:00 2001 +From: Oliver Wolff +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/0017-ANGLE-Fix-resizing-of-windows-Take-2.patch b/0017-ANGLE-Fix-resizing-of-windows-Take-2.patch new file mode 100644 index 0000000..abab74b --- /dev/null +++ b/0017-ANGLE-Fix-resizing-of-windows-Take-2.patch @@ -0,0 +1,27 @@ +From 029d42d1049dcde7950c11fb9adf07c07a8c4c02 Mon Sep 17 00:00:00 2001 +From: Oliver Wolff +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/0018-ANGLE-d3d11-Do-not-register-windows-message-hooks-fo.patch b/0018-ANGLE-d3d11-Do-not-register-windows-message-hooks-fo.patch new file mode 100644 index 0000000..03529c6 --- /dev/null +++ b/0018-ANGLE-d3d11-Do-not-register-windows-message-hooks-fo.patch @@ -0,0 +1,45 @@ +From 3d23de2ad72968d0bf43dac4a9a0f237cc9e03e2 Mon Sep 17 00:00:00 2001 +From: Oliver Wolff +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(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 + diff --git a/angle_include-import-library-and-use-def-file.patch b/angle_include-import-library-and-use-def-file.patch index 0d77c3f..8eaf7c7 100644 --- a/angle_include-import-library-and-use-def-file.patch +++ b/angle_include-import-library-and-use-def-file.patch @@ -1,9 +1,9 @@ -diff -rupN angle-8613f49/src/libEGL.gypi angle-8613f49-new/src/libEGL.gypi ---- angle-8613f49/src/libEGL.gypi 2016-02-11 20:53:41.000000000 +0100 -+++ angle-8613f49-new/src/libEGL.gypi 2017-02-02 21:22:27.100335174 +0100 -@@ -38,7 +38,16 @@ - { - 'msvs_requires_importlibrary' : 'true', +diff -rupN angle-57ea533/src/libEGL.gypi angle-57ea533-new/src/libEGL.gypi +--- angle-57ea533/src/libEGL.gypi 2017-11-29 00:33:41.000000000 +0100 ++++ angle-57ea533-new/src/libEGL.gypi 2021-01-15 13:23:10.827372223 +0100 +@@ -51,7 +51,16 @@ + 'DYLIB_INSTALL_NAME_BASE': '@rpath', + }, }], + ['TARGET=="win32"', { + 'ldflags': [ '-Wl,--out-implib,libEGL.dll.a', '../src/libEGL/libEGL_mingw32.def' ], @@ -13,17 +13,17 @@ diff -rupN angle-8613f49/src/libEGL.gypi angle-8613f49-new/src/libEGL.gypi + }], ], + 'libraries': [ -+ '-ldxguid -ld3d9 -lgdi32' ++ '-ld3d9 -lgdi32 -ldxguid' + ] }, - ], - } -diff -rupN angle-8613f49/src/libGLESv2.gypi angle-8613f49-new/src/libGLESv2.gypi ---- angle-8613f49/src/libGLESv2.gypi 2016-02-11 20:53:41.000000000 +0100 -+++ angle-8613f49-new/src/libGLESv2.gypi 2017-02-02 21:15:08.706518770 +0100 -@@ -823,7 +823,16 @@ + + { +diff -rupN angle-57ea533/src/libGLESv2.gypi angle-57ea533-new/src/libGLESv2.gypi +--- angle-57ea533/src/libGLESv2.gypi 2021-01-15 13:23:57.849302175 +0100 ++++ angle-57ea533-new/src/libGLESv2.gypi 2021-01-15 22:14:17.508666828 +0100 +@@ -1266,7 +1266,16 @@ { - 'msvs_enable_winphone' : '1', + 'msvs_requires_importlibrary' : 'true', }], + ['TARGET=="win32"', { + 'ldflags': [ '-Wl,--out-implib,libGLESv2.dll.a', '../src/libGLESv2/libGLESv2_mingw32.def' ], @@ -33,8 +33,8 @@ diff -rupN angle-8613f49/src/libGLESv2.gypi angle-8613f49-new/src/libGLESv2.gypi + }], ], + 'libraries': [ -+ '-ldxguid -ld3d9 -lgdi32' ++ '-ld3d9 -lgdi32 -lsetupapi' + ] }, - ], - } + + { diff --git a/angle_novulkan.patch b/angle_novulkan.patch new file mode 100644 index 0000000..fc0146f --- /dev/null +++ b/angle_novulkan.patch @@ -0,0 +1,22 @@ +diff -rupN --no-dereference angle-57ea533/src/angle.gyp angle-57ea533-new/src/angle.gyp +--- angle-57ea533/src/angle.gyp 2021-01-15 23:27:20.863586363 +0100 ++++ angle-57ea533-new/src/angle.gyp 2021-01-15 23:27:20.865586363 +0100 +@@ -32,7 +32,7 @@ + 'angle_enable_d3d9%': 1, + 'angle_enable_d3d11%': 1, + 'angle_enable_hlsl%': 1, +- 'angle_enable_vulkan%': 1, ++ 'angle_enable_vulkan%': 0, + }], + ['OS=="linux" and use_x11==1 and chromeos==0', + { +@@ -57,8 +57,7 @@ + [ + 'compiler.gypi', + 'libGLESv2.gypi', +- 'libEGL.gypi', +- 'vulkan_support/vulkan.gypi', ++ 'libEGL.gypi' + ], + + 'targets': diff --git a/angle_ptrdiff.patch b/angle_ptrdiff.patch index b2b8386..042c09d 100644 --- a/angle_ptrdiff.patch +++ b/angle_ptrdiff.patch @@ -1,7 +1,7 @@ -diff -rupN angle-8613f49/include/GLES2/gl2.h angle-8613f49-new/include/GLES2/gl2.h ---- angle-8613f49/include/GLES2/gl2.h 2016-02-11 20:53:41.000000000 +0100 -+++ angle-8613f49-new/include/GLES2/gl2.h 2017-01-16 23:20:11.169771616 +0100 -@@ -57,6 +57,7 @@ extern "C" { +diff -rupN --no-dereference angle-57ea533/include/GLES2/gl2.h angle-57ea533-new/include/GLES2/gl2.h +--- angle-57ea533/include/GLES2/gl2.h 2017-11-29 00:33:41.000000000 +0100 ++++ angle-57ea533-new/include/GLES2/gl2.h 2021-01-15 23:27:20.697586354 +0100 +@@ -59,6 +59,7 @@ extern "C" { #ifndef GL_ES_VERSION_2_0 #define GL_ES_VERSION_2_0 1 #include @@ -9,7 +9,7 @@ diff -rupN angle-8613f49/include/GLES2/gl2.h angle-8613f49-new/include/GLES2/gl2 typedef khronos_int8_t GLbyte; typedef khronos_float_t GLclampf; typedef khronos_int32_t GLfixed; -@@ -70,8 +71,8 @@ typedef unsigned int GLenum; +@@ -72,8 +73,8 @@ typedef unsigned int GLenum; typedef unsigned int GLuint; typedef char GLchar; typedef khronos_float_t GLfloat; @@ -20,9 +20,9 @@ diff -rupN angle-8613f49/include/GLES2/gl2.h angle-8613f49-new/include/GLES2/gl2 typedef unsigned int GLbitfield; typedef int GLint; typedef unsigned char GLboolean; -diff -rupN angle-8613f49/include/GLES3/gl31.h angle-8613f49-new/include/GLES3/gl31.h ---- angle-8613f49/include/GLES3/gl31.h 2016-02-11 20:53:41.000000000 +0100 -+++ angle-8613f49-new/include/GLES3/gl31.h 2017-01-16 23:20:05.972833465 +0100 +diff -rupN --no-dereference angle-57ea533/include/GLES3/gl31.h angle-57ea533-new/include/GLES3/gl31.h +--- angle-57ea533/include/GLES3/gl31.h 2017-11-29 00:33:41.000000000 +0100 ++++ angle-57ea533-new/include/GLES3/gl31.h 2021-01-15 23:27:20.697586354 +0100 @@ -57,6 +57,7 @@ extern "C" { #ifndef GL_ES_VERSION_2_0 #define GL_ES_VERSION_2_0 1 @@ -42,9 +42,9 @@ diff -rupN angle-8613f49/include/GLES3/gl31.h angle-8613f49-new/include/GLES3/gl typedef unsigned int GLbitfield; typedef int GLint; typedef unsigned char GLboolean; -diff -rupN angle-8613f49/include/GLES3/gl32.h angle-8613f49-new/include/GLES3/gl32.h ---- angle-8613f49/include/GLES3/gl32.h 2016-02-11 20:53:41.000000000 +0100 -+++ angle-8613f49-new/include/GLES3/gl32.h 2017-01-16 23:18:52.732710041 +0100 +diff -rupN --no-dereference angle-57ea533/include/GLES3/gl32.h angle-57ea533-new/include/GLES3/gl32.h +--- angle-57ea533/include/GLES3/gl32.h 2017-11-29 00:33:41.000000000 +0100 ++++ angle-57ea533-new/include/GLES3/gl32.h 2021-01-15 23:27:20.698586354 +0100 @@ -57,6 +57,7 @@ extern "C" { #ifndef GL_ES_VERSION_2_0 #define GL_ES_VERSION_2_0 1 @@ -64,9 +64,9 @@ diff -rupN angle-8613f49/include/GLES3/gl32.h angle-8613f49-new/include/GLES3/gl typedef unsigned int GLbitfield; typedef int GLint; typedef unsigned char GLboolean; -diff -rupN angle-8613f49/include/GLES3/gl3.h angle-8613f49-new/include/GLES3/gl3.h ---- angle-8613f49/include/GLES3/gl3.h 2016-02-11 20:53:41.000000000 +0100 -+++ angle-8613f49-new/include/GLES3/gl3.h 2017-01-16 23:19:47.341055571 +0100 +diff -rupN --no-dereference angle-57ea533/include/GLES3/gl3.h angle-57ea533-new/include/GLES3/gl3.h +--- angle-57ea533/include/GLES3/gl3.h 2017-11-29 00:33:41.000000000 +0100 ++++ angle-57ea533-new/include/GLES3/gl3.h 2021-01-15 23:27:20.698586354 +0100 @@ -57,6 +57,7 @@ extern "C" { #ifndef GL_ES_VERSION_2_0 #define GL_ES_VERSION_2_0 1 @@ -86,9 +86,9 @@ diff -rupN angle-8613f49/include/GLES3/gl3.h angle-8613f49-new/include/GLES3/gl3 typedef unsigned int GLbitfield; typedef int GLint; typedef unsigned char GLboolean; -diff -rupN angle-8613f49/src/libANGLE/renderer/gl/functionsgl_typedefs.h angle-8613f49-new/src/libANGLE/renderer/gl/functionsgl_typedefs.h ---- angle-8613f49/src/libANGLE/renderer/gl/functionsgl_typedefs.h 2016-02-11 20:53:41.000000000 +0100 -+++ angle-8613f49-new/src/libANGLE/renderer/gl/functionsgl_typedefs.h 2017-01-17 11:18:47.274654875 +0100 +diff -rupN --no-dereference angle-57ea533/src/libANGLE/renderer/gl/functionsgl_typedefs.h angle-57ea533-new/src/libANGLE/renderer/gl/functionsgl_typedefs.h +--- angle-57ea533/src/libANGLE/renderer/gl/functionsgl_typedefs.h 2017-11-29 00:33:41.000000000 +0100 ++++ angle-57ea533-new/src/libANGLE/renderer/gl/functionsgl_typedefs.h 2021-01-15 23:27:20.698586354 +0100 @@ -13,6 +13,7 @@ #include diff --git a/angle_python2.patch b/angle_python2.patch deleted file mode 100644 index c53efd9..0000000 --- a/angle_python2.patch +++ /dev/null @@ -1,66 +0,0 @@ -diff -rupN angle-8613f49/DEPS angle-8613f49-new/DEPS ---- angle-8613f49/DEPS 2016-02-11 20:53:41.000000000 +0100 -+++ angle-8613f49-new/DEPS 2018-05-28 10:29:52.356927852 +0200 -@@ -103,6 +103,6 @@ hooks = [ - { - # A change to a .gyp, .gypi, or to GYP itself should run the generator. - "pattern": ".", -- "action": ["python", "build/gyp_angle"], -+ "action": ["python2", "build/gyp_angle"], - }, - ] -diff -rupN angle-8613f49/src/angle.gyp angle-8613f49-new/src/angle.gyp ---- angle-8613f49/src/angle.gyp 2016-02-11 20:53:41.000000000 +0100 -+++ angle-8613f49-new/src/angle.gyp 2018-05-28 10:30:11.559926790 +0200 -@@ -12,7 +12,7 @@ - 'angle_id_script': '<(angle_gen_path)/<(angle_id_script_base)', - 'angle_id_header_base': 'commit.h', - 'angle_id_header': '<(angle_gen_path)/id/<(angle_id_header_base)', -- 'angle_use_commit_id%': '= 95 -BuildRequires: mingw64-filesystem >= 95 BuildRequires: mingw32-gcc-c++ -BuildRequires: mingw64-gcc-c++ -BuildRequires: gyp -BuildRequires: libtool -BuildRequires: python27 +BuildRequires: mingw64-filesystem >= 95 +BuildRequires: mingw64-gcc-c++ # Patches taken from Qt5 # https://github.com/qt/qtbase/tree/v%%{qtrefver}/src/angle/patches -Patch0: 0001-ANGLE-Improve-Windows-Phone-Support.patch -Patch1: 0002-ANGLE-Dynamically-load-D3D-compiler-from-a-list.patch -Patch2: 0002-ANGLE-Fix-compilation-with-MinGW.patch -Patch3: 0003-ANGLE-Add-support-for-querying-platform-device.patch -Patch4: 0004-ANGLE-Allow-Windows-Phone-to-communicate-swap-region.patch -Patch5: 0005-ANGLE-Fix-compilation-without-d3d11.patch -Patch6: 0006-ANGLE-Fix-Windows-Store-D3D-Trim-and-Level-9-requirements.patch -Patch7: 0007-ANGLE-D3D11-Suppress-keyboard-handling-of-DXGI.patch -Patch8: 0008-ANGLE-Use-pixel-sizes-in-the-XAML-swap-chain.patch -Patch9: 0009-ANGLE-glGetUniform-v-functions-to-work-properly.patch -Patch10: 0010-ANGLE-fixed-usage-of-shared-handles-for-WinRT-WinPho.patch -Patch11: 0012-ANGLE-Fix-initialization-of-zero-sized-window.patch - -# Make sure an import library is created and the .def file is used when linking -Patch100: angle_include-import-library-and-use-def-file.patch +Patch0: 0001-ANGLE-Use-pixel-sizes-in-the-XAML-swap-chain.patch +Patch1: 0001-Fix-build-for-MinGW.patch +Patch2: 0002-ANGLE-Add-support-for-querying-platform-device.patch +Patch3: 0002-ANGLE-Fix-build-for-ARM.patch +Patch4: 0003-ANGLE-Fix-Windows-Store-D3D-Trim-and-Level-9-require.patch +Patch5: 0004-ANGLE-fix-usage-of-shared-handles-for-WinRT-applicat.patch +Patch6: 0005-ANGLE-Fix-initialization-of-zero-sized-window.patch +Patch7: 0006-ANGLE-Fix-flickering-on-resize-when-D3D9-is-used.patch +Patch8: 0007-ANGLE-Fix-resizing-of-windows.patch +Patch9: 0008-ANGLE-winrt-Do-full-screen-update-if-the-the-window-.patch +Patch10: 0009-Revert-Fix-scanForWantedComponents-not-ignoring-attr.patch +Patch11: 0010-ANGLE-Disable-multisampling-to-avoid-crash-in-Qt-app.patch +Patch12: 0011-ANGLE-Fix-build-for-ARM64.patch +Patch13: 0012-ANGLE-Dynamically-load-D3D-compiler-from-a-list.patch +Patch14: 0013-ANGLE-clean-up-displays-on-dll-unload.patch +Patch15: 0014-ANGLE-Backport-fix-for-compilation-on-mingw-64bit-wi.patch +Patch16: 0015-ANGLE-Invalidate-client-window-area-when-resizing-sw.patch +Patch17: 0016-ANGLE-Fix-severe-performance-regression.patch +Patch18: 0017-ANGLE-Fix-resizing-of-windows-Take-2.patch +Patch19: 0018-ANGLE-d3d11-Do-not-register-windows-message-hooks-fo.patch + + +# Make sure an import library is created and the .def file is used when linking, add missing link libraries +Patch100: angle_libs.patch # Fix GLsizeiptr and GLintptr typedefs to match those defined in qopenglext.h Patch101: angle_ptrdiff.patch # Export additional symbols required to build Qt WebKit which uses the shader interface -Patch102: angle_export-shader-symbols.patch +# Patch102: angle_export-shader-symbols.patch # Ensure versioned python is invoked -Patch103: angle_python2.patch +Patch103: angle_python3.patch + +# Don't build vulkan support +Patch104: angle_novulkan.patch %description @@ -182,11 +193,20 @@ cp -a %{SOURCE4} src/libEGL/libEGL_mingw64.def %patch9 -p4 %patch10 -p4 %patch11 -p4 +%patch12 -p4 +%patch13 -p4 +%patch14 -p4 +%patch15 -p4 +%patch16 -p4 +%patch17 -p4 +%patch18 -p4 +%patch19 -p4 %patch100 -p1 %patch101 -p1 -%patch102 -p1 +#patch102 -p1 %patch103 -p1 +%patch104 -p1 # Executing .bat scripts on Linux is a no-go so make this a no-op echo "" > src/copy_compiler_dll.bat @@ -201,45 +221,25 @@ chmod +x src/copy_compiler_dll.bat # For MinGW we don't want this, so unset this environment variable unset RPM_OPT_FLAGS +COMMON_CXXFLAGS="-msse2 -DUNICODE -D_UNICODE -D_USE_MATH_DEFINES \ + -I../include -I../sysinclude -I../src -I../src/common/third_party/base" + for target in win32 win64 ; do mkdir build_$target pushd build_$target if [ "$target" = "win32" ] ; then export CXX=%{mingw32_cxx} export AR=%{mingw32_ar} + export CXXFLAGS="%{mingw32_cflags} $COMMON_CXXFLAGS" + export LDFLAGS="%{mingw32_ldflags}" else export CXX=%{mingw64_cxx} export AR=%{mingw64_ar} + export CXXFLAGS="%{mingw64_cflags} $COMMON_CXXFLAGS" + export LDFLAGS="%{mingw64_ldflags}" fi - gyp -D OS=win -D TARGET=$target -D MSVS_VERSION="" --depth . -I ../build/common.gypi ../src/angle.gyp - - # Parallel build is broken (ar complains .o is not an object because it hasn't finished compiling yet) - make V=1 CXXFLAGS="-std=c++11 -msse2 -DUNICODE -D_UNICODE -g -I../include -I../src" - - # Also build static libraries (which are needed by the static Qt build) - # Look in build.log to see what is packed into the respective shared libaries - ${AR} rcs libGLESv2.a \ - out/Debug/obj.target/src/libGLESv2/entry_points_egl.o \ - out/Debug/obj.target/src/libGLESv2/entry_points_egl_ext.o \ - out/Debug/obj.target/src/libGLESv2/entry_points_gles_2_0.o \ - out/Debug/obj.target/src/libGLESv2/entry_points_gles_2_0_ext.o \ - out/Debug/obj.target/src/libGLESv2/entry_points_gles_3_0.o \ - out/Debug/obj.target/src/libGLESv2/global_state.o \ - out/Debug/obj.target/src/libGLESv2/libGLESv2.o \ - out/Debug/src/libANGLE.a \ - out/Debug/src/libangle_common.a \ - out/Debug/src/libtranslator_static.a \ - out/Debug/src/libtranslator_lib.a \ - out/Debug/src/libpreprocessor.a - - ${AR} rcs libEGL.a \ - out/Debug/obj.target/src/libEGL/libEGL.o \ - out/Debug/src/libANGLE.a \ - out/Debug/src/libtranslator_static.a \ - out/Debug/src/libtranslator_lib.a \ - out/Debug/src/libpreprocessor.a \ - out/Debug/src/libangle_common.a + V=1 gyp --build=Release -D use_ozone=0 -D use_x11=0 -D OS=win -D TARGET=$target -D MSVS_VERSION='' --depth . -I ../gyp/common.gypi ../src/angle.gyp popd done @@ -247,21 +247,24 @@ done %install # The gyp build system doesn't know how to install files # and gives libraries invalid filenames.. *sigh* -install -Dpm 0755 build_win32/out/Debug/src/libGLESv2.so %{buildroot}%{mingw32_bindir}/libGLESv2.dll -install -Dpm 0755 build_win64/out/Debug/src/libGLESv2.so %{buildroot}%{mingw64_bindir}/libGLESv2.dll +install -Dpm 0755 build_win32/out/Release/src/libGLESv2.so %{buildroot}%{mingw32_bindir}/libGLESv2.dll +install -Dpm 0755 build_win64/out/Release/src/libGLESv2.so %{buildroot}%{mingw64_bindir}/libGLESv2.dll -install -Dpm 0755 build_win32/out/Debug/src/libEGL.so %{buildroot}%{mingw32_bindir}/libEGL.dll -install -Dpm 0755 build_win64/out/Debug/src/libEGL.so %{buildroot}%{mingw64_bindir}/libEGL.dll +install -Dpm 0755 build_win32/out/Release/src/libEGL.so %{buildroot}%{mingw32_bindir}/libEGL.dll +install -Dpm 0755 build_win64/out/Release/src/libEGL.so %{buildroot}%{mingw64_bindir}/libEGL.dll install -Dpm 0644 build_win32/libGLESv2.dll.a %{buildroot}%{mingw32_libdir}/libGLESv2.dll.a -install -Dpm 0644 build_win32/libGLESv2.a %{buildroot}%{mingw32_libdir}/libGLESv2.a install -Dpm 0644 build_win64/libGLESv2.dll.a %{buildroot}%{mingw64_libdir}/libGLESv2.dll.a -install -Dpm 0644 build_win64/libGLESv2.a %{buildroot}%{mingw64_libdir}/libGLESv2.a install -Dpm 0644 build_win32/libEGL.dll.a %{buildroot}%{mingw32_libdir}/libEGL.dll.a -install -Dpm 0644 build_win32/libEGL.a %{buildroot}%{mingw32_libdir}/libEGL.a install -Dpm 0644 build_win64/libEGL.dll.a %{buildroot}%{mingw64_libdir}/libEGL.dll.a -install -Dpm 0644 build_win64/libEGL.a %{buildroot}%{mingw64_libdir}/libEGL.a + +install -Dpm 0644 build_win32/out/Release/src/libGLESv2_static.a %{buildroot}%{mingw32_libdir}/libGLESv2.a +install -Dpm 0644 build_win64/out/Release/src/libGLESv2_static.a %{buildroot}%{mingw64_libdir}/libGLESv2.a + +install -Dpm 0644 build_win32/out/Release/src/libEGL_static.a %{buildroot}%{mingw32_libdir}/libEGL.a +install -Dpm 0644 build_win64/out/Release/src/libEGL_static.a %{buildroot}%{mingw64_libdir}/libEGL.a + mkdir -p %{buildroot}%{mingw32_includedir} cp -a include/* %{buildroot}%{mingw32_includedir}/ @@ -314,6 +317,10 @@ rmdir %{buildroot}%{mingw64_includedir}/KHR/ %changelog +* Fri Jan 15 2021 Sandro Mani - 0.0.29-git57ea533 +- Update to ANGLE 3280 +- Switch to python3 + * Tue Jul 28 2020 Fedora Release Engineering - 0-0.28.git8613f49 - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild diff --git a/sources b/sources index a9c3876..da95de5 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (angle-8613f49.tar.gz) = e7854d81321907989e29194ae54125e111267410544943d2af0bafe54c224e6e227d8ecb2408f2cbc76a04240129d4241618c91e3adae5b0f0d85ab7c78385f2 +SHA512 (angle-57ea533.tar.gz) = 40716203b98700071755c14e19e2674abba3136569c4a116820f8a80f267af0dfadfa1d3065b8b60cae6f9140f17b9e5f4350b5e097f9abfa7178fa6b427080a