Sampler states control how textures are sampled in shaders, how they're filtered and addressed.

Modern GPUs allow binding of 128 textures in a shader, however you are limited to only 16 bound samplers.
This is generally more than enough if you reuse samplers for multiple textures.

Sampler states are defined as you normally would in HLSL, but should be annotated with the desired options.

Texture2D MyCoolTexture;
Texture2D MyOtherCoolTexture;
SamplerState MyPixelySampler < Filter( Point ); >;

// Using the samplers
float4 color1 = MyCoolTexture.Sample( MyPixelySampler, uv );
float4 color2 = MyOtherCoolTexture.Sample( MyPixelySampler, uv );

Annotations

Annotation Description Possible Values
Filter Filtering mode used for texture sampling. Point, Linear, Anisotropic
AddressU Texture coordinate addressing mode for the U direction. Wrap, Mirror, Clamp, Border, Mirror_Once
AddressV Texture coordinate addressing mode for the V direction. Wrap, Mirror, Clamp, Border, Mirror_Once
AddressW Texture coordinate addressing mode for the W direction. Wrap, Mirror, Clamp, Border, Mirror_Once
MaxAniso Maximum anisotropy level allowed for anisotropic filtering. Integer value (e.g., 2, 4, 8, 16, etc.)

Filters

Enum Description
Point Same as MinMagMipPoint
Bilinear Same as MinMagLinearMipPoint
Trilinear Same as MinMagMipLinear
Anisotropic Anisotropic filtering, controlled by MaxAniso
MinMagMipPoint Minify/magnify/mipmap using point sampling.
MinMagPointMipLinear Minify/magnify using point sampling, mipmap using linear interpolation.
MinPointMagLinearMipPoint Minify using point sampling, magnify using linear sampling, mipmap using point sampling.
MinPointMagMipLinear Minify using point sampling, magnify using point sampling, mipmap using linear interpolation.
MinLinearMagMipPoint Minify using linear interpolation, magnify using point sampling, mipmap using point sampling.
MinLinearMagPointMipLinear Minify using linear interpolation, magnify using point sampling, mipmap using linear interpolation.
MinMagLinearMipPoint Minify/magnify using linear sampling, mipmap using point sampling.
MinMagMipLinear Minify/magnify/mipmap using linear interpolation.
ComparisonMinMagMipPoint Comparison minify/magnify/mipmap using point sampling.
ComparisonMinMagPointMipLinear Comparison minify/magnify using point sampling, mipmap using linear interpolation.
ComparisonMinPointMagLinearMipPoint Comparison minify using point sampling, magnify using linear sampling, mipmap using point sampling.
ComparisonMinPointMagMipLinear Comparison minify using point sampling, magnify using point sampling, mipmap using linear interpolation.
ComparisonMinLinearMagMipPoint Comparison minify using linear interpolation, magnify using point sampling, mipmap using point sampling.
ComparisonMinLinearMagPointMipLinear Comparison minify using linear interpolation, magnify using point sampling, mipmap using linear interpolation.
ComparisonMinMagLinearMipPoint Comparison minify/magnify using linear sampling, mipmap using point sampling.
ComparisonMinMagMipLinear Comparison minify/magnify/mipmap using linear interpolation.
ComparisonAnisotropic Comparison anisotropic filtering.

Common Samplers

Here are some common predefined sampler states you can use in your shaders.

Sampler State Description
g_sAniso Anisotropic filtering with a maximum anisotropy level of 8.
g_sBilinearClamp Bilinear filtering with texture coordinate addressing mode set to clamp for U, V, and W directions.
g_sTrilinearWrap Trilinear filtering with texture coordinate addressing mode set to wrap for U, V, and W directions.
g_sTrilinearClamp Trilinear filtering with texture coordinate addressing mode set to clamp for U, V, and W directions.
g_sPointClamp Point filtering with texture coordinate addressing mode set to clamp for U, V, and W directions.
g_sPointWrap Point filtering with texture coordinate addressing mode set to wrap for U and V directions, and clamp for W direction.

CreateTexture2D & Tex2D macros create and sample coupled textures and samplers, this is how older graphics APIs (DX9) and should be avoided due to it's limitations.






Created 26 Mar 2024
Updated 26 Mar 2024