QRhiVulkanInitParams Struct

Vulkan固有の初期化パラメータ。詳細...

Header: #include <rhi/qrhi.h>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::GuiPrivate)
qmake: QT += gui-private
Since: Qt 6.6
Inherits: QRhiInitParams

パブリック変数

QByteArrayList deviceExtensions
QVulkanInstance *inst
QWindow *window

静的パブリックメンバー

詳細説明

注意: これは互換性が限定的に保証された RHI API です。詳細はQRhi を参照してください。

Vulkan ベースのQRhi は、最低でも有効なQVulkanInstance を必要とします。これが利用可能で初期化されていることを確認するのは、ユーザー次第です。これは通常、以下のようにmain()で行われます:

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");

    ...
}

この例では、Vulkan検証レイヤーが利用可能な場合、Vulkan検証レイヤーを有効にし、また、インスタンスレベルの拡張QRhi 、実行時にVulkan実装によってサポートされている限り、望ましいレポート(VK_KHR_get_physical_device_properties2など)を有効にします。

前者はオプションであり、開発フェーズ中に便利です。QVulkanInstance 便利なことに、メッセージと警告をqDebug にリダイレクトします。ただし、本番ビルドでは有効にしないでください。後者は強く推奨され、特定の機能を機能させるために重要です(例えば、QRhi::CustomInstanceStepRate )。

これが完了すると、インスタンスと、サーフェスタイプをQSurface::VulkanSurface に設定したQWindow を渡すことで、Vulkan ベースのQRhi を作成できます:

QRhiVulkanInitParams params;
params.inst = vulkanInstance;
params.window = window;
rhi = QRhi::create(QRhi::Vulkan, &params);

ウィンドウは省略可能です。しかし、これは推奨されません。なぜなら、グラフィックスキューを選択する際に、プレゼンテーションがサポートされていることを確認する方法がないからです。

注: ウィンドウが指定されている場合でも、QWindow::surfaceType() がすべてQSurface::VulkanSurface に設定されている限り、QRhiSwapChain オブジェクトを他のウィンドウ用に作成することもできます。

Vulkanデバイスで有効化する追加の拡張機能を要求するには、deviceExtensions にそれらをリストします。これは、ネイティブのVulkanレンダリングコードと統合するときに関連する可能性があります。

バックエンドが希望するインスタンス拡張機能のリストは、QVulkanInstance を初期化する前に静的関数preferredInstanceExtensions() を呼び出すことで照会されることが期待されます。返されたリストは、サポートされていない拡張機能が自動的にフィルタリングされるため、そのままQVulkanInstance::setExtensions() に安全に渡すことができます。これを行わないと、システム上のVulkan実装が該当する機能をサポートしていても、QRhi::CustomInstanceStepRate のような特定の機能がサポートされていないと報告されることがあります。

完全な機能を実現するためには、QVulkanInstance 、API 1.1が利用可能な場合はそれを有効にする必要があります。これは、QVulkanInstance::supportedApiVersion ()が少なくともVulkan 1.1がサポートされていると報告するたびに、1.1以上でQVulkanInstance::setApiVersion ()を呼び出すことを意味します。これが行われない場合、システム上のVulkan実装がVulkan 1.1またはそれ以降をサポートしていても、QRhi::RenderTo3DTextureSlice などの特定の機能がサポートされていないと報告される可能性があります。

既存のVulkanデバイスとの連携

別のグラフィックスエンジンと相互運用する場合、同じVulkanデバイスを使用するQRhi インスタンスを取得する必要がある場合があります。これは、QRhiVulkanNativeHandles へのポインタをQRhi::create() に渡すことで実現できます。

物理デバイスは常に NULL 以外の値に設定する必要があります。物理デバイスを指定するだけで、残りのVkDeviceとキューの作成はQRhi 。例えば、OpenXR を使用する場合などです。

既存のVkDevice を採用するには、device フィールドにも NULL ではない値を設定する必要があります。さらに、グラフィックス・キュー・ファミリーのインデックスが必要です。デフォルトの 0 が適していることが多いので、キュー・インデックスはオプションです。

オプションで、既存のコマンド・プール・オブジェクトを指定することもできる。また、オプションでvmemAllocatorを使用すると、2つのQRhi インスタンス間で同じVulkanメモリアロケータを共有できます。

QRhi は、外部オブジェクトの所有権を取りません。

アプリケーションは、スタティック関数preferredExtensionsForImportedDevice() を呼び出すことによって、希望するデバイス拡張のリストを照会し、VkDevice上でそれらを有効にすることが推奨されます。そうしないと、QRhi の特定の機能が利用できない場合があります。

メンバ関数ドキュメント

[static] QByteArrayList QRhiVulkanInitParams::preferredExtensionsForImportedDevice()

外部で作成されたVkDevice オブジェクトを使用して Vulkan ベースのQRhi を作成する際に、VkDevice 上で有効化されることが期待されるデバイス拡張のリストを返します。

[static] QByteArrayList QRhiVulkanInitParams::preferredInstanceExtensions()

Vulkan ベースのQRhi に使用されるQVulkanInstance で有効化されることが期待されるインスタンス拡張のリストを返します。

サポートされていない拡張機能は自動的にフィルタリングされるため、返されたリストはそのまま安全にQVulkanInstance::setExtensions() に渡すことができます。

メンバ変数ドキュメント

QByteArrayList QRhiVulkanInitParams::deviceExtensions

オプション、デフォルトでは空。有効にするVulkanデバイス拡張のリスト。サポートされていない拡張機能は潔く無視されます。

QVulkanInstance *QRhiVulkanInitParams::inst

既に成功したQVulkanInstance created 、必須。

QWindow *QRhiVulkanInitParams::window

オプションですが、QWindow をターゲットにする場合に推奨されます。

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