void svga_cleanup_tss_binding(struct svga_context *svga)
{
- int i;
+ unsigned i;
unsigned count = MAX2( svga->curr.num_sampler_views,
svga->state.hw_draw.num_views );
struct svga_hw_view_state *view = &svga->state.hw_draw.views[i];
svga_sampler_view_reference(&view->v, NULL);
- pipe_sampler_view_reference( &svga->curr.sampler_views[i], NULL );
+ pipe_sampler_view_release(&svga->pipe, &svga->curr.sampler_views[i]);
pipe_resource_reference( &view->texture, NULL );
view->dirty = 1;
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 && s) {
+ min_lod = MAX2(0, (s->view_min_lod + sv->u.tex.first_level));
+ max_lod = MIN2(s->view_max_lod + sv->u.tex.first_level,
+ sv->texture->last_level);
+ texture = sv->texture;
} else {
min_lod = 0;
max_lod = 0;
}
svga->swc->surface_relocation(svga->swc,
&ts[i].value,
+ NULL,
handle,
SVGA_RELOC_READ);
svga->rebind.texture_samplers = FALSE;
- return 0;
+ return PIPE_OK;
fail:
return PIPE_ERROR_OUT_OF_MEMORY;
handle = queue.bind[i].view->v->handle;
svga->swc->surface_relocation(svga->swc,
&ts[i].value,
+ NULL,
handle,
SVGA_RELOC_READ);
}
} while (0)
-static INLINE void
+static inline void
svga_queue_tss( struct ts_queue *q,
unsigned unit,
unsigned tss,