Как сделать проходы рендеринга, чтобы графика работала параллельно с использованием DirectX12 и C++?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как сделать проходы рендеринга, чтобы графика работала параллельно с использованием DirectX12 и C++?

Сообщение Anonymous »

Я работаю над проектом с использованием DirectX 12, и у меня есть вопрос.
Мне удалось создать простой куб с помощью отложенного рендеринга (он разделен на 4 прохода для позиций, нормалей , альбедо и композиция).
Цель состоит в том, чтобы графический процессор обрабатывал проходы GBuffer параллельно, но, судя по Nvidia nsight, этого не происходит, даже когда я разделяю рабочие нагрузки на отдельные списки команд.
Это — это фрагмент кода, обеспечивающий работу графики.

Код: Выделить всё

// Record command lists.
for (size_t i = 0; i \< 4; i++)
{
GraphicsCommands::SetBindlessDescriptorHeapsAndRootSignature(&lists\[i\]);
SortedPasses\[i\]-\>Execute(lists\[i\]);
lists\[i\].Close();
}

DX12Fence fence\[4\];

// Execute position pass, normals pass and albedo pass.
queues-\>at(0).Execute(lists\[0\]);
queues-\>at(1).Execute(lists\[1\]);
queues-\>at(2).Execute(lists\[2\]);

// Wait till this work is finished for the composition pass since it depends on it.
fence\[0\].Signal(queues-\>at(0).Queue(), 5);
fence\[1\].Signal(queues-\>at(1).Queue(), 5);
fence\[2\].Signal(queues-\>at(2).Queue(), 5);
fence\[0\].Wait(5);
fence\[1\].Wait(5);
fence\[2\].Wait(5);

// Execute the composition pass.
queues-\>at(3).Execute(lists\[3\]);
fence\[3\].Signal(queues-\>at(3).Queue(), 5);
fence\[3\].Wait(5);

for (size_t i = 0; i \< 4; i++)
{
lists\[i\].Reset();
}
Я пробовал такие вещи, как выполнение списков команд в разных очередях и проверка отсутствия переходов ресурсов перед любым другим проходом.
Я пытался создать большую синтетическую рабочую нагрузку. в шейдере, чтобы увидеть, не связано ли это с тем, что графический процессор слишком быстр, чтобы даже выполнять рабочие нагрузки параллельно.
Цель состоит в том, чтобы эти три рабочие нагрузки выполнялись параллельно, а не последовательно.< /p>
Изображение


Подробнее здесь: https://stackoverflow.com/questions/793 ... tx12-and-c
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»