xf86-video-intel: 3 commits - src/i830_driver.c src/i830_memory.c src/i830_video.c src/i915_video.c
Kristian Høgsberg
krh at kemper.freedesktop.org
Fri Feb 20 10:00:24 PST 2009
src/i830_driver.c | 6 ----
src/i830_memory.c | 2 -
src/i830_video.c | 70 +++++++++++++++++++++++++++++++++++++-----------------
src/i915_video.c | 9 +++---
4 files changed, 54 insertions(+), 33 deletions(-)
New commits:
commit beca598bc2848093b710bd47828d622205d273df
Author: Kristian Høgsberg <krh at redhat.com>
Date: Fri Feb 20 11:08:51 2009 -0500
Access the Xv buffer through the GTT for the non-KMS case.
diff --git a/src/i830_video.c b/src/i830_video.c
index e542897..c9a0181 100644
--- a/src/i830_video.c
+++ b/src/i830_video.c
@@ -1271,7 +1271,8 @@ I830CopyPackedData(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv,
int srcPitch,
int dstPitch, int top, int left, int h, int w)
{
- unsigned char *src, *dst;
+ I830Ptr pI830 = I830PTR(pScrn);
+ unsigned char *src, *dst, *dst_base;
int i,j;
unsigned char *s;
@@ -1283,11 +1284,18 @@ I830CopyPackedData(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv,
src = buf + (top * srcPitch) + (left << 1);
- drm_intel_bo_map(pPriv->buf, TRUE);
+ if (pPriv->textured) {
+ drm_intel_bo_map(pPriv->buf, TRUE);
+ dst_base = pPriv->buf->virtual;
+ } else {
+ drm_intel_gem_bo_start_gtt_access(pPriv->buf, TRUE);
+ dst_base = pI830->FbBase;
+ }
+
if (pPriv->currentBuf == 0)
- dst = (unsigned char *) pPriv->buf->virtual + pPriv->YBuf0offset;
+ dst = dst_base + pPriv->YBuf0offset;
else
- dst = (unsigned char *) pPriv->buf->virtual + pPriv->YBuf1offset;
+ dst = dst_base + pPriv->YBuf1offset;
switch (pPriv->rotation) {
case RR_Rotate_0:
@@ -1360,7 +1368,9 @@ I830CopyPackedData(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv,
}
break;
}
- drm_intel_bo_unmap(pPriv->buf);
+
+ if (pPriv->textured)
+ drm_intel_bo_unmap(pPriv->buf);
}
static void
@@ -1369,8 +1379,9 @@ I830CopyPlanarData(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv,
int srcPitch2, int dstPitch, int srcH, int top, int left,
int h, int w, int id)
{
+ I830Ptr pI830 = I830PTR(pScrn);
int i, j = 0;
- unsigned char *src1, *src2, *src3, *dst1, *dst2, *dst3;
+ unsigned char *src1, *src2, *src3, *dst_base, *dst1, *dst2, *dst3;
unsigned char *s;
int dstPitch2 = dstPitch << 1;
@@ -1387,11 +1398,19 @@ I830CopyPlanarData(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv,
ErrorF("src1 is %p, offset is %ld\n", src1,
(unsigned long)src1 - (unsigned long)buf);
#endif
- drm_intel_bo_map(pPriv->buf, TRUE);
+
+ if (pPriv->textured) {
+ drm_intel_bo_map(pPriv->buf, TRUE);
+ dst_base = pPriv->buf->virtual;
+ } else {
+ drm_intel_gem_bo_start_gtt_access(pPriv->buf, TRUE);
+ dst_base = pI830->FbBase + pPriv->buf->offset;
+ }
+
if (pPriv->currentBuf == 0)
- dst1 = (unsigned char *) pPriv->buf->virtual + pPriv->YBuf0offset;
+ dst1 = dst_base + pPriv->YBuf0offset;
else
- dst1 = (unsigned char *) pPriv->buf->virtual + pPriv->YBuf1offset;
+ dst1 = dst_base + pPriv->YBuf1offset;
switch (pPriv->rotation) {
case RR_Rotate_0:
@@ -1441,14 +1460,14 @@ I830CopyPlanarData(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv,
#endif
if (pPriv->currentBuf == 0) {
if (id == FOURCC_I420)
- dst2 = (unsigned char *) pPriv->buf->virtual + pPriv->UBuf0offset;
+ dst2 = dst_base + pPriv->UBuf0offset;
else
- dst2 = (unsigned char *) pPriv->buf->virtual + pPriv->VBuf0offset;
+ dst2 = dst_base + pPriv->VBuf0offset;
} else {
if (id == FOURCC_I420)
- dst2 = (unsigned char *) pPriv->buf->virtual + pPriv->UBuf1offset;
+ dst2 = dst_base + pPriv->UBuf1offset;
else
- dst2 = (unsigned char *) pPriv->buf->virtual + pPriv->VBuf1offset;
+ dst2 = dst_base + pPriv->VBuf1offset;
}
switch (pPriv->rotation) {
@@ -1500,14 +1519,14 @@ I830CopyPlanarData(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv,
#endif
if (pPriv->currentBuf == 0) {
if (id == FOURCC_I420)
- dst3 = (unsigned char *) pPriv->buf->virtual + pPriv->VBuf0offset;
+ dst3 = dst_base + pPriv->VBuf0offset;
else
- dst3 = (unsigned char *) pPriv->buf->virtual + pPriv->UBuf0offset;
+ dst3 = dst_base + pPriv->UBuf0offset;
} else {
if (id == FOURCC_I420)
- dst3 = (unsigned char *) pPriv->buf->virtual + pPriv->VBuf1offset;
+ dst3 = dst_base + pPriv->VBuf1offset;
else
- dst3 = (unsigned char *) pPriv->buf->virtual + pPriv->UBuf1offset;
+ dst3 = dst_base + pPriv->UBuf1offset;
}
switch (pPriv->rotation) {
@@ -1549,7 +1568,9 @@ I830CopyPlanarData(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv,
}
break;
}
- drm_intel_bo_unmap(pPriv->buf);
+
+ if (pPriv->textured)
+ drm_intel_bo_unmap(pPriv->buf);
}
typedef struct {
@@ -2410,10 +2431,10 @@ I830PutImage(ScrnInfoPtr pScrn,
destId = FOURCC_YV12;
} else {
#endif
- if (!pPriv->textured)
- pPriv->YBuf0offset = pPriv->buf->offset;
- else
+ if (pPriv->textured)
pPriv->YBuf0offset = 0;
+ else
+ pPriv->YBuf0offset = pPriv->buf->offset;
if (pPriv->rotation & (RR_Rotate_90 | RR_Rotate_270)) {
pPriv->UBuf0offset = pPriv->YBuf0offset + (dstPitch * 2 * width);
commit e97e2571703e3d6188bf18f211b793fc50383f9c
Author: Kristian Høgsberg <krh at redhat.com>
Date: Thu Feb 19 16:41:49 2009 -0500
Fix i915 textured video to work with the i830_memory -> bo change.
Forgot to update i915_video.c in 872aadc7102bd5131e1582ede081e22672911ba2.
diff --git a/src/i915_video.c b/src/i915_video.c
index b903b5e..81a0f87 100644
--- a/src/i915_video.c
+++ b/src/i915_video.c
@@ -161,7 +161,8 @@ I915DisplayVideoTextured(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv, int id,
OUT_BATCH(_3DSTATE_MAP_STATE | 3);
OUT_BATCH(0x00000001); /* texture map #1 */
- OUT_BATCH(pPriv->YBuf0offset);
+ OUT_RELOC(pPriv->buf, I915_GEM_DOMAIN_SAMPLER, 0, pPriv->YBuf0offset);
+
ms3 = MAPSURF_422 | MS3_USE_FENCE_REGS;
switch (id) {
case FOURCC_YUY2:
@@ -269,7 +270,7 @@ I915DisplayVideoTextured(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv, int id,
OUT_BATCH(_3DSTATE_MAP_STATE | 9);
OUT_BATCH(0x00000007);
- OUT_BATCH(pPriv->YBuf0offset);
+ OUT_RELOC(pPriv->buf, I915_GEM_DOMAIN_SAMPLER, 0, pPriv->YBuf0offset);
ms3 = MAPSURF_8BIT | MT_8BIT_I8 | MS3_USE_FENCE_REGS;
ms3 |= (height - 1) << MS3_HEIGHT_SHIFT;
ms3 |= (width - 1) << MS3_WIDTH_SHIFT;
@@ -282,14 +283,14 @@ I915DisplayVideoTextured(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv, int id,
else
OUT_BATCH(((video_pitch * 2 / 4) - 1) << MS4_PITCH_SHIFT);
- OUT_BATCH(pPriv->UBuf0offset);
+ OUT_RELOC(pPriv->buf, I915_GEM_DOMAIN_SAMPLER, 0, pPriv->UBuf0offset);
ms3 = MAPSURF_8BIT | MT_8BIT_I8 | MS3_USE_FENCE_REGS;
ms3 |= (height / 2 - 1) << MS3_HEIGHT_SHIFT;
ms3 |= (width / 2 - 1) << MS3_WIDTH_SHIFT;
OUT_BATCH(ms3);
OUT_BATCH(((video_pitch / 4) - 1) << MS4_PITCH_SHIFT);
- OUT_BATCH(pPriv->VBuf0offset);
+ OUT_RELOC(pPriv->buf, I915_GEM_DOMAIN_SAMPLER, 0, pPriv->VBuf0offset);
ms3 = MAPSURF_8BIT | MT_8BIT_I8 | MS3_USE_FENCE_REGS;
ms3 |= (height / 2 - 1) << MS3_HEIGHT_SHIFT;
ms3 |= (width / 2 - 1) << MS3_WIDTH_SHIFT;
commit 96da26b6813a8c1da8a43036c375aa0d2bb70f16
Author: Kristian Høgsberg <krh at redhat.com>
Date: Thu Feb 19 16:40:19 2009 -0500
Dont allocate overlay registers in KMS mode.
diff --git a/src/i830_driver.c b/src/i830_driver.c
index adb9544..e7ca6b0 100644
--- a/src/i830_driver.c
+++ b/src/i830_driver.c
@@ -3249,12 +3249,6 @@ I830ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
"needs 2D acceleration.\n");
pI830->XvEnabled = FALSE;
}
- if (!OVERLAY_NOEXIST(pI830) && pI830->overlay_regs == NULL) {
- xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
- "Disabling Xv because the overlay register buffer "
- "allocation failed.\n");
- pI830->XvEnabled = FALSE;
- }
}
#endif
diff --git a/src/i830_memory.c b/src/i830_memory.c
index 23cc4c7..62765d6 100644
--- a/src/i830_memory.c
+++ b/src/i830_memory.c
@@ -1473,7 +1473,7 @@ i830_allocate_2d_memory(ScrnInfoPtr pScrn)
/* Allocate overlay register space and optional XAA linear allocator
* space. The second head in zaphod mode will share the space.
*/
- if (I830IsPrimary(pScrn))
+ if (I830IsPrimary(pScrn) && !pI830->use_drm_mode)
i830_allocate_overlay(pScrn);
#endif
diff --git a/src/i830_video.c b/src/i830_video.c
index be2d28e..e542897 100644
--- a/src/i830_video.c
+++ b/src/i830_video.c
@@ -648,8 +648,13 @@ I830InitVideo(ScreenPtr pScreen)
}
#endif
- if (num_adaptors)
+ if (num_adaptors) {
xf86XVScreenInit(pScreen, adaptors, num_adaptors);
+ } else {
+ xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+ "Disabling Xv because no adaptors could be initialized.\n");
+ pI830->XvEnabled = FALSE;
+ }
#ifdef INTEL_XVMC
if (xvmc_status)
More information about the xorg-commit
mailing list