1、概述
1.1
GPU 简介
GPU(Graphics Process Unit)是 3D 图形处理单元,
海思提供完全符合业界标准的EGL 1.4,OpenGL ES 1.1/2.0/3.0/3.1/3.2 及 OpenCL 1.2 标准接口。本章内容将简单介绍 GPU 基本的软硬件架构、EGL 本地窗口相关的结构体以及 EGL具体开发流程,还有一些调试手段。
1.1.1 硬件架构
HI3559AV100ES 使用的 GPU 使用
arm Bifrost 硬件架构的 Mali G71 GPU。
1.1.2 软件架构
GPU 相关标准在系统中的位置如图 1-1 所示:
海思 EGL 目前支持与 FBDEV 窗口系统对接,
用户可以将通过 OpenGL ES 渲染的 3D内容送到 FBDEV 窗口系统对应的 FrameBuffer 或者 surface 上去显示。
1.2 重要概念
1.2.1 Open GLES
OpenGL ES(Embedded System)是
嵌入式领域的 3D 图形库,它是 khronos 组织基于桌面 OpenGL 标准裁减而来的:
-OpenGL ES 1.1:固定渲染管道,主要服务于低端的嵌入式设备上。
-OpenGL ES 2.0:可编程的渲染管道,主要服务于高端嵌入式设备上。
-OpenGL ES 3.0:向前兼容 OpenGL ES 2.0 的超集,具有更强大的着色功能,支持更多纹理格式。
-OpenGL ES 3.1:在 OpenGL ES 3.0 基础上添加了用于通用计算任务的运算着色器、独立着色顶点与片段的着色对象、间接从内存获取绘图命令等新特性。
-OpenGL ES 3.2:在 OpenGL ES 3.1 基础上增强了对
Android 的支持(集成 AEP 部分内容),增加了延迟渲染、基于物理着色、HDR 色调映射等功能。
ES 3.X 兼容 ES 2.0,基于 ES 3.X 开发的程序可以在 2.0 上运行,但是 ES2.0 和 ES1.1是不兼容的。
1.2.2 OpenCL
OpenCL(Open Computing Language)是异构计算的编程接口,它支持将运算任务针对性地分发到不同运算单元上,通过并行的方式提升运算效率,驱动中主要分发至GPU 上进行运算处理。
1.2.3 EGL
Embedded-System Graphics Library (native platform graphics interface) 是介于 OpenGL ES等绘制接口与底层窗口系统之间的接口。OpenGL ES 实际上是一个图形渲染管线的状态机,而 EGL 则是负责维护这些状态以及把渲染的结果送到对应的窗口或者 surface 上去。
【Window Surface】
Window surface 是 EGL 中可以在屏幕中显示的 surface,通过 EGLNativeWindowType来创建。
【Pixmap Surface】
Pixmap surface 是 EGL 中离屏的 surface,通过 EGLNativePixmapType 封装而来。
【Pbuffer Surface】
Pbuffer 是 EGL 中与平台无关的离屏 surface,主要用于渲染成 texture,或者用于绘制比 window 更大的 surface。
【EGLNative
displayType】
EGLNativeDisplayType 是对本地显示设备的抽象,EGL 需要参考本地显示设备创建对应的 EGLDisplay。
【EGLNativeWindowType】
EGLNativeWindowType 是对本地窗口的抽象,EGL 需要参考本地窗口创建对应的Window Surface,用于屏上显示。
【EGLNativePixmapType】
EGLNativePixmapType 是对本地离屏 buffer 的抽象,EGL 需要参考本地离屏 buffer 创建对应的 Pixmap Surface,用于离屏绘制。
1.3 功能描述
1.3.1 功能特点
EGL
模块主要提供了以下功能:
1.初始化、去初始化功能
− eglInitialize:初始化 EGL。
− eg
LTErminate:终止 EGL。
− eglGetDisplay:获取显示设备。
2.配置管理功能
− eglG
ETConfigs:获取 display 支持的 framebuffer 配置列表。
− eglGetConfigAttrib:获取 display framebuffer 配置中的相关信息。
− eglChooseConfig::选取一个符合指定配置的 framebuffer 配置列表。
3.绘制 Surface 管理
− eglCreate
Windowsurface:创建一个 window surface。
− eglCreatePbuffe
RSUrface:创建一个离屏的 pbuffer surface。
− eglCreatePixmapSurface:创建一个离屏的 pixmap surface。
− eglDestroySurface:销毁一个 EGL surface。
− eglQuerySurface:查询 surface 属性信息。
4.绘制上下文管理
− eglCreateContext:创建一个 context。
− eglDestroyContext:销毁一个 context。
− egl
MAKEcurrent:绑定当前 context 与 surface。
− eglGetCurre
NTContext:获取当前 context。
− eglGetCurrentSurface:获取当前 read 或者 write surface。
− eglGetCurrentDisplay:获取当前 display。
− eglQueryContext:查询 context 相关信息。
更多详细内容请下载附件查看