5.1 Graphics Processing Unit (GPU)
5.1.1 Introduction
GPU(Graphics Processing Unit)는 임베디드 2D/3D 애플리케이션을 대상으로 하는 그래픽 가속기 이다. 3D 그래픽 처리 장치(GPU3D)는 OpenGL ES 1.1, OpenGL ES 2.0, OpenGL ES 3.0, OpenCL 1.1 EP와 같은 사용자 레벨의 그래픽 API(Application Programming Interface)를 가속화하는 임베디드 엔진이다. 2D 그래픽 처리 장치(GPU2D)는 GUI(graphical user interface) 렌더링 향상을 목표로 하는 임베디드 2D 그래픽 가속기이다. VG 그래픽 처리 장치(GPUVG)는 OpenVG 1.1 그래픽 API와 기능 세트를 지원하기 위한 임베디드 벡터 그래픽 가속기이다. GPU 드라이버 커널 모듈 소스는 커널 소스 트리에 있지만, 라이브러리는 바이너리만 제공된다.
Graphics Processing Unit | Hardware | Applicable Platform |
3D | Vivante dual-GC7000XSVX | 8QuadMax |
3D | Vivante GC7000Lite | 8QuadXPlus/8M Quad |
3D | Vivante GC 7000Nano Ultra | 7ULP and 8M Mini |
3D | Vivante GC7000 UltraLite | 8M Plus |
3D | Vivante GC7000 UltraLite | 8M Nano |
3D | Vivante GC2000 | 6Quad/6Dual |
3D | Vivante GC2000+ | 6QuadPlus/6DualPlus |
3D | Vivante GC880 | 6DualLite/6Solo |
3D/2D | Vivante GC400T | 6SoloX |
2D | Vivante GC320 | 6Quad/6Dual/6DualLite/6Solo |
Vector | Vivante GC355 | 6Quad/6Dual |
2D | Vivante GC328 | 7ULP |
참고
- GC400T는 OpenGL ES 3.0을 지원하지 않는다.
- GC880/GC400T는 OpenCL 1.1EP를 지원하지 않는다. GC2000, GC2000+는 OpenCL 1.1EP를 지원한다.
- GC7000XSVX는 OpenCL 1.2 FP, OpenVX 1.0.1, Vulkan 1.0을 지원한다.
5.1.2 Driver Features
GPU 드라이버를 통해 보드는 다음의 소프트웨어와 하드웨어 지원을 제공할 수 있다 :
- EGL(EGL은 OpenGL ES나 OpenVG와 같은 Khronos 렌더링 API와 기본 네이티브 플랫폼 윈도우 시스템 사이의 인터페이스임) 1.5 API는 Khronos Group에서 정의 한다.
- OpenGL ES(OpenGL® ES는 임베디드 시스템의 2D, 3D 그래픽 전체 기능을 위한 크로스 플랫폼 API로 royalty-free 이다) 1.1 API는 Khronos Group에서 정의 한다.
- OpenGL ES 2.0 API는 Khronos Group에서 정의 한다.
- OpenGL ES 3.0/3.1/3.2 API는 Khronos Group에서 정의 한다.
- OpenVG(OpenVG는 Flash와 SVG 같은 벡터 그래픽 라이브러리를 위한 저수준의 하드웨어 가속 인터페이스를 제공하는 크로스 플랫폼 API로 royalty-free 이다) 1.1 API는 Khronos Group에서 정의 한다.
- OpenCL(OpenCL은 최신 프로세서의 크로스 플랫폼, 병렬 프로그램을 위한 royalty-free인 최초의 개방형 표준이다) 1.1 EP API는 Khronos Group에서 정의 한다.
- OpenGL 2.1 API는 Khronos Group에서 정의 한다.
- thermal 드라이버에서 과열 알람이 발생하면 3D 코어는 1/64 clock에서 실행되므로 자동으로 3D 코어는 느려진다.
- OpenCl 1.1/1.2FP API는 Khronos Group에서 정의 한다.
- OpenVX 1.0.1 API는 Khronos Group에서 정의 한다.
- Vulkan 1.0 API는 Khronos Group에서 정의 한다.
5.1.3 Hardware Operation
하드웨어 작동에 대한 자세한 내용은 해당 SoC의 Applications Processor Reference Manual의 GPU 장을 참조한다.
5.1.4 Software Operation
GPU 드라이버는 두 개의 레이어로 나뉜다. 첫 번째 레이어는 커널 모드에서 실행 중이고 전체 스택의 기본 드라이버 역할을 한다. 이 레이어는 필수 하드웨어 액세스, 디바이스 관리, 메모리 관리, 명령어 큐 관리, 컨텍스트 관리, 전원 관리를 제공한다. 사용자 모드에서 실행 중인 두 번째 레이어는 스택 로직을 구현하고 상위 레이어 애플리케이션에 다음의 API를 제공한다 :
- OpenGL ES 1.1, 2.0, 3.0 API
- EGL 1.5 API
- OpenGL ES 11/20/30/31/32
- OpenCL 1.1/1.2 FP
- OpenVX 1.0.1
- Vulkan 1.0
- OpenGL 4.0
- WebGL 1.0.2
- OpenVG 1.1 API
- OpenCL 1.1 EP API
5.1.5 Source Code Structure
아래 테이블에는 GPU 드라이버의 커널 모듈 소스 구조가 나와 있다 :
drivers/mxc/gpu-viv
Table 51. GPU Driver Files
File | Description |
Kconfig Kbuild config | 커널 구성 파일과 makefile |
hal/kernel/arch | GC2000, GC880, GC400T, GC320에 대한 하드웨어별 드라이버 코드 |
hal/kernel/archvg | GC355에 대한 하드웨어별 드라이버 코드 |
hal/kernel | 커널 모드 HAL 드라이버 |
hal/os/linux/kernel | OS 레이어 HAL 드라이버 |
참고
이 디렉토리의 전체 내용을 바꾸면, GPU 커널 드라이버를 업그레이드할 수 있다.
5.1.6 Library Structure
아래 테이블은 GPU 드라이버의 사용자 모드 라이브러리 구조이다 :
<ROOTFS>/usr/lib
Table 52. GPU Library Files
File | Description |
libCLC.so | OpenCL 프론트엔드 컴파일러 라이브러리 |
libEGL.so** | EGL 1.4 라이브러리 |
libGAL.so | GAL 사용자 모드 드라이버 |
libGLES_CL.so | OpenGL ES 1.1 공통 라이트 라이브러리 (EGL API가 없고, 부동 소수점 지원 API가 없다) |
libGL.so** | OpenGL 2.1 공통 라이브러리 |
libGLES_CM.so | OpenGL ES 1.1 공통 라이브러리 (EGL API가 없고, 부동 소수점 지원 API 포함) |
libGLESv1_CL.so** | OpenGL ES 1.1 공통 라이트 라이브러리 (EGL API가 있고, 부동 소수점 지원 API가 없다) |
libGLESv1_CM.so** | OpenGL ES 1.1 공통 라이브러리 (EGL API가 있고, 부동 소수점 지원 API 포함) |
libGLESv2.so** | OpenGL ES 2.0/3.0/3.1/3.2 라이브러리 |
libGLSLC.so | OpenGL ES 셰이더(shader) 언어 컴파일러 라이브러리 |
libVSC.so | OpenGL 프론트엔드 컴파일러 라이브러리 |
libVivanteOpenCL.so | Vivante |
libOpenCL.so | OpenCL ICD 래퍼 라이브러리 |
libOpenVG.so* | OpenVG 1.1 라이브러리 |
libVDK.so | VDK 래퍼 라이브러리 |
libVIVANTE.so | Vivante 사용자 모드 드라이버 |
xorg/modules/drivers/vivante_drv.so | X11 가속기용 EXA 라이브러리 |
libwayland-viv.so | Vivante EGL 드라이버를 위한 Wayland 서버측의 라이브러리 |
libgc_wayland_protocol.so | Vivante Wayland Protocol Extension Library |
libOpenVX.so* | OpenVX 1.0 라이브러리 |
libvulkan..so* | Vulkan 1.0 라이브러리 |
**SONAME은 libEGL.so, libGLESv2.so, libGLESv1_CM.so, libGLESv1_CL.so, libGL.so에 사용된다.
libOpenVG.so*의 경우, OpenVG 기능을 위한 두 개의 라이브러리가 있다. libOpenVG.3d.so는 GC7000XSVX/GC2000+/GC2000/GC880/GC400T 기반의 OpenVG 라이브러리이다. libOpenVG.2d.so는 GC355 기반 OpenVG 라이브러리이다.
- i.MX 6DualPlus/QuadPlus와 i.MX 6Dual/Quad의 경우, libOpenVG.3d.so와 libOpenVG.2d.so를 모두 사용할 수 있다.
- i.MX 6DualLite와 i.MX 6SoloX의 경우, 단지 libOpenVG.3d.so만 사용할 수 있다.
- SoC의 제한이 없는 경우, x11 백엔드에 대해 기본 값으로 libOpenVG.3d.so가 링크된다.
- SoC의 제한이 없는 경우, framebuffer, directFB, Wayland 백엔드에 대해 기본 값으로 openVG 라이브러리가 libOpenVG.2d.so에 링크된다.
이는 다음 명령 시퀀스를 사용하여 수행할 수 있다 :
cd <ROOTFS>/usr/lib
sudo ln -s libOpenVG_355.so libOpenVG.so
5.1.7 API References
자세한 사양은 다음 웹사이트를 참조한다 :
- OpenGL ES 1.1, 2.0, 3.0 API : www.khronos.org/opengles/
- OpenCL 1.1 EP : www.khronos.org/opencl/
- EGL 1.4 API : www.khronos.org/egl/
- OpenVG 1.1 API : www.khronos.org/openvg/
- OpenGL ES API : www.khronos.org/opengles/
- OpenCL API : www.khronos.org/opencl/
- OpenVX API : www.khronos.org/openvx/
- Vulkan API : www.khronos.org/vulkan/
- OpenGL API : www.khronos.org/opengl/
- WebGL API : www.khronos.org/webgl/
5.1.8 Menu Configuration Options
menu configuration에서 GPU 드라이버를 위해 다음 모듈을 활성화한다 :
CONFIG_MXC_GPU_VIV는 GPU 드라이버를 위한 구성 옵션이다. menuconfig에서 이 옵션은 다음에서 사용할 수 있다.
Device Drivers > MXC support drivers > MXC Vivante GPU support > MXC Vivante GPU support
표시된 화면에서 Configure the kernel을 선택하고 다음을 선택한 후 종료한다.
Device Drivers > MXC support drivers > MXC Vivante GPU support > MXC Vivante GPU support
다음 화면이 나타나면, GPU 드라이버를 활성화하기 위해 다음 옵션을 선택한다 :
- Package list > imx-gpu-viv
- 이 패키지에는 독점 바이너리 라이브러리와 프레임 버퍼용으로 GPU에서 빌드된 테스트 코드를 제공한다.
'NXP i.MX SoC Family > i.MX Linux Reference Manual' 카테고리의 다른 글
i.MX Linux Reference Manual - Graphics - X Windows Acceleration (0) | 2022.06.27 |
---|---|
i.MX Linux Reference Manual - Graphics - Wayland (0) | 2022.06.24 |
i.MX Linux Reference Manual - Graphics (0) | 2022.06.24 |
i.MX Linux Reference Manual - Introduction - References (0) | 2022.06.24 |
i.MX Linux Reference Manual - Introduction - Audience (0) | 2022.06.21 |