QVulkanInstance Class
QVulkanInstance クラスは、ネイティブの Vulkan インスタンスを表しており、QSurface への Vulkan レンダリングを可能にします。詳細...
| ヘッダー: | #include <QVulkanInstance> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
- 継承されたメンバーを含む、すべてのメンバーの一覧
- QVulkanInstanceは、3Dレンダリングの一部です。
パブリック型
| 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 ヘッダーが利用できない場合、特定の Qt ビルドにおいてVulkan サポートが自動的に無効化されることがあります。この場合、configure の出力結果から Vulkan サポートが無効であることが示され、QVulkan* クラスは利用できなくなります。
注:一部の関 数については 、Vulkanヘッダーのバージョン変更に伴い、シグネチャが変更されています。Qtをビルドする際、システム内に古いシグネチャ(競合するシグネチャ)を持つヘッダーのみが存在する場合、Vulkanのサポートは無効になります。Vulkan 1.0.39以降のヘッダーを使用することを推奨します。
初期化
QOpenGLContext と同様に、実際のVulkanインスタンスの作成はcreate()を呼び出したときにのみ行われます。これにより、初期化を実行するタイミングを制御しつつ、QVulkanInstanceを単なるメンバ変数として使用することが可能になります。
サポートされているインスタンスレベルのレイヤーや拡張機能を照会するには、supportedLayers() およびsupportedExtensions() を呼び出します。これらは Vulkan ライブラリがロードされていることを保証するため、create() の前に呼び出しても安全です。
インスタンスはアプリケーションごとのVulkan状態を格納しており、VkInstance オブジェクトを作成することでVulkanライブラリが初期化されます。実際には、通常はmain()の初期段階で単一のインスタンスが構築されます。その後、そのオブジェクトはアプリケーションが終了するまで存続します。
VulkanベースのQWindow はすべて、QWindow::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 、対象のプラットフォームに適したWSI固有のVK_KHR_*_surface 、およびQVulkanInstanceのデバッグ出力のリダイレクトが必要な場合のVK_EXT_debug_utils が含まれます。
Core Vulkan コマンドへのアクセス
QVulkanInstance がラップしているVkInstance ハンドルにアクセスするには、vkInstance() を呼び出します。Vulkan 関数を解決するには、getInstanceProcAddr() を呼び出します。コア Vulkan コマンドについては、functions() およびdeviceFunctions() を通じてアクセス可能なQVulkanFunctions およびQVulkanDeviceFunctions オブジェクトを介して提供されるため、手動での解決は必要ありません。
注: QVulkanFunctions およびQVulkanDeviceFunctions は、Qt ライブラリのビルド時に Vulkan API XML 仕様から生成されます。そのため、これらに関するドキュメントは提供されていません。これらは、Vulkan API ドキュメントに記載されているものと同じシグネチャを持つ Vulkan 1.2 の関数を含んでいます。
ウィンドウのネイティブ Vulkan サーフェスの取得
ウィンドウシステム固有の操作として一般的なものは、ウィンドウのサーフェス(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 のデバッグ出力を有効にすることで、追加のログ記録を要求できます。create() の実行に失敗した後、errorCode() を呼び出すことで、インスタンス作成時の実際の Vulkan エラーコードを取得できます。
特殊なケースによっては、Vulkan ライブラリ名を上書きする必要がある場合があります。これは、QT_VULKAN_LIB 環境変数を設定することで実現できます。
例
以下は、Vulkan対応のQWindow を作成するための基本的な手順です:
classVulkanWindow :publicQWindow
{
public:
VulkanWindow() {
setSurfaceType(VulkanSurface);
}
voidexposeEvent(QExposeEvent*) {
if(isExposed()) {
if(!m_initialized) {
m_initialized= true;
// デバイス、スワップチェーンなどを初期化する
QVulkanInstance*inst =vulkanInstance();
QVulkanFunctions*f = inst->functions();
uint32_t devCount= 0;
f->vkEnumeratePhysicalDevices(inst->vkInstance(), &devCount,nullptr);
// ...
// 最初のフレームを生成
render();
}
}
}
boolevent(QEvent*e) {
if(e->type()==QEvent::UpdateRequest)
render();
returnQWindow::event(e);
}
voidrender() {
// ...
requestUpdate();// 連続的にレンダリング
}
private:
boolm_initialized= false;
};
intmain(intargc, char**argv)
{
QGuiApplication app(argc,argv);
QVulkanInstance inst;
if(!inst.create()) {
qWarning("Vulkan not available");
return 1;
}
VulkanWindow window;
window.showMaximized();
returnapp.exec();
}注: エクスポーズ機能に加え 、正常に動作するウィンドウの実装では 、スワップチェーンを適切に管理するために、resizeやQPlatformSurfaceEvent などの追加イベントにも対応する必要があります。また、プラットフォームによっては、エクスポーズされなくなった際にリソースを解放する必要がある場合があります。
Vulkan用C++バインディングの使用
QtのVulkan対応機能と、Vulkan-HppなどのC++ Vulkanラッパーを組み合わせることも可能です。 ここでの前提条件は、C++レイヤーが、所有権を譲り渡すことなく(所有権はQVulkanInstanceおよびQWindow に残るため)、クラス内でネイティブハンドル(VkInstance、VkSurfaceKHR)を採用できる必要があるということです。また、以下の点にも留意してください:
- 一部のラッパーでは、例外処理のサポートを有効にする必要があります。Qtは例外を使用しません。アプリケーションで例外を有効にするには、
.proファイルにCONFIG += exceptionsを追加してください。 - 一部のラッパーは、
vulkan.hがプロトタイプを提供し、アプリケーションがすべての必要なシンボルをエクスポートするVulkanライブラリにリンクしていることを前提として、Vulkan関数を直接呼び出します。QtはVulkanライブラリに直接リンクしない場合があります。そのため、一部のプラットフォームでは、アプリケーションの.proファイルにLIBS += -lvulkanまたは同様の記述を追加する必要がある場合があります。 - QVulkanクラスのヘッダーには、
VK_NO_PROTOTYPESが有効になっている状態でvulkan.hが含まれている場合があります。これにより、そのプロトタイプに依存しているC++ラッパーのヘッダーで問題が発生する可能性があります。そのため、アプリケーションコードでは、QVulkanのヘッダーをインクルードする前に、vulkan.hppまたは同様のヘッダーをインクルードする必要がある場合があります。
セキュリティに関する考慮事項
Vulkanの実装(Vulkanローダー、ドライバー、および有効化されたレイヤーを含む)は、信頼されたインプロセス・プラットフォーム依存関係です。Qtは、OpenGLの実装を扱うのと同様に、サンドボックス化や検証を行うことなく、これをロードして直接呼び出します。
QVulkanInstanceおよび、QVulkanWindow やVulkanバックエンドを持つQRhi など、これを基盤とするクラスが扱うすべてのデータは、信頼できるコンテンツであることが想定されています。これには、setLayers()およびsetExtensions()に渡されるレイヤー名や拡張機能名、setVkInstance()を介して取得されたネイティブのVkInstance ハンドル、ならびにアプリケーションによって生成されるすべてのレンダリングコンテンツおよびVulkanコマンドパラメータが含まれます。
警告:アプリケーション 開発者は、アプリケーションの一部ではなく、かつ開発者の管理下にもないユーザー提供のコンテンツの取り込みを許可する前に、その潜在的な影響を慎重に検討することを推奨します。
QVulkanFunctions およびQSurface::SurfaceTypeも参照してください 。
メンバータイプのドキュメント
QVulkanInstance::DebugFilter
デバッグフィルタリングのコールバック関数用のtypedefで、シグネチャは以下の通りです:
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` に基づいています。そのため、すべての引数が有効であるとは限らなくなりました。pMessage 、messageCode 、およびobject 以外の引数への依存は避けてください。VK_EXT_debug_utilsで指定されているすべてのコールバックデータにアクセスしたいアプリケーションは、DebugUtilsFilter へ移行する必要があります。
installDebugOutputFilter() およびremoveDebugOutputFilter()も参照してください 。
[since 6.5] enum QVulkanInstance::DebugMessageSeverityFlag
flags QVulkanInstance::DebugMessageSeverityFlags
| 定数 | 定数 |
|---|---|
QVulkanInstance::VerboseSeverity | 0x01 |
QVulkanInstance::InfoSeverity | 0x02 |
QVulkanInstance::WarningSeverity | 0x04 |
QVulkanInstance::ErrorSeverity | 0x08 |
この列挙型は Qt 6.5 で導入されました。
DebugMessageSeverityFlags 型は、QFlags<DebugMessageSeverityFlag> の typedef です。これは、DebugMessageSeverityFlag 値の論理和(OR)を格納します。
[since 6.5] enum QVulkanInstance::DebugMessageTypeFlag
flags QVulkanInstance::DebugMessageTypeFlags
| 定数 | 定数 |
|---|---|
QVulkanInstance::GeneralMessage | 0x01 |
QVulkanInstance::ValidationMessage | 0x02 |
QVulkanInstance::PerformanceMessage | 0x04 |
この列挙型は Qt 6.5 で導入されました。
DebugMessageTypeFlags 型は、QFlags<DebugMessageTypeFlag> の typedef です。これには、DebugMessageTypeFlag 値の論理和(OR)が格納されます。
[alias, since 6.5] QVulkanInstance::DebugUtilsFilter
デバッグフィルタリングのコールバック関数用のtypedefで、シグネチャは以下の通りです。
std::function<bool(DebugMessageSeverityFlags severity, DebugMessageTypeFlags type, const void *message)>;message 引数は、VkDebugUtilsMessengerCallbackDataEXT構造体へのポインタです。詳細については、VK_EXT_debug_utils のドキュメントを参照してください。Qtのヘッダーでは、Vulkan 1.0以降のヘッダーへの依存関係を回避するため、実際の型は使用されていません。
true を返すと、メッセージの出力が抑制されます。
この typedef は Qt 6.5 で導入されました。
installDebugOutputFilter() およびremoveDebugOutputFilter()も参照してください 。
enum QVulkanInstance::Flag
flags QVulkanInstance::Flags
この列挙型は、setFlags() に渡すことができるフラグを表します。これらは、create() の動作を制御します。
| 定数 | 値 | 説明 |
|---|---|---|
QVulkanInstance::NoDebugOutputRedirect | 0x01 | Vulkan デバッグ出力 (VK_EXT_debug_utils) のqDebug へのリダイレクトを無効にします。 |
QVulkanInstance::NoPortabilityDrivers (since Qt 6.5) | 0x02 | 「Vulkan Portability」としてマークされた物理デバイスの列挙を無効にします。 |
Flags 型は、QFlags<Flag> の typedef です。Flag 値の論理和 (OR) 組み合わせを格納します。
メンバ関数のドキュメント
QVulkanInstance::QVulkanInstance()
新しいインスタンスを作成します。
注: コンストラクタ内ではVulkanの初期化は行われません 。
[noexcept] QVulkanInstance::~QVulkanInstance()
デストラクタ。
注: vkInstance() は、インスタンスが破棄されるとnullptr を返します。
QVersionNumber QVulkanInstance::apiVersion() const
アプリケーションが実行を想定しているVulkan APIのバージョンを返します。ただし、create() の呼び出し前にsetApiVersion() が呼び出されていなかった場合は、バージョン番号として null を返します。
setApiVersion()も参照してください 。
[since 6.5] void QVulkanInstance::clearDebugOutputFilters()
installDebugOutputFilter() によって以前にインストールされたすべてのフィルタ関数を削除します。
注:この関数は 、create() の呼び出し前に呼び出すことができます。
この関数は Qt 6.5 で導入されました。
installDebugOutputFilter()も参照してください 。
bool QVulkanInstance::create()
Vulkan ライブラリを初期化し、新しい 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も破棄します。QVulkanInstance オブジェクトは、create()を再度呼び出すことで引き続き再利用可能です。
QVulkanDeviceFunctions *QVulkanInstance::deviceFunctions(VkDevice device)
デバイスレベルのVulkanコアコマンドセットを公開し、クロスプラットフォームでの動作が保証されているQVulkanDeviceFunctions オブジェクトを返します。
注:返されるオブジェクト内のVulkan関数は 、最初のパラメータとしてdevice 、またはdevice の子オブジェクト(VkQueue、VkCommandBuffer)のみを指定して呼び出す必要があります。これは、内部ディスパッチによる潜在的なオーバーヘッドを回避するために、これらの関数がvkGetDeviceProcAddrを介して解決されるためです。
注: 返されるオブジェクトは 、QVulkanInstance によって所有および管理されます。これを破棄したり変更したりしないでください。
注:オブジェクトは キャッシュされるため、同じdevice を指定してこの関数を再度呼び出す操作は低コストです。ただし、デバイスが破棄された場合、resetDeviceFunctions()を呼び出してQVulkanInstance に通知するのはアプリケーションの責任となります。
Vulkan 1.0 コア API の関数は常に利用可能です。 Vulkan 1.1 や 1.2 などのより新しいバージョンに関しては、QVulkanDeviceFunctions オブジェクトはそれらのバージョンに対応するコア API 関数の解決も試みますが、実行時の Vulkan 物理デバイスがそれらをサポートしていない場合、そのような未サポートの関数を呼び出すと、未定義の挙動を引き起こすことになります。 Vulkan 1.0 より新しいバージョンのサポートを適切に有効にするには、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
デバイスレベルの関数を除き、Vulkanのコアコマンドセットを公開し、クロスプラットフォームでの動作が保証されている、対応するQVulkanFunctions オブジェクトを返します。
注: 返されるオブジェクトは QVulkanInstance によって所有および管理されています。これを破棄したり変更したりしないでください。
Vulkan 1.0 コア API の関数は常に利用可能です。 1.1 や 1.2 などのより新しい Vulkan バージョンに関しては、QVulkanFunctions オブジェクトはそれらのコア API 関数も解決しようとしますが、実行時の Vulkan インスタンスの実装がそれらをサポートしていない場合、そのようなサポートされていない関数を呼び出すと、未定義の挙動が生じます。 さらに、Vulkan 1.0 より高いバージョンを適切にサポートするには、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 を返した場合、そのメッセージは停止(フィルタリング)され、デバッグ出力には表示されなくなります。
注:フィルタリングは 、NoDebugOutputRedirect がset でない場合にのみ有効です。それ以外の場合、フィルタの登録は効果がありません。
注:この関数は 、create() の前に呼び出すことができます。
この関数は Qt 6.5 で導入されました。
clearDebugOutputFilters()も参照してください 。
void QVulkanInstance::installDebugOutputFilter(QVulkanInstance::DebugFilter filter)
Vulkanのデバッグメッセージが送信されるたびに呼び出されるfilter 関数を登録します。コールバックがtrue を返すと、そのメッセージは停止(フィルタリング)され、デバッグ出力には表示されなくなります。
注:フィルタリングが 有効になるのは、NoDebugOutputRedirect がset でない場合のみです。それ以外の場合、フィルタの登録は効果を持ちません。
注:この関数は 、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)
指定されたdevice に対するQVulkanDeviceFunctions オブジェクトを無効化し、破棄します。
この関数は、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 を指定すると、仕様で規定されていた通り、create() がVK_ERROR_INCOMPATIBLE_DRIVER のエラーで失敗していました。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 も必要です。
Qtには、すでに作成済みのVkInstanceに対してレイヤーや拡張機能を有効にする手段はありません。 したがって、existingVkInstance がQtでの使用に適していることを確認するのは、呼び出し側の責任となります。QRhi ベースのレンダリングが関与する場合は、QRhiVulkanInitParams::preferredInstanceExtensions()を呼び出して、上記で言及した拡張機能に加えて、実行時にシステムで利用可能かつサポートされている限り、existingVkInstance の生成者が有効にするべきインスタンス拡張機能の追加リストを照会してください。
注:この関数は 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()も参照してください 。
© 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.