Compression 什么是';无类型';DirectX中的DXGI纹理格式?

Compression 什么是';无类型';DirectX中的DXGI纹理格式?,compression,gpu,directx,textures,directx-11,Compression,Gpu,Directx,Textures,Directx 11,directX中有多种纹理格式: 大多数都很清楚,但什么是“无类型”纹理?例如,对于BC6H,有 DXGI_FORMAT_BC6H_TYPELESS, DXGI_FORMAT_BC6H_UF16, DXGI_FORMAT_BC6H_SF16, UF16是无符号浮点,SF16是有符号浮点,至少编码器(也可能是解码器?)似乎关心格式是有符号还是无符号 但什么是“无类型”呢?这种纹理是如何编码和解码的?DXGI格式的“无类型”变体适用于特殊情况,您可以更改数据的解释方式。这允许您使用硬件的正确内存

directX中有多种纹理格式:

大多数都很清楚,但什么是“无类型”纹理?例如,对于BC6H,有

DXGI_FORMAT_BC6H_TYPELESS,
DXGI_FORMAT_BC6H_UF16,
DXGI_FORMAT_BC6H_SF16,
UF16是无符号浮点,SF16是有符号浮点,至少编码器(也可能是解码器?)似乎关心格式是有符号还是无符号

但什么是“无类型”呢?这种纹理是如何编码和解码的?

DXGI格式的“无类型”变体适用于特殊情况,您可以更改数据的解释方式。这允许您使用硬件的正确内存布局(即使用
\u无类型
格式)创建资源(即实际的“比特包”),然后您可以使用所需的特定类型创建多个视图对象。这可以有效地让您在有限的情况下执行“C++强制转换”的等效操作

使用无类型最常见的情况是处理深度/模具格式,使用RGB旋转着色器,以及使用DirectCompute实现的BC编解码器。这不是您经常使用的东西,但是当您执行此操作时,放松类型验证的选项会派上用场

有关使用无类型DXGI格式的一些示例,请参阅GitHub,并查看自适应设置CS40基本计算机11级联dShadowMaps11多线程渲染11,以及变体Shadows11

对于Xbox开发,还有一些情况下,
\u TYPELESS
会派上用场,因为它是一种统一内存访问(UMA)体系结构,但这会影响“stock”Direct3D的验证规则


请参阅和。

请参阅“格式修改器”\u TYPELESS“文档状态
当无类型资源绑定到着色器时,应用程序或着色器必须解析格式类型
着色器如何解析格式类型?例如,当您从无类型纹理创建着色器资源视图时,您可以指定具有不同类型格式的区域:但这在DXGI_FORMAT_BC6H的情况下有意义吗?有符号BC6h纹理的比特不是被解释为无符号的一个完整的胡言乱语吗?反之亦然?它很可能是胡言乱语。就像C/C++转换一样。BC6H的特殊情况很奇怪,但这只是一个特殊情况。大多数DXGI格式被分为“无类型组”。还请注意,这意味着硬件必须使用相同的物理视频内存布局
DXGI\u格式\u BC6H\u UF16
DXGI\u格式\u BC6H\u SF16
,以进行旋转/平铺、跨步、mip贴图布局,当然,你如何解释这些数据是基于UF16和SF16的实际选择。