Vulkan 渲染器
Vulkan 后端在运行时加载驱动,要求 Vulkan 1.2,并通过交换链呈现客户机帧。渲染目标、存储图像和管线在多次绘制之间保持常驻。
仓库笔记截至 2026年10月10日
设备与内存
渲染器自行加载平台的 Vulkan 加载器,因此构建不需要 Vulkan SDK 头文件。初始化要求 Vulkan 1.2,也就是接受翻译器 SPIR-V 1.5 的版本,并优先选择同时能做图形和计算的队列族上的独立设备。调试构建在验证层已安装时会请求它们。
一套描述符布局容纳 64 个存储缓冲区、各自 64 项的 2D 和 3D 采样图像数组,以及带类型的存储图像。一个 512 组的环、一块 128 MiB 上传区域,以及持久的客户机渲染目标,把一帧的资源留在设备上。图形翻译使用 256 MiB、1,024 项的缓存。一个流式场景曾经超出旧的 64 MiB 预算,于是每一帧都在重新翻译同样的模块。
管线与时间线
管线编译默认使用两个工作线程。PS5_GPU_COMPILER_WORKERS 可以设为一到四个。PS5_GPU_ASYNC_PIPELINES=0 回到同步编译,并关闭计算预热。预热在下次启动时把先前编译过的计算模块重放进驱动缓存。它从不分派它们,并销毁临时管线。驱动缓存也存在 vulkan_pipeline_cache.bin 里,最大 4 GiB。损坏的文件会被丢弃。它只能影响启动时间。
默认兼容性配置会等待每一个已提交的批次。用 PS5_GPU_TIMELINE_SCHEDULER=1 选择的时间线调度器允许多个批次同时在途,并在真正的回读、客户机同步点或耗尽的资源环处等待。一个游戏,PPSA25872,在经过测量比较之后,自行启用该调度器以及延迟的小型存储回写。图像布局按 aspect、mip 和数组层跟踪,屏障来自该子资源上一次的用途。
格式与常驻
五十六种主机格式可以到达,包括 BC1 到 BC7、整数和归一化通道、R16 和 RG16、半精度浮点以及 RGBA32_FLOAT。客户机图像分配在颜色、深度、存储和采样用途之间共享一张别名登记表。签名匹配时,后面的通道可以采样前面通道写过的深度目标,而不必经客户机内存往返。重新解释和部分重叠则回到客户机内存。
GPU 上的计算解块覆盖 4、8 和 16 字节的 2D 与 3D 标准表面和 PRT 表面。RB+ 和 MSAA 解块仍然在 CPU 上运行。单采样的打包 11/11/10 UNORM 目标通过存储缓冲区拷贝,以及片元解包、混合和再打包来混合。VideoOut 是这些图像之上的交换链。
已经实现的部分
- 运行时选择 Vulkan 1.2 设备、一条交换链,以及常驻的渲染目标。
- 五十六种主机格式、按子资源跟踪的布局,以及一张图像别名登记表。
- 两个编译工作线程、持久的驱动缓存,以及可选的计算预热。
- 可选启用的时间线调度器,有一个游戏默认启用它。
尚未实现的部分
- 默认配置仍然等待每一个批次。时间线提交需要显式启用。
- RB+ 和 MSAA 解块使用 CPU。
- 格式列表并不意味着游戏光照和每一种压缩元数据路径都已具备。
相关机制
这些页面说明什么