Skip to content

Latest commit

 

History

History
62 lines (35 loc) · 5.81 KB

what_is_spirv.adoc

File metadata and controls

62 lines (35 loc) · 5.81 KB

SPIR-V 란?

Note

SPIR-V에 대한 자세한 내용은 SPIRV-Guide를 참조하세요

SPIR-V는 그래픽 쉐이더 스테이지와 컴퓨트 커널을 위한 바이너리 중간 표현입니다. Vulkan에서는 애플리케이션에서 쉐이더를 GLSL 또는 HLSL과 같은 고수준 쉐이딩 언어를 쓸수 있지만, vkCreateShaderModule을 사용할 때는 SPIR-V 바이너리가 필요합니다. 크로노스에는 SPIR-V와 그 장점 및 표현에 대한 높은 수준의 설명에 대한 백서(white paper)가 있습니다. Vulkan DevDay 2016에서 두 가지 훌륭한 크로노스 프레젠테이션을 이곳이곳에서 볼 수 있습니다. (두 프레젠테이션의 동영상).

SPIR-V 인터페이스 및 기능

Vulkan에는 Vulkan이 SPIR-V 쉐이더와 인터페이스하는 방법을 정의하는 전체 섹션이 있습니다. SPIR-V와의 인터페이스는쉐이더를 함께 컴파일할 때 파이프라인 생성 중에 가장 유효하게 사용됩니다.

SPIR-V는 Vulkan뿐만 아니라 다른 대상도 지원하기 때문에 많은 기능을 가지고 있습니다. Vulkan에 필요한 지원 기능을 확인하려면 부록을 참조하세요. Vulkan의 일부 확장 및 기능은 일부 SPIR-V 기능의 지원 여부를 확인하기 위해 설계되었습니다.

컴파일러

glslang

glslang은 GLSL, HLSL, ESSL을 위한 크로노스 레페런스 프론트엔드이며 샘플 SPIR-V 생성기입니다. 독립형 glslangValidator 도구가 포함되어 있어 GLSL, HLSL, ESSL에서 SPIR-V를 생성하는 데 사용할 수 있습니다.

Shaderc

Google에서 호스팅하는 Vulkan 쉐이더 컴파일을 위한 도구, 라이브러리 및 테스트 모음입니다. 여기에는 glslangSPIRV-Tools의 핵심 기능을 감싸는 glslc 가 포함되어 있습니다. Shaderc 에는 SPIRV-CrossSPIRV-Tools의 핵심 기능을 감싸는 spvc 도 포함되어 있습니다.

Shaderc는 독립형 커맨드 라인 툴(glslc)과 링크할 라이브러리(libshaderc) 두 도구를 사용하여 빌드합니다.

DXC

DirectXShaderCompilerHLSL을 SPIR-V로 변환하는 기능도 지원합니다.

what_is_spirv_dxc.png

Clspv

Clspv는 Vulkan 컴퓨트 쉐이더로 사용할 수 있는 OpenCL C의 하위 집합을 SPIR-V로 변환하기 위한 프로토타입 컴파일러입니다.

도구와 생태계

SPIR-V를 활용할 수 있는 풍부한 도구 생태계가 있습니다. Vulkan SDK에서는 개발자를 위해 빌드되고 패키징된 모든 SPIR-V 도구 개요를 소개하고 있습니다.

SPIRV-Tools

크로노스 SPIRV-Tools 프로젝트는 SPIR-V 모듈과 함께 작동하기 위한 C/C++ API와 명령줄 인터페이스를 제공합니다. 자세한 내용은 SPIRV-Guide를 참조하세요.

SPIRV-Cross

크로노스 SPIRV-Cross 프로젝트는 SPIR-V에 대한 리플렉션을 수행하고 SPIR-V를 원하는 고수준 쉐이딩 언어로 다시 분해할 수 있는 실용적인 도구이자 라이브러리입니다. 자세한 내용은 SPIR-V Cross의 주요 개발자인 Hans Kristian이 SPIR-V Cross와 같은 도구를 만드는 데 필요한 사항에 대해 두 차례에 걸쳐 훌륭한 프레젠테이션을 진행한 바 있습니다(2018 Vulkanised (video) 와 2019 Vulkanised (video).

what_is_spirv_spriv_cross.png

SPIRV-LLVM

크로노스 SPIRV-LLVM 프로젝트는 SPIR-V를 지원하는 LLVM 프레임워크입니다. 이 프로젝트는 LLVM과 SPIR-V 간의 양방향 변환기를 포함하도록 설계되었습니다. 또한 SPIR-V를 대상으로 하는 LLVM 기반 프론트엔드 컴파일러의 기반이 되기도 합니다.