summaryrefslogtreecommitdiff
path: root/x11-drivers/xf86-video-sis-intel/files/patch-src-sis310_accel.c
blob: d64ac0a802bcaa4f14b996429966461e27d18496 (plain) (blame)
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
--- src/sis310_accel.c.orig	2007-05-02 05:12:57.000000000 +0400
+++ src/sis310_accel.c	2008-06-09 22:15:56.000000000 +0400
@@ -65,7 +65,7 @@
 #  define SIS_NEED_ARRAY
 #  undef SISNEWRENDER
 #  ifdef XORG_VERSION_CURRENT
-#   if XORG_VERSION_CURRENT > XORG_VERSION_NUMERIC(6,7,0,0,0)
+#   if (XORG_VERSION_CURRENT > XORG_VERSION_NUMERIC(6,7,0,0,0) || XORG_VERSION_CURRENT < XORG_VERSION_NUMERIC(4,0,0,0,0))
 #    define SISNEWRENDER
 #   endif
 #  endif
@@ -1099,13 +1099,13 @@
 
 	SiSOccpyCmdQue(pSiS);
 #ifdef SISVRAMQ
-	if(op > SiSRenderOpsMAX) return FALSE;
-	if(!SiSRenderOps[op])    return FALSE;
+	if(op > SiSRenderOpsMAX) {SiSReleaseCmdQue(pSiS); return FALSE;}
+	if(!SiSRenderOps[op]) {SiSReleaseCmdQue(pSiS); return FALSE;}
 #else
-	if(op != PictOpOver) return FALSE;
+	if(op != PictOpOver) {SiSReleaseCmdQue(pSiS); return FALSE;}
 #endif
 
-	if((width > 2048) || (height > 2048)) return FALSE;
+	if((width > 2048) || (height > 2048)) { SiSReleaseCmdQue(pSiS); return FALSE;}
 
 	pitch = (width + 31) & ~31;
 	sizeNeeded = (pitch << bppshift) * height;
@@ -1115,8 +1115,10 @@
 		texType, op, width, height, texPitch, sizeNeeded, sbpp, sbppshift, bppshift);
 #endif
 
-	if(!SiSAllocateLinear(pScrn, (sizeNeeded + sbpp - 1) >> sbppshift))
+	if(!SiSAllocateLinear(pScrn, (sizeNeeded + sbpp - 1) >> sbppshift)) {
+	   SiSReleaseCmdQue(pSiS);
 	   return FALSE;
+	}
 
 	width <<= bppshift;  /* -> bytes (for engine and memcpy) */
 	pitch <<= bppshift;  /* -> bytes */
@@ -1159,6 +1161,7 @@
 	   SiSSetupCMDFlag(ALPHA_BLEND | SRCVIDEO | A_PERPIXELALPHA)
 	   break;
 	default:
+	   SiSReleaseCmdQue(pSiS);
 	   return FALSE;
  	}
         SiSSyncWP
@@ -1463,11 +1466,11 @@
 
 	w = pSrc->drawable.width;
 
-#if  XORG_VERSION_CURRENT < XORG_VERSION_NUMERIC(6,8,2,0,0)
+#if  XORG_VERSION_CURRENT < XORG_VERSION_NUMERIC(6,8,2,0,0) && XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(4,0,0,0,0)
 	dst_pitch = ((w * (pSrc->drawable.bitsPerPixel >> 3)) +
 		     pSiS->EXADriverPtr->card.offscreenPitch - 1) &
 		    ~(pSiS->EXADriverPtr->card.offscreenPitch - 1);
-#elif XORG_VERSION_CURRENT <= XORG_VERSION_NUMERIC(7,0,0,0,0)
+#elif XORG_VERSION_CURRENT <= XORG_VERSION_NUMERIC(7,0,0,0,0) && XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(4,0,0,0,0)
 	dst_pitch = ((w * (pSrc->drawable.bitsPerPixel >> 3)) +
 		     pSiS->EXADriverPtr->card.pixmapPitchAlign - 1) &
 		    ~(pSiS->EXADriverPtr->card.pixmapPitchAlign - 1);
@@ -1482,11 +1485,11 @@
 	if(size > pSiS->exa_scratch->size)
 	   return FALSE;
 
-#if  XORG_VERSION_CURRENT < XORG_VERSION_NUMERIC(6,8,2,0,0)
+#if  XORG_VERSION_CURRENT < XORG_VERSION_NUMERIC(6,8,2,0,0) && XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(4,0,0,0,0)
 	pSiS->exa_scratch_next = (pSiS->exa_scratch_next +
 				  pSiS->EXADriverPtr->card.offscreenByteAlign - 1) &
 				  ~(pSiS->EXADriverPtr->card.offscreenByteAlign - 1);
-#elif  XORG_VERSION_CURRENT <= XORG_VERSION_NUMERIC(7,0,0,0,0)
+#elif  XORG_VERSION_CURRENT <= XORG_VERSION_NUMERIC(7,0,0,0,0) && XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(4,0,0,0,0)
 	pSiS->exa_scratch_next = (pSiS->exa_scratch_next +
 				  pSiS->EXADriverPtr->card.pixmapOffsetAlign - 1) &
 				  ~(pSiS->EXADriverPtr->card.pixmapOffsetAlign - 1);
@@ -1496,7 +1499,7 @@
 				  ~(pSiS->EXADriverPtr->pixmapOffsetAlign - 1);
 #endif
 
-#if  XORG_VERSION_CURRENT <= XORG_VERSION_NUMERIC(7,0,0,0,0)
+#if  XORG_VERSION_CURRENT <= XORG_VERSION_NUMERIC(7,0,0,0,0) && XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(4,0,0,0,0)
 	if(pSiS->exa_scratch_next + size >
 	   pSiS->exa_scratch->offset + pSiS->exa_scratch->size) {
 	   (pSiS->EXADriverPtr->accel.WaitMarker)(pSrc->drawable.pScreen, 0);
@@ -1513,7 +1516,7 @@
 	memcpy(pDst, pSrc, sizeof(*pDst));
 	pDst->devKind = dst_pitch;
 
-#if  XORG_VERSION_CURRENT <= XORG_VERSION_NUMERIC(7,0,0,0,0)
+#if  XORG_VERSION_CURRENT <= XORG_VERSION_NUMERIC(7,0,0,0,0) && XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(4,0,0,0,0)
 	pDst->devPrivate.ptr = pSiS->EXADriverPtr->card.memoryBase + pSiS->exa_scratch_next;
 #else
 	pDst->devPrivate.ptr = pSiS->EXADriverPtr->memoryBase + pSiS->exa_scratch_next;
@@ -1755,7 +1758,7 @@
 
 #ifdef SIS_USE_EXA	/* ----------------------- EXA ----------------------- */
 	   if(pSiS->useEXA) {
-#if  XORG_VERSION_CURRENT <= XORG_VERSION_NUMERIC(7,0,0,0,0)
+#if  XORG_VERSION_CURRENT <= XORG_VERSION_NUMERIC(7,0,0,0,0) && XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(4,0,0,0,0)
 
 	      int obase = 0;
 
@@ -1776,7 +1779,7 @@
 			"Not enough video RAM for offscreen memory manager. Xv disabled\n");
 	      }
 
-#if  XORG_VERSION_CURRENT < XORG_VERSION_NUMERIC(6,8,2,0,0)
+#if  XORG_VERSION_CURRENT < XORG_VERSION_NUMERIC(6,8,2,0,0) && XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(4,0,0,0,0)
 	      pSiS->EXADriverPtr->card.offscreenByteAlign = 16;	/* src/dst: double quad word boundary */
 	      pSiS->EXADriverPtr->card.offscreenPitch = 4;	/* pitch:   double word boundary      */
 #else
@@ -1945,7 +1948,7 @@
 						SiSScratchSave, pSiS);
 	      if(pSiS->exa_scratch) {
 		 pSiS->exa_scratch_next = pSiS->exa_scratch->offset;
-        #if  XORG_VERSION_CURRENT <= XORG_VERSION_NUMERIC(7,0,0,0,0)
+        #if  XORG_VERSION_CURRENT <= XORG_VERSION_NUMERIC(7,0,0,0,0) && XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(4,0,0,0,0)
 		 pSiS->EXADriverPtr->accel.UploadToScratch = SiSUploadToScratch;
 	#else
                  pSiS->EXADriverPtr->UploadToScratch = SiSUploadToScratch;