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

Chris Forbes chrisf at ijw.co.nz
Sat Oct 5 03:19:18 PDT 2013


Eek -- so I am. Thanks for spotting this.

On Sat, Oct 5, 2013 at 8:07 PM, Christoph Brill <egore911 at egore911.de> wrote:
> 2013/10/5 Chris Forbes <chrisf at ijw.co.nz>
>>
>> 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);
>
>
> I think you are missing a "break;" here.
>
>>
>> +   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);
>> +      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));
>> --
>> 1.8.4
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>>
>
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>


More information about the mesa-dev mailing list