Just a minor nitpick. Am 09.09.2015 um 12:35 schrieb Krzesimir Nowak: > textureQueryLod returns a vec2 with a mipmap information and a > LOD. The latter needs to be not clamped. > --- > src/gallium/drivers/softpipe/sp_tex_sample.c | 55 > ++++++++++++++++++++-------- > 1 file changed, 39 insertions(+), 16 deletions(-) > > diff --git a/src/gallium/drivers/softpipe/sp_tex_sample.c > b/src/gallium/drivers/softpipe/sp_tex_sample.c > index 19188b0..38bdc93 100644 > --- a/src/gallium/drivers/softpipe/sp_tex_sample.c > +++ b/src/gallium/drivers/softpipe/sp_tex_sample.c > @@ -1855,24 +1855,23 @@ compute_lod(const struct pipe_sampler_state *sampler, > } > > > -/* Calculate level of detail for every fragment. > +/* Calculate level of detail for every fragment. The computed value is not > + * clamped into lod_min and lod_max. Probably should be just "clamped to"?
> * \param lod_in per-fragment lod_bias or explicit_lod. > * \param lod results per-fragment lod. > */ > static inline void > -compute_lambda_lod(struct sp_sampler_view *sp_sview, > - struct sp_sampler *sp_samp, > - const float s[TGSI_QUAD_SIZE], > - const float t[TGSI_QUAD_SIZE], > - const float p[TGSI_QUAD_SIZE], > - const float lod_in[TGSI_QUAD_SIZE], > - enum tgsi_sampler_control control, > - float lod[TGSI_QUAD_SIZE]) > +compute_lambda_lod_not_clamped(struct sp_sampler_view *sp_sview, > + struct sp_sampler *sp_samp, > + const float s[TGSI_QUAD_SIZE], > + const float t[TGSI_QUAD_SIZE], > + const float p[TGSI_QUAD_SIZE], > + const float lod_in[TGSI_QUAD_SIZE], > + enum tgsi_sampler_control control, > + float lod[TGSI_QUAD_SIZE]) > { > const struct pipe_sampler_state *sampler = &sp_samp->base; > - float lod_bias = sampler->lod_bias; > - float min_lod = sampler->min_lod; > - float max_lod = sampler->max_lod; > + const float lod_bias = sampler->lod_bias; > float lambda; > uint i; > > @@ -1881,24 +1880,23 @@ compute_lambda_lod(struct sp_sampler_view *sp_sview, > /* XXX FIXME */ > case tgsi_sampler_derivs_explicit: > lambda = sp_sview->compute_lambda(sp_sview, s, t, p) + lod_bias; > - lod[0] = lod[1] = lod[2] = lod[3] = CLAMP(lambda, min_lod, max_lod); > + lod[0] = lod[1] = lod[2] = lod[3] = lambda; > break; > case tgsi_sampler_lod_bias: > lambda = sp_sview->compute_lambda(sp_sview, s, t, p) + lod_bias; > for (i = 0; i < TGSI_QUAD_SIZE; i++) { > lod[i] = lambda + lod_in[i]; > - lod[i] = CLAMP(lod[i], min_lod, max_lod); > } > break; > case tgsi_sampler_lod_explicit: > for (i = 0; i < TGSI_QUAD_SIZE; i++) { > - lod[i] = CLAMP(lod_in[i] + lod_bias, min_lod, max_lod); > + lod[i] = lod_in[i] + lod_bias; > } > break; > case tgsi_sampler_lod_zero: > case tgsi_sampler_gather: > /* this is all static state in the sampler really need clamp here? */ > - lod[0] = lod[1] = lod[2] = lod[3] = CLAMP(lod_bias, min_lod, max_lod); > + lod[0] = lod[1] = lod[2] = lod[3] = lod_bias; > break; > default: > assert(0); > @@ -1906,6 +1904,31 @@ compute_lambda_lod(struct sp_sampler_view *sp_sview, > } > } > > +/* Calculate level of detail for every fragment. > + * \param lod_in per-fragment lod_bias or explicit_lod. > + * \param lod results per-fragment lod. > + */ > +static inline void > +compute_lambda_lod(struct sp_sampler_view *sp_sview, > + struct sp_sampler *sp_samp, > + const float s[TGSI_QUAD_SIZE], > + const float t[TGSI_QUAD_SIZE], > + const float p[TGSI_QUAD_SIZE], > + const float lod_in[TGSI_QUAD_SIZE], > + enum tgsi_sampler_control control, > + float lod[TGSI_QUAD_SIZE]) > +{ > + const struct pipe_sampler_state *sampler = &sp_samp->base; > + const float min_lod = sampler->min_lod; > + const float max_lod = sampler->max_lod; > + int i; > + > + compute_lambda_lod_not_clamped(sp_sview, sp_samp, s, t, p, lod_in, > control, lod); > + for (i = 0; i < TGSI_QUAD_SIZE; i++) { > + lod[i] = CLAMP(lod[i], min_lod, max_lod); > + } > +} > + > static inline unsigned > get_gather_component(const float lod_in[TGSI_QUAD_SIZE]) > { > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev