Here's a diff I can roll in if it looks ok. It adds the ability to specify multiple handles for a single fb to better accommodate planar configs. I think Rob has convinced me that this is a good idea... comments appreciated. Thanks, Jesse diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index a30b9d4..0cc2077 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c @@ -1923,7 +1923,8 @@ int drm_mode_addfb(struct drm_device *dev, r.bpp = or->bpp; r.depth = or->depth; r.pixel_format = 0; - r.handle = or->handle; + r.handle_count = 1; + r.handles = (u64)&or->handle; if (!drm_core_check_feature(dev, DRIVER_MODESET)) return -EINVAL; diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index cd7e04d..2c7f200 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -7619,8 +7619,9 @@ intel_user_framebuffer_create(struct drm_device *dev, struct drm_mode_fb_cmd2 *mode_cmd) { struct drm_i915_gem_object *obj; + u32 *handles = (u32 *)mode_cmd->handles; - obj = to_intel_bo(drm_gem_object_lookup(dev, filp, mode_cmd->handle)); + obj = to_intel_bo(drm_gem_object_lookup(dev, filp, handles[0])); if (&obj->base == NULL) return ERR_PTR(-ENOENT); diff --git a/drivers/gpu/drm/nouveau/nouveau_display.c b/drivers/gpu/drm/nouveau/nouveau_display.c index 7a428a9..cb9b868 100644 --- a/drivers/gpu/drm/nouveau/nouveau_display.c +++ b/drivers/gpu/drm/nouveau/nouveau_display.c @@ -128,9 +128,10 @@ nouveau_user_framebuffer_create(struct drm_device *dev, { struct nouveau_framebuffer *nouveau_fb; struct drm_gem_object *gem; + u32 *handles = (u32 *)mode_cmd->handles; int ret; - gem = drm_gem_object_lookup(dev, file_priv, mode_cmd->handle); + gem = drm_gem_object_lookup(dev, file_priv, handles); if (!gem) return ERR_PTR(-ENOENT); diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c index ae803f8..63a6d91 100644 --- a/drivers/gpu/drm/radeon/radeon_display.c +++ b/drivers/gpu/drm/radeon/radeon_display.c @@ -1128,11 +1128,12 @@ radeon_user_framebuffer_create(struct drm_device *dev, { struct drm_gem_object *obj; struct radeon_framebuffer *radeon_fb; + u32 *handles = (u32 *)mode_cmd->handles; - obj = drm_gem_object_lookup(dev, file_priv, mode_cmd->handle); + obj = drm_gem_object_lookup(dev, file_priv, handles[0]); if (obj == NULL) { dev_err(&dev->pdev->dev, "No GEM object associated to handle 0x%08X, " - "can't create framebuffer\n", mode_cmd->handle); + "can't create framebuffer\n", handles[0]); return ERR_PTR(-ENOENT); } diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c index 2a1b802..0ad7456 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c @@ -866,7 +866,7 @@ static struct drm_framebuffer *vmw_kms_fb_create(struct drm_device *dev, */ ret = vmw_user_surface_lookup_handle(dev_priv, tfile, - mode_cmd->handle, &surface); + mode_cmd->handles[0], &surface); if (ret) goto try_dmabuf; diff --git a/drivers/staging/gma500/framebuffer.c b/drivers/staging/gma500/framebuffer.c index 85f47d5..ee91ffe 100644 --- a/drivers/staging/gma500/framebuffer.c +++ b/drivers/staging/gma500/framebuffer.c @@ -496,7 +496,7 @@ static struct drm_framebuffer *psb_user_framebuffer_create * Find the GEM object and thus the gtt range object that is * to back this space */ - obj = drm_gem_object_lookup(dev, filp, cmd->handle); + obj = drm_gem_object_lookup(dev, filp, cmd->handles[0]); if (obj == NULL) return ERR_PTR(-ENOENT); diff --git a/include/drm/drm_mode.h b/include/drm/drm_mode.h index 34a0d22..dafe8df 100644 --- a/include/drm/drm_mode.h +++ b/include/drm/drm_mode.h @@ -272,8 +272,9 @@ struct drm_mode_fb_cmd2 { __u32 bpp; __u32 depth; __u32 pixel_format; /* fourcc code from videodev2.h */ - /* driver specific handle */ - __u32 handle; + __u32 handle_count; + /* driver specific buffer object handle array */ + __u64 handles; }; #define DRM_MODE_FB_DIRTY_ANNOTATE_COPY 0x01 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel