QVulkanInstance Class

QVulkanInstanceクラスは、ネイティブVulkanインスタンスを表し、QSurface へのVulkanレンダリングを可能にします

Header: #include <QVulkanInstance>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui

パブリックタイプ

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

パブリック関数

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

静的パブリックメンバー

VkSurfaceKHR surfaceForWindow(QWindow *window)

詳細説明

Vulkanは、クロスプラットフォームの明示的なグラフィックスと計算APIです。このクラスは、クロスプラットフォームでVulkanライブラリをロードし、instance を作成するためのサポートを提供します。Vulkanインスタンスについては、仕様の3.2節を参照してください。

注: VulkanインスタンスとVulkan対応サーフェスを持つウィンドウのためのプラットフォーム固有のサポートは、様々なプラットフォームプラグインによって提供されます。ただし、それらのすべてがVulkanをサポートするわけではありません。そのようなプラットフォームで実行する場合、create() は失敗し、常にfalse を返します。

注意: ビルド時に必要なVulkanヘッダがないため、Vulkanサポートが自動的に無効になることがあります。このような場合、configure の出力が Vulkan サポートが無効であることを示している場合、QVulkan* クラスは使用できません。

注意: いくつかの関数は、様々なVulkanヘッダーのリビジョン間でシグネチャが変更されました。Qt をビルドする際に、古いシグネチャと競合するヘッダのみがシステムに存在する場合、Vulkan サポートは無効になります。Vulkan 1.0.39 以降のヘッダを使用することを推奨します。

初期化

QOpenGLContext と同様に、実際のVulkanインスタンスの作成は、create() を呼び出すときにのみ発生します。これにより、QVulkanInstanceをプレーンなメンバ変数として使用しながら、初期化を実行するタイミングを制御することができます。

サポートされているインスタンスレベルのレイヤーと拡張機能のクエリは、supportedLayers() とsupportedExtensions() を呼び出すことで可能です。これらはVulkanライブラリがロードされていることを保証するため、create ()の前にも安全に呼び出すことができます。

インスタンスはアプリケーションごとのVulkanステートを保存し、VkInstance オブジェクトを作成するとVulkanライブラリが初期化されます。実際には、通常main()の早い段階で単一のインスタンスが構築されます。その後、このオブジェクトはアプリケーションを終了するまで生き続けます。

すべてのVulkanベースのQWindowQWindow::setVulkanInstance ()を呼び出すことで、QVulkanInstanceに関連付ける必要があります。したがって、典型的なアプリケーションパターンは次のようになります:

    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();
    }

構成

QVulkanInstanceは、新しく作成されたインスタンス上で必要な最小限の拡張機能を自動的に有効にします。実際には、これは拡張機能のVK_KHR_*_surface ファミリを意味します。

デフォルトでは、Vulkanデバッグ出力(検証レイヤからのメッセージなど)は、qDebug ()にルーティングされます。これを無効にするには、create() を呼び出す前に、 setFlags() にフラグNoDebugOutputRedirect を渡します。

追加のレイヤーや拡張機能を有効にするには、create() を呼び出す前に、 setLayers() とsetExtensions() でリストを指定する。指定されたレイヤーまたは拡張がインスタンスから利用可能であると報告されな い場合、リクエストは無視される。create() の呼び出しに成功した後、layers() やextensions() などの関数から返される値は、実際に有効になっているレイヤーや拡張を反映している。必要な場合、たとえば、競合する拡張機能を要求しないようにするため、Vulkanインスタンスの作成に失敗する場合、create ()を呼び出す前に、supportedLayers ()とsupportedExtensions ()を介して、実際にサポートされているレイヤーと拡張機能のリストを調べることができます。

例えば、標準的な検証レイヤーを有効にするには、次のようにします:

    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
    }

あるいは、Vulkanインスタンスを作成する前に決定することもできます:

    QVulkanInstance inst;

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

既存のインスタンスの採用

デフォルトでは、QVulkanInstance は新しい Vulkan インスタンスを作成します。外部エンジンやレンダラーで作業する場合、これは望ましくない場合があります。すでにVkInstance ハンドルが利用可能な場合は、create() を呼び出す前にsetVkInstance() を呼び出します。こうすることで、追加のインスタンスは作成されず、QVulkanInstanceはハンドルを所有しなくなります。

注意: 必要な拡張機能が有効になっているかどうかは、外部インスタンスを作成するコンポーネント次第です。これらは以下の通りです:VK_KHR_surface VK_KHR_*_surface QVulkanInstanceのデバッグ出力リダイレクトが必要な場合は、VK_EXT_debug_utils

コアVulkanコマンドへのアクセス

QVulkanInstanceがラップしているVkInstance ハンドルにアクセスするには、vkInstance ()を呼び出します。Vulkan関数を解決するには、getInstanceProcAddr ()を呼び出します。コアVulkanコマンドについては、functions ()とdeviceFunctions ()を介してアクセス可能なQVulkanFunctionsQVulkanDeviceFunctions オブジェクトを介して提供されるため、手動で解決する必要はありません。

注: QVulkanFunctionsQVulkanDeviceFunctions は、Qt ライブラリをビルドする際に Vulkan API XML 仕様から生成されます。そのため、ドキュメントが提供されていません。これらには、Vulkan API ドキュメントで説明されているのと同じシグネチャを持つ Vulkan 1.2 関数が含まれています。

ウィンドウのネイティブ Vulkan サーフェスの取得

2つの一般的なウィンドウシステム固有の操作は、ウィンドウのサーフェス(VkSurfaceKHR ハンドル)を取得することと、指定されたキューファミリが指定されたサーフェスへの表示をサポートしているかどうかを問い合わせることです。アプリケーションでWSI固有のビットを回避するために、これらはQVulkanInstanceと基礎となるQPAレイヤによって抽象化されます。

ウィンドウ用のVulkanサーフェスを作成するか、既存のものを取得するには、surfaceForWindow ()を呼び出します。ほとんどのプラットフォームでは、最初にsurfaceForWindow() を呼び出したときにVK_KHR_*_surface を介してのみサーフェスが作成されますが、内部動作にはプラットフォーム固有のバリエーションがあるかもしれません。一度作成されると、その後のsurfaceForWindow() への呼び出しは同じハンドルを返すだけです。これは、典型的なVulkan対応のQWindow サブクラスの構造によく適合しています。

物理デバイス内の指定されたキューファミリーが、指定されたサーフェスへのプレゼンテーションを実行するために使用できるかどうかを問い合わせるには、supportsPresent ()を呼び出します。これは、一般的なvkGetPhysicalDeviceSurfaceSupportKHR と WSI 固有のvkGetPhysicalDevice*PresentationSupportKHR の両方のチェックをカプセル化します。

トラブルシューティング

create()からfalse 、またはsurfaceForWindow()から0 を返す他に、クリティカル・エラーはqWarning()を通じてデバッグ出力に出力される。追加のロギングは、ロギングカテゴリqt.vulkan のデバッグ出力を有効にすることで要求できます。インスタンス生成時の実際のVulkanエラーコードは、失敗したcreate()の後にerrorCode()を呼び出すことで取得できます。

特殊なケースでは、Vulkan ライブラリ名をオーバーライドする必要があります。これは、QT_VULKAN_LIB 環境変数を設定することで実現できます。

以下は、Vulkan対応のQWindow を作成する基本的な概要です:

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);
                // ...
                // build the first frame
                render();
            }
        }
    }

    bool event(QEvent *e) {
        if (e->type() == QEvent::UpdateRequest)
            render();
        return QWindow::event(e);
    }

    void render() {
       // ...
       requestUpdate(); // render continuously
    }

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: expose に加えて、お行儀の良いウィンドウ実装は、スワップチェーンの適切な管理を保証するために、resize やQPlatformSurfaceEvent のような追加イベントも処理する必要があります。さらに、プラットフォームによっては、公開されなくなったときにリソースを解放する必要があるかもしれません。

C++バインディングをVulkanに使用する

QtのVulkanイネーブラをC++のVulkanラッパー、例えばVulkan-Hppと組み合わせることも可能です。ここでの前提条件は、C++ レイヤーが所有権を持たずにネイティブハンドル(VkInstance、VkSurfaceKHR)をそのクラスで採用できることです(所有権は QVulkanInstance とQWindow に留まるため)。また、次のことも考慮してください:

  • ラッパーによっては例外サポートを有効にする必要があります。Qtは例外を使用しません。アプリケーションで例外を有効にするには、.pro ファイルにCONFIG += exceptions を追加します。
  • vulkan.h がプロトタイプを提供し、アプリケーションがすべての必要なシンボルをエクスポートする Vulkan ライブラリにリンクしている場合、一部のラッパーは Vulkan 関数を直接呼び出します。QtはVulkanライブラリに直接リンクしない場合があります。そのため、プラットフォームによっては、アプリケーションの.pro ファイルにLIBS += -lvulkan などを追加する必要があります。
  • QVulkanクラスのヘッダには、VK_NO_PROTOTYPES を有効にしたvulkan.h が含まれることがあります。これは、プロトタイプに依存するC++ラッパーヘッダーで問題を引き起こす可能性があります。したがって、アプリケーションコードでは、QVulkanヘッダーの前にvulkan.hpp または同様のものをインクルードする必要があるかもしれません。

QVulkanFunctionsQSurface::SurfaceTypeも参照してください

メンバ型ドキュメント

QVulkanInstance::DebugFilter

以下のシグネチャを持つデバッグフィルタリングコールバック関数のための型定義です:

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

true を返すと、メッセージの印刷が抑制されます。

注意: Qt 6.5 以降では、非推奨のVK_EXT_debug_report の代わりにVK_EXT_debug_utils が使用されます。コールバックのシグネチャはVK_EXT_debug_reportに基づいています。そのため、すべての引数が有効であるとは限りません。pMessagemessageCodeobject 以外の引数に依存することは避けること。VK_EXT_debug_utilsで指定されているすべてのコールバック・データにアクセス したいアプリケーションは、DebugUtilsFilter

installDebugOutputFilter() およびremoveDebugOutputFilter()も参照してください

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

定数
QVulkanInstance::VerboseSeverity0x01
QVulkanInstance::InfoSeverity0x02
QVulkanInstance::WarningSeverity0x04
QVulkanInstance::ErrorSeverity0x08

この enum は Qt 6.5 で導入されました。

DebugMessageSeverityFlags 型は、QFlags<DebugMessageSeverityFlag> の typedef です。DebugMessageSeverityFlag 値の OR の組み合わせを格納します。

[since 6.5] enum QVulkanInstance::DebugMessageTypeFlag
flags QVulkanInstance::DebugMessageTypeFlagsです。

定数
QVulkanInstance::GeneralMessage0x01
QVulkanInstance::ValidationMessage0x02
QVulkanInstance::PerformanceMessage0x04

この列挙型はQt 6.5で導入されました。

DebugMessageTypeFlags型は、QFlags<DebugMessageTypeFlag>のtypedefです。DebugMessageTypeFlag の値の OR の組み合わせを格納します。

[alias, since 6.5] QVulkanInstance::DebugUtilsFilter

以下のシグネチャを持つデバッグ・フィルタリング・コールバック関数の型定義です:

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

message 引数は VkDebugUtilsMessengerCallbackDataEXT 構造体へのポインタです。詳細はVK_EXT_debug_utils のドキュメントを参照してください。Qtヘッダは、1.0以降のVulkanヘッダへの依存を避けるため、実数型を使用しません。

true を返すと、メッセージの印刷が抑制されます。

この型定義は Qt 6.5 で導入されました。

installDebugOutputFilter() およびremoveDebugOutputFilter()も参照してください

enum QVulkanInstance::Flag
flags QVulkanInstance::Flags

この enum は、setFlags() に渡すことができるフラグを記述します。これらはcreate() の動作を制御します。

定数説明
QVulkanInstance::NoDebugOutputRedirect0x01Vulkan デバッグ出力 (VK_EXT_debug_utils) のqDebug へのリダイレクトを無効にします。
QVulkanInstance::NoPortabilityDrivers (since Qt 6.5)0x02Vulkan Portabilityとしてマークされた物理デバイスの列挙を無効にします。

Flags 型はQFlags<Flag> の typedef です。Flag値のORの組み合わせを格納します。

メンバー関数ドキュメント

QVulkanInstance::QVulkanInstance()

新しいインスタンスを構築します。

注: コンストラクタではVulkanの初期化は行われません。

[noexcept] QVulkanInstance::~QVulkanInstance()

デストラクタ。

注: インスタンスが破棄されると、vkInstance() はnullptr を返します。

QVersionNumber QVulkanInstance::apiVersion() const

create() の前にsetApiVersion() が呼び出されなかった場合、アプリケーションが実行を期待する要求された Vulkan API バージョン、または null バージョン番号を返します。

