On 05/05/2017 04:35 PM, Ilia Mirkin wrote:


On May 5, 2017 9:36 AM, "Samuel Pitoiset" <samuel.pitoi...@gmail.com <mailto:samuel.pitoi...@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.pitoi...@gmail.com
    <mailto:samuel.pitoi...@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@lists.freedesktop.org <mailto:mesa-dev@lists.freedesktop.org>
    https://lists.freedesktop.org/mailman/listinfo/mesa-dev
    <https://lists.freedesktop.org/mailman/listinfo/mesa-dev>


_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to