Unsolved Clarification on ANGLE! What needs to be done?
-
We have an app that does some rendering from a stream provided by an SDK (video). It uses QPainter to draw QImages onto a QGLWidget (can make it QOpenGLWidget but don't think it matters yet, see below). No direct gl calls are used.
On a Optiplex 755 test macine it does not work. This is an Intel Q35 chipset with Intel 3100 graphics, latest Windows Update drivers only support OpenGL 1.4
So, with Qt >= 5.5, the documentation on Qt indicates it should be automatically falling back to ANGLE to use DirectX instead. I found documentation that opengl dynamic option is the default for pre-built packages. However, no matter what I do it fails to render, and QT_LOGGING_RULES set for qt.qpa.gl seems to indicate it skips ANGLE and try's software OpenGL rendering which fails too.So I thought, let's try the simplest of tests to see if ANGLE even works. I created a new Qt Quick 2 app from the templates in Creator, no changes, should start up and use ANGLE on this machine. I also have Qt 5.4.X, 5.5.X and 5.7.X (all MSVC 2013 32b variants, non-opengl variant for 5.4.X). Tried all 3 and none work.
Here are my results:
5.4.X - Vanilla "Qt Quick Application":
Starting C:\Users\User\Documents\build-TestANGLE-Desktop_Qt_5_7_0_MSVC2013_32bit-Debug\debug\TestANGLE.exe... QML debugging is enabled. Only use this in a safe environment. qt.qpa.gl: Basic wglCreateContext gives version 1.4 qt.qpa.gl: OpenGL version too low qt.qpa.gl: OpenGL 2.0 entry points available qt.qpa.gl: QWindowsOpenGLTester::supportedRenderers GpuDescription(vendorId=0x8086, deviceId=0x29b2, subSysId=0x2111028, revision=2, driver: "igdumdx32.dll", version=8.14.10.1930, "Intel(R) Q35 Express Chipset Family") renderer: QFlags(0x1|0x2|0x4|0x8|0x20) qt.qpa.gl: Qt: Using WGL and OpenGL from "opengl32.dll" qt.qpa.gl: QOpenGLStaticContext::create OpenGL: "Intel","Intel Bear Lake B" default ContextFormat: v1.4 profile: 0 options: QFlags(0x4) Extensions: 50 qt.qpa.gl: QWindowsIntegration::createPlatformOpenGLContext QSurfaceFormat(version 2.0, options QFlags(), depthBufferSize 24, redBufferSize -1, greenBufferSize -1, blueBufferSize -1, alphaBufferSize -1, stencilBufferSize 8, samples -1, swapBehavior 2, swapInterval 1, profile 0) qt.qpa.gl: QWindowsGLContext::QWindowsGLContext 0x2e66768 GDI requested: QSurfaceFormat(version 2.0, options QFlags(), depthBufferSize 24, redBufferSize -1, greenBufferSize -1, blueBufferSize -1, alphaBufferSize -1, stencilBufferSize 8, samples -1, swapBehavior 2, swapInterval 1, profile 0) obtained # 6 GDI QSurfaceFormat(version 1.4, options QFlags(0x4), depthBufferSize 24, redBufferSize 8, greenBufferSize 8, blueBufferSize 8, alphaBufferSize 8, stencilBufferSize 8, samples -1, swapBehavior 2, swapInterval 1, profile 0) PIXELFORMATDESCRIPTOR dwFlags=0x8025 PFD_DRAW_TO_WINDOW PFD_SUPPORT_OPENGL PFD_SUPPORT_COMPOSITION PFD_DOUBLEBUFFER iPixelType=0 cColorBits=32 cRedBits=8 cRedShift=16 cGreenBits=8 cGreenShift=8 cBlueBits=8 cBlueShift=0 cDepthBits=24 cStencilBits=8 iLayerType=0 cAlphaBits=8 cAlphaShift=24 cAccumBits=64 cAccumRedBits=16 cAccumGreenBits=16 cAccumBlueBits=16 cAccumAlphaBits=16 swap interval: 1 default: ContextFormat: v1.4 profile: 0 options: QFlags(0x4) HGLRC=0x30000 The program has unexpectedly finished. C:\Users\User\Documents\build-TestANGLE-Desktop_Qt_5_7_0_MSVC2013_32bit-Debug\debug\TestANGLE.exe crashed.
5.4.X - Added QGuiApplication::setAttribute(Qt::AA_UseOpenGLES) since what seems odd above is "OpenGL 2.0 entry points available" to force ANGLE
The only search results on the latter is that updating to Qt 5.5.X fixes the assertion error. So great, let's try that:
5.5.X-5.7.X - Vanilla "Qt Quick Application"
Starting C:\Users\User\Documents\build-TestANGLE-Desktop_Qt_5_7_0_MSVC2013_32bit-Debug\debug\TestANGLE.exe... QML debugging is enabled. Only use this in a safe environment. qt.qpa.gl: Basic wglCreateContext gives version 1.4 qt.qpa.gl: OpenGL version too low qt.qpa.gl: OpenGL 2.0 entry points available qt.qpa.gl: GPU features: QSet() qt.qpa.gl: QWindowsOpenGLTester::supportedRenderers GpuDescription(vendorId=0x8086, deviceId=0x29b2, subSysId=0x2111028, revision=2, driver: "igdumdx32.dll", version=8.14.10.1930, "Intel(R) Q35 Express Chipset Family") renderer: QFlags(0x1|0x2|0x4|0x8|0x20) qt.qpa.gl: Qt: Using WGL and OpenGL from "opengl32.dll" qt.qpa.gl: QOpenGLStaticContext::create OpenGL: "Intel","Intel Bear Lake B" default ContextFormat: v1.4 profile: 0 options: QFlags(0x4) Extensions: 50 qt.qpa.gl: QWindowsIntegration::createPlatformOpenGLContext QSurfaceFormat(version 2.0, options QFlags(), depthBufferSize 24, redBufferSize -1, greenBufferSize -1, blueBufferSize -1, alphaBufferSize -1, stencilBufferSize 8, samples -1, swapBehavior 2, swapInterval 1, profile 0) qt.qpa.gl: QWindowsGLContext::QWindowsGLContext 0x2322638 GDI requested: QSurfaceFormat(version 2.0, options QFlags(), depthBufferSize 24, redBufferSize -1, greenBufferSize -1, blueBufferSize -1, alphaBufferSize -1, stencilBufferSize 8, samples -1, swapBehavior 2, swapInterval 1, profile 0) obtained # 6 GDI QSurfaceFormat(version 1.4, options QFlags(0x4), depthBufferSize 24, redBufferSize 8, greenBufferSize 8, blueBufferSize 8, alphaBufferSize 8, stencilBufferSize 8, samples -1, swapBehavior 2, swapInterval 1, profile 0) PIXELFORMATDESCRIPTOR dwFlags=0x8025 PFD_DRAW_TO_WINDOW PFD_SUPPORT_OPENGL PFD_SUPPORT_COMPOSITION PFD_DOUBLEBUFFER iPixelType=0 cColorBits=32 cRedBits=8 cRedShift=16 cGreenBits=8 cGreenShift=8 cBlueBits=8 cBlueShift=0 cDepthBits=24 cStencilBits=8 iLayerType=0 cAlphaBits=8 cAlphaShift=24 cAccumBits=64 cAccumRedBits=16 cAccumGreenBits=16 cAccumBlueBits=16 cAccumAlphaBits=16 swap interval: 1 default: ContextFormat: v1.4 profile: 0 options: QFlags(0x4) HGLRC= 0x30000 The program has unexpectedly finished. C:\Users\User\Documents\build-TestANGLE-Desktop_Qt_5_7_0_MSVC2013_32bit-Debug\debug\TestANGLE.exe crashed.
5.5.X-5.7.X - Add QGuiApplication::setAttribute(Qt::AA_UseOpenGLES)
Starting C:\Users\User\Documents\build-TestANGLE-Desktop_Qt_5_7_0_MSVC2013_32bit-Debug\debug\TestANGLE.exe... QML debugging is enabled. Only use this in a safe environment. qt.qpa.gl: GPU features: QSet() qt.qpa.gl: QWindowsOpenGLTester::supportedGlesRenderers GpuDescription(vendorId=0x8086, deviceId=0x29b2, subSysId=0x2111028, revision=2, driver: "igdumdx32.dll", version=8.14.10.1930, "Intel(R) Q35 Express Chipset Family") renderer: QFlags(0x2|0x4|0x8|0x20) qt.qpa.gl: Qt: Using EGL from libEGLd.dll qt.qpa.gl: Qt: Using OpenGL ES 2.0 from libGLESv2d.dll class QWindowsEGLStaticContext *__cdecl QWindowsEGLStaticContext::create(class QFlags<enum QWindowsOpenGLTester::Renderer>): Could not initialize EGL display: error 0x3001 class QWindowsEGLStaticContext *__cdecl QWindowsEGLStaticContext::create(class QFlags<enum QWindowsOpenGLTester::Renderer>): When using ANGLE, check if d3dcompiler_4x.dll is available qt.qpa.gl: QWindowsOpenGLTester::supportedGlesRenderers GpuDescription(vendorId=0x8086, deviceId=0x29b2, subSysId=0x2111028, revision=2, driver: "igdumdx32.dll", version=8.14.10.1930, "Intel(R) Q35 Express Chipset Family") renderer: QFlags(0x2|0x4|0x8|0x20) qt.qpa.gl: Qt: Using EGL from libEGLd.dll qt.qpa.gl: Qt: Using OpenGL ES 2.0 from libGLESv2d.dll class QWindowsEGLStaticContext *__cdecl QWindowsEGLStaticContext::create(class QFlags<enum QWindowsOpenGLTester::Renderer>): Could not initialize EGL display: error 0x3001 class QWindowsEGLStaticContext *__cdecl QWindowsEGLStaticContext::create(class QFlags<enum QWindowsOpenGLTester::Renderer>): When using ANGLE, check if d3dcompiler_4x.dll is available qt.qpa.gl: QWindowsOpenGLTester::supportedGlesRenderers GpuDescription(vendorId=0x8086, deviceId=0x29b2, subSysId=0x2111028, revision=2, driver: "igdumdx32.dll", version=8.14.10.1930, "Intel(R) Q35 Express Chipset Family") renderer: QFlags(0x2|0x4|0x8|0x20) qt.qpa.gl: Qt: Using EGL from libEGLd.dll qt.qpa.gl: Qt: Using OpenGL ES 2.0 from libGLESv2d.dll class QWindowsEGLStaticContext *__cdecl QWindowsEGLStaticContext::create(class QFlags<enum QWindowsOpenGLTester::Renderer>): Could not initialize EGL display: error 0x3001 class QWindowsEGLStaticContext *__cdecl QWindowsEGLStaticContext::create(class QFlags<enum QWindowsOpenGLTester::Renderer>): When using ANGLE, check if d3dcompiler_4x.dll is available qt.qpa.gl: QWindowsIntegration::createPlatformOpenGLContext QSurfaceFormat(version 2.0, options QFlags(), depthBufferSize 24, redBufferSize -1, greenBufferSize -1, blueBufferSize -1, alphaBufferSize -1, stencilBufferSize 8, samples -1, swapBehavior 2, swapInterval 1, profile 0) qt.qpa.gl: QWindowsOpenGLTester::supportedGlesRenderers GpuDescription(vendorId=0x8086, deviceId=0x29b2, subSysId=0x2111028, revision=2, driver: "igdumdx32.dll", version=8.14.10.1930, "Intel(R) Q35 Express Chipset Family") renderer: QFlags(0x2|0x4|0x8|0x20) qt.qpa.gl: Qt: Using EGL from libEGLd.dll qt.qpa.gl: Qt: Using OpenGL ES 2.0 from libGLESv2d.dll class QWindowsEGLStaticContext *__cdecl QWindowsEGLStaticContext::create(class QFlags<enum QWindowsOpenGLTester::Renderer>): Could not initialize EGL display: error 0x3001 class QWindowsEGLStaticContext *__cdecl QWindowsEGLStaticContext::create(class QFlags<enum QWindowsOpenGLTester::Renderer>): When using ANGLE, check if d3dcompiler_4x.dll is available Failed to create OpenGL context for format QSurfaceFormat(version 2.0, options QFlags(), depthBufferSize 24, redBufferSize -1, greenBufferSize -1, blueBufferSize -1, alphaBufferSize -1, stencilBufferSize 8, samples -1, swapBehavior 2, swapInterval 1, profile 0) . This is most likely caused by not having the necessary graphics drivers installed. Install a driver providing OpenGL 2.0 or higher, or, if this is not possible, make sure the ANGLE Open GL ES 2.0 emulation libraries (libEGLd.dll, libGLESv2d.dll and d3dcompiler_*.dll) are available in the application executable's directory or in a location listed in PATH.
I checked PATH under project settings in Creator, Qt bin directory is listed which contains the ANGLE dll's. tried copying those dll's directly over to build directory. I've tried it all, I don't get it. I've spent a full week of development effort trying to figure out this issue. On most machine, our app works fine because OpenGL >= 2.1 is available. However, we need to cover this small subset of "low power" machines and I thought I got this for free with this ANGLE fallback. Any help or clarification on how this system works would be appreciated, I think I really have read everything related to it on the internet! Thanks. :)
-
-
Does not appear to be in the blacklist:
PCI\VEN_8086&DEV_29B2&SUBSYS_02111028&REV_02\3&172E68DD&0&10Thanks!