]>
Commit | Line | Data |
---|---|---|
548f7bf2 JR |
1 | --- XFree86-4.0.1/xc/programs/Xserver/hw/xfree86/drivers/tdfx/tdfx_dri.c.chmou Tue Sep 19 17:34:43 2000 |
2 | +++ XFree86-4.0.1/xc/programs/Xserver/hw/xfree86/drivers/tdfx/tdfx_dri.c Tue Sep 19 18:30:25 2000 | |
3 | @@ -127,9 +127,10 @@ | |
4 | } | |
5 | } | |
6 | if (i!=numConfigs) { | |
7 | - ErrorF("Incorrect initialization of visuals\n"); | |
8 | + xf86DrvMsg(pScreen->myNum, X_ERROR, | |
9 | + "Incorrect initialization of visuals\n"); | |
10 | return FALSE; | |
11 | - } else ErrorF("Created %d visuals\n", numConfigs); | |
12 | + } | |
13 | break; /* 16bpp */ | |
14 | ||
15 | case 24: | |
16 | @@ -224,7 +225,7 @@ | |
17 | xf86DrvMsg(pScreen->myNum, X_ERROR, | |
18 | "Incorrect initialization of visuals\n"); | |
19 | return FALSE; | |
20 | - } else ErrorF("Created %d visuals\n", numConfigs); | |
21 | + } | |
22 | break; | |
23 | } | |
24 | pTDFX->numVisualConfigs = numConfigs; | |
25 | @@ -263,12 +264,21 @@ | |
26 | ||
27 | switch (pScrn->bitsPerPixel) { | |
28 | case 8: | |
29 | + xf86DrvMsg(pScreen->myNum, X_ERROR, | |
30 | + "DRI not supported in 8 bpp mode, disabling DRI.\n"); | |
31 | return FALSE; | |
32 | case 16: | |
33 | break; | |
34 | case 24: | |
35 | + xf86DrvMsg(pScreen->myNum, X_ERROR, | |
36 | + "DRI not supported in 24 bpp mode, disabling DRI.\n"); | |
37 | + return FALSE; | |
38 | case 32: | |
39 | - if (pTDFX->ChipType<=PCI_CHIP_VOODOO3) return FALSE; | |
40 | + if (pTDFX->ChipType<=PCI_CHIP_VOODOO3) { | |
41 | + xf86DrvMsg(pScreen->myNum, X_ERROR, | |
42 | + "DRI requires Voodoo3 or later, disabling DRI.\n"); | |
43 | + return FALSE; | |
44 | + } | |
45 | } | |
46 | ||
47 | /* Check that the GLX, DRI, and DRM modules have been loaded by testing | |
48 | @@ -295,8 +305,12 @@ | |
49 | } | |
50 | ||
51 | pDRIInfo = DRICreateInfoRec(); | |
52 | - if (!pDRIInfo) | |
53 | - return FALSE; | |
54 | + if (!pDRIInfo) { | |
55 | + xf86DrvMsg(pScreen->myNum, X_ERROR, | |
56 | + "DRICreatInfoRect() failed, disabling DRI.\n"); | |
57 | + return FALSE; | |
58 | + } | |
59 | + | |
60 | pTDFX->pDRIInfo = pDRIInfo; | |
61 | ||
62 | pDRIInfo->drmDriverName = TDFXKernelDriverName; | |
63 | @@ -336,13 +350,14 @@ | |
64 | * in the SAREA header | |
65 | */ | |
66 | if (sizeof(XF86DRISAREARec)+sizeof(TDFXSAREAPriv)>SAREA_MAX) { | |
67 | - xf86DrvMsg(pScreen->myNum, X_ERROR, "Data does not fit in SAREA\n"); | |
68 | + xf86DrvMsg(pScreen->myNum, X_ERROR, "Data does not fit in SAREA\n"); | |
69 | return FALSE; | |
70 | } | |
71 | pDRIInfo->SAREASize = SAREA_MAX; | |
72 | #endif | |
73 | ||
74 | if (!(pTDFXDRI = (TDFXDRIPtr)xnfcalloc(sizeof(TDFXDRIRec),1))) { | |
75 | + xf86DrvMsg(pScreen->myNum, X_ERROR, "DRI memory allocation failed, disabling DRI.\n"); | |
76 | DRIDestroyInfoRec(pTDFX->pDRIInfo); | |
77 | pTDFX->pDRIInfo=0; | |
78 | return FALSE; | |
79 | @@ -363,6 +378,8 @@ | |
80 | pDRIInfo->devPrivate=0; | |
81 | DRIDestroyInfoRec(pTDFX->pDRIInfo); | |
82 | pTDFX->pDRIInfo=0; | |
83 | + xf86DrvMsg(pScreen->myNum, X_ERROR, "DRIScreenInit failed, disabling DRI.\n"); | |
84 | + | |
85 | return FALSE; | |
86 | } | |
87 | ||
88 | @@ -391,6 +408,7 @@ | |
89 | if (drmAddMap(pTDFX->drmSubFD, (drmHandle)pTDFX->MMIOAddr[0], | |
90 | pTDFXDRI->regsSize, DRM_REGISTERS, 0, &pTDFXDRI->regs)<0) { | |
91 | TDFXDRICloseScreen(pScreen); | |
92 | + xf86DrvMsg(pScreen->myNum, X_ERROR, "drmAddMap failed, disabling DRI.\n"); | |
93 | return FALSE; | |
94 | } | |
95 | xf86DrvMsg(pScreen->myNum, X_INFO, "[drm] Registers = 0x%08lx\n", | |
96 | @@ -398,6 +416,7 @@ | |
97 | ||
98 | if (!(TDFXInitVisualConfigs(pScreen))) { | |
99 | TDFXDRICloseScreen(pScreen); | |
100 | + xf86DrvMsg(pScreen->myNum, X_ERROR, "TDFXInitVisualConfigs failed, disabling DRI.\n"); | |
101 | return FALSE; | |
102 | } | |
103 | xf86DrvMsg(pScrn->scrnIndex, X_INFO, "visual configs initialized\n" ); | |
104 | --- XFree86-4.0.1/xc/programs/Xserver/hw/xfree86/drivers/tdfx/tdfx_driver.c.chmou Tue Sep 19 17:34:43 2000 | |
105 | +++ XFree86-4.0.1/xc/programs/Xserver/hw/xfree86/drivers/tdfx/tdfx_driver.c Tue Sep 19 18:30:25 2000 | |
106 | @@ -636,7 +636,6 @@ | |
107 | ClockRangePtr clockRanges; | |
108 | int i; | |
109 | MessageType from; | |
110 | - char *mod=0, *reqSym=0; | |
111 | int flags24; | |
112 | rgb defaultWeight = {0, 0, 0}; | |
113 | pciVideoPtr match; | |
114 | @@ -663,7 +662,7 @@ | |
115 | ||
116 | if (flags & PROBE_DETECT) { | |
117 | TDFXProbeDDC(pScrn, pTDFX->pEnt->index); | |
118 | - return FALSE; | |
119 | + return TRUE; | |
120 | } | |
121 | ||
122 | /* The vgahw module should be loaded here when needed */ | |
123 | @@ -1195,7 +1194,10 @@ | |
124 | maxm=24; | |
125 | } else { | |
126 | minm=1; | |
127 | - maxm=64; | |
128 | + maxm=57; /* This used to be 64, alas it seems the last 8 (funny that ?) | |
129 | + * values cause jittering at lower resolutions. I've not done | |
130 | + * any calculations to what the adjustment affects clock ranges, | |
131 | + * but I can still run at 1600x1200@75Hz */ | |
132 | } | |
133 | for (n=1; n<256; n++) { | |
134 | f_cur=REFFREQ*(n+2); | |
135 | @@ -1604,15 +1606,6 @@ | |
136 | pTDFX = TDFXPTR(pScrn); | |
137 | pTDFX->stride = pScrn->displayWidth*pTDFX->cpp; | |
138 | ||
139 | - /* Layout the memory. Start with all the ram */ | |
140 | - memRemaining=pScrn->videoRam<<10; | |
141 | - /* Remove the cursor space */ | |
142 | - memRemaining-=4096; | |
143 | - /* Remove the main screen and offscreen pixmaps */ | |
144 | - memRemaining-=pTDFX->stride*(pScrn->virtualY+128); | |
145 | - /* Remove one scanline for page alignment */ | |
146 | - memRemaining-=4095; | |
147 | - /* Remove the back and Z buffers */ | |
148 | if (pTDFX->cpp!=3) { | |
149 | screenSizeInTiles=calcBufferSize(pScrn->virtualX, pScrn->virtualY, | |
150 | TRUE, pTDFX->cpp); | |
151 | @@ -1622,41 +1615,77 @@ | |
152 | screenSizeInTiles=calcBufferSize(pScrn->virtualX, pScrn->virtualY, | |
153 | TRUE, 4); | |
154 | } | |
155 | - memRemaining-=screenSizeInTiles*2; | |
156 | - | |
157 | - /* Give all the rest to textures, rounded down to a page */ | |
158 | - texSize=memRemaining&~0xFFF; | |
159 | - | |
160 | - /* Make sure fifo has CMDFIFO_PAGES<fifoSize<255 pages */ | |
161 | - if (memRemaining-texSize<CMDFIFO_PAGES<<12) | |
162 | - texSize=(memRemaining-(CMDFIFO_PAGES<<12))&~0xFFF; | |
163 | - /* Fifo uses the remaining space up to 255 pages */ | |
164 | - fifoSize = (memRemaining-texSize)&~0xFFF; | |
165 | - if (fifoSize>255<<12) fifoSize=255<<12; | |
166 | - | |
167 | - /* Assign the variables */ | |
168 | - /* Cursor */ | |
169 | - pTDFX->cursorOffset=0; /* Size 1024 bytes */ | |
170 | - | |
171 | - /* Point the fifo at the first page */ | |
172 | + memRemaining=((pScrn->videoRam<<10) - 1) &~ 0xFFF; | |
173 | + /* Note that a page is 4096 bytes, and a */ | |
174 | + /* tile is 32 x 128 = 4096 bytes. So, */ | |
175 | + /* page and tile boundaries are the same */ | |
176 | + /* Place the depth offset first, forcing */ | |
177 | + /* it to be on an *odd* page boundary. */ | |
178 | + pTDFX->depthOffset = (memRemaining - screenSizeInTiles) &~ 0xFFF; | |
179 | + if ((pTDFX->depthOffset & (0x1 << 12)) == 0) { | |
180 | +#if 0 | |
181 | + xf86DrvMsg(pScrn->scrnIndex, X_INFO, | |
182 | + "Changing depth offset from 0x%08x to 0x%08x\n", | |
183 | + pTDFX->depthOffset, | |
184 | + pTDFX->depthOffset - (0x1 << 12)); | |
185 | +#endif | |
186 | + pTDFX->depthOffset -= (0x1 << 12); | |
187 | + } | |
188 | + /* Now, place the back buffer, forcing it */ | |
189 | + /* to be on an *even* page boundary. */ | |
190 | + pTDFX->backOffset = (pTDFX->depthOffset - screenSizeInTiles) &~ 0xFFF; | |
191 | + if (pTDFX->backOffset & (0x1 << 12)) { | |
192 | +#if 0 | |
193 | + xf86DrvMsg(pScrn->scrnIndex, X_INFO, | |
194 | + "Changing back offset from 0x%08x to 0x%08x\n", | |
195 | + pTDFX->backOffset, | |
196 | + pTDFX->backOffset - (0x1 << 12)); | |
197 | +#endif | |
198 | + pTDFX->backOffset -= (0x1 << 12); | |
199 | + } | |
200 | + /* Now, place the front buffer, forcing */ | |
201 | + /* it to be on a page boundary too, just */ | |
202 | + /* for giggles. */ | |
203 | + pTDFX->fbOffset | |
204 | + = (pTDFX->backOffset - (pScrn->virtualY+128)*pTDFX->stride) &~ 0xFFF; | |
205 | + /* Give the cmd fifo at least */ | |
206 | + /* CMDFIFO_PAGES pages, but no more than */ | |
207 | + /* 255. */ | |
208 | + fifoSize = ((255 <= CMDFIFO_PAGES) ? 255 : CMDFIFO_PAGES) << 12; | |
209 | + /* We give 4096 bytes to the cursor, fifoSize to the */ | |
210 | + /* FIFO, and everything to textures. */ | |
211 | + texSize = (pTDFX->fbOffset - fifoSize - 4096); | |
212 | + pTDFX->texOffset = pTDFX->fbOffset - texSize; | |
213 | + pTDFX->texSize = texSize; | |
214 | pTDFX->fifoOffset = 4096; | |
215 | pTDFX->fifoSize = fifoSize; | |
216 | - | |
217 | - /* Textures */ | |
218 | - pTDFX->texOffset = pTDFX->fifoOffset+fifoSize; | |
219 | - pTDFX->texSize = texSize; | |
220 | - | |
221 | - /* Frame buffer */ | |
222 | - pTDFX->fbOffset=pTDFX->texOffset+pTDFX->texSize; | |
223 | - | |
224 | - /* Back buffer */ | |
225 | - pTDFX->backOffset=pTDFX->fbOffset+(pScrn->virtualY+128)*pTDFX->stride; | |
226 | - /* Round off to a page */ | |
227 | - pTDFX->backOffset=(pTDFX->backOffset+4095)&~0xFFF; | |
228 | - | |
229 | - /* Depth buffer */ | |
230 | - pTDFX->depthOffset=pTDFX->backOffset+screenSizeInTiles; | |
231 | - | |
232 | + pTDFX->cursorOffset = 0; | |
233 | +#if 0 | |
234 | + xf86DrvMsg(pScrn->scrnIndex, X_INFO, | |
235 | + "Cursor Offset: [0x%08X,0x%08X)\n", | |
236 | + pTDFX->cursorOffset, | |
237 | + pTDFX->cursorOffset+1024); | |
238 | + xf86DrvMsg(pScrn->scrnIndex, X_INFO, | |
239 | + "Fifo Offset: [0x%08X, 0x%08X)\n", | |
240 | + pTDFX->fifoOffset, | |
241 | + pTDFX->fifoOffset+fifoSize); | |
242 | + xf86DrvMsg(pScrn->scrnIndex, X_INFO, | |
243 | + "Texture Offset: [0x%08X, 0x%08X)\n", | |
244 | + pTDFX->texOffset, | |
245 | + pTDFX->texOffset + texSize); | |
246 | + xf86DrvMsg(pScrn->scrnIndex, X_INFO, | |
247 | + "Front Buffer Offset: [0x%08X, 0x%08X)\n", | |
248 | + pTDFX->fbOffset, | |
249 | + pTDFX->fbOffset + (pScrn->virtualY+128)*pTDFX->stride); | |
250 | + xf86DrvMsg(pScrn->scrnIndex, X_INFO, | |
251 | + "BackOffset: [0x%08X, 0x%08X)\n", | |
252 | + pTDFX->backOffset, | |
253 | + pTDFX->backOffset+screenSizeInTiles); | |
254 | + xf86DrvMsg(pScrn->scrnIndex, X_INFO, | |
255 | + "DepthOffset: [0x%08X, 0x%08X)\n", | |
256 | + pTDFX->depthOffset, | |
257 | + pTDFX->depthOffset+screenSizeInTiles); | |
258 | +#endif /* 0/1 */ | |
259 | xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Textures Memory %0.02f MB\n", | |
260 | (float)texSize/1024.0/1024.0); | |
261 | } | |
262 | --- XFree86-4.0.1/xc/programs/Xserver/hw/xfree86/drivers/tdfx/tdfx_accel.c.chmou Tue Sep 19 17:34:43 2000 | |
263 | +++ XFree86-4.0.1/xc/programs/Xserver/hw/xfree86/drivers/tdfx/tdfx_accel.c Tue Sep 19 18:30:25 2000 | |
264 | @@ -163,12 +163,22 @@ | |
265 | } else { | |
266 | int chip; | |
267 | int stride, bits; | |
268 | + int TileAperturePitch, lg2TileAperturePitch; | |
269 | if (pTDFX->cpp==2) stride=pTDFX->stride; | |
270 | else stride=4*pTDFX->stride/pTDFX->cpp; | |
271 | bits=pTDFX->backOffset>>12; | |
272 | + for (lg2TileAperturePitch = 0, TileAperturePitch = 1024; | |
273 | + (lg2TileAperturePitch < 5) && | |
274 | + TileAperturePitch < stride; | |
275 | + lg2TileAperturePitch += 1, TileAperturePitch <<= 1); | |
276 | +#if 0 | |
277 | + fprintf(stderr, "Using %d (== lg2(%d)-10) for tile aperture pitch\n", | |
278 | + lg2TileAperturePitch, TileAperturePitch); | |
279 | + fprintf(stderr, "stride == %d\n", stride); | |
280 | +#endif | |
281 | for (chip=0; chip<pTDFX->numChips; chip++) { | |
282 | TDFXWriteChipLongMMIO(pTDFX, chip, LFBMEMORYCONFIG, (bits&0x1FFF) | | |
283 | - SST_RAW_LFB_ADDR_STRIDE_4K | | |
284 | + SST_RAW_LFB_ADDR_STRIDE(lg2TileAperturePitch) | | |
285 | ((bits&0x6000)<<10) | | |
286 | ((stride+127)/128)<<SST_RAW_LFB_TILE_STRIDE_SHIFT); | |
287 | } | |
288 | --- XFree86-4.0.1/xc/programs/Xserver/hw/xfree86/drivers/tdfx/tdfx_sli.c.chmou Tue Sep 19 17:34:43 2000 | |
289 | +++ XFree86-4.0.1/xc/programs/Xserver/hw/xfree86/drivers/tdfx/tdfx_sli.c Tue Sep 19 18:30:25 2000 | |
290 | @@ -1,4 +1,3 @@ | |
291 | -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/tdfx/tdfx_sli.c,v 1.2 2000/06/17 18:23:23 dawes Exp $ */ | |
292 | ||
293 | #include "xf86.h" | |
294 | #include "xf86_ansic.h" | |
295 | --- XFree86-4.0.1/xc/programs/Xserver/hw/xfree86/drivers/tdfx/tdfxdefs.h.chmou Tue Sep 19 17:34:43 2000 | |
296 | +++ XFree86-4.0.1/xc/programs/Xserver/hw/xfree86/drivers/tdfx/tdfxdefs.h Tue Sep 19 18:30:25 2000 | |
297 | @@ -52,8 +52,26 @@ | |
298 | ||
299 | #define MEM_TYPE_SGRAM 0 | |
300 | #define MEM_TYPE_SDRAM 1 | |
301 | +/* | |
302 | + * SST_RAW_LFB_ADDR_STRIDE(Lg2SizeInK) takes the | |
303 | + * lfbMemoryConfig value for SGRAMStrideInTiles. This | |
304 | + * is given by this table: | |
305 | + * SGRAMStrideInBytes lfbMemoryConfig Value | |
306 | + * ================== ===================== | |
307 | + * 1k 0 | |
308 | + * 2k 1 | |
309 | + * 4k 2 | |
310 | + * 8k 3 | |
311 | + * 16k 4 | |
312 | + * | |
313 | + * FWIW, the right hand column is log2(left hand column)-10 | |
314 | + */ | |
315 | #define SST_RAW_LFB_ADDR_STRIDE_SHIFT 13 | |
316 | -#define SST_RAW_LFB_ADDR_STRIDE_4K 0x2<<SST_RAW_LFB_ADDR_STRIDE_SHIFT | |
317 | +#define SST_RAW_LFB_ADDR_STRIDE(Lg2SizeInK) \ | |
318 | + ((Lg2SizeInK)<<SST_RAW_LFB_ADDR_STRIDE_SHIFT) | |
319 | +#define SST_RAW_LFB_ADDR_STRIDE_4K SST_RAW_LFB_ADDR_STRIDE(2) | |
320 | +#define SST_RAW_LFB_ADDR_STRIDE_8K SST_RAW_LFB_ADDR_STRIDE(3) | |
321 | +#define SST_RAW_LFB_ADDR_STRIDE_16K SST_RAW_LFB_ADDR_STRIDE(4) | |
322 | #define SST_RAW_LFB_TILE_STRIDE_SHIFT 16 | |
323 | ||
324 | #define BLIT_LEFT 1 |