DmitryKo
Veteran
No. The API and driver model have been redesigned to enable multithreading.Is it true that writing better code and draw things in batches would overcome every benefits D3D12 have with low cost to draw calls?
First, any Direct3D 12 GPU has to support virtual address space for addressing resources in physical memory. All GPUs should support page table translations, and more advanced GPUs support virtual address space shared with the CPU. Previously, kernel mode driver had to verify and convert ("patch") all such addresses before submitting the batch to the GPU. This is what incurred a significant overhead and prevented multithreaded operation - previously only one thread could submit graphics commands to the kernel mode driver.
Second, new command lists and pipeline states are read-only (non-mutable), which eliminates read-write operations and the need for inter-process synchronisation. This enables multithreaded command submission to the user-mode driver.
These two are essentially what makes Direct3D 12 much more CPU efficient while at the same time allowing 10x more draw calls; other things like explicit resource management and pipeline state management also relieve the runtime and driver from doing a lot of guess work required by "automatic" management.
https://devblogs.microsoft.com/directx/directx-12/
Exactly, it's a problem with design of the API and driver model.is it also a pure technical limitation with D3D11 which no optimizing can overcome?
BTW Microsoft, Nvidia and ATI have been planning improvements to virtual memory support since at least 2006/Vista, not sure why did it take them so long...
Last edited: