summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Turner <[email protected]>2014-06-28 23:31:04 -0700
committerMatt Turner <[email protected]>2014-06-30 22:31:05 -0700
commit6d2536395d45e0c8c21186811b1a63da4cb12198 (patch)
treef8c48928a4a5d8c2b4629dee4a87e722734c3452
parentbcbb7c41b75aa780f93f32937697c2999ff2eb36 (diff)
i965/fs: Add no_dd_{clear,check} fields to fs_inst.
And plumb them through. Also make the assert in the generator look like the vec4 one. Reviewed-by: Kristian Høgsberg <[email protected]>
-rw-r--r--src/mesa/drivers/dri/i965/brw_fs.h2
-rw-r--r--src/mesa/drivers/dri/i965/brw_fs_generator.cpp14
2 files changed, 10 insertions, 6 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_fs.h b/src/mesa/drivers/dri/i965/brw_fs.h
index 3d0da23acf1..58e71756b16 100644
--- a/src/mesa/drivers/dri/i965/brw_fs.h
+++ b/src/mesa/drivers/dri/i965/brw_fs.h
@@ -239,6 +239,8 @@ public:
bool force_uncompressed:1;
bool force_sechalf:1;
bool force_writemask_all:1;
+ bool no_dd_clear:1;
+ bool no_dd_check:1;
};
/**
diff --git a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
index 0f41781183d..3dab2dae0e4 100644
--- a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
@@ -1755,14 +1755,16 @@ fs_generator::generate_code(exec_list *instructions)
break;
}
- if (inst->conditional_mod) {
- /* Set the conditional modifier on the last instruction we generated.
- * Also, make sure we only emitted one instruction - anything else
- * doesn't make sense.
- */
- assert(p->next_insn_offset == last_insn_offset + 16);
+ if (inst->no_dd_clear || inst->no_dd_check || inst->conditional_mod) {
+ assert(p->next_insn_offset == last_insn_offset + 16 ||
+ !"conditional_mod, no_dd_check, or no_dd_clear set for IR "
+ "emitting more than 1 instruction");
+
brw_inst *last = &p->store[last_insn_offset / 16];
+
brw_inst_set_cond_modifier(brw, last, inst->conditional_mod);
+ brw_inst_set_no_dd_clear(brw, last, inst->no_dd_clear);
+ brw_inst_set_no_dd_check(brw, last, inst->no_dd_check);
}
}