setApiVersion()も参照してください

[since 6.5] void QVulkanInstance::clearDebugOutputFilters()

installDebugOutputFilter() によって以前にインストールされたすべてのフィルター関数を削除します。

注意: この関数は、create() の前に呼び出すことができます。

この関数は Qt 6.5 で導入されました。

installDebugOutputFilter()も参照してください

bool QVulkanInstance::create()

Vulkan ライブラリを初期化し、新規または既存の Vulkan インスタンスを作成します。

成功した場合はtrueを返し、エラーまたはVulkanがサポートされていない場合はfalseを返します。

成功した場合、このQVulkanInstance へのポインタはvkInstance() を介して取得可能です。

このQVulkanInstance が存在する限り、またはdestroy() が呼び出されるまで、Vulkan インスタンスとライブラリは利用可能です。

デフォルトでは、VkInstanceはフラグVK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHRが設定された状態で作成されます。これは、Vulkan Portability物理デバイスも列挙されることを意味します。これを望まない場合は、NoPortabilityDrivers フラグを設定します。

void QVulkanInstance::destroy()

基礎となるプラットフォームインスタンスを破棄し、VkInstanceを破棄します(所有されている場合)。create() を再度呼び出すことで、QVulkanInstance オブジェクトはまだ再利用可能です。

QVulkanDeviceFunctions *QVulkanInstance::deviceFunctions(VkDevice device)

デバイスレベルのコアVulkanコマンドセットを公開し、クロスプラットフォームで機能することが保証されたQVulkanDeviceFunctions オブジェクトを返します。

注: 返されたオブジェクト内の Vulkan 関数は、device またはdevice の子オブジェクト(VkQueue、VkCommandBuffer)を最初のパラメータとしてのみ呼び出す必要があります。これは、内部ディスパッチの潜在的なオーバーヘッドを回避するために、これらの関数がvkGetDeviceProcAddr を介して解決されるためです。

注意: 返されたオブジェクトはQVulkanInstance によって所有・管理されます。 オブジェクトを破壊したり変更したりしないでください。

注意 :オブジェクトはキャッシュされるため、同じdevice でこの関数を再度呼び出すことは、安価な操作である。ただし、デバイスが破棄された場合、resetDeviceFunctions() を呼び出してQVulkanInstance に通知するかどうかはアプリケーション次第です。

コアVulkan 1.0 APIからの関数は常に利用可能です。1.1や1.2のような、より高いVulkanバージョンになると、QVulkanDeviceFunctions オブジェクトはそれらのコアAPI関数も解決しようとしますが、実行時のVulkan物理デバイスがそれらをサポートしていない場合、そのようなサポートされていない関数を呼び出すと、指定されていない動作になります。1.0より高いVulkanバージョンのサポートを適切に有効にするには、create ()の前にsetApiVersion ()を呼び出して、適切なインスタンスAPIバージョンを設定する必要があるかもしれません。さらに、アプリケーションは VkPhysicalDeviceProperties で物理デバイスのapiVersion を確認する必要があります。

functions() およびresetDeviceFunctions()も参照してください

VkResult QVulkanInstance::errorCode() const

create ()に失敗した場合はVulkanエラーコードを返し、そうでない場合はVK_SUCCESS

この値は通常、vkCreateInstance() からの戻り値(既存のインスタンスを採用する代わりに新しい Vulkan インスタンスを作成する場合)ですが、プラットフォームプラグインが Vulkan をサポートしていない場合はVK_NOT_READY になることもあります。

QByteArrayList QVulkanInstance::extensions() const

create() が呼び出されて成功した場合は、有効なインスタンス拡張を返します。そうでない場合は、要求された拡張機能を返します。

setExtensions()も参照してください

QVulkanInstance::Flags QVulkanInstance::flags() const

要求されたフラグを返します。

setFlags()も参照して ください。

QVulkanFunctions *QVulkanInstance::functions() const

対応するQVulkanFunctions オブジェクトを返します。このオブジェクトは、デバイスレベル関数を除く、コア Vulkan コマンドセットを公開し、クロスプラットフォームで機能することが保証されています。

注意: 返されたオブジェクトは、QVulkanInstance によって所有および管理されます。これを破壊したり変更したりしないでください。

コアVulkan 1.0 APIからの関数は常に利用可能です。1.1や1.2など、より高いVulkanバージョンになると、QVulkanFunctions オブジェクトは、それらのコアAPI関数も解決しようとしますが、実行時のVulkanインスタンス実装がそれらをサポートしていない場合、そのようなサポートされていない関数を呼び出すと、指定されていない動作になります。さらに、1.0より高いVulkanバージョンのサポートを適切に有効にするには、create ()の前にsetApiVersion ()を呼び出して、適切なインスタンスAPIバージョンを設定する必要があるかもしれません。Vulkan実装のインスタンスレベルのバージョンを問い合わせるには、supportedApiVersion ()を呼び出します。

deviceFunctions() およびsupportedApiVersion()も参照してください

PFN_vkVoidFunction QVulkanInstance::getInstanceProcAddr(const char *name)

指定されたname でVulkan関数を解決します。

コアVulkanコマンドについては、代わりにfunctions() およびdeviceFunctions() から取得可能な関数ラッパーを使用することをお勧めします。

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

Vulkanデバッグメッセージごとに呼び出されるfilter 関数をインストールします。コールバックがtrue を返すと、メッセージは停止され(フィルタリングされ)、デバッグ出力には表示されません。

注: フィルタリングは、NoDebugOutputRedirectset でない場合にのみ有効です。そうでない場合、フィルターをインストールしても効果はありません。

注意: この関数はcreate() の前に呼び出すことができます。

この関数は Qt 6.5 で導入されました。

clearDebugOutputFilters()も参照してください

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

これはオーバーロードされた関数です。

Vulkanデバッグメッセージごとに呼び出されるfilter 関数をインストールします。コールバックがtrue を返すと、メッセージは停止され(フィルタリングされ)、デバッグ出力には表示されません。

注: フィルタリングは、NoDebugOutputRedirectset でない場合にのみ有効です。そうでない場合、フィルターをインストールしても効果はありません。

注意: この関数はcreate() の前に呼び出すことができる。

removeDebugOutputFilter()も参照

bool QVulkanInstance::isValid() const

create() が成功し、インスタンスが有効な場合は true を返します。

QByteArrayList QVulkanInstance::layers() const

create() が呼び出されて成功した場合は、有効なインスタンス・レイヤーを返します。それ以外の場合は、要求されたレイヤーを返します。

setLayers()も参照

void QVulkanInstance::presentAboutToBeQueued(QWindow *window)

この関数は、アプリケーションのレンダラーによって、window に対する現在の操作をキューに入れる前に呼び出されるべきである。

いくつかのプラットフォームでは、この関数は呼び出されないが、いくつかのプラットフォームでは、ウィンドウシステム依存の同期が実行される。たとえば、Waylandでは、最小化されたウィンドウのためにドライバがブロックするのを防ぐために、wl_surface.frameリクエストを送信します。

void QVulkanInstance::presentQueued(QWindow *window)

この関数は、アプリケーションのレンダラーによって、window に対する現在の操作をキューに入れた後に呼び出される必要があります。

いくつかのプラットフォームでは、この処理は不要ですが、ウィンドウシステム依存の同期を実行するものもあります。例えば、X11では、これは_NET_WM_SYNC_REQUEST_COUNTER を更新する。

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

これはオーバーロードされた関数です。

installDebugOutputFilter() によってインストールされていたfilter 関数を削除します。

注意: この関数は、create() の前に呼び出すことができる。

installDebugOutputFilter()も参照

void QVulkanInstance::resetDeviceFunctions(VkDevice device)

指定されたdeviceQVulkanDeviceFunctions オブジェクトを無効にして破棄します。

この関数は、deviceFunctions() が呼び出された VkDevice が、アプリケーションの実行を継続し、後で新しい論理 Vulkan デバイスを作成しようとしている間に破棄された場合に呼び出す必要があります。

その後、自動的にクリーンアップが実行されるため、QVulkanInstance を破棄する前にこの関数を呼び出す必要はありません。

deviceFunctions()も参照してください

void QVulkanInstance::setApiVersion(const QVersionNumber &vulkanVersion)

アプリケーションが使用するように設計されている最も高いVulkan APIバージョンを指定します。

デフォルトではvulkanVersion は 0 で、これは Vulkan 1.0 に対応します。

注意: この関数はcreate() の前にのみ呼び出すことができ、その後に呼び出しても効果はありません。

