我有一个带有格式D3D11 Texture2d的DXGI_FORMAT_R10G10B10A2_UNORM
,并希望将其转换为具有DXGI_FORMAT_R32G32B32A32_FLOAT
或DXGI_FORMAT_R8G8B8A8_UINT
格式的D3D11 Texture2d,因为这些纹理只能导入到CUDA中。
出于性能上的原因,我希望这能完全在GPU上运行。我读了一些线程建议,我应该设置第二个纹理作为渲染目标,并将第一个纹理渲染到它上,或者通过像素着色器转换纹理。
但是,由于我对D3D不太了解,所以我不能这样做。在一个理想的世界里,我可以做到这件事,而不需要建立一个完整的渲染管道,包括IA,VS等。
有人可能有这样的例子或任何提示吗?提前感谢!
发布于 2022-01-28 21:21:09
在GPU上,您进行这种转换的方式是呈现到纹理,这至少需要一个最小的“屏幕外”呈现设置。
DXGI_FORMAT_R32G32B32A32_FLOAT
、DXGI_FORMAT_R8G8B8A8_UINT
等)。这里的限制是,它需要是在Direct3D硬件功能级别上作为呈现目标视图支持的格式。见Microsoft。考虑到您是从DXGI_FORMAT_R10G10B10A2_UNORM
开始的,那么您几乎需要Direct3D硬件特性级别10.0或更高。这让事情变得很简单。你仍然需要一个完整的渲染管道,尽管你不需要一个“交换链”。
您可能会发现本教程很有用。
https://stackoverflow.com/questions/70898467
复制相似问题