Signed-off-by: Topi Pohjolainen <topi.pohjolai...@intel.com> --- src/mesa/drivers/dri/i965/brw_fs.h | 2 ++ src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+)
diff --git a/src/mesa/drivers/dri/i965/brw_fs.h b/src/mesa/drivers/dri/i965/brw_fs.h index b4b146a..968ae77 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.h +++ b/src/mesa/drivers/dri/i965/brw_fs.h @@ -513,6 +513,8 @@ public: void visit_atomic_counter_intrinsic(ir_call *ir); + fs_reg fetch_resinfo(int sampler, const fs_reg& lod); + struct gl_fragment_program *fp; int *param_size; diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp index ed19157..42836ac 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp @@ -1567,6 +1567,27 @@ fs_visitor::emit_mcs_fetch(ir_texture *ir, fs_reg coordinate, int sampler) return dest; } +fs_reg +fs_visitor::fetch_resinfo(int sampler, const fs_reg& lod) +{ + fs_reg info = fs_reg(this, glsl_type::get_instance(GLSL_TYPE_UINT, 4, 1)); + fs_reg payload = brw->gen >= 7 ? fs_reg(this, glsl_type::float_type) : + fs_reg(MRF, 2, BRW_REGISTER_TYPE_UD); + fs_inst *fetch; + + emit(MOV(retype(payload, BRW_REGISTER_TYPE_UD), lod)); + + if (brw->gen >= 7) + fetch = emit(SHADER_OPCODE_TEX_RESINFO, info, payload); + else + fetch = emit(SHADER_OPCODE_TEX_RESINFO, info); + + fetch->sampler = sampler; + fetch->regs_written = 4; + + return info; +} + void fs_visitor::visit(ir_texture *ir) { -- 1.8.3.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev