diff options
author | Ben Skeggs <skeggsb@beleth.(none)> | 2009-12-07 15:31:53 +1000 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2009-12-07 16:02:34 +1000 |
commit | 0b5120cf8ef2528a15d88054afdc6fc33eb521f5 (patch) | |
tree | 78383c921d0e74118a5b4629eab719d985c4da6c /src/nv30_exa.c | |
parent | 60a394222b410da8bb832935fc525132218b4d94 (diff) | |
download | xorg-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.c | 22 |
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); |