Mesa (main): intel/fs/xehp: Teach SWSB pass about the exec pipeline of FS_OPCODE_PACK_HALF_2x16_SPLIT.

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Dec 8 03:02:57 UTC 2021


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

Author: Francisco Jerez <currojerez at riseup.net>
Date:   Mon Nov 29 23:45:50 2021 -0800

intel/fs/xehp: Teach SWSB pass about the exec pipeline of FS_OPCODE_PACK_HALF_2x16_SPLIT.

This virtual instruction is translated into multiple half float
physical instructions, even though its destination is typically of
integer type, which prevents the software scoreboard pass from
inferring the correct execution pipeline for the virtual instruction
on XeHP+ platforms.  Teach the SWSB lowering pass about this
inconsistency between the IR and physical instruction types.

Fixes among other tests:

dEQP-GLES31.functional.shaders.builtin_functions.pack_unpack.packhalf2x16_compute

Fixes: d4537770bbf ("intel/fs: Add helper functions inferring sync and exec pipeline of an instruction.")
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/5685
Reported-by: Tapani Pälli <tapani.palli at intel.com>
Tested-by: Tapani Pälli <tapani.palli at intel.com>
Reviewed-by: Matt Turner <mattst88 at gmail.com>
Reviewed-by: Caio Oliveira <caio.oliveira at intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14002>

---

 src/intel/compiler/brw_fs_scoreboard.cpp | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/intel/compiler/brw_fs_scoreboard.cpp b/src/intel/compiler/brw_fs_scoreboard.cpp
index 4176f54c908..7b0d2101cb8 100644
--- a/src/intel/compiler/brw_fs_scoreboard.cpp
+++ b/src/intel/compiler/brw_fs_scoreboard.cpp
@@ -122,6 +122,8 @@ namespace {
       else if (inst->opcode == SHADER_OPCODE_BROADCAST &&
                !devinfo->has_64bit_float && type_sz(t) >= 8)
          return TGL_PIPE_INT;
+      else if (inst->opcode == FS_OPCODE_PACK_HALF_2x16_SPLIT)
+         return TGL_PIPE_FLOAT;
       else if (type_sz(inst->dst.type) >= 8 || type_sz(t) >= 8 ||
                is_dword_multiply)
          return TGL_PIPE_LONG;



More information about the mesa-commit mailing list