Which PSO is in use can still be changed dynamically, but to do so the hardware only needs to copy the minimal amount of pre-computed state directly to the hardware registers, rather than computing the hardware state on the fly.
This means significantly reduced draw call overhead, and many more draw calls per frame.
Because each command list is self-contained and inherits no state, the driver can pre-compute all necessary GPU commands up-front and in a free-threaded manner.
The only serial process necessary is the final submission of command lists to the GPU via the command queue, which is a highly efficient process.
Direct3D 12 addresses this issue by unifying much of the pipeline state into immutable pipeline state objects (PSOs), which are finalized on creation.
This allows hardware and drivers to immediately convert the PSO into whatever hardware native instructions and state are required to execute GPU work.
To achieve multithreaded scaling, games also have deferred contexts available to them, but like PSOs, deferred contexts also do not map perfectly to hardware, and so relatively little work can be done in them.Direct3D 12 introduces a new model for work submission based on command lists that contain the entirety of information needed to execute a particular workload on the GPU.Each new command list contains information such as which PSO to use, what texture and buffer resources are needed, and the arguments to all draw calls.If you’re a gamer, you know what 3DMark is – a great way to do game performance benchmarking on all your hardware and devices.This makes it an excellent choice for verifying the performance improvements that Direct3D 12 will bring to games.