[Mesa-dev] [PATCH 3/3] st_glsl_to_tgsi: implement TXS/TXQ. (v2)

Bryan Cain bryancain3 at gmail.com
Thu Aug 25 08:06:16 PDT 2011


The usual commit prefix for the GLSL->TGSI translator is "glsl_to_tgsi".

Other than that,
Reviewed-by: Bryan Cain <bryancain3 at gmail.com>

On 08/25/2011 09:46 AM, Dave Airlie wrote:
> From: Dave Airlie <airlied at redhat.com>
>
> GLSL uses TXS, call the gallium TXQ opcode.
>
> v2: fix indent from 4->3.
>
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
>  src/mesa/state_tracker/st_glsl_to_tgsi.cpp |   27 ++++++++++++++++++---------
>  1 files changed, 18 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 6f0d9fa..fb5060c 100644
> --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
> +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
> @@ -2426,16 +2426,18 @@ glsl_to_tgsi_visitor::visit(ir_texture *ir)
>     glsl_to_tgsi_instruction *inst = NULL;
>     unsigned opcode = TGSI_OPCODE_NOP;
>  
> -   ir->coordinate->accept(this);
> +   if (ir->coordinate) {
> +      ir->coordinate->accept(this);
>  
> -   /* Put our coords in a temp.  We'll need to modify them for shadow,
> -    * projection, or LOD, so the only case we'd use it as is is if
> -    * we're doing plain old texturing.  The optimization passes on
> -    * glsl_to_tgsi_visitor should handle cleaning up our mess in that case.
> -    */
> -   coord = get_temp(glsl_type::vec4_type);
> -   coord_dst = st_dst_reg(coord);
> -   emit(ir, TGSI_OPCODE_MOV, coord_dst, this->result);
> +      /* Put our coords in a temp.  We'll need to modify them for shadow,
> +       * projection, or LOD, so the only case we'd use it as is is if
> +       * we're doing plain old texturing.  The optimization passes on
> +       * glsl_to_tgsi_visitor should handle cleaning up our mess in that case.
> +       */
> +      coord = get_temp(glsl_type::vec4_type);
> +      coord_dst = st_dst_reg(coord);
> +      emit(ir, TGSI_OPCODE_MOV, coord_dst, this->result);
> +   }
>  
>     if (ir->projector) {
>        ir->projector->accept(this);
> @@ -2470,6 +2472,10 @@ glsl_to_tgsi_visitor::visit(ir_texture *ir)
>        dy = this->result;
>        break;
>     case ir_txs:
> +      opcode = TGSI_OPCODE_TXQ;
> +      ir->lod_info.lod->accept(this);
> +      lod_info = this->result;
> +      break;
>     case ir_txf: /* TODO: use TGSI_OPCODE_TXF here */
>        assert(!"GLSL 1.30 features unsupported");
>        break;
> @@ -2544,6 +2550,8 @@ glsl_to_tgsi_visitor::visit(ir_texture *ir)
>  
>     if (opcode == TGSI_OPCODE_TXD)
>        inst = emit(ir, opcode, result_dst, coord, dx, dy);
> +   else if (opcode == TGSI_OPCODE_TXQ)
> +      inst = emit(ir, opcode, result_dst, lod_info);
>     else
>        inst = emit(ir, opcode, result_dst, coord);
>  
> @@ -4276,6 +4284,7 @@ compile_tgsi_instruction(struct st_translate *t,
>     case TGSI_OPCODE_TXD:
>     case TGSI_OPCODE_TXL:
>     case TGSI_OPCODE_TXP:
> +   case TGSI_OPCODE_TXQ:
>        src[num_src++] = t->samplers[inst->sampler];
>        ureg_tex_insn(ureg,
>                      inst->op,


More information about the mesa-dev mailing list