summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKrzysztof Halasa <khc@pm.waw.pl>2010-09-21 22:56:26 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2010-09-21 22:57:36 +0100
commitbfba6d6148b938588ffbefdf04f4e71683c66dfd (patch)
tree0b9926406b17bf530d42977cdc8d99c85dd40bce
parentf63c7df6866fed61551d39209b1a262e2a0c4b28 (diff)
Allow interlaced modes.
This may not the best method, but it should be a good base on which to build... Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r--src/intel_display.c1
-rw-r--r--src/intel_dri.c6
-rw-r--r--src/intel_video.c10
3 files changed, 15 insertions, 2 deletions
diff --git a/src/intel_display.c b/src/intel_display.c
index 5d85baa7..ffcdb739 100644
--- a/src/intel_display.c
+++ b/src/intel_display.c
@@ -1299,6 +1299,7 @@ intel_output_init(ScrnInfoPtr scrn, struct intel_mode *mode, int num)
output->possible_crtcs = kencoder->possible_crtcs;
output->possible_clones = kencoder->possible_clones;
+ output->interlaceAllowed = TRUE;
intel_output->output = output;
list_add(&intel_output->link, &mode->outputs);
diff --git a/src/intel_dri.c b/src/intel_dri.c
index db1f81ab..4f669372 100644
--- a/src/intel_dri.c
+++ b/src/intel_dri.c
@@ -367,6 +367,12 @@ I830DRI2CopyRegion(DrawablePtr drawable, RegionPtr pRegion,
event = MI_WAIT_FOR_PIPEB_SVBLANK;
}
+ if (scrn->currentMode->Flags & V_INTERLACE) {
+ /* DSL count field lines */
+ y1 /= 2;
+ y2 /= 2;
+ }
+
BEGIN_BATCH(5);
/*
* The documentation says that the LOAD_SCAN_LINES
diff --git a/src/intel_video.c b/src/intel_video.c
index 30a0c375..9c918d5d 100644
--- a/src/intel_video.c
+++ b/src/intel_video.c
@@ -1348,13 +1348,19 @@ intel_wait_for_scanline(ScrnInfoPtr scrn, PixmapPtr pixmap,
event = MI_WAIT_FOR_PIPEB_SVBLANK;
}
+ if (scrn->currentMode->Flags & V_INTERLACE) {
+ /* DSL count field lines */
+ y1 /= 2;
+ y2 /= 2;
+ }
+
BEGIN_BATCH(5);
/* The documentation says that the LOAD_SCAN_LINES command
* always comes in pairs. Don't ask me why. */
OUT_BATCH(MI_LOAD_SCAN_LINES_INCL | pipe);
- OUT_BATCH((box.y1 << 16) | box.y2);
+ OUT_BATCH((y1 << 16) | y2);
OUT_BATCH(MI_LOAD_SCAN_LINES_INCL | pipe);
- OUT_BATCH((box.y1 << 16) | box.y2);
+ OUT_BATCH((y1 << 16) | y2);
OUT_BATCH(MI_WAIT_FOR_EVENT | event);
ADVANCE_BATCH();
}