};
static const __DRIimageLoaderExtension image_loader_extension = {
- { __DRI_IMAGE_LOADER, 1 },
- image_get_buffers,
- dri_flush_front_buffer,
+ .base = { __DRI_IMAGE_LOADER, 1 },
+
+ .getBuffers = image_get_buffers,
+ .flushFrontBuffer = dri_flush_front_buffer,
};
return 0;
}
+static int
+gbm_dri_bo_get_fd(struct gbm_bo *_bo)
+{
+ struct gbm_dri_device *dri = gbm_dri_device(_bo->gbm);
+ struct gbm_dri_bo *bo = gbm_dri_bo(_bo);
+ int fd;
+
+ if (bo->image == NULL)
+ return -1;
+
+ dri->image->queryImage(bo->image, __DRI_IMAGE_ATTRIB_FD, &fd);
+
+ return fd;
+}
+
static void
gbm_dri_bo_destroy(struct gbm_bo *_bo)
{
dri_format = __DRI_IMAGE_FORMAT_XRGB2101010;
break;
default:
- return NULL;
+ goto failed;
}
if (usage & GBM_BO_USE_SCANOUT)
dri_format, dri_use,
bo);
if (bo->image == NULL)
- return NULL;
+ goto failed;
dri->image->queryImage(bo->image, __DRI_IMAGE_ATTRIB_HANDLE,
&bo->base.base.handle.s32);
(int *) &bo->base.base.stride);
return &bo->base.base;
+
+failed:
+ free(bo);
+ return NULL;
}
static struct gbm_surface *
dri->base.base.bo_import = gbm_dri_bo_import;
dri->base.base.is_format_supported = gbm_dri_is_format_supported;
dri->base.base.bo_write = gbm_dri_bo_write;
+ dri->base.base.bo_get_fd = gbm_dri_bo_get_fd;
dri->base.base.bo_destroy = gbm_dri_bo_destroy;
dri->base.base.destroy = dri_destroy;
dri->base.base.surface_create = gbm_dri_surface_create;