0

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

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

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

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

  1. 我在这里使用的语法是由 SharpDX 包装器强加的。

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

4

1 回答 1

1

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

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

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

处理完结构化缓冲区后,调用:DeviceContext.CopyResource

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

于 2013-11-25T14:09:45.017 回答