We want this so we can hand out CPU-mappable buffers to clients, but still use EGL in the server to composite said buffers. --- src/gbm/backends/dri/gbm_dri.c | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-)
diff --git a/src/gbm/backends/dri/gbm_dri.c b/src/gbm/backends/dri/gbm_dri.c index 8b71cca..8ca7b54 100644 --- a/src/gbm/backends/dri/gbm_dri.c +++ b/src/gbm/backends/dri/gbm_dri.c @@ -318,9 +318,9 @@ gbm_dri_bo_destroy(struct gbm_bo *_bo) struct gbm_dri_bo *bo = gbm_dri_bo(_bo); struct drm_mode_destroy_dumb arg; - if (bo->image != NULL) { + if (bo->image) dri->image->destroyImage(bo->image); - } else { + if (bo->map) { munmap(bo->map, bo->size); memset(&arg, 0, sizeof(arg)); arg.handle = bo->handle; @@ -532,6 +532,25 @@ create_dumb(struct gbm_device *gbm, if (bo->map == MAP_FAILED) goto destroy_dumb; + if (usage & GBM_BO_USE_RENDERING) + { + struct drm_gem_flink flink_arg; + memset(&flink_arg, 0, sizeof(flink_arg)); + flink_arg.handle = bo->handle; + ret = drmIoctl(dri->base.base.fd, DRM_IOCTL_GEM_FLINK, &flink_arg); + if (ret) + goto destroy_dumb; + + bo->image = dri->image->createImageFromName(dri->screen, + width, height, + gbm_to_dri_format(format), + flink_arg.name, + bo->base.base.stride / 4, + bo); + + if (!bo->image) + goto destroy_dumb; + } return &bo->base.base; destroy_dumb: -- 1.8.3.2 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev