Skip to content

图形计算技术层次结构

图形计算技术层次结构,从上层应用到硬件的渲染管线链路如下。GPU 图形渲染是异构计算,包含运行在 CPU 上的管控面代码和运行在 GPU 上的数据面代码。

层次CPU 管控面GPU 数据面
应用业务层业务逻辑、场景管理、输入处理不感知
渲染引擎层场景图组织、渲染队列管理为上层绘制指令编写着色器完成渲染任务
窗口合成器桌面环境管理、窗口合成合成多个渲染源,实现特效
图形接口层跨图形 API 的渲染调用规范提供着色器语言,编译产生 GPU 着色器程序
HAL 层 + 系统调用各硬件厂商提供的用户态 API 接口,封装硬件调用透传 GPU 着色器程序
DRM 模块Linux 显示系统的"大内总管"不感知
GPU 驱动层按照操作系统驱动规范实现硬件驱动透传 GPU 着色器程序
GPU 和显示适配层硬件资源管理执行 GPU 着色器程序,填充帧缓冲区
显示器显示帧缓冲区中的数据从显存中拿数据

各层详解

应用业务层

使用图形渲染能力完成具体业务逻辑,负责场景构建、用户交互、游戏逻辑等。应用层通过引擎抽象接口调用渲染功能,无需直接感知底层硬件细节。

代表技术:游戏应用(Unity/Unreal 制作的游戏)、数据可视化工具、3D 建模软件。

渲染引擎层

引擎层负责组织场景图、管理渲染队列、处理资源加载。场景图是描述场景中所有对象及其关系的树形结构,引擎通过遍历场景图生成渲染命令。渲染队列管理将绘制指令按状态分组,减少 GPU 状态切换开销。引擎层需要为上层绘制指令编写着色器,完成具体的渲染任务。

代表技术:Unity、Unreal Engine、Godot、Three.js。

窗口合成器

窗口合成器负责将多个渲染源合成到最终帧缓冲。在桌面环境中,每个窗口是独立的渲染源,合成器需要处理窗口叠加、透明度混合、特效渲染。Wayland 合成器(Weston、KWin)和 X11 合发器(Mutter、Compiz)都使用 GPU 进行合成,实现窗口动画、毛玻璃效果、缩放等。

现代合成器支持直接渲染,应用可以直接渲染到自己的帧缓冲,合成器只需将其作为纹理进行合成。

图形接口层

提供跨平台的图形编程接口,规范渲染管线的各个阶段。接口层定义着色器语言(GLSL、HLSL、SPIR-V),开发者编写着色器代码后由驱动编译为 GPU 可执行程序。接口层抽象了硬件差异,同一套代码可在不同厂商 GPU 上运行。

代表技术:Vulkan、DirectX 12、Metal、OpenGL。

HAL 层 + 系统调用

硬件抽象层提供用户空间库,由硬件厂商实现。NVIDIA 提供 NVIDIA 驱动用户态库,AMD 提供 AMDGPU 用户态库,Intel 提供 Mesa 的用户态组件。这一层负责将高层着色器语言编译为中间表示(SPIR-V、DXIL),然后通过系统调用接口(ioctl、D3D12 设备接口)提交给内核驱动。

DRM 模块

DRM(Direct Rendering Manager)是 Linux 显示系统的"大内总管",管理 GPU、显示器、帧缓冲等所有图形资源。DRM 提供统一的设备接口 /dev/dri/cardN,用户态程序通过此接口与 GPU 通信。DRM 负责模式设置、页面翻转、VBlank 同步、DMA-BUF 导出导入等核心功能。

DRM 子系统包括 GEM(Graphics Execution Manager)管理显存,KMS(Kernel Mode Setting)管理显示输出,调度器管理 GPU 任务队列。

GPU 驱动层

GPU 驱动是具体硬件的实现,负责管理 GPU 硬件资源、处理内存分配、上下文切换、命令缓冲区提交。驱动将中间表示编译为 GPU 可执行的机器码,调度着色器执行。NVIDIA 驱动内置 ptxas 编译器,将 PTX 编译为 SASS 机器码。AMD 和 Intel 使用 LLVM 编译器基础设施,将 SPIR-V 编译为各自 GPU 的 ISA。

