ここでは、機能を有効化について説明します。
Vulkan のすべての機能は、3つのセクションに分類されます。
-
コア1.0機能
-
Vulkan 1.0の初期リリースから利用可能な機能をまとめたものです。機能のリストは、VkPhysicalDeviceFeaturesに記載されています。
-
-
将来のコアバージョンの機能
-
Vulkan 1.1以上では、いくつかの新機能が Vulkan のコアバージョンに追加されました。
VkPhysicalDeviceFeatures
のサイズの後方互換性を保つために、機能のグループを保持するための新しい構造体が作成されました。
-
-
拡張機能の機能
-
拡張機能には、その拡張機能のある側面を有効にするための機能が含まれていることがあります。これらはすべて
VkPhysicalDevice[ExtensionName]Features
とラベル付けされているので、簡単に見つけることができます。
-
すべての機能は、VkDevice
作成時に VkDeviceCreateInfo 構造体内で有効にする必要があります。
Note
|
最初に |
コア1.0の機能では、オンにしたい機能を VkDeviceCreateInfo::pEnabledFeatures
に設定するだけです。
VkPhysicalDeviceFeatures features = {};
vkGetPhysicalDeviceFeatures(physical_device, &features);
// 機能がサポートされていない場合のロジック
if (features.robustBufferAccess == VK_FALSE) {
}
VkDeviceCreateInfo info = {};
info.pEnabledFeatures = &features;
コア1.0の機能を含むすべての機能については、VkPhysicalDeviceFeatures2
を使用して、VkDeviceCreateInfo.pNext
に渡してください。
VkPhysicalDeviceShaderDrawParametersFeatures ext_feature = {};
VkPhysicalDeviceFeatures2 physical_features2 = {};
physical_features2.pNext = &ext_feature;
vkGetPhysicalDeviceFeatures2(physical_device, &physical_features2);
// 機能がサポートされていない場合のロジック
if (ext_feature.shaderDrawParameters == VK_FALSE) {
}
VkDeviceCreateInfo info = {};
info.pNext = &physical_features2;
また、「将来のコアバージョンの機能」についても同様です。
VkPhysicalDeviceVulkan11Features features11 = {};
VkPhysicalDeviceFeatures2 physical_features2 = {};
physical_features2.pNext = &features11;
vkGetPhysicalDeviceFeatures2(physical_device, &physical_features2);
// 機能がサポートされていない場合のロジック
if (features11.shaderDrawParameters == VK_FALSE) {
}
VkDeviceCreateInfo info = {};
info.pNext = &physical_features2;