summaryrefslogtreecommitdiffstats
path: root/src/intel
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2018-03-27 16:27:20 -0700
committerJason Ekstrand <[email protected]>2018-03-27 18:18:21 -0700
commit7e38f49a8f6a1ee765613e581844f8e9af414b10 (patch)
tree8ea83d501186e45ce7445bf7e638e12e3935913e /src/intel
parent776e6af879318050cdf8245cd409ada7b843e358 (diff)
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 <[email protected]> Reviewed-by: Ian Romanick <[email protected]>
Diffstat (limited to 'src/intel')
-rw-r--r--src/intel/compiler/brw_fs_nir.cpp9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/intel/compiler/brw_fs_nir.cpp b/src/intel/compiler/brw_fs_nir.cpp
index f5d53992598..197d41062e3 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;
}