From: Eric Anholt Date: Wed, 23 Mar 2011 21:00:01 +0000 (-0700) Subject: i965/fs: Disable some optimization passes under 16-wide for now. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=af20328271425c217630b5114ee172bd8387a91a;p=mesa.git i965/fs: Disable some optimization passes under 16-wide for now. These are fixable for 16, but that can wait until after it's basically working. Reviewed-by: Kenneth Graunke --- diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index 19dbf418df9..17f4435a1ac 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -2910,6 +2910,10 @@ fs_visitor::propagate_constants() { bool progress = false; + /* Need to update the MRF tracking for compressed instructions. */ + if (c->dispatch_width == 16) + return false; + calculate_live_intervals(); foreach_iter(exec_list_iterator, iter, this->instructions) { @@ -3171,6 +3175,10 @@ fs_visitor::compute_to_mrf() bool progress = false; int next_ip = 0; + /* Need to update the MRF tracking for compressed instructions. */ + if (c->dispatch_width == 16) + return false; + calculate_live_intervals(); foreach_iter(exec_list_iterator, iter, this->instructions) { @@ -3302,6 +3310,10 @@ fs_visitor::remove_duplicate_mrf_writes() fs_inst *last_mrf_move[16]; bool progress = false; + /* Need to update the MRF tracking for compressed instructions. */ + if (c->dispatch_width == 16) + return false; + memset(last_mrf_move, 0, sizeof(last_mrf_move)); foreach_iter(exec_list_iterator, iter, this->instructions) { diff --git a/src/mesa/drivers/dri/i965/brw_fs_schedule_instructions.cpp b/src/mesa/drivers/dri/i965/brw_fs_schedule_instructions.cpp index bff8f82f3f7..400452d71f8 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_schedule_instructions.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_schedule_instructions.cpp @@ -463,6 +463,9 @@ fs_visitor::schedule_instructions() fs_inst *next_block_header = (fs_inst *)instructions.head; instruction_scheduler sched(this, mem_ctx, this->virtual_grf_next); + if (c->dispatch_width == 16) + return; + while (!next_block_header->is_tail_sentinel()) { /* Add things to be scheduled until we get to a new BB. */ while (!next_block_header->is_tail_sentinel()) {