sebbbi/NoGraphicsAPI
Minimal graphics API. Built on top of latest Vulkan extensions. As close as possibly to my "No Graphics API" blog post and the SIGGRAPH talk.
해결하는 문제
NoGraphicsAPI는 기존 그래픽 API의 복잡한 메커니즘을 제거하여 GPU 프로그래밍을 단순화합니다. 버퍼 객체, 정점 레이아웃 선언, 바인딩 테이블이 필요 없어져 GPU 메모리와 데이터 구조가 표준 CPU 측 프로그래밍처럼 느껴집니다.
작동 방식
이 라이브러리는 최신 하드웨어 기능(Metal 4 및 Vulkan 1.4)을 활용하여 바인드리스 데이터 모델을 구현합니다.
- GPU 포인터: 데이터에 64비트 포인터를 사용하여 셰이더가 디스크립터 세트 없이 배열 및 중첩 구조체에 대한 포인터를 따라갈 수 있게 합니다.
- 디스크립터 힙: 바인드리스 텍스처와 샘플러를 구현하여 애플리케이션이 리소스를 다시 바인딩하는 대신 인덱스를 관리합니다.
- 루트 인자: 바인딩 테이블을 드로우 또는 디스패치 호출에 필요한 모든 상수와 리소스 인덱스를 포함하는 공유 C++/Slang 구조체에 대한 단일 GPU 포인터로 대체합니다.
- 직접 메모리 액세스: 매핑된 힙을 사용하여 CPU가 별도의 버퍼 유형을 거치지 않고 GPU 액세스 가능 메모리에 직접 데이터를 쓸 수 있게 합니다.
- 간소화된 동기화: 특정 이미지 레이아웃을 추적하는 대신 작업 생성 및 소비에 기반한 동기화에 중점을 둡니다.
대상 사용자
최신 하드웨어에서 기존 렌더링 파이프라인과 관련된 보일러플레이트 및 상태 결합을 줄이려는 저수준 그래픽 프로그래머를 위한 것입니다.
주요 특징
- 크로스 플랫폼 백엔드: Metal 4(macOS/iOS) 및 Vulkan 1.4(Windows/Linux)를 기본 지원합니다.
- Slang 통합: 공유 Slang 셰이더를 사용하여 CPU와 GPU가 동일한 데이터 선언을 공유하도록 보장합니다.
- 파이프라인 상태 감소: 리소스 바인딩 및 정점 레이아웃을 파이프라인 생성에서 분리하여 파이프라인 순열 수를 줄입니다.
- 하드웨어 최적화: 고급 최신 GPU(예: Apple Silicon M1+, NVIDIA RTX 30/40/50 시리즈, AMD RDNA 3/4)를 특히 대상으로 합니다.
관련
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트