source: trunk/src/opengl/glide/sst1/init/vgdrvr.c

Last change on this file was 6653, checked in by bird, 24 years ago

Added $Id:$ keyword.

File size: 6.3 KB
Line 
1/* $Id: vgdrvr.c,v 1.2 2001-09-05 14:31:01 bird Exp $ */
2/*
3** THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
4** PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
5** TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
6** INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
7** DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
8** THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
9** EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
10** FULL TEXT OF THE NON-WARRANTY PROVISIONS.
11**
12** USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
13** RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
14** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
15** AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
16** SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
17** THE UNITED STATES.
18**
19** COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
20**
21**
22** $Revision: 1.2 $
23** $Date: 2001-09-05 14:31:01 $
24**
25*/
26
27#include <3dfx.h>
28#include <sst1init.h>
29#include "init.h"
30#include "fxinit.h"
31#include <sst1init.h>
32#include <sst.h>
33
34static FxBool FX_CALL setVideo( FxU32 hWnd,
35 GrScreenResolution_t sRes,
36 GrScreenRefresh_t vRefresh,
37 InitColorFormat_t cFormat,
38 InitOriginLocation_t yOrigin,
39 int nColBuffers,
40 int nAuxBuffers,
41 int *xres,
42 int *yres,
43 int *fbStride,
44 sst1VideoTimingStruct *vidTimings) {
45 FxBool rv;
46 static int _w[] = {320,320,400,512,640,640,640,640,800,960,856,512};
47 static int _h[] = {200,240,256,384,200,350,400,480,600,720,480,256};
48
49 rv = sst1InitVideo( (FxU32*)context->info.hwDep.vgInfo.vgBaseAddr,
50 sRes,
51 vRefresh,
52 vidTimings );
53
54 if ( !rv ) goto BAIL;
55
56 if ( context->info.hwDep.vgInfo.sliDetect ) {
57 rv = sst1InitRegisters((FxU32*)context->info.hwDep.vgInfo.slaveBaseAddr);
58 if ( !rv ) goto BAIL;
59 rv = sst1InitVideo( (FxU32*)context->info.hwDep.vgInfo.slaveBaseAddr,
60 sRes,
61 vRefresh,
62 vidTimings );
63 if ( !rv ) goto BAIL;
64 rv = sst1InitSli( (FxU32*)context->info.hwDep.vgInfo.vgBaseAddr,
65 (FxU32*)context->info.hwDep.vgInfo.slaveBaseAddr );
66 if ( !rv ) goto BAIL;
67 }
68
69 if(vidTimings) {
70 *xres = vidTimings->xDimension;
71 *yres = vidTimings->yDimension;
72 } else {
73 *xres = _w[sRes];
74 *yres = _h[sRes];
75 }
76 *fbStride = 1024; /* 1024 always */
77
78BAIL:
79 return rv;
80}
81
82static void FX_CALL restoreVideo( void ) {
83 sst1InitShutdown( (FxU32*)context->info.hwDep.vgInfo.vgBaseAddr );
84}
85
86static FxBool FX_CALL enableTransport( InitFIFOData *info ) {
87 FxBool rv = FXFALSE;
88 sst1DeviceInfoStruct sstInfo;
89
90 if ( info ) {
91 rv = sst1InitGetDeviceInfo( (FxU32*)context->info.hwDep.vgInfo.vgBaseAddr,
92 &sstInfo );
93 info->hwDep.vgFIFOData.memFifoStatusLwm = sstInfo.memFifoStatusLwm;
94 }
95
96 sst1InitCachingOn();
97
98 return rv;
99}
100
101static void FX_CALL disableTransport( void ) {
102}
103
104static InitSwapType_t FX_CALL swapBuffers( FxU32 code ) {
105 return INIT_SWAP_FLIP;
106}
107
108static FxU32 FX_CALL status( void ) {
109 return sst1InitReturnStatus((FxU32 *) context->info.hwDep.vgInfo.vgBaseAddr);
110}
111
112static FxBool FX_CALL busy(void) {
113 FxU32 stat = status();
114 FxBool ret = (stat & SST_BUSY) ? FXTRUE : FXFALSE;
115
116 return ret;
117}
118
119static void FX_CALL idle( void ) {
120 sst1InitIdle((FxU32 *)context->info.hwDep.vgInfo.vgBaseAddr);
121}
122
123static void * FX_CALL getBufferPtr( InitBuffer_t buffer, int *strideBytes ) {
124 return 0;
125}
126
127static void FX_CALL renderBuffer( InitBuffer_t buffer ) {
128 return;
129}
130
131static void FX_CALL origin( InitOriginLocation_t origin ) {
132 return;
133}
134
135static void FX_CALL ioCtl( FxU32 token, void *argument ) {
136 return;
137}
138
139static FxBool FX_CALL control( FxU32 code ) {
140 switch ( code ) {
141 case INIT_CONTROL_DEACTIVATE:
142 sst1InitVgaPassCtrl( (FxU32*)context->info.hwDep.vgInfo.vgBaseAddr,
143 FXTRUE );
144 break;
145 case INIT_CONTROL_ACTIVATE:
146 sst1InitVgaPassCtrl( (FxU32*)context->info.hwDep.vgInfo.vgBaseAddr,
147 FXFALSE );
148 break;
149 }
150 return FXTRUE;
151}
152
153static FxBool FX_CALL wrapFIFO(InitFIFOData *fd) {
154 return FXTRUE;
155}
156
157static void FX_CALL gamma( double gamma ) {
158 sst1InitGamma((FxU32 *) context->info.hwDep.vgInfo.vgBaseAddr, gamma);
159}
160
161static void FX_CALL sliPciOwner( FxU32 *regbase, FxU32 owner ) {
162 sst1InitSliPciOwner(regbase, owner);
163}
164
165static FxBool FX_CALL gammargb( double r, double g, double b ) {
166 return sst1InitGammaRGB((FxU32 *) context->info.hwDep.vgInfo.vgBaseAddr, r, g, b);
167}
168
169static FxBool FX_CALL gammatable( FxU32 nentries, FxU32 *r, FxU32 *g, FxU32 *b ) {
170 return sst1InitGammaTable((FxU32 *) context->info.hwDep.vgInfo.vgBaseAddr, nentries, r, g, b);
171}
172
173static sst1VideoTimingStruct * FX_CALL findvidtiming( GrScreenResolution_t sRes, GrScreenRefresh_t vRefresh) {
174 return sst1InitFindVideoTimingStruct(sRes, vRefresh);
175}
176
177void vgDriverInit( InitContext *context ) {
178 context->setVideo = setVideo;
179 context->restoreVideo = restoreVideo;
180 context->enableTransport = enableTransport;
181 context->disableTransport = disableTransport;
182 context->swapBuffers = swapBuffers;
183 context->status = status;
184 context->busy = busy;
185 context->idle = idle;
186 context->getBufferPtr = getBufferPtr;
187 context->renderBuffer = renderBuffer;
188 context->origin = origin;
189 context->ioCtl = ioCtl;
190 context->control = control;
191 context->wrapFIFO = wrapFIFO;
192
193
194 context->gamma = gamma;
195 context->sliPciOwner = sliPciOwner;
196
197 context->gammaRGB = gammargb;
198 context->initGammaTable = gammatable;
199 context->findVidTimingStruct = findvidtiming;
200
201}
202
Note: See TracBrowser for help on using the repository browser.