Skip to content
Snippets Groups Projects
Commit a9df9b18 authored by Ray Strode's avatar Ray Strode Committed by Emil Velikov
Browse files

gbm: convert gbm bo format to fourcc format on dma-buf import

At the moment if a gbm buffer is imported and the gbm buffer
has an old-style GBM_BO_FORMAT format, the import will crash,
since it's passed directly to DRI functions that expect
a fourcc format (as provided by the newer GBM_FORMAT
definitions)

This commit addresses the problem in two ways:

1) it prevents invalid formats from leading to a crash by
returning EINVAL if the image couldn't be created

2) it translates GBM_BO_FORMAT formats into the comparable
GBM_FORMAT formats.

Reference: https://bugzilla.gnome.org/show_bug.cgi?id=753531


CC: "10.6 11.0" <mesa-stable@lists.freedesktop.org>
Reviewed-by: default avatarEmil Velikov <emil.l.velikov@gmail.com>
Reviewed-by: default avatarKristian Høgsberg <krh@bitplanet.net>
(cherry picked from commit 4bf151e6)
parent a6714a9a
No related branches found
No related tags found
No related merge requests found
...@@ -706,14 +706,30 @@ gbm_dri_bo_import(struct gbm_device *gbm, ...@@ -706,14 +706,30 @@ gbm_dri_bo_import(struct gbm_device *gbm,
{ {
struct gbm_import_fd_data *fd_data = buffer; struct gbm_import_fd_data *fd_data = buffer;
int stride = fd_data->stride, offset = 0; int stride = fd_data->stride, offset = 0;
int dri_format;
switch (fd_data->format) {
case GBM_BO_FORMAT_XRGB8888:
dri_format = GBM_FORMAT_XRGB8888;
break;
case GBM_BO_FORMAT_ARGB8888:
dri_format = GBM_FORMAT_ARGB8888;
break;
default:
dri_format = fd_data->format;
}
image = dri->image->createImageFromFds(dri->screen, image = dri->image->createImageFromFds(dri->screen,
fd_data->width, fd_data->width,
fd_data->height, fd_data->height,
fd_data->format, dri_format,
&fd_data->fd, 1, &fd_data->fd, 1,
&stride, &offset, &stride, &offset,
NULL); NULL);
if (image == NULL) {
errno = EINVAL;
return NULL;
}
gbm_format = fd_data->format; gbm_format = fd_data->format;
break; break;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment