diff --git a/util/display-kms.c b/util/display-kms.c
index 35e9a3d43c1afe69281ec98889d77cd074a999b9..b9cdc4e7af2dca3985adc14ad213f4eccbbe08ff 100644 (file)
--- a/util/display-kms.c
+++ b/util/display-kms.c
if (bo) {
*bo_handle = omap_bo_handle(bo);
*pitch = width * bpp / 8;
+ if (bo_flags & OMAP_BO_TILED)
+ *pitch = ALIGN2(*pitch, PAGE_SHIFT);
}
return bo;
buf->fourcc = fourcc;
buf->width = w;
buf->height = h;
+ buf->multiplanar = true;
buf->nbo = 1;
&bo_handles[0], &buf->pitches[0]);
break;
case FOURCC('N','V','1','2'):
- buf->nbo = 2;
- buf->bo[0] = alloc_bo(disp, 8, buf->width, buf->height,
- &bo_handles[0], &buf->pitches[0]);
- buf->bo[1] = alloc_bo(disp, 16, buf->width/2, buf->height/2,
- &bo_handles[1], &buf->pitches[1]);
+ if (disp->multiplanar) {
+ buf->nbo = 2;
+ buf->bo[0] = alloc_bo(disp, 8, buf->width, buf->height,
+ &bo_handles[0], &buf->pitches[0]);
+ buf->bo[1] = alloc_bo(disp, 16, buf->width/2, buf->height/2,
+ &bo_handles[1], &buf->pitches[1]);
+ } else {
+ buf->nbo = 1;
+ buf->bo[0] = alloc_bo(disp, 8, buf->width, buf->height * 3 / 2,
+ &bo_handles[0], &buf->pitches[0]);
+ bo_handles[1] = bo_handles[0];
+ buf->pitches[1] = buf->pitches[0];
+ offsets[1] = buf->width * buf->height;
+ buf->multiplanar = false;
+ }
break;
case FOURCC('I','4','2','0'):
buf->nbo = 3;
return ret;
}
+static void
+close_kms(struct display *disp)
+{
+}
+
static void
connector_find_mode(struct display *disp, struct connector *c)
{
disp_kms_usage(void)
{
MSG("KMS Display Options:");
+ MSG("\t-1 \t\tforce single-plane buffers");
MSG("\t-t <tiled-mode>\t8, 16, 32, or auto");
MSG("\t-s <connector_id>:<mode>\tset a mode");
MSG("\t-s <connector_id>@<crtc_id>:<mode>\tset a mode");
disp->get_vid_buffers = get_vid_buffers;
disp->post_buffer = post_buffer;
disp->post_vid_buffer = post_vid_buffer;
+ disp->close = close_kms;
disp_kms->resources = drmModeGetResources(disp->fd);
if (!disp_kms->resources) {
goto fail;
}
+ disp->multiplanar = true;
+
/* note: set args to NULL after we've parsed them so other modules know
* that it is already parsed (since the arg parsing is decentralized)
*/
if (!argv[i]) {
continue;
}
- if (!strcmp("-t", argv[i])) {
+ if (!strcmp("-1", argv[i])) {
+ disp->multiplanar = false;
+ } else if (!strcmp("-t", argv[i])) {
int n;
argv[i++] = NULL;
if (!strcmp(argv[i], "auto")) {
ERROR("invalid arg: %s", argv[i]);
goto fail;
}
+ disp_kms->bo_flags |= OMAP_BO_SCANOUT;
} else {
/* ignore */
continue;
}
}
- MSG("using %d connectors, %dx%d display",
- disp_kms->connectors_count, disp->width, disp->height);
+ MSG("using %d connectors, %dx%d display, multiplanar: %d",
+ disp_kms->connectors_count, disp->width, disp->height, disp->multiplanar);
return disp;