diff options
author | Matt Turner <[email protected]> | 2014-10-23 23:22:09 -0700 |
---|---|---|
committer | Matt Turner <[email protected]> | 2014-12-05 09:49:42 -0800 |
commit | 0d3cc01b0b092271938ce2cf2b77d27dc385e4d8 (patch) | |
tree | 14ce75ee62e6ee61354e164d1e506b18d4b03569 /src/mesa/drivers/dri/i965/brw_vec4_cse.cpp | |
parent | be80f69ecdb5544509d762ce5c832c4ad3abbe9b (diff) |
i965/vec4: Allow CSE on uniform-vec4 expansion MOVs.
Three source instructions cannot directly source a packed vec4 (<0,4,1>
regioning) like vec4 uniforms, so we emit a MOV that expands the vec4 to
both halves of a register.
If these uniform values are used by multiple three-source instructions,
we'll emit multiple expansion moves, which we cannot combine in CSE
(because CSE emits moves itself).
So emit a virtual instruction that we can CSE.
Sometimes we demote a uniform to to a pull constant after emitting an
expansion move for it. In that case, recognize in opt_algebraic that if
the .file of the new instruction is GRF then it's just a real move that
we can copy propagate and such.
total instructions in shared programs: 5822418 -> 5812335 (-0.17%)
instructions in affected programs: 351841 -> 341758 (-2.87%)
Reviewed-by: Kenneth Graunke <[email protected]>
Diffstat (limited to 'src/mesa/drivers/dri/i965/brw_vec4_cse.cpp')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_vec4_cse.cpp | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_cse.cpp b/src/mesa/drivers/dri/i965/brw_vec4_cse.cpp index 630d3357a3f..7071213ee38 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4_cse.cpp +++ b/src/mesa/drivers/dri/i965/brw_vec4_cse.cpp @@ -69,6 +69,7 @@ is_expression(const vec4_instruction *const inst) case BRW_OPCODE_PLN: case BRW_OPCODE_MAD: case BRW_OPCODE_LRP: + case VEC4_OPCODE_UNPACK_UNIFORM: return true; case SHADER_OPCODE_RCP: case SHADER_OPCODE_RSQ: |