Structure constant buffers to improve cache locality so that memory accesses all occur on
the same cache line to improve memory performance.
Favor constant access that uses direct access since the offset is known at compile time,
rather than indirect access, in which the offset must be computed at runtime. This benefits
high latency operations like flow control and sampling.
Group the more frequently used constants for better cache utilization and move them to the
beginning of the buffer.
Organize constants by frequency of update and only upload when the values change.
When loading data from buffers or structured buffers, organize the data access such that
all or the majority of the cache line is used. For example, if a structured buffer has ten
attributes and only one of those attributes is used for reading and/or writing, it would be
better to split that one attribute into its own structured buffer.
Consider using ByteAddressBuffers when performing consecutive data loads instead of
loading data from a Typed Buffer. Those can be optimized by our shader compiler.
On DX11, developers will see the best performance in shaders that avoid sparsely
referencing the constant data in constant buffers. Best performance will also be achieved
if only up to two constant buffers are referenced in non-compute shaders.