Sur cette page

QVulkanInstance Class

La classe QVulkanInstance représente une instance Vulkan native, permettant le rendu Vulkan sur un site QSurface. Plus....

En-tête : #include <QVulkanInstance>
CMake : find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake : QT += gui

Types publics

DebugFilter
(since 6.5) enum DebugMessageSeverityFlag { VerboseSeverity, InfoSeverity, WarningSeverity, ErrorSeverity }
flags DebugMessageSeverityFlags
(since 6.5) enum DebugMessageTypeFlag { GeneralMessage, ValidationMessage, PerformanceMessage }
flags DebugMessageTypeFlags
(since 6.5) DebugUtilsFilter
enum Flag { NoDebugOutputRedirect, NoPortabilityDrivers }
flags Flags

Fonctions publiques

QVulkanInstance()
~QVulkanInstance()
QVersionNumber apiVersion() const
(since 6.5) void clearDebugOutputFilters()
bool create()
void destroy()
QVulkanDeviceFunctions *deviceFunctions(VkDevice device)
VkResult errorCode() const
QByteArrayList extensions() const
QVulkanInstance::Flags flags() const
QVulkanFunctions *functions() const
PFN_vkVoidFunction getInstanceProcAddr(const char *name)
(since 6.5) void installDebugOutputFilter(QVulkanInstance::DebugUtilsFilter filter)
void installDebugOutputFilter(QVulkanInstance::DebugFilter filter)
bool isValid() const
QByteArrayList layers() const
void presentAboutToBeQueued(QWindow *window)
void presentQueued(QWindow *window)
void removeDebugOutputFilter(QVulkanInstance::DebugFilter filter)
void resetDeviceFunctions(VkDevice device)
void setApiVersion(const QVersionNumber &vulkanVersion)
void setExtensions(const QByteArrayList &extensions)
void setFlags(QVulkanInstance::Flags flags)
void setLayers(const QByteArrayList &layers)
void setVkInstance(VkInstance existingVkInstance)
QVersionNumber supportedApiVersion() const
QVulkanInfoVector<QVulkanExtension> supportedExtensions() const
QVulkanInfoVector<QVulkanLayer> supportedLayers() const
bool supportsPresent(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, QWindow *window)
VkInstance vkInstance() const

Membres publics statiques

VkSurfaceKHR surfaceForWindow(QWindow *window)

Description détaillée

Vulkan est une API graphique et de calcul explicite multiplateforme. Cette classe permet de charger une bibliothèque Vulkan et de créer un site instance de manière multiplateforme. Pour une introduction aux instances Vulkan, voir la section 3.2 de la spécification.

Remarque : la prise en charge spécifique à la plateforme des instances Vulkan et des fenêtres avec des surfaces compatibles Vulkan est assurée par les différents plugins de plateforme. Cependant, tous ne prennent pas en charge Vulkan. Lorsqu'il est exécuté sur une telle plateforme, create() échoue et renvoie toujours false.

Note : La prise en charge de Vulkan peut être automatiquement désactivée pour une version donnée de Qt parce que les en-têtes Vulkan nécessaires ne sont pas disponibles au moment de la compilation. Lorsque c'est le cas, et que la sortie de configure indique que le support Vulkan est désactivé, les classes QVulkan* ne seront pas disponibles.

Note : Certaines fonctions ont changé leur signature entre les différentes révisions des en-têtes Vulkan. Lorsque Qt est construit et que seuls les en-têtes avec les anciennes signatures conflictuelles sont présents dans un système, le support de Vulkan sera désactivé. Il est recommandé d'utiliser les en-têtes de Vulkan 1.0.39 ou plus récents.

Initialisation

De la même manière que pour QOpenGLContext, la création d'une instance Vulkan n'a lieu que lors de l'appel à create(). Cela permet d'utiliser QVulkanInstance comme une simple variable membre tout en gardant le contrôle sur le moment de l'initialisation.

L'interrogation des couches et extensions prises en charge au niveau de l'instance est possible en appelant supportedLayers() et supportedExtensions(). Ces appels garantissent que la bibliothèque Vulkan est chargée et peuvent donc être appelés en toute sécurité avant create().

Les instances stockent l'état Vulkan par application et la création d'un objet VkInstance initialise la bibliothèque Vulkan. Dans la pratique, une seule instance sera construite au début de main(). L'objet reste ensuite en vie jusqu'à la sortie de l'application.

Chaque QWindow basé sur Vulkan doit être associé à une QVulkanInstance en appelant QWindow::setVulkanInstance(). Ainsi, un modèle d'application typique est le suivant :

    int main(int argc, char **argv)
    {
        QGuiApplication app(argc, argv);

        QVulkanInstance inst;
        if (!inst.create())
            return 1;

        // ...
        window->setVulkanInstance(&inst);
        window->show();

        return app.exec();
    }

Configuration

QVulkanInstance active automatiquement l'ensemble minimal d'extensions dont il a besoin sur l'instance nouvellement créée. En pratique, il s'agit de la famille d'extensions VK_KHR_*_surface.

Par défaut, la sortie de débogage de Vulkan, par exemple les messages des couches de validation, est acheminée vers qDebug(). Ceci peut être désactivé en passant le drapeau NoDebugOutputRedirect à setFlags() avant d' invoquer create().

Pour activer des couches et des extensions supplémentaires, fournissez la liste via setLayers() et setExtensions() avant d' invoquer create(). Lorsqu'une couche ou une extension donnée n'est pas signalée comme étant disponible par l'instance, la demande est ignorée. Après un appel réussi à create(), les valeurs renvoyées par des fonctions telles que layers() et extensions() reflètent les couches et extensions effectivement activées. Si nécessaire, par exemple pour éviter de demander des extensions qui entrent en conflit et qui feraient échouer la création de l'instance Vulkan, la liste des couches et des extensions réellement prises en charge peut être examinée via supportedLayers() et supportedExtensions() avant d'appeler create().

Par exemple, pour activer les couches de validation standard, on peut procéder comme suit :

    QVulkanInstance inst;

    // Enable validation layer, if supported. Messages go to qDebug by default.
    inst.setLayers({ "VK_LAYER_KHRONOS_validation" });

    bool ok = inst.create();
    if (!ok) {
        // ... Vulkan not available
    }

    if (!inst.layers().contains("VK_LAYER_KHRONOS_validation")) {
        // ... validation layer not available
    }

Ou, alternativement, prendre des décisions avant de tenter de créer une instance Vulkan :

    QVulkanInstance inst;

    if (inst.supportedLayers().contains("VK_LAYER_KHRONOS_validation")) {
        // ...
    }
    bool ok = inst.create();
    // ...

Adopter une instance existante

Par défaut, QVulkanInstance crée une nouvelle instance Vulkan. Lorsque vous travaillez avec des moteurs et des moteurs de rendu externes, cela peut parfois ne pas être souhaitable. Lorsqu'un handle VkInstance est déjà disponible, appelez setVkInstance() avant d'invoquer create(). De cette façon, aucune instance supplémentaire ne sera créée et QVulkanInstance ne possédera pas le handle.

Remarque : il incombe au composant qui crée l'instance externe de s'assurer que les extensions nécessaires sont activées. Ces extensions sont les suivantes VK_KHR_surface le code source de QVulkanInstance, le code source spécifique à WSI VK_KHR_*_surface qui est approprié pour la plate-forme en question, et VK_EXT_debug_utils au cas où la redirection de la sortie de débogage de QVulkanInstance est souhaitée.

Accès aux commandes principales de Vulkan

Pour accéder à la poignée VkInstance que QVulkanInstance enveloppe, appelez vkInstance(). Pour résoudre les fonctions Vulkan, appelez getInstanceProcAddr(). Pour les commandes Vulkan de base, la résolution manuelle n'est pas nécessaire car elles sont fournies par les objets QVulkanFunctions et QVulkanDeviceFunctions accessibles via functions() et deviceFunctions().

Remarque : QVulkanFunctions et QVulkanDeviceFunctions sont générés à partir des spécifications XML de l'API Vulkan lors de la construction des bibliothèques Qt. Aucune documentation n'est donc fournie à leur sujet. Ils contiennent les fonctions Vulkan 1.2 avec les mêmes signatures que celles décrites dans la documentation de l'API Vulkan.

Obtenir une surface Vulkan native pour une fenêtre

Les deux opérations spécifiques au système de fenêtrage les plus courantes sont l'obtention d'une surface (un handle VkSurfaceKHR ) pour une fenêtre et l'interrogation pour savoir si une famille de files d'attente donnée prend en charge la présentation à une surface donnée. Pour éviter les bits spécifiques à WSI dans les applications, ces opérations sont abstraites par QVulkanInstance et les couches QPA sous-jacentes.

Pour créer une surface Vulkan pour une fenêtre ou récupérer une surface existante, appelez surfaceForWindow(). La plupart des plateformes ne créeront la surface via VK_KHR_*_surface que lors du premier appel à surfaceForWindow(), mais il peut y avoir des variations spécifiques à la plateforme dans le comportement interne. Une fois la surface créée, les appels ultérieurs à surfaceForWindow() renvoient simplement le même handle. Cela correspond bien à la structure des sous-classes typiques de QWindow compatibles avec Vulkan.

Pour demander si une famille de files d'attente donnée au sein d'un dispositif physique peut être utilisée pour effectuer une présentation sur une surface donnée, appelez supportsPresent(). Cela encapsule à la fois les vérifications génériques vkGetPhysicalDeviceSurfaceSupportKHR et les vérifications spécifiques à WSI vkGetPhysicalDevice*PresentationSupportKHR.

Résolution des problèmes

En plus de renvoyer false à partir de create() ou 0 à partir de surfaceForWindow(), les erreurs critiques seront également affichées sur la sortie de débogage via qWarning(). Une journalisation supplémentaire peut être demandée en activant la sortie de débogage pour la catégorie de journalisation qt.vulkan. Le code d'erreur Vulkan actuel de la création de l'instance peut être récupéré en appelant errorCode() après un échec de create().

Dans certains cas particuliers, il peut être nécessaire de remplacer le nom de la bibliothèque Vulkan. Pour ce faire, il convient de définir la variable d'environnement QT_VULKAN_LIB.

Exemple

Voici les grandes lignes de la création d'un site QWindow compatible avec Vulkan :

class VulkanWindow : public QWindow
{public: VulkanWindow() { setSurfaceType(VulkanSurface) ; } void exposeEvent(QExposeEvent *) { if (isExposed()) { if (!m_initialized) { m_initialized = true; // initialize device, swapchain, etc.    QVulkanInstance *inst = vulkanInstance() ; QVulkanFunctions *f =  inst->functions() ; uint32_t devCount = 0;  f->vkEnumeratePhysicalDevices(inst->vkInstance(), &devCount, nullptr) ; // ... // construire la première imagerender() ; } } bool event()QEvent *e) { if (e->type() == QEvent::UpdateRequest) render() ; return QWindow::event(e) ; } void render() { // ...requestUpdate() ; // render en continu}private: bool m_initialized = false; } ;int main(int argc, char**argv) { QGuiApplication app(argc, argv) ; QVulkanInstance inst ; if (!inst.create())) {        qWarning("Vulkan not available");
       return 1; } VulkanWindow window ; window.showMaximized() ; return app.exec() ; }

Note : En plus de l'exposition, une implémentation de fenêtre qui se comporte bien devra également prendre en charge des événements supplémentaires tels que le redimensionnement et QPlatformSurfaceEvent afin d'assurer une gestion correcte de la chaîne d'échange. En outre, certaines plates-formes peuvent exiger la libération des ressources lorsqu'elles ne sont plus exposées.

Utilisation de liaisons C++ pour Vulkan

Il est également possible de combiner les outils Vulkan de Qt avec un wrapper Vulkan C++, par exemple Vulkan-Hpp. La condition préalable ici est que la couche C++ doit être capable d'adopter des handles natifs (VkInstance, VkSurfaceKHR) dans ses classes sans en prendre la propriété (puisque la propriété reste avec QVulkanInstance et QWindow). Considérons également ce qui suit :

  • Certains wrappers exigent que le support des exceptions soit activé. Qt n'utilise pas d'exceptions. Pour activer les exceptions pour l'application, ajoutez CONFIG += exceptions au fichier .pro.
  • Certains wrappers appellent directement des fonctions Vulkan, en supposant que vulkan.h fournisse des prototypes et que l'application soit liée à une bibliothèque Vulkan exportant tous les symboles nécessaires. Qt peut ne pas être lié directement à une bibliothèque Vulkan. Par conséquent, sur certaines plateformes, il peut être nécessaire d'ajouter LIBS += -lvulkan ou un fichier similaire dans le fichier .pro de l'application.
  • Les en-têtes des classes QVulkan peuvent inclure vulkan.h avec VK_NO_PROTOTYPES activé. Cela peut poser des problèmes dans les en-têtes des wrappers C++ qui s'appuient sur les prototypes. Par conséquent, dans le code de l'application, il peut être nécessaire d'inclure vulkan.hpp ou un fichier similaire avant les en-têtes QVulkan.

Voir également QVulkanFunctions et QSurface::SurfaceType.

Documentation sur les types de membres

QVulkanInstance::DebugFilter

Typedef pour les fonctions de rappel de filtrage de débogage, avec la signature suivante :

bool myDebugFilter(VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT objectType, uint64_t object,
                   size_t location, int32_t messageCode, const char *pLayerPrefix, const char *pMessage)

Renvoyer true supprime l'impression du message.

Remarque : à partir de Qt 6.5, VK_EXT_debug_utils est utilisé à la place de VK_EXT_debug_report, qui est obsolète. La signature du rappel est basée sur VK_EXT_debug_report. Par conséquent, on ne peut plus s'attendre à ce que tous les arguments soient valides. Évitez de vous fier à des arguments autres que pMessage, messageCode, et object. Les applications qui souhaitent accéder à toutes les données de rappel spécifiées dans VK_EXT_debug_utils doivent migrer vers DebugUtilsFilter.

Voir également installDebugOutputFilter() et removeDebugOutputFilter().

[since 6.5] enum QVulkanInstance::DebugMessageSeverityFlag
flags QVulkanInstance::DebugMessageSeverityFlags

ConstanteValeur
QVulkanInstance::VerboseSeverity0x01
QVulkanInstance::InfoSeverity0x02
QVulkanInstance::WarningSeverity0x04
QVulkanInstance::ErrorSeverity0x08

Cette énumération a été introduite dans Qt 6.5.

Le type DebugMessageSeverityFlags est un typedef pour QFlags<DebugMessageSeverityFlag>. Il stocke une combinaison OU de valeurs DebugMessageSeverityFlag.

[since 6.5] enum QVulkanInstance::DebugMessageTypeFlag
flags QVulkanInstance::DebugMessageTypeFlags

ConstanteValeur
QVulkanInstance::GeneralMessage0x01
QVulkanInstance::ValidationMessage0x02
QVulkanInstance::PerformanceMessage0x04

Cette énumération a été introduite dans Qt 6.5.

Le type DebugMessageTypeFlags est un typedef pour QFlags<DebugMessageTypeFlag>. Il stocke une combinaison OU de valeurs DebugMessageTypeFlag.

[alias, since 6.5] QVulkanInstance::DebugUtilsFilter

Typedef pour les fonctions de rappel de filtrage de débogage, avec la signature suivante :

std::function<bool(DebugMessageSeverityFlags severity, DebugMessageTypeFlags type, const void *message)>;

L'argument message est un pointeur sur la structure VkDebugUtilsMessengerCallbackDataEXT. Reportez-vous à la documentation de VK_EXT_debug_utils pour plus de détails. Les en-têtes Qt n'utilisent pas le type réel afin d'éviter d'introduire une dépendance sur les en-têtes Vulkan post-1.0.

Renvoyer true supprime l'impression du message.

Ce typedef a été introduit dans Qt 6.5.

Voir aussi installDebugOutputFilter() et removeDebugOutputFilter().

enum QVulkanInstance::Flag
flags QVulkanInstance::Flags

Cette énumération décrit les drapeaux qui peuvent être transmis à setFlags(). Ces drapeaux contrôlent le comportement de create().

ConstanteValeurDescription
QVulkanInstance::NoDebugOutputRedirect0x01Désactive la redirection de la sortie de débogage Vulkan (VK_EXT_debug_utils) vers qDebug.
QVulkanInstance::NoPortabilityDrivers (since Qt 6.5)0x02Désactive l'énumération des périphériques physiques marqués comme Vulkan Portability.

Le type Flags est un typedef pour QFlags<Flag>. Il stocke une combinaison OU de valeurs de drapeaux.

Documentation des fonctions membres

QVulkanInstance::QVulkanInstance()

Construit une nouvelle instance.

Remarque : aucune initialisation Vulkan n'est effectuée dans le constructeur.

[noexcept] QVulkanInstance::~QVulkanInstance()

Destructeur.

Remarque : vkInstance() renverra nullptr une fois l'instance détruite.

QVersionNumber QVulkanInstance::apiVersion() const

Renvoie la version de l'API Vulkan demandée contre laquelle l'application s'attend à fonctionner, ou un numéro de version nul si setApiVersion() n'a pas été appelé avant create().

Voir aussi setApiVersion().

[since 6.5] void QVulkanInstance::clearDebugOutputFilters()

Supprime toutes les fonctions de filtrage installées précédemment par installDebugOutputFilter().

Remarque : cette fonction peut être appelée avant create().

Cette fonction a été introduite dans Qt 6.5.

Voir aussi installDebugOutputFilter().

bool QVulkanInstance::create()

Initialise la bibliothèque Vulkan et crée une nouvelle instance Vulkan ou adopte une instance Vulkan existante.

Retourne true en cas de succès, false en cas d'erreur ou si Vulkan n'est pas pris en charge.

En cas de succès, le pointeur sur ce QVulkanInstance est récupérable via vkInstance().

L'instance et la bibliothèque Vulkan sont disponibles tant que cette QVulkanInstance existe, ou jusqu'à ce que destroy() soit appelé.

Par défaut, la VkInstance est créée avec le drapeau VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR. Cela signifie que les périphériques physiques de la portabilité Vulkan sont également énumérés. Si vous ne le souhaitez pas, définissez l'indicateur NoPortabilityDrivers.

void QVulkanInstance::destroy()

Détruit l'instance de la plate-forme sous-jacente, détruisant ainsi la VkInstance (lorsqu'elle en est propriétaire). L'objet QVulkanInstance est toujours réutilisable en appelant à nouveau create().

QVulkanDeviceFunctions *QVulkanInstance::deviceFunctions(VkDevice device)

Renvoie l'objet QVulkanDeviceFunctions qui expose le jeu de commandes Vulkan de base au niveau du périphérique et dont le fonctionnement multiplateforme est garanti.

Remarque : les fonctions Vulkan de l'objet retourné ne doivent être appelées qu'avec device ou un objet enfant (VkQueue, VkCommandBuffer) de device comme premier paramètre. En effet, ces fonctions sont résolues via vkGetDeviceProcAddr afin d'éviter la surcharge potentielle du dispatching interne.

Remarque : l'objet renvoyé est détenu et géré par QVulkanInstance. Ne le détruisez pas et ne le modifiez pas.

Remarque : L'objet est mis en cache, de sorte que le fait de rappeler cette fonction avec le même device est une opération peu coûteuse. Cependant, lorsque le périphérique est détruit, c'est à l'application de le notifier à QVulkanInstance en appelant resetDeviceFunctions().

Les fonctions de l'API Vulkan 1.0 seront toujours disponibles. Lorsqu'il s'agit de versions supérieures de Vulkan, telles que 1.1 et 1.2, l'objet QVulkanDeviceFunctions tente de résoudre les fonctions de l'API de base pour celles-ci également, mais si le périphérique physique Vulkan n'est pas pris en charge au moment de l'exécution, l'appel d'une fonction non prise en charge entraînera un comportement non spécifié. Pour activer correctement la prise en charge des versions de Vulkan supérieures à 1.0, il peut être nécessaire de définir une version d'API d'instance appropriée en appelant setApiVersion() avant create(). En outre, les applications sont censées vérifier l'adresse apiVersion du périphérique physique dans VkPhysicalDeviceProperties.

Voir également functions() et resetDeviceFunctions().

VkResult QVulkanInstance::errorCode() const

Renvoie le code d'erreur Vulkan après un échec de create(), VK_SUCCESS sinon.

La valeur est typiquement la valeur de retour de vkCreateInstance() (lors de la création d'une nouvelle instance Vulkan au lieu de l'adoption d'une instance existante), mais peut également être VK_NOT_READY si le plugin de la plateforme ne supporte pas Vulkan.

QByteArrayList QVulkanInstance::extensions() const

Renvoie les extensions d'instance activées, si create() a été appelé et a réussi. Les extensions demandées dans le cas contraire.

Voir aussi setExtensions().

QVulkanInstance::Flags QVulkanInstance::flags() const

Renvoie les drapeaux demandés.

Voir aussi setFlags().

QVulkanFunctions *QVulkanInstance::functions() const

Renvoie l'objet QVulkanFunctions correspondant qui expose le jeu de commandes Vulkan de base, à l'exclusion des fonctions au niveau du périphérique, et dont le fonctionnement est garanti pour toutes les plates-formes.

Remarque : l'objet renvoyé est détenu et géré par QVulkanInstance. Ne le détruisez pas et ne le modifiez pas.

Les fonctions de l'API Vulkan 1.0 seront toujours disponibles. Lorsqu'il s'agit de versions supérieures de Vulkan, telles que 1.1 et 1.2, l'objet QVulkanFunctions tentera de résoudre les fonctions de l'API de base pour celles-ci également, mais si l'implémentation de l'instance Vulkan au moment de l'exécution n'a pas de support pour celles-ci, l'appel d'une telle fonction non supportée conduira à un comportement non spécifié. En outre, pour activer correctement la prise en charge des versions de Vulkan supérieures à 1.0, il peut être nécessaire de définir une version d'API d'instance appropriée en appelant setApiVersion() avant create(). Pour demander la version au niveau de l'instance de l'implémentation Vulkan, appelez supportedApiVersion().

Voir également deviceFunctions() et supportedApiVersion().

PFN_vkVoidFunction QVulkanInstance::getInstanceProcAddr(const char *name)

Résout la fonction Vulkan avec l'adresse name.

Pour les commandes Vulkan de base, il est préférable d'utiliser les enveloppes de fonctions récupérables à partir de functions() et deviceFunctions().

[since 6.5] void QVulkanInstance::installDebugOutputFilter(QVulkanInstance::DebugUtilsFilter filter)

Installe une fonction filter qui est appelée pour chaque message de débogage Vulkan. Lorsque le callback renvoie true, le message est arrêté (filtré) et n'apparaîtra pas sur la sortie de débogage.

Remarque : le filtrage n'est efficace que lorsque NoDebugOutputRedirect n'est pas set. L'installation de filtres n'a aucun effet dans le cas contraire.

Remarque : Cette fonction peut être appelée avant create().

Cette fonction a été introduite dans Qt 6.5.

Voir aussi clearDebugOutputFilters().

void QVulkanInstance::installDebugOutputFilter(QVulkanInstance::DebugFilter filter)

Installe une fonction filter qui est appelée pour chaque message de débogage Vulkan. Lorsque le callback renvoie true, le message est arrêté (filtré) et n'apparaîtra pas sur la sortie de débogage.

Remarque : le filtrage n'est efficace que lorsque NoDebugOutputRedirect n'est pas set. L'installation de filtres n'a aucun effet dans le cas contraire.

Remarque : Cette fonction peut être appelée avant create().

Il s'agit d'une fonction surchargée.

Voir aussi removeDebugOutputFilter().

bool QVulkanInstance::isValid() const

Retourne vrai si create() a réussi et si l'instance est valide.

QByteArrayList QVulkanInstance::layers() const

Renvoie les couches d'instance activées, si create() a été appelé et a réussi. Les couches demandées dans le cas contraire.

Voir aussi setLayers().

void QVulkanInstance::presentAboutToBeQueued(QWindow *window)

Cette fonction doit être appelée par le moteur de rendu de l'application avant de mettre en file d'attente une opération présente pour window.

Alors que sur certaines plates-formes, il s'agit d'une opération sans effet, d'autres peuvent effectuer une synchronisation dépendant du système de fenêtrage. Par exemple, sur Wayland, cette fonction ajoutera l'envoi d'une requête wl_surface.frame afin d'empêcher le pilote de bloquer les fenêtres minimisées.

void QVulkanInstance::presentQueued(QWindow *window)

Cette fonction doit être appelée par le moteur de rendu de l'application après avoir mis en file d'attente une opération de présentation pour window.

Alors que sur certaines plates-formes, il n'y a pas d'opération, d'autres peuvent effectuer une synchronisation dépendant du système de fenêtrage. Par exemple, sur X11, cette fonction mettra à jour _NET_WM_SYNC_REQUEST_COUNTER.

void QVulkanInstance::removeDebugOutputFilter(QVulkanInstance::DebugFilter filter)

Supprime une fonction filter précédemment installée par installDebugOutputFilter().

Remarque : cette fonction peut être appelée avant create().

Voir aussi installDebugOutputFilter().

void QVulkanInstance::resetDeviceFunctions(VkDevice device)

Invalide et détruit l'objet QVulkanDeviceFunctions pour l'objet device donné.

Cette fonction doit être appelée lorsqu'un VkDevice, pour lequel deviceFunctions() a été appelé, est détruit alors que l'application a l'intention de continuer à fonctionner, en créant éventuellement un nouveau périphérique Vulkan logique par la suite.

Il n'est pas nécessaire d'appeler cette fonction avant de détruire le QVulkanInstance puisque le nettoyage est alors effectué automatiquement.

Voir aussi deviceFunctions().

void QVulkanInstance::setApiVersion(const QVersionNumber &vulkanVersion)

Spécifie la version la plus élevée de l'API Vulkan que l'application est conçue pour utiliser.

Par défaut, vulkanVersion vaut 0, ce qui correspond à Vulkan 1.0.

Remarque : cette fonction ne peut être appelée qu'avant create() et n'a aucun effet si elle est appelée après.

Remarque : sachez que Vulkan 1.1 modifie le comportement en ce qui concerne le champ de la version de l'API Vulkan. Dans Vulkan 1.0, la spécification d'un vulkanVersion non pris en charge entraînait l'échec de create() avec VK_ERROR_INCOMPATIBLE_DRIVER, comme l'exigeait la spécification. À partir de Vulkan 1.1, la spécification interdit cela, le pilote doit accepter n'importe quelle version sans faire échouer la création de l'instance.

Il est conseillé aux développeurs d'applications de se familiariser avec les notes apiVersion de la spécification Vulkan.

Voir également apiVersion() et supportedApiVersion().

void QVulkanInstance::setExtensions(const QByteArrayList &extensions)

Spécifie la liste des instances supplémentaires extensions à activer. Il est prudent de spécifier également les extensions non prises en charge, car elles sont ignorées lorsqu'elles ne sont pas prises en charge au moment de l'exécution.

Note : Les extensions liées à la surface requises par Qt XML (par exemple, VK_KHR_win32_surface) seront toujours ajoutées automatiquement, il n'est pas nécessaire de les inclure dans cette liste.

Remarque : VK_KHR_portability_enumeration est ajouté automatiquement à moins que le drapeau NoPortabilityDrivers ne soit activé. Cette valeur a été introduite dans Qt 6.5.

Note : Cette fonction ne peut être appelée qu'avant create() et n'a aucun effet si elle est appelée après.

Voir aussi extensions().

void QVulkanInstance::setFlags(QVulkanInstance::Flags flags)

Configure le comportement de create() en fonction de flags.

Remarque : cette fonction ne peut être appelée qu'avant create() et n'a aucun effet si elle est appelée après.

Voir aussi flags().

void QVulkanInstance::setLayers(const QByteArrayList &layers)

Spécifie la liste des instances layers à activer. Il est prudent de spécifier également les couches non prises en charge, car elles sont ignorées lorsqu'elles ne sont pas prises en charge au moment de l'exécution.

Remarque : cette fonction ne peut être appelée qu'avant create() et n'a aucun effet si elle est appelée après.

Voir aussi layers().

void QVulkanInstance::setVkInstance(VkInstance existingVkInstance)

Fait en sorte que QVulkanInstance adopte un handle VkInstance existant au lieu d'en créer un nouveau.

Note : existingVkInstance doit avoir au moins VK_KHR_surface et les extensions VK_KHR_*_surface spécifiques à la WSI activées. Pour s'assurer que la redirection de la sortie de débogage est fonctionnelle, VK_EXT_debug_utils est également nécessaire.

Remarque : cette fonction ne peut être appelée qu'avant create() et n'a aucun effet si elle est appelée après.

Voir également vkInstance().

QVersionNumber QVulkanInstance::supportedApiVersion() const

Renvoie la version de la fonctionnalité au niveau de l'instance prise en charge par l'implémentation Vulkan.

En pratique, il s'agit soit de la valeur renvoyée par vkEnumerateInstanceVersion, si cette fonction est disponible (avec Vulkan 1.1 et les versions plus récentes), soit de la valeur 1.0.

Les applications qui souhaitent utiliser les fonctionnalités et API Vulkan en fonction de la version Vulkan disponible au moment de l'exécution peuvent utiliser cette fonction pour déterminer la version à transmettre à setApiVersion() avant d'appeler create().

Remarque : cette fonction peut être appelée avant create().

Voir également setApiVersion().

QVulkanInfoVector<QVulkanExtension> QVulkanInstance::supportedExtensions() const

Renvoie la liste des extensions de niveau instance prises en charge.

Remarque : cette fonction peut être appelée avant create().

QVulkanInfoVector<QVulkanLayer> QVulkanInstance::supportedLayers() const

Renvoie la liste des couches de niveau instance prises en charge.

Remarque : cette fonction peut être appelée avant create().

bool QVulkanInstance::supportsPresent(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, QWindow *window)

Retourne true si la famille de files d'attente avec queueFamilyIndex au sein de physicalDevice prend en charge la présentation à window.

Appeler cette fonction lors de l'examen des files d'attente d'un périphérique Vulkan donné, afin de décider quelle file d'attente peut être utilisée pour effectuer la présentation.

[static] VkSurfaceKHR QVulkanInstance::surfaceForWindow(QWindow *window)

Crée ou récupère la poignée VkSurfaceKHR déjà existante pour le site window donné.

Retourne le handle de la surface Vulkan ou 0 en cas d'échec.

VkInstance QVulkanInstance::vkInstance() const

Renvoie le handle VkInstance que ce QVulkanInstance enveloppe, ou nullptr si create() n'a pas encore été appelé avec succès et qu'aucune instance existante n'a été fournie via setVkInstance().

Voir aussi setVkInstance().

© 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.