diff options
author | Chris Forbes <[email protected]> | 2014-08-03 22:01:11 +1200 |
---|---|---|
committer | Chris Forbes <[email protected]> | 2014-08-09 13:12:27 +1200 |
commit | 2f4e12a83503f541dd63ac5e17b8044d3ae0f6c8 (patch) | |
tree | dbd5c5eb219b8cc6983d4732a47da5e886adf661 | |
parent | db09fd595743443974ccc14fbdb1c4e3733ab525 (diff) |
i965/vec4: Collect all emits of texture ops into one place
Signed-off-by: Chris Forbes <[email protected]>
Reviewed-by: Matt Turner <[email protected]>
Reviewed-by: Ian Romanick <[email protected]>
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp | 38 |
1 files changed, 12 insertions, 26 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp index c46325aa6f7..822eb6c630f 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp +++ b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp @@ -2393,33 +2393,17 @@ vec4_visitor::visit(ir_texture *ir) break; } - vec4_instruction *inst = NULL; + enum opcode opcode; switch (ir->op) { - case ir_tex: - case ir_txl: - inst = new(mem_ctx) vec4_instruction(this, SHADER_OPCODE_TXL); - break; - case ir_txd: - inst = new(mem_ctx) vec4_instruction(this, SHADER_OPCODE_TXD); - break; - case ir_txf: - inst = new(mem_ctx) vec4_instruction(this, SHADER_OPCODE_TXF); - break; - case ir_txf_ms: - inst = new(mem_ctx) vec4_instruction(this, SHADER_OPCODE_TXF_CMS); - break; - case ir_txs: - inst = new(mem_ctx) vec4_instruction(this, SHADER_OPCODE_TXS); - break; - case ir_tg4: - if (has_nonconstant_offset) - inst = new(mem_ctx) vec4_instruction(this, SHADER_OPCODE_TG4_OFFSET); - else - inst = new(mem_ctx) vec4_instruction(this, SHADER_OPCODE_TG4); - break; - case ir_query_levels: - inst = new(mem_ctx) vec4_instruction(this, SHADER_OPCODE_TXS); - break; + case ir_tex: opcode = SHADER_OPCODE_TXL; break; + case ir_txl: opcode = SHADER_OPCODE_TXL; break; + case ir_txd: opcode = SHADER_OPCODE_TXD; break; + case ir_txf: opcode = SHADER_OPCODE_TXF; break; + case ir_txf_ms: opcode = SHADER_OPCODE_TXF_CMS; break; + case ir_txs: opcode = SHADER_OPCODE_TXS; break; + case ir_tg4: opcode = has_nonconstant_offset + ? SHADER_OPCODE_TG4_OFFSET : SHADER_OPCODE_TG4; break; + case ir_query_levels: opcode = SHADER_OPCODE_TXS; break; case ir_txb: unreachable("TXB is not valid for vertex shaders."); case ir_lod: @@ -2428,6 +2412,8 @@ vec4_visitor::visit(ir_texture *ir) unreachable("Unrecognized tex op"); } + vec4_instruction *inst = new(mem_ctx) vec4_instruction(this, opcode); + if (ir->offset != NULL && ir->op != ir_txf) inst->texture_offset = brw_texture_offset(ctx, ir->offset->as_constant()); |