wgsl-rs: Rust 코드를 GPU 셰이더(WGSL)로 동시에 돌리는 매크로 크레이트
요약
기사 전체 정리
Rust-GPU의 한계, 그리고 wgsl-rs의 등장
Renderling이라는 실시간 3D 렌더러를 만드는 개발자가 Rust-GPU를 쓰다가 한계를 느끼고 직접
wgsl-rs라는 크레이트를 만들었음. 핵심은 Rust 코드에#[wgsl]매크로를 붙이면 같은 코드가 CPU에서는 Rust로, GPU에서는 WGSL로 동시에 돌아가는 것Rust-GPU의 장점은 확실함 — 모듈 시스템, 타입 체킹, 제네릭, 에디터 툴링 등 Rust의 모든 이점을 셰이더에서 쓸 수 있음. 근데 현실적인 고통이 만만치 않음:
- 커스텀 컴파일러 백엔드 프로비저닝이 번거로움
- 특정 nightly Rust 컴파일러에 종속
spirv-std가 2년 넘게 업데이트 안 됨- CPU 코드와 GPU 코드(SPIR-V)의 이중 컴파일 + 링킹 필요
while루프,for루프,transmute등 안 되는 것들을 부딪혀봐야 알게 됨
게다가 Rust-GPU 나머지 메인테이너들이 "Vectorware"라는 AI/범용 컴퓨팅 스타트업을 차리면서 커뮤니케이션이 뜸해짐. 작가는 그래픽/사운드/게임 쪽이라 방향이 갈린 거임
wgsl-rs가 주는 것
- stable Rust에서 동작. nightly 필요 없음.
cargo add wgsl-rs하면 끝 - 컴파일 타겟이 하나. SPIR-V 바이너리 만들고 다시 링크하는 과정 없이, proc macro가 컴파일 타임에 WGSL 문자열을 생성
- 생성된 WGSL이 사람이 읽을 수 있는 수준. Rust 코드와 거의 1:1 대응되어서 GPU 디버깅 시 추론이 가능
- 셰이더를
cargo test로 유닛 테스트 가능. CPU에서 같은 로직이 그대로 돌아가니까 물리 연산, 컬링 같은 건 프로덕션에서도 CPU 버전을 쓸 수 있음 linkage-wgpu피처를 켜면 wgpu 보일러플레이트(버퍼 디스크립터, 바인드 그룹 레이아웃, 셰이더 모듈 생성 등)까지 자동 생성
팁
> standalone 모듈은 컴파일 타임에 naga로 WGSL 검증까지 해주고, 에러를 Rust 소스 스팬에 매핑해줌. 다른 #[wgsl] 모듈을 import하는 경우에는 cargo test로 검증
트레이드오프
WGSL만 지원. Rust-GPU는 SPIR-V → Vulkan/OpenGL/Metal 다 되지만, wgsl-rs는 WebGPU(wgpu) 한정
더 엄격한 Rust 서브셋: 트레이트 없음, 제네릭 없음, 클로저/이터레이터 없음. 제네릭 없는 게 특히 고통스럽다고 직접 언급
바인드리스 리소스, 메시 셰이더, 레이트레이싱 같은 최신 GPU 기능은 WGSL 스펙 범위 밖이라 불가
저자의 포인트: wgsl-rs와 Rust-GPU는 양자택일이 아님. wgsl-rs로 빠르게 시작하고, 벽에 부딪히면 Rust-GPU로 넘어가면 됨. 2026년 로드맵은 crates.io 베타 릴리스 → GPU 슬랩 할당(crabslab/craballoc) → GPU 가속 ECS(podecs) → Renderling 내부 재작성 → GPU 레이트레이서 순서
핵심 포인트
인사이트
관련 기사
Microsoft가 공개한 Rust 트레이닝 자료 — 초급부터 전문가까지 7개 코스
RK3588 GPU 안에 숨어있는 Cortex-M7 MCU를 뜯어보고 Rust/gdb/MicroPython까지 올려본 이야기
오픈소스가 전부를 줬고, 줄 것이 남지 않을 때까지 — Requests 창시자의 고백
IBM Z/LinuxONE 오픈소스 2월 리포트 — Cassandra부터 Terraform까지 27개 검증
1년간 OS를 밑바닥부터 만든 개발자 — 부트로더에서 Doom 포팅까지
댓글
댓글
댓글을 불러오는 중...