Мне удалось создать простой куб с помощью отложенного рендеринга (он разделен на 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