diff options
author | Eric Anholt <[email protected]> | 2014-02-14 16:06:31 -0800 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2014-02-20 10:15:13 -0800 |
commit | 9245206cbfaaa4e18c1f3715eebb5f281070d772 (patch) | |
tree | 49366a54f6ff941ade3afda52809b86be09a4ba5 | |
parent | 9e3cab8881626edd72d222f35c5d2a5fd9661bce (diff) |
i965/vs: Use samplers for UBOs in the VS like we do for non-UBO pulls.
Improves performance of a dolphin emulator trace I had laying around by
3.60131% +/- 0.995887% (n=128).
Reviewed-by: Kenneth Graunke <[email protected]>
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp index ba299be72de..601b364b295 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp +++ b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp @@ -1573,14 +1573,27 @@ vec4_visitor::visit(ir_expression *ir) emit(SHR(dst_reg(offset), op[1], src_reg(4))); } - vec4_instruction *pull = + if (brw->gen >= 7) { + dst_reg grf_offset = dst_reg(this, glsl_type::int_type); + grf_offset.type = offset.type; + + emit(MOV(grf_offset, offset)); + emit(new(mem_ctx) vec4_instruction(this, - VS_OPCODE_PULL_CONSTANT_LOAD, + VS_OPCODE_PULL_CONSTANT_LOAD_GEN7, dst_reg(packed_consts), surf_index, - offset)); - pull->base_mrf = 14; - pull->mlen = 1; + src_reg(grf_offset))); + } else { + vec4_instruction *pull = + emit(new(mem_ctx) vec4_instruction(this, + VS_OPCODE_PULL_CONSTANT_LOAD, + dst_reg(packed_consts), + surf_index, + offset)); + pull->base_mrf = 14; + pull->mlen = 1; + } packed_consts.swizzle = swizzle_for_size(ir->type->vector_elements); packed_consts.swizzle += BRW_SWIZZLE4(const_offset % 16 / 4, |