| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
| |
Change-Id: I87798db04e0bca6c2ea173b1b946549a747b2124
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
|
|
|
|
|
|
|
|
|
| |
Make the before signal closer to the actual QRhi::beginFrame() call.
This fixes emitting a beforeFrameBegin unnecessarily when unexposing and
then exposing a window again.
Change-Id: Icc562a57798986c8d04c6800eabc41981c5da85b
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
|
|
|
|
|
|
|
|
|
| |
As required by OpenXR.
While we are at it, make the API a bit more type safe.
Change-Id: I3c6152feeb71359056830ab02d35f8cb258722c0
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
|
|
|
|
|
|
|
|
|
| |
This is required to remove the ; from the macro with Qt 6.
Task-number: QTBUG-82978
Change-Id: Iead53d18fd790fb2d870d80ef2db79666f0d2392
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
|
|
|
|
|
| |
Change-Id: I2bf50a46ea18fe06068192ad695652830c3a3861
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
|
|
|
|
|
| |
Change-Id: I00192314cdb954acdd4f933eec912cffab3584c6
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
|
|
|
|
|
|
|
|
| |
...to createRhi(). There is no need for the VkInstance before that
point.
Change-Id: I87f4e8154e96409bccd7844f1bf80b957bb54d69
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
...and fix up the docs.
The string-based setSceneGraphBackend() stays of course (the docs have
been enhanced, however). The GraphicsApi enum-based overload is now
renamed to setGraphicsApi().
Using the same name for both functions is a historical artifact, reflecting
the evolution (5.0 - 5.8 - 5.14). In 6.0 we can give it a more appropriate
name, since it does not have much to do with "backends" from the user's
perspective.
Change-Id: Id75dbf81f50a148797e5b5de9be4000153737473
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
|
|
|
|
|
|
|
|
|
|
| |
Also add support for doing
QQuickWindow::setSceneGraphBackend(QSGRendererInterface::Unknown). This
becomes relevant especially in tests, where we may request a specific
graphics API, but then want to switch back to the default behavior.
Change-Id: Ib09c411432fc37bd4d36ce55d54d20af3f83860a
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
|
|
|
|
|
|
|
| |
Introduce an autotest case too.
Change-Id: I658b09b6e4e5b30cdc2174fdf21f60adf93e44ff
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Follow the pattern of QQuickRenderTarget and QQuickGraphicsDevice.
This makes it possible to integrate with real world frameworks, such as
OpenXR, that, especially with Vulkan, expect this level of
configurability. (i.e. one pulls the list of extensions to be enabled on
the device, that then needs to be taken into account by Quick, otherwise
it will end up with a VkDevice that is not usable by OpenXR)
Same goes when integrating native Vulkan rendering into an application:
if certain extensions need to be enabled on the VkDevice, today that can
only be done with an environment variable which is not entirely ideal.
These issues are now solved by a new simple (and extensible) container
QQuickGraphicsConfiguration, which is associated with the QQuickWindow.
When applicable, the scene graph will then pick up the relevant settings.
Expand the related docs everywhere. Also rename the vulkanInstance() to
defaultVulkanInstance() to emphasize that it is the instance that is
used for normal QQuickWindows, and is not provided when redirecting
via QQuickRenderControl.
While we are at it, include another obvious candidate: the use-depth-buffer
flag. It turns out that Quick3D's Overlay render mode can be pretty
problematic if Quick writes to the depth buffer. In order to avoid
relying on environment variables (QSG_NO_DEPTH_BUFFER), we now provide
a proper API for controlling that as well.
Change-Id: Iefdb62c1f53de8bd34e3f0d393b00c5020d6188a
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
|
|
|
|
|
|
|
|
|
|
| |
Quick3D is broken in combination with QQuickRenderControl. This is
because just exposing the swapchain is not enough - there is no
swapchain with QQuickRenderControl. Rather, one needs access to the
command buffer and render target then.
Change-Id: I6c06ad3d83ab0018b9f985073757a3378dbce24b
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
|
|
|
|
|
|
|
|
|
| |
In a8d357761dbf74cbdc72348be6c655cafb745ff2, we added the removed
bit to the batch and implemented the suggested optimization, so
this comment is no longer valid.
Change-Id: I2a5c82f0ace206a989ef8c6d0c2c2b87dc83ad6f
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
|
|
|
|
|
|
|
|
|
|
| |
The Creator view only works correctly when each event has the
pre-defined number of data points. So record the Binding timestamp,
which went missing in the RHI port at some point, to get correct
results.
Change-Id: Iac2f458ac0264a6afd4bb91e56b19e7ac7343816
Reviewed-by: Christian Strømme <christian.stromme@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
A bug snuck in via e8d9bc1bcada7d94af5a33d64a9afc860ede5b84 in
one of the outline shaders where we would actually fill the
entire glyph with the style color instead of just drawing the
border. Since we were drawing the fill on top afterwards, this
wasn't visible in a normal test, but when the fill color is
set to transparent it showed.
This changes the alpha channel-based outline shader to match
the old code as well as the code in the red-channel based one.
Task-number: QTBUG-69301
Change-Id: I2f9d4b9426577c331866172fc6f7240f379efef2
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
As the todo note says: this profiling is all wrong
Not reporting something is better than reporting something bogus.
The other profiling points, f.ex. in the render loops, seem to work as
expected and give reasonable results in the QML Profiler view in Creator.
The autotest needs fixing because there is no SGContextFrame events left
with the rhi code path either atm, just like with the software backend.
Change-Id: Iee2d3feb586108db50c83c6c03ea415384561ede
Reviewed-by: Christian Strømme <christian.stromme@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
..and so fully compatible in behavior with properties like Image.source.
The main improvement here is that unlike with the old code, which incorrectly
handled local file URLs, one can now write fragmentShader: "myshader.frag.qsb"
which leads to picking up the file relative to the component (the .qml file),
as expected.
Existing code (that uses file: or qrc: URLs) will continue to work
as-is.
Change-Id: I89dd84b998b59ae6d5b6cb3d8a6353961ee8bb4a
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
Reviewed-by: Christian Strømme <christian.stromme@qt.io>
|
|
|
|
|
|
|
|
|
| |
For security reasons, QML debugging (e.g. QML Profiler) is only usable
when the application had CONFIG+=qml_debug set. Follow the same approach
in the QRhi profiling infrastructure and do nothing if this was not set.
Change-Id: I46ea78a118d79e166a40722befbfc9263aac6680
Reviewed-by: Christian Strømme <christian.stromme@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
For any font where glyphs are connected (any font could
have this, but specifically Arabic and Indic fonts will
typically always connect glyphs, as it is required to
express the language correctly), we would draw the outline
on a per-glyph basis, thus getting outlines that disconnect
the glyphs.
In order to fix this, we have to draw the fill of the glyphs
in a separate pass after the outline has been drawn.
Note that in order for this to look correct, we have to
disable subpixel antialiasing on the fill, which required
some plumbing in the native rendering glyph node. The
outline shaders have also been changed to only draw the
outline and not the fill.
[ChangeLog][QtQuick][Text] Fixed Outline style on connected glyphs,
especially visible in e.g. Arabic and Indic writing systems.
Pick-to: 5.15
Fixes: QTBUG-69301
Fixes: QTBUG-83358
Change-Id: If52a940bfb0267384ea002120655aed1310458a1
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The standard outline shaders were accidentally changed to
use fwidth() as part of 90bf30376c94b2fcf99e2d8382b40e8881be47be.
The same change adds specialized outline shaders when fwidth
is enabled, so the change to the default ones can simply be
reverted.
Task-number: QTBUG-84695
Change-Id: I45c3e234d1ddb39f968967cce28906f352b237ea
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Our aim is to provide a clean and lean QSGTexture interface and this
involves having certain QRhi types in some of the functions. Putting
these functions into some private class leads to unnecessary ugliness
all over the place, and would infect other modules, such as Quick 3D as
well. At the same time, fully documenting functions like rhiTexture() is
probably weird in 6.0 since QRhiTexture is not a public class and is
forward declared at best.
So until the QRhi API story crystalizes long term, mark these functions as
internal.
Change-Id: I8248fc5ba40f0ca94b3542b13d12f24cc9bd76f6
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
| |
Avoid relying on the (somewhat obsolete) capability flag. Instead, have
a clean and straightforward check based on QT_CONFIG.
In the CI, in particular for the QEMU configs that are both OpenGL and
Vulkan capable (build-wise, yuck), the software backend will be requested
explicitly in the future so this won't need to cater for that anymore.
Change-Id: Ifa100efdae208b789f6ed2a7b57330262c13284f
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
|
|
|
|
|
| |
Change-Id: Ic0f1a1ffe18aa12cdf6643e52644053f4d191380
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
|
|
|
|
|
|
|
|
|
|
| |
Accelerated graphics is now possible without OpenGL support. With
this change, a Qt build with -no-opengl can still run Qt Quick with
a Vulkan, Metal, or Direct3D backend.
Fixes: QTBUG-84027
Change-Id: Ib63c733d28cfdf7de16b138df136fa7628e1747b
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
|
|
|
|
|
|
|
| |
Otherwise the old one leaks as shown in the QQuickWindow test.
Change-Id: I50a8c1b5e7ebc52a2bf9a901d9fae94559d2bcea
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
|
|
|
|
|
|
|
|
| |
Not called in practice anymore, remove the corresponding condition in
the basic render loop as well.
Change-Id: I22d6091c900ce36665b9e7f6dc91cc9276528ff6
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
|
|
|
|
|
|
|
|
| |
Most of this is just updating based on the changes done back in Qt 5.8,
e.g. referring to our own enum values instead talking about OpenGL and GL_*.
Change-Id: Id4dd823acbb004d61a1b54cc4c92d1490d7f42a1
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
For perspective transforms, we need to find the sample
range in the glyph cache per pixel. We can do this by
getting the gradient of the distance field at the
specific pixel.
This will ensure proper antialiasing with any
projection, but has the limitation that when glyph contours
become thinner than a pixel, they may disappear or become
too emphasized, because the hardware-gradient - based on
neighbouring fragments - is not reliable at that scale.
So we should only default to this when we detect that the
text is child of a 3D scene.
To make this smooth, we need to know the mode of the renderer
when creating the shader. So QSGMaterial::createShader()
now takes a render mode that we can use to customize behavior
based on whether it is rendering into a 2D or 3D scene.
[ChangeLog][QtQuick] The QSGMaterial::createShader() virtual
function has been extended to take a render mode argument,
which can be used for any customizations needed in the case
where the shader will be used in combination with 3D perspective
transformations.
Fixes: QTBUG-84695
Change-Id: I5a18a4edbdfa07e8f9d506c42bb20e8eb580927d
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
With really big, static scenes, traversal of the geometry list
is expensive enough that it becomes a limitation on the frame
rate if we do it in the inner loop of every frame. And going
through the whole list of geometry every frame just to verify
that nothing has been removed is a waste of time.
In a test with two million opaque items in a single draw call,
I can hit 144 fps with this small optimization versus 50 fps
on the same machine without the patch.
Pick-to: 5.15
Change-Id: Id11c1d96456e79a62c33b89e5f115bdaacceeacd
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Preprocessing in the scene graph is actually pretty expensive,
so we want to avoid using it for something like text, where you
can often have a lot of nodes in a UI.
For text it was previously used for two purposes:
1. To make sure the distance field glyph cache was updated with
potential new glyphs before the frame was rendered, but *after*
all new glyph nodes had been created (this is an optimization to
avoid having to resize the cache multiple times in one frame,
but rather wait until we know the exact amount of new glyphs
that need to be added)
2. Update the coordinates of the glyph based on their position
in the glyph cache if the glyph cache says they have moved (or
if they have just been added for the first time).
Point #1 can actually be handled a lot simpler, by having a
separate loop for the existing glyph caches where we ask them
to preprocess. There is typically only a few glyph caches, but
can be hundreds of glyph nodes in a scene, so in the previous
code we would be calling the update() functions on the same
glyph cache over and over again every frame.
Point #2 does not need preprocessing every frame, but can be
reduced to only preprocess when the geometry is marked as
dirty. We then do a pass on the glyph node in question to
update its geometry and turn the flag off again so that we
don't pay the cost every frame.
Pick-to: 5.15
Fixes: QTBUG-84351
Change-Id: If8c492acaef9c512c2db61b64bcab2103db2d997
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
|
| |
Task-number: QTBUG-84623
Change-Id: I26941eacf5ad97ed3c7c6e7d7ad3beec7f0c6fa3
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
|
|
|
|
|
|
|
|
|
| |
We want to be able to use this enum from the public API, so we move
it out to a suitable public class.
Task-number: QTBUG-84695
Change-Id: I8a3860ecfd0da7990941540bcf39fb0c2bf0ff83
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
|
|
|
|
|
|
| |
Task-number: QTBUG-84623
Change-Id: Icef7ab7460799b989f4e122be3f8d5cab98382e4
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
|
|
|
|
|
|
| |
Task-number: QTBUG-84623
Change-Id: I7577c2da02936295793bac23f7cb66107a65c462
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
|
|
|
|
|
|
|
|
|
| |
As a driveby, remove an unused opengl #include from
qsgdefaultspritenode.cpp
Task-number: QTBUG-84623
Change-Id: I6e901a0ac0a23a2d21029b5337c204835e29026a
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
These persistent hints are still taken into account by the threaded
render loop, so keep them, but get rid of "OpenGL Context" from the
function names.
The qquickwindow autotest has been updated accordingly, and with a few
OpenGL-related cleanups it now runs without any warnings or skips with
OpenGL-on-RHI, while it skips only 1 case when running with some other
API, and 2 with the software backend.
[ChangeLog][Qt Quick][QQuickWindow] The setPersistentOpenGLContext() and
isPersistentOpenGLContext() functions are renamed to
setPersistentGraphics() and isPersistentGraphics().
Change-Id: Ifc4cc7c4b94fe9f7e402b39ca4f28952dcafd588
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
|
|
|
|
|
|
| |
Task-number: QTBUG-84623
Change-Id: I994f1078399788566108e8605213f18e0ba722f5
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
|
|
|
|
|
|
|
|
| |
The current assumption is that setting clip: true will have no effect in
a scene rendered with RenderMode3D. (2D item tree under a 3D node)
Change-Id: I81ca1fcc04c7f4af37a03fd48dc95ea307989e98
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
|
|
|
|
|
|
|
|
|
| |
QPointF is only 8 bytes if qreal is a float. Use QVector2D instead,
which always contains floats.
Change-Id: I342a88bd5f1cd8b0aa54308291852418cfbd0009
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
|
|
|
|
|
|
| |
Task-number: QTBUG-84623
Change-Id: Ia665b789bbc875c26672abd7e0f8b0d9fe45d22b
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
|
|
|
|
|
| |
Change-Id: Ic23a944ec273ddf7834a6add128c9c0413d865ff
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
|
|
|
|
|
|
| |
Task-number: QTBUG-84623
Change-Id: Ia08376a8547110993bd39bcff17a49e059d40fde
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
|
|
|
|
|
|
| |
Task-number: QTBUG-84623
Change-Id: I150867f256a1e9f30d66e8b6d8cde047d7b6dbdf
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
|
|
|
|
|
|
| |
Task-number: QTBUG-84623
Change-Id: I89e0154447b6b82b22c90faa60cfc5262cf3d658
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
|
|
|
|
|
|
|
|
| |
...and remove Angle special case.
Task-number: QTBUG-84623
Change-Id: Icf3eb4ef4508519aa2144b667220d33155569b7f
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
|
|
|
|
|
|
| |
Task-number: QTBUG-84623
Change-Id: I5cf3c0db01b0c519f803fd49be820a910881dcff
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
|
|
|
|
|
|
|
|
| |
Also remove a misleading comment.
Task-number: QTBUG-84623
Change-Id: Ia3f88e3af80f0d5de95f951cb637550c0b14381f
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Setting a dynamic state on the command buffer is an error if the pipeline
was not created with the appropriate flag.
In the depth post pass the pipeline's flags do not reflect the modifications
from the materials' updateGraphicsPipeline(). So we should not set the
appropriate dynamic state either. (blending has no relevance for the depth
output anyway)
Change-Id: Ifedae1f5175ac4f1905dec4b7a5c305417234808
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
One can now do rc->createRenderer(QSGRenderContext::RenderMode3D) in Quick3D.
By default nothing changes, both QQuickWindow and QSGRhiLayer default to
either RenderMode2D or RenderMode2DNoDepthBuffer, depending on
QSG_NO_DEPTH_BUFFER. (the environment variable handling is moved out of
qsgbatchrenderer.cpp however, leaving it up to whoever is creating the
renderer to passing the appropriate flag)
The RenderMode3D mode is a modified version of the QSG_NO_DEPTH_BUFFER case:
only alpha batches are used, which are then rendered back to front. The
difference is that this is done with depth test on (no write), so the
2D content gets depth tested against whatever is already in the depth buffer.
Then, there's an additional depth "post pass" to fill the depth buffer with the
2D content. This must be separate from the color-write enabled stage because
otherwise unavoidable Z fighting would occur. By filling the depth buffer,
other 3D or 2D content, that is rendered afterwards, can depth test correctly
against the 2D elements rendered here.
customRenderMode and related functions are renamed to visualization
(because that's what it is about), in order to prevent confusing name
clashes.
Change-Id: I0d43b273e0a8020af05a652a236c0ad5fb150685
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
|
|
|
|
|
|
|
|
|
|
| |
Relies on QMatrix4x4 exposing the flags via a \internal public function.
The m[a][b] access can be replaced with constData()[4*a+b].
Fixes: QTBUG-82670
Change-Id: I39145b202cf133ad5a712cab2796ac97feddb6a6
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
|