pan/midgard: Extend offset_swizzle to non-32-bit
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Thu, 31 Oct 2019 18:57:35 +0000 (14:57 -0400)
committerAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Mon, 4 Nov 2019 20:36:08 +0000 (15:36 -0500)
We take a size parameter; use it.

Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
src/panfrost/midgard/midgard_ra.c

index e923a3a94201958cc46cb2aabf8f2066b569e2f4..87eedfd7c2eb17f0e031759677bfd296de21489a 100644 (file)
@@ -72,8 +72,7 @@ struct phys_reg {
         unsigned size;
 };
 
-/* Shift each component up by reg_offset and shift all components horizontally
- * by dst_offset. TODO: vec8+ */
+/* Shift up by reg_offset and horizontally by dst_offset. */
 
 static void
 offset_swizzle(unsigned *swizzle, unsigned reg_offset, unsigned srcsize, unsigned dst_offset)
@@ -83,12 +82,14 @@ offset_swizzle(unsigned *swizzle, unsigned reg_offset, unsigned srcsize, unsigne
         signed reg_comp = reg_offset / srcsize;
         signed dst_comp = dst_offset / srcsize;
 
+        unsigned max_component = (16 / srcsize) - 1;
+
         assert(reg_comp * srcsize == reg_offset);
         assert(dst_comp * srcsize == dst_offset);
 
         for (signed c = 0; c < MIR_VEC_COMPONENTS; ++c) {
                 signed comp = MAX2(c - dst_comp, 0);
-                out[c] = MIN2(swizzle[comp] + reg_comp, 4 - 1);
+                out[c] = MIN2(swizzle[comp] + reg_comp, max_component);
         }
 
         memcpy(swizzle, out, sizeof(out));