iris: Unreference some more things on state module teardown
authorKenneth Graunke <kenneth@whitecape.org>
Thu, 24 Jan 2019 17:01:53 +0000 (09:01 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 21 Feb 2019 18:26:11 +0000 (10:26 -0800)
src/gallium/drivers/iris/iris_state.c

index 050738f7df16cb6eb8203b19483b0b0a51f3397c..28c510010e19c2fd2f5383cf8dad14d6723c741a 100644 (file)
@@ -4956,8 +4956,8 @@ iris_destroy_state(struct iris_context *ice)
       const int i = u_bit_scan64(&bound_vbs);
       pipe_resource_reference(&genx->vertex_buffers[i].resource, NULL);
    }
+   free(ice->state.genx);
 
-   // XXX: unreference resources/surfaces.
    for (unsigned i = 0; i < ice->state.framebuffer.nr_cbufs; i++) {
       pipe_surface_reference(&ice->state.framebuffer.cbufs[i], NULL);
    }
@@ -4966,9 +4966,28 @@ iris_destroy_state(struct iris_context *ice)
    for (int stage = 0; stage < MESA_SHADER_STAGES; stage++) {
       struct iris_shader_state *shs = &ice->state.shaders[stage];
       pipe_resource_reference(&shs->sampler_table.res, NULL);
+      for (int i = 0; i < PIPE_MAX_CONSTANT_BUFFERS; i++) {
+         pipe_resource_reference(&shs->constbuf[i].data.res, NULL);
+         pipe_resource_reference(&shs->constbuf[i].surface_state.res, NULL);
+      }
+      for (int i = 0; i < PIPE_MAX_SHADER_IMAGES; i++) {
+         pipe_resource_reference(&shs->image[i].res, NULL);
+         pipe_resource_reference(&shs->image[i].surface_state.res, NULL);
+      }
+      for (int i = 0; i < PIPE_MAX_SHADER_BUFFERS; i++) {
+         pipe_resource_reference(&shs->ssbo[i], NULL);
+         pipe_resource_reference(&shs->ssbo_surface_state[i].res, NULL);
+      }
+      for (int i = 0; i < IRIS_MAX_TEXTURE_SAMPLERS; i++) {
+         pipe_sampler_view_reference((struct pipe_sampler_view **)
+                                     &shs->textures[i], NULL);
+      }
    }
-   free(ice->state.genx);
 
+   pipe_resource_reference(&ice->state.grid_size.res, NULL);
+   pipe_resource_reference(&ice->state.grid_surf_state.res, NULL);
+
+   pipe_resource_reference(&ice->state.null_fb.res, NULL);
    pipe_resource_reference(&ice->state.unbound_tex.res, NULL);
 
    pipe_resource_reference(&ice->state.last_res.cc_vp, NULL);