diff --git a/src/plugins/platforms/winrt/qwinrteglcontext.cpp b/src/plugins/platforms/winrt/qwinrteglcontext.cpp
index 5daeee69c088a7f2ad15f19c94bedb0c7d9d8fa7..64aedb1b33c0c5e43f3bdf9c5f98bb6eca9a9a6a 100644
--- a/src/plugins/platforms/winrt/qwinrteglcontext.cpp
+++ b/src/plugins/platforms/winrt/qwinrteglcontext.cpp
@@ -35,8 +35,8 @@
 
 QT_BEGIN_NAMESPACE
 
-QWinRTEGLContext::QWinRTEGLContext(const QSurfaceFormat &format, QPlatformOpenGLContext *share, EGLDisplay display, EGLSurface surface)
-    : QEGLPlatformContext(format, share, display), m_eglSurface(surface)
+QWinRTEGLContext::QWinRTEGLContext(const QSurfaceFormat &format, QPlatformOpenGLContext *share, EGLDisplay display, EGLSurface surface, EGLConfig config)
+    : QEGLPlatformContext(format, share, display, &config), m_eglSurface(surface)
 {
 }
 
diff --git a/src/plugins/platforms/winrt/qwinrteglcontext.h b/src/plugins/platforms/winrt/qwinrteglcontext.h
index fb1199a79eabe38088eeab4c0de649544f2ebeb9..142e204fc84d5892f41571a41639b612f3ba38f8 100644
--- a/src/plugins/platforms/winrt/qwinrteglcontext.h
+++ b/src/plugins/platforms/winrt/qwinrteglcontext.h
@@ -41,7 +41,7 @@ QT_BEGIN_NAMESPACE
 class QWinRTEGLContext : public QEGLPlatformContext
 {
 public:
-    explicit QWinRTEGLContext(const QSurfaceFormat &format, QPlatformOpenGLContext *share, EGLDisplay display, EGLSurface surface);
+    explicit QWinRTEGLContext(const QSurfaceFormat &format, QPlatformOpenGLContext *share, EGLDisplay display, EGLSurface surface, EGLConfig config);
 
     QFunctionPointer getProcAddress(const QByteArray &procName) Q_DECL_OVERRIDE;
 
diff --git a/src/plugins/platforms/winrt/qwinrtintegration.cpp b/src/plugins/platforms/winrt/qwinrtintegration.cpp
index b8ca9fdc66612e903fdc7bc944d998a28fdfe8a1..4fa90b4b68a43aae37b5f51affd596c32f54a624 100644
--- a/src/plugins/platforms/winrt/qwinrtintegration.cpp
+++ b/src/plugins/platforms/winrt/qwinrtintegration.cpp
@@ -110,7 +110,7 @@ QPlatformBackingStore *QWinRTIntegration::createPlatformBackingStore(QWindow *wi
 QPlatformOpenGLContext *QWinRTIntegration::createPlatformOpenGLContext(QOpenGLContext *context) const
 {
     QWinRTScreen *screen = static_cast<QWinRTScreen *>(context->screen()->handle());
-    return new QWinRTEGLContext(context->format(), context->handle(), screen->eglDisplay(), screen->eglSurface());
+    return new QWinRTEGLContext(context->format(), context->handle(), screen->eglDisplay(), screen->eglSurface(), screen->eglConfig());
 }
 
 QPlatformFontDatabase *QWinRTIntegration::fontDatabase() const
diff --git a/src/plugins/platforms/winrt/qwinrtscreen.cpp b/src/plugins/platforms/winrt/qwinrtscreen.cpp
index 3933902ae3fe90f09df5d4936503415f741c4163..681307ddcf3d3d92636785e6da679ac2f77a4f5c 100644
--- a/src/plugins/platforms/winrt/qwinrtscreen.cpp
+++ b/src/plugins/platforms/winrt/qwinrtscreen.cpp
@@ -33,6 +33,11 @@
 
 #include "qwinrtscreen.h"
 
+#define EGL_EGLEXT_PROTOTYPES
+#include <EGL/eglext.h>
+#include <d3d11.h>
+#include <dxgi1_2.h>
+
 #include "qwinrtbackingstore.h"
 #include "qwinrtinputcontext.h"
 #include "qwinrtcursor.h"
@@ -452,6 +457,7 @@ public:
 
     EGLDisplay eglDisplay;
     EGLSurface eglSurface;
+    EGLConfig eglConfig;
 
     QHash<CoreApplicationCallbackRemover, EventRegistrationToken> applicationTokens;
     QHash<CoreWindowCallbackRemover, EventRegistrationToken> windowTokens;
@@ -575,7 +581,36 @@ QWinRTScreen::QWinRTScreen()
     if (!eglInitialize(d->eglDisplay, NULL, NULL))
         qCritical("Failed to initialize EGL: 0x%x", eglGetError());
 
-    d->eglSurface = eglCreateWindowSurface(d->eglDisplay, q_configFromGLFormat(d->eglDisplay, d->surfaceFormat), d->coreWindow.Get(), NULL);
+    // Check that the device properly supports depth/stencil rendering, and disable them if not
+    ComPtr<ID3D11Device> d3dDevice;
+    const EGLBoolean ok = eglQuerySurfacePointerANGLE(d->eglDisplay, EGL_NO_SURFACE, EGL_DEVICE_EXT, (void **)d3dDevice.GetAddressOf());
+    if (ok && d3dDevice) {
+        ComPtr<IDXGIDevice> dxgiDevice;
+        hr = d3dDevice.As(&dxgiDevice);
+        if (SUCCEEDED(hr)) {
+            ComPtr<IDXGIAdapter> dxgiAdapter;
+            hr = dxgiDevice->GetAdapter(&dxgiAdapter);
+            if (SUCCEEDED(hr)) {
+                ComPtr<IDXGIAdapter2> dxgiAdapter2;
+                hr = dxgiAdapter.As(&dxgiAdapter2);
+                if (SUCCEEDED(hr)) {
+                    DXGI_ADAPTER_DESC2 desc;
+                    hr = dxgiAdapter2->GetDesc2(&desc);
+                    if (SUCCEEDED(hr)) {
+                        // The following GPUs do not render properly with depth/stencil
+                        if ((desc.VendorId == 0x4d4f4351 && desc.DeviceId == 0x32303032)) { // Qualcomm Adreno 225
+                            d->surfaceFormat.setDepthBufferSize(-1);
+                            d->surfaceFormat.setStencilBufferSize(-1);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    d->eglConfig = q_configFromGLFormat(d->eglDisplay, d->surfaceFormat);
+    d->surfaceFormat = q_glFormatFromConfig(d->eglDisplay, d->eglConfig, d->surfaceFormat);
+    d->eglSurface = eglCreateWindowSurface(d->eglDisplay, d->eglConfig, d->coreWindow.Get(), NULL);
     if (d->eglSurface == EGL_NO_SURFACE)
         qCritical("Failed to create EGL window surface: 0x%x", eglGetError());
 }
@@ -706,6 +741,12 @@ EGLSurface QWinRTScreen::eglSurface() const
     return d->eglSurface;
 }
 
+EGLConfig QWinRTScreen::eglConfig() const
+{
+    Q_D(const QWinRTScreen);
+    return d->eglConfig;
+}
+
 QWindow *QWinRTScreen::topWindow() const
 {
     Q_D(const QWinRTScreen);
diff --git a/src/plugins/platforms/winrt/qwinrtscreen.h b/src/plugins/platforms/winrt/qwinrtscreen.h
index e70a9982166fb08db945c6168782857f14c920d2..c95a2073ed2499cc3b9732896688b385474472aa 100644
--- a/src/plugins/platforms/winrt/qwinrtscreen.h
+++ b/src/plugins/platforms/winrt/qwinrtscreen.h
@@ -109,6 +109,7 @@ public:
     ABI::Windows::UI::Core::ICoreWindow *coreWindow() const;
     EGLDisplay eglDisplay() const; // To opengl context
     EGLSurface eglSurface() const; // To window
+    EGLConfig eglConfig() const;
 
 private:
     void handleExpose();