2017-02-20 234 views
0

我需要将DXGI_FORMAT_R32G32B32A32_TYPELESS类型的ID3D11Texture2D纹理有效地转换为DXGI_FORMAT_B8G8R8A8_TYPELESS(或任何其他32位RGBA类型)纹理。基本上将每像素纹理的128位降低到每像素32位。看起来像ID3D11DeviceContext :: CopyResource-method不能处理这种格式转换。我应该使用着色器来实现吗?如果是,那么着色器可以与CopyResource方法一起使用,还是需要设置完整的渲染管道?尝试在CPU上进行转换,但速度太慢。在DXGI格式之间转换RGBA数据

回答

1

一般而言,最快速的方法是使用GPU将源格式纹理的“全屏四边形”渲染为目标格式的渲染目标。限制将基于支持渲染目标格式的Direct3D硬件功能级别。例如,在具有现代驱动程序的所有功能级别上,可以指望支持DXGI_FORMAT_B8G8R8A8_UNORM作为渲染目标,但不支持DXGI_FORMAT_B8G8R8A8_SNORM

MSDNDirect3D Feature Levels

对于所有可能的DXGI格式转换基于CPU的回退,见DirectXTex