Module: Mesa
Branch: main
Commit: 1c1be23497e43e911054d700e31e184e1c6ad60c
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=1c1be23497e43e911054d700e31e184e1c6ad60c

Author: Francisco Jerez <[email protected]>
Date:   Fri Feb 10 19:29:20 2023 -0800

intel/fs: Track force_writemask_all behavior of copy propagation ACP entries.

force_writemask_all determines whether all channels of the copy are
actually valid, and may be required to be set for it to be propagated
safely in cases where the destination of the copy is used by another
force_writemask_all instruction, or when the copy occurs in a
divergent control flow block different from its use.

Reviewed-by: Lionel Landwerlin <[email protected]>
Acked-by: Matt Turner <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21351>

---

 src/intel/compiler/brw_fs_copy_propagation.cpp | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/intel/compiler/brw_fs_copy_propagation.cpp 
b/src/intel/compiler/brw_fs_copy_propagation.cpp
index 69ceeb9bbc4..585f16505f1 100644
--- a/src/intel/compiler/brw_fs_copy_propagation.cpp
+++ b/src/intel/compiler/brw_fs_copy_propagation.cpp
@@ -53,6 +53,7 @@ struct acp_entry : public exec_node {
    enum opcode opcode;
    bool saturate;
    bool is_partial_write;
+   bool force_writemask_all;
 };
 
 struct block_data {
@@ -1097,6 +1098,7 @@ fs_visitor::opt_copy_propagation_local(void 
*copy_prop_ctx, bblock_t *block,
          entry->opcode = inst->opcode;
          entry->saturate = inst->saturate;
          entry->is_partial_write = inst->is_partial_write();
+         entry->force_writemask_all = inst->force_writemask_all;
          acp[entry->dst.nr % ACP_HASH_SIZE].push_tail(entry);
       } else if (inst->opcode == SHADER_OPCODE_LOAD_PAYLOAD &&
                  inst->dst.file == VGRF) {
@@ -1116,6 +1118,7 @@ fs_visitor::opt_copy_propagation_local(void 
*copy_prop_ctx, bblock_t *block,
                entry->size_written = size_written;
                entry->size_read = inst->size_read(i);
                entry->opcode = inst->opcode;
+               entry->force_writemask_all = inst->force_writemask_all;
                if (!entry->dst.equals(inst->src[i])) {
                   acp[entry->dst.nr % ACP_HASH_SIZE].push_tail(entry);
                } else {

Reply via email to