<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">
Thanks for the update Laszlo. This is really important work towards Qt 6, and I can recommend everybody that has an interest in the graphics stack for Qt to have a look.
<div class=""><br class="">
</div>
<div class="">And I support the creation of the qtshadertools repo. Gerrit admins, could you please the qt-labs repo for Laszlo?</div>
<div class=""><br class="">
</div>
<div class="">Cheers,</div>
<div class="">Lars<br class="">
<div><br class="">
<blockquote type="cite" class="">
<div class="">On 2 Apr 2019, at 15:14, Laszlo Agocs <<a href="mailto:laszlo.agocs@qt.io" class="">laszlo.agocs@qt.io</a>> wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<div class="WordSection1" style="page: WordSection1; caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;">
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
Hi all,<o:p class=""></o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<o:p class=""> </o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
First, a qt-labs repository request:<o:p class=""></o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<o:p class=""> </o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
Repo name: qtshadertools<o:p class=""></o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
Name: Qt Shader Tools<o:p class=""></o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
Responsible person: me<o:p class=""></o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
Purpose: will import<span class="Apple-converted-space"> </span><a href="https://git.qt.io/laagocs/qtshadertools" style="color: rgb(149, 79, 114); text-decoration: underline;" class="">https://git.qt.io/laagocs/qtshadertools</a><span class="Apple-converted-space"> </span>here.
 This is an experimental Qt module providing APIs and a host tool to perform graphics and compute shader conditioning for the upcoming Qt graphics abstraction layer. While it is expected to evolve into a proper Qt module in Qt 6, the intention is to keep it
 as a qt-labs project for Qt 5.x, mainly in order to avoid prematurely importing larger 3rd party dependencies.<o:p class=""></o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<o:p class=""> </o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
Second, I believe the request above demands a few words about the current status regarding the evolution of the accelerated graphics stack in Qt.<o:p class=""></o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<o:p class=""> </o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
Short version:<o:p class=""></o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<o:p class=""> </o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
- Graphics and shader stack evolution is on-going.<o:p class=""></o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<o:p class=""> </o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
- A very early preview of Qt Quick for Vulkan, Metal, and D3D11 may come already in Qt 5.14, then evolve in 5.15 and beyond, with 6.0 as its final destination.<o:p class=""></o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<o:p class=""> </o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
- Qt Quick is just one piece in the puzzle. More about the others at some other time.<o:p class=""></o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<o:p class=""> </o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
Long version:<o:p class=""></o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<o:p class=""> </o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
As discussed at<span class="Apple-converted-space"> </span><a href="https://wiki.qt.io/QtCS2018_Graphics_Vision_2020" style="color: rgb(149, 79, 114); text-decoration: underline;" class="">https://wiki.qt.io/QtCS2018_Graphics_Vision_2020</a><span class="Apple-converted-space"> </span>Qt
 6 will do away with the hard OpenGL dependency in most, if not all, of its modules. This is achieved via a small abstraction layer, currently called the Qt Rendering Hardware Interface, with backends for Vulkan, Metal, Direct 3D 11, and OpenGL (ES) 2.x(+ some
 3.x extensions) at the moment. Shader code needs additional solutions: graphics shaders in Qt itself, and eventually also in applications (custom Qt Quick materials, ShaderEffect, etc.), are expected to be written in a single language regardless of the platform
 and graphics API the applications will run on. Hence the above mentioned Shader Tools module.<o:p class=""></o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<o:p class=""> </o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
In (a not fully up-to-date but conceptually correct) picture:<span class="Apple-converted-space"> </span><a href="https://git.qt.io/laagocs/qtrhi/blob/1dd15d715399000707552b030357a74782d50f38/rhi2.png" style="color: rgb(149, 79, 114); text-decoration: underline;" class="">https://git.qt.io/laagocs/qtrhi/blob/1dd15d715399000707552b030357a74782d50f38/rhi2.png</a><o:p class=""></o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<o:p class=""> </o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
Qt Quick, the OpenGL paint engine of QPainter, and various other components are expected to migrate to this stack in Qt 6, removing direct OpenGL usage. (to be clear, applications should still be able to do OpenGL/Vulkan/Metal/etc. rendering directly in the
 future as well, just like they can resort to direct OpenGL usage today via QSGRenderNode or QQuickFramebufferObject or the QQuickWindow under/overlay signals, but then they get tied to running with a given rhi backend, and so graphics API; therefore, this
 is not an option for Qt itself, at least when it comes to the essential Qt modules)<o:p class=""></o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<o:p class=""> </o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
This is a long journey, possibly with numerous road bumps (or blocks, even) on the way. Therefore, the intention is to provide some of the components of the new stack as tech previews already in the Qt 5.x time frame, in order to make it easier to iterate,
 discover problems, and get feedback.<o:p class=""></o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<o:p class=""> </o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
As a first step, it is likely that in Qt 5.14 we can already include the some of the Qt Quick work as an early preview. In practice this would mean that (suitable) Qt Quick applications could opt-in to the new RHI-based rendering path (currently this is done
 by simply setting an environment variable), thus switching from OpenGL to D3D11, Vulkan or Metal, transparently to the application.<o:p class=""></o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<o:p class=""> </o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
This involves the following pieces:<o:p class=""></o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<o:p class=""> </o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
1. Most the RHI is to be imported (mostly) as private APIs. This is what<span class="Apple-converted-space"> </span><a href="https://codereview.qt-project.org/#/c/256713/" style="color: rgb(149, 79, 114); text-decoration: underline;" class="">https://codereview.qt-project.org/#/c/256713/</a><span class="Apple-converted-space"> </span>is.
 (basically a private-ized version of<span class="Apple-converted-space"> </span><a href="https://git.qt.io/laagocs/qtrhi" style="color: rgb(149, 79, 114); text-decoration: underline;" class="">https://git.qt.io/laagocs/qtrhi</a><span class="Apple-converted-space"> </span>with
 a bunch of changes on top)<o:p class=""></o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<o:p class=""> </o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
It is not unlikely that QRhi & co. becomes a public API at some point in Qt 6.x, but we cannot yet commit to having them as public yet. While we believe this already provides sufficient foundations for Qt Quick, QPainter, and Qt 3D Studio, it will evolve and
 change over time as necessary so no API guarantees can be given.<o:p class=""></o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<o:p class=""> </o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
BTW, (slightly outdated) sets of the generated documentation of qtrhi and qtshadertools are available at<span class="Apple-converted-space"> </span><a href="https://alpqr.github.io/qtrhi/qtrhi-index.html#" style="color: rgb(149, 79, 114); text-decoration: underline;" class="">https://alpqr.github.io/qtrhi/qtrhi-index.html#</a><span class="Apple-converted-space"> </span>and<a href="https://alpqr.github.io/qtshadertools/qtshadertools-index.html#" style="color: rgb(149, 79, 114); text-decoration: underline;" class="">https://alpqr.github.io/qtshadertools/qtshadertools-index.html#</a><o:p class=""></o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<o:p class=""> </o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
2. The shader conditioning tools will not be taken into Qt 5.x, as explained above. When it comes to the Qt Quick scenegraph's built-in materials (QSGVertexColorMaterial and friends), they will come with the necessary pre-processed shaders so this is not a
 problem for typical Quick items. Developers wishing to experiment with ShaderEffects or custom QSGMaterials on top of the RHI will need to check out and build this module themselves for now.<o:p class=""></o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<o:p class=""> </o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
3. The Qt Quick port will move to the wip/scenegraphng branch of qtdeclarative soon, from there we can merge to dev eventually. For now this still lives at<a href="https://git.qt.io/laagocs/qtgreyhound" style="color: rgb(149, 79, 114); text-decoration: underline;" class="">https://git.qt.io/laagocs/qtgreyhound</a><span class="Apple-converted-space"> </span>(and
 is heavily work in progress).<o:p class=""></o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<o:p class=""> </o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
Unlike earlier attempts, such as the D3D12 backend introduced in Qt 5.8, the RHI port is not merely a new scenegraph backend (plugin) - rather, it is the fully featured, default OpenGL rendering path that is getting extended and massaged into being able to
 operate with QRhi instead of calling glWhatever() directly (when the application opted in for this; changing or removing anything on the gl* code path is Qt 6 material). This way all the scenegraph goodies like the batching renderer, texture atlasing, distance
 field based text rendering, and the ability to do custom materials will be available.<o:p class=""></o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<o:p class=""> </o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
All this comes with the disclaimer that this, if materializes, is going to be an early preview, and some Qt Quick features will most certainly not yet be available. So not intended for production use.<o:p class=""></o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<o:p class=""> </o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
Best regards,<o:p class=""></o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
Laszlo<o:p class=""></o:p></div>
<div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">
<o:p class=""> </o:p></div>
</div>
<span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">_______________________________________________</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">
<span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">Development
 mailing list</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">
<a href="mailto:Development@qt-project.org" style="color: rgb(149, 79, 114); text-decoration: underline; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">Development@qt-project.org</a><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">
<a href="https://lists.qt-project.org/listinfo/development" style="color: rgb(149, 79, 114); text-decoration: underline; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">https://lists.qt-project.org/listinfo/development</a></div>
</blockquote>
</div>
<br class="">
</div>
</body>
</html>