Re: [Mesa-dev] [PATCH 3/6] intel/ir: Allow arbitrary scratch flag registers for SHADER_OPCODE_FIND_LIVE_CHANNEL.

2018-03-01 Thread Francisco Jerez
Kenneth Graunke  writes:

> 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.

2018-03-01 Thread Kenneth Graunke
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.

2018-02-27 Thread Francisco Jerez
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