5.13. 三维图形处理 - 3D GPU
5.13.1. 模块描述
3D GPU 是现代图形和计算领域的核心组件,它不仅支持高效的 3D 渲染,还广泛应用于科学计算、人工智能、数据可视化等领域。其硬件加速能力和高并行架构为各类复杂任务提供了强大的支持。
5.13.1.1. 框架描述
3D GPU 框架如下图描述 :
注意: X5 BSP 默认没有移植桌面系统,可以基于 DRM 和 GBM 实现 GPU 渲染效果的展示(如图中 Framework 层的黄色部分)。

下面对各个层进行单独描述:(从下向上的顺序)
硬件层: GPU Core 是具体的 GPU 硬件,完成 3D 图像处理加速,渲染的输出结果可以存储到 DDR 中
内核驱动层: X5 中 GPU 的驱动没有接入 DRM,而是通过字符设备驱动的
ioctl接口向上提供接口用户驱动层:通过封装
ioctl接口,实现 GPU 接口层和驱动层的交互Framework 层 : 包含 4 个层次
GPU 接口层(绿色背景部分)包括四种标准 API: EGL、 OpenGL ES、 Vulkan 和 OpenCL,详细说明将在后续内容中提供
服务器协议层:常见的显示服务器协议有 Wayland 和 X11 ,其中 Wayland 是 X11 的替代,其中常见 Wayland 协议的具体实现有: Mutter 和 KWin
桌面环境: GnomeShell 和 KDE 都是现代化的桌面环境,基于 Wayland 协议负责用户交互界面
GnomeShell 基于 Mutter( Wayland 协议的具体实现)
KDE 基于 KWin( Wayland 协议的具体实现)
图形工具包: GTK 和 Qt 是两种不同的 GUI 工具包,它们为开发者提供图形控件和界面构建工具
应用层:应用层的实现有两种情况:
情况 1 :有桌面环境的情况,应用层可以基于各种图像库开发复杂的游戏和 UI 界面
情况 2 :没有桌面环境的情况(图中黄色背景: sample_gpu_3d),应用层直接调用 GPU 接口,通过 DRM 和 GBM 实现 GPU 渲染图像的显示
5.13.1.2. 常用功能描述
| 功能 | 描述 | 常见用途 |
|---|---|---|
| 顶点处理( Vertex Processing) | 处理三维模型的顶点坐标,包括坐标变换(如 3D 模型、视图和投影变换)以及法线、纹理坐标等相关计算。 | 将三维模型投影到屏幕上的二维平面;应用动画(骨骼动画、顶点形变等)。 |
| 光栅化( Rasterization) | 将三角形等几何图元转换为像素(或片元)。 | 将 3D 几何图形渲染到 2D 显示器;实现边缘检测和抗锯齿等技术。 |
| 片元处理( Fragment Processing) | 计算每个像素的颜色和其他属性(如深度、透明度)。 | 实现复杂的材质效果(如金属、玻璃);计算灯光、阴影、反射等效果。 |
| 纹理映射( Texture Mapping) | 将二维纹理图片贴合到 3D 模型表面。 | 添加表面细节,如木纹、皮肤、墙面;使用法线贴图实现精细的凹凸效果。 |
| 渲染管线( Rendering Pipeline) | 从几何数据到最终图像的全流程处理,包括顶点着色、几何着色、光栅化、片元着色等阶段。 | 高效完成实时渲染任务,如游戏中的实时画面。 |
| 阴影计算( Shading) | 使用着色器程序计算光线与物体交互的视觉效果。 | 实现光影变化(如漫反射、高光反射);实现环境光遮蔽、全局光照等高级渲染效果。 |
| 帧缓冲处理( Framebuffer Operations) | 管理渲染目标和中间数据(颜色缓冲、深度缓冲等)。 | 实现后期处理效果(如模糊、色调映射);保存渲染结果用于多重采样或离屏渲染。 |
| 几何处理( Geometry Processing) | 处理几何图元(如三角形、点、线)以生成复杂形状。 | 实现动态网格变形、粒子系统等效果;应用几何着色器添加细节。 |
| 计算着色器( Compute Shader) | 提供通用计算能力,突破传统图形渲染管线的限制。 | 实现物理模拟(如流体、布料);进行大规模并行计算任务(如 AI 推理、光线追踪加速)。 |
| 光线追踪( Ray Tracing) | 通过模拟光线与场景物体的交互生成更逼真的画面。 | 实现真实的反射、折射、阴影和全局光照;应用于高质量渲染和实时渲染。 |
5.13.1.3. 应用场景
| 应用场景 | 详细说明 |
|---|---|
| 游戏开发 | 渲染复杂游戏场景,实现实时阴影、动态光源等效果,适用于开放世界、高帧率竞技游戏及 VR 游戏。 |
| 影视和动画 | 离线渲染高质量图像,支持高级光照技术(如全局光照),用于动画电影和特效制作。 |
| 虚拟现实和增强现实 | 高帧率渲染减少延迟,用于 VR 游戏、 AR 导航以及医疗培训。 |
| 工业设计和建模 | 实时渲染复杂模型,用于汽车设计、建筑可视化和产品仿真。 |
| 科学计算和数据可视化 | 加速科学模拟与 3D 数据渲染,应用于气候模拟、医学成像和基因研究。 |
| 人工智能和深度学习 | 提供并行计算能力,加速模型训练和推理,应用于图像识别、 NLP 和自动驾驶技术。 |
| 建筑和工程 | 实现高保真可视化和实时漫游,用于建筑设计评审和智慧城市规划。 |
| 医疗和仿真 | 生成实时 3D 可视化,支持手术模拟和疾病建模。 |
| 云游戏和远程渲染 | 在远程 GPU 上进行渲染,并将结果流式传输到客户端,适用于云游戏和远程计算服务。 |
5.13.1.4. 基础规格
峰值算力为 32GFLOPS
5.13.2. 参考示例
3D GPU 接口示例代码可以参考 sample_gpu_3d 章节
5.13.3. API 参考
X5 3D GPU 支持四种标准 API: EGL、 OpenGL ES、 Vulkan 和 OpenCL,具体描述如下:
| API | 主要用途 | 依赖关系 | 主要应用场景 | API 官方链接 | 支持的版本 |
|---|---|---|---|---|---|
| EGL | 管理上下文和窗口表面 | 提供给 OpenGL ES 和 Vulkan 使用 | 图形上下文管理 | EGL | EGL 1.5 |
| OpenGL ES | 嵌入式图形渲染 | 依赖 EGL | 游戏、 UI 渲染 | OpenGL ES | OpenGL ES 3.1 / 3.0 / 2.0 / 1.1 |
| Vulkan | 高性能图形和计算渲染 | 可选依赖 EGL | 游戏、 UI 渲染 | Vulkan | Vulkan |
| OpenCL | 通用并行计算 | - | 图像处理、机器学习、科学计算 | OpenCL | OpenCL 1.1 / 1.2 / 3.0 |
5.13.3.1. 头文件说明
在编写 OpenGL ES, Vulkan 或 OpenCL 应用程序的过程中会使用到相关标准协议的头文件,这些头文件所在的文件夹和简述如下表所示:
| 标准 | 头文件所在的文件夹 | 文件夹简述 |
|---|---|---|
| EGL | EGL | 包含 EGL 所有版本的头文件 |
| GBM | - | 包含 GBM 的头文件 |
| OpenGL ES | GLES GLES2 GLES3 | 包含 OpenGL ES2.x 相关的头文件,且包含 OpenGL ES 拓展相关的头文件 包含 OpenGL ES3.x 相关的头文件 |
| Vulkan | vulkan | 包含 vulkan 的头文件 |
| OpenCL | CL | 包含 OpenCL C 风格的头文件 包含 OpenCL CPP 风格的头文件 |
5.13.3.2. 动态库说明
在编写 OpenGL ES, Vulkan 或 OpenCL 应用程序的过程中会使用到相关标准的动态库,相关动态库的名称如下表所示:
| 标准 | 动态库名称 | 动态库简述 |
|---|---|---|
| EGL | libEGL.so | EGL 动态库 |
| GBM | libgbm.so | GBM 动态库 |
| OpenGL ES | libGLESv2.so libGLESv1.so | OpenGL ES2.x 和 OpenGL ES3.x 动态库 OpenGL ES1.x 动态库 |
| Vulkan | libvulkan.so | Vulkan ICD Loader 动态库 |
| OpenCL | libOpenCL.so | OpenCL 动态库 |