From eeb7cb93d2da1c4a12b335ba2baff2ea9b67843d Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Wed, 28 Oct 2020 16:28:46 -0500 Subject: [PATCH] intel/fs: Shuffle can't handle source modifiers On Gen7, we have to split shuffles into two MOVs for 64-bit types so we can't handle source modifiers. On Gen12.5, we have to use integer types all the time so we can't use them there either. Fixing that will be a different commit but it interacts with this one. Fixes: 90c9f29518d "i965/fs: Add support for nir_intrinsic_shuffle" Reviewed-by: Caio Marcelo de Oliveira Filho Part-of: (cherry picked from commit 3ce6ca7214d022d04414dd9618d2c8146dc1da4f) --- .pick_status.json | 2 +- src/intel/compiler/brw_fs_generator.cpp | 3 +++ src/intel/compiler/brw_shader.cpp | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.pick_status.json b/.pick_status.json index 97981b32cdc..11052ffa27d 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -841,7 +841,7 @@ "description": "intel/fs: Shuffle can't handle source modifiers", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "master_sha": null, "because_sha": "90c9f29518d32a29725b114f3b16ad8c62a812ff" }, diff --git a/src/intel/compiler/brw_fs_generator.cpp b/src/intel/compiler/brw_fs_generator.cpp index fade40c7268..9465907cc60 100644 --- a/src/intel/compiler/brw_fs_generator.cpp +++ b/src/intel/compiler/brw_fs_generator.cpp @@ -599,6 +599,9 @@ fs_generator::generate_shuffle(fs_inst *inst, struct brw_reg src, struct brw_reg idx) { + assert(src.file == BRW_GENERAL_REGISTER_FILE); + assert(!src.abs && !src.negate); + /* Ivy bridge has some strange behavior that makes this a real pain to * implement for 64-bit values so we just don't bother. */ diff --git a/src/intel/compiler/brw_shader.cpp b/src/intel/compiler/brw_shader.cpp index f1d116bbe1c..524025283d7 100644 --- a/src/intel/compiler/brw_shader.cpp +++ b/src/intel/compiler/brw_shader.cpp @@ -949,6 +949,7 @@ backend_instruction::can_do_source_mods() const case SHADER_OPCODE_BROADCAST: case SHADER_OPCODE_CLUSTER_BROADCAST: case SHADER_OPCODE_MOV_INDIRECT: + case SHADER_OPCODE_SHUFFLE: return false; default: return true;