From b62e36d18fac4a9c9977ddfa4bc2c2dbbcdad1b4 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Thu, 1 Oct 2015 16:38:59 -0700 Subject: [PATCH] i965/fs: Move sampler unit lookup into rescale_texcoord The texunit variable we create and assign in nir_emit_texture gets passed through two more layers of function calls before it gets to its sole use in rescale_texcoord. The best part is that we already pass the sampler into rescale_texcoord so we can just look it up there. Reviewed-by: Kenneth Graunke --- src/mesa/drivers/dri/i965/brw_fs.h | 5 ++--- src/mesa/drivers/dri/i965/brw_fs_nir.cpp | 8 +------- src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 14 ++++++++++---- 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_fs.h b/src/mesa/drivers/dri/i965/brw_fs.h index b932ed28682..213b2e0de7c 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.h +++ b/src/mesa/drivers/dri/i965/brw_fs.h @@ -205,7 +205,7 @@ public: void emit_interpolation_setup_gen6(); void compute_sample_position(fs_reg dst, fs_reg int_sample_pos); fs_reg rescale_texcoord(fs_reg coordinate, int coord_components, - bool is_rect, uint32_t sampler, int texunit); + bool is_rect, uint32_t sampler); void emit_texture(ir_texture_opcode op, const glsl_type *dest_type, fs_reg coordinate, int components, @@ -218,8 +218,7 @@ public: bool is_cube_array, bool is_rect, uint32_t sampler, - fs_reg sampler_reg, - int texunit); + fs_reg sampler_reg); fs_reg emit_mcs_fetch(const fs_reg &coordinate, unsigned components, const fs_reg &sampler); void emit_gen6_gather_wa(uint8_t wa, fs_reg dst); diff --git a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp index 379379187db..42bf050822b 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp @@ -1917,12 +1917,6 @@ fs_visitor::nir_emit_texture(const fs_builder &bld, nir_tex_instr *instr) unsigned sampler = instr->sampler_index; fs_reg sampler_reg(sampler); - /* FINISHME: We're failing to recompile our programs when the sampler is - * updated. This only matters for the texture rectangle scale parameters - * (pre-gen6, or gen6+ with GL_CLAMP). - */ - int texunit = prog->SamplerUnits[sampler]; - int gather_component = instr->component; bool is_rect = instr->sampler_dim == GLSL_SAMPLER_DIM_RECT; @@ -2063,7 +2057,7 @@ fs_visitor::nir_emit_texture(const fs_builder &bld, nir_tex_instr *instr) emit_texture(op, dest_type, coordinate, instr->coord_components, shadow_comparitor, lod, lod2, lod_components, sample_index, tex_offset, mcs, gather_component, - is_cube_array, is_rect, sampler, sampler_reg, texunit); + is_cube_array, is_rect, sampler, sampler_reg); fs_reg dest = get_nir_dest(instr->dest); dest.type = this->result.type; diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp index 47d7ae4f57c..c319bf746de 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp @@ -79,7 +79,7 @@ fs_visitor::emit_vs_system_value(int location) fs_reg fs_visitor::rescale_texcoord(fs_reg coordinate, int coord_components, - bool is_rect, uint32_t sampler, int texunit) + bool is_rect, uint32_t sampler) { bool needs_gl_clamp = true; fs_reg scale_x, scale_y; @@ -93,10 +93,16 @@ fs_visitor::rescale_texcoord(fs_reg coordinate, int coord_components, (devinfo->gen >= 6 && (key_tex->gl_clamp_mask[0] & (1 << sampler) || key_tex->gl_clamp_mask[1] & (1 << sampler))))) { struct gl_program_parameter_list *params = prog->Parameters; + + + /* FINISHME: We're failing to recompile our programs when the sampler is + * updated. This only matters for the texture rectangle scale + * parameters (pre-gen6, or gen6+ with GL_CLAMP). + */ int tokens[STATE_LENGTH] = { STATE_INTERNAL, STATE_TEXRECT_SCALE, - texunit, + prog->SamplerUnits[sampler], 0, 0 }; @@ -221,7 +227,7 @@ fs_visitor::emit_texture(ir_texture_opcode op, bool is_cube_array, bool is_rect, uint32_t sampler, - fs_reg sampler_reg, int texunit) + fs_reg sampler_reg) { fs_inst *inst = NULL; @@ -256,7 +262,7 @@ fs_visitor::emit_texture(ir_texture_opcode op, * samplers. This should only be a problem with GL_CLAMP on Gen7. */ coordinate = rescale_texcoord(coordinate, coord_components, is_rect, - sampler, texunit); + sampler); } /* Writemasking doesn't eliminate channels on SIMD8 texture -- 2.30.2