Skip to content

Latest commit

 

History

History
74 lines (45 loc) · 6.99 KB

versions.adoc

File metadata and controls

74 lines (45 loc) · 6.99 KB

버전(Versions)

Vulkan은 메이저(major), 마이너(minor), 패치(patch) 버전관리 시스템으로 작동합니다. 현재 Vulkan에는 서로 하위호환되는 3개의 부 버전 릴리즈 (1.0, 1.1, 1.2, 1.3)가 있습니다. 애플리케이션은 vkEnumerateInstanceVersion을 사용하여 어떤 버전의 Vulkan 인스턴스가 지원되는지 확인할 수 있습니다. 지원되는 버전을쿼리하고 확인하는 방법에 대한 LunarG의 백서(white paper)도 있습니다. 부 버전에서 작업할 때 주의해야 할 몇 가지 미묘한 사항이 있습니다.

인스턴스와 장치

인스턴스 레벨 버전과 디바이스 레벨 버전에는 차이가 있다는 점이 중요합니다. 로더와 구현이 서로 다른 버전을 지원할 수 있습니다.

Vulkan 사양서의 버전 지원 쿼리 섹션에서는 인스턴스 및 장치 레벨에서 지원되는 버전을 쿼리하는 방법에 대해 자세히 설명합니다.

헤더

모든 메이저 릴리즈의 Vulkan에는 지원되는 헤더가 하나밖에 없습니다. 즉, 마이너 버전과 패치 버전의 모든 헤더가 통합되기 때문에 “Vulkan 1.0 헤더” 와 같은 것은 존재하지 않습니다. 이것을 Vulkan 사양서 1.0 버전을 생성하는 기능과 혼동하면 안됩니다. 동일한 패치 버전의 Vulkan 사양서와 헤더가 일치하기 때문입니다. 예를 들어 생성된 1.0.42 Vulkan 사양서는 1.x.42 헤더와 일치합니다.

개발자는 출시된 최신 헤더 파일을 최신 상태로 유지하도록 노력하는 것을 적극 권장합니다. Vulkan SDK는 패키킹될 헤더 버전에 따라 다양한 버전으로 제공됩니다.

확장 기능

Vulkan의 마이너 버전 사이에서 일부 확장 기능코어 버전으로 승격됩니다. Vulkan의 최신 마이너 버전을 대상으로 하는 애플리케이션은 인스턴스 및 장치 생성 시 새로 승격된 확장 기능을 활성화할 필요가 없습니다. 그러나 애플리케이션이 이전 버전과의 호환성을 유지하려면 확장 기능을 활성화해야 합니다.

각 버전의 새로운 기능에 대한 요약은 Vulkan 랄리즈 요약을 확인하세요.

구조체와 열거형

구조체와 열거형은 쿼리되는 인스턴스나 장치의 버전이 아니라 사용 중인 헤더 파일에 따라 달라집니다. 예를 들어, VkPhysicalDeviceFeatures2 구조체는 Vulakn 1.1이 릴리즈되기 전에는 VkPhysicalDeviceFeatures2KHR 이었습니다. 사용 중인 Vulkan의 1.x 버전과 상관없이 애플리케이션은 최신 헤더 버전과 일치하는 VkPhysicalDeviceFeatures2 를 코드에서 사용해야 합니다. 코드에 VkPhysicalDeviceFeatures2KHR 이 있는 애플리케이션의 경우, Vulkan 헤더가 승격된 구조체와 열거형에 별칭을 지정하므로 걱정할 필요가 없습니다 (typedef VkPhysicalDeviceFeatures2 VkPhysicalDeviceFeatures2KHR;).

Vulkan 사양서는 어떤 버전이 생성되더라도 VkPhysicalDeviceFeatures2 만을 참조하므로 새 이름 사용을 권장합니다. 새 이름을 사용하여 이 구조체가 사용되고 있는 위치를 빠르게 검색할 수 있습니다.

함수

함수는 로더 및 구현과 상호 작용하는 데 사용되므로 마이너 버전 간에 작업할 때 조금 더 주의를 기울여야 합니다. 예를 들어, Vulakn 1.0에서 1.1로 넘어오면서 vkGetPhysicalDeviceFeatures2 로 코어로 승격된 vkGetPhysicalDeviceFeatures2KHR 을 살펴봅시다. Vulkan 헤더를 보면 둘 다 선언되어 있습니다.

typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFeatures2)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2* pFeatures);
// ...
typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFeatures2KHR)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2* pFeatures);

가장 큰 차이점은 vkGetInstanceProcAddr(인스턴스, “vkGetPhysicalDeviceFeatures2”); 를 호출할 때 Vulkan 1.0 구현은 vkGetPhysicalDeviceFeatures2 의 존재를 인식하지 못하고 vkGetInstanceProcAddrNULL 을 반환한다는 점입니다. 이 상황에서 Vulkan 1.0과의 하위 호환성을 유지하려면, 애플리케이션이 vkGetPhysicalDeviceFeatures2KHR 을 쿼리해야 하는데, 1.1 Vulakn 구현은 내부적으로 vkGetPhysicalDeviceFeatures2 함수 포인터를 직접 가리키는 함수가 있을 가능성이 높기 때문입니다.

Note

Vulkan 1.0 구현에서 vkGetPhysicalDeviceFeatures2KHR 함수는 확장 기능으로서 지원되고 있는 경우에만 존재합니다.

기능(Features)

마이너 버전 간에 몇 가지 기능 비트가 추가, 제거, 선택/필수 사항으로 변경될 수 있습니다. 변경된 기능에 대한 자세한 내용은 핵심 개정 사항 섹션에 설명되어 있습니다.

Vulkan 사양서의 기능 요구사항 섹션에서 마이너 버전 구현에 필요한 기능 목록을 확인할 수 있습니다.

제한

현재 Vulkan의 모든 버전은 최소/최대 제한 요구 사항을 동일하게 공유하지만, 변경 사항이 있을 경우 Vulkan 사양서의 제한 요구사항 섹션에 기재됩니다.

SPIR-V

모든 Vulkan의 마이너 버전은 지원해야 하는 SPIR-V 버전에 매핑됩니다.

  • Vulkan 1.0은 SPIR-V 1.0 을 지원합니다

  • Vulkan 1.1은 SPIR-V 1.3 이하를 지원합니다

  • Vulkan 1.2은 SPIR-V 1.5 이하를 지원합니다

  • Vulkan 1.3은 SPIR-V 1.6 이하를 지원합니다

VkShaderModule 의 SPIR-V가 해당 Vulkan 버전에 유효한 버전인지 확인하는 것은 애플리케이션의 몫입니다.