When sampling from a render target, avoid sampling across mip levels of the surface with instructions such as sample_l/sample_b.
Use API defined and architecture supported compression formats (that is, BC1-BC7) on larger textures to improve memory bandwidth utilization and improve memory locality when performing sampling operations.
Avoid dependent texture samples between sample instructions. For example, avoid making the UV coordinates of the next sample operation dependent upon the results of the previous sample operation. In this instance, the shader compiler may not be able to optimize or reorder the instructions, and it may result in a sampler bottleneck.
Avoid redundant and duplicate sampler states within shader code, and use static/immutable samplers, if possible.
Define appropriate resource types for sampling operation and filtering mode. Do not use volumetric surface as a 2D array.
When fetching from an array surface, ensure that the index is uniform across all single instruction, multiple data (SIMD) lanes.
Avoid defining constant data in textures that could be procedurally computed in the shader, such as gradients.
Avoid anisotropic filtering on sRGB textures.
Sample_d provides gradient per pixels and throughput drops to one-fourth. Prefer sample_l unless anisotropic filtering is required.
When using VRS, anisotropic filtering may not be needed, as pixels in that draw will be coarser. Non-anisotropic filtering improves sampler throughput.