diff --git a/src/gbm/backends/dri/gbm_dri.c b/src/gbm/backends/dri/gbm_dri.c index ac7ede87b64..3faa19e3f19 100644 --- a/src/gbm/backends/dri/gbm_dri.c +++ b/src/gbm/backends/dri/gbm_dri.c @@ -29,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -795,6 +796,31 @@ gbm_dri_bo_import(struct gbm_device *gbm, return &bo->base.base; } +static bool +is_planar_format(uint32_t format) +{ + switch (format) { + case GBM_FORMAT_NV12: + case GBM_FORMAT_NV21: + case GBM_FORMAT_NV16: + case GBM_FORMAT_NV61: + case GBM_FORMAT_YUV410: + case GBM_FORMAT_YVU410: + case GBM_FORMAT_YUV411: + case GBM_FORMAT_YVU411: + case GBM_FORMAT_YUV420: + case GBM_FORMAT_YVU420: + case GBM_FORMAT_YUV422: + case GBM_FORMAT_YVU422: + case GBM_FORMAT_YUV444: + case GBM_FORMAT_YVU444: + return true; + default: + return false; + } + +} + static struct gbm_bo * create_dumb(struct gbm_device *gbm, uint32_t width, uint32_t height, @@ -816,6 +842,11 @@ create_dumb(struct gbm_device *gbm, return NULL; } + if (is_planar_format(format)) { + errno = EINVAL; + return NULL; + } + bo = calloc(1, sizeof *bo); if (bo == NULL) return NULL;