mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-23 16:00:41 +02:00
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: Emil Velikov <emil.l.velikov@gmail.com> Reviewed-by: Kristian Høgsberg <krh@bitplanet.net>
This commit is contained in:
parent
a26e82b81d
commit
4bf151e662
1 changed files with 17 additions and 1 deletions
|
|
@ -706,14 +706,30 @@ gbm_dri_bo_import(struct gbm_device *gbm,
|
|||
{
|
||||
struct gbm_import_fd_data *fd_data = buffer;
|
||||
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,
|
||||
fd_data->width,
|
||||
fd_data->height,
|
||||
fd_data->format,
|
||||
dri_format,
|
||||
&fd_data->fd, 1,
|
||||
&stride, &offset,
|
||||
NULL);
|
||||
if (image == NULL) {
|
||||
errno = EINVAL;
|
||||
return NULL;
|
||||
}
|
||||
gbm_format = fd_data->format;
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue