/* Creates shader: * (sy)(ss)end */ static struct fd3_shader_stateobj * create_solid_vp(struct pipe_context *pctx) { struct fd3_shader_stateobj *so; struct ir3_shader *ir = ir3_shader_create(); struct ir3_instruction *instr; /* (sy)(ss)end */ instr = ir3_instr_create(ir, 0, OPC_END); instr->flags = IR3_INSTR_SY | IR3_INSTR_SS; so = create_internal_shader(pctx, SHADER_VERTEX, ir); if (!so) return NULL; so->pos_regid = regid(0,0); so->psize_regid = regid(63,0); so->inputs_count = 1; so->inputs[0].regid = regid(0,0); so->inputs[0].compmask = 0xf; so->total_in = 4; so->outputs_count = 0; fixup_vp_regfootprint(so); return so; }
/* Creates shader: * (sy)(ss)(rpt3)mov.f16f16 hr0.x, (r)hc0.x * end */ static struct fd3_shader_stateobj * create_solid_fp(struct pipe_context *pctx) { struct fd3_shader_stateobj *so; struct ir3_shader *ir = ir3_shader_create(); struct ir3_instruction *instr; /* (sy)(ss)(rpt3)mov.f16f16 hr0.x, (r)hc0.x */ instr = ir3_instr_create(ir, 1, 0); /* mov/cov instructions have no opc */ instr->flags = IR3_INSTR_SY | IR3_INSTR_SS; instr->repeat = 3; instr->cat1.src_type = TYPE_F16; instr->cat1.dst_type = TYPE_F16; ir3_reg_create(instr, regid(0,0), IR3_REG_HALF); /* hr0.x */ ir3_reg_create(instr, regid(0,0), IR3_REG_HALF | /* (r)hc0.x */ IR3_REG_CONST | IR3_REG_R); /* end */ instr = ir3_instr_create(ir, 0, OPC_END); so = create_internal_shader(pctx, SHADER_FRAGMENT, ir); if (!so) return NULL; so->color_regid = regid(0,0); so->half_precision = true; so->inputs_count = 0; so->total_in = 0; return so; }
static struct fd4_shader_stateobj * create_shader_stateobj(struct pipe_context *pctx, const struct pipe_shader_state *cso, enum shader_t type) { struct fd4_shader_stateobj *so = CALLOC_STRUCT(fd4_shader_stateobj); so->shader = ir3_shader_create(pctx, cso, type); return so; }
static struct ir3_shader * create_shader_stateobj(struct pipe_context *pctx, const struct pipe_shader_state *cso, gl_shader_stage type) { struct fd_context *ctx = fd_context(pctx); struct ir3_compiler *compiler = ctx->screen->compiler; return ir3_shader_create(compiler, cso, type, &ctx->debug, pctx->screen); }
static struct fd5_shader_stateobj * create_shader_stateobj(struct pipe_context *pctx, const struct pipe_shader_state *cso, enum shader_t type) { struct fd_context *ctx = fd_context(pctx); struct ir3_compiler *compiler = ctx->screen->compiler; struct fd5_shader_stateobj *so = CALLOC_STRUCT(fd5_shader_stateobj); so->shader = ir3_shader_create(compiler, cso, type, &ctx->debug); return so; }
/* Creates shader: * (sy)(ss)(rpt1)bary.f (ei)r0.z, (r)0, r0.x * (rpt5)nop * sam (f32)(xyzw)r0.x, r0.z, s#0, t#0 * (sy)(rpt3)cov.f32f16 hr0.x, (r)r0.x * end */ static struct fd3_shader_stateobj * create_blit_fp(struct pipe_context *pctx) { struct fd3_shader_stateobj *so; struct ir3_shader *ir = ir3_shader_create(); struct ir3_instruction *instr; /* (sy)(ss)(rpt1)bary.f (ei)r0.z, (r)0, r0.x */ instr = ir3_instr_create(ir, 2, OPC_BARY_F); instr->flags = IR3_INSTR_SY | IR3_INSTR_SS; instr->repeat = 1; ir3_reg_create(instr, regid(0,2), IR3_REG_EI); /* (ei)r0.z */ ir3_reg_create(instr, 0, IR3_REG_R | /* (r)0 */ IR3_REG_IMMED)->iim_val = 0; ir3_reg_create(instr, regid(0,0), 0); /* r0.x */ /* (rpt5)nop */ instr = ir3_instr_create(ir, 0, OPC_NOP); instr->repeat = 5; /* sam (f32)(xyzw)r0.x, r0.z, s#0, t#0 */ instr = ir3_instr_create(ir, 5, OPC_SAM); instr->cat5.samp = 0; instr->cat5.tex = 0; instr->cat5.type = TYPE_F32; ir3_reg_create(instr, regid(0,0), /* (xyzw)r0.x */ 0)->wrmask = 0xf; ir3_reg_create(instr, regid(0,2), 0); /* r0.z */ /* (sy)(rpt3)cov.f32f16 hr0.x, (r)r0.x */ instr = ir3_instr_create(ir, 1, 0); /* mov/cov instructions have no opc */ instr->flags = IR3_INSTR_SY; instr->repeat = 3; instr->cat1.src_type = TYPE_F32; instr->cat1.dst_type = TYPE_F16; ir3_reg_create(instr, regid(0,0), IR3_REG_HALF); /* hr0.x */ ir3_reg_create(instr, regid(0,0), IR3_REG_R); /* (r)r0.x */ /* end */ instr = ir3_instr_create(ir, 0, OPC_END); so = create_internal_shader(pctx, SHADER_FRAGMENT, ir); if (!so) return NULL; so->color_regid = regid(0,0); so->half_precision = true; so->inputs_count = 1; so->inputs[0].inloc = 8; so->inputs[0].compmask = 0x3; so->total_in = 2; so->samplers_count = 1; so->vpsrepl[0] = 0x99999999; so->vpsrepl[1] = 0x99999999; so->vpsrepl[2] = 0x99999999; so->vpsrepl[3] = 0x99999999; return so; }