mirror of https://gitee.com/openkylin/linux.git
drm/gem-fb-helper: Add drm_gem_fb_create_with_dirty()
This adds a .fb_create helper that sets the .dirty callback to drm_atomic_helper_dirtyfb(). v2: Improve docs (Daniel) Signed-off-by: Noralf Trønnes <noralf@tronnes.org> Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch> Reviewed-by: Sam Ravnborg <sam@ravnborg.org> Link: https://patchwork.freedesktop.org/patch/msgid/20190115043643.2364-2-noralf@tronnes.org
This commit is contained in:
parent
2de304b44d
commit
dbd62e16fd
|
@ -17,6 +17,7 @@
|
||||||
#include <drm/drmP.h>
|
#include <drm/drmP.h>
|
||||||
#include <drm/drm_atomic.h>
|
#include <drm/drm_atomic.h>
|
||||||
#include <drm/drm_atomic_uapi.h>
|
#include <drm/drm_atomic_uapi.h>
|
||||||
|
#include <drm/drm_damage_helper.h>
|
||||||
#include <drm/drm_fb_helper.h>
|
#include <drm/drm_fb_helper.h>
|
||||||
#include <drm/drm_fourcc.h>
|
#include <drm/drm_fourcc.h>
|
||||||
#include <drm/drm_framebuffer.h>
|
#include <drm/drm_framebuffer.h>
|
||||||
|
@ -136,10 +137,9 @@ EXPORT_SYMBOL(drm_gem_fb_create_handle);
|
||||||
* @mode_cmd: Metadata from the userspace framebuffer creation request
|
* @mode_cmd: Metadata from the userspace framebuffer creation request
|
||||||
* @funcs: vtable to be used for the new framebuffer object
|
* @funcs: vtable to be used for the new framebuffer object
|
||||||
*
|
*
|
||||||
* This can be used to set &drm_framebuffer_funcs for drivers that need the
|
* This function can be used to set &drm_framebuffer_funcs for drivers that need
|
||||||
* &drm_framebuffer_funcs.dirty callback. Use drm_gem_fb_create() if you don't
|
* custom framebuffer callbacks. Use drm_gem_fb_create() if you don't need to
|
||||||
* need to change &drm_framebuffer_funcs.
|
* change &drm_framebuffer_funcs. The function does buffer size validation.
|
||||||
* The function does buffer size validation.
|
|
||||||
*
|
*
|
||||||
* Returns:
|
* Returns:
|
||||||
* Pointer to a &drm_framebuffer on success or an error pointer on failure.
|
* Pointer to a &drm_framebuffer on success or an error pointer on failure.
|
||||||
|
@ -215,8 +215,8 @@ static const struct drm_framebuffer_funcs drm_gem_fb_funcs = {
|
||||||
*
|
*
|
||||||
* If your hardware has special alignment or pitch requirements these should be
|
* If your hardware has special alignment or pitch requirements these should be
|
||||||
* checked before calling this function. The function does buffer size
|
* checked before calling this function. The function does buffer size
|
||||||
* validation. Use drm_gem_fb_create_with_funcs() if you need to set
|
* validation. Use drm_gem_fb_create_with_dirty() if you need framebuffer
|
||||||
* &drm_framebuffer_funcs.dirty.
|
* flushing.
|
||||||
*
|
*
|
||||||
* Drivers can use this as their &drm_mode_config_funcs.fb_create callback.
|
* Drivers can use this as their &drm_mode_config_funcs.fb_create callback.
|
||||||
* The ADDFB2 IOCTL calls into this callback.
|
* The ADDFB2 IOCTL calls into this callback.
|
||||||
|
@ -233,6 +233,44 @@ drm_gem_fb_create(struct drm_device *dev, struct drm_file *file,
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(drm_gem_fb_create);
|
EXPORT_SYMBOL_GPL(drm_gem_fb_create);
|
||||||
|
|
||||||
|
static const struct drm_framebuffer_funcs drm_gem_fb_funcs_dirtyfb = {
|
||||||
|
.destroy = drm_gem_fb_destroy,
|
||||||
|
.create_handle = drm_gem_fb_create_handle,
|
||||||
|
.dirty = drm_atomic_helper_dirtyfb,
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* drm_gem_fb_create_with_dirty() - Helper function for the
|
||||||
|
* &drm_mode_config_funcs.fb_create callback
|
||||||
|
* @dev: DRM device
|
||||||
|
* @file: DRM file that holds the GEM handle(s) backing the framebuffer
|
||||||
|
* @mode_cmd: Metadata from the userspace framebuffer creation request
|
||||||
|
*
|
||||||
|
* This function creates a new framebuffer object described by
|
||||||
|
* &drm_mode_fb_cmd2. This description includes handles for the buffer(s)
|
||||||
|
* backing the framebuffer. drm_atomic_helper_dirtyfb() is used for the dirty
|
||||||
|
* callback giving framebuffer flushing through the atomic machinery. Use
|
||||||
|
* drm_gem_fb_create() if you don't need the dirty callback.
|
||||||
|
* The function does buffer size validation.
|
||||||
|
*
|
||||||
|
* Drivers should also call drm_plane_enable_fb_damage_clips() on all planes
|
||||||
|
* to enable userspace to use damage clips also with the ATOMIC IOCTL.
|
||||||
|
*
|
||||||
|
* Drivers can use this as their &drm_mode_config_funcs.fb_create callback.
|
||||||
|
* The ADDFB2 IOCTL calls into this callback.
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* Pointer to a &drm_framebuffer on success or an error pointer on failure.
|
||||||
|
*/
|
||||||
|
struct drm_framebuffer *
|
||||||
|
drm_gem_fb_create_with_dirty(struct drm_device *dev, struct drm_file *file,
|
||||||
|
const struct drm_mode_fb_cmd2 *mode_cmd)
|
||||||
|
{
|
||||||
|
return drm_gem_fb_create_with_funcs(dev, file, mode_cmd,
|
||||||
|
&drm_gem_fb_funcs_dirtyfb);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(drm_gem_fb_create_with_dirty);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* drm_gem_fb_prepare_fb() - Prepare a GEM backed framebuffer
|
* drm_gem_fb_prepare_fb() - Prepare a GEM backed framebuffer
|
||||||
* @plane: Plane
|
* @plane: Plane
|
||||||
|
|
|
@ -25,6 +25,9 @@ drm_gem_fb_create_with_funcs(struct drm_device *dev, struct drm_file *file,
|
||||||
struct drm_framebuffer *
|
struct drm_framebuffer *
|
||||||
drm_gem_fb_create(struct drm_device *dev, struct drm_file *file,
|
drm_gem_fb_create(struct drm_device *dev, struct drm_file *file,
|
||||||
const struct drm_mode_fb_cmd2 *mode_cmd);
|
const struct drm_mode_fb_cmd2 *mode_cmd);
|
||||||
|
struct drm_framebuffer *
|
||||||
|
drm_gem_fb_create_with_dirty(struct drm_device *dev, struct drm_file *file,
|
||||||
|
const struct drm_mode_fb_cmd2 *mode_cmd);
|
||||||
|
|
||||||
int drm_gem_fb_prepare_fb(struct drm_plane *plane,
|
int drm_gem_fb_prepare_fb(struct drm_plane *plane,
|
||||||
struct drm_plane_state *state);
|
struct drm_plane_state *state);
|
||||||
|
|
Loading…
Reference in New Issue