如何将驻留在GPU上的缓冲区资源绑定到输入汇编程序(IA)?

时间:2013-11-24 15:21:35

标签: directx-11 directcompute

我使用计算着色器计算三角形列表并将其存储在RWStructuredBuffer中。为了测试,我读取了这个缓冲区并通过context.InputAssembler.SetVertexBuffers (…)将其传递给IA。这种方法有效,但仅对测试数据的正确性有效。

现在我想使用资源视图将(已经存在的)缓冲区绑定到IA阶段(也就是说不传递指向顶点缓冲区的指针)。

我正在阅读一些好书(Frank D. Luna,Jason Zink),但他们从未提及此案。

=============== 编辑:

  1. SharpDX包装器强加的语法。

  2. 我可以通过context.VertexShader.SetShaderResource(...)将缓冲区绑定到顶点着色器,绑定一个ResoureceView。在VS中,我使用SV_VertexID来访问缓冲区。所以我暂时有一个可行的解决方案,但将来我可能会将缓冲区绑定到输入汇编程序。

1 个答案:

答案 0 :(得分:1)

简单地说,你不能将结构化缓冲区绑定到IA阶段,至少直接,运行时不允许这样做。

如果将ResourceOptionFlags.BufferStructured作为OptionFlags放置,则不允许使用:VertexBuffer / IndexBuffer / StreamOutput / ConstantBuffer / RenderTarget / Depth作为绑定标志,资源创建将失败。

一个选项,它会花费您的GPU副本,是使用VertexBuffer BindFlags和默认用法(与结构化缓冲区大小相同)创建第二个缓冲区。

处理完structbuffer后,请致电: DeviceContext.CopyResource

你将有一个标准的顶点缓冲区可供使用。