이 섹션에서는 기능 활성화하는 방법에 대해 설명합니다.
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;