Vulkan에서 실행 가능한 코드를 생성하도록 설계된 Clang 기반 컴파일러인 Vcc

vcc

Vcc: Vulkan Clang 컴파일러

그래픽 API 환경에서는 음영 언어는 한계에 직면했습니다, GLSL, HLSL 및 C++ 간의 공통 하위 집합에 코드를 작성할 가능성에도 불구하고 현재 제한 사항이 존재하기 때문입니다.

Vcc가 탄생한 이유 (Vulkan Clang Compiler) 3년간 개발해온 프로젝트인 Vulkan Clang 컴파일러는, 이러한 한계와 도전에 대한 대응으로 발생. 이 프로젝트는 표현적 제한을 극복할 뿐만 아니라 음영 언어의 개념 자체를 제거하려고 합니다.

통합하여 완전한 언어군 C / C ++ 불칸에게, Vcc는 Vulkan 셰이더에서 이전에는 볼 수 없었던 기능을 도입합니다. 물리적 포인터, 일반 포인터, 실제 함수 호출 및 완전한 제어 흐름과 같은 것입니다.

이 이니셔티브 그래픽과 컴퓨팅 API 사이의 소프트웨어 격차를 해소하려고 합니다. Vulkan을 다른 GPU 컴퓨팅 API와 호환되게 만듦으로써 Vcc는 Vulkan의 유명한 대량 채택 및 구현 품질에 맞춰 그래픽과 컴퓨팅의 프로그래밍을 통합하는 중요한 단계로 제시됩니다.

VCC 소개

Vcc는 Vulkan에서 실행 가능한 코드를 생성하도록 설계된 Clang 기반 컴파일러이며, 그 목적은 다음과 같습니다. C++ 코드를 번역할 수 있는 컴파일러로 자리매김 GPU에서 실행될 수 있는 표현 Vulkan 그래픽 API를 지원합니다. Vcc는 GLSL 및 HLSL 셰이더 언어를 기반으로 하는 GPU 프로그래밍 모델과 달리 별도의 셰이더 언어 사용을 완전히 제거한다는 아이디어를 취하고 Vulkan용 C/C++ 코드를 직접 컴파일하는 기능을 제공합니다.

이기는하지만 GLSL 및 HLSL의 경쟁자로 간주될 수 있습니다. 이 프로젝트의 진정한 의도는 다음과 같습니다. Vcc는 C/C++ 언어 계열을 Vulkan에 통합하려고 합니다. Vulkan 셰이더의 다양한 기능을 소개합니다.

Vcc는 단순히 앞서 언급한 구성을 지원하여 SPIR-V를 확장하도록 설계된 IR 및 컴파일러인 Shady에 대한 인터페이스입니다. Shady는 비교적 일반적인 IR로 제공되며 LLVM IR 구문 분석 지원을 포함합니다. 현재 버전의 SPIR-V 3에는 없는 모든 추가 기능의 축소 및 에뮬레이션을 처리합니다.

물론 셰이더에서만 볼 수 있는 고유한 기능이 많이 있습니다. 이는 내장 함수와 주석을 사용하여 Vcc에 노출되므로 Vulkan 채널의 다양한 기능과 상호 작용하는 코드를 작성할 수 있습니다.

Vcc의 컴파일 프로세스에는 LLVM 및 Clang 프로젝트 구성 요소의 사용이 포함됩니다. 인터페이스로. GPU에서 실행하려면 Vcc 자체 중간 셰이더 표현 "Shady"를 개발합니다. 전용 컴파일러와 함께 코드를 이 표현으로 변환합니다. 이 접근 방식을 사용하면 표준 C/C++ 코드를 컴파일할 수 있으며 GPU의 기능을 활용할 수 있는 특정 내장 함수로 보완됩니다.

VCC 프로그램 흐름을 제어하기 위한 기본 C/C++ 기능 지원이 눈에 띕니다. 심지어 "goto" 명령의 사용도 허용합니다. 또한 함수 호출, 함수 재귀적 실행, 물리적 포인터, 태그 포인터, 함수 포인터 등 다양한 유형의 포인터 사용 기능을 제공합니다. 또한 포인터에 대한 산술 연산을 수행하고 메모리에서 유형 레이아웃을 결정하는 것이 더 쉬워졌습니다.

Shady 셰이더 중간 표현은 SPIR-V 3을 기반으로 하며 C/C++ 기능에 고유한 특수 구성을 지원하도록 확장되었습니다. 에뮬레이션은 SPIR-V에 직접 적용할 수 없는 고급 기능을 구현하는 데 사용됩니다. Vcc에는 프로그램이 셰이더의 특정 기능을 효율적으로 사용할 수 있도록 내장된 기능과 주석이 포함되어 있어 GPU 애플리케이션 개발을 위한 다양하고 강력한 환경을 제공합니다.

마지막으로, 모든 것이 장밋빛인 것은 아니라는 점을 언급할 가치가 있습니다.구현의 일부 제한 사항을 고려하는 것이 중요합니다. 예를 들어 Vcc는 C++ 예외를 지원하지 않으며 malloc/free 기능을 사용할 수 없습니다. 또한 호스트 시스템과 GPU 간의 함수 및 포인터 이식성에 제한이 있습니다. 이러한 고려 사항은 효율적이고 문제 없는 배포를 보장하기 위해 Vcc를 사용하는 응용 프로그램 개발을 계획할 때 중요합니다.

낮잠 그것에 대해 더 알고 싶은 관심, 당신은 상담할 수 있습니다 사이트 코드에 관심이 있는 사람들은 코드가 사용 가능하다는 것을 알아야 합니다. 여기.


코멘트를 남겨주세요

귀하의 이메일 주소는 공개되지 않습니다. 필수 필드가 표시되어 있습니다 *

*

*

  1. 데이터 책임자: AB Internet Networks 2008 SL
  2. 데이터의 목적 : 스팸 제어, 댓글 관리.
  3. 합법성 : 귀하의 동의
  4. 데이터 전달 : 법적 의무에 의한 경우를 제외하고 데이터는 제 XNUMX 자에게 전달되지 않습니다.
  5. 데이터 저장소 : Occentus Networks (EU)에서 호스팅하는 데이터베이스
  6. 권리 : 귀하는 언제든지 귀하의 정보를 제한, 복구 및 삭제할 수 있습니다.