5.1 Graphics Processing Unit (GPU)
5.1.1 Introduction
Graphics Processing Unit(GPU)은 임베디드 2D/3D 그래픽 애플리케이션을 대상으로 하는 그래픽 가속기이다. 3D 그래픽 처리 장치(GPU3D)는 OpenGL ES 1.1, OpenGL ES 2.0, OpenGL ES 3.0 그리고 OpenCL 1.1EP와 같은 사용자 레벨 그래픽 Application Programming Interface(API)를 가속화하는 임베디드 엔진이다. 2D 그래픽 처리 장치(GPU2D)는 그래픽 사용자 인터페이스(GUI) 렌더링 향상을 목표로 하는 임베디드 2D 그래픽 가속기이다. VG 그래픽 처리 장치(GPUVG)는 OpenVG 1.1 그래픽 API와 기능 세트를 지원하기 위한 임베디드 벡터 그래픽 가속기이다. GPU 드라이버 커널 모듈 소스는 커널 소스 트리에 있지만 라이브러리는 바이너리로만 제공된다.
Graphics Processing Unit | Hardware | Applicable Platform |
---|---|---|
3D | GC7000 Nano Ultra31 | 8ULP |
2D | GC520L | 8ULP |
3D | Vivante dual-GC7000XSVX | 8QuadMax |
3D | Vivante GC7000Lite | 8QuadXPlus/8M Quad |
3D | Vivante GC7000 Nano Ultra | 7ULP and 8M Mini |
3D | Vivante GC7000 UltraLite | 8M Plus |
3D | Vivante GC7000 Ultra Lite | 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.1 EP를 지원한다.
GC7000XSVX는 OpenCL 1.2 FP, OpenVX 1.0.1 그리고 Vulkan 1.0을 지원한다.
5.1.2 Driver Features
GPU 드라이버는 아래의 소프트웨어와 하드웨어 지원을 제공하기 위해 해당 보드에서 활성화할 수 있다:
- Khronos Group에서 정의한 EGL (EGL은 OpenGL ES 또는 OpenVG와 같은 Khronos 렌더링 API와 기본 네이티브 플랫폼 윈도우 시스템 사이의 인터페이스이다.) 1.5 API.
- Khronos Group에서 정의한 OpenGL ES (OpenGL ES는 임베디드 시스템에서 완전한 기능을 갖춘 2D와 3D 그래픽을 위한 로열티가 없는 크로스 플랫폼 API이다.) 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이다.) 1.1 API.
- Khronos Group에서 정의한 OpenCL (OpenCL 은 최신 프로세서의 크로스 플랫폼 병렬 프로그래밍을 위한 로열티 없는 최소의 공개 표준이다.) 1.1 EP API.
- Khronos Group에서 정의한 OpenGL 2.1 API.
- 자동 3D 코어 감속. 써멀 드라이버의 발열 알림이 활성화되면, 3D 코어가 1/64 클럭으로 실행된다.
- Khronos Group에서 정의한 OpenCL1.1/1.2FP API.
- Khronos Group에서 정의한 OpenVX 1.0.1 API.
- Khronos Group에서 정의한 Vulkan 1.0 API.
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 ES11/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 49. 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 50. GPU Library Files
File | Description |
---|---|
libCLC.so | OpenCL 프런트엔드 컴파일러 라이브러리 |
libEGL.so** | EGL1.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 셰이더 언어 컴파일러 라이브러리 |
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
메뉴 구성에서 GPU 드라이버에 대해 아래 모듈을 활성화한다:
CONFIG_MXC_GPU_VIV 는 GPU 드라이버의 구성 옵션이다. menuconfig에서 이 옵션은 아래에서 사용할 수 있다:
- Device Drivers > MXC support drivers > MXC Vivante GPU support > MXC Vivante GPU support
표시된 화면에서, 커널 Configure를 선택하고, 아래를 선택한 후 종료한다:
- Device Drivers > MXC support drivers > MXC Vivante GPU support > MXC Vivante GPU support
다음 화면이 나타나면, 아래 옵션을 선택하여 GPU 드라이버를 활성화한다:
- Package list > imx-gpu-viv
- This package provides proprietary binary libraries, and test code built from the GPU for framebuffer (이 패키지는 독점 바이너리 라이브러리와 프레임 버퍼를 위한 GPU에서 빌드된 테스트 코드를 제공한다)