diff options
author | Kenneth Graunke <[email protected]> | 2015-11-11 23:15:23 -0800 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2015-12-11 13:11:15 -0800 |
commit | b3c32f5f34ba353f223d501cdd3cd150736d24af (patch) | |
tree | 160a9611d850bdbcb3152e255f56809565202e80 /src/mesa | |
parent | 37b0b11cefff018f4c5876034e26496328d02da6 (diff) |
i965: Add Gen7+ tessellation engine state (3DSTATE_TE).
Signed-off-by: Kenneth Graunke <[email protected]>
Reviewed-by: Jordan Justen <[email protected]>
Diffstat (limited to 'src/mesa')
-rw-r--r-- | src/mesa/drivers/dri/i965/gen7_te_state.c | 36 |
1 files changed, 28 insertions, 8 deletions
diff --git a/src/mesa/drivers/dri/i965/gen7_te_state.c b/src/mesa/drivers/dri/i965/gen7_te_state.c index 95a5e98133b..2650fa562ec 100644 --- a/src/mesa/drivers/dri/i965/gen7_te_state.c +++ b/src/mesa/drivers/dri/i965/gen7_te_state.c @@ -29,19 +29,39 @@ static void upload_te_state(struct brw_context *brw) { - /* Disable the TE */ - BEGIN_BATCH(4); - OUT_BATCH(_3DSTATE_TE << 16 | (4 - 2)); - OUT_BATCH(0); - OUT_BATCH(0); - OUT_BATCH(0); - ADVANCE_BATCH(); + /* BRW_NEW_TESS_EVAL_PROGRAM */ + bool active = brw->tess_eval_program; + if (active) + assert(brw->tess_ctrl_program); + + const struct brw_tes_prog_data *tes_prog_data = brw->tes.prog_data; + + if (active) { + BEGIN_BATCH(4); + OUT_BATCH(_3DSTATE_TE << 16 | (4 - 2)); + OUT_BATCH((tes_prog_data->partitioning << GEN7_TE_PARTITIONING_SHIFT) | + (tes_prog_data->output_topology << GEN7_TE_OUTPUT_TOPOLOGY_SHIFT) | + (tes_prog_data->domain << GEN7_TE_DOMAIN_SHIFT) | + GEN7_TE_ENABLE); + OUT_BATCH_F(63.0); + OUT_BATCH_F(64.0); + ADVANCE_BATCH(); + } else { + BEGIN_BATCH(4); + OUT_BATCH(_3DSTATE_TE << 16 | (4 - 2)); + OUT_BATCH(0); + OUT_BATCH_F(0); + OUT_BATCH_F(0); + ADVANCE_BATCH(); + } } const struct brw_tracked_state gen7_te_state = { .dirty = { .mesa = 0, - .brw = BRW_NEW_CONTEXT, + .brw = BRW_NEW_CONTEXT | + BRW_NEW_TES_PROG_DATA | + BRW_NEW_TESS_EVAL_PROGRAM, }, .emit = upload_te_state, }; |