summaryrefslogtreecommitdiff
path: root/src/nv30_exa.c
diff options
context:
space:
mode:
authorBen Skeggs <skeggsb@beleth.(none)>2009-12-07 15:31:53 +1000
committerBen Skeggs <bskeggs@redhat.com>2009-12-07 16:02:34 +1000
commit0b5120cf8ef2528a15d88054afdc6fc33eb521f5 (patch)
tree78383c921d0e74118a5b4629eab719d985c4da6c /src/nv30_exa.c
parent60a394222b410da8bb832935fc525132218b4d94 (diff)
downloadxorg-driver-xf86-video-nouveau-0b5120cf8ef2528a15d88054afdc6fc33eb521f5.tar.gz
Allow texturing from GART
Unfortunately NV_CONTEXT_SURFACES_2D on most cards (probably only PCIE cards work actually, but that's not confirmed) rejects a GART DMA object, so the usefulness is a bit more limited than I'd hoped.
Diffstat (limited to 'src/nv30_exa.c')
-rw-r--r--src/nv30_exa.c22
1 files changed, 11 insertions, 11 deletions
diff --git a/src/nv30_exa.c b/src/nv30_exa.c
index 4c25ebc..6350828 100644
--- a/src/nv30_exa.c
+++ b/src/nv30_exa.c
@@ -308,6 +308,7 @@ NV30EXATexture(ScrnInfoPtr pScrn, PixmapPtr pPix, PicturePtr pPict, int unit)
unsigned delta = nouveau_pixmap_offset(pPix);
nv_pict_texture_format_t *fmt;
uint32_t card_filter, card_repeat;
+ uint32_t tex_reloc = NOUVEAU_BO_VRAM | NOUVEAU_BO_GART | NOUVEAU_BO_RD;
NV30EXA_STATE;
fmt = NV30_GetPictTextureFormat(pPict->format);
@@ -322,17 +323,16 @@ NV30EXATexture(ScrnInfoPtr pScrn, PixmapPtr pPix, PicturePtr pPict, int unit)
card_filter = 1;
BEGIN_RING(chan, rankine, NV34TCL_TX_OFFSET(unit), 8);
- if (OUT_RELOCl(chan, bo, delta, NOUVEAU_BO_VRAM | NOUVEAU_BO_RD))
+ if (OUT_RELOCl(chan, bo, delta, tex_reloc) ||
+ OUT_RELOCd(chan, bo, NV34TCL_TX_FORMAT_DIMS_2D | (1 << 16) | 8 |
+ (fmt->card_fmt << NV34TCL_TX_FORMAT_FORMAT_SHIFT) |
+ (log2i(pPix->drawable.width) <<
+ NV34TCL_TX_FORMAT_BASE_SIZE_U_SHIFT) |
+ (log2i(pPix->drawable.height) <<
+ NV34TCL_TX_FORMAT_BASE_SIZE_V_SHIFT),
+ tex_reloc | NOUVEAU_BO_OR,
+ NV34TCL_TX_FORMAT_DMA0, NV34TCL_TX_FORMAT_DMA1))
return FALSE;
-
- OUT_RING (chan, NV34TCL_TX_FORMAT_DIMS_2D |
- (fmt->card_fmt << NV34TCL_TX_FORMAT_FORMAT_SHIFT) |
- (1 << 16) |
- (log2i(pPix->drawable.width) << NV34TCL_TX_FORMAT_BASE_SIZE_U_SHIFT) |
- (log2i(pPix->drawable.height) << NV34TCL_TX_FORMAT_BASE_SIZE_V_SHIFT) |
- 8 |
- NV34TCL_TX_FORMAT_DMA0);
-
OUT_RING (chan, (card_repeat << NV34TCL_TX_WRAP_S_SHIFT) |
(card_repeat << NV34TCL_TX_WRAP_T_SHIFT) |
(card_repeat << NV34TCL_TX_WRAP_R_SHIFT));
@@ -478,7 +478,7 @@ NV30EXAPrepareComposite(int op, PicturePtr psPict,
int fpid = NV30EXA_FPID_PASS_COL0;
NV30EXA_STATE;
- if (MARK_RING(chan, 128, 1 + 1 + 2))
+ if (MARK_RING(chan, 128, 1 + 1 + 4))
return FALSE;
blend = NV30_GetPictOpRec(op);