Общий буфер CPU / GPU в Direct3D12

У меня нет опыта работы с Direct3D, поэтому я могу просто искать не в том месте. Однако я хотел бы преобразовать программу, написанную мной в OpenGL (используя FreeGLUT), в UWP, совместимый с Windows IoT (работает с Direct3D, 12, потому что это круто). Я пытаюсь перенести свою программу на Raspberry Pi 3 и не хочу переходить на Linux.

С помощью примеров, предоставленных Microsoft, я выяснил большую часть того, что мне нужно знать, чтобы начать, но я не могу понять, как распределить динамический буфер данных между процессором и графическим процессором.

Что я хочу знать, как это сделать:

  • Создайте общий кольцевой буфер CPU / GPU
    • Читай и рисуй с помощью графического процессора
    • Запись / замена разделов с процессором

Быстрый полупсевдокод:

while (!buffer.inUse()){                       //wait until buffer is not in use
updateBuffer(buffer.id, data, start, end); //insert data into buffer
drawToScreen(buffer.id);                   //draw using vertex data in buffer
}

Ранее это было сделано в OpenGL, просто используя glBegin () / glEnd () и glVertex3f () для каждого значения в массиве, когда оно не было записано.

Обновление: я в основном хочу Direct3D12 эквивалент редактирования OpenBOX VBO с использованием glBufferSubData (). Если это имеет больше смысла.

Обновление 2: я обнаружил, что могу избавиться от сброса буфера вершин в каждом кадре и повторной загрузки нового буфера в графический процессор. Слишком много накладных расходов, как и следовало ожидать при передаче 10 000 — 200 000 удваиваний в каждом кадре. Поэтому я пытаюсь найти способ использовать постоянные буферы для переноса 5-10 обновленных вершин в шейдер, чтобы я мог копировать из постоянного буфера в буфер вершин с помощью шейдера и не использовать map / unmap каждый кадр , Таким образом, мой кольцевой буфер на ЦП не зависит от буфера, используемого на ГП, но они оба будут совместно использовать одну и ту же информацию через периодические обновления. Я еще посмотрю и напишу еще один более конкретный вопрос о шейдерах, если не найду решения.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]