[Mesa-dev] [PATCH 1/2] i965: Extract depctrl hazards
Ben Widawsky
benjamin.widawsky at intel.com
Fri Nov 21 10:50:30 PST 2014
Move this to a separate function so that we can begin to add other little
caveats without making too big a mess.
NOTE: There is some desire to improve this function eventually, but we need to
fix a bug first.
Signed-off-by: Ben Widawsky <ben at bwidawsk.net>
---
src/mesa/drivers/dri/i965/brw_vec4.cpp | 42 ++++++++++++++++------------------
1 file changed, 20 insertions(+), 22 deletions(-)
diff --git a/src/mesa/drivers/dri/i965/brw_vec4.cpp b/src/mesa/drivers/dri/i965/brw_vec4.cpp
index df589b8..0c2bbe9 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4.cpp
@@ -840,6 +840,25 @@ vec4_visitor::move_push_constants_to_pull_constants()
pack_uniform_registers();
}
+/* Conditions for which we want to avoid setting the dependency control bits */
+static bool
+is_dep_ctrl_safe(vec4_instruction *inst)
+{
+ /*
+ * In the presence of send messages, totally interrupt dependency
+ * control. They're long enough that the chance of dependency
+ * control around them just doesn't matter.
+ *
+ * It looks like setting dependency control on a predicated
+ * instruction hangs the GPU.
+ * NB: I can find no evidence of this in modern specs.
+ *
+ * Dependency control does not work well over math instructions.
+ * NB: I can find no evidence of this in modern specs.
+ */
+ return !(inst->mlen || inst->predicate || inst->is_math());
+}
+
/**
* Sets the dependency control fields on instructions after register
* allocation and before the generator is run.
@@ -885,28 +904,7 @@ vec4_visitor::opt_set_dependency_control()
assert(inst->src[i].file != MRF);
}
- /* In the presence of send messages, totally interrupt dependency
- * control. They're long enough that the chance of dependency
- * control around them just doesn't matter.
- */
- if (inst->mlen) {
- memset(last_grf_write, 0, sizeof(last_grf_write));
- memset(last_mrf_write, 0, sizeof(last_mrf_write));
- continue;
- }
-
- /* It looks like setting dependency control on a predicated
- * instruction hangs the GPU.
- */
- if (inst->predicate) {
- memset(last_grf_write, 0, sizeof(last_grf_write));
- memset(last_mrf_write, 0, sizeof(last_mrf_write));
- continue;
- }
-
- /* Dependency control does not work well over math instructions.
- */
- if (inst->is_math()) {
+ if (!is_dep_ctrl_safe(inst)) {
memset(last_grf_write, 0, sizeof(last_grf_write));
memset(last_mrf_write, 0, sizeof(last_mrf_write));
continue;
--
2.1.3
More information about the mesa-dev
mailing list