mirror of https://gitee.com/openkylin/linux.git
drm/client: Add drm_client_framebuffer_flush()
Some drivers need explicit flushing of buffer changes, add a function that does that. v2: - Put all clip rect stuff inside if statement (Sam) Reviewed-by: Sam Ravnborg <sam@ravnborg.org> Signed-off-by: Noralf Trønnes <noralf@tronnes.org> Link: https://patchwork.freedesktop.org/patch/msgid/20200509141619.32970-4-noralf@tronnes.org
This commit is contained in:
parent
8f6f5e00e5
commit
c9c03e3cf0
|
@ -437,6 +437,39 @@ void drm_client_framebuffer_delete(struct drm_client_buffer *buffer)
|
|||
}
|
||||
EXPORT_SYMBOL(drm_client_framebuffer_delete);
|
||||
|
||||
/**
|
||||
* drm_client_framebuffer_flush - Manually flush client framebuffer
|
||||
* @buffer: DRM client buffer (can be NULL)
|
||||
* @rect: Damage rectangle (if NULL flushes all)
|
||||
*
|
||||
* This calls &drm_framebuffer_funcs->dirty (if present) to flush buffer changes
|
||||
* for drivers that need it.
|
||||
*
|
||||
* Returns:
|
||||
* Zero on success or negative error code on failure.
|
||||
*/
|
||||
int drm_client_framebuffer_flush(struct drm_client_buffer *buffer, struct drm_rect *rect)
|
||||
{
|
||||
if (!buffer || !buffer->fb || !buffer->fb->funcs->dirty)
|
||||
return 0;
|
||||
|
||||
if (rect) {
|
||||
struct drm_clip_rect clip = {
|
||||
.x1 = rect->x1,
|
||||
.y1 = rect->y1,
|
||||
.x2 = rect->x2,
|
||||
.y2 = rect->y2,
|
||||
};
|
||||
|
||||
return buffer->fb->funcs->dirty(buffer->fb, buffer->client->file,
|
||||
0, 0, &clip, 1);
|
||||
}
|
||||
|
||||
return buffer->fb->funcs->dirty(buffer->fb, buffer->client->file,
|
||||
0, 0, NULL, 0);
|
||||
}
|
||||
EXPORT_SYMBOL(drm_client_framebuffer_flush);
|
||||
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
static int drm_client_debugfs_internal_clients(struct seq_file *m, void *data)
|
||||
{
|
||||
|
|
|
@ -154,6 +154,7 @@ struct drm_client_buffer {
|
|||
struct drm_client_buffer *
|
||||
drm_client_framebuffer_create(struct drm_client_dev *client, u32 width, u32 height, u32 format);
|
||||
void drm_client_framebuffer_delete(struct drm_client_buffer *buffer);
|
||||
int drm_client_framebuffer_flush(struct drm_client_buffer *buffer, struct drm_rect *rect);
|
||||
void *drm_client_buffer_vmap(struct drm_client_buffer *buffer);
|
||||
void drm_client_buffer_vunmap(struct drm_client_buffer *buffer);
|
||||
|
||||
|
|
Loading…
Reference in New Issue