한 줄의 출력

542025년 08월 29일4

최초의 메시 셰이더는 실패했다. 하지만 그 실패는 암흑이 아니라, 수십 개의 붉은 에러 메시지라는 명확한 단서를 남겼다. Dawn 팀은 이제부터 이 단서들을 하나씩 추적하며, 미로 같은 디버깅의 여정을 시작해야 했다.

첫 번째 에러 메시지는 WGSL 컴파일러에서 발생했다.
“Error: @dispatch_mesh attribute is not yet supported in the SPIR-V backend.”

SPIR-V 백엔드에서 @dispatch_mesh 어트리뷰트를 지원하지 않는다는, 명백한 미구현의 증거였다. 벤과 그의 팀은 즉시 컴파일러 코드로 달려가, Task Shader가 Mesh Shader의 작업 그룹 수를 지정하는 이 새로운 문법을 SPIR-V 코드로 번역하는 로직을 추가하기 시작했다.

며칠 후, 컴파일러 에러가 사라졌다. 하지만 다음 관문이 기다리고 있었다. 이번에는 Vulkan 유효성 검사 계층(Validation Layer)이 비명을 질렀다.
“Validation Error: vkCmdDrawMeshTasksEXT: The number of dispatched task workgroups (x=1, y=1, z=1) exceeds the device's limit (x=0, y=0, z=0).”

디바이스가 지원하는 최대 작업 그룹 수가 0이라는, 황당한 메시지였다. 이것은 Dawn의 초기화 과정에서, 현재 기기가 메시 셰이더를 지원하는지 확인하고 관련 제한 값들을 제대로 읽어오지 못했다는 의미였다.

카이의 팀은 Dawn의 디바이스 초기화 코드를 파고들었다. 그들은 Vulkan 인스턴스를 생성할 때, 메시 셰이더 관련 확장 기능(VK_EXT_mesh_shader)을 활성화하는 코드를 누락했음을 발견했다. 그들은 코드를 수정하여, 어댑터(Adapter)를 질의하는 단계에서부터 메시 셰이더 지원 여부를 명시적으로 확인하도록 변경했다.

이제 유효성 검사 에러도 사라졌다. 하지만 화면은 여전히 텅 비어 있었다. 이번에는 아무런 에러 메시지도 출력되지 않았다. 가장 잡기 어려운 종류의 버그. 소리 없는 암살자였다.

드미트리는 그래픽 디버거를 연결하여 GPU의 상태를 프레임 단위로 들여다보았다.
그는 마침내 문제의 원인을 찾아냈다.

“이것 봐. 우리의 메시 셰이더는 분명히 실행되고 있어. 하지만… 셰이더 안에서 생성된 정점 데이터가 래스터라이저로 전혀 전달되지 않고 있어.”

분명 셰이더 코드에는 set_vertex_output 함수를 통해 정점의 위치와 색상 정보를 설정하는 로직이 있었다. 하지만 그 데이터는 파이프라인의 어딘가에서 증발해버리고 있었다.

팀은 며칠 밤낮으로 원인을 추적했다. 그리고 마침내, DirectX 12 백엔드를 담당하던 한 엔지니어가 작은 실수를 발견했다. 그는 HLSL(DirectX의 셰이더 언어)로 변환된 메시 셰이더의 출력 구조체(Output Structure) 정의에서, 시스템이 정점 위치를 인식하는 데 사용하는 시맨틱(Semantic), 즉 @SV_Position을 실수로 빠뜨렸던 것이다.

그 작은 누락 때문에, GPU는 셰이더가 계산한 수많은 데이터 중에서 어떤 것이 ‘화면 상의 위치’를 의미하는지 전혀 알 수 없었던 것이다.

마지막 패치가 적용되었다.
드미트리는 다시 한번, 떨리는 마음으로 실행 버튼을 눌렀다. 이제 더 이상 그들을 가로막을 만한 에러는 남아있지 않아 보였다.

1초. 2초.
정적이 흘렀다.

그리고 마침내.
화면 중앙에, 작지만 선명한 삼각형 하나가 나타났다.
정점은 각각 빨강, 초록, 파랑으로 빛나고 있었다.

“……됐다.”

그 한마디와 함께, 연구실에는 이전의 그 어떤 성공 때보다도 더 큰 환호성이 터져 나왔다. 그들은 단순히 삼각형 하나를 그린 것이 아니었다. 그들은 웹 그래픽의 새로운 패러다임이 실제로 동작한다는 것을, 그들 자신의 손으로 처음 증명해 낸 것이다.

그 작은 삼각형은, 수많은 실패와 디버깅 끝에 얻어낸, 황무지에 피어난 첫 번째 꽃이었다.

그날 밤, 드미트리는 W3C 커뮤니티 그룹에 짧은 메시지와 함께 스크린샷 한 장을 올렸다.

“Friends, we have first light. The first triangle rendered with a WebGPU mesh shader in Chromium.”
(여러분, 첫 번째 빛을 보았습니다. 크로미움에서 WebGPU 메시 셰이더로 렌더링된 최초의 삼각형입니다.)

그 한 줄의 메시지는 전 세계 웹 그래픽스 커뮤니티에 순식간에 퍼져나갔다. 모질라, 애플, 에픽게임즈의 엔지니어들이 축하와 격려의 댓글을 남겼다.

그들이 그린 것은 고작 삼각형 하나였지만, 그 한 줄의 출력은 웹이 또 다른 한계를 넘어섰음을 알리는, 우주를 향해 쏘아 올린 최초의 신호와도 같았다. 이제 이 신호를 보고, 수많은 다른 개척자들이 이 새로운 황무지로 모여들기 시작할 터였다.