diff --git a/util/display-kms.c b/util/display-kms.c
index c15bf79a6c8c717dcea24a83a497a1493501cbab..b9cdc4e7af2dca3985adc14ad213f4eccbbe08ff 100644 (file)
--- a/util/display-kms.c
+++ b/util/display-kms.c
&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;
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");
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")) {
disp->width = 0;
disp->height = 0;
- disp->multiplanar = true;
for (i = 0; i < (int)disp_kms->connectors_count; i++) {
struct connector *c = &disp_kms->connector[i];
connector_find_mode(disp, c);