Scheduling barriers are implemented by placing a dependence on every node before and after the barrier. This is unnecessary as we can limit the number of nodes we place dependencies on to those between us and the next barrier in each direction.
Runtime of dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.23 is reduced from ~25 minutes to a little more than three. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=94681 --- Would people rather I make is_scheduling_barrier() a virtual member of backend_instruction and move the implementations into vec4_instruction and fs_inst? src/mesa/drivers/dri/i965/brw_schedule_instructions.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/mesa/drivers/dri/i965/brw_schedule_instructions.cpp b/src/mesa/drivers/dri/i965/brw_schedule_instructions.cpp index 8afdc25..2e53f9d 100644 --- a/src/mesa/drivers/dri/i965/brw_schedule_instructions.cpp +++ b/src/mesa/drivers/dri/i965/brw_schedule_instructions.cpp @@ -86,6 +86,8 @@ public: * its children, or just the issue_time if it's a leaf node. */ int delay; + + bool is_barrier; }; void @@ -772,6 +774,7 @@ schedule_node::schedule_node(backend_instruction *inst, this->unblocked_time = 0; this->cand_generation = 0; this->delay = 0; + this->is_barrier = false; /* We can't measure Gen6 timings directly but expect them to be much * closer to Gen7 than Gen4. @@ -872,9 +875,13 @@ instruction_scheduler::add_barrier_deps(schedule_node *n) schedule_node *prev = (schedule_node *)n->prev; schedule_node *next = (schedule_node *)n->next; + n->is_barrier = true; + if (prev) { while (!prev->is_head_sentinel()) { add_dep(prev, n, 0); + if (prev->is_barrier) + break; prev = (schedule_node *)prev->prev; } } @@ -882,6 +889,8 @@ instruction_scheduler::add_barrier_deps(schedule_node *n) if (next) { while (!next->is_tail_sentinel()) { add_dep(n, next, 0); + if (next->is_barrier) + break; next = (schedule_node *)next->next; } } -- 2.7.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev