diff options
author | Roland Scheidegger <[email protected]> | 2013-03-01 23:27:41 +0100 |
---|---|---|
committer | Roland Scheidegger <[email protected]> | 2013-03-02 02:54:31 +0100 |
commit | 6ace2e41da7dded630d932d03bacb7e14a93d47a (patch) | |
tree | adeff2f7bd1eb1968bf3e57bb3fe0a09f1bdb0f1 /src/gallium/auxiliary/tgsi/tgsi_exec.h | |
parent | c7c7186045ec617c53f7899280cbe12e59503e4d (diff) |
tgsi: add texel offsets and derivatives to sampler interface
Something I never got around to implement, but this is the tgsi execution
side for implementing texel offsets (for ordinary texturing) and explicit
derivatives for sampling (though I guess the ordering of the components
for the derivs parameters is debatable).
There is certainly a runtime cost associated with this.
Unless there are different interfaces used depending on the "complexity"
of the texture instructions, this is impossible to avoid.
Offsets are always active (I think checking if they are active or not is
probably not worth it since it should mostly be an add), whereas the
sampler_control is extended for explicit derivatives.
For now softpipe (the only user of this) just drops all those new values
on the floor (which is the part I never implemented...).
Additionally this also fixes (discovered by accident) inconsistent
projective divide for the comparison coord - the code did do the
projection for shadow2d targets, but not shadow1d ones. This also
drops checking for projection modifier on array targets, since they
aren't possible in any extension I know of (hence we don't actually
know if the array layer should also be divided or not).
Reviewed-by: Brian Paul <[email protected]>
Diffstat (limited to 'src/gallium/auxiliary/tgsi/tgsi_exec.h')
-rw-r--r-- | src/gallium/auxiliary/tgsi/tgsi_exec.h | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/gallium/auxiliary/tgsi/tgsi_exec.h b/src/gallium/auxiliary/tgsi/tgsi_exec.h index c009a97c574..ef1fa8247f1 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_exec.h +++ b/src/gallium/auxiliary/tgsi/tgsi_exec.h @@ -92,8 +92,8 @@ enum tgsi_sampler_control { tgsi_sampler_lod_none, tgsi_sampler_lod_bias, tgsi_sampler_lod_explicit, - tgsi_sampler_lod_zero - /* FIXME: tgsi_sampler_derivs_explicit */ + tgsi_sampler_lod_zero, + tgsi_sampler_derivs_explicit }; /** @@ -108,10 +108,12 @@ struct tgsi_sampler * s - the first texture coordinate for sampling. * t - the second texture coordinate for sampling - unused for 1D, layer for 1D arrays. - * p - the third coordinate for sampling for 3D, cube, cube arrays, + * r - the third coordinate for sampling for 3D, cube, cube arrays, * layer for 2D arrays. Compare value for 1D/2D shadows. * c0 - Compare value for shadow cube and shadow 2d arrays, * layer for cube arrays. + * derivs - explicit derivatives. + * offset - texel offsets * lod - lod value, except for shadow cube arrays (compare value there). */ void (*get_samples)(struct tgsi_sampler *sampler, @@ -122,6 +124,8 @@ struct tgsi_sampler const float r[TGSI_QUAD_SIZE], const float c0[TGSI_QUAD_SIZE], const float c1[TGSI_QUAD_SIZE], + float derivs[3][2][TGSI_QUAD_SIZE], + const int8_t offset[3], enum tgsi_sampler_control control, float rgba[TGSI_NUM_CHANNELS][TGSI_QUAD_SIZE]); void (*get_dims)(struct tgsi_sampler *sampler, |