diff options
author | Samuel Pitoiset <[email protected]> | 2017-05-05 15:36:27 +0200 |
---|---|---|
committer | Samuel Pitoiset <[email protected]> | 2017-05-10 14:02:21 +0200 |
commit | de97e382900e449e1e3368dec1fc6cb8ea2df2af (patch) | |
tree | 35f6e071880b0e4bfcb1b28783ef7d0953315561 | |
parent | 169888b55e95f2efe225c7e138f7ce8df88e170d (diff) |
st/glsl_to_tgsi: make sure resource file for samplers is PROGRAM_SAMPLER
Similar to how image resources are handled. That way we are sure
that inst->resource.file is PROGRAM_SAMPLER for "bound" samplers.
Signed-off-by: Samuel Pitoiset <[email protected]>
Reviewed-by: Nicolai Hähnle <[email protected]>
-rw-r--r-- | src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp index f3e8e337982..54bc70f57b5 100644 --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp @@ -4154,7 +4154,6 @@ glsl_to_tgsi_visitor::visit(ir_texture *ir) unsigned opcode = TGSI_OPCODE_NOP; const glsl_type *sampler_type = ir->sampler->type; unsigned sampler_array_size = 1, sampler_base = 0; - uint16_t sampler_index = 0; bool is_cube_array = false, is_cube_shadow = false; unsigned i; @@ -4385,10 +4384,16 @@ glsl_to_tgsi_visitor::visit(ir_texture *ir) coord_dst.writemask = WRITEMASK_XYZW; } + st_src_reg sampler(PROGRAM_SAMPLER, 0, GLSL_TYPE_UINT); + get_deref_offsets(ir->sampler, &sampler_array_size, &sampler_base, - &sampler_index, &reladdr, true); - if (reladdr.file != PROGRAM_UNDEFINED) + (uint16_t *)&sampler.index, &reladdr, true); + + if (reladdr.file != PROGRAM_UNDEFINED) { + sampler.reladdr = ralloc(mem_ctx, st_src_reg); + *sampler.reladdr = reladdr; emit_arl(ir, sampler_reladdr, reladdr); + } if (opcode == TGSI_OPCODE_TXD) inst = emit_asm(ir, opcode, result_dst, coord, dx, dy); @@ -4419,15 +4424,10 @@ glsl_to_tgsi_visitor::visit(ir_texture *ir) if (ir->shadow_comparator) inst->tex_shadow = GL_TRUE; - inst->resource.index = sampler_index; + inst->resource = sampler; inst->sampler_array_size = sampler_array_size; inst->sampler_base = sampler_base; - if (reladdr.file != PROGRAM_UNDEFINED) { - inst->resource.reladdr = ralloc(mem_ctx, st_src_reg); - memcpy(inst->resource.reladdr, &reladdr, sizeof(reladdr)); - } - if (ir->offset) { if (!inst->tex_offsets) inst->tex_offsets = rzalloc_array(inst, st_src_reg, MAX_GLSL_TEXTURE_OFFSET); |