注意 : Vulkan 1.1 では、Vulkan API バージョンフィールドに関する動作が変更されていることに注意してください。Vulkan 1.0 では、サポートされていないvulkanVersion を指定すると、仕様で義務付けられているようにVK_ERROR_INCOMPATIBLE_DRIVERcreate() が失敗しました。Vulkan 1.1から、仕様はこれを禁止し、ドライバはインスタンス作成に失敗することなく任意のバージョンを受け入れなければなりません。

アプリケーション開発者は、Vulkan仕様の apiVersion 注記をよく理解することをお勧めします。

apiVersion() およびsupportedApiVersion()も参照してください

void QVulkanInstance::setExtensions(const QByteArrayList &extensions)

有効にする追加インスタンスextensions のリストを指定します。実行時にサポートされていない場合は無視されるため、サポートされていない拡張機能も指定しても安全です。

注意: Qt が必要とするサーフェス関連の拡張機能 (例えば、VK_KHR_win32_surface) は常に自動的に追加されるので、このリストに含める必要はありません。

注意: NoPortabilityDrivers フラグが設定されていない限り、VK_KHR_portability_enumeration は自動的に追加されます。この値は Qt 6.5 で導入されました。

注意: この関数はcreate() の前にのみ呼び出すことができ、その後に呼び出しても効果はありません。

extensions()も参照してください

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

指定されたflags に基づいてcreate() の動作を設定します。

注意: この関数はcreate() の前にのみ呼び出すことができ、その後に呼び出しても何の効果もない。

flags()も参照

void QVulkanInstance::setLayers(const QByteArrayList &layers)

有効にするインスタンスlayers のリストを指定する。サポートされていないレイヤーは、実行時に無視されるため、サポートされていないレイヤーを指定しても安全です。

注意: この関数はcreate() の前にのみ呼び出すことができ、その後に呼び出しても効果はありません。

layers()も参照

void QVulkanInstance::setVkInstance(VkInstance existingVkInstance)

QVulkanInstance は、新しい VkInstance ハンドルを作成する代わりに、既存の VkInstance ハンドルを採用します。

注意: existingVkInstance は、少なくともVK_KHR_surface と適切な WSI 固有のVK_KHR_*_surface 拡張が有効になっていなければならない。デバッグ出力のリダイレクションを確実に機能させるには、VK_EXT_debug_utils も必要である。

注意: この関数は、create()の前にのみ呼び出すことができ、 その後に呼び出しても何の効果もない。

vkInstance()も参照

QVersionNumber QVulkanInstance::supportedApiVersion() const

Vulkan実装がサポートするインスタンスレベル機能のバージョンを返します。

実際には、これはvkEnumerateInstanceVersionから返される値であり、その関数が利用可能な場合(Vulkan 1.1以降)、または1.0です。

実行時に利用可能なVulkanバージョンに基づいてVulkan機能とAPIの使用を分岐させたいアプリケーションは、create ()を呼び出す前に、setApiVersion ()に渡すバージョンを決定するためにこの関数を使用できます。

注: この関数は、create() の前に呼び出すことができます。

setApiVersion()も参照

QVulkanInfoVector<QVulkanExtension> QVulkanInstance::supportedExtensions() const

サポートするインスタンスレベル拡張の一覧を返します。

注意: この関数は、create() の前に呼び出すことができる。

QVulkanInfoVector<QVulkanLayer> QVulkanInstance::supportedLayers() const

サポートするインスタンスレベルのレイヤーの一覧を返します。

注意: この関数は、create() の前に呼び出すことができます。

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

physicalDevice 内のqueueFamilyIndex を持つキューファミリがwindow への提示をサポートしている場合、true を返す。

どのキューをプレゼンテーションの実行に使用できるかを決定するために、与えられたVulkanデバイスのキューを調べるときにこの関数を呼び出します。

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

与えられたwindow に対して、既に存在するVkSurfaceKHR ハンドルを作成または取得します。

Vulkanサーフェスハンドルを返すか、失敗した場合は0を返します。

VkInstance QVulkanInstance::vkInstance() const

このQVulkanInstance がラップしている VkInstance ハンドルを返します。create() がまだ正常に呼び出されておらず、setVkInstance() を介して既存のインスタンスが提供されていない場合は、nullptr を返します。

setVkInstance()も参照してください

©2024 The Qt Company Ltd. 本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。