uterm: video: return information for all buffers on get_buffers()
This renames get_buffer() to get_buffers() and returns back _and_ front buffer to the application. This allows the application to create supplemantal data for the buffers and manage it themself. This data _must_ stay the same as long an activation-period of a display so users can rely on the buffer information. Also all information for back and front buffer is the same except for the data pointer (which is only the same for single-buffered FBs). Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This commit is contained in:
parent
a67f02cf21
commit
0b25c9f68a
@ -430,12 +430,12 @@ static int display_set_dpms(struct uterm_display *disp, int state)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int display_get_buffer(struct uterm_display *disp,
|
||||
struct uterm_video_buffer *buffer,
|
||||
unsigned int formats)
|
||||
static int display_get_buffers(struct uterm_display *disp,
|
||||
struct uterm_video_buffer *buffer,
|
||||
unsigned int formats)
|
||||
{
|
||||
struct fbdev_display *dfb = disp->data;
|
||||
unsigned int f = 0;
|
||||
unsigned int f = 0, i;
|
||||
|
||||
if (dfb->xrgb32)
|
||||
f = UTERM_FORMAT_XRGB32;
|
||||
@ -445,11 +445,16 @@ static int display_get_buffer(struct uterm_display *disp,
|
||||
if (!(formats & f))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
buffer->width = dfb->xres;
|
||||
buffer->height = dfb->yres;
|
||||
buffer->stride = dfb->stride;
|
||||
buffer->format = f;
|
||||
buffer->data = dfb->map;
|
||||
for (i = 0; i < 2; ++i) {
|
||||
buffer[i].width = dfb->xres;
|
||||
buffer[i].height = dfb->yres;
|
||||
buffer[i].stride = dfb->stride;
|
||||
buffer[i].format = f;
|
||||
if (!(disp->flags & DISPLAY_DBUF) || !i)
|
||||
buffer[i].data = dfb->map;
|
||||
else
|
||||
buffer[i].data = &dfb->map[dfb->yres * dfb->stride];
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -495,7 +500,7 @@ static const struct display_ops fbdev_display_ops = {
|
||||
.deactivate = display_deactivate,
|
||||
.set_dpms = display_set_dpms,
|
||||
.use = NULL,
|
||||
.get_buffer = display_get_buffer,
|
||||
.get_buffers = display_get_buffers,
|
||||
.swap = display_swap,
|
||||
.blit = uterm_fbdev_display_blit,
|
||||
.fake_blendv = uterm_fbdev_display_fake_blendv,
|
||||
|
@ -423,14 +423,14 @@ int uterm_display_use(struct uterm_display *disp)
|
||||
return VIDEO_CALL(disp->ops->use, -EOPNOTSUPP, disp);
|
||||
}
|
||||
|
||||
int uterm_display_get_buffer(struct uterm_display *disp,
|
||||
struct uterm_video_buffer *buffer,
|
||||
unsigned int formats)
|
||||
int uterm_display_get_buffers(struct uterm_display *disp,
|
||||
struct uterm_video_buffer *buffer,
|
||||
unsigned int formats)
|
||||
{
|
||||
if (!disp || !display_is_online(disp) || !buffer)
|
||||
return -EINVAL;
|
||||
|
||||
return VIDEO_CALL(disp->ops->get_buffer, -EOPNOTSUPP, disp, buffer,
|
||||
return VIDEO_CALL(disp->ops->get_buffers, -EOPNOTSUPP, disp, buffer,
|
||||
formats);
|
||||
}
|
||||
|
||||
|
@ -165,9 +165,9 @@ int uterm_display_set_dpms(struct uterm_display *disp, int state);
|
||||
int uterm_display_get_dpms(const struct uterm_display *disp);
|
||||
|
||||
int uterm_display_use(struct uterm_display *disp);
|
||||
int uterm_display_get_buffer(struct uterm_display *disp,
|
||||
struct uterm_video_buffer *buffer,
|
||||
unsigned int formats);
|
||||
int uterm_display_get_buffers(struct uterm_display *disp,
|
||||
struct uterm_video_buffer *buffer,
|
||||
unsigned int formats);
|
||||
int uterm_display_swap(struct uterm_display *disp, bool immediate);
|
||||
bool uterm_display_is_swapping(struct uterm_display *disp);
|
||||
|
||||
|
@ -819,7 +819,7 @@ static const struct display_ops drm_display_ops = {
|
||||
.deactivate = display_deactivate,
|
||||
.set_dpms = uterm_drm_display_set_dpms,
|
||||
.use = display_use,
|
||||
.get_buffer = NULL,
|
||||
.get_buffers = NULL,
|
||||
.swap = display_swap,
|
||||
.blit = display_blit,
|
||||
.fake_blendv = display_fake_blendv,
|
||||
|
@ -240,23 +240,25 @@ static void display_deactivate(struct uterm_display *disp)
|
||||
disp->current_mode = NULL;
|
||||
}
|
||||
|
||||
static int display_get_buffer(struct uterm_display *disp,
|
||||
struct uterm_video_buffer *buffer,
|
||||
unsigned int formats)
|
||||
static int display_get_buffers(struct uterm_display *disp,
|
||||
struct uterm_video_buffer *buffer,
|
||||
unsigned int formats)
|
||||
{
|
||||
struct uterm_drm2d_display *d2d = uterm_drm_display_get_data(disp);
|
||||
struct uterm_drm2d_rb *rb;
|
||||
int i;
|
||||
|
||||
if (!(formats & UTERM_FORMAT_XRGB32))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
rb = &d2d->rb[d2d->current_rb ^ 1];
|
||||
|
||||
buffer->width = uterm_drm_mode_get_width(disp->current_mode);
|
||||
buffer->height = uterm_drm_mode_get_height(disp->current_mode);
|
||||
buffer->stride = rb->stride;
|
||||
buffer->format = UTERM_FORMAT_XRGB32;
|
||||
buffer->data = rb->map;
|
||||
for (i = 0; i < 2; ++i) {
|
||||
rb = &d2d->rb[i];
|
||||
buffer[i].width = uterm_drm_mode_get_width(disp->current_mode);
|
||||
buffer[i].height = uterm_drm_mode_get_height(disp->current_mode);
|
||||
buffer[i].stride = rb->stride;
|
||||
buffer[i].format = UTERM_FORMAT_XRGB32;
|
||||
buffer[i].data = rb->map;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -448,7 +450,7 @@ static const struct display_ops dumb_display_ops = {
|
||||
.deactivate = display_deactivate,
|
||||
.set_dpms = uterm_drm_display_set_dpms,
|
||||
.use = NULL,
|
||||
.get_buffer = display_get_buffer,
|
||||
.get_buffers = display_get_buffers,
|
||||
.swap = display_swap,
|
||||
.blit = display_blit,
|
||||
.fake_blendv = display_fake_blendv,
|
||||
|
@ -54,9 +54,9 @@ struct display_ops {
|
||||
void (*deactivate) (struct uterm_display *disp);
|
||||
int (*set_dpms) (struct uterm_display *disp, int state);
|
||||
int (*use) (struct uterm_display *disp);
|
||||
int (*get_buffer) (struct uterm_display *disp,
|
||||
struct uterm_video_buffer *buffer,
|
||||
unsigned int formats);
|
||||
int (*get_buffers) (struct uterm_display *disp,
|
||||
struct uterm_video_buffer *buffer,
|
||||
unsigned int formats);
|
||||
int (*swap) (struct uterm_display *disp, bool immediate);
|
||||
int (*blit) (struct uterm_display *disp,
|
||||
const struct uterm_video_buffer *buf,
|
||||
|
Loading…
x
Reference in New Issue
Block a user