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

Author: Francisco Jerez <curroje...@riseup.net>
Date:   Sat Feb 19 01:41:55 2022 -0800

intel/fs/xe2+: Teach SWSB pass about the behavior of double precision 
instructions.

Xe2 hardware has a "long" EU pipeline specifically for FP64
instructions, so these are handled as in-order instructions which
require RegDist synchronization.  64-bit integer instructions are now
handled by the normal integer pipeline, so the existing special-casing
inherited from ATS needs to be disabled.

Reviewed-by: Lionel Landwerlin <lionel.g.landwer...@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25514>

---

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

diff --git a/src/intel/compiler/brw_fs_scoreboard.cpp 
b/src/intel/compiler/brw_fs_scoreboard.cpp
index c287fd62a5c..6e2ad22ee13 100644
--- a/src/intel/compiler/brw_fs_scoreboard.cpp
+++ b/src/intel/compiler/brw_fs_scoreboard.cpp
@@ -135,8 +135,13 @@ namespace {
          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) {
+      else if (devinfo->ver >= 20 && type_sz(inst->dst.type) >= 8 &&
+               brw_reg_type_is_floating_point(inst->dst.type)) {
+         assert(devinfo->has_64bit_float);
+         return TGL_PIPE_LONG;
+      } else if (devinfo->ver < 20 &&
+                 (type_sz(inst->dst.type) >= 8 || type_sz(t) >= 8 ||
+                  is_dword_multiply)) {
          assert(devinfo->has_64bit_float || devinfo->has_64bit_int ||
                 devinfo->has_integer_dword_mul);
          return TGL_PIPE_LONG;

Reply via email to