Deferred contexts

Direct3D 11 introduced the concept of a deferred context.

A deferred context is another instance of ID3D11DeviceContext, with the difference being that a deferred context can not directly submit commands to the driver. Instead, a deferred context must route its commands through the main device context by creating an ID3D11CommandList using the FinishCommandListFunction to first create the command list, and call ExecuteCommandList on the main device context.

While not a complete multithreaded implementation of command recording, deferred contexts can be use to amortize some of the costs of the main thread, using some time on off threads to reduce the amount of time spent recording commands on the main thread.