33 Commits

Author SHA1 Message Date
Laszlo Agocs
1dd8b5ceec rhi: Make it a QPA-style private but semi-public API
qrhi.h, qshader.h, qshaderdescription.h (and qshaderbaker.h from
shadertools; done separately) become "RHI APIs", following the concept
of QPA APIs.

Mirror completely what is done for QPA headers, but using the "rhi"
prefix for the headers. This involves updating syncqt to handle the
new category of headers. (a note on the regex: matching everything
starting with "qrhi" is not acceptable due to incorrectly matching
existing and future headers, hence specifying the four header names
explicitly)

There is going to be one difference to QPA: the documentation for
everything RHI is going to be public and part of the regular docs, not
hidden with \internal.

In addition to the header renaming and adding the comments and
documentation notes and warnings, there is one significant change
here: there is no longer a need to do API-specific includes, such as
qrhid3d11[_p].h, qrhivulkan[_p].h, etc. These are simply merged into a
single header that is then included from qrhi.h. This means that users
within Qt, and any future applications can just do #include
<rhi/qrhi.h> (or rhi/qshader.h if the QRhi stuff is not relevant), no
other headers are needed.

There are no changes to functionality in this patch. Only the
documentation is expanded, quite a lot, to eliminate all qdoc warnings
and make the generated API docs complete. An example, with a quite
extensive doc page is added as well.

Task-number: QTBUG-113331
Change-Id: I91c749826348f14320cb335b1c83e9d1ea2b1d8b
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2023-05-21 15:42:58 +02:00
Laszlo Agocs
0b20f243f7 Modernize the VK_EXT_debug_utils callback
...as suggested by review comments.

Switching to std::function implies that we cannot easily
do the install-remove pattern anymore as there is no way to
compare an std::function to something other than null. Instead
of making it more complicated by returning a key or something
like that, change the remove function to a clear (that now clears
both the legacy VK_EXT_debug_report and the new VK_EXT_debug_utils
callback lists).

Also add a missing call that registers the new-style callbacks that
are installed before create().

Pick-to: 6.5
Change-Id: I66c1dd8e8dcc8eee0f5eb9671f94c2c80319dcaf
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Kristoffer Skau <kristoffer.skau@qt.io>
Reviewed-by: Christian Strømme <christian.stromme@qt.io>
2023-02-02 14:57:18 +01:00
Kai Köhne
1c62e821ba Doc: Show signatures of typedef's
qdoc doesn't do this by default.

Pick-to: 6.5
Change-Id: Idd4885be2fdac951b2ed555088f9b3f7989157ab
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
2023-01-12 10:05:53 +01:00
Kai Köhne
cb534ec58f Doc: Document further GUI API as new in 6.5
Pick-to: 6.5
Change-Id: I83402aec120a2f6a78b245029b94d3519f94d7f3
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
2023-01-12 10:05:53 +01:00
Laszlo Agocs
b018bc6e2d vulkan: Add flag to opt out from enumerating Portability phys.devices
Task-number: QTBUG-106912
Change-Id: I1cb4adae4bed62f31d781a89a03b70885411f91f
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
2022-09-26 15:31:59 +02:00
Laszlo Agocs
7fbc741d10 vulkan: Re-enable VK_KHR_portability drivers
The Vulkan loader as of SDK 1.3.216 and MoltenVK decided that
all existing applications need to stop working with
non-conformant Vulkan implementations such as MoltenVK, unless
they start specifying the right soup of instance flags, extensions,
and device extensions.

Set VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR in
VkInstanceCreateInfo::flags.

Automatically request VK_KHR_portability_enumeration, if supported, on
the instance.

This handles the instance side. On the device side we can add support
in QRhi so Qt Quick continues to work with MoltenVK. This involves
requesting VK_KHR_portability_subset on the device whenever the
extension is reported as supported (not doing so would be an error)
However, applications creating their own VkDevice will need to take
care of this themselves.

This device extension requires VK_KHR_get_physical_device_properties2
on the instance (which QRhi does not control). This is no problem with
Qt Quick as that already does this automatically, but in the unlikely
case of wrapping an existing VkInstance in QVulkanInstance it will be
up to the creator of VkInstance to enable that as well.

Pick-to: 6.4 6.3 6.2
Fixes: QTBUG-106912
Change-Id: Idaf277549b3ec982e99bfc49e4ad6a67976c141a
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
2022-09-26 15:31:59 +02:00
Laszlo Agocs
595526e446 vulkan: Port to VK_EXT_debug_utils
Fixes: QTBUG-89762
Change-Id: Ie32043578968cbeda7c7f87990b98c10f5d06ff8
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2022-08-10 09:09:36 +02:00
Kai Köhne
74ed70f17a Doc: Add default value for seed param to all qHash overloads
Pick-to: 6.4
Change-Id: I4d559ccd60ec54d2584dceecaece7e0899c0eea9
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
2022-07-20 13:15:57 +02:00
Lucie Gérard
05fc3aef53 Use SPDX license identifiers
Replace the current license disclaimer in files by
a SPDX-License-Identifier.
Files that have to be modified by hand are modified.
License files are organized under LICENSES directory.

Task-number: QTBUG-67283
Change-Id: Id880c92784c40f3bbde861c0d93f58151c18b9f1
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
2022-05-16 16:37:38 +02:00
JiDe Zhang
84491e5551 Export the QVulkanInstancePrivate class
When needs by the QVulkanInstance::setVkInstance to use a existing
VkInstance to a QQuickWindow, the VkInstance maybe is from a non Qt
render system, in the case, the QPlatformVulkanInstance object of
QVulkanInstance is can't create from the QPA, the all vulkan information
is need get from the VkInstance owner(eg, getInstanceProcAddr). But
providing it with a public interface is not a good idea, so by exporting
a private class, you can use a private interface where needed to achieve
the above purpose.

Task-number: QTBUG-103021
Change-Id: I0312adcf55cfd7d49889ed112ab237c0b3ab3ef6
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
2022-05-04 20:14:49 +08:00
Topi Reinio
b99c08dd4e Doc: Use \inmodule for all classes and headers
QDoc made some assumptions about the module a class/header belongs to,
based on the source file path. This feature is rather error-prone and
unnecessarily complex and will be removed from QDoc.

Define modules explicitly to avoid documentation warnings when this
removal happens.

Pick-to: 6.2 6.3
Change-Id: I7947d197db5ac36c12e816caa19bb2f74eda8849
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Venugopal Shivashankar <Venugopal.Shivashankar@qt.io>
2022-01-17 17:23:50 +00:00
Volker Hilsheimer
69dcdbc8da Make getter const, add const overloads
The supportedApiVersions member is new in Qt 6.1, make it const.

We can't change supportedLayers and supportedExtensions, but we can
add const overloads that call the non-const version for now. This
way, those APIs can also be called on const QVulkanInstance
instances or references.

Addresses header review comment.

Pick-to: 6.1
Change-Id: Ie99d74f62cad72990b42566e56234b9c686e86de
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
2021-03-29 11:58:52 +01:00
Laszlo Agocs
c6d6029909 Update QVulkan(Device)Functions to Vulkan 1.2
This also needs improvements to qvkgen. What we get with this patch
are the Vulkan 1.1 and 1.2 core API's additional 11 instance-level
and 30 device-level commands present in QVulkanFunctions and
QVulkanDeviceFunctions.

All of these are attempted to be resolved upon construction. When the
implementation does not return a valid function pointer for some of them
(e.g. because it is a Vulkan 1.0 instance or physical device), calling
the corresponding wrapper functions will lead to unspecified behavior.
This is in line with how QOpenGLExtraFunctions works. The simple
autotest added to exercise some Vulkan 1.1 APIs demonstrates this in
action.

The member functions in the generated qvulkan(device)functions header
and source files are ifdefed by VK_VERSION_1_{0,1,2}. This is essential
because otherwise a Qt build made on a system with Vulkan 1.2
headers would cause compilation breaks in application build environments
with Vulkan 1.0/1.1 headers when including qvulkanfunctions.h (due to
missing the 1.1/1.2 types and constants, some of which are used in the
function prototypes). In practice this should be alright - the only
caveat to keep in mind is that the Qt builds meant to be distributed
to a wide variety of systems need to be made with a sufficiently new
version of the Vulkan headers installed, just to ensure that the
1.1 and 1.2 wrapper functions are compiled into the Qt libraries.

Task-number: QTBUG-90219
Change-Id: I48360a8a2e915d2709fe82993f65e99b2ccd5d53
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
2021-01-19 14:17:55 +01:00
Laszlo Agocs
7d378bd780 vulkan: Add instance-level version getter
...as described in the Vulkan >= 1.1 spec. One can now call
supportedApiVersion() (before create(), similarly to the other
supported* functions) to determine the available Vulkan
(instance-level) version.

