카테고리

asm (27) bootloader_x86_grub (1) C (92) compile (11) config (76) CPP (13) CSS (1) debugging (7) gimp (1) Go (1) html (1) Java (1) JavaScript (1) kernel (19) LibreOffice (3) Linux system progamming (21) MFC (1) opencv (4) OpenGL (1) PHP (1) Python (4) qemu (29) shell (3) socket (7) troubleshooting (2) ubuntu18.04 (2) windows (1)

2019/01/01

Zink 프로젝트

Zink 프로젝트
https://gitlab.freedesktop.org/kusma/mesa/tree/zink

OpenGL 공식 사이트
https://www.opengl.org/

메사 - 3D 그래픽 라이브러리
https://www.mesa3d.org/

차세데 컴퓨터 그래픽 API
https://www.khronos.org/vulkan/

차세대 컴퓨터 그래픽 API 사용해, OpenGL을 구현함.
더 구체적으로 Zink는 Mesa의 기존 OpenGL을 활용하여 Vulkan 드라이버를 사용할 수 있다면 하드웨어 가속을 위해 OpenGL을 제공 하는  Mesa Gallium 드라이버임.

Mesa 아키텍처 개요
Application
-----------
Mesa
-----------
GalliumOpenGL State Tracker
-----------+-----------------------
Zink       | Other Gallium drivers
-----------+-----------------------
Vulkan

Vulkan 기반 OpenGL 특징

- 그래픽 스택 단순화
- 향후 GPU 드라이버 작업 부하
- 통합 사용
- Vulkan 응용프로그램 포팅

1. 그래픽 스택 단순화
OpenGL의 방대한 API를 개발자가 사용하기 편하게 제 정의 및 기능 추가

2. 향후 GPU 드라이버 작업 부하 줄임
하드웨어 vulkan을 지원한다면 Vulkan은 기본적으로 Zink를 지원하고 OpenGL을 통해 수행한다.

3. 통합
Zink는 Mesa의 Gallium 드라이버로 구현.

무료 제공.

Gallium Nice나 Colver와 같은 프로젝트는 Zink를 통해 이론적으로 i965 Vulkan 드라이버 상단에서 동작 할 수 있다.아직 테스트 하지 않는 상태임.

클로즈드 소스 Vulkan 드라이버 위에 Zink를 실행하고 적절한 윈도우 메니지먼트 통합 시스템을 확인 할 수 있다.

4. Vulkan 응용 프로그램 포팅 지원
Zink 애플리케이션에서 OpenGL과 Vulkan 코드 협력 사이의 계층 역할을 할 수 있는 방법으로 확장 할 수 있다.

5. Zink 요구 사항
Zink는 현재 Vulkan 1.0 구현이 필요하며 다음과 같은 확장을 제공한다.
확장 기능이 더 있지만 여기서는 크게 두가지 형태로 분리한다.

VK_KHR_maintenance1: 뷰포트를 뒤집기
VK_KHR_external_memory_fd: 렌더링 된 결과를 화면에 표시하는 방법

5.1 Zink 지원
OpenGL 2.1 과  OpenGL ES 1.1과 2.0

6. zink 미지원
glPointSize() 현재 지원하지 않음.
gl_PointSize 버텍스 쉐이더에서  쓰기 가능.

텍스처 테두리는 현재 항상 검은 색.
Vulkan이 임의의 테두리 색상을 지원하지 않기 때문에 일부 에뮬레이션 코드도 필요핟.

이더에서는 제어 흐름이 지원되지 않음. opcode에 대한 구현 부족.

GL_ALPHA_TEST 지원되지 않음.

glShadeModel(GL_FLAT) 지원하지 않음.


7. 빌드
프로젝트 사이트: https://gitlab.freedesktop.org/kusma/mesa

빌드 시스템 프로젝트 사이트: https://mesonbuild.com/
                             https://ninja-build.org/

meson 빌드 시스템만 지원한다.
zink gallium-driver(-Dgallium-drivers=zink) 활성화

$MESA_LOADER_DRIVER_OVERRIDE 환경 변수 사용해 드라이버 zink 지정.

$ git clone https://gitlab.freedesktop.org/kusma/mesa.git mesa-zink
Cloning into 'mesa-zink'...
...
Checking out files: 100% (5982/5982), done.

$ cd mesa-zink
$ git checkout zink
Branch 'zink' set up to track remote branch 'zink' from 'origin'.
Switched to a new branch 'zink'

$ meson --prefix=/tmp/zink -Dgallium-drivers=zink build-zink
The Meson build system
...
Found ninja-X.Y.Z at /usr/bin/ninja

$ ninja -C build-zink install
ninja: Entering directory `build-zink'
...
installing /home/kusma/temp/mesa-zink/build-zink/src/gallium/targets/dri/libgallium_dri.so to /tmp/zink/lib64/dri/zink_dri.so
$ LIBGL_DRIVERS_PATH=/tmp/zink/lib64/dri/ MESA_LOADER_DRIVER_OVERRIDE=zink glxgears -info
GL_RENDERER   = zink (Intel(R) UHD Graphics 620 (Kabylake GT2))
GL_VERSION    = 2.1 Mesa 18.3.0-devel (git-395b12c2d7)
GL_VENDOR     = Collabora Ltd
GL_EXTENSIONS = GL_ARB_multisample GL_EXT_abgr

댓글 없음:

댓글 쓰기