Как я могу связать ресурс буфера, который находится на GPU, с ассемблером ввода (IA)?
Я использую вычислительные шейдеры, чтобы вычислить список треугольников и сохранить его в RWStructuredBuffer
, Для тестирования я читаю этот буфер и передаю его в IA через context.InputAssembler.SetVertexBuffers (…)
, Этот подход работает, но действителен только для проверки правильности данных.
Теперь я хочу привязать (уже существующий) буфер к этапу IA, используя представление ресурсов (иначе говоря, не передавая указатель на буфер вершин).
Я читаю несколько хороших книг (Фрэнк Д. Луна, Джейсон Цинк), но они никогда не упоминают этот случай.
=============== РЕДАКТИРОВАТЬ:
Синтаксис, который я здесь использую, наложен оболочкой SharpDX.
Я могу привязать буфер к вершинному шейдеру через
context.VertexShader.SetShaderResource(...)
Привязать ResoureceView. В VS я используюSV_VertexID
получить доступ к буферу. Так что на данный момент у меня есть рабочее решение, но в будущем могут быть случаи, когда я должен связать буфер с входным ассемблером.
1 ответ
Проще говоря, вы не можете привязать структурированный буфер к этапу IA, по крайней мере напрямую, среда выполнения не позволит этого.
Если вы установите ResourceOptionFlags.BufferStructured в качестве OptionFlags, вам не разрешено использовать: VertexBuffer/IndexBuffer/StreamOutput/ConstantBuffer/RenderTarget/Depth в качестве флагов связывания, создание ресурса не будет выполнено.
Один вариант, который стоит вам копии GPU, - это создание второго буфера с использованием VertexBuffer BindFlags и использованием по умолчанию (такого же размера, как ваш структурированный буфер).
Как только вы закончите обработку вашего структурированного буфера, вызовите: DeviceContext.CopyResource
И у вас будет стандартный вершинный буфер, готовый к использованию.