diff options
author | Jason Ekstrand <[email protected]> | 2018-06-06 10:36:08 -0700 |
---|---|---|
committer | Jason Ekstrand <[email protected]> | 2018-06-07 11:23:34 -0700 |
commit | e0fa2399628b8cfa06785647c2750b3c206e6563 (patch) | |
tree | 8ba7501f007700d2cfb3903a6403b8d742ef0612 | |
parent | 0e7f3febf7e739c075a139ae641d65a0618752f3 (diff) |
i965/screen: Sanity check that all formats we advertise are useable
Reviewed-by: Lionel Landwerlin <[email protected]>
-rw-r--r-- | src/mesa/drivers/dri/i965/intel_screen.c | 24 |
1 files 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 fe18eae17ef..cb357419a77 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++) { |