[Mesa-dev] [PATCH 30/32] intel/blorp: Allow blorp_copy on sRGB formats

Jason Ekstrand jason at jlekstrand.net
Wed Jul 19 21:01:56 UTC 2017


---
 src/intel/blorp/blorp_blit.c | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/src/intel/blorp/blorp_blit.c b/src/intel/blorp/blorp_blit.c
index 973e3ef..91d2a22 100644
--- a/src/intel/blorp/blorp_blit.c
+++ b/src/intel/blorp/blorp_blit.c
@@ -2459,16 +2459,30 @@ blorp_copy(struct blorp_batch *batch,
    }
 
    if (params.src.aux_usage == ISL_AUX_USAGE_CCS_E) {
+      /* It's safe to do a blorp_copy between things which are sRGB with CCS_E
+       * enabled even though CCS_E doesn't technically do sRGB on SKL because
+       * we stomp everything to UINT anyway.  The one thing we have to be
+       * careful of is clear colors.  Because fast clear colors for sRGB on
+       * gen9 are encoded as the float values between format conversion and
+       * sRGB curve application, a given clear color float will convert to the
+       * same bits regardless of whether the format is UNORM or sRGB.
+       * Therefore, we can handle sRGB without any special cases.
+       */
+      UNUSED enum isl_format linear_src_format =
+         isl_format_srgb_to_linear(src_surf->surf->format);
       assert(isl_formats_are_ccs_e_compatible(batch->blorp->isl_dev->info,
-                                              src_surf->surf->format,
+                                              linear_src_format,
                                               params.src.view.format));
       params.src.clear_color =
          bitcast_color_value_to_uint(params.src.clear_color, src_fmtl);
    }
 
    if (params.dst.aux_usage == ISL_AUX_USAGE_CCS_E) {
+      /* See above where we handle linear_src_format */
+      UNUSED enum isl_format linear_dst_format =
+         isl_format_srgb_to_linear(dst_surf->surf->format);
       assert(isl_formats_are_ccs_e_compatible(batch->blorp->isl_dev->info,
-                                              dst_surf->surf->format,
+                                              linear_dst_format,
                                               params.dst.view.format));
       params.dst.clear_color =
          bitcast_color_value_to_uint(params.dst.clear_color, dst_fmtl);
-- 
2.5.0.400.gff86faf



More information about the mesa-dev mailing list