Mesa (master): svga: fix min/max lod clamping
Brian Paul
brianp at kemper.freedesktop.org
Wed Jan 18 17:45:35 UTC 2012
Module: Mesa
Branch: master
Commit: fd890873b20de553078fc96d977fbd858238c7d9
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=fd890873b20de553078fc96d977fbd858238c7d9
Author: Brian Paul <brianp at vmware.com>
Date: Wed Jan 18 10:06:42 2012 -0700
svga: fix min/max lod clamping
The interaction between the mipmap lod min/max limits and the texture
base/max level limits is kind of tricky. Changing the base level
didn't work as expected before.
NOTE: This is a candidate for the 8.0 branch.
Reviewed-by: José Fonseca <jfonseca at vmware.com>
---
src/gallium/drivers/svga/svga_state_tss.c | 10 ++++++----
1 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/src/gallium/drivers/svga/svga_state_tss.c b/src/gallium/drivers/svga/svga_state_tss.c
index 3015a44..8eb0dbf 100644
--- a/src/gallium/drivers/svga/svga_state_tss.c
+++ b/src/gallium/drivers/svga/svga_state_tss.c
@@ -82,12 +82,14 @@ update_tss_binding(struct svga_context *svga,
const struct svga_sampler_state *s = svga->curr.sampler[i];
struct svga_hw_view_state *view = &svga->state.hw_draw.views[i];
struct pipe_resource *texture = NULL;
+ struct pipe_sampler_view *sv = svga->curr.sampler_views[i];
/* get min max lod */
- if (svga->curr.sampler_views[i]) {
- min_lod = MAX2(s->view_min_lod, 0);
- max_lod = MIN2(s->view_max_lod, svga->curr.sampler_views[i]->texture->last_level);
- texture = svga->curr.sampler_views[i]->texture;
+ if (sv) {
+ min_lod = MAX2(0, (s->view_min_lod + sv->u.tex.first_level));
+ max_lod = MIN2(s->view_max_lod, sv->texture->last_level);
+ max_lod += sv->u.tex.first_level;
+ texture = sv->texture;
} else {
min_lod = 0;
max_lod = 0;
More information about the mesa-commit
mailing list