QRhiVulkanInitParams Struct
Paramètres d'initialisation spécifiques à Vulkan. En savoir plus...
| En-tête : | #include <rhi/qrhi.h> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS GuiPrivate) target_link_libraries(mytarget PRIVATE Qt6::GuiPrivate) |
| qmake : | QT += gui-private |
| Depuis : | Qt 6.6 |
| Hérite de : | QRhiInitParams |
Variables publiques
| QByteArrayList | deviceExtensions |
| QVulkanInstance * | inst |
| QWindow * | window |
Membres publics statiques
| QByteArrayList | preferredExtensionsForImportedDevice() |
| QByteArrayList | preferredInstanceExtensions() |
Description détaillée
Remarque : il s'agit d'une API RHI dont la compatibilité n'est pas entièrement garantie ; consultez QRhi pour plus de détails.
Une application « QRhi » basée sur Vulkan nécessite au minimum une instance QVulkanInstance valide. Il incombe à l'utilisateur de s'assurer que celle-ci est disponible et initialisée. Cela s'effectue généralement dans la fonction main(), de la manière suivante :
int main(int argc, char **argv)
{
...
QVulkanInstance inst;
inst.setLayers({ "VK_LAYER_KHRONOS_validation" }); // for debugging only, not for release builds
inst.setExtensions(QRhiVulkanInitParams::preferredInstanceExtensions());
if (!inst.create())
qFatal("Vulkan not available");
...
}Cet exemple active les couches de validation Vulkan, lorsqu’elles sont disponibles, et active également les extensions au niveau de l’instance que QRhi signale comme souhaitables (telles que VK_KHR_get_physical_device_properties2), à condition qu’elles soient prises en charge par l’implémentation Vulkan au moment de l’exécution.
La première option est facultative et s’avère utile pendant la phase de développement, car QVulkanInstance redirige de manière pratique les messages et les avertissements vers qDebug. Évitez toutefois de l’activer dans les versions de production. La seconde option est vivement recommandée et est essentielle pour garantir le bon fonctionnement de certaines fonctionnalités (par exemple, QRhi::CustomInstanceStepRate).
Une fois cela fait, un ` QRhi ` basé sur Vulkan peut être créé en passant l’instance et une ` QWindow ` dont le type de surface est défini sur ` QSurface::VulkanSurface` :
QRhiVulkanInitParams params;
params.inst = vulkanInstance;
params.window = window;
rhi = QRhi::create(QRhi::Vulkan, ¶ms);La fenêtre est facultative et peut être omise. Cela n’est toutefois pas recommandé, car il n’est alors plus possible de garantir la prise en charge de l’affichage lors du choix d’une file d’attente graphique.
Remarque : même lorsqu’une fenêtre est spécifiée, des objets ` QRhiSwapChain ` peuvent également être créés pour d’autres fenêtres, à condition que leur propriété ` QWindow::surfaceType()` soit définie sur ` QSurface::VulkanSurface`.
Pour demander l’activation d’extensions supplémentaires sur le périphérique Vulkan, répertoriez-les dans ` deviceExtensions`. Cela peut s’avérer pertinent lors de l’intégration avec du code de rendu Vulkan natif.
La liste des extensions d’instance souhaitées par le backend doit être récupérée en appelant la fonction statique preferredInstanceExtensions() avant d’initialiser un QVulkanInstance. La liste renvoyée peut être transmise en toute sécurité à QVulkanInstance::setExtensions() telle quelle, car les extensions non prises en charge sont automatiquement filtrées. Si cette opération n’est pas effectuée, certaines fonctionnalités, telles que QRhi::CustomInstanceStepRate, peuvent être signalées comme non prises en charge, même si l’implémentation Vulkan du système prend en charge la fonctionnalité concernée.
Pour bénéficier de toutes les fonctionnalités, l’ QVulkanInstance e doit avoir l’API 1.1 activée, lorsqu’elle est disponible. Cela implique d’appeler ` QVulkanInstance::setApiVersion()` avec 1.1 ou une version supérieure chaque fois que ` QVulkanInstance::supportedApiVersion()` indique qu’au moins Vulkan 1.1 est pris en charge. Si cela n’est pas fait, certaines fonctionnalités, telles que QRhi::RenderTo3DTextureSlice, peuvent être signalées comme non prises en charge, même lorsque l’implémentation de Vulkan sur le système prend en charge Vulkan 1.1 ou une version plus récente.
Utilisation de périphériques Vulkan existants
Lors de l’interopérabilité avec un autre moteur graphique, il peut s’avérer nécessaire d’obtenir une instance ` QRhi ` utilisant le même périphérique Vulkan. Pour ce faire, il suffit de passer un pointeur vers un ` QRhiVulkanNativeHandles ` à la fonction ` QRhi::create()`.
Le périphérique physique doit toujours être défini sur une valeur non nulle. Si l’objectif est simplement de spécifier un périphérique physique, mais de laisser à ` QRhi` le soin de créer le reste du `VkDevice` et de la file d’attente, aucun autre membre de la structure n’a besoin d’être renseigné. C’est par exemple le cas lors de l’utilisation d’OpenXR.
Pour adopter un VkDevice existant, le champ device doit également être défini sur une valeur non nulle. De plus, l’index de la famille de files d’attente graphiques est obligatoire. L’index de la file d’attente est facultatif, car la valeur par défaut 0 convient souvent.
Il est également possible de spécifier un objet « command pool » existant. De même, il est possible d’utiliser `vmemAllocator` pour partager le même allocateur de mémoire Vulkan entre deux instances d’ QRhi.
QRhi ne prend possession d’aucun des objets externes.
Il est recommandé aux applications d’interroger la liste des extensions de périphérique souhaitées en appelant la fonction statique ` preferredExtensionsForImportedDevice()`, puis de les activer sur le `VkDevice`. Sinon, certaines fonctionnalités d’ QRhi s pourraient ne pas être disponibles.
Documentation des fonctions membres
[static] QByteArrayList QRhiVulkanInitParams::preferredExtensionsForImportedDevice()
Renvoie la liste des extensions de périphérique qui devraient être activées sur l'VkDevice lors de la création d'une instance ` QRhi ` basée sur Vulkan à partir d'un objet ` VkDevice ` créé en externe.
[static] QByteArrayList QRhiVulkanInitParams::preferredInstanceExtensions()
Renvoie la liste des extensions d'instance qui devraient être activées sur l'QVulkanInstance utilisé pour l'QRhi basée sur Vulkan.
La liste renvoyée peut être transmise en toute sécurité à ` QVulkanInstance::setExtensions()` telle quelle, car les extensions non prises en charge sont automatiquement filtrées.
Documentation sur les variables membres
QByteArrayList QRhiVulkanInitParams::deviceExtensions
Facultatif, vide par défaut. Liste des extensions de périphériques Vulkan à activer. Les extensions non prises en charge sont ignorées de manière transparente.
QVulkanInstance *QRhiVulkanInitParams::inst
L'QVulkanInstance, qui a déjà été mise en place avec succès created, est obligatoire.
QWindow *QRhiVulkanInitParams::window
Facultatif, mais recommandé lorsque l'on cible un QWindow.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.