QVulkanInstance Class
La classe `QVulkanInstance` représente une instance Vulkan native, permettant le rendu Vulkan sur une ` QSurface`. En savoir plus...
| En-tête : | #include <QVulkanInstance> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake : | QT += gui |
- Liste de tous les membres, y compris les membres hérités
- QVulkanInstance fait partie de la catégorie « Rendu 3D ».
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 multiplateforme dédiée aux graphismes et au calcul. Cette classe permet de charger une bibliothèque Vulkan et de créer une instance « instance » de manière multiplateforme. Pour une introduction aux instances Vulkan, reportez-vous à la section 3.2 de la spécification.
Remarque : la prise en chargespécifique à chaque plateforme des instances Vulkan et des fenêtres dotées de surfaces compatibles avec Vulkan est assurée par les différents plugins de plateforme. Cependant, tous ne prennent pas en charge Vulkan. Lors de l'exécution sur une telle plateforme, la fonction ` create()` échouera et renverra systématiquement ` false`.
Remarque : la prise en chargede Vulkan peut être automatiquement désactivée pour une version donnée de Qt si les en-têtes Vulkan nécessaires ne sont pas disponibles au moment de la compilation. Dans ce cas, et si la sortie de ` configure ` indique que la prise en charge de Vulkan est désactivée, les classes `QVulkan*` ne seront pas disponibles.
Remarque : la signature decertaines fonctions a changé entre les différentes révisions des en-têtes Vulkan. Lors de la compilation de Qt, si seules des en-têtes comportant les anciennes signatures (incompatibles) sont présentes sur le système, la prise en charge de Vulkan sera désactivée. Il est recommandé d’utiliser les en-têtes de Vulkan 1.0.39 ou d’une version plus récente.
Initialisation
À l'instar de ` QOpenGLContext`, la création effective d'une instance Vulkan n'a lieu que lors de l'appel de ` create()`. Cela permet d'utiliser `QVulkanInstance` comme une simple variable membre tout en conservant le contrôle sur le moment où l'initialisation doit être effectuée.
Il est possible d’interroger les couches et extensions prises en charge au niveau de l’instance 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() également.
Les instances stockent l’état Vulkan propre à chaque application et la création d’un objet ` VkInstance ` initialise la bibliothèque Vulkan. En pratique, une seule instance est généralement construite dès le début de la fonction `main()`. L’objet reste alors actif jusqu’à la fermeture de l’application.
Chaque ` QWindow ` basé sur Vulkan doit être associé à un `QVulkanInstance` en appelant ` QWindow::setVulkanInstance()`. Ainsi, un modèle d’application typique se présente comme suit :
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 elle a besoin sur l’instance nouvellement créée. Concrètement, cela correspond à la famille d’extensions « VK_KHR_*_surface ».
Par défaut, les messages de débogage Vulkan, par exemple ceux provenant des couches de validation, sont redirigés vers ` qDebug()`. Cette fonctionnalité peut être désactivée en passant le drapeau ` NoDebugOutputRedirect ` à ` setFlags()` avant d’appeler ` create()`.
Pour activer des couches et des extensions supplémentaires, fournissez la liste via ` setLayers()` et ` setExtensions()` avant d’appeler ` create()`. Lorsqu’une couche ou une extension donnée n’est pas signalée comme disponible par l’instance, la requête est ignorée. Une fois l’appel à ` create()` réussi, les valeurs renvoyées par des fonctions telles que ` layers()` et ` extensions()` reflètent les couches et extensions réellement activées. Si nécessaire, par exemple pour éviter de demander des extensions incompatibles qui pourraient entraîner l’échec de la création de l’instance Vulkan, la liste des couches et extensions réellement prises en charge peut être consulté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, à défaut, pour 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();
// ...Utilisation d’une instance existante
Par défaut, QVulkanInstance crée une nouvelle instance Vulkan. Lorsque l’on travaille avec des moteurs et des moteurs de rendu externes, cela peut parfois ne pas être souhaitable. Lorsqu’un descripteur VkInstance est déjà disponible, appelez setVkInstance() avant d’invoquer create(). De cette manière, aucune instance supplémentaire ne sera créée, et QVulkanInstance ne détiendra pas le descripteur.
Remarque : il incombe au composant créant l’instance externe de s’assurer que les extensions nécessaires y sont activées. Il s’agit de : VK_KHR_surface, l’ VK_KHR_*_surface spécifique à WSI adapté à la plateforme en question, et VK_EXT_debug_utils au cas où la redirection de la sortie de débogage de QVulkanInstance serait souhaitée.
Accès aux commandes Vulkan de base
Pour accéder au descripteur VkInstance encapsulé par QVulkanInstance, appelez vkInstance(). Pour résoudre les fonctions Vulkan, appelez getInstanceProcAddr(). Pour les commandes Vulkan de base, aucune résolution manuelle n’est nécessaire, car elles sont fournies via les objets QVulkanFunctions et QVulkanDeviceFunctions accessibles via functions() et deviceFunctions().
Remarque : les fonctions ` QVulkanFunctions ` et ` QVulkanDeviceFunctions ` sont générées à partir des spécifications XML de l’API Vulkan lors de la compilation des bibliothèques Qt. Aucune documentation n’est donc fournie à leur sujet. Elles 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 courantes spécifiques au système de fenêtrage consistent à obtenir une surface (un descripteur VkSurfaceKHR ) pour une fenêtre et à vérifier si une famille de files d’attente donnée prend en charge l’affichage sur une surface donnée. Afin d’éviter la présence de code spécifique à WSI dans les applications, ces opérations sont gérées de manière abstraite 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 la fonction ` surfaceForWindow()`. La plupart des plateformes ne créent la surface via ` VK_KHR_*_surface ` que lors du premier appel à ` surfaceForWindow()`, mais il peut exister des variations spécifiques à chaque plateforme dans le comportement interne. Une fois la surface créée, les appels suivants à ` surfaceForWindow()` renvoient simplement le même descripteur. Cela s’adapte bien à la structure des sous-classes typiques de ` QWindow ` compatibles avec Vulkan.
Pour vérifier si une famille de files d’attente donnée au sein d’un périphérique physique peut être utilisée pour effectuer la présentation sur une surface donnée, appelez ` supportsPresent()`. Cette fonction encapsule à la fois les vérifications génériques ` vkGetPhysicalDeviceSurfaceSupportKHR ` et celles spécifiques à WSI ` vkGetPhysicalDevice*PresentationSupportKHR `.
Dépannage
Outre le retour de la valeur « false » par la fonction create() ou « 0 » par la fonction surfaceForWindow(), les erreurs critiques seront également affichées dans la sortie de débogage via la fonction qWarning(). Il est possible de demander un journalisation supplémentaire en activant la sortie de débogage pour la catégorie de journalisation qt.vulkan. Le code d’erreur Vulkan réel issu de la création de l’instance peut être récupéré en appelant la fonction errorCode() après un échec de la fonction create().
Dans certains cas particuliers, il peut être nécessaire de redéfinir le nom de la bibliothèque Vulkan. Pour ce faire, il suffit de définir la variable d’environnement QT_VULKAN_LIB.
Exemple
Voici les grandes lignes de la création d'une variable d'environnement QWindow compatible avec Vulkan :
class VulkanWindow : public QWindow
{
public:
VulkanWindow() {
setSurfaceType(VulkanSurface);
}
void exposeEvent(QExposeEvent*) {
if (isExposed()) {
if (!m_initialized) {
m_initialized = true;
// initialisation du périphérique, de la chaîne d'échange, etc.
QVulkanInstance*inst = vulkanInstance();
QVulkanFunctions*f = inst->functions();
uint32_t devCount = 0;
f->vkEnumeratePhysicalDevices(inst->vkInstance(), &devCount, nullptr);
// ...
// construire la première image
render();
}
}
}
bool event(QEvent*e) {
if (e->type()== QEvent::UpdateRequest)
render();
return QWindow::event(e);
}
void render() {
// ...
requestUpdate(); // rendu 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();
}Remarque : outre la méthode ` expose`, une implémentation de fenêtre correcte devra également gérer des événements supplémentaires tels que le redimensionnement et la méthode ` QPlatformSurfaceEvent ` afin d’assurer une gestion adéquate de la chaîne d’échange. De plus, certaines plateformes peuvent exiger la libération des ressources lorsque la fenêtre n’est plus exposée.
Utilisation des liaisons C++ pour Vulkan
Il est également possible de combiner les modules d’activation Vulkan de Qt avec un wrapper Vulkan en C++, par exemple Vulkan-Hpp. La condition préalable est que la couche C++ soit capable d’adopter des descripteurs natifs (VkInstance, VkSurfaceKHR) dans ses classes sans en prendre la propriété (puisque celle-ci reste détenue par QVulkanInstance et QWindow). Il convient également de prendre en compte ce qui suit :
- Certains wrappers nécessitent que la gestion des exceptions soit activée. Qt n’utilise pas les exceptions. Pour activer les exceptions pour l’application, ajoutez
CONFIG += exceptionsau fichier.pro. - Certains wrappers appellent directement les fonctions Vulkan, en partant du principe qu’
vulkan.hfournit les prototypes et que l’application est liée à une bibliothèque Vulkan exportant tous les symboles nécessaires. Qt ne peut pas lier directement à une bibliothèque Vulkan. Par conséquent, sur certaines plateformes, il peut être nécessaire d’ajouterLIBS += -lvulkanou une instruction similaire dans le fichier.prode l’application. - Les en-têtes des classes QVulkan peuvent inclure
vulkan.hlorsque l'optionVK_NO_PROTOTYPESest activée. Cela peut poser des problèmes dans les en-têtes des wrappers C++ qui s'appuient sur ces prototypes. Il peut donc s'avérer nécessaire, dans le code de l'application, d'inclurevulkan.hppou une directive similaire avant n'importe quel en-tête QVulkan.
Considérations de sécurité
L'implémentation de Vulkan, c'est-à-dire le chargeur Vulkan, les pilotes et toutes les couches activées, est une dépendance de plateforme de confiance, intégrée au processus. Qt la charge et l'appelle directement, sans aucun bac à sable ni vérification, de la même manière qu'il traite l'implémentation OpenGL.
Toutes les données utilisées par `QVulkanInstance` et les classes qui s’appuient sur celle-ci, telles que ` QVulkanWindow ` et ` QRhi ` avec leur backend Vulkan, sont censées être du contenu fiable. Cela inclut les noms de couches et d’extensions transmis à ` setLayers()` et ` setExtensions()`, un descripteur natif ` VkInstance ` obtenu via ` setVkInstance()`, ainsi que tout le contenu de rendu et les paramètres de commande Vulkan générés par l’application.
Avertissement : il est conseillé aux développeursd’applications d’examiner attentivement les implications potentielles avant d’autoriser l’intégration de contenu fourni par l’utilisateur qui ne fait pas partie de l’application et n’est pas sous leur contrôle.
Voir également QVulkanFunctions et QSurface::SurfaceType.
Documentation sur les types de membres
QVulkanInstance::DebugFilter
Définition de type 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)Le retour de ` true ` empêche l'affichage 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 de la fonction de rappel est basée sur `VK_EXT_debug_report`. Par conséquent, tous les arguments ne sont plus nécessairement valides. Évitez de vous fier à des arguments autres que ` pMessage`, ` messageCode` et ` object`. Les applications souhaitant accéder à toutes les données de la fonction de rappel telles que 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
| Constante | Valeur |
|---|---|
QVulkanInstance::VerboseSeverity | 0x01 |
QVulkanInstance::InfoSeverity | 0x02 |
QVulkanInstance::WarningSeverity | 0x04 |
QVulkanInstance::ErrorSeverity | 0x08 |
Cette énumération a été introduite dans Qt 6.5.
Le type `DebugMessageSeverityFlags` est une définition de type (`typedef`) pour `QFlags<DebugMessageSeverityFlag>`. Il stocke une combinaison (ou) de valeurs `DebugMessageSeverityFlag`.
[since 6.5] enum QVulkanInstance::DebugMessageTypeFlag
flags QVulkanInstance::DebugMessageTypeFlags
| Constante | Valeur |
|---|---|
QVulkanInstance::GeneralMessage | 0x01 |
QVulkanInstance::ValidationMessage | 0x02 |
QVulkanInstance::PerformanceMessage | 0x04 |
Cette énumération a été introduite dans Qt 6.5.
Le type DebugMessageTypeFlags est un typedef pour QFlags<DebugMessageTypeFlag>. Il stocke une combinaison OR de valeurs DebugMessageTypeFlag.
[alias, since 6.5] QVulkanInstance::DebugUtilsFilter
Définition de type 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 vers la structure `VkDebugUtilsMessengerCallbackDataEXT`. Pour plus de détails, consultez la documentation de VK_EXT_debug_utils. Les en-têtes Qt n'utilisent pas le type réel afin d'éviter de créer une dépendance vis-à-vis des en-têtes Vulkan postérieures à la version 1.0.
Le retour de ` true ` empêche l'affichage du message.
Ce typedef a été introduit dans Qt 6.5.
Voir également installDebugOutputFilter() et removeDebugOutputFilter().
enum QVulkanInstance::Flag
flags QVulkanInstance::Flags
Cette énumération décrit les indicateurs pouvant être transmis à la fonction ` setFlags()`. Ceux-ci contrôlent le comportement de la fonction ` create()`.
| Constante | Valeur | Description |
|---|---|---|
QVulkanInstance::NoDebugOutputRedirect | 0x01 | Désactive la redirection de la sortie de débogage Vulkan (VK_EXT_debug_utils) vers qDebug. |
QVulkanInstance::NoPortabilityDrivers (since Qt 6.5) | 0x02 | Désactive l’énumération des périphériques physiques marqués comme « Vulkan Portability ». |
Le type Flags est une définition de type (typedef) pour QFlags<Flag>. Il stocke une combinaison OR de valeurs Flag.
Documentation des fonctions membres
QVulkanInstance::QVulkanInstance()
Crée une nouvelle instance.
Remarque : aucune initialisation Vulkan n'est effectuée dans le constructeur.
[noexcept] QVulkanInstance::~QVulkanInstance()
Destructeur.
Remarque : la fonction ` vkInstance()` renverra ` nullptr ` une fois l'instance détruite.
QVersionNumber QVulkanInstance::apiVersion() const
Renvoie la version de l'API Vulkan demandée, celle sur laquelle l'application s'attend à fonctionner, ou un numéro de version nul si la fonction setApiVersion() n'a pas été appelée avant create().
Voir également setApiVersion().
[since 6.5] void QVulkanInstance::clearDebugOutputFilters()
Supprime toutes les fonctions de filtrage précédemment installées par la fonction 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 reprend une instance existante.
Renvoie « true » en cas de réussite, « false » en cas d'erreur ou lorsque Vulkan n'est pas pris en charge.
En cas de réussite, le pointeur vers cette instance de Vulkan ( QVulkanInstance ) peut être récupéré via la fonction ` vkInstance()`.
L’instance et la bibliothèque Vulkan sont disponibles tant que cette instance ` QVulkanInstance ` existe, ou jusqu’à ce que la fonction ` destroy()` soit appelée.
Par défaut, l’instance VkInstance est créée avec le drapeau VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR activé. Cela signifie que les périphériques physiques de Vulkan Portability sont également énumérés. Si cela n’est pas souhaité, activez le drapeau NoPortabilityDrivers.
void QVulkanInstance::destroy()
Supprime l'instance de la plateforme sous-jacente, ce qui entraîne la suppression de l'instance VkInstance (si celle-ci est détenue). L'objet QVulkanInstance reste réutilisable en appelant à nouveau la méthode create().
QVulkanDeviceFunctions *QVulkanInstance::deviceFunctions(VkDevice device)
Renvoie l'objet ` QVulkanDeviceFunctions ` qui expose l'ensemble de commandes Vulkan de base au niveau du périphérique et dont le fonctionnement est garanti sur toutes les plateformes.
Remarque : les fonctions Vulkan de l’objet renvoyé 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 liée à la distribution interne.
Remarque : l’objet renvoyé appartient à l’ QVulkanInstance et est géré par celui-ci. Ne le détruisez pas et ne le modifiez pas.
Remarque : l’objet est mis en cache ; l’appel de cette fonction avec le même device est donc une opération peu coûteuse. Cependant, lorsque le périphérique est détruit, il appartient à l’application d’en informer l’ QVulkanInstance en appelant resetDeviceFunctions().
Les fonctions de l’API principale de Vulkan 1.0 seront toujours disponibles. En ce qui concerne les versions supérieures de Vulkan, telles que 1.1 et 1.2, l’objet ` QVulkanDeviceFunctions ` tentera également de résoudre les fonctions de l’API de base pour celles-ci, mais si le périphérique physique Vulkan ne prend pas en charge ces versions au moment de l’exécution, l’appel de toute fonction non prise en charge entraînera un comportement indéfini. 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()`. De plus, les applications doivent vérifier la propriété ` 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 appel create() ayant échoué ; sinon, renvoie VK_SUCCESS.
Cette valeur correspond généralement à la valeur de retour de vkCreateInstance() (lors de la création d’une nouvelle instance Vulkan plutôt que de l’adoption d’une instance existante), mais peut également être « VK_NOT_READY » si le plugin de la plateforme ne prend pas en charge Vulkan.
QByteArrayList QVulkanInstance::extensions() const
Renvoie les extensions d'instance activées, si la fonction create() a été appelée et s'est déroulée avec succès. Dans le cas contraire, elle renvoie les extensions demandées.
Voir aussi setExtensions().
QVulkanInstance::Flags QVulkanInstance::flags() const
Renvoie les indicateurs demandés.
Voir aussi setFlags().
QVulkanFunctions *QVulkanInstance::functions() const
Renvoie l'objet QVulkanFunctions correspondant qui expose l'ensemble des commandes Vulkan de base, à l'exclusion des fonctions au niveau du périphérique, et dont le fonctionnement est garanti sur toutes les plateformes.
Remarque : l’objet renvoyé appartient à l’ QVulkanInstance et est géré par celle-ci. Ne le détruisez pas et ne le modifiez pas.
Les fonctions de l’API principale de Vulkan 1.0 seront toujours disponibles. En ce qui concerne les versions supérieures de Vulkan, telles que 1.1 et 1.2, l’objet ` QVulkanFunctions ` tentera également de résoudre les fonctions de l’API de base pour celles-ci, mais si l’implémentation de l’instance Vulkan en temps d’exécution ne les prend pas en charge, l’appel d’une telle fonction non prise en charge entraînera un comportement indéfini. De plus, 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 appropriée de l’API d’instance en appelant ` setApiVersion()` avant ` create()`. Pour interroger la version au niveau de l’instance de l’implémentation de Vulkan, appelez ` supportedApiVersion()`.
Voir également deviceFunctions() et supportedApiVersion().
PFN_vkVoidFunction QVulkanInstance::getInstanceProcAddr(const char *name)
Résout la fonction Vulkan à l'aide de l'name fournie.
Pour les commandes Vulkan de base, privilégiez plutôt l'utilisation des wrappers de fonctions disponibles via functions() et deviceFunctions().
[since 6.5] void QVulkanInstance::installDebugOutputFilter(QVulkanInstance::DebugUtilsFilter filter)
Installe une fonction de rappel ( filter ) qui est appelée à chaque message de débogage Vulkan. Lorsque la fonction de rappel renvoie la valeur « true », le message est bloqué (filtré) et n'apparaîtra pas dans la sortie de débogage.
Remarque : le filtrage n’est effectif que si NoDebugOutputRedirect n’est pas set. Dans le cas contraire, l’installation de filtres n’a aucun effet.
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 de rappel ( filter ) qui est appelée pour chaque message de débogage Vulkan. Lorsque la fonction de rappel renvoie true, le message est bloqué (filtré) et n'apparaîtra pas dans la sortie de débogage.
Remarque : le filtrage n’est effectif que si ` NoDebugOutputRedirect ` n’est pas défini sur ` set`. Dans le cas contraire, l’installation de filtres n’a aucun effet.
Remarque : cette fonction peut être appelée avant create().
Il s’agit d’une fonction surchargée.
Voir aussi removeDebugOutputFilter().
bool QVulkanInstance::isValid() const
Renvoie « true » si la fonction ` create()` s'est déroulée correctement et si l'instance est valide.
QByteArrayList QVulkanInstance::layers() const
Renvoie les couches d'instance activées, si la fonction create() a été appelée et s'est déroulée avec succès. Dans le cas contraire, renvoie les couches demandées.
Voir également 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 de rendu pour window.
Si, sur certaines plateformes, cette fonction n'aura aucun effet, d'autres peuvent effectuer une synchronisation dépendant du système de fenêtrage. Par exemple, sous Wayland, cela ajoutera l'envoi d'une requête wl_surface.frame afin d'empêcher le pilote de se bloquer pour 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 rendu pour window.
Si, sur certaines plateformes, cette fonction n'aura aucun effet, d'autres peuvent effectuer une synchronisation dépendante du système de fenêtrage. Par exemple, sous X11, cela mettra à jour _NET_WM_SYNC_REQUEST_COUNTER.
void QVulkanInstance::removeDebugOutputFilter(QVulkanInstance::DebugFilter filter)
Supprime une fonction « filter » précédemment installée par la fonction « installDebugOutputFilter() ».
Remarque : cette fonction peut être appelée avant create().
Voir également installDebugOutputFilter().
void QVulkanInstance::resetDeviceFunctions(VkDevice device)
Invalide et détruit l'objet ` QVulkanDeviceFunctions ` associé à l'device` spécifié.
Cette fonction doit être appelée lorsqu’un VkDevice, pour lequel la fonction deviceFunctions() a été appelée, est détruit alors que l’application prévoit de continuer à s’exécuter, éventuellement en créant un nouveau périphérique Vulkan logique ultérieurement.
Il n’est pas nécessaire d’appeler cette fonction avant de détruire l’ QVulkanInstance, car le nettoyage est alors effectué automatiquement.
Voir également deviceFunctions().
void QVulkanInstance::setApiVersion(const QVersionNumber &vulkanVersion)
Spécifie la version la plus récente de l'API Vulkan que l'application est conçue pour utiliser.
Par défaut, ` vulkanVersion ` est égal à 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 concernant le champ de version de l’API Vulkan. Dans Vulkan 1.0, la spécification imposait qu’une valeur ` vulkanVersion ` non prise en charge entraîne l’échec de la fonction ` create()` avec le message d’erreur « VK_ERROR_INCOMPATIBLE_DRIVER ». À partir de Vulkan 1.1, la spécification n’autorise plus cela : le pilote doit accepter n’importe quelle version sans interrompre la création de l’instance.
Il est conseillé aux développeurs d’applications de se familiariser avec les remarques relatives à l’ apiVersion s figurant dans la spécification Vulkan.
Voir également apiVersion() et supportedApiVersion().
void QVulkanInstance::setExtensions(const QByteArrayList &extensions)
Spécifie la liste des extensions d'instance supplémentaires extensions à activer. Vous pouvez sans risque spécifier des extensions non prises en charge, car celles-ci seront ignorées si elles ne sont pas prises en charge lors de l'exécution.
Remarque : les extensions liées aux surfaces requises par Qt (par exemple, ` VK_KHR_win32_surface`) seront toujours ajoutées automatiquement ; il n'est donc pas nécessaire de les inclure dans cette liste.
Remarque : l'VK_KHR_portability_enumeration est ajoutée automatiquement, sauf si le drapeau « NoPortabilityDrivers » est activé. Cette valeur a été introduite dans Qt 6.5.
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 ` extensions()`.
void QVulkanInstance::setFlags(QVulkanInstance::Flags flags)
Configure le comportement de la fonction ` create()` en fonction de l’ flags fournie.
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 flags().
void QVulkanInstance::setLayers(const QByteArrayList &layers)
Spécifie la liste des couches d'layers s d'instance à activer. Vous pouvez sans risque spécifier des couches non prises en charge, car celles-ci seront ignorées si elles ne sont pas prises en charge lors 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 également ` layers()`.
void QVulkanInstance::setVkInstance(VkInstance existingVkInstance)
Permet à la fonction ` QVulkanInstance ` d'utiliser un descripteur `VkInstance` existant au lieu d'en créer un nouveau.
Remarque : existingVkInstance doit disposer au minimum d’ VK_KHR_surface, et les extensions VK_KHR_*_surface spécifiques à WSI appropriées doivent être activées. Pour garantir le bon fonctionnement de la redirection des sorties de débogage, VK_EXT_debug_utils est également nécessaire.
Qt ne dispose d'aucun moyen d'activer des couches et des extensions sur une instance VkInstance déjà créée. Par conséquent, il incombe à l’appelant de s’assurer que existingVkInstance est adapté à une utilisation avec Qt. Si un rendu basé sur QRhi est impliqué, appelez QRhiVulkanInitParams::preferredInstanceExtensions() pour obtenir une liste supplémentaire d’extensions d’instance qui doivent être activées par le créateur de existingVkInstance, en plus des extensions mentionnées ci-dessus, à condition qu’elles soient disponibles et prises en charge par le système 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 vkInstance().
QVersionNumber QVulkanInstance::supportedApiVersion() const
Renvoie la version des fonctionnalités au niveau de l'instance prises en charge par l'implémentation de Vulkan.
En pratique, il s'agit soit de la valeur renvoyée par vkEnumerateInstanceVersion, si cette fonction est disponible (à partir de Vulkan 1.1), soit de 1.0.
Les applications qui souhaitent adapter l'utilisation des fonctionnalités et de l'API Vulkan en fonction de la version de Vulkan disponible au moment de l'exécution peuvent utiliser cette fonction pour déterminer la version à passer à ` 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 prises en charge au niveau de l'instance.
Remarque : cette fonction peut être appelée avant l'appel à ` create()`.
QVulkanInfoVector<QVulkanLayer> QVulkanInstance::supportedLayers() const
Renvoie la liste des couches prises en charge au niveau de l'instance.
Remarque : cette fonction peut être appelée avant ` create()`.
bool QVulkanInstance::supportsPresent(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, QWindow *window)
Renvoie « true » si la famille de files d'attente dont l'queueFamilyIndex, au sein de l'physicalDevice, prend en charge l'affichage via window.
Appelez cette fonction lorsque vous examinez les files d’attente d’un périphérique Vulkan donné, afin de déterminer 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 le descripteur « VkSurfaceKHR » existant pour l’ window donné.
Renvoie le descripteur de surface Vulkan ou 0 en cas d'échec.
VkInstance QVulkanInstance::vkInstance() const
Renvoie le descripteur VkInstance encapsulé par cette fonction QVulkanInstance, ou nullptr si la fonction create() n'a pas encore été appelée avec succès et qu'aucune instance existante n'a été fournie via la fonction setVkInstance().
Voir également 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.