5.13. 三维图形处理 - 3D GPU

5.13.1. 模块描述

3D GPU 是现代图形和计算领域的核心组件,它不仅支持高效的 3D 渲染,还广泛应用于科学计算、人工智能、数据可视化等领域。其硬件加速能力和高并行架构为各类复杂任务提供了强大的支持。

5.13.1.1. 框架描述

3D GPU 框架如下图描述 :
注意: X5 BSP 默认没有移植桌面系统,可以基于 DRM 和 GBM 实现 GPU 渲染效果的展示(如图中 Framework 层的黄色部分)。

gpu_3d_descript_framework

下面对各个层进行单独描述:(从下向上的顺序)

  1. 硬件层: GPU Core 是具体的 GPU 硬件,完成 3D 图像处理加速,渲染的输出结果可以存储到 DDR 中

  2. 内核驱动层: X5 中 GPU 的驱动没有接入 DRM,而是通过字符设备驱动的 ioctl 接口向上提供接口

  3. 用户驱动层:通过封装 ioctl 接口,实现 GPU 接口层和驱动层的交互

  4. 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 工具包,它们为开发者提供图形控件和界面构建工具

  5. 应用层:应用层的实现有两种情况:

    • 情况 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. 参考示例

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 动态库