static void delete_variant(struct ir3_shader_variant *v) { ir3_destroy(v->ir); fd_bo_del(v->bo); free(v); }
static void assemble_variant(struct ir3_shader_variant *v) { struct fd_context *ctx = fd_context(v->shader->pctx); uint32_t sz, *bin; bin = ir3_assemble(v->ir, &v->info, ctx->screen->gpu_id); sz = v->info.sizedwords * 4; v->bo = fd_bo_new(ctx->dev, sz, DRM_FREEDRENO_GEM_CACHE_WCOMBINE | DRM_FREEDRENO_GEM_TYPE_KMEM); memcpy(fd_bo_map(v->bo), bin, sz); free(bin); if (ctx->screen->gpu_id >= 400) { v->instrlen = v->info.sizedwords / (2 * 16); } else { v->instrlen = v->info.sizedwords / (2 * 4); } /* NOTE: if relative addressing is used, we set constlen in * the compiler (to worst-case value) since we don't know in * the assembler what the max addr reg value can be: */ v->constlen = MAX2(v->constlen, v->info.max_const + 1); /* no need to keep the ir around beyond this point: */ ir3_destroy(v->ir); v->ir = NULL; }
static void delete_variant(struct ir3_shader_variant *v) { if (v->ir) ir3_destroy(v->ir); if (v->bo) fd_bo_del(v->bo); if (v->immediates) free(v->immediates); free(v); }