static void r300_texture_destroy(struct pipe_screen *screen, struct pipe_resource* texture) { struct r300_texture* tex = (struct r300_texture*)texture; struct r300_winsys_screen *rws = (struct r300_winsys_screen *)texture->screen->winsys; int i; rws->buffer_reference(rws, &tex->buffer, NULL); for (i = 0; i < R300_MAX_TEXTURE_LEVELS; i++) { if (tex->hiz_mem[i]) u_mmFreeMem(tex->hiz_mem[i]); if (tex->zmask_mem[i]) u_mmFreeMem(tex->zmask_mem[i]); } FREE(tex); }
static void mm_buffer_destroy(struct pb_buffer *buf) { struct mm_buffer *mm_buf = mm_buffer(buf); struct mm_pb_manager *mm = mm_buf->mgr; assert(!pipe_is_referenced(&mm_buf->base.reference)); mtx_lock(&mm->mutex); u_mmFreeMem(mm_buf->block); FREE(mm_buf); mtx_unlock(&mm->mutex); }
void rtasm_exec_free(void *addr) { pipe_mutex_lock(exec_mutex); if (exec_heap) { struct mem_block *block = u_mmFindBlock(exec_heap, (unsigned char *)addr - exec_mem); if (block) u_mmFreeMem(block); } pipe_mutex_unlock(exec_mutex); }