纹理解块
PS5 纹理按 GFX10 交织模式存放,而不是线性的行。PS5PCEM 在 CPU 上应用地址方程,并对符合条件的大型 4、8 和 16 字节表面在 GPU 上应用。
仓库笔记截至 2026年10月10日
地址方程
瓦片纹理把像素坐标与 pipe、bank 和采样位做异或,使相邻像素落到不同的内存通道。PS5PCEM 实现了 GFX10 方程,覆盖线性布局、标准的 256 字节、4 KiB 和 64 KiB 瓦片、部分驻留的 64 KiB 瓦片、深度 Z_X 和渲染目标 R_X。同一份约定覆盖 mip 尾和厚 3D 块。
最多十六个 mip 级别按最小的在前放置。小级别共享精确的 4 KiB 和 64 KiB mip 尾位置。三维资源使用厚块和深度块切片。每个子资源暴露一个经过检查的源字节偏移。缓冲区、图像、块压缩、颜色目标和深度目标适配器什么都不分配,并拒绝溢出或过短的范围。
GPU 解块与 CPU 回退
大型 4 字节标准 256 字节、4 KiB 和 64 KiB 表面,以及大型线性表面的首次使用上传,在 GPU 上解块。计算内核收到一个无指针的键和一块 84 字节的参数块:块大小、尾、行跨距、切片、采样数和 64 位缓冲区偏移,布局稳定且全部为 32 位。八字节和十六字节的 2D 与 3D 标准表面和 PRT 表面属于同一个 GPU 族。
其他族留在 CPU 上,包括 RB+ 和 MSAA。它们的 Oberon 方程包含采样位,CPU 路径会使用这些位。回退是带宽代价。它不是另一种像素格式。活动绘制上的诊断会报告族、3D 块尺寸、采样数、mip 尾边界和客户机分配大小。
为什么解块会出现在帧时间里
每一帧都重新上传的纹理,每一帧都要付解块的代价。页跟踪器在启用时让未改变的页保持常驻,从而跳过解块。GPU 自己改写过的纹理仍然必须失效。解块并不取代这条一致性规则。
采样视图解块描述符所指名的 mip 范围,包括非零的基础级别。在这种情况下,Vulkan 图像的 mip 0 就是视图的基础级别。视图路径上仍然缺失的分量重排,是与地址方程分开的限制。
已经实现的部分
- GFX10 的线性、标准、PRT、深度和渲染目标地址方程,包括 mip 尾和 3D 块。
- 大型 4、8 和 16 字节 2D 与 3D 标准表面和 PRT 表面的 GPU 计算解块。
- 其余族的 CPU 解块,包括 MSAA 和 RB+ 采样位。
- 经过检查的子资源偏移,拒绝过短范围和溢出。
尚未实现的部分
- MSAA 和 RB+ 解块在 CPU 上运行。
- 部分分量重排和层视图仍然不完整。
- 上传之后又由 CPU 写入的表面,在再次采样之前必须失效。
相关机制
这些页面说明什么