[Mesa-dev] [PATCH 31/38] i965/fs: Migrate translation of NIR control flow to the IR builder.

Matt Turner mattst88 at gmail.com
Thu Jun 4 16:11:22 PDT 2015


On Thu, Jun 4, 2015 at 9:05 AM, Francisco Jerez <currojerez at riseup.net> wrote:
> ---
>  src/mesa/drivers/dri/i965/brw_fs.h       |  3 ++-
>  src/mesa/drivers/dri/i965/brw_fs_nir.cpp | 23 ++++++++++++-----------
>  2 files changed, 14 insertions(+), 12 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_fs.h b/src/mesa/drivers/dri/i965/brw_fs.h
> index 3f775d3..8803d5a 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs.h
> +++ b/src/mesa/drivers/dri/i965/brw_fs.h
> @@ -319,7 +319,8 @@ public:
>     void nir_emit_alu(nir_alu_instr *instr);
>     void nir_emit_intrinsic(nir_intrinsic_instr *instr);
>     void nir_emit_texture(nir_tex_instr *instr);
> -   void nir_emit_jump(nir_jump_instr *instr);
> +   void nir_emit_jump(const brw::fs_builder &bld,
> +                      nir_jump_instr *instr);
>     fs_reg get_nir_src(nir_src src);
>     fs_reg get_nir_dest(nir_dest dest);
>     void emit_percomp(const brw::fs_builder &bld, const fs_inst &inst,
> diff --git a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
> index 3f84830..f31829f 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
> @@ -397,21 +397,21 @@ void
>  fs_visitor::nir_emit_if(nir_if *if_stmt)
>  {
>     /* first, put the condition into f0 */
> -   fs_inst *inst = emit(MOV(reg_null_d,
> +   fs_inst *inst = bld.MOV(bld.null_reg_d(),
>                              retype(get_nir_src(if_stmt->condition),
> -                                   BRW_REGISTER_TYPE_D)));
> +                                   BRW_REGISTER_TYPE_D));
>     inst->conditional_mod = BRW_CONDITIONAL_NZ;
>
> -   emit(IF(BRW_PREDICATE_NORMAL));
> +   bld.IF(BRW_PREDICATE_NORMAL);
>
>     nir_emit_cf_list(&if_stmt->then_list);
>
>     /* note: if the else is empty, dead CF elimination will remove it */
> -   emit(BRW_OPCODE_ELSE);
> +   bld.emit(BRW_OPCODE_ELSE);
>
>     nir_emit_cf_list(&if_stmt->else_list);
>
> -   emit(BRW_OPCODE_ENDIF);
> +   bld.emit(BRW_OPCODE_ENDIF);
>
>     if (!try_replace_with_sel() && devinfo->gen < 6) {
>        no16("Can't support (non-uniform) control flow on SIMD16\n");
> @@ -425,11 +425,11 @@ fs_visitor::nir_emit_loop(nir_loop *loop)
>        no16("Can't support (non-uniform) control flow on SIMD16\n");
>     }
>
> -   emit(BRW_OPCODE_DO);
> +   bld.emit(BRW_OPCODE_DO);
>
>     nir_emit_cf_list(&loop->body);
>
> -   emit(BRW_OPCODE_WHILE);
> +   bld.emit(BRW_OPCODE_WHILE);
>  }
>
>  void
> @@ -443,6 +443,7 @@ fs_visitor::nir_emit_block(nir_block *block)
>  void
>  fs_visitor::nir_emit_instr(nir_instr *instr)
>  {
> +   const fs_builder abld = bld.annotate(NULL, instr);
>     this->base_ir = instr;
>
>     switch (instr->type) {
> @@ -465,7 +466,7 @@ fs_visitor::nir_emit_instr(nir_instr *instr)
>        break;
>
>     case nir_instr_type_jump:
> -      nir_emit_jump(nir_instr_as_jump(instr));
> +      nir_emit_jump(abld, nir_instr_as_jump(instr));

Why do we need to change the annotation to NULL?


More information about the mesa-dev mailing list