diff options
author | Brian Paul <brianp@vmware.com> | 2012-01-18 10:06:42 -0700 |
---|---|---|
committer | Ian Romanick <ian.d.romanick@intel.com> | 2012-07-06 10:08:56 -0700 |
commit | 21d77c51c19a1545ddf8dd12b5e54eef061c5d9f (patch) | |
tree | c1ea88804325d1df37c1c42af7dc7e3764b2ecaf | |
parent | fc7d43ee9afddb842fd72197cf21992961a5c9fa (diff) | |
download | mesa-21d77c51c19a1545ddf8dd12b5e54eef061c5d9f.tar.gz |
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@vmware.com>
(cherry picked from commit fd890873b20de553078fc96d977fbd858238c7d9)
-rw-r--r-- | 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 3015a446fe2..8eb0dbf4708 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; |