Bug 408872 - If Qt cannot open any opengl driver dll, Krita will not start
Summary: If Qt cannot open any opengl driver dll, Krita will not start
Status: RESOLVED FIXED
Alias: None
Product: krita
Classification: Applications
Component: OpenGL Canvas (show other bugs)
Version: git master (please specify the git hash!)
Platform: Microsoft Windows Microsoft Windows
: NOR critical
Target Milestone: ---
Assignee: Dmitry Kazakov
URL:
Keywords:
: 409635 409755 (view as bug list)
Depends on:
Blocks:
 
Reported: 2019-06-18 13:03 UTC by Halla Rempt
Modified: 2019-07-13 08:54 UTC (History)
3 users (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments
Log file for Intel 965 Express (Merom) (18.76 KB, text/plain)
2019-07-01 17:34 UTC, Dmitry Kazakov
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Halla Rempt 2019-06-18 13:03:20 UTC
On Windows, if Krita/Qt cannot dlopen any opengl/angle/direct3d dll, Krita won't start at all. See https://forum.kde.org/viewtopic.php?f=139&t=161175&p=418872#p418830
Comment 1 Halla Rempt 2019-06-21 12:31:15 UTC
Git commit 46ec23e4f8847288dce507ef639caff2bc588ee6 by Boudewijn Rempt.
Committed on 21/06/2019 at 12:30.
Pushed by rempt into branch 'master'.

Check whether there's a context before accessing it

I doubt this helps with 408872, but it's a good idea to do in
any case.

M  +19   -16   libs/ui/canvas/kis_mirror_axis.cpp
M  +3    -1    libs/ui/opengl/KisScreenInformationAdapter.cpp

https://invent.kde.org/kde/krita/commit/46ec23e4f8847288dce507ef639caff2bc588ee6
Comment 2 Halla Rempt 2019-06-24 08:21:44 UTC
Git commit 7e172142279e5bb338d61e42a38aa90287315a44 by Boudewijn Rempt.
Committed on 24/06/2019 at 08:20.
Pushed by rempt into branch 'krita/4.2'.

Check whether there's a context before accessing it

I doubt this helps with 408872, but it's a good idea to do in
any case.

M  +19   -16   libs/ui/canvas/kis_mirror_axis.cpp
M  +3    -1    libs/ui/opengl/KisScreenInformationAdapter.cpp

https://invent.kde.org/kde/krita/commit/7e172142279e5bb338d61e42a38aa90287315a44
Comment 3 Halla Rempt 2019-06-26 09:39:46 UTC
Git commit b5cb7448cab8d738ef7a8673429baf4533ad4e0e by Boudewijn Rempt.
Committed on 26/06/2019 at 09:38.
Pushed by rempt into branch 'master'.

Make it possible to override the Angle Renderer

This is so I can experiment with the warp rasterizer.

M  +4    -2    krita/main.cc

https://invent.kde.org/kde/krita/commit/b5cb7448cab8d738ef7a8673429baf4533ad4e0e
Comment 5 Halla Rempt 2019-06-26 09:44:44 UTC
Also this: https://bugreports.qt.io/browse/QTBUG-42240
Comment 6 Halla Rempt 2019-06-26 13:19:23 UTC
Okay, in 4.1.7 we have the same output from Qt asking desperately for angle, d3dcompiler_4x.dll and opengl32sw.dll. Then there's only a crash when loading the Touch docker.

 So I doubt it's purely a Qt problem, and we need to investigate how our KisOpenGLModeProber.cpp messes things up vis-a-vis 4.1. And we need to disable the Touch docker if ther's no opengl.
Comment 7 Halla Rempt 2019-06-26 13:24:04 UTC
I guess this broke in 

commit 6384d4aa82e0980da6f3e6d07ec3461132a62576
Author: Dmitry Kazakov <dimula73@gmail.com>
Date:   Sat Jan 26 19:23:06 2019 +0300

    Imeplemented automatic selection of a renderer and/or surface format
    
    This patch generalizes the thing previously implemented in kis_opengl_win
    by Alvin Wong long ago.
    

Way to reproduce: create a brand new empty Windows 7 VM and start Krita in it. Windragon's code allows Krita to start, the generalized code doesn't.
Comment 8 Halla Rempt 2019-06-26 13:28:38 UTC
Dmitry,

I've assigned this to you, and it's the absolutely highest priority bug we have at the moment. As soon as you've fixed it, I will make a new release.
Comment 9 Halla Rempt 2019-06-28 07:38:36 UTC
Debugview output froma win10 user: 

00000001	01:53:51 a.m.	[4428]  WTContextManager() this:745af008	
00000002	01:53:51 a.m.	[4428]  WTRoundArray() this:745af858	
00000003	01:53:52 a.m.	[4428] qt.qpa.gl: Basic wglCreateContext gives version 2.1	
00000004	01:53:52 a.m.	[4428] qt.qpa.gl: OpenGL 2.0 entry points available	
00000005	01:53:52 a.m.	[4428] qt.qpa.gl: GPU features: QSet("disable_desktopgl", "disable_program_cache")	
00000006	01:53:52 a.m.	[4428] qt.qpa.gl: Disabling Desktop GL:  GpuDescription(vendorId=0x8086, deviceId=0x46, subSysId=0x40a1028, revision=2, driver: "igdumdx32.dll", version=8.15.10.2993, "Intel(R) HD Graphics""")	
00000007	01:53:52 a.m.	[4428] qt.qpa.gl: Disabling program cache:  GpuDescription(vendorId=0x8086, deviceId=0x46, subSysId=0x40a1028, revision=2, driver: "igdumdx32.dll", version=8.15.10.2993, "Intel(R) HD Graphics""")	
00000008	01:53:52 a.m.	[4428] qt.qpa.gl: supportedRenderers GpuDescription(vendorId=0x8086, deviceId=0x46, subSysId=0x40a1028, revision=2, driver: "igdumdx32.dll", version=8.15.10.2993, "Intel(R) HD Graphics""") 0 renderer:  QFlags(0x2|0x4|0x8|0x20|0x200)	
00000009	01:53:52 a.m.	[4428] qt.qpa.gl: Qt: Using EGL from libEGL	
00000010	01:53:52 a.m.	[4428] qt.qpa.gl: Qt: Using OpenGL ES 2.0 from libGLESv2	
00000011	01:53:53 a.m.	[4428] qt.qpa.gl: create Created EGL display 0x39aa018 v 1 . 4	
00000012	01:53:53 a.m.	[4428] qt.qpa.gl: createPlatformOpenGLContext QSurfaceFormat(version 3.0, options QFlags<QSurfaceFormat::FormatOption>(DeprecatedFunctions), depthBufferSize 24, redBufferSize 8, greenBufferSize 8, blueBufferSize 8, alphaBufferSize 8, stencilBufferSize 8, samples -1, swapBehavior QSurfaceFormat::DoubleBuffer, swapInterval 0, colorSpace QSurfaceFormat::DefaultColorSpace, profile  QSurfaceFormat::CompatibilityProfile)	
00000013	01:53:53 a.m.	[4428] QWindowsEGLContext: Failed to create context, eglError: 3005, this: 0x39467c8	
00000014	01:53:53 a.m.	[4428] qt.qpa.gl: ~QWindowsEGLStaticContext Releasing EGL display  0x39aa018
Comment 10 Halla Rempt 2019-06-28 09:38:12 UTC
On my vm without d3d, I tested three versions: 

               4.1.7/5.9  4.1.8/5.12.4  4.2.2/5.12.4
no opengl32ws  runs       does not run  does not start
w/ opengl32sw  runs       runs          shows window, but crashes
Comment 11 Dmitry Kazakov 2019-07-01 17:34:43 UTC
Created attachment 121269 [details]
Log file for Intel 965 Express (Merom)

Here is a log file for Krita on very old Core 2 Duo (Merom). Krita starts and works fine, but only in OpenGL mode. Angle (DirectX) supports only OpenGL ES 2, which is not supported by Krita.
Comment 12 Dmitry Kazakov 2019-07-03 20:10:59 UTC
Git commit b3484aa8d64b58f3505f373a0d122214d5973678 by Dmitry Kazakov.
Committed on 03/07/2019 at 19:09.
Pushed by dkazakov into branch 'master'.

Implement "Software Renderer" option for OpenGL engine

On old GPUs that support D3D<=10.0 we cannot use Angle for emulating
openGL, therefore we should use some software implementation (or try
using D3D9 with its openGLES 2.0). This patch adds an option to select
software rasterizer WARP, created by Microsoft, which is a part of
DirectX 11 and should be avaailable on all system with Windows 7 and
newer.

M  +3    -16   krita/main.cc
M  +20   -2    libs/ui/dialogs/kis_dlg_preferences.cc
M  +56   -1    libs/ui/opengl/KisOpenGLModeProber.cpp
M  +3    -1    libs/ui/opengl/KisOpenGLModeProber.h
M  +241  -115  libs/ui/opengl/kis_opengl.cpp
M  +19   -4    libs/ui/opengl/kis_opengl.h

https://invent.kde.org/kde/krita/commit/b3484aa8d64b58f3505f373a0d122214d5973678
Comment 13 Dmitry Kazakov 2019-07-08 13:01:48 UTC
Git commit d927af0ca90b0a50e36e71c8245b99b45a604e0d by Dmitry Kazakov.
Committed on 08/07/2019 at 13:01.
Pushed by dkazakov into branch 'master'.

Possibly fix a crash on systems with openGL 2.1

OpenGL 2.1 systems are supported, but Small Colro Selector is not
available for them, because it doesn't have legacy shaders (needs
to be implemented).

M  +4    -3    plugins/dockers/smallcolorselector/smallcolorselector.cc

https://invent.kde.org/kde/krita/commit/d927af0ca90b0a50e36e71c8245b99b45a604e0d
Comment 14 Halla Rempt 2019-07-08 14:59:28 UTC
Git commit a1bf3122fc9129e4a3dcb433da6c9760e4659e52 by Boudewijn Rempt, on behalf of Dmitry Kazakov.
Committed on 08/07/2019 at 14:59.
Pushed by rempt into branch 'krita/4.2'.

Implement "Software Renderer" option for OpenGL engine

On old GPUs that support D3D<=10.0 we cannot use Angle for emulating
openGL, therefore we should use some software implementation (or try
using D3D9 with its openGLES 2.0). This patch adds an option to select
software rasterizer WARP, created by Microsoft, which is a part of
DirectX 11 and should be avaailable on all system with Windows 7 and
newer.

M  +3    -16   krita/main.cc
M  +20   -2    libs/ui/dialogs/kis_dlg_preferences.cc
M  +56   -1    libs/ui/opengl/KisOpenGLModeProber.cpp
M  +3    -1    libs/ui/opengl/KisOpenGLModeProber.h
M  +241  -115  libs/ui/opengl/kis_opengl.cpp
M  +19   -4    libs/ui/opengl/kis_opengl.h

https://invent.kde.org/kde/krita/commit/a1bf3122fc9129e4a3dcb433da6c9760e4659e52
Comment 15 Halla Rempt 2019-07-08 14:59:29 UTC
Git commit 8636ec57356eb31e6c38961c074a9b206c963a0f by Boudewijn Rempt, on behalf of Dmitry Kazakov.
Committed on 08/07/2019 at 14:59.
Pushed by rempt into branch 'krita/4.2'.

Possibly fix a crash on systems with openGL 2.1

OpenGL 2.1 systems are supported, but Small Colro Selector is not
available for them, because it doesn't have legacy shaders (needs
to be implemented).

M  +4    -3    plugins/dockers/smallcolorselector/smallcolorselector.cc

https://invent.kde.org/kde/krita/commit/8636ec57356eb31e6c38961c074a9b206c963a0f
Comment 16 Halla Rempt 2019-07-09 07:36:53 UTC
*** Bug 409635 has been marked as a duplicate of this bug. ***
Comment 17 Dmitry Kazakov 2019-07-11 14:57:11 UTC
Git commit bf4e20d468f77d5a81f1a87227e326a5fc459168 by Dmitry Kazakov.
Committed on 11/07/2019 at 14:56.
Pushed by dkazakov into branch 'master'.

Make Krita not request any specific renderer, when OpenGL is disabled

Important note: now we don't have any specific option for openGL,
we just write "none" into the renderer field.

M  +2    -2    libs/ui/KisPart.cpp
M  +6    -4    libs/ui/dialogs/kis_dlg_preferences.cc
M  +9    -13   libs/ui/kis_config.cc
M  +1    -1    libs/ui/kis_config.h
M  +46   -38   libs/ui/opengl/kis_opengl.cpp
M  +1    -1    libs/ui/opengl/kis_opengl_canvas2.cpp
M  +1    -1    libs/ui/tests/kis_derived_resources_test.cpp

https://invent.kde.org/kde/krita/commit/bf4e20d468f77d5a81f1a87227e326a5fc459168
Comment 18 Dmitry Kazakov 2019-07-11 18:06:47 UTC
According to the reporter, the bug is now fixed in master!

https://www.reddit.com/r/krita/comments/c62xlp/krita_422_released/etj4rya/
Comment 19 Halla Rempt 2019-07-12 08:10:12 UTC
Git commit d30203fa01a6cb4d6533cb8787012293b70ec92b by Boudewijn Rempt, on behalf of Dmitry Kazakov.
Committed on 12/07/2019 at 08:02.
Pushed by rempt into branch 'krita/4.2'.

Make Krita not request any specific renderer, when OpenGL is disabled

Important note: now we don't have any specific option for openGL,
we just write "none" into the renderer field.

M  +2    -2    libs/ui/KisPart.cpp
M  +6    -4    libs/ui/dialogs/kis_dlg_preferences.cc
M  +9    -13   libs/ui/kis_config.cc
M  +1    -1    libs/ui/kis_config.h
M  +46   -38   libs/ui/opengl/kis_opengl.cpp
M  +1    -1    libs/ui/opengl/kis_opengl_canvas2.cpp
M  +1    -1    libs/ui/tests/kis_derived_resources_test.cpp

https://invent.kde.org/kde/krita/commit/d30203fa01a6cb4d6533cb8787012293b70ec92b
Comment 20 Halla Rempt 2019-07-13 08:54:56 UTC
*** Bug 409755 has been marked as a duplicate of this bug. ***