static void gen7_upload_tes_push_constants(struct brw_context *brw) { struct brw_stage_state *stage_state = &brw->tes.base; /* BRW_NEW_TESS_PROGRAMS */ const struct brw_program *tep = brw_program_const(brw->tess_eval_program); if (tep) { /* BRW_NEW_TES_PROG_DATA */ const struct brw_stage_prog_data *prog_data = brw->tes.base.prog_data; _mesa_shader_write_subroutine_indices(&brw->ctx, MESA_SHADER_TESS_EVAL); gen6_upload_push_constants(brw, &tep->program, prog_data, stage_state, AUB_TRACE_VS_CONSTANTS); } gen7_upload_constant_state(brw, stage_state, tep, _3DSTATE_CONSTANT_DS); }
static void gen7_upload_tcs_push_constants(struct brw_context *brw) { struct brw_stage_state *stage_state = &brw->tcs.base; /* BRW_NEW_TESS_CTRL_PROGRAM */ const struct brw_tess_ctrl_program *tcp = (struct brw_tess_ctrl_program *) brw->tess_ctrl_program; if (tcp) { /* BRW_NEW_TCS_PROG_DATA */ const struct brw_stage_prog_data *prog_data = &brw->tcs.prog_data->base.base; gen6_upload_push_constants(brw, &tcp->program.Base, prog_data, stage_state, AUB_TRACE_VS_CONSTANTS); } gen7_upload_constant_state(brw, stage_state, tcp, _3DSTATE_CONSTANT_HS); }
static void gen6_upload_wm_push_constants(struct brw_context *brw) { struct brw_stage_state *stage_state = &brw->wm.base; /* BRW_NEW_FRAGMENT_PROGRAM */ const struct brw_fragment_program *fp = brw_fragment_program_const(brw->fragment_program); /* CACHE_NEW_WM_PROG */ const struct brw_wm_prog_data *prog_data = brw->wm.prog_data; gen6_upload_push_constants(brw, &fp->program.Base, &prog_data->base, stage_state, AUB_TRACE_WM_CONSTANTS); if (brw->gen >= 7) { gen7_upload_constant_state(brw, &brw->wm.base, true, _3DSTATE_CONSTANT_PS); } }
static void gen6_upload_gs_push_constants(struct brw_context *brw) { struct brw_stage_state *stage_state = &brw->gs.base; /* BRW_NEW_GEOMETRY_PROGRAM */ const struct brw_geometry_program *gp = (struct brw_geometry_program *) brw->geometry_program; if (gp) { /* BRW_NEW_GS_PROG_DATA */ struct brw_stage_prog_data *prog_data = &brw->gs.prog_data->base.base; gen6_upload_push_constants(brw, &gp->program.Base, prog_data, stage_state, AUB_TRACE_VS_CONSTANTS); } if (brw->gen >= 7) gen7_upload_constant_state(brw, stage_state, gp, _3DSTATE_CONSTANT_GS); }
static void gen6_upload_vs_push_constants(struct brw_context *brw) { struct brw_stage_state *stage_state = &brw->vs.base; /* _BRW_NEW_VERTEX_PROGRAM */ const struct brw_vertex_program *vp = brw_vertex_program_const(brw->vertex_program); /* BRW_NEW_VS_PROG_DATA */ const struct brw_stage_prog_data *prog_data = &brw->vs.prog_data->base.base; gen6_upload_push_constants(brw, &vp->program.Base, prog_data, stage_state, AUB_TRACE_VS_CONSTANTS); if (brw->gen >= 7) { if (brw->gen == 7 && !brw->is_haswell && !brw->is_baytrail) gen7_emit_vs_workaround_flush(brw); gen7_upload_constant_state(brw, stage_state, true /* active */, _3DSTATE_CONSTANT_VS); } }