미니 아..엑시노스2400 Termux 리눅스에서 GPU 호환성 개선 방법이 있네요.
- 흡혈귀왕
- 조회 수 727
- 2023.08.12. 16:22
이전 언급부터 OpenGL ES를 virglrenderer-android을 통해 OpenGL로 가상화하는건
오만가지 호환성 문제가 발생하고 오버헤드도 많아서 좋지 못한 솔루션이라고 언급했습니다.
퀄콤 칩셋은 mesa에서 Freedreno Turnip이라고
아드레노용 오픈소스 Vulkna 드라이버가 있어서 Vulkan 가속이 가능하고 mesa zink와 조합 시
OpenGL4.6 구현이 가능합니다.
제가 mesa git에 오픈소스용 라데온 Vulkan 드라이버인 RADV에 엑시노스 지원 추가에 대해
문의했을 땐 퇴짜 맞아서 (개발자왈 : 삼성한테 문의해라 개네들이 우리보다 훨씬 인력 많으니)
포기하고 스냅드래곤 탑재 바라고 있었는데 방법이 있었습니다ㅡㅡㅋ
바로 Termux에서 mesa-zink를 설치 후 안드로이드의 호스트 Vulkan 드라이버와 조합해서
OpenGL을 구현 후 virglrenderer-mesa-zink를 통해 가상화 시켜주는겁니다.
이 방법대로라면
안드로이드 호스트GPU Vulkan 드라이버 -> mesa-zink (OpenGL 구현) -> virglrenderer-mesa-zink (zink의 OpenGL 가상화)
과정을 거치게되고 proot-distro에서 GPU 가속이 가능하게됩니다.
사실 없었던 방법은 아닙니다.
virglrenderer-android가 생겨나기 전에
저런 방식을 통해 proot-distro 리눅스에서 GPU 가속을 구현했습니다.
문제는 현존 모바일 AP들의 Vulkan 드라이버의 extension과 feature의 지원 레벨이
워낙 낮아서 zink 사용 시 OpenGL2.1 구현이 한계더군요.
그래서 virglrenderer-mesa-zink로 가상화하여 proot-distro 리눅스에서 GPU 가속을 구현해도
OpenGL2.1이 한계였습니다.
그럼에도 호환성 만큼은 virglrenderer-android을 사용한 가상화보다 훨씬 나았습니다.
(문제는 이 방식은 아드레노7xx 시리즈에서 작동을 하지않기 때문에 자연스러게 안쓰이게됨)
그런데...!!!
제가 최근 엑시노스2200의 Vulkan1.1 드라이버 기준으로
extension과 feature의 지원 레벨을 확인해보니
zink에서 OpenGL4.0 이상까지 지원 가능한 수준으로 짱짱하더군요 ㄷㄷㄷㄷ
역시 AMD RDNA2랑 동일 아키텍쳐라서 그런가?
이거 이렇게되면
안드로이드 호스트GPU Vulkan 드라이버 -> mesa-zink (OpenGL 구현)로 변환 시
최소 OpenGL3.x이 가능하다는 소리입니다.
당장 OpenGL3.3 수준만되어도 리눅스 사용하는데 호환성 문제가 1도 없기 때문에
제가 그동안 걱정했던 모든것들이 다 부질없는 걱정이었단 소리가 되겠죠.
게다가 이건 엑시노스2200 Vulkan1.1 드라이버 기준입니다.
S23 FE에 탑재되는 엑시노스2200는 Vulkan1.3 드라이버를 사용하는데다
엑시노스2400도 Vulkan1.3일테니 extension과 feature의 레벨은 더 향상될 여지가 있겠죠.
이로써 리눅스 환경에서 OpenGL 호환성은 문제가 없을 가능성이 99%인데
문제는 여전히 Vulkan 가속이 부재입니다.
최종적으로 box64+wine으로 게임 구동까지 고려하시는 분들은 아쉬울수 있는 부분인데
(dxvk랑 vkd3d 쓰려면 vulkan이 필수이니)
이것도 뭐 일단 기다려봐야할거같습니다.
angle 사용하면 어케해결되거 같긴한데...
아니면
호스트 GPU의 Vulkan 드라이버를 가상화하는
Virtio-GPU Venus라는 것이 있습니다.
문제는 현존 안드로이드 모바일 AP들의 Vulkan 드라이버가
Virtio-GPU Venus를 충족하기엔 extension과 feature의 레벨 수준이 너무 낮습니다.
심지어 이건 Vulkan1.1 드라이버 기준 엑시노스2200도 마찬가지더군요.
Vulkan1.3을 쓰는 엑시노스2400은 다를수도 있는지라 지켜봐야겠습니다.
<요약>
- 그동안 virglrenderer-android의 거지같은 호환성으로 리눅스에서 엑시노스2400 호환성 걱정이
아주 많았음 (스냅드래곤 탑재되길 바랬을 정도)
- 하지만 mesa-zink와 virglrenderer-mesa-zink를 통해서 안드로이드 호스트 Vulkan 드라이버를
OpenGL로 변환하고 가상화하는 방법으로도 GPU 가속하는게 가능 (호환성 더 좋음)
- 아드레노, 말리, PowerVR 등등 대부분 GPU의 Vulkan 드라이버가 zink에서 OpenGL2.1이 한계지만
엑스클립스는 Vulkan1.1 드라이버 기준 zink에서 무려 OpenGL4.0 이상 충족 가능
- 리눅스 환경에서 OpenGL3.3만 되어도 호환성 문제가 전혀없어서 엑시노스2400 리눅스는 걱정무
- Vulkan 가속이 여전히 숙제이지만 angle을 사용하거나 Vulkan1.3 드라이버 기준 피처레벨 충족되면
Virtio-GPU Venus 같은걸로 Vulkan 가상화도 가능할것으로 보임