Re: [Mesa-dev] [PATCH 3/6] intel/ir: Allow arbitrary scratch flag registers for SHADER_OPCODE_FIND_LIVE_CHANNEL.
Kenneth Graunkewrites: > On Tuesday, February 27, 2018 1:38:25 PM PST Francisco Jerez wrote: >> This shouldn't cause any functional change at this point, it changes >> SHADER_OPCODE_FIND_LIVE_CHANNEL to use the flag register specified at >> the IR level instead of the hard-coded f1.0, now that it can be >> represented in backend_instruction::flag_subreg. This will be >> necessary for scheduling to behave correctly once more things start >> making use of f1.0. >> --- >> src/intel/compiler/brw_eu_emit.c| 5 +++-- >> src/intel/compiler/brw_fs.cpp | 3 ++- >> src/intel/compiler/brw_fs_builder.h | 2 +- >> 3 files changed, 6 insertions(+), 4 deletions(-) >> >> diff --git a/src/intel/compiler/brw_fs.cpp b/src/intel/compiler/brw_fs.cpp >> index 6c86b1592fd..0b87d8ab14e 100644 >> --- a/src/intel/compiler/brw_fs.cpp >> +++ b/src/intel/compiler/brw_fs.cpp >> @@ -931,7 +931,8 @@ fs_inst::flags_written() const >> if ((conditional_mod && (opcode != BRW_OPCODE_SEL && >> opcode != BRW_OPCODE_IF && >> opcode != BRW_OPCODE_WHILE)) || >> - opcode == FS_OPCODE_MOV_DISPATCH_TO_FLAGS) { >> + opcode == FS_OPCODE_MOV_DISPATCH_TO_FLAGS || >> + opcode == SHADER_OPCODE_FIND_LIVE_CHANNEL) { > > Looks like an unrelated fix? It's probably fine here though. > The purpose of this change is to make the flag write visible to the scheduler, because with this patch we start specifying the flag subregister that is to be used as scratch predicate internally by SHADER_OPCODE_FIND_LIVE_CHANNEL as backend_instruction::flag_subreg, but because SHADER_OPCODE_FIND_LIVE_CHANNEL shouldn't ever have a predicate nor a conditional mod, the instruction wouldn't be considered to write the flag register if it wasn't because of this change. >>return flag_mask(this); >> } else { >>return flag_mask(dst, size_written); signature.asc Description: PGP signature ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
Re: [Mesa-dev] [PATCH 3/6] intel/ir: Allow arbitrary scratch flag registers for SHADER_OPCODE_FIND_LIVE_CHANNEL.
On Tuesday, February 27, 2018 1:38:25 PM PST Francisco Jerez wrote: > This shouldn't cause any functional change at this point, it changes > SHADER_OPCODE_FIND_LIVE_CHANNEL to use the flag register specified at > the IR level instead of the hard-coded f1.0, now that it can be > represented in backend_instruction::flag_subreg. This will be > necessary for scheduling to behave correctly once more things start > making use of f1.0. > --- > src/intel/compiler/brw_eu_emit.c| 5 +++-- > src/intel/compiler/brw_fs.cpp | 3 ++- > src/intel/compiler/brw_fs_builder.h | 2 +- > 3 files changed, 6 insertions(+), 4 deletions(-) > > diff --git a/src/intel/compiler/brw_fs.cpp b/src/intel/compiler/brw_fs.cpp > index 6c86b1592fd..0b87d8ab14e 100644 > --- a/src/intel/compiler/brw_fs.cpp > +++ b/src/intel/compiler/brw_fs.cpp > @@ -931,7 +931,8 @@ fs_inst::flags_written() const > if ((conditional_mod && (opcode != BRW_OPCODE_SEL && > opcode != BRW_OPCODE_IF && > opcode != BRW_OPCODE_WHILE)) || > - opcode == FS_OPCODE_MOV_DISPATCH_TO_FLAGS) { > + opcode == FS_OPCODE_MOV_DISPATCH_TO_FLAGS || > + opcode == SHADER_OPCODE_FIND_LIVE_CHANNEL) { Looks like an unrelated fix? It's probably fine here though. >return flag_mask(this); > } else { >return flag_mask(dst, size_written); signature.asc Description: This is a digitally signed message part. ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH 3/6] intel/ir: Allow arbitrary scratch flag registers for SHADER_OPCODE_FIND_LIVE_CHANNEL.
This shouldn't cause any functional change at this point, it changes SHADER_OPCODE_FIND_LIVE_CHANNEL to use the flag register specified at the IR level instead of the hard-coded f1.0, now that it can be represented in backend_instruction::flag_subreg. This will be necessary for scheduling to behave correctly once more things start making use of f1.0. --- src/intel/compiler/brw_eu_emit.c| 5 +++-- src/intel/compiler/brw_fs.cpp | 3 ++- src/intel/compiler/brw_fs_builder.h | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/intel/compiler/brw_eu_emit.c b/src/intel/compiler/brw_eu_emit.c index c25d8d6eda0..9fc6d12f288 100644 --- a/src/intel/compiler/brw_eu_emit.c +++ b/src/intel/compiler/brw_eu_emit.c @@ -3393,7 +3393,9 @@ brw_find_live_channel(struct brw_codegen *p, struct brw_reg dst, */ inst = brw_FBL(p, vec1(dst), exec_mask); } else { - const struct brw_reg flag = brw_flag_reg(1, 0); + const struct brw_reg flag = brw_flag_reg( +brw_inst_flag_reg_nr(devinfo, p->current), +brw_inst_flag_subreg_nr(devinfo, p->current)); brw_set_default_exec_size(p, BRW_EXECUTE_1); brw_MOV(p, retype(flag, BRW_REGISTER_TYPE_UD), brw_imm_ud(0)); @@ -3412,7 +3414,6 @@ brw_find_live_channel(struct brw_codegen *p, struct brw_reg dst, brw_inst_set_mask_control(devinfo, inst, BRW_MASK_ENABLE); brw_inst_set_group(devinfo, inst, lower_size * i + 8 * qtr_control); brw_inst_set_cond_modifier(devinfo, inst, BRW_CONDITIONAL_Z); -brw_inst_set_flag_reg_nr(devinfo, inst, 1); brw_inst_set_exec_size(devinfo, inst, cvt(lower_size) - 1); } diff --git a/src/intel/compiler/brw_fs.cpp b/src/intel/compiler/brw_fs.cpp index 6c86b1592fd..0b87d8ab14e 100644 --- a/src/intel/compiler/brw_fs.cpp +++ b/src/intel/compiler/brw_fs.cpp @@ -931,7 +931,8 @@ fs_inst::flags_written() const if ((conditional_mod && (opcode != BRW_OPCODE_SEL && opcode != BRW_OPCODE_IF && opcode != BRW_OPCODE_WHILE)) || - opcode == FS_OPCODE_MOV_DISPATCH_TO_FLAGS) { + opcode == FS_OPCODE_MOV_DISPATCH_TO_FLAGS || + opcode == SHADER_OPCODE_FIND_LIVE_CHANNEL) { return flag_mask(this); } else { return flag_mask(dst, size_written); diff --git a/src/intel/compiler/brw_fs_builder.h b/src/intel/compiler/brw_fs_builder.h index 87394bc17b3..963588611c6 100644 --- a/src/intel/compiler/brw_fs_builder.h +++ b/src/intel/compiler/brw_fs_builder.h @@ -406,7 +406,7 @@ namespace brw { const dst_reg chan_index = vgrf(BRW_REGISTER_TYPE_UD); const dst_reg dst = vgrf(src.type); - ubld.emit(SHADER_OPCODE_FIND_LIVE_CHANNEL, chan_index); + ubld.emit(SHADER_OPCODE_FIND_LIVE_CHANNEL, chan_index)->flag_subreg = 2; ubld.emit(SHADER_OPCODE_BROADCAST, dst, src, component(chan_index, 0)); return src_reg(component(dst, 0)); -- 2.16.1 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev