2 * Author: Max Lingua <sunmax@libero.it>
5 #include "s3v_context.h"
9 s3vScreenPtr
s3vCreateScreen( __DRIscreenPrivate
*sPriv
)
11 s3vScreenPtr s3vScreen
;
12 S3VDRIPtr vDRIPriv
= (S3VDRIPtr
)sPriv
->pDevPriv
;
16 DEBUG(("s3vCreateScreen\n"));
17 DEBUG(("sPriv->pDevPriv at %p\n", sPriv
->pDevPriv
));
18 DEBUG(("size = %i\n", sizeof(*vDRIPriv
)));
20 if (sPriv
->devPrivSize
!= sizeof(S3VDRIRec
)) {
21 fprintf(stderr
,"\nERROR! sizeof(S3VDRIRec) does not match passed size from device driver\n");
25 /* Allocate the private area */
26 s3vScreen
= (s3vScreenPtr
) CALLOC( sizeof(*s3vScreen
) );
27 if ( !s3vScreen
) return NULL
;
29 s3vScreen
->regionCount
= 4; /* Magic number. Can we fix this? */
31 s3vScreen
->regions
= _mesa_malloc(s3vScreen
->regionCount
*
33 DEBUG(("sPriv->fd = %i\nvDRIPriv->dmaBufHandle = %x\n",
34 sPriv
->fd
, vDRIPriv
->dmaBufHandle
));
36 DEBUG(("vDRIPriv->dmaBufSize=%i\nvDRIPriv->dmaBuf=%p\n",
37 vDRIPriv
->dmaBufSize
, vDRIPriv
->dmaBuf
));
40 /* Get the list of dma buffers */
41 s3vScreen
->bufs
= drmMapBufs(sPriv
->fd
);
43 if (!s3vScreen
->bufs
) {
44 DEBUG(("Helter/skelter with drmMapBufs\n"));
48 s3vScreen
->textureSize
= vDRIPriv
->texSize
;
49 s3vScreen
->logTextureGranularity
= vDRIPriv
->logTextureGranularity
;
50 s3vScreen
->cpp
= vDRIPriv
->cpp
;
51 s3vScreen
->frontOffset
= vDRIPriv
->frontOffset
;
52 s3vScreen
->frontPitch
= vDRIPriv
->frontPitch
;
53 s3vScreen
->backOffset
= vDRIPriv
->backOffset
;
54 s3vScreen
->backPitch
= vDRIPriv
->frontPitch
; /* FIXME: check */
55 s3vScreen
->depthOffset
= vDRIPriv
->depthOffset
;
56 s3vScreen
->depthPitch
= vDRIPriv
->frontPitch
;
57 s3vScreen
->texOffset
= vDRIPriv
->texOffset
;
59 s3vScreen
->driScreen
= sPriv
;
61 DEBUG(("vDRIPriv->width =%i; vDRIPriv->deviceID =%x\n", vDRIPriv
->width
,
63 DEBUG(("vDRIPriv->mem =%i\n", vDRIPriv
->mem
));
64 DEBUG(("vDRIPriv->fbOffset =%i\n", vDRIPriv
->fbOffset
));
65 DEBUG((" ps3vDRI->fbStride =%i\n", vDRIPriv
->fbStride
));
66 DEBUG(("s3vScreen->cpp = %i\n", s3vScreen
->cpp
));
67 DEBUG(("s3vScreen->backOffset = %x\n", s3vScreen
->backOffset
));
68 DEBUG(("s3vScreen->depthOffset = %x\n", s3vScreen
->depthOffset
));
69 DEBUG(("s3vScreen->texOffset = %x\n", s3vScreen
->texOffset
));
70 DEBUG(("I will return from s3vCreateScreen now\n"));
72 DEBUG(("s3vScreen->bufs = 0x%x\n", s3vScreen
->bufs
));
76 /* Destroy the device specific screen private data struct.
78 void s3vDestroyScreen( __DRIscreenPrivate
*sPriv
)
80 s3vScreenPtr s3vScreen
= (s3vScreenPtr
)sPriv
->private;
82 DEBUG(("s3vDestroyScreen\n"));
84 /* First, unmap the dma buffers */
86 drmUnmapBufs( s3vScreen->bufs );
88 /* Next, unmap all the regions */
89 /* while (s3vScreen->regionCount > 0) {
91 (void)drmUnmap(s3vScreen->regions[s3vScreen->regionCount].map,
92 s3vScreen->regions[s3vScreen->regionCount].size);
93 s3vScreen->regionCount--;
96 FREE(s3vScreen->regions); */