intel/fs: Shuffle can't handle source modifiers
authorJason Ekstrand <jason@jlekstrand.net>
Wed, 28 Oct 2020 21:28:46 +0000 (16:28 -0500)
committerMarge Bot <eric+marge@anholt.net>
Wed, 17 Feb 2021 03:59:25 +0000 (03:59 +0000)
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 <caio.oliveira@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9068>

src/intel/compiler/brw_fs_generator.cpp
src/intel/compiler/brw_shader.cpp

index 0a9bd48..8f5052b 100644 (file)
@@ -600,6 +600,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.
     */
index a50559a..f52295f 100644 (file)
@@ -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;