1P by neo 3달전 | favorite | 댓글 1개

Vulkan 1.3, M1에서 한 달 만에 구현

Honeykrisp 드라이버 소개

  • Honeykrisp 드라이버: Apple 하드웨어에서 최초로 완전한 Vulkan 1.3 사양을 구현한 드라이버임.
  • 개발 상태: 아직 최종 사용자에게는 출시되지 않았으며, 기능 추가와 성능 개선 중임. 소스 코드는 개발자에게 공개됨.

개발 과정

4월 2일

  • 시작: NVK 드라이버를 기반으로 M1용 Vulkan 드라이버 개발 시작.

4월 3일

  • 디스크립터 세트: NVIDIA와 다른 M1의 디스크립터 세트를 NVK에 맞게 조정함.

4월 4일

  • 컴퓨트 셰이더: 컴퓨트 셰이더를 컴파일하고 Vulkan 명령을 사용해 버퍼와 이미지를 복사하는 기능 구현.

4월 6일

  • 그래픽 상태 처리: 그래픽 상태를 처리하는 코드 작성, OpenGL 드라이버에서 코드를 가져와 NVK와 결합함.

4월 7일

  • 동적 상태: 모든 상태를 동적으로 처리하는 전략 채택, 프로로그와 에필로그를 컴파일하고 캐시하는 코드 추가.

4월 8일

  • 테스트 결과: 초기 테스트 결과 149,770개 통과, 7,741개 실패, 2,396개 충돌.

4월 9일

  • Vulkan 1.3: Vulkan 1.1에서 99.6% 통과율 달성 후, Vulkan 1.3으로 전환하여 98.3% 통과율 달성.

4월 10일~4월 12일

  • 추가 테스트: SuperTuxKart와 Zink에서 Vulkan 렌더러 작동 확인, 테스트 버그 수정.

4월 16일~4월 17일

  • 컴파일러 버그 수정: 디스크립터 인덱싱 테스트에서 발견된 컴파일러 버그 수정, 무한 루프 문제 해결.

4월 18일

  • 제로 카피 렌더링: 효율적인 표면 레이아웃을 위해 EXT_image_drm_format_modifier 확장 구현.

4월 22일

  • 드라이버 아키텍처 검토: 드라이버 아키텍처 검토 후 최적화 진행, vkoverhead 테스트에서 1초당 1억 번의 드로우 호출 달성.

4월 24일~4월 25일

  • YCbCr 지원: YCbCr 기능 추가, Mohamed Ahmed의 NVK 코드 활용.
  • 쿼리 복사: GPU 쿼리 복사 기능 구현.

4월 26일

  • 경계 색상: Direct3D 호환성을 위한 EXT_custom_border_color 확장 구현, 경계 색상 문제 해결.

4월 27일

  • 최종 테스트: 모든 테스트 통과, 686,930개 통과, 0개 실패.

미래 계획

  • DXVK와 vkd3d-proton 지원: Direct3D 레이어링을 위한 추가 기능 구현 예정.
  • Windows 게임 실행: Wine과 오픈 소스 x86 에뮬레이터를 사용해 Asahi Linux에서 Windows 게임 실행 계획.

GN⁺의 의견

  • 기술적 도전: M1에서 Vulkan 1.3을 구현하는 것은 기술적으로 매우 도전적인 작업임. 이는 Apple 하드웨어의 독특한 아키텍처 때문임.
  • 게임 개발자에게 유익: Vulkan 드라이버가 완성되면, 게임 개발자들은 더 많은 플랫폼에서 게임을 실행할 수 있게 되어 유익함.
  • 성능 최적화 필요: 초기 단계에서는 성능 최적화가 필요할 수 있음. 특히 동적 상태 처리로 인한 CPU 오버헤드 문제를 해결해야 함.
  • 커뮤니티 기여: 오픈 소스 프로젝트로서 커뮤니티의 기여가 중요함. 다양한 하드웨어와 소프트웨어 환경에서의 테스트와 피드백이 필요함.
  • 경쟁 제품: DXVK와 vkd3d-proton 외에도 Wine과 같은 다른 호환성 레이어가 있음. 각 제품의 장단점을 비교해 선택하는 것이 중요함.
Hacker News 의견
  • 공유, 반복적, 개방형 컴포넌트의 가치를 증명하는 인상적인 작업임. Proton이 포팅되는 데 얼마나 걸릴지 궁금함. GPU 아키텍처 차이와 ARM 변환 오버헤드로 인해 많은 게임이 제대로 실행되지 않을 가능성이 있음. 그래도 SoC가 더 보편화되면서 더 많은 게임이 통합 메모리와 ARM을 타겟으로 할 것이라는 낙관적인 전망을 가짐.

  • Vulkan을 Linux에 추가하고 DirectX를 Asahi Linux에서 변환하는 노력이 Apple의 AAA 게임을 Apple Silicon에 도입하려는 꿈에 영향을 미칠지 궁금함. Apple은 AAA 개발자들이 게임을 Metal로 포팅하여 iPhone, iPad, Mac, Vision Pro에서 실행되기를 원함. Mac 게이머들이 AAA PC 타이틀을 플레이하기 위해 Asahi Linux를 설치할 가능성도 있음.

  • Vulkan 1.3에 익숙하지 않지만 저수준 그래픽 API 작업에 관심이 있다면 확인해볼 가치가 있음. 초기 장애물을 넘으면 작업이 즐거워짐. 모든 동적 상태와 사전 설정 없는 렌더 패스로 작업이 훨씬 쉬워짐. 10년 이하의 GPU를 가진 모든 데스크탑 플랫폼에서 사용 가능함. 다만, "합리적인 기본값" 프레임워크는 없지만 여러 언어에 유용한 헬퍼 라이브러리가 많음.

  • 프로그래밍 능력이 그녀의 절반만큼이라도 되고 싶음. 정말 대단함.

  • Alyssa의 놀라운 코딩 마법. 어떻게 하는지 모르겠지만, 그녀가 좋은 싸움을 하고 있어서 기쁨.

  • 컴파일러 버그는 절대 발생하지 않음. 하지만 실제로는 컴파일러 버그였음. 경력 동안 한 번도 경험하지 못했지만, 추상화 수준에서는 덜 드물게 발생할 수 있음.

  • ES 3.2 지원 업데이트를 막 했는데, M1이 Asahi를 위해 만들어진 것 같음. macOS는 설치할 때 한 번 부팅했을 뿐임. 브라우저가 '제로 카피 렌더링'을 지원하는지 궁금함. 웹GL2 변환 피드백이 읽기 작업을 트리거하는 문제에 갇힌 기억이 있음.

  • 특이한 셰이더 구조가 있음. 조건이 항상 거짓이지만 컴파일러는 이를 알지 못함. 이 구조의 목적이 무엇인지 궁금함.

  • VM 내에서 사용 가능 여부. macOS에서 개발하고 Ubuntu를 테스트하기 위해 VMware 이미지를 사용함. 3D 그래픽 앱을 개발하는데 VMware의 패스스루가 얼마나 좋은지 모르겠음. Apple Silicon GPU가 VM에서 가상화되는지, 이 배포판을 실행하여 더 나은 그래픽 성능을 얻을 수 있는지 궁금함.

  • MoltenVK와의 관계를 설명해 줄 수 있는지 궁금함. 이 작업이 MoltenVK의 필요성을 제거하는지, 네이티브 드라이버인지 궁금함.