Module Name: xsrc
Committed By: macallan
Date: Fri Jan 24 07:51:24 UTC 2025
Modified Files:
xsrc/external/mit/xf86-video-ngle/dist/src: summit_accel.c
Log Message:
some updates:
- turn pixel processing off for GXcopy - small speedup
- remove unnecessary exaMarkSync() calls
- set prefetch hint in SummitDownloadFromScreen() - *big* speedup
To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 \
xsrc/external/mit/xf86-video-ngle/dist/src/summit_accel.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-ngle/dist/src/summit_accel.c
diff -u xsrc/external/mit/xf86-video-ngle/dist/src/summit_accel.c:1.4 xsrc/external/mit/xf86-video-ngle/dist/src/summit_accel.c:1.5
--- xsrc/external/mit/xf86-video-ngle/dist/src/summit_accel.c:1.4 Wed Jan 15 08:21:06 2025
+++ xsrc/external/mit/xf86-video-ngle/dist/src/summit_accel.c Fri Jan 24 07:51:24 2025
@@ -21,7 +21,7 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
-/* $NetBSD: summit_accel.c,v 1.4 2025/01/15 08:21:06 macallan Exp $ */
+/* $NetBSD: summit_accel.c,v 1.5 2025/01/24 07:51:24 macallan Exp $ */
#include <sys/types.h>
#include <dev/ic/summitreg.h>
@@ -140,8 +140,13 @@ SummitPrepareCopy
fPtr->offsetd = y;
SUMMIT_WRITE_MODE(dm);
- SummitWaitFifo(fPtr, 6);
- NGLEWrite4(fPtr, VISFX_IBO, alu);
+ SummitWaitFifo(fPtr, 6);
+ if (alu == GXcopy) {
+ NGLEWrite4(fPtr, VISFX_FOE, 0);
+ } else {
+ NGLEWrite4(fPtr, VISFX_FOE, FOE_BLEND_ROP);
+ NGLEWrite4(fPtr, VISFX_IBO, alu);
+ }
NGLEWrite4(fPtr, VISFX_PLANE_MASK, planemask);
LEAVE;
return TRUE;
@@ -168,7 +173,6 @@ SummitCopy
NGLEWrite4(fPtr, VISFX_COPY_WH, (wi << 16) | he);
NGLEWrite4(fPtr, VISFX_COPY_DST, (xd << 16) | (yd + fPtr->offsetd));
- exaMarkSync(pDstPixmap->drawable.pScreen);
LEAVE;
}
@@ -202,8 +206,13 @@ SummitPrepareSolid(
SUMMIT_READ_MODE(rm);
SUMMIT_WRITE_MODE(wm);
fPtr->offset = y;
- SummitWaitFifo(fPtr, 6);
- NGLEWrite4(fPtr, VISFX_IBO, alu);
+ SummitWaitFifo(fPtr, 8);
+ if (alu == GXcopy) {
+ NGLEWrite4(fPtr, VISFX_FOE, 0);
+ } else {
+ NGLEWrite4(fPtr, VISFX_FOE, FOE_BLEND_ROP);
+ NGLEWrite4(fPtr, VISFX_IBO, alu);
+ }
NGLEWrite4(fPtr, VISFX_FG_COLOUR, fg);
NGLEWrite4(fPtr, VISFX_PLANE_MASK, planemask);
LEAVE;
@@ -230,7 +239,6 @@ SummitSolid(
NGLEWrite4(fPtr, VISFX_START, (x1 << 16) | y1);
NGLEWrite4(fPtr, VISFX_SIZE, (wi << 16) | he);
- exaMarkSync(pPixmap->drawable.pScreen);
LEAVE;
}
@@ -253,7 +261,7 @@ SummitUploadToScreen(PixmapPtr pDst, int
}
SUMMIT_WRITE_MODE(mode);
NGLEWrite4(fPtr, VISFX_PLANE_MASK, 0xffffffff);
- NGLEWrite4(fPtr, VISFX_IBO, GXcopy);
+ NGLEWrite4(fPtr, VISFX_FOE, 0);
while (h--) {
SummitWaitFifo(fPtr, w + 1);
@@ -279,7 +287,6 @@ SummitDownloadFromScreen(PixmapPtr pSrc,
uint32_t mode = OTC01 | BIN8F | BUFFL;
ENTER;
-
y += (ofs >> 13);
if (y >= fPtr->fbi.fbi_height) {
mode = OTC01 | BIN8F | BUFBL;
@@ -287,6 +294,8 @@ SummitDownloadFromScreen(PixmapPtr pSrc,
}
SUMMIT_READ_MODE(mode);
SummitWait(fPtr);
+ NGLEWrite4(fPtr, VISFX_RPH, VISFX_RPH_LTR);
+ SummitWait(fPtr);
src = fPtr->fbmem;
src += (y << 13) + (x << 2);
@@ -306,18 +315,20 @@ SummitPrepareAccess(PixmapPtr pPixmap, i
ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum];
NGLEPtr fPtr = NGLEPTR(pScrn);
int ofs = exaGetPixmapOffset(pPixmap);
+ int y;
ENTER;
- /*
- * XXX
- * since we abuse the back buffer as off-screen storage we can't
- * safely allow direct access to it - this will make X use
- * {Up|Down}load{To|From}Screen() instead
- */
- if (ofs > 0) return FALSE;
-
- SUMMIT_READ_MODE(OTC01 | BIN8F | BUFFL);
- SUMMIT_WRITE_MODE(OTC01 | BIN8F | BUFFL);
+ if (ofs == 0) {
+ /* accessing the visible framebuffer */
+ SUMMIT_READ_MODE(OTC01 | BIN8F | BUFFL);
+ SUMMIT_WRITE_MODE(OTC01 | BIN8F | BUFFL);
+ } else {
+ SUMMIT_READ_MODE(OTC01 | BIN8F | BUFBL);
+ SUMMIT_WRITE_MODE(OTC01 | BIN8F | BUFBL);
+ y = ofs >> 13;
+ y -= fPtr->fbi.fbi_height;
+ pPixmap->devPrivate.ptr = fPtr->fbmem + (y << 13);
+ }
NGLEWrite4(fPtr, VISFX_FOE, 0);
//NGLEWrite4(fPtr, VISFX_CONTROL, 0x200);
SummitWait(fPtr);
@@ -332,7 +343,6 @@ SummitFinishAccess(PixmapPtr pPixmap, in
NGLEPtr fPtr = NGLEPTR(pScrn);
ENTER;
- NGLEWrite4(fPtr, VISFX_FOE, FOE_BLEND_ROP);
//NGLEWrite4(fPtr, VISFX_CONTROL, 0);
LEAVE;
}