summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Turner <[email protected]>2014-04-11 12:26:25 -0700
committerMatt Turner <[email protected]>2014-06-17 09:40:31 -0700
commit35bc02dee8402bf9090b3e21efe2832828919b4f (patch)
tree860c718cb1a2b23cddd130bd0e5c5515f0bc3ce7
parent18372a710028fcbe1ff74f2f727e986c223957ba (diff)
i965/fs: Perform CSE on texture operations.
Helps Unigine Tropics and some (old) gstreamer shaders in shader-db. instructions in affected programs: 792 -> 744 (-6.06%) Reviewed-by: Kenneth Graunke <[email protected]>
-rw-r--r--src/mesa/drivers/dri/i965/brw_fs_cse.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_fs_cse.cpp b/src/mesa/drivers/dri/i965/brw_fs_cse.cpp
index a319307a4c3..7828c27e806 100644
--- a/src/mesa/drivers/dri/i965/brw_fs_cse.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs_cse.cpp
@@ -103,7 +103,7 @@ is_expression(const fs_inst *const inst)
case SHADER_OPCODE_LOAD_PAYLOAD:
return !is_copy_payload(inst);
default:
- return false;
+ return inst->is_tex();
}
}
@@ -153,6 +153,15 @@ instructions_match(fs_inst *a, fs_inst *b)
a->conditional_mod == b->conditional_mod &&
a->dst.type == b->dst.type &&
a->sources == b->sources &&
+ (a->is_tex() ? (a->texture_offset == b->texture_offset &&
+ a->mlen == b->mlen &&
+ a->regs_written == b->regs_written &&
+ a->base_mrf == b->base_mrf &&
+ a->sampler == b->sampler &&
+ a->eot == b->eot &&
+ a->header_present == b->header_present &&
+ a->shadow_compare == b->shadow_compare)
+ : true) &&
operands_match(a, b);
}