Mesa (master): intel/fs: Don't emit a des copy for image ops with has_dest == false

Jason Ekstrand jekstrand at kemper.freedesktop.org
Wed Mar 28 01:18:56 UTC 2018


Module: Mesa
Branch: master
Commit: 7e38f49a8f6a1ee765613e581844f8e9af414b10
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=7e38f49a8f6a1ee765613e581844f8e9af414b10

Author: Jason Ekstrand <jason.ekstrand at intel.com>
Date:   Tue Mar 27 16:27:20 2018 -0700

intel/fs: Don't emit a des copy for image ops with has_dest == false

This was causing us to walk dest_components times over a thing with no
destination.  This happened to work because all of the image intrinsics
without a destination also happened to have dest_components == 0.  We
shouldn't be reading dest_components if has_dest == false.

Reviewed-by: Matt Turner <mattst88 at gmail.com>
Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

---

 src/intel/compiler/brw_fs_nir.cpp | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/intel/compiler/brw_fs_nir.cpp b/src/intel/compiler/brw_fs_nir.cpp
index f5d5399259..197d41062e 100644
--- a/src/intel/compiler/brw_fs_nir.cpp
+++ b/src/intel/compiler/brw_fs_nir.cpp
@@ -3848,9 +3848,12 @@ fs_visitor::nir_emit_intrinsic(const fs_builder &bld, nir_intrinsic_instr *instr
                                  get_image_atomic_op(instr->intrinsic, type));
 
       /* Assign the result. */
-      for (unsigned c = 0; c < info->dest_components; ++c)
-         bld.MOV(offset(retype(dest, base_type), bld, c),
-                 offset(tmp, bld, c));
+      if (nir_intrinsic_infos[instr->intrinsic].has_dest) {
+         for (unsigned c = 0; c < info->dest_components; ++c) {
+            bld.MOV(offset(retype(dest, base_type), bld, c),
+                    offset(tmp, bld, c));
+         }
+      }
       break;
    }
 




More information about the mesa-commit mailing list