diff options
author | Ben Widawsky <[email protected]> | 2017-03-07 15:06:23 -0800 |
---|---|---|
committer | Ben Widawsky <[email protected]> | 2017-03-09 15:35:44 -0800 |
commit | 770b06588f79abe44d4fa1128759c45d0496362e (patch) | |
tree | f8d83e31fc3740102dfb15588b8b08286968bf29 /src/gbm | |
parent | 29e2ba0756d0cfaef8658b38f2c7bc9fd45a2466 (diff) |
gbm: Explicitly disallow a planar dumb BO
As more GBM functionality support planes is being evaluated, it becomes
clear that a dumb bo can never actually be planar. It's questionable
whether it was ever feasible to do this, and later functionality will
implicitly assume a dumb BO is non-planar.
v2: Include stdbool.h
Signed-off-by: Ben Widawsky <[email protected]>
Acked-by: Daniel Stone <[email protected]>
Diffstat (limited to 'src/gbm')
-rw-r--r-- | src/gbm/backends/dri/gbm_dri.c | 31 |
1 files changed, 31 insertions, 0 deletions
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 <stdlib.h> #include <stddef.h> #include <stdint.h> +#include <stdbool.h> #include <string.h> #include <errno.h> #include <limits.h> @@ -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; |