static void svga_destroy( struct pipe_context *pipe ) { struct svga_context *svga = svga_context( pipe ); unsigned shader; svga_cleanup_framebuffer( svga ); svga_cleanup_tss_binding( svga ); svga_hwtnl_destroy( svga->hwtnl ); svga_cleanup_vertex_state(svga); svga->swc->destroy(svga->swc); svga_destroy_swtnl( svga ); u_upload_destroy( svga->upload_vb ); u_upload_destroy( svga->upload_ib ); util_bitmask_destroy( svga->vs_bm ); util_bitmask_destroy( svga->fs_bm ); for(shader = 0; shader < PIPE_SHADER_TYPES; ++shader) pipe_resource_reference( &svga->curr.cb[shader], NULL ); FREE( svga ); }
static void svga_destroy( struct pipe_context *pipe ) { struct svga_context *svga = svga_context( pipe ); unsigned shader, i; /* free any alternate rasterizer states used for point sprite */ for (i = 0; i < Elements(svga->rasterizer_no_cull); i++) { if (svga->rasterizer_no_cull[i]) { pipe->delete_rasterizer_state(pipe, svga->rasterizer_no_cull[i]); } } /* free polygon stipple state */ if (svga->polygon_stipple.sampler) { pipe->delete_sampler_state(pipe, svga->polygon_stipple.sampler); } if (svga->polygon_stipple.sampler_view) { pipe->sampler_view_destroy(pipe, &svga->polygon_stipple.sampler_view->base); } pipe_resource_reference(&svga->polygon_stipple.texture, NULL); /* free HW constant buffers */ for (shader = 0; shader < Elements(svga->state.hw_draw.constbuf); shader++) { pipe_resource_reference(&svga->state.hw_draw.constbuf[shader], NULL); } pipe->delete_blend_state(pipe, svga->noop_blend); /* free query gb object */ if (svga->gb_query) { pipe->destroy_query(pipe, NULL); svga->gb_query = NULL; } util_blitter_destroy(svga->blitter); svga_cleanup_framebuffer( svga ); svga_cleanup_tss_binding( svga ); svga_cleanup_vertex_state(svga); svga_destroy_swtnl( svga ); svga_hwtnl_destroy( svga->hwtnl ); svga->swc->destroy(svga->swc); util_bitmask_destroy(svga->blend_object_id_bm); util_bitmask_destroy(svga->ds_object_id_bm); util_bitmask_destroy(svga->input_element_object_id_bm); util_bitmask_destroy(svga->rast_object_id_bm); util_bitmask_destroy(svga->sampler_object_id_bm); util_bitmask_destroy(svga->sampler_view_id_bm); util_bitmask_destroy(svga->shader_id_bm); util_bitmask_destroy(svga->surface_view_id_bm); util_bitmask_destroy(svga->stream_output_id_bm); util_bitmask_destroy(svga->query_id_bm); u_upload_destroy(svga->const0_upload); /* free user's constant buffers */ for (shader = 0; shader < PIPE_SHADER_TYPES; ++shader) { for (i = 0; i < Elements(svga->curr.constbufs[shader]); ++i) { pipe_resource_reference(&svga->curr.constbufs[shader][i].buffer, NULL); } } FREE( svga ); }