Fixes: QTBUG-90333
Change-Id: Ibe8482402b7f07e4abc48c88252ff0365e4e2faa
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
2021-01-18 13:21:15 +01:00
Jarek Kobus
471e4fcb22 Use QList instead of QVector in gui implementation
Task-number: QTBUG-84469
Change-Id: I366e845249203d80d640355a7780ac2f91a762f1
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
2020-07-07 20:35:05 +02:00
Laszlo Agocs
ed231455cc Relax tst_qvulkan::vulkanVersionRequest to make it compatible with 1.1
The Vulkan spec changed the behavior for VkApplicationInfo::apiVersion
in 1.1, conveniently breaking compatibility with all existing 1.0 logic.

We can no longer assume that the 1.0 behavior, which was failing instance
creation with VK_ERROR_INCOMPATIBLE_DRIVER for an unsupported version,
is always in place. So do not rely on this in the test, and add a
reminder in QVulkanInstance docs as well.

Fixes: QTBUG-85040
Change-Id: I8f5c7a7830877b72d106c444aebfaea191083ee0
Reviewed-by: Christian Strømme <christian.stromme@qt.io>
2020-06-15 15:33:46 +02:00
Lars Knoll
c6cdf38e75 Change qHash() to work with size_t instead of uint
This is required, so that QHash and QSet can hold more
than 2^32 items on 64 bit platforms.

The actual hashing functions for strings are still 32bit, this will
be changed in a follow-up commit.

Change-Id: I4372125252486075ff3a0b45ecfa818359fe103b
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2020-04-09 20:03:25 +02:00
Laszlo Agocs
eff6f77c1a Add since 5.15 to new QVulkanInstance function
Change-Id: Ib1fb6186a8c76d6848d5eda1756e7749383dae40
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
2020-03-03 18:25:57 +01:00
Allan Sandfeld Jensen
ece0c0a5e7 Tidy nullptr usage
Move away from using 0 as pointer literal.

Done using clang-tidy. This is not complete as
run-clang-tidy can't handle all of qtbase in one go.

Change-Id: I1076a21f32aac0dab078af6f175f7508145eece0
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2019-12-06 12:13:20 +01:00
Friedemann Kleint
2c871dfd38 Avoid initializing QFlags with 0 or nullptr in further cases
Amends qtbase/af2daafde72db02454d24b7d691aa6861525ab99.
Where applicable, port over to member initialization, thus also
fixing nullptr warnings.

Change-Id: Iaaf2dbbbcf2952253390b8839fd15a1b17be32c0
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
2019-11-22 20:43:55 +01:00
Johan Klokkhammer Helsing
7a3d647bab Vulkan: Add platform hooks before presenting
This allows the Wayland plugin to circumvent the frame callback handling of the
driver (which blocks until the frame is presented, potentially forever, if the
window is minimized).

Task-number: QTBUG-78000
Change-Id: Ia7d347019dfeae3bfcfad3d0cca3f4fffdc8c7a9
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
2019-10-08 12:16:51 +02:00
Laszlo Agocs
e85aa551eb vulkan: Add debug message filtering
[ChangeLog][QtGui] Added support for filtering Vulkan debug messages in
QVulkanInstance. This is especially useful for processing or suppressing
messages from the validation layers.

Change-Id: Idf0d7889085948daf5b1a53d2a9b11081e967609
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
2019-05-28 17:48:04 +02:00
Christian Ehrlicher
69f6cab0af Doc: replace even more null/0/nullptr with \nullptr macro
Try to replace all wordings like '.. to 0' with '.. to \nullptr'. Also
checked for 'null pointer' and similar.

Change-Id: I73341f59ba51e0798e816a8b1a532c7c7374b74a
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2019-05-08 12:48:32 +00:00
Christian Ehrlicher
a4b8e7141b QtGui/Network/OpenGl/Widgets/Xml: use \nullptr in documentation
Replace null and '\c nullptr' with \nullptr in the documentation.

Change-Id: I58934eea06943309ba895833f1991629870ab45b
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
2019-02-20 18:58:58 +00:00
Cristian Maureira-Fredes
1f6bfc2207 Doc: Move literal code block to a separate file
We need to override this snippet for the documentation
we generate for Qt for Python, and it is easier to have
it on a separate file.

