我使用计算着色器计算三角形列表并将其存储在RWStructuredBuffer
中。为了测试,我读取了这个缓冲区并通过context.InputAssembler.SetVertexBuffers (…)
将其传递给IA。这种方法有效,但仅对测试数据的正确性有效。
现在我想使用资源视图将(已经存在的)缓冲区绑定到IA阶段(也就是说不传递指向顶点缓冲区的指针)。
我正在阅读一些好书(Frank D. Luna,Jason Zink),但他们从未提及此案。
=============== 编辑:
SharpDX包装器强加的语法。
我可以通过context.VertexShader.SetShaderResource(...)
将缓冲区绑定到顶点着色器,绑定一个ResoureceView。在VS中,我使用SV_VertexID
来访问缓冲区。所以我暂时有一个可行的解决方案,但将来我可能会将缓冲区绑定到输入汇编程序。
答案 0 :(得分:1)
简单地说,你不能将结构化缓冲区绑定到IA阶段,至少直接,运行时不允许这样做。
如果将ResourceOptionFlags.BufferStructured作为OptionFlags放置,则不允许使用:VertexBuffer / IndexBuffer / StreamOutput / ConstantBuffer / RenderTarget / Depth作为绑定标志,资源创建将失败。
一个选项,它会花费您的GPU副本,是使用VertexBuffer BindFlags和默认用法(与结构化缓冲区大小相同)创建第二个缓冲区。
处理完structbuffer后,请致电: DeviceContext.CopyResource
你将有一个标准的顶点缓冲区可供使用。