summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/mesa/drivers/dri/i965/gen7_te_state.c36
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,
};