Eek -- so I am. Thanks for spotting this.
On Sat, Oct 5, 2013 at 8:07 PM, Christoph Brill <egore...@egore911.de> wrote: > 2013/10/5 Chris Forbes <chr...@ijw.co.nz> >> >> Signed-off-by: Chris Forbes <chr...@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@lists.freedesktop.org >> http://lists.freedesktop.org/mailman/listinfo/mesa-dev >> > > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev