Skip to content

Latest commit

 

History

History
85 lines (60 loc) · 3.33 KB

enabling_features.adoc

File metadata and controls

85 lines (60 loc) · 3.33 KB

기능 활성화

이 섹션에서는 기능 활성화하는 방법에 대해 설명합니다.

기능 분류

Vulkan의 모든 기능은 다음 3가지 섹션으로 분류될 수 있습니다

  1. 핵심 1.0 기능

    • 다음은 Vulkan의 초기 1.0 릴리즈부터 제공된 기능 모음입니다. 기능 목록은 VkPhysicalDeviceFeatures에 기재되어 있습니다.

  2. 미래 핵심 버전의 기능

    • Vulkan 1.1 이상 부터는 Vulkan의 핵심 버전에 몇 가지 새로운 기능이 추가되었습니다. 이전 버전과의 호환성을 유지하기 위해 VkPhysicalDeviceFeatures 의 크기를 유지하기 위해 기능 그룹을 보관하는 새로운 구조체를 만들었습니다.

    • VkPhysicalDeviceVulkan11Features

    • VkPhysicalDeviceVulkan12Features

  3. 확장 기능

    • 확장 기능에는 그 확장 기능의 어떤 부분을 활성화하기 위한 기능이 포함되어 있을 수 있습니다. 이러한 기능은 모두 VkPhysicalDevice[ExtensionName]Features 로 레이블이 붙어 있으므로 쉽게 찾을 수 있습니다.

기능 활성화하는 방법

모든 기능은 VkDevice 생성할 때, VkDeviceCreateInfo 구조체 내에서 활성화해야 합니다.

Note

먼저 vkGetPhysicalDeviceFeatures 또는 vkGetPhysicalDeviceFeatures2 로 쿼리하는 것을 잊지 마세요

핵심 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;