[Mesa-dev] [PATCH] st/glsl_to_tgsi: make sure resource file for samplers is PROGRAM_SAMPLER

Samuel Pitoiset samuel.pitoiset at gmail.com
Fri May 5 14:38:50 UTC 2017



On 05/05/2017 04:35 PM, Ilia Mirkin wrote:
> 
> 
> On May 5, 2017 9:36 AM, "Samuel Pitoiset" <samuel.pitoiset at gmail.com 
> <mailto:samuel.pitoiset at gmail.com>> wrote:
> 
>     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 <samuel.pitoiset at gmail.com
>     <mailto:samuel.pitoiset at gmail.com>>
>     ---
>       src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 18 +++++++++---------
>       1 file 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 81c1d00dfb..25050834e3 100644
>     --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
>     +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
>     @@ -4149,7 +4149,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;
> 
>     @@ -4380,10 +4379,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);
> 
> 
> Why is this cast ok to do?

st_src_reg::index is int16_t while get_deref_offsets() expects uint16_t.

> 
>     +
>     +   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);
>     @@ -4414,15 +4419,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);
>     --
>     2.12.2
> 
>     _______________________________________________
>     mesa-dev mailing list
>     mesa-dev at lists.freedesktop.org <mailto:mesa-dev at lists.freedesktop.org>
>     https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>     <https://lists.freedesktop.org/mailman/listinfo/mesa-dev>
> 
> 


More information about the mesa-dev mailing list