Skip to content

Vulkanサポート

これは、Vulkan関連の関数と型のリファレンス・ドキュメントです。フォースク指向の情報については、Vulkanガイドを参照してください。

型定義

名前説明
void(* GLFWvkproc)Vulkan API関数ポインタタイプ。
void(* GLFWvkproc)

通常のポインタからキャストを強制せずにVulkan API関数ポインタを返すために使用される汎用関数ポインタ。

c
typedef void(* GLFWvkproc) (void)

参照:

  • Querying Vulkan function pointers
  • glfwGetInstanceProcAddress

追加:

バージョン3.2で追加。

関数

名前説明
glfwVulkanSupportedVulkanローダーとICDが見つかったかどうかを返します。
glfwGetRequiredInstanceExtensionsGLFWが必要とするVulkanインスタンス拡張を返す。
glfwGetInstanceProcAddress指定されたVulkanインスタンス関数のアドレスを返します。
glfwGetPhysicalDevicePresentationSupport指定されたキューファミリが画像を提示できるかどうかを返します。
glfwCreateWindowSurface指定したウィンドウのVulkanサーフェスを作成します。
glfwVulkanSupported()

この関数は、Vulkanローダーと最低限機能するICDが見つかったかどうかを返します。

VulkanローダーとICDが利用可能であっても、それ自体がサーフェス作成やインスタンス作成が可能であることを保証するものではありません。glfwGetRequiredInstanceExtensionsを呼び出して、Vulkanサーフェス作成に必要な拡張が利用可能かどうかをチェックし、glfwGetPhysicalDevicePresentationSupportを呼び出して、物理デバイスのキューファミリが画像プレゼンテーションをサポートしているかどうかをチェックします。

c
int glfwVulkanSupported(void)

戻り値:

Vulkanが最低限利用可能であればGLFW_TRUE、そうでなければGLFW_FALSE。

エラー:

考えられるエラーはGLFW_NOT_INITIALIZED。

スレッドセーフ:

この関数はどのスレッドからでも呼び出すことができる。

参照:

  • Querying for Vulkan support

追加:

バージョン3.2で追加。

glfwGetRequiredInstanceExtensions()

この関数は、GLFW ウィンドウ用の Vulkan サーフェスを作成するために GLFW が必要とする Vulkan インスタンス拡張の名前の配列を返します。成功した場合、リストは常に VK_KHR_surface を含むので、追加の拡張を必要としない場合は、このリストを VkInstanceCreateInfo 構造体に直接渡すことができます。

Vulkanがマシンで利用できない場合、この関数はNULLを返し、GLFW_API_UNAVAILABLEエラーを生成します。glfwVulkanSupportedを呼び出して、Vulkanが少なくとも最低限利用可能かどうかを確認してください。

Vulkanが利用可能であっても、ウィンドウサーフェス作成を可能にする拡張機能のセットが見つからなかった場合、この関数はNULLを返します。オフスクリーンレンダリングや計算作業のためにVulkanを使用することはできます。

c
const char ** glfwGetRequiredInstanceExtensions(uint32_t * count)

引数:

  • [out] count: 返された配列の拡張子の数を格納する場所。エラーが発生した場合は 0 が格納される。

戻り値:

ASCII エンコードされた拡張子名の配列。エラーが発生した場合は NULL。

エラー:

起こりうるエラーは GLFW_NOT_INITIALIZED と GLFW_API_UNAVAILABLE である。

備考:

GLFW の将来のバージョンでは、追加の拡張が必要になるかもしれません。VkInstanceCreateInfo 構造体の中で一度だけ拡張を指定するのはエラーであるため、有効にしたい拡張がすでに返された配列の中にあるかどうかを確認する必要があります。

ポインタの寿命:

返された配列はGLFWによって割り当てられ、解放される。自分で解放してはならない。ライブラリが終了するまで有効であることが保証されている。

スレッドセーフ:

この関数はどのスレッドからでも呼び出すことができる。

参照:

  • Querying required Vulkan extensions
  • glfwCreateWindowSurface

追加:

バージョン3.2で追加。

glfwGetInstanceProcAddress()

この関数は、指定されたインスタンスの指定されたVulkanコアまたは拡張関数のアドレスを返します。instanceがNULLに設定されている場合、少なくとも以下の関数を含む、Vulkanローダーからエクスポートされた任意の関数を返すことができます:

  • vkEnumerateInstanceExtensionProperties
  • vkEnumerateInstanceLayerProperties
  • vkCreateInstance
  • vkGetInstanceProcAddr

Vulkanがマシンで利用できない場合、この関数はNULLを返し、GLFW_API_UNAVAILABLEエラーを生成します。glfwVulkanSupportedを呼び出して、Vulkanが少なくとも最低限利用可能かどうかをチェックします。

この関数は、フォールバックとしてVulkanローダーのプラットフォーム固有のクエリでvkGetInstanceProcAddrを呼び出すことと同等です。

c
GLFWvkproc glfwGetInstanceProcAddress(VkInstance instance, const char * procname)

引数:

  • [in] instance: 問い合わせるVulkanインスタンス、またはインスタンス生成に関連する関数を取得する場合はNULL。
  • [in] procname: ASCIIエンコードされた関数名。

戻り値:

関数のアドレス。エラーが発生した場合は NULL。

エラー:

起こりうるエラーは GLFW_NOT_INITIALIZED と GLFW_API_UNAVAILABLE である。

ポインタの寿命:

返された関数ポインターは、ライブラリーが終了するまで有効である。

スレッドセーフ:

この関数はどのスレッドからでも呼び出すことができる。

参照:

  • Querying Vulkan function pointers

追加:

バージョン3.2で追加。

glfwGetPhysicalDevicePresentationSupport()

この関数は、指定された物理デバイスの指定されたキューファミリーが、GLFWが構築されたプラットフォームへの表示をサポートしているかどうかを返します。

Vulkanまたは必要なウィンドウサーフェス作成インスタンス拡張がマシン上で利用できない場合、または指定されたインスタンスが必要な拡張で作成されなかった場合、この関数はGLFW_FALSEを返し、GLFW_API_UNAVAILABLEエラーを生成します。glfwVulkanSupportedを呼び出してVulkanが最低限利用可能かどうかをチェックし、glfwGetRequiredInstanceExtensionsを呼び出してどのインスタンス拡張が必要かをチェックする。

c
int glfwGetPhysicalDevicePresentationSupport(VkInstance instance, VkPhysicalDevice device, uint32_t queuefamily)

引数:

  • [in] instance: 物理デバイスが属するインスタンス。
  • [in] device: キューファミリが属する物理デバイス。
  • [in] queuefamily: 問い合わせるキューファミリーのインデックス。

戻り値:

キューファミリーがプレゼンテーションをサポートしていれば GLFW_TRUE、そうでなければ GLFW_FALSE。

エラー:

起こりうるエラーは、GLFW_NOT_INITIALIZED、 GLFW_API_UNAVAILABLE、GLFW_PLATFORM_ERRORである。

備考:

macOS: VK_MVK_macos_surface と VK_EXT_metal_surface 拡張は vkGetPhysicalDevice*PresentationSupport タイプの関数を提供していないため、この関数は現在常に GLFW_TRUE を返します。

スレッドセーフ:

この関数はどのスレッドからでも呼び出すことができます。Vulkanオブジェクトの同期の詳細については、Vulkan仕様を参照してください。

参照:

Vulkanプレゼンテーション・サポートの問い合わせ

追加:

バージョン3.2で追加。

glfwCreateWindowSurface()

この関数は、指定されたウィンドウのVulkanサーフェスを作成します。

Vulkanローダーまたは少なくとも1つの最低限機能するICDが見つからなかった場合、この関数はVK_ERROR_INITIALIZATION_FAILEDを返し、GLFW_API_UNAVAILABLEエラーを生成します。glfwVulkanSupportedを呼び出して、Vulkanが少なくとも最低限利用可能かどうかをチェックする。

必要なウィンドウサーフェス作成インスタンス拡張が利用できない場合、または指定されたインスタンスがこれらの拡張を有効にして作成されていない場合、この関数はVK_ERROR_EXTENSION_NOT_PRESENTを返し、GLFW_API_UNAVAILABLEエラーを生成します。どのようなインスタンス拡張が必要かを確認するには, glfwGetRequiredInstanceExtensions を呼び出します.

ウィンドウサーフェスは他のAPIと共有できないので、ウィンドウはGLFW_NO_APIに設定されたクライアントAPIヒントで作成されなければなりません、そうでなければGLFW_INVALID_VALUEエラーを生成し、VK_ERROR_NATIVE_WINDOW_IN_USE_KHRを返します。

ウィンドウサーフェスは、指定されたVulkanインスタンスの前に破棄されなければなりません。ウィンドウサーフェスを破棄するのは呼び出し元の責任です。GLFWはあなたのためにそれを破壊しません。サーフェスを破棄するにはvkDestroySurfaceKHRを呼び出します。

c
VkResult glfwCreateWindowSurface(VkInstance instance, GLFWwindow * window, const VkAllocationCallbacks * allocator, VkSurfaceKHR * surface)

引数:

  • [in] instance: サーフェスを作成するVulkanインスタンス。
  • [in] window: サーフェスを作成するウィンドウ。
  • [in] allocator: デフォルトのアロケータを使う場合は NULL。
  • [out] surface: サーフェスのハンドルを格納する場所。エラーが発生した場合は VK_NULL_HANDLE に設定されます。

戻り値:

成功した場合はVK_SUCCESS、エラーが発生した場合はVulkanエラーコード。

エラー:

起こりうるエラーは GLFW_NOT_INITIALIZED、 GLFW_API_UNAVAILABLE、 GLFW_PLATFORM_ERROR、 GLFW_INVALID_VALUE です。

備考:

作成呼び出しが行われる前にエラーが発生した場合、GLFWはそのエラーに最も適したVulkanエラーコードを返します。glfwVulkanSupportedとglfwGetRequiredInstanceExtensionsを適切に使用することで、これらのエラーの発生はほとんどなくなるはずです。

  • macOS: GLFW は VK_EXT_metal_surface エクステンションを優先し、VK_MVK_macos_surface エクステンションをフォールバックとします。もしあれば、選択された拡張の名前は glfwGetRequiredInstanceExtensions が返す配列に含まれます。
  • macOS: この関数は、MoltenVKが機能するために必要なウィンドウコンテンツビュー用のCAMetalLayerインスタンスを生成し、設定する。

スレッドセーフ:

この関数はどのスレッドからでも呼び出すことができます。Vulkanオブジェクトの同期の詳細については、Vulkan仕様を参照してください。

参照:

  • Creating a Vulkan window surface
  • glfwGetRequiredInstanceExtensions

追加:

バージョン3.2で追加。