Task-number: PYSIDE-801
Task-number: PYSIDE-691
Change-Id: Ideb5b6af25024279f167137d3b65660bb9c96a7e
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
2018-10-15 10:55:18 +00:00
Martin Smith
d893ccf6cd doc: Add missing template clauses in qvulkaninstance.cpp
Added a few missing template clauses to member functions
of QVulkanInstance<T>.

Change-Id: Ie13f7e97f6a2183ee66d7ea275bc56a2bc3588e8
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
2018-01-12 18:18:51 +00:00
Friedemann Kleint
015a4bb2f1 QVulkanInstance: Fix compilation with MSVC2013
Use assignment. Fixes:

vulkan\qvulkaninstance.cpp(811) : error C2061: syntax error : identifier 'd_ptr'
vulkan\qvulkaninstance.cpp(812) : warning C4551: function call missing argument list
vulkan\qvulkaninstance.cpp(813) : error C2659: '=' : function as left operand
vulkan\qvulkaninstance.cpp(814) : error C2440: 'return' : cannot convert from 'QVulkanDeviceFunctions *&(__cdecl *)(void)' to 'QVulkanDeviceFunctions *'
        There is no context in which this conversion is possible
vulkan\qvulkaninstance.cpp(832) : error C2061: syntax error : identifier 'd_ptr'
vulkan\qvulkaninstance.cpp(833) : error C2541: 'delete' : cannot delete objects that are not pointers
vulkan\qvulkaninstance.cpp(834) : error C2659: '=' : function as left operand

Change-Id: I859b141aa0cb24b1f85dc9f229262a4145651d7c
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
2017-10-14 07:27:08 +00:00
Marc Mutz
84b114e4f3 QVulkan{Layer,Extension}: various fixes
- don't export simple structs
- make op== non-member
- add op!= (required by EqualityComparable)
- add qHash() (should be defined by Qt for every EqualityComparable class)
- add Q_DECLARE_TYPEINFO

Change-Id: Ia14ac3fea48a6a0ad1d8993c9408afe77bbe6c1a
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
2017-04-05 11:49:20 +00:00
Andy Nichols
8a6b20eb0e Vulkan: Fix shadow builds
Change-Id: I6529c76109e2d668355524b9b0d65048a6d3df2e
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
2017-04-05 09:03:18 +00:00
Laszlo Agocs
8f93d6632a Fix some capitalization issues in QVulkan docs
...and remove see-alsoing wrappers that do not get a doc page.

Change-Id: Ia26aeef3c142b15a47e650dfc7f64ad7339cc80d
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
2017-04-04 12:01:31 +00:00
Martin Smith
6505062f58 doc: Fix several qdoc warnings in new software
This change fixes several common qdoc warnings in this new software.
However, because vulkan/vulkan.h is not always available, a few typedefs
were also added to define some standard vulkan types for clang to see
when vulkan.h is not available.

Change-Id: Id3db8c0a59b0c415829c1873a868aba0e84fe21c
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
2017-03-31 11:29:44 +00:00
Laszlo Agocs
108956b53e Fix up QVulkanInstance docs
Remove HTML tags.
Fix notes that predate the introduction of deviceFunctions().
Add a note about the function wrappers being auto-generated.

Change-Id: If99022ce74313c6bb33c3bb7bd6840b6cf26b3be
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
2017-03-22 08:53:24 +00:00
Laszlo Agocs
f1a23a5467 Basic Vulkan enablers
For Android, Windows and xcb. Verified on Win10 with NVIDIA, Win10
with AMD, Android with Tegra K1, Android aarch64 with Tegra X1, and
Linux aarch64 with Tegra X1 (Jetson TX1, L4T).

Introduce QPA-based Vulkan library loader, core function resolver, and
instance creation support. In addition to creating a new VkInstance,
adopting an existing one from an external engine is supported as well.

The WSI specifics are hidden in the platform plugins. Vulkan-capable
windows use the new surface type VulkanSurface and are associated with
a QVulkanInstance.

On Windows VULKAN_SDK is picked up automatically so finding vulkan.h
needs no additional manual steps once the LunarG SDK is installed.

[ChangeLog][QtGui] Added support for rendering to QWindow via the Vulkan
graphics API.

Task-number: QTBUG-55981
Change-Id: I50fa92d313fa440e0cc73939c6d7510ca317fbc9
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
2017-03-17 16:12:03 +00:00