[Mesa-dev] [PATCH 5/6] i965/vs: implement ir_query_levels

Kenneth Graunke kenneth at whitecape.org
Sat Oct 5 11:32:07 PDT 2013


On 10/04/2013 09:17 PM, Chris Forbes wrote:
> Signed-off-by: Chris Forbes <chrisf at ijw.co.nz>
> ---
>  src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp | 15 ++++++++++++++-
>  1 file changed, 14 insertions(+), 1 deletion(-)
> 
> diff --git a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
> index 9e6cc78..1112b23 100644
> --- a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
> @@ -2192,6 +2192,10 @@ vec4_visitor::visit(ir_texture *ir)
>        lod = this->result;
>        lod_type = ir->lod_info.lod->type;
>        break;
> +   case ir_query_levels:
> +      lod = src_reg(0);
> +      lod_type = glsl_type::int_type;
> +      break;
>     case ir_txf_ms:
>        ir->lod_info.sample_index->accept(this);
>        sample_index = this->result;
> @@ -2232,6 +2236,8 @@ vec4_visitor::visit(ir_texture *ir)
>        break;
>     case ir_tg4:
>        inst = new(mem_ctx) vec4_instruction(this, SHADER_OPCODE_TG4);

break;

> +   case ir_query_levels:
> +      inst = new(mem_ctx) vec4_instruction(this, SHADER_OPCODE_TXS);
>        break;
>     case ir_txb:
>        assert(!"TXB is not valid for vertex shaders.");
> @@ -2264,7 +2270,7 @@ vec4_visitor::visit(ir_texture *ir)
>     /* MRF for the first parameter */
>     int param_base = inst->base_mrf + inst->header_present;
>  
> -   if (ir->op == ir_txs) {
> +   if (ir->op == ir_txs || ir->op == ir_query_levels) {
>        int writemask = brw->gen == 4 ? WRITEMASK_W : WRITEMASK_X;
>        emit(MOV(dst_reg(MRF, param_base, lod_type, writemask), lod));
>     } else {
> @@ -2415,6 +2421,13 @@ vec4_visitor::swizzle_result(ir_texture *ir, src_reg orig_val, int sampler)
>     this->result = src_reg(this, ir->type);
>     dst_reg swizzled_result(this->result);
>  
> +   if (ir->op == ir_query_levels) {
> +      /* # levels is in .w */
> +      orig_val.swizzle = BRW_SWIZZLE4(SWIZZLE_W, SWIZZLE_W, SWIZZLE_W, SWIZZLE_W);

orig_val.swizzle = BRW_SWIZZLE_WWWW;

Shorter :)

With those changed, this is:
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>

> +      emit(MOV(swizzled_result, orig_val));
> +      return;
> +   }
> +
>     if (ir->op == ir_txs || ir->type == glsl_type::float_type
>  			|| s == SWIZZLE_NOOP || ir->op == ir_tg4) {
>        emit(MOV(swizzled_result, orig_val));
> 



More information about the mesa-dev mailing list