diff options
author | Gurchetan Singh <gurchetansingh@chromium.org> | 2016-11-02 10:40:51 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2016-11-19 03:18:21 -0800 |
commit | 2a119342ee6f057b1ec28d1ff6ebd70d42511a3f (patch) | |
tree | 7885f1eb23ea0b5deec8a5f6d5faa5ddda3b5159 /gbm.c | |
parent | fe46031f72c987dada675eff49e2bde3a214cbca (diff) |
minigbm: Fix incorrect plane import size
We were incorrectly determining the plane size for buffers with
vertical subsampling. Let's add it here.
BUG=chromium:618516
TEST=graphics_Gbm still passes
Change-Id: I47f3c01dfd2539fc669a017ecb497d754d29de9f
Reviewed-on: https://chromium-review.googlesource.com/406485
Commit-Ready: Gurchetan Singh <gurchetansingh@chromium.org>
Tested-by: Gurchetan Singh <gurchetansingh@chromium.org>
Reviewed-by: Stéphane Marchesin <marcheu@chromium.org>
Diffstat (limited to 'gbm.c')
-rw-r--r-- | gbm.c | 20 |
1 files changed, 16 insertions, 4 deletions
@@ -160,7 +160,7 @@ gbm_bo_import(struct gbm_device *gbm, uint32_t type, struct gbm_import_fd_data *fd_data = buffer; struct gbm_import_fd_planar_data *fd_planar_data = buffer; uint32_t gbm_format; - int i; + size_t num_planes, i; memset(&drv_data, 0, sizeof(drv_data)); @@ -179,15 +179,27 @@ gbm_bo_import(struct gbm_device *gbm, uint32_t type, drv_data.width = fd_planar_data->width; drv_data.height = fd_planar_data->height; drv_data.format = gbm_convert_format(fd_planar_data->format); - for (i = 0; i < GBM_MAX_PLANES; i++) { + num_planes = drv_num_planes_from_format(drv_data.format); + + assert(num_planes); + + for (i = 0; i < num_planes; i++) { drv_data.fds[i] = fd_planar_data->fds[i]; drv_data.offsets[i] = fd_planar_data->offsets[i]; drv_data.strides[i] = fd_planar_data->strides[i]; - drv_data.sizes[i] = fd_planar_data->height * - fd_planar_data->strides[i]; drv_data.format_modifiers[i] = fd_planar_data->format_modifiers[i]; + + drv_data.sizes[i] = drv_size_from_format( + drv_data.format, + drv_data.strides[i], + drv_data.height, + i); } + + for (i = num_planes; i < GBM_MAX_PLANES; i++) + drv_data.fds[i] = -1; + break; default: return NULL; |