- for (i = 0; i < views->count; ++i)
- pipe_sampler_view_release(st->pipe, &views->views[i].view);
+ for (unsigned i = 0; i < views->count; ++i) {
+ struct st_sampler_view *stsv = &views->views[i];
+ if (stsv->view) {
+ if (stsv->st && stsv->st != st) {
+ /* Transfer this reference to the zombie list. It will
+ * likely be freed when the zombie list is freed.
+ */
+ st_save_zombie_sampler_view(stsv->st, stsv->view);
+ stsv->view = NULL;
+ } else {
+ pipe_sampler_view_reference(&stsv->view, NULL);
+ }
+ }
+ }
+ views->count = 0;