aboutsummaryrefslogtreecommitdiff
path: root/gnu/packages/patches/xf86-video-sis-fix-exa-crash.patch
blob: f5cd0b9a9e16263c392d1b67ebea7e0a67b22323 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Fix X server crash when sis driver is used with EXA acceleration.

Source: http://bazaar.launchpad.net/~ubuntu-branches/ubuntu/trusty/xserver-xorg-video-sis/trusty/revision/24/debian/patches/fix-exa-crash.diff

The patch was originally proposed by nihui:
https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-video-sis/+bug/1066464/comments/13

--- a/src/sis310_accel.c
+++ b/src/sis310_accel.c
@@ -1874,7 +1874,7 @@
 {
 	ScrnInfoPtr pScrn = xf86ScreenToScrn(pDst->drawable.pScreen);
 	SISPtr pSiS = SISPTR(pScrn);
-	unsigned char *dst = pDst->devPrivate.ptr;
+	unsigned char *dst = ((unsigned char *) pSiS->FbBase) + exaGetPixmapOffset(pDst);
 	int dst_pitch = exaGetPixmapPitch(pDst);
 
 	(pSiS->SyncAccel)(pScrn);
@@ -1882,7 +1882,7 @@
 	if(pDst->drawable.bitsPerPixel < 8)
 	   return FALSE;
 
-	dst += (x * pDst->drawable.bitsPerPixel / 8) + (y * src_pitch);
+	dst += (x * pDst->drawable.bitsPerPixel / 8) + (y * dst_pitch);
 	while(h--) {
 	   SiSMemCopyToVideoRam(pSiS, dst, (unsigned char *)src,
 				(w * pDst->drawable.bitsPerPixel / 8));
@@ -1953,7 +1953,7 @@
 {
 	ScrnInfoPtr pScrn = xf86ScreenToScrn(pSrc->drawable.pScreen);
 	SISPtr pSiS = SISPTR(pScrn);
-	unsigned char *src = pSrc->devPrivate.ptr;
+	unsigned char *src = ((unsigned char *) pSiS->FbBase) + exaGetPixmapOffset(pSrc);
 	int src_pitch = exaGetPixmapPitch(pSrc);
 	int size = src_pitch < dst_pitch ? src_pitch : dst_pitch;
 
@@ -1964,7 +1964,7 @@
 
 	src += (x * pSrc->drawable.bitsPerPixel / 8) + (y * src_pitch);
 	while(h--) {
-	   SiSMemCopyFromVideoRam(pSiS, (unsigned char *)dst, src, size);
+	   SiSMemCopyFromVideoRam(pSiS, (unsigned char *)dst, src, (w * pSrc->drawable.bitsPerPixel / 8));
 	   src += src_pitch;
 	   dst += dst_pitch;
 	}