diff options
author | Rob Clark <[email protected]> | 2015-09-18 10:44:27 -0400 |
---|---|---|
committer | Rob Clark <[email protected]> | 2015-09-18 21:07:49 -0400 |
commit | 3745c38425b3e1da5c94a5f900eb5fdc44da9439 (patch) | |
tree | 65c54abf5346216f4e5ab90a13bb3fa9a91f1bdd /src/glsl/nir/nir.h | |
parent | 1ce8060c25c7f2c7a54159fab6a6974c0ba182a8 (diff) |
nir/lower_tex: add support to clamp texture coords
Some hardware needs to clamp texture coordinates to [0.0, 1.0] in the
shader to emulate GL_CLAMP. This is added to lower_tex_proj since, in
the case of projected coords, the clamping needs to happen *after*
projection.
v2: comments/suggestions from Ilia and Eric, use txs to get texture size
and clamp RECT textures to their dimensions rather than [0.0, 1.0] to
avoid having to lower RECT textures to 2D.
Signed-off-by: Rob Clark <[email protected]>
Reviewed-by: Kenneth Graunke <[email protected]>
Diffstat (limited to 'src/glsl/nir/nir.h')
-rw-r--r-- | src/glsl/nir/nir.h | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/glsl/nir/nir.h b/src/glsl/nir/nir.h index 3c908b9f295..255d45585db 100644 --- a/src/glsl/nir/nir.h +++ b/src/glsl/nir/nir.h @@ -1850,6 +1850,24 @@ typedef struct nir_lower_tex_options { * texture dims to normalize. */ bool lower_rect; + + /** + * To emulate certain texture wrap modes, this can be used + * to saturate the specified tex coord to [0.0, 1.0]. The + * bits are according to sampler #, ie. if, for example: + * + * (conf->saturate_s & (1 << n)) + * + * is true, then the s coord for sampler n is saturated. + * + * Note that clamping must happen *after* projector lowering + * so any projected texture sample instruction with a clamped + * coordinate gets automatically lowered, regardless of the + * 'lower_txp' setting. + */ + unsigned saturate_s; + unsigned saturate_t; + unsigned saturate_r; } nir_lower_tex_options; void nir_lower_tex(nir_shader *shader, |