Fast Semantics

Fast semantics provide significant CPU performance gains, but adopting them involves a number of changes in the use of D3D11X. Enabling fast semantics is straightforward, but adapting rendering to their use is more complex. Fast semantics on Direct3D 11.x is similar to the high-performance, low-level API aspect of Direct3D 12.

Review of immediate and deferred contexts

Direct3D 11 supports two types of rendering: immediate and deferred. Both are implemented by using the ID3D11DeviceContext interface.

Fast semantics with an immediate and deferred contexts

Fast semantics can be applied at context granularity; you can create an immediate context with fast semantics, and you can create a deferred context with fast semantics.

A command list recorded by a deferred context that has been created with fast semantics will itself employ fast semantics upon execution. Fast semantics command lists may be executed on an immediate context created without fast semantics. Both fast semantics and legacy semantics command lists may be executed on an immediate context created with fast semantics - however, fast and legacy semantics command lists cannot be mixed within the scope of BeginCommandListExecution and EndCommandListExecution calls.

After a context has been created with fast semantics, its behavior will change from its legacy counterpart in several key areas. Failure to address these changes will result in rendering errors and possible GPU hangs—no existing graphics application will be able to just set the FAST_SEMANTICS flag and continue to work unmodified. The following sections document the most significant differences to be expected and addressed when using a context created with fast semantics.

Implementing Fast Semantics in your title

Using fast semantics in a title has the following considerations for coding.

No hazard tracking

No object lifetime management

No state shadowing

Explicit rebinding

Explicit swap chain view rotation

Dynamic usage limitations

State resets on Present and Resume

No state resets after command list execution and at start of command list recording

Minimum level of detail set on view rather than resource

No UpdateSubresource or UpdateSubresource1

No unordered access views on buffers with append or counter

No automatic appending to stream output buffers

No automatic primitive resets on index values of 0xFFFF when using 16 bit index buffers

Fast kickoffs and write combined buffers

See also

DirectX

Optimizing Monolithic Driver Performance

Fast Semantics Render Loops

Descriptor Tables