intel: Move swizzle_color_value from blorp to ISL
authorJason Ekstrand <jason@jlekstrand.net>
Wed, 25 Mar 2020 19:35:53 +0000 (14:35 -0500)
committerMarge Bot <eric+marge@anholt.net>
Tue, 28 Apr 2020 22:45:39 +0000 (22:45 +0000)
Reviewed-by: Rafael Antognolli <rafael.antognolli@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4393>

src/intel/blorp/blorp.h
src/intel/blorp/blorp_clear.c
src/intel/isl/isl.c
src/intel/isl/isl.h

index dd31ef2e2dc5677b6b53526f98ecdb831676ba2c..b88178266c387ab2a9c5cb5869539b728a1d65ef 100644 (file)
@@ -161,9 +161,6 @@ blorp_buffer_copy(struct blorp_batch *batch,
                   struct blorp_address dst,
                   uint64_t size);
 
-union isl_color_value
-swizzle_color_value(union isl_color_value src, struct isl_swizzle swizzle);
-
 void
 blorp_fast_clear(struct blorp_batch *batch,
                  const struct blorp_surf *surf,
index 3daeb004850ca9f176027f0333c2cfe43e1e380d..e79f602261ea0ca0d199987bdcbaea38dd6dc3e1 100644 (file)
@@ -364,33 +364,12 @@ blorp_fast_clear(struct blorp_batch *batch,
    /* If a swizzle was provided, we need to swizzle the clear color so that
     * the hardware color format conversion will work properly.
     */
-   params.dst.clear_color = swizzle_color_value(params.dst.clear_color,
-                                                swizzle);
+   params.dst.clear_color =
+      isl_color_value_swizzle_inv(params.dst.clear_color, swizzle);
 
    batch->blorp->exec(batch, &params);
 }
 
-union isl_color_value
-swizzle_color_value(union isl_color_value src, struct isl_swizzle swizzle)
-{
-   union isl_color_value dst = { .u32 = { 0, } };
-
-   /* We assign colors in ABGR order so that the first one will be taken in
-    * RGBA precedence order.  According to the PRM docs for shader channel
-    * select, this matches Haswell hardware behavior.
-    */
-   if ((unsigned)(swizzle.a - ISL_CHANNEL_SELECT_RED) < 4)
-      dst.u32[swizzle.a - ISL_CHANNEL_SELECT_RED] = src.u32[3];
-   if ((unsigned)(swizzle.b - ISL_CHANNEL_SELECT_RED) < 4)
-      dst.u32[swizzle.b - ISL_CHANNEL_SELECT_RED] = src.u32[2];
-   if ((unsigned)(swizzle.g - ISL_CHANNEL_SELECT_RED) < 4)
-      dst.u32[swizzle.g - ISL_CHANNEL_SELECT_RED] = src.u32[1];
-   if ((unsigned)(swizzle.r - ISL_CHANNEL_SELECT_RED) < 4)
-      dst.u32[swizzle.r - ISL_CHANNEL_SELECT_RED] = src.u32[0];
-
-   return dst;
-}
-
 void
 blorp_clear(struct blorp_batch *batch,
             const struct blorp_surf *surf,
@@ -408,7 +387,7 @@ blorp_clear(struct blorp_batch *batch,
     * also ensures that they work on pre-Haswell hardware which can't swizlle
     * at all.
     */
-   clear_color = swizzle_color_value(clear_color, swizzle);
+   clear_color = isl_color_value_swizzle_inv(clear_color, swizzle);
    swizzle = ISL_SWIZZLE_IDENTITY;
 
    bool clear_rgb_as_red = false;
@@ -423,7 +402,7 @@ blorp_clear(struct blorp_batch *batch,
        * around it by swapping the colors around and using B4G4R4A4 instead.
        */
       const struct isl_swizzle ARGB = ISL_SWIZZLE(ALPHA, RED, GREEN, BLUE);
-      clear_color = swizzle_color_value(clear_color, ARGB);
+      clear_color = isl_color_value_swizzle_inv(clear_color, ARGB);
       format = ISL_FORMAT_B4G4R4A4_UNORM;
    } else if (isl_format_get_layout(format)->bpb % 3 == 0) {
       clear_rgb_as_red = true;
index 9aa377b7e4b1d77f7e81d4152f9658853030cdd1..f7689d5b8670294f033df173abfa8c37d415c9fc 100644 (file)
@@ -2896,6 +2896,29 @@ isl_swizzle_invert(struct isl_swizzle swizzle)
    return (struct isl_swizzle) { chans[0], chans[1], chans[2], chans[3] };
 }
 
+/** Applies an inverse swizzle to a color value */
+union isl_color_value
+isl_color_value_swizzle_inv(union isl_color_value src,
+                            struct isl_swizzle swizzle)
+{
+   union isl_color_value dst = { .u32 = { 0, } };
+
+   /* We assign colors in ABGR order so that the first one will be taken in
+    * RGBA precedence order.  According to the PRM docs for shader channel
+    * select, this matches Haswell hardware behavior.
+    */
+   if ((unsigned)(swizzle.a - ISL_CHANNEL_SELECT_RED) < 4)
+      dst.u32[swizzle.a - ISL_CHANNEL_SELECT_RED] = src.u32[3];
+   if ((unsigned)(swizzle.b - ISL_CHANNEL_SELECT_RED) < 4)
+      dst.u32[swizzle.b - ISL_CHANNEL_SELECT_RED] = src.u32[2];
+   if ((unsigned)(swizzle.g - ISL_CHANNEL_SELECT_RED) < 4)
+      dst.u32[swizzle.g - ISL_CHANNEL_SELECT_RED] = src.u32[1];
+   if ((unsigned)(swizzle.r - ISL_CHANNEL_SELECT_RED) < 4)
+      dst.u32[swizzle.r - ISL_CHANNEL_SELECT_RED] = src.u32[0];
+
+   return dst;
+}
+
 uint8_t
 isl_format_get_aux_map_encoding(enum isl_format format)
 {
index bfd20d058d93c7e6b3458df8d441c64139fd80bd..80c801370d2b753395b6dfa15a440abedcc07188 100644 (file)
@@ -1683,6 +1683,10 @@ enum isl_format isl_format_rgb_to_rgba(enum isl_format rgb) ATTRIBUTE_CONST;
 enum isl_format isl_format_rgb_to_rgbx(enum isl_format rgb) ATTRIBUTE_CONST;
 enum isl_format isl_format_rgbx_to_rgba(enum isl_format rgb) ATTRIBUTE_CONST;
 
+union isl_color_value
+isl_color_value_swizzle_inv(union isl_color_value src,
+                            struct isl_swizzle swizzle);
+
 void isl_color_value_pack(const union isl_color_value *value,
                           enum isl_format format,
                           uint32_t *data_out);