From: Alejandro Piñeiro <apinhe...@igalia.com> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=89580 --- src/mesa/drivers/dri/i965/brw_vec4_nir.cpp | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-)
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp b/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp index 47e70ce..bc470cb 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp +++ b/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp @@ -1417,6 +1417,8 @@ vec4_visitor::nir_emit_texture(nir_tex_instr *instr) const glsl_type *dest_type; + src_reg coordinate; + const glsl_type *coord_type = NULL; src_reg shadow_comparitor; int shadow_compare = 0; @@ -1432,7 +1434,20 @@ vec4_visitor::nir_emit_texture(nir_tex_instr *instr) break; case nir_tex_src_coord: - /* @TODO: not yet implemented */ + switch (instr->op) { + case nir_texop_txf: + case nir_texop_txf_ms: + coordinate = retype(src, BRW_REGISTER_TYPE_D); + coord_type = glsl_type::get_instance(GLSL_TYPE_INT, + instr->coord_components, 1); + break; + + default: + coordinate = retype(src, BRW_REGISTER_TYPE_F); + coord_type = glsl_type::get_instance(GLSL_TYPE_FLOAT, + instr->coord_components, 1); + break; + } break; case nir_tex_src_ddx: @@ -1512,7 +1527,17 @@ vec4_visitor::nir_emit_texture(nir_tex_instr *instr) if (instr->op == nir_texop_txs || instr->op == nir_texop_query_levels) { /* @TODO: not yet implemented */ } else { - /* @TODO: Load the coordinate */ + /* Load the coordinate */ + int coord_mask = (1 << instr->coord_components) - 1; + int zero_mask = 0xf & ~coord_mask; + + emit(MOV(dst_reg(MRF, param_base, coordinate.type, coord_mask), + coordinate)); + + if (zero_mask != 0) { + emit(MOV(dst_reg(MRF, param_base, coordinate.type, zero_mask), + src_reg(0))); + } /* Load the shadow comparitor */ if (shadow_compare && instr->op != nir_texop_txd) { -- 2.1.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev