From 27e83b62bb52de7a681ed82679a707555023f43d Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Thu, 27 Aug 2015 23:55:28 -0700 Subject: [PATCH] i965: Store a key_tex pointer in vec4_visitor. I'm about to remove the base class for VS/GS/HS/DS program keys, at which point we won't be able to use key->tex anymore. Instead, we'll need to store a direct pointer (like we do in the FS backend). Signed-off-by: Kenneth Graunke Reviewed-by: Chris Forbes --- src/mesa/drivers/dri/i965/brw_vec4.h | 1 + src/mesa/drivers/dri/i965/brw_vec4_nir.cpp | 4 ++-- src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp | 13 +++++++------ 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_vec4.h b/src/mesa/drivers/dri/i965/brw_vec4.h index 7c319326f04..10439f21af5 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4.h +++ b/src/mesa/drivers/dri/i965/brw_vec4.h @@ -101,6 +101,7 @@ public: } const struct brw_vue_prog_key * const key; + const struct brw_sampler_prog_key_data * const key_tex; struct brw_vue_prog_data * const prog_data; unsigned int sanity_param_count; diff --git a/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp b/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp index 59e440a899d..f3dc1123942 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp +++ b/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp @@ -1409,7 +1409,7 @@ vec4_visitor::nir_emit_texture(nir_tex_instr *instr) * emitting anything other than setting up the constant result. */ if (instr->op == nir_texop_tg4) { - int swiz = GET_SWZ(key->tex.swizzles[sampler], instr->component); + int swiz = GET_SWZ(key_tex->swizzles[sampler], instr->component); if (swiz == SWIZZLE_ZERO || swiz == SWIZZLE_ONE) { emit(MOV(dest, src_reg(swiz == SWIZZLE_ONE ? 1.0f : 0.0f))); return; @@ -1471,7 +1471,7 @@ vec4_visitor::nir_emit_texture(nir_tex_instr *instr) sample_index = get_nir_src(instr->src[i].src, BRW_REGISTER_TYPE_D, 1); assert(coord_type != NULL); if (devinfo->gen >= 7 && - key->tex.compressed_multisample_layout_mask & (1<compressed_multisample_layout_mask & (1 << sampler)) { mcs = emit_mcs_fetch(coord_type, coordinate, sampler_reg); } else { mcs = src_reg(0u); diff --git a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp index 978d28c05ff..f85f2f95a02 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp +++ b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp @@ -2693,7 +2693,7 @@ vec4_visitor::emit_texture(ir_texture_opcode op, } if (devinfo->gen == 6 && op == ir_tg4) { - emit_gen6_gather_wa(key->tex.gen6_gather_wa[sampler], inst->dst); + emit_gen6_gather_wa(key_tex->gen6_gather_wa[sampler], inst->dst); } swizzle_result(op, dest, @@ -2745,7 +2745,7 @@ vec4_visitor::visit(ir_texture *ir) */ if (ir->op == ir_tg4) { ir_constant *chan = ir->lod_info.component->as_constant(); - int swiz = GET_SWZ(key->tex.swizzles[sampler], chan->value.i[0]); + int swiz = GET_SWZ(key_tex->swizzles[sampler], chan->value.i[0]); if (swiz == SWIZZLE_ZERO || swiz == SWIZZLE_ONE) { dst_reg result(this, ir->type); this->result = src_reg(result); @@ -2803,7 +2803,7 @@ vec4_visitor::visit(ir_texture *ir) ir->lod_info.sample_index->accept(this); sample_index = this->result; - if (devinfo->gen >= 7 && key->tex.compressed_multisample_layout_mask & (1<gen >= 7 && key_tex->compressed_multisample_layout_mask & (1 << sampler)) mcs = emit_mcs_fetch(ir->coordinate->type, coordinate, sampler_reg); else mcs = src_reg(0u); @@ -2881,14 +2881,14 @@ vec4_visitor::emit_gen6_gather_wa(uint8_t wa, dst_reg dst) uint32_t vec4_visitor::gather_channel(unsigned gather_component, uint32_t sampler) { - int swiz = GET_SWZ(key->tex.swizzles[sampler], gather_component); + int swiz = GET_SWZ(key_tex->swizzles[sampler], gather_component); switch (swiz) { case SWIZZLE_X: return 0; case SWIZZLE_Y: /* gather4 sampler is broken for green channel on RG32F -- * we must ask for blue instead. */ - if (key->tex.gather_channel_quirk_mask & (1<gather_channel_quirk_mask & (1 << sampler)) return 2; return 1; case SWIZZLE_Z: return 2; @@ -2903,7 +2903,7 @@ vec4_visitor::swizzle_result(ir_texture_opcode op, dst_reg dest, src_reg orig_val, uint32_t sampler, const glsl_type *dest_type) { - int s = key->tex.swizzles[sampler]; + int s = key_tex->swizzles[sampler]; dst_reg swizzled_result = dest; @@ -3717,6 +3717,7 @@ vec4_visitor::vec4_visitor(const struct brw_compiler *compiler, : backend_shader(compiler, log_data, mem_ctx, shader_prog, prog, &prog_data->base, stage), key(key), + key_tex(&key->tex), prog_data(prog_data), sanity_param_count(0), fail_msg(NULL), -- 2.30.2