多纹素图像加载
IMAGE_LOAD 的 BY2、BY4、PCK2 和 PCK4,包括显式 mip 形式,对已测量的原生 2D 格式执行。BY 加载返回连续纹素。PCK 加载把它们的原始位打包进一个寄存器。
仓库笔记截至 2026年10月10日
BY 与 PCK
BY 加载把连续纹素写入分开的 VGPR,每个纹素内部按通道排序。PCK 加载把原始分量位打包进一个 32 位 VGPR,第一个纹素在最低有效位。有符号分量被截断到它们的存储宽度。UNORM 分量用向偶数舍入的转换来重建。
第一个纹素在 X 上向下对齐到二或四的一组。边界测试使用原始的、未对齐的坐标:对齐之前整组必须放得下,Y 必须在范围内,请求的 mip 必须存在。无效的一组会把每个结果寄存器清零,并留下无关的目的地不动。无效坐标在 Vulkan 看到之前被换成安全的获取操作数。
哪些格式
DMASK 为 0x3 的 BY2 覆盖 UNORM、SNORM、UINT、SINT 的 R8 和 R16,以及 R16 FLOAT。DMASK 为 0xF 的 BY2 覆盖 UNORM、SNORM、UINT 和 SINT 的 RG8。DMASK 为 0xF 的 BY4 覆盖这四种数值类型的 R8。DMASK 为 0x1 的 PCK2 覆盖 UNORM、UINT 和 SINT 的 R8、R16 和 RG8。DMASK 为 0x1 的 PCK4 覆盖 UNORM、UINT 和 SINT 的 R8。这些加载的显式 mip 变体使用同一份格式列表。
后端把精确的原生格式交给翻译。分开的 UINT 和 SINT 采样图像组使整数结果在浮点和比较组旁边仍然类型正确。NSA 坐标、重叠的地址与目的地寄存器,以及普通的 EXEC 掩码都予以保留。
这次改动不是什么
10 月 9 日的报告是共享的着色器与后端支持。它不依赖游戏标识符或着色器哈希。仅凭这些加载,并不声称任何游戏兼容性结果,也不声称帧率变化。
存储,以及不在已测量集合里的格式或描述符组合,仍然不受支持。水平 gather 是相邻的指令族,有自己的页面。
已经实现的部分
- 已测量的 2D BY2、BY4、PCK2 和 PCK4 加载,有或没有显式 mip。
- 组对齐、经过检查的边界,以及无效组的清零结果。
- 分开的整数采样图像组,使 UINT 和 SINT 保持类型。
- 保留 EXEC 掩码、NSA 坐标和重叠的寄存器对。
尚未实现的部分
- 这些形式的图像存储没有实现。
- 已测量表格之外的格式和描述符模式会被拒绝。
- 这些测试并不能为任何游戏确立新的每秒帧数。
相关机制
这些页面说明什么