Как я могу связать ресурс буфера, который находится на GPU, с ассемблером ввода (IA)?

Я использую вычислительные шейдеры, чтобы вычислить список треугольников и сохранить его в RWStructuredBuffer, Для тестирования я читаю этот буфер и передаю его в IA через context.InputAssembler.SetVertexBuffers (…), Этот подход работает, но действителен только для проверки правильности данных.

Теперь я хочу привязать (уже существующий) буфер к этапу IA, используя представление ресурсов (иначе говоря, не передавая указатель на буфер вершин).

Я читаю несколько хороших книг (Фрэнк Д. Луна, Джейсон Цинк), но они никогда не упоминают этот случай.

=============== РЕДАКТИРОВАТЬ:

  1. Синтаксис, который я здесь использую, наложен оболочкой SharpDX.

  2. Я могу привязать буфер к вершинному шейдеру через context.VertexShader.SetShaderResource(...)Привязать ResoureceView. В VS я использую SV_VertexID получить доступ к буферу. Так что на данный момент у меня есть рабочее решение, но в будущем могут быть случаи, когда я должен связать буфер с входным ассемблером.

1 ответ

Проще говоря, вы не можете привязать структурированный буфер к этапу IA, по крайней мере напрямую, среда выполнения не позволит этого.

Если вы установите ResourceOptionFlags.BufferStructured в качестве OptionFlags, вам не разрешено использовать: VertexBuffer/IndexBuffer/StreamOutput/ConstantBuffer/RenderTarget/Depth в качестве флагов связывания, создание ресурса не будет выполнено.

Один вариант, который стоит вам копии GPU, - это создание второго буфера с использованием VertexBuffer BindFlags и использованием по умолчанию (такого же размера, как ваш структурированный буфер).

Как только вы закончите обработку вашего структурированного буфера, вызовите: DeviceContext.CopyResource

И у вас будет стандартный вершинный буфер, готовый к использованию.

Другие вопросы по тегам