[Mesa-dev] [PATCH 23/29] intel/blorp: Use ISL instead of bitcast_color_value_to_uint

Jason Ekstrand jason at jlekstrand.net
Sat Jan 27 01:59:52 UTC 2018


---
 src/intel/blorp/blorp_blit.c | 83 ++++++--------------------------------------
 1 file changed, 10 insertions(+), 73 deletions(-)

diff --git a/src/intel/blorp/blorp_blit.c b/src/intel/blorp/blorp_blit.c
index a0e110f..068436b 100644
--- a/src/intel/blorp/blorp_blit.c
+++ b/src/intel/blorp/blorp_blit.c
@@ -2393,75 +2393,6 @@ get_ccs_compatible_uint_format(const struct isl_format_layout *fmtl)
    }
 }
 
-/* Takes an isl_color_value and returns a color value that is the original
- * color value only bit-casted to a UINT format.  This value, together with
- * the format from get_ccs_compatible_uint_format, will yield the same bit
- * value as the original color and format.
- */
-static union isl_color_value
-bitcast_color_value_to_uint(union isl_color_value color,
-                            const struct isl_format_layout *fmtl)
-{
-   /* All CCS formats have the same number of bits in each channel */
-   const struct isl_channel_layout *chan = &fmtl->channels.r;
-
-   union isl_color_value bits;
-   switch (chan->type) {
-   case ISL_UINT:
-   case ISL_SINT:
-      /* Hardware will ignore the high bits so there's no need to cast */
-      bits = color;
-      break;
-
-   case ISL_UNORM:
-      for (unsigned i = 0; i < 4; i++)
-         bits.u32[i] = _mesa_float_to_unorm(color.f32[i], chan->bits);
-      break;
-
-   case ISL_SNORM:
-      for (unsigned i = 0; i < 4; i++)
-         bits.i32[i] = _mesa_float_to_snorm(color.f32[i], chan->bits);
-      break;
-
-   case ISL_SFLOAT:
-      switch (chan->bits) {
-      case 16:
-         for (unsigned i = 0; i < 4; i++)
-            bits.u32[i] = _mesa_float_to_half(color.f32[i]);
-         break;
-
-      case 32:
-         bits = color;
-         break;
-
-      default:
-         unreachable("Invalid float format size");
-      }
-      break;
-
-   default:
-      unreachable("Invalid channel type");
-   }
-
-   switch (fmtl->format) {
-   case ISL_FORMAT_B8G8R8A8_UNORM:
-   case ISL_FORMAT_B8G8R8A8_UNORM_SRGB:
-   case ISL_FORMAT_B8G8R8X8_UNORM:
-   case ISL_FORMAT_B8G8R8X8_UNORM_SRGB: {
-      /* If it's a BGRA format, we need to swap blue and red */
-      uint32_t tmp = bits.u32[0];
-      bits.u32[0] = bits.u32[2];
-      bits.u32[2] = tmp;
-      break;
-   }
-
-   default:
-      break; /* Nothing to do */
-   }
-
-   return bits;
-}
-
 void
 blorp_surf_convert_to_uncompressed(const struct isl_device *isl_dev,
                                    struct brw_blorp_surface_info *info,
@@ -2595,8 +2526,11 @@ blorp_copy(struct blorp_batch *batch,
       assert(isl_formats_are_ccs_e_compatible(batch->blorp->isl_dev->info,
                                               linear_src_format,
                                               params.src.view.format));
-      params.src.clear_color =
-         bitcast_color_value_to_uint(params.src.clear_color, src_fmtl);
+      uint32_t packed[4];
+      isl_color_value_pack(&params.src.clear_color,
+                           params.src.surf.format, packed);
+      isl_color_value_unpack(&params.src.clear_color,
+                             params.src.view.format, packed);
    }
 
    if (params.dst.aux_usage == ISL_AUX_USAGE_CCS_E) {
@@ -2606,8 +2540,11 @@ blorp_copy(struct blorp_batch *batch,
       assert(isl_formats_are_ccs_e_compatible(batch->blorp->isl_dev->info,
                                               linear_dst_format,
                                               params.dst.view.format));
-      params.dst.clear_color =
-         bitcast_color_value_to_uint(params.dst.clear_color, dst_fmtl);
+      uint32_t packed[4];
+      isl_color_value_pack(&params.dst.clear_color,
+                           params.dst.surf.format, packed);
+      isl_color_value_unpack(&params.dst.clear_color,
+                             params.dst.view.format, packed);
    }
 
    wm_prog_key.src_bpc =
-- 
2.5.0.400.gff86faf



More information about the mesa-dev mailing list