Module Name: xsrc Committed By: macallan Date: Fri Oct 5 01:53:54 UTC 2018
Modified Files: xsrc/external/mit/xf86-video-nv/dist/src: nv_exa.c Log Message: for some reason my 6800 Ultra stalls when drawing *some* off-screen rectangles as a workaround, draw them by software until I figure out what's going on To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 xsrc/external/mit/xf86-video-nv/dist/src/nv_exa.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: xsrc/external/mit/xf86-video-nv/dist/src/nv_exa.c diff -u xsrc/external/mit/xf86-video-nv/dist/src/nv_exa.c:1.4 xsrc/external/mit/xf86-video-nv/dist/src/nv_exa.c:1.5 --- xsrc/external/mit/xf86-video-nv/dist/src/nv_exa.c:1.4 Thu Jul 26 21:29:16 2018 +++ xsrc/external/mit/xf86-video-nv/dist/src/nv_exa.c Fri Oct 5 01:53:54 2018 @@ -21,7 +21,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/* $NetBSD: nv_exa.c,v 1.4 2018/07/26 21:29:16 macallan Exp $ */ +/* $NetBSD: nv_exa.c,v 1.5 2018/10/05 01:53:54 macallan Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -114,7 +114,7 @@ NvCopy NVDmaNext (pNv, (h << 16) | w); if((w * h) >= 512) - NVDmaKickoff(pNv); + NVDmaKickoff(pNv); LEAVE; } @@ -141,9 +141,19 @@ NvPrepareSolid( if (pPixmap->drawable.bitsPerPixel != 32) xf86Msg(X_ERROR, "%s %d bpp\n", __func__, pPixmap->drawable.bitsPerPixel); planemask |= ~0 << pNv->CurrentLayout.depth; + off = exaGetPixmapOffset(pPixmap); + + /* + * XXX + * on my 6800 Ultra the drawing engine stalls when drawing at least + * rectangles into off-screen memory. Draw them by software until I figure out + * what's going on + */ + if (off != 0) return FALSE; + + NVSetRopSolid(pScrn, rop, planemask); pitch = exaGetPixmapPitch(pPixmap); - off = exaGetPixmapOffset(pPixmap); NVDmaStart(pNv, SURFACE_FORMAT, 4); NVDmaNext (pNv, pNv->surfaceFormat); @@ -154,8 +164,6 @@ NvPrepareSolid( NVDmaStart(pNv, RECT_FORMAT, 1); NVDmaNext (pNv, pNv->rectFormat); - NVSetRopSolid(pScrn, rop, planemask); - NVDmaStart(pNv, RECT_SOLID_COLOR, 1); NVDmaNext (pNv, color); @@ -324,6 +332,12 @@ NvInitExa(ScreenPtr pScreen) NVDmaStart(pNv, RECT_FORMAT, 1); NVDmaNext (pNv, pNv->rectFormat); + NVDmaStart(pNv, PATTERN_COLOR_0, 4); + NVDmaNext (pNv, 0xffffffff); + NVDmaNext (pNv, 0xffffffff); + NVDmaNext (pNv, 0xffffffff); + NVDmaNext (pNv, 0xffffffff); + pNv->currentRop = ~0; /* set to something invalid */ NVSetRopSolid(pScrn, GXcopy, ~0);