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
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-dev