Bug 386142

Summary: Touch docker (or any QML-based dockers) requires working OpenGL implementation
Product: [Applications] krita Reporter: Alvin Wong <alvin>
Component: DockersAssignee: Krita Bugs <krita-bugs-null>
Status: RESOLVED FIXED    
Severity: normal CC: halla
Priority: NOR    
Version First Reported In: git master (please specify the git hash!)   
Target Milestone: ---   
Platform: Microsoft Windows   
OS: Microsoft Windows   
Latest Commit: Version Fixed/Implemented In:
Sentry Crash Report:

Description Alvin Wong 2017-10-24 15:31:01 UTC
This is kind of niche because I think this can only happen on Windows 7 when the graphics driver isn't installed or when running over rdp.

For some reason the software D3D renderer used via ANGLE just refuses to work under Windows 7, so the main window can't be composited at all when the touch docker is enabled.

A solution is to bundle the `opengl32sw.dll` Gallium llvmpipe driver that comes with official releases of Qt (https://download.qt.io/development_releases/prebuilt/llvmpipe/windows/), but then it will need to be handled from the Windows OpenGL handling code in addition to the existing desktop OpenGL and ANGLE handling, which will make the code even more complex. Also means additional packaging steps.
Comment 1 Halla Rempt 2017-10-24 15:40:00 UTC
Maybe we should just disable it on Windows 7 altogether.
Comment 2 Alvin Wong 2017-10-24 15:43:12 UTC
(In reply to Boudewijn Rempt from comment #1)
> Maybe we should just disable it on Windows 7 altogether.

You mean the dockers? They do work if either OpenGL or ANGLE is working properly, which is like 99% of the time.
Comment 3 Halla Rempt 2017-10-24 15:49:41 UTC
Yes, I meant the touch docker. It's mostly useful for people with windows 10 2:1 or tablet systems anyway.
Comment 4 Alvin Wong 2017-11-03 16:26:45 UTC
I have an idea... maybe we can have it fall back to direct3d 9 with ANGLE for rendering the QML stuff? The OpenGL canvas can be kept disabled. Not sure if this will really work though.
Comment 5 Halla Rempt 2017-11-03 18:41:14 UTC
It actually should fallback to Angle automatically, if Qt is built with Angle
Comment 6 Halla Rempt 2017-11-23 10:18:14 UTC
Or we could build Qt with the qtquick software renderer...
Comment 7 Alvin Wong 2017-12-02 18:52:13 UTC
Looks like the specific bug with ANGLE I had on Windows 7 is fixed upstream: https://bugreports.qt.io/browse/QTBUG-64657

I will update to Qt 5.9.3 and add the relevant patch from it and then check if it works.
Comment 8 Alvin Wong 2017-12-03 10:59:49 UTC
Git commit 9587b062ab0e6a66c51611e8f0b93b220b4b7a2f by Alvin Wong.
Committed on 03/12/2017 at 10:48.
Pushed by alvinwong into branch 'master'.

Update Windows ext_qt to 5.9.3 and add a patch

The additional ext_qt patch fixes an issue with ANGLE WARP (software
D3D11 implementation). With this patch, ANGLE can be properly enabled on
Windows 7 systems with no proper graphics drivers installed, or when
running over an RDP connection. Similarly, QML-based dockers can now
work properly.

M  +3    -3    3rdparty/ext_qt/CMakeLists.txt
D  +0    -52   3rdparty/ext_qt/QTBUG-63654-fonts-too-small.patch
A  +50   -0    3rdparty/ext_qt/gerrit-212811_qtbase-angle-d3d11-warp-crash-fix.patch

https://commits.kde.org/krita/9587b062ab0e6a66c51611e8f0b93b220b4b7a2f