Module: Mesa
Branch: master
Commit: e0fa2399628b8cfa06785647c2750b3c206e6563
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=e0fa2399628b8cfa06785647c2750b3c206e6563

Author: Jason Ekstrand <[email protected]>
Date:   Wed Jun  6 10:36:08 2018 -0700

i965/screen: Sanity check that all formats we advertise are useable

Reviewed-by: Lionel Landwerlin <[email protected]>

---

 src/mesa/drivers/dri/i965/intel_screen.c | 24 ++++++++++++++++++++----
 1 file changed, 20 insertions(+), 4 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/intel_screen.c 
b/src/mesa/drivers/dri/i965/intel_screen.c
index fe18eae17e..cb357419a7 100644
--- a/src/mesa/drivers/dri/i965/intel_screen.c
+++ b/src/mesa/drivers/dri/i965/intel_screen.c
@@ -1272,23 +1272,39 @@ intel_create_image_from_dma_bufs(__DRIscreen 
*dri_screen,
 }
 
 static bool
-intel_image_format_is_supported(const struct intel_image_format *fmt)
+intel_image_format_is_supported(const struct gen_device_info *devinfo,
+                                const struct intel_image_format *fmt)
 {
    if (fmt->fourcc == __DRI_IMAGE_FOURCC_SARGB8888 ||
        fmt->fourcc == __DRI_IMAGE_FOURCC_SABGR8888)
       return false;
 
+#ifndef NDEBUG
+   if (fmt->nplanes == 1) {
+      mesa_format format = driImageFormatToGLFormat(fmt->planes[0].dri_format);
+      /* The images we will create are actually based on the RGBA non-sRGB
+       * version of the format.
+       */
+      format = _mesa_format_fallback_rgbx_to_rgba(format);
+      format = _mesa_get_srgb_format_linear(format);
+      enum isl_format isl_format = brw_isl_format_for_mesa_format(format);
+      assert(isl_format_supports_rendering(devinfo, isl_format));
+   }
+#endif
+
    return true;
 }
 
 static GLboolean
-intel_query_dma_buf_formats(__DRIscreen *screen, int max,
+intel_query_dma_buf_formats(__DRIscreen *_screen, int max,
                             int *formats, int *count)
 {
+   struct intel_screen *screen = _screen->driverPrivate;
    int num_formats = 0, i;
 
    for (i = 0; i < ARRAY_SIZE(intel_image_formats); i++) {
-      if (!intel_image_format_is_supported(&intel_image_formats[i]))
+      if (!intel_image_format_is_supported(&screen->devinfo,
+                                           &intel_image_formats[i]))
          continue;
 
       num_formats++;
@@ -1318,7 +1334,7 @@ intel_query_dma_buf_modifiers(__DRIscreen *_screen, int 
fourcc, int max,
    if (f == NULL)
       return false;
 
-   if (!intel_image_format_is_supported(f))
+   if (!intel_image_format_is_supported(&screen->devinfo, f))
       return false;
 
    for (i = 0; i < ARRAY_SIZE(supported_modifiers); i++) {

_______________________________________________
mesa-commit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to