static void si_destroy_screen(struct pipe_screen* pscreen) { struct si_screen *sscreen = (struct si_screen *)pscreen; if (sscreen == NULL) return; if (!radeon_winsys_unref(sscreen->b.ws)) return; r600_destroy_common_screen(&sscreen->b); }
static void r300_destroy_screen(struct pipe_screen* pscreen) { struct r300_screen* r300screen = r300_screen(pscreen); struct radeon_winsys *rws = radeon_winsys(pscreen); if (rws && !radeon_winsys_unref(rws)) return; pipe_mutex_destroy(r300screen->cmask_mutex); if (rws) rws->destroy(rws); FREE(r300screen); }
static void r600_destroy_screen(struct pipe_screen* pscreen) { struct r600_screen *rscreen = (struct r600_screen *)pscreen; if (rscreen == NULL) return; if (!radeon_winsys_unref(rscreen->b.ws)) return; r600_common_screen_cleanup(&rscreen->b); #if R600_TRACE_CS if (rscreen->trace_bo) { rscreen->ws->buffer_unmap(rscreen->trace_bo->cs_buf); pipe_resource_reference((struct pipe_resource**)&rscreen->trace_bo, NULL); } #endif rscreen->b.ws->destroy(rscreen->b.ws); FREE(rscreen); }