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 <kenneth@whitecape.org>
This commit is contained in:
parent
7b974c5f90
commit
b62e36d18f
|
@ -205,7 +205,7 @@ public:
|
||||||
void emit_interpolation_setup_gen6();
|
void emit_interpolation_setup_gen6();
|
||||||
void compute_sample_position(fs_reg dst, fs_reg int_sample_pos);
|
void compute_sample_position(fs_reg dst, fs_reg int_sample_pos);
|
||||||
fs_reg rescale_texcoord(fs_reg coordinate, int coord_components,
|
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,
|
void emit_texture(ir_texture_opcode op,
|
||||||
const glsl_type *dest_type,
|
const glsl_type *dest_type,
|
||||||
fs_reg coordinate, int components,
|
fs_reg coordinate, int components,
|
||||||
|
@ -218,8 +218,7 @@ public:
|
||||||
bool is_cube_array,
|
bool is_cube_array,
|
||||||
bool is_rect,
|
bool is_rect,
|
||||||
uint32_t sampler,
|
uint32_t sampler,
|
||||||
fs_reg sampler_reg,
|
fs_reg sampler_reg);
|
||||||
int texunit);
|
|
||||||
fs_reg emit_mcs_fetch(const fs_reg &coordinate, unsigned components,
|
fs_reg emit_mcs_fetch(const fs_reg &coordinate, unsigned components,
|
||||||
const fs_reg &sampler);
|
const fs_reg &sampler);
|
||||||
void emit_gen6_gather_wa(uint8_t wa, fs_reg dst);
|
void emit_gen6_gather_wa(uint8_t wa, fs_reg dst);
|
||||||
|
|
|
@ -1917,12 +1917,6 @@ fs_visitor::nir_emit_texture(const fs_builder &bld, nir_tex_instr *instr)
|
||||||
unsigned sampler = instr->sampler_index;
|
unsigned sampler = instr->sampler_index;
|
||||||
fs_reg sampler_reg(sampler);
|
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;
|
int gather_component = instr->component;
|
||||||
|
|
||||||
bool is_rect = instr->sampler_dim == GLSL_SAMPLER_DIM_RECT;
|
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,
|
emit_texture(op, dest_type, coordinate, instr->coord_components,
|
||||||
shadow_comparitor, lod, lod2, lod_components, sample_index,
|
shadow_comparitor, lod, lod2, lod_components, sample_index,
|
||||||
tex_offset, mcs, gather_component,
|
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);
|
fs_reg dest = get_nir_dest(instr->dest);
|
||||||
dest.type = this->result.type;
|
dest.type = this->result.type;
|
||||||
|
|
|
@ -79,7 +79,7 @@ fs_visitor::emit_vs_system_value(int location)
|
||||||
|
|
||||||
fs_reg
|
fs_reg
|
||||||
fs_visitor::rescale_texcoord(fs_reg coordinate, int coord_components,
|
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;
|
bool needs_gl_clamp = true;
|
||||||
fs_reg scale_x, scale_y;
|
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) ||
|
(devinfo->gen >= 6 && (key_tex->gl_clamp_mask[0] & (1 << sampler) ||
|
||||||
key_tex->gl_clamp_mask[1] & (1 << sampler))))) {
|
key_tex->gl_clamp_mask[1] & (1 << sampler))))) {
|
||||||
struct gl_program_parameter_list *params = prog->Parameters;
|
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] = {
|
int tokens[STATE_LENGTH] = {
|
||||||
STATE_INTERNAL,
|
STATE_INTERNAL,
|
||||||
STATE_TEXRECT_SCALE,
|
STATE_TEXRECT_SCALE,
|
||||||
texunit,
|
prog->SamplerUnits[sampler],
|
||||||
0,
|
0,
|
||||||
0
|
0
|
||||||
};
|
};
|
||||||
|
@ -221,7 +227,7 @@ fs_visitor::emit_texture(ir_texture_opcode op,
|
||||||
bool is_cube_array,
|
bool is_cube_array,
|
||||||
bool is_rect,
|
bool is_rect,
|
||||||
uint32_t sampler,
|
uint32_t sampler,
|
||||||
fs_reg sampler_reg, int texunit)
|
fs_reg sampler_reg)
|
||||||
{
|
{
|
||||||
fs_inst *inst = NULL;
|
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.
|
* samplers. This should only be a problem with GL_CLAMP on Gen7.
|
||||||
*/
|
*/
|
||||||
coordinate = rescale_texcoord(coordinate, coord_components, is_rect,
|
coordinate = rescale_texcoord(coordinate, coord_components, is_rect,
|
||||||
sampler, texunit);
|
sampler);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Writemasking doesn't eliminate channels on SIMD8 texture
|
/* Writemasking doesn't eliminate channels on SIMD8 texture
|
||||||
|
|
Loading…
Reference in New Issue