aco: fix VS input loads with MUBUF on GFX6
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Wed, 29 Jan 2020 08:18:20 +0000 (09:18 +0100)
committerMarge Bot <eric+marge@anholt.net>
Wed, 29 Jan 2020 13:58:37 +0000 (13:58 +0000)
Only MTBUF supports vec3.

Fixes: 03a0d39366d ("aco: use MUBUF in some situations instead of splitting vertex fetches")
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Daniel Schürmann <daniel@schuermann.dev>
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3615>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3615>

src/amd/compiler/aco_instruction_selection.cpp

index 5859cb536e2a86b757c99c5cbf96706ba1976815..64f5270acd0187652e7fc8173bf1fdce68f07958 100644 (file)
@@ -3236,8 +3236,14 @@ void visit_load_input(isel_context *ctx, nir_intrinsic_instr *instr)
                            nfmt == V_008F0C_BUF_NUM_FORMAT_SINT) &&
                           vtx_info->chan_byte_size == 4;
          unsigned fetch_dfmt = V_008F0C_BUF_DATA_FORMAT_INVALID;
-         if (!use_mubuf)
+         if (!use_mubuf) {
             fetch_dfmt = get_fetch_data_format(ctx, vtx_info, fetch_offset, attrib_stride, &fetch_size);
+         } else {
+            if (fetch_size == 3 && ctx->options->chip_class == GFX6) {
+               /* GFX6 only supports loading vec3 with MTBUF, expand to vec4. */
+               fetch_size = 4;
+            }
+         }
 
          Temp fetch_index = index;
          if (attrib_stride != 0 && fetch_offset > attrib_stride) {