首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >D3D纹理转换格式

D3D纹理转换格式
EN

Stack Overflow用户
提问于 2022-01-28 18:20:21
回答 1查看 209关注 0票数 2

我有一个带有格式D3D11 Texture2d的DXGI_FORMAT_R10G10B10A2_UNORM,并希望将其转换为具有DXGI_FORMAT_R32G32B32A32_FLOATDXGI_FORMAT_R8G8B8A8_UINT格式的D3D11 Texture2d,因为这些纹理只能导入到CUDA中。

出于性能上的原因,我希望这能完全在GPU上运行。我读了一些线程建议,我应该设置第二个纹理作为渲染目标,并将第一个纹理渲染到它上,或者通过像素着色器转换纹理。

但是,由于我对D3D不太了解,所以我不能这样做。在一个理想的世界里,我可以做到这件事,而不需要建立一个完整的渲染管道,包括IA,VS等。

有人可能有这样的例子或任何提示吗?提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-28 21:21:09

在GPU上,您进行这种转换的方式是呈现到纹理,这至少需要一个最小的“屏幕外”呈现设置。

  1. 创建一个呈现目标视图(DXGI_FORMAT_R32G32B32A32_FLOATDXGI_FORMAT_R8G8B8A8_UINT等)。这里的限制是,它需要是在Direct3D硬件功能级别上作为呈现目标视图支持的格式。见Microsoft
  2. 为源纹理创建一个SRV。同样,您的Direct3D硬件设备功能级别需要将其作为纹理支持。
  3. 将源纹理呈现给RTV作为“全屏四角体”。使用Direct3D硬件功能级别10.0或更高,您可以在顶点着色器中自生成四层,因此您实际上不需要一个顶点缓冲区。见这段代码

考虑到您是从DXGI_FORMAT_R10G10B10A2_UNORM开始的,那么您几乎需要Direct3D硬件特性级别10.0或更高。这让事情变得很简单。你仍然需要一个完整的渲染管道,尽管你不需要一个“交换链”。

您可能会发现本教程很有用。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70898467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档