驱动还负责电源管理、时钟频率调节、温度监控、错误恢复等硬件管理功能。

GPU 和显示适配层

GPU 执行着色器程序,将渲染结果写入帧缓冲区。现代 GPU 包含多个硬件单元:图形引擎(处理 3D 渲染)、计算单元(处理通用计算)、视频编解码器、显示控制器(扫描输出帧缓冲)、硬件光标(叠加鼠标光标)。显示适配层包括显示控制器、扫描输出引擎、TMDS/HDMI/DP 发送器,将数字信号转换为显示器可识别的信号。

显示器

显示器从 GPU 获取帧缓冲数据并呈现给用户。LCD 显示器通过定时控制器(T-CON)接收 HDMI/DP 信号,控制液晶分子偏转显示图像。OLED 显示器直接控制有机材料发光。显示器支持的参数包括分辨率、刷新率、色域、HDR 格式等,这些通过 EDID(Extended Display Identification Data)告知系统。

图形 API

Vulkan

Vulkan 是 Khronos 制定的下一代图形 API,提供底层硬件访问和高性能渲染。Vulkan 显式管理着色器阶段、管线状态、内存分配,给开发者更大控制权。Vulkan 支持多线程命令缓冲区录制,减少 CPU 开销。Vulkan 使用 SPIR-V 二进制中间表示,跨平台兼容。

Vulkan 的设计哲学是最小化驱动开销,将责任交给应用层。这要求开发者深入了解 GPU 架构,但能获得最佳性能。

DirectX 12

DirectX 12 是微软的底层图形 API,主要用于 Windows 和 Xbox 平台。DX12 与 Vulkan 类似,提供显式资源管理、多线程渲染、描述符堆等底层控制。DX12 使用 HLSL 编写着色器,编译为 DXIL 字节码。

DX12 的优势是与 Windows 生态系统深度集成,支持 DXGI 全屏优化、HDR 渲染、Variable Rate Shading 等特性。

OpenGL

OpenGL 是传统的图形 API,以易用性著称。OpenGL 隐藏了大量底层细节,驱动自动管理状态和资源。但这也导致驱动膨胀和性能不可预测。OpenGL 使用 GLSL 着色器语言,运行时编译。

OpenGL 已进入维护模式,新项目推荐使用 Vulkan 或 DX12。

硬件加速技术

现代 GPU 包含专用硬件加速单元,超越传统光栅化渲染。

DLSS

Deep Learning Super Sampling 是 NVIDIA 利用 AI 辅助提升游戏帧数的黑科技。DLSS 通过 Tensor Core 运行超分辨率模型,将低分辨率图像放大到高分辨率,同时保持或提升画质。

DLSS 1.0 是初代尝试,空间放大但画面偶尔模糊。DLSS 2.x 引入时域超采样,成为行业标配,画面极其稳定甚至比原生更锐利。DLSS 3.x 增加帧生成功能,AI 在两帧之间插帧,帧数翻倍。DLSS 3.5 专注光线重建,优化光线追踪效果,减少噪点。DLSS 4.0 使用 Transformer 模型,减少高速运动下的鬼影。

光线追踪单元

RT Core 是专门用于加速光线追踪计算的硬件单元。传统光栅化难以实现真实的光照效果,光线追踪通过模拟光线路径实现物理准确渲染。RT Core 加速包围盒层次结构(BVH)遍历和光线-三角形求交测试。

NVIDIA 从 RTX 20 系列开始集成 RT Core,AMD 从 RX 6000 系列开始引入 Ray Accelerators。光线追踪配合 DLSS,可实现实时的全局光照、反射、阴影效果。

Variable Rate Shading

VRS 是一种性能优化技术,允许对不同区域使用不同的着色速率。对于画面边缘、快速移动区域或用户不关注的区域,使用较低分辨率着色,节省 GPU 算力。VRS 由硬件或 API 支持,可显著提升帧率且对画质影响较小。