Get s3v building with a minimum of warnings.

This commit is contained in:
Adam Jackson 2004-12-27 20:31:56 +00:00
parent 99edafd4e8
commit c3eaa17b37
18 changed files with 479 additions and 202 deletions

View file

@ -0,0 +1,46 @@
# src/mesa/drivers/dri/s3v/Makefile
TOP = ../../../../..
include $(TOP)/configs/current
LIBNAME = s3v_dri.so
# Doesn't exist yet.
#MINIGLX_SOURCES = server/savage_dri.c
COMMON_SOURCES = \
../../common/driverfuncs.c \
../common/mm.c \
../common/utils.c \
../common/texmem.c \
../common/vblank.c \
../common/xmlconfig.c \
../common/dri_util.c \
../common/glcontextmodes.c
DRIVER_SOURCES = \
s3v_context.c \
s3v_dd.c \
s3v_inithw.c \
s3v_lock.c \
s3v_render.c \
s3v_screen.c \
s3v_span.c \
s3v_state.c \
s3v_tex.c \
s3v_texmem.c \
s3v_texstate.c \
s3v_tris.c \
s3v_vb.c \
s3v_xmesa.c
C_SOURCES = \
$(COMMON_SOURCES) \
$(DRIVER_SOURCES)
ASM_SOURCES =
include ../Makefile.template
symlinks:

View file

@ -0,0 +1,83 @@
/*
* Author: Max Lingua <sunmax@libero.it>
*/
/* WARNING: If you change any of these defines, make sure to change
* the kernel include file as well (s3v_drm.h)
*/
#ifndef _XF86DRI_S3V_H_
#define _XF86DRI_S3V_H_
#ifndef _S3V_DEFINES_
#define _S3V_DEFINES_
#define S3V_USE_BATCH 1
/* #define S3V_BUF_4K 1 */
#ifdef S3V_BUF_4K
#define S3V_DMA_BUF_ORDER 12
#define S3V_DMA_BUF_NR 256
#else
#define S3V_DMA_BUF_ORDER 16 /* -much- better */
#define S3V_DMA_BUF_NR 16
#endif
/* on s3virge you can only choose between *
* 4k (2^12) and 64k (2^16) dma bufs */
#define S3V_DMA_BUF_SZ (1<<S3V_DMA_BUF_ORDER)
#define S3V_NR_SAREA_CLIPRECTS 8
/* Each region is a minimum of 16k (64*64@4bpp)
* and there are at most 40 of them.
*/
#define S3V_NR_TEX_REGIONS 64 /* was 40 */
#define S3V_LOG_TEX_GRANULARITY 16 /* was 4 */
/* 40 * (2 ^ 4) = 640k, that's all we have for tex on 4mb gfx card */
/* FIXME: will it work with card with less than 4mb? */
/* FIXME: we should set this at run time */
#endif /* _S3V_DEFINES */
/*
* WARNING: If you change any of these defines, make sure to change
* the kernel include file as well (gamma_drm.h)
*/
/* Driver specific DRM command indices
* NOTE: these are not OS specific, but they are driver specific
*/
#define DRM_S3V_INIT_DMA 0x00
#define DRM_S3V_CLEANUP_DMA 0x01
typedef struct _drmS3VInit {
enum {
S3V_INIT_DMA = 0x01,
S3V_CLEANUP_DMA = 0x02
} func;
unsigned int pcimode; /* bool: 1=pci 0=agp */
unsigned int mmio_offset;
unsigned int buffers_offset;
unsigned int sarea_priv_offset;
unsigned int front_offset;
unsigned int front_width;
unsigned int front_height;
unsigned int front_pitch;
unsigned int back_offset;
unsigned int back_width;
unsigned int back_height;
unsigned int back_pitch;
unsigned int depth_offset;
unsigned int depth_width;
unsigned int depth_height;
unsigned int depth_pitch;
unsigned int texture_offset;
} drmS3VInit;
#endif

View file

@ -13,24 +13,22 @@
#include "context.h"
#include "simple_list.h"
#include "mem.h"
#include "matrix.h"
#include "extensions.h"
#if defined(USE_X86_ASM)
#include "X86/common_x86_asm.h"
#endif
#include "simple_list.h"
#include "mem.h"
#include "mm.h"
#include "drivers/common/driverfuncs.h"
#include "s3v_vb.h"
#include "s3v_tris.h"
#if 0
extern const struct gl_pipeline_stage _s3v_render_stage;
extern const struct tnl_pipeline_stage _s3v_render_stage;
static const struct gl_pipeline_stage *s3v_pipeline[] = {
static const struct tnl_pipeline_stage *s3v_pipeline[] = {
&_tnl_vertex_transform_stage,
&_tnl_normal_transform_stage,
&_tnl_lighting_stage,
@ -46,16 +44,17 @@ static const struct gl_pipeline_stage *s3v_pipeline[] = {
};
#endif
GLboolean s3vCreateContext( Display *dpy, const __GLcontextModes *glVisual,
__DRIcontextPrivate *driContextPriv,
void *sharedContextPrivate)
GLboolean s3vCreateContext(const __GLcontextModes *glVisual,
__DRIcontextPrivate *driContextPriv,
void *sharedContextPrivate)
{
GLcontext *ctx, *shareCtx;
__DRIscreenPrivate *sPriv = driContextPriv->driScreenPriv;
s3vContextPtr vmesa;
s3vScreenPtr s3vScrn;
S3VSAREAPtr saPriv=(S3VSAREAPtr)(((char*)sPriv->pSAREA)+
sizeof(XF86DRISAREARec));
S3VSAREAPtr saPriv=(S3VSAREAPtr)(((char*)sPriv->pSAREA) +
sizeof(drm_sarea_t));
struct dd_function_table functions;
DEBUG_WHERE(("*** s3vCreateContext ***\n"));
@ -68,20 +67,21 @@ GLboolean s3vCreateContext( Display *dpy, const __GLcontextModes *glVisual,
else
shareCtx = NULL;
vmesa->glCtx = _mesa_create_context(glVisual, shareCtx, vmesa, GL_TRUE);
_mesa_init_driver_functions(&functions);
vmesa->glCtx = _mesa_create_context(glVisual, shareCtx, &functions,
(void *)vmesa);
if (!vmesa->glCtx) {
FREE(vmesa);
return GL_FALSE;
}
vmesa->display = dpy;
vmesa->driContext = driContextPriv;
vmesa->driScreen = sPriv;
vmesa->driDrawable = NULL; /* Set by XMesaMakeCurrent */
vmesa->hHWContext = driContextPriv->hHWContext;
vmesa->driHwLock = &sPriv->pSAREA->lock;
vmesa->driHwLock = (drmLock *)&sPriv->pSAREA->lock;
vmesa->driFd = sPriv->fd;
vmesa->sarea = saPriv;

View file

@ -11,6 +11,7 @@
#include "s3v_regs.h"
#include "s3v_macros.h"
#include "s3v_screen.h"
#include "colormac.h"
#include "macros.h"
#include "mtypes.h"
#include "drm.h"
@ -32,8 +33,7 @@
extern void s3vDDUpdateHWState(GLcontext *ctx);
extern s3vScreenPtr s3vCreateScreen(__DRIscreenPrivate *sPriv);
extern void s3vDestroyScreen(__DRIscreenPrivate *sPriv);
extern GLboolean s3vCreateContext( Display *dpy,
const __GLcontextModes *glVisual,
extern GLboolean s3vCreateContext(const __GLcontextModes *glVisual,
__DRIcontextPrivate *driContextPriv,
void *sharedContextPrivate);
@ -129,17 +129,17 @@ struct s3v_texture_object_t {
int internalFormat;
} image[S3V_TEX_MAXLEVELS];
CARD32 TextureCMD;
GLuint TextureCMD;
CARD32 TextureColorMode;
CARD32 TextureFilterMode;
CARD32 TextureBorderColor;
CARD32 TextureWrap;
CARD32 TextureMipSize;
GLuint TextureColorMode;
GLuint TextureFilterMode;
GLuint TextureBorderColor;
GLuint TextureWrap;
GLuint TextureMipSize;
CARD32 TextureBaseAddr[S3V_TEX_MAXLEVELS];
CARD32 TextureFormat;
CARD32 TextureReadMode;
GLuint TextureBaseAddr[S3V_TEX_MAXLEVELS];
GLuint TextureFormat;
GLuint TextureReadMode;
};
#define S3V_NO_PALETTE 0x0
@ -222,17 +222,16 @@ struct s3v_context {
/* Mirrors of some DRI state
*/
Display *display; /* X server display */
drmContext hHWContext;
drm_context_t hHWContext;
drmLock *driHwLock;
int driFd;
GLuint numClipRects; /* Cliprects for the draw buffer */
XF86DRIClipRectPtr pClipRects;
drm_clip_rect_t *pClipRects;
CARD32* buf; /* FIXME */
CARD32* _buf[2];
GLuint* buf; /* FIXME */
GLuint* _buf[2];
int _bufNum;
int bufIndex[2];
int bufSize;
@ -281,40 +280,40 @@ struct s3v_context {
unsigned int S3V_REG[S3V_REGS_NUM];
CARD32 texMode;
CARD32 alphaMode;
CARD32 lightMode;
GLuint texMode;
GLuint alphaMode;
GLuint lightMode;
CARD32 SrcBase;
CARD32 DestBase;
CARD32 DestBlit;
CARD32 ScissorLR;
CARD32 ScissorTB;
CARD32 ScissorWH; /* SubScissorWH */ /* RectWH */
CARD32 FrontStride;
CARD32 BackStride;
CARD32 SrcStride;
CARD32 DestStride;
CARD32 SrcXY;
CARD32 DestXY;
GLuint SrcBase;
GLuint DestBase;
GLuint DestBlit;
GLuint ScissorLR;
GLuint ScissorTB;
GLuint ScissorWH; /* SubScissorWH */ /* RectWH */
GLuint FrontStride;
GLuint BackStride;
GLuint SrcStride;
GLuint DestStride;
GLuint SrcXY;
GLuint DestXY;
CARD32 ClearColor;
CARD32 Color;
CARD32 DitherMode;
CARD32 ClearDepth;
GLuint ClearColor;
GLuint Color;
GLuint DitherMode;
GLuint ClearDepth;
CARD32 TextureBorderColor;
CARD32 TexOffset;
CARD32 TexStride;
GLuint TextureBorderColor;
GLuint TexOffset;
GLuint TexStride;
CARD32 CMD;
CARD32 prim_cmd;
CARD32 _tri[2]; /* 0 = gouraud; 1 = tex (lit or unlit) */
CARD32 alpha_cmd; /* actual alpha cmd */
CARD32 _alpha[2];
CARD32 _alpha_tex; /* tex alpha type */
GLuint CMD;
GLuint prim_cmd;
GLuint _tri[2]; /* 0 = gouraud; 1 = tex (lit or unlit) */
GLuint alpha_cmd; /* actual alpha cmd */
GLuint _alpha[2];
GLuint _alpha_tex; /* tex alpha type */
/* (3d_mode) 0 = 3d line/gourad tri; 1 = 3d tex tri */
CARD32 _3d_mode;
GLuint _3d_mode;
GLfloat backface_sign;
GLfloat cull_zero;
@ -323,14 +322,14 @@ struct s3v_context {
/* *** 2check *** */
CARD32 FogMode;
CARD32 AreaStippleMode;
CARD32 LBReadFormat;
CARD32 LBWriteFormat;
CARD32 LineMode;
CARD32 PointMode;
CARD32 TriangleMode;
CARD32 AntialiasMode;
GLuint FogMode;
GLuint AreaStippleMode;
GLuint LBReadFormat;
GLuint LBWriteFormat;
GLuint LineMode;
GLuint PointMode;
GLuint TriangleMode;
GLuint AntialiasMode;
GLfloat ViewportScaleX;
GLfloat ViewportScaleY;
GLfloat ViewportScaleZ;

View file

@ -0,0 +1,143 @@
/*
* Author: Max Lingua <sunmax@libero.it>
*/
#ifndef _S3V_DRI
#define _S3V_DRI
#include "s3v_common.h"
#define S3V_MAX_DRAWABLES (S3V_DMA_BUF_NR/2) /* 32 */ /* 256 */ /* FIXME */
typedef struct
{
int deviceID;
int width;
int height;
int mem;
int cpp;
int bitsPerPixel;
int fbOffset;
int fbStride;
int logTextureGranularity;
int textureOffset;
drm_handle_t regs;
drmSize regsSize;
unsigned int sarea_priv_offset;
/*
drmAddress regsMap;
drmSize textureSize;
drm_handle_t textures;
*/
#if 0
drm_handle_t agp_buffers;
drmSize agp_buf_size;
#endif
/*
drmBufMapPtr drmBufs;
int irq;
unsigned int sarea_priv_offset;
*/
/* FIXME: cleanup ! */
drmSize registerSize; /* == S3V_MMIO_REGSIZE */
drm_handle_t registerHandle;
drmSize pciSize;
drm_handle_t pciMemHandle;
drmSize frontSize; /* == videoRambytes */
/* drm_handle_t frontHandle; */
unsigned long frontOffset; /* == fbOffset */
int frontPitch;
/* unsigned char *front; */
unsigned int bufferSize; /* size of depth/back buffer */
drmSize backSize;
/* drm_handle_t backHandle; */
unsigned long backOffset;
int backPitch;
/* unsigned char *back; */
drmSize depthSize;
/* drm_handle_t depthHandle; */
unsigned long depthOffset;
int depthPitch;
/* unsigned char *depth; */
drmSize texSize;
/* drm_handle_t texHandle; */
unsigned long texOffset;
int texPitch;
/* unsigned char *tex; */
drmSize dmaBufSize; /* Size of buffers (in bytes) */
drm_handle_t dmaBufHandle; /* Handle from drmAddMap */
unsigned long dmaBufOffset; /* Offset/Start */
int dmaBufPitch; /* Pitch */
unsigned char *dmaBuf; /* Map */
int bufNumBufs; /* Number of buffers */
drmBufMapPtr buffers; /* Buffer map */
} S3VDRIRec, *S3VDRIPtr;
/* WARNING: Do not change the SAREA structure without changing the kernel
* as well */
typedef struct {
unsigned char next, prev; /* indices to form a circular LRU */
unsigned char in_use; /* owned by a client, or free? */
int age; /* tracked by clients to update local LRU's */
} S3VTexRegionRec, *S3VTexRegionPtr;
typedef struct {
unsigned int nbox;
drm_clip_rect_t boxes[S3V_NR_SAREA_CLIPRECTS];
/* Maintain an LRU of contiguous regions of texture space. If
* you think you own a region of texture memory, and it has an
* age different to the one you set, then you are mistaken and
* it has been stolen by another client. If global texAge
* hasn't changed, there is no need to walk the list.
*
* These regions can be used as a proxy for the fine-grained
* texture information of other clients - by maintaining them
* in the same lru which is used to age their own textures,
* clients have an approximate lru for the whole of global
* texture space, and can make informed decisions as to which
* areas to kick out. There is no need to choose whether to
* kick out your own texture or someone else's - simply eject
* them all in LRU order.
*/
S3VTexRegionRec texList[S3V_NR_TEX_REGIONS+1]; /* Last elt is sentinal */
int texAge; /* last time texture was uploaded */
int last_enqueue; /* last time a buffer was enqueued */
int last_dispatch; /* age of the most recently dispatched buffer */
int last_quiescent; /* */
int ctxOwner; /* last context to upload state */
} S3VSAREARec, *S3VSAREAPtr;
typedef struct {
/* Nothing here yet */
int dummy;
} S3VConfigPrivRec, *S3VConfigPrivPtr;
typedef struct {
/* Nothing here yet */
int dummy;
} S3VDRIContextRec, *S3VDRIContextPtr;
#endif

View file

@ -5,9 +5,7 @@
#include "glheader.h"
#include "context.h"
#include "macros.h"
#include "mem.h"
#include "mtypes.h"
#include "mmath.h"
#include "tnl/t_context.h"
@ -29,6 +27,7 @@
#define HAVE_ELTS 0
#if 0
static void VERT_FALLBACK( GLcontext *ctx,
GLuint start,
GLuint count,
@ -50,8 +49,9 @@ static void VERT_FALLBACK( GLcontext *ctx,
_flags = flags & PRIM_MODE_MASK;
tnl->Driver.Render.PrimTabVerts[_flags]( ctx, start, count, flags );
S3V_CONTEXT(ctx)->SetupNewInputs = VERT_CLIP;
S3V_CONTEXT(ctx)->SetupNewInputs = VERT_BIT_POS;
}
#endif
static const GLuint hw_prim[GL_POLYGON+1] = {
PrimType_Points,
@ -126,12 +126,10 @@ static __inline void s3vEndPrimitive( s3vContextPtr vmesa )
(vmesa->bufSize - vmesa->bufCount) / 2
#define GET_SUBSEQUENT_VB_MAX_VERTS() \
S3V_DMA_BUF_SZ / 2
#define EMIT_VERTS( ctx, j, nr ) \
do { \
printf("Alas, emit...\n"); \
/* s3v_emit(ctx, j, (j)+(nr)) */ \
/* we don't need emit on s3v */ \
} while (0)
/* XXX */
#define ALLOC_VERTS(nr) NULL
#define EMIT_VERTS(ctx, start, count, buf) NULL
#define FLUSH() s3vEndPrimitive( vmesa )
#define TAG(x) s3v_##x
@ -143,13 +141,13 @@ do { \
static GLboolean s3v_run_render( GLcontext *ctx,
struct gl_pipeline_stage *stage )
struct tnl_pipeline_stage *stage )
{
s3vContextPtr vmesa = S3V_CONTEXT(ctx);
TNLcontext *tnl = TNL_CONTEXT(ctx);
struct vertex_buffer *VB = &tnl->vb;
GLuint i, length, flags = 0;
render_func *tab;
GLuint i;
tnl_render_func *tab;
DEBUG(("s3v_run_render\n"));
@ -170,19 +168,20 @@ static GLboolean s3v_run_render( GLcontext *ctx,
tnl->Driver.Render.Start( ctx );
for (i = 0 ; !(flags & PRIM_LAST) ; i += length)
for (i = 0 ; i < VB->PrimitiveCount ; i++ )
{
flags = VB->Primitive[i];
length = VB->PrimitiveLength[i];
GLuint prim = VB->Primitive[i].mode;
GLuint start = VB->Primitive[i].start;
GLuint length = VB->Primitive[i].count;
DEBUG(("s3v_run_render (loop=%i) (lenght=%i)\n", i, length));
if (length) {
tnl->Driver.Render.BuildVertices( ctx, i, i+length,
~0 /*stage->inputs*/);
tnl->Driver.Render.PrimTabVerts[flags & PRIM_MODE_MASK]
( ctx, i, i + length, flags );
vmesa->SetupNewInputs = VERT_CLIP;
tnl->Driver.Render.BuildVertices( ctx, start,
start+length, ~0 /*stage->inputs*/); /* XXX */
tnl->Driver.Render.PrimTabVerts[prim & PRIM_MODE_MASK]
( ctx, start, start + length, prim );
vmesa->SetupNewInputs = VERT_BIT_POS;
}
}
@ -193,10 +192,10 @@ static GLboolean s3v_run_render( GLcontext *ctx,
static void s3v_check_render( GLcontext *ctx,
struct gl_pipeline_stage *stage )
struct tnl_pipeline_stage *stage )
{
s3vContextPtr vmesa = S3V_CONTEXT(ctx);
GLuint inputs = VERT_CLIP | VERT_RGBA;
GLuint inputs = VERT_BIT_POS | VERT_BIT_COLOR0;
DEBUG(("s3v_check_render\n"));
@ -204,22 +203,22 @@ static void s3v_check_render( GLcontext *ctx,
if (ctx->_TriangleCaps & DD_SEPARATE_SPECULAR) {
DEBUG(("DD_SEPARATE_SPECULAR\n"));
inputs |= VERT_SPEC_RGB;
inputs |= VERT_BIT_COLOR1;
}
if (ctx->Texture.Unit[0]._ReallyEnabled) {
DEBUG(("ctx->Texture.Unit[0]._ReallyEnabled\n"));
inputs |= VERT_TEX(0);
inputs |= VERT_BIT_TEX(0);
}
if (ctx->Texture.Unit[1]._ReallyEnabled) {
DEBUG(("ctx->Texture.Unit[1]._ReallyEnabled\n"));
inputs |= VERT_TEX(1);
inputs |= VERT_BIT_TEX(1);
}
if (ctx->Fog.Enabled) {
DEBUG(("ctx->Fog.Enabled\n"));
inputs |= VERT_FOG_COORD;
inputs |= VERT_BIT_FOG;
}
}
@ -228,13 +227,15 @@ static void s3v_check_render( GLcontext *ctx,
}
static void dtr( struct gl_pipeline_stage *stage )
static void dtr( struct tnl_pipeline_stage *stage )
{
(void)stage;
/* hack to silence a compiler warning */
(void) &s3v_validate_render;
}
const struct gl_pipeline_stage _s3v_render_stage =
const struct tnl_pipeline_stage _s3v_render_stage =
{
"s3v render",
(_DD_NEW_SEPARATE_SPECULAR |

View file

@ -6,8 +6,6 @@
#include "s3v_vb.h"
#include "s3v_dri.h"
#include "mem.h"
s3vScreenPtr s3vCreateScreen( __DRIscreenPrivate *sPriv )
{
s3vScreenPtr s3vScreen;
@ -25,7 +23,7 @@ s3vScreenPtr s3vCreateScreen( __DRIscreenPrivate *sPriv )
s3vScreen->regionCount = 4; /* Magic number. Can we fix this? */
s3vScreen->regions = Xmalloc(s3vScreen->regionCount *
s3vScreen->regions = _mesa_malloc(s3vScreen->regionCount *
sizeof(s3vRegion));
DEBUG(("sPriv->fd = %i\nvDRIPriv->dmaBufHandle = %x\n",
sPriv->fd, vDRIPriv->dmaBufHandle));

View file

@ -3,7 +3,7 @@
*/
typedef struct _s3vRegion {
drmHandle handle;
drm_handle_t handle;
drmSize size;
drmAddress map;
} s3vRegion, *s3vRegionPtr;

View file

@ -226,18 +226,19 @@ do { \
#endif
static void s3vSetReadBuffer( GLcontext *ctx,
GLframebuffer *colorBuffer,
GLenum mode )
static void s3vSetBuffer( GLcontext *ctx, GLframebuffer *colorBuffer,
GLuint bufferBit )
{
s3vContextPtr vmesa = S3V_CONTEXT(ctx);
switch ( mode ) {
case GL_FRONT_LEFT:
vmesa->readOffset = 0;
switch ( bufferBit ) {
case DD_FRONT_LEFT_BIT:
vmesa->drawOffset = vmesa->readOffset = 0;
break;
case GL_BACK_LEFT:
vmesa->readOffset = vmesa->driScreen->fbHeight * vmesa->driScreen->fbWidth * vmesa->s3vScreen->cpp;
case DD_BACK_LEFT_BIT:
vmesa->drawOffset = vmesa->readOffset = vmesa->driScreen->fbHeight *
vmesa->driScreen->fbWidth *
vmesa->s3vScreen->cpp;
break;
}
}
@ -248,7 +249,7 @@ void s3vInitSpanFuncs( GLcontext *ctx )
s3vContextPtr vmesa = S3V_CONTEXT(ctx);
struct swrast_device_driver *swdd = _swrast_GetDeviceDriverReference(ctx);
swdd->SetReadBuffer = s3vSetReadBuffer;
swdd->SetBuffer = s3vSetBuffer;
switch ( vmesa->s3vScreen->cpp ) {
case 2:

View file

@ -51,7 +51,7 @@ static void s3vUpdateAlphaMode( GLcontext *ctx )
}
static void s3vDDAlphaFunc( GLcontext *ctx, GLenum func, GLchan ref )
static void s3vDDAlphaFunc( GLcontext *ctx, GLenum func, GLfloat ref )
{
s3vContextPtr vmesa = S3V_CONTEXT(ctx);
@ -492,7 +492,7 @@ static void s3vDDColorMask( GLcontext *ctx, GLboolean r, GLboolean g,
* Miscellaneous
*/
static void s3vDDClearColor( GLcontext *ctx, const GLchan color[4])
static void s3vDDClearColor( GLcontext *ctx, const GLfloat color[4])
{
s3vContextPtr vmesa = S3V_CONTEXT(ctx);
@ -842,14 +842,17 @@ void s3vInitStateFuncs( GLcontext *ctx )
ctx->Driver.Clear = s3vDDClear;
ctx->Driver.ClearIndex = NULL;
ctx->Driver.ClearColor = s3vDDClearColor;
ctx->Driver.SetDrawBuffer = s3vDDSetDrawBuffer;
ctx->Driver.DrawBuffer = s3vDDSetDrawBuffer;
ctx->Driver.ReadBuffer = NULL; /* XXX */
ctx->Driver.IndexMask = NULL;
ctx->Driver.ColorMask = NULL; /* s3vDDColorMask; */ /* FIXME */
ctx->Driver.AlphaFunc = s3vDDAlphaFunc; /* FIXME */
#if 0
ctx->Driver.BlendEquation = NULL; /* s3vDDBlendEquation; */
ctx->Driver.BlendFunc = s3vDDBlendFunc; /* FIXME */
#endif
ctx->Driver.BlendFuncSeparate = NULL; /* s3vDDBlendFuncSeparate; */
ctx->Driver.ClearDepth = s3vDDClearDepth;
ctx->Driver.CullFace = s3vDDCullFace;

View file

@ -7,15 +7,14 @@
#include "glheader.h"
#include "mtypes.h"
#include "mem.h"
#include "simple_list.h"
#include "enums.h"
#include "texstore.h"
#include "texformat.h"
#include "teximage.h"
#include "swrast/swrast.h"
#include "mm.h"
#include "mmath.h"
#include "s3v_context.h"
#include "s3v_tex.h"
@ -37,8 +36,8 @@ static void s3vSetTexWrapping(s3vContextPtr vmesa,
s3vTextureObjectPtr t,
GLenum wraps, GLenum wrapt)
{
CARD32 t0 = t->TextureCMD;
CARD32 cmd = vmesa->CMD;
GLuint t0 = t->TextureCMD;
GLuint cmd = vmesa->CMD;
#if TEX_DEBUG_ON
static unsigned int times=0;
DEBUG_TEX(("*** s3vSetTexWrapping: #%i ***\n", ++times));
@ -64,8 +63,8 @@ static void s3vSetTexFilter(s3vContextPtr vmesa,
s3vTextureObjectPtr t,
GLenum minf, GLenum magf)
{
CARD32 t0 = t->TextureCMD;
CARD32 cmd = vmesa->CMD;
GLuint t0 = t->TextureCMD;
GLuint cmd = vmesa->CMD;
#if TEX_DEBUG_ON
static unsigned int times=0;
DEBUG_TEX(("*** s3vSetTexFilter: #%i ***\n", ++times));
@ -183,7 +182,7 @@ static void s3vTexParameter( GLcontext *ctx, GLenum target,
break;
case GL_TEXTURE_BORDER_COLOR:
s3vSetTexBorderColor( vmesa, t, tObj->BorderColor );
s3vSetTexBorderColor( vmesa, t, tObj->_BorderChan );
break;
case GL_TEXTURE_BASE_LEVEL:
@ -402,7 +401,7 @@ static void s3vBindTexture( GLcontext *ctx, GLenum target,
{
s3vContextPtr vmesa = S3V_CONTEXT( ctx );
s3vTextureObjectPtr t = (s3vTextureObjectPtr) tObj->DriverData;
CARD32 cmd = vmesa->CMD;
GLuint cmd = vmesa->CMD;
#if TEX_DEBUG_ON
static unsigned int times=0;
DEBUG_TEX(("*** s3vBindTexture: #%i ***\n", ++times));
@ -440,11 +439,6 @@ static void s3vBindTexture( GLcontext *ctx, GLenum target,
#endif
}
if (!ctx->Texture._ReallyEnabled) {
DEBUG_TEX(("!ctx->Texture._ReallyEnabled\n"));
return;
}
cmd = vmesa->CMD & ~MIP_MASK;
vmesa->dirty |= S3V_UPLOAD_TEX0;
vmesa->TexOffset = t->TextureBaseAddr[tObj->BaseLevel];

View file

@ -7,6 +7,8 @@
#define TEX_DEBUG_ON 0
extern void s3vUpdateTexLRU( s3vContextPtr vmesa, s3vTextureObjectPtr t );
#if TEX_DEBUG_ON
#define DEBUG_TEX(str) printf str
#else

View file

@ -12,7 +12,6 @@
#include "enums.h"
#include "mm.h"
#include "mem.h"
#include "s3v_context.h"
#include "s3v_lock.h"
#include "s3v_tex.h"
@ -103,7 +102,7 @@ static void s3vUploadTexLevel( s3vContextPtr vmesa, s3vTextureObjectPtr t,
int l2d;
/* int offset = 0; */
int words;
CARD32* dest;
GLuint* dest;
#if TEX_DEBUG_ON
static unsigned int times=0;
#endif
@ -121,9 +120,9 @@ static void s3vUploadTexLevel( s3vContextPtr vmesa, s3vTextureObjectPtr t,
DEBUG_TEX(("t->image[%i].offset = 0x%x\n",
level, t->image[level].offset));
t->TextureBaseAddr[level] = (CARD32)(t->BufAddr + t->image[level].offset
+ _TEXALIGN) & (CARD32)(~_TEXALIGN);
dest = (CARD32*)(sPriv->pFB + t->TextureBaseAddr[level]);
t->TextureBaseAddr[level] = (GLuint)(t->BufAddr + t->image[level].offset
+ _TEXALIGN) & (GLuint)(~_TEXALIGN);
dest = (GLuint*)(sPriv->pFB + t->TextureBaseAddr[level]);
DEBUG_TEX(("sPriv->pFB = 0x%x\n", sPriv->pFB));
DEBUG_TEX(("dest = 0x%x\n", dest));

View file

@ -21,7 +21,7 @@ static void s3vSetTexImages( s3vContextPtr vmesa,
{
GLuint height, width, pitch, i, /*textureFormat,*/ log_pitch;
s3vTextureObjectPtr t = (s3vTextureObjectPtr) tObj->DriverData;
const struct gl_texture_image *baseImage = tObj->Image[tObj->BaseLevel];
const struct gl_texture_image *baseImage = tObj->Image[0][tObj->BaseLevel];
GLint firstLevel, lastLevel, numLevels;
GLint log2Width, log2Height;
#if TEX_DEBUG_ON
@ -55,15 +55,15 @@ static void s3vSetTexImages( s3vContextPtr vmesa,
numLevels = lastLevel - firstLevel + 1;
log2Width = tObj->Image[firstLevel]->WidthLog2;
log2Height = tObj->Image[firstLevel]->HeightLog2;
log2Width = tObj->Image[0][firstLevel]->WidthLog2;
log2Height = tObj->Image[0][firstLevel]->HeightLog2;
/* Figure out the amount of memory required to hold all the mipmap
* levels. Choose the smallest pitch to accomodate the largest
* mipmap:
*/
width = tObj->Image[firstLevel]->Width * t->texelBytes;
width = tObj->Image[0][firstLevel]->Width * t->texelBytes;
for (pitch = 32, log_pitch=2 ; pitch < width ; pitch *= 2 )
log_pitch++;
@ -71,12 +71,12 @@ static void s3vSetTexImages( s3vContextPtr vmesa,
* lines required:
*/
for ( height = i = 0 ; i < numLevels ; i++ ) {
t->image[i].image = tObj->Image[firstLevel + i];
t->image[i].image = tObj->Image[0][firstLevel + i];
t->image[i].offset = height * pitch;
t->image[i].internalFormat = baseImage->Format;
height += t->image[i].image->Height;
t->TextureBaseAddr[i] = (t->BufAddr + t->image[i].offset +
_TEXALIGN) & (CARD32)(~_TEXALIGN);
_TEXALIGN) & (GLuint)(~_TEXALIGN);
}
t->Pitch = pitch;
@ -96,13 +96,13 @@ static void s3vUpdateTexEnv( GLcontext *ctx, GLuint unit )
s3vContextPtr vmesa = S3V_CONTEXT(ctx);
const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit];
const struct gl_texture_object *tObj = texUnit->_Current;
const GLuint format = tObj->Image[tObj->BaseLevel]->Format;
const GLuint format = tObj->Image[0][tObj->BaseLevel]->Format;
/*
s3vTextureObjectPtr t = (s3vTextureObjectPtr)tObj->DriverData;
GLuint tc;
*/
GLuint alpha = 0;
CARD32 cmd = vmesa->CMD;
GLuint cmd = vmesa->CMD;
#if TEX_DEBUG_ON
static unsigned int times=0;
DEBUG_TEX(("*** s3vUpdateTexEnv: %i ***\n", ++times));
@ -205,14 +205,14 @@ static void s3vUpdateTexUnit( GLcontext *ctx, GLuint unit )
{
s3vContextPtr vmesa = S3V_CONTEXT(ctx);
struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit];
CARD32 cmd = vmesa->CMD;
GLuint cmd = vmesa->CMD;
#if TEX_DEBUG_ON
static unsigned int times=0;
DEBUG_TEX(("*** s3vUpdateTexUnit: %i ***\n", ++times));
DEBUG_TEX(("and vmesa->CMD was 0x%x\n", vmesa->CMD));
#endif
if (texUnit->_ReallyEnabled == TEXTURE0_2D)
if (texUnit->_ReallyEnabled == TEXTURE_2D_BIT)
{
struct gl_texture_object *tObj = texUnit->_Current;
s3vTextureObjectPtr t = (s3vTextureObjectPtr)tObj->DriverData;
@ -246,8 +246,9 @@ static void s3vUpdateTexUnit( GLcontext *ctx, GLuint unit )
/* Update texture environment if texture object image format or
* texture environment state has changed.
*/
if (tObj->Image[tObj->BaseLevel]->Format != vmesa->TexEnvImageFmt[unit]) {
vmesa->TexEnvImageFmt[unit] = tObj->Image[tObj->BaseLevel]->Format;
if (tObj->Image[0][tObj->BaseLevel]->Format !=
vmesa->TexEnvImageFmt[unit]) {
vmesa->TexEnvImageFmt[unit] = tObj->Image[0][tObj->BaseLevel]->Format;
s3vUpdateTexEnv( ctx, unit );
}
#if 1
@ -283,16 +284,12 @@ static void s3vUpdateTexUnit( GLcontext *ctx, GLuint unit )
void s3vUpdateTextureState( GLcontext *ctx )
{
s3vContextPtr vmesa = S3V_CONTEXT(ctx);
(void) vmesa;
#if TEX_DEBUG_ON
static unsigned int times=0;
DEBUG_TEX(("*** s3vUpdateTextureState: #%i ***\n", ++times));
#endif
if (!ctx->Texture._ReallyEnabled) {
DEBUG_TEX(("!ctx->Texture._ReallyEnabled\n"));
return;
}
#if _TEXFALLBACK
FALLBACK( vmesa, S3V_FALLBACK_TEXTURE, GL_FALSE );
#endif

View file

@ -33,7 +33,7 @@
#define HAVE_BACK_COLORS 0
#define HAVE_HW_FLATSHADE 1
#define VERTEX s3vVertex
#define TAB rast_tab
#define TAB rast_tab
#define VERT_SET_RGBA( v, c ) \
do { \
@ -55,10 +55,10 @@ do { \
static struct {
points_func points;
line_func line;
triangle_func triangle;
quad_func quad;
tnl_points_func points;
tnl_line_func line;
tnl_triangle_func triangle;
tnl_quad_func quad;
} rast_tab[S3V_MAX_TRIFUNC];
#define S3V_RAST_CULL_BIT 0x01
@ -236,7 +236,7 @@ void s3vChooseRasterState(GLcontext *ctx)
if ( flags & DD_FLATSHADE )
ind |= S3V_RAST_FLAT_BIT;
if ( ctx->Texture._ReallyEnabled ) {
if ( ctx->Texture.Unit[0]._ReallyEnabled ) {
ind |= S3V_RAST_TEX_BIT;
}
@ -608,7 +608,7 @@ static void s3vRasterPrimitive( GLcontext *ctx, GLuint hwprim )
{
s3vContextPtr vmesa = S3V_CONTEXT(ctx);
/* __DRIdrawablePrivate *dPriv = vmesa->driDrawable; */
CARD32 cmd = vmesa->CMD;
GLuint cmd = vmesa->CMD;
unsigned int _hw_prim = hwprim;
@ -650,7 +650,7 @@ static void s3vRenderPrimitive( GLcontext *ctx, GLenum prim )
{
s3vContextPtr vmesa = S3V_CONTEXT(ctx);
__DRIdrawablePrivate *dPriv = vmesa->driDrawable;
CARD32 cmd = vmesa->CMD;
GLuint cmd = vmesa->CMD;
unsigned int _hw_prim = hw_prim[prim];

View file

@ -17,18 +17,26 @@
int start02, end01; \
int ystart, y01y12; \
int i, tmp, tmp2, tmp3; \
GLfloat ydiff, fy[3]
GLfloat ydiff, fy[3]; \
(void) v; (void) vvv; (void) x; (void) y; (void) z; (void) idx; \
(void) dx01; (void) dy01; (void) delt02; (void) deltzy; \
(void) zstart; (void) start02; (void) ystart; (void) y01y12; \
(void) i; (void) tmp; (void) tmp2; (void) tmp3; (void) ydiff; (void) fy
#define LINE_FLAT_VARS \
int arstart, gbstart; \
int deltarx, deltgbx, deltary, deltgby; \
GLubyte *(col)[3]
GLubyte *(col)[3]; \
(void) arstart; (void) gbstart; (void) deltarx; (void) deltgbx; \
(void) deltary; (void) deltgby; (void) col
#define LINE_GOURAUD_VARS \
int arstart, gbstart; \
int deltary, deltgby; \
int ctmp, ctmp2, ctmp3, ctmp4; \
GLubyte *(col)[3]
GLubyte *(col)[3]; \
(void) arstart; (void) gbstart; (void) deltary; (void) deltgby; \
(void) ctmp; (void) ctmp2; (void) ctmp3; (void) ctmp4; (void) col
#define SORT_LINE_VERT() \
do { \
@ -199,18 +207,29 @@ do { \
int start02, end01, end12; \
int ystart, y01y12; \
int i, tmp, lr; \
GLfloat ydiff, fy[3]
GLfloat ydiff, fy[3]; \
(void) v; (void) x; (void) y; (void) z; (void) idx; (void) dx01; \
(void) dy01; (void) dx02; (void) dy02; (void) dx12; (void) dy12; \
(void) delt01; (void) delt02; (void) delt12; (void) deltzx; \
(void) deltzy; (void) zstart; (void) start02; (void) end01; \
(void) end12; (void) ystart; (void) y01y12; (void) i; (void) tmp; \
(void) lr; (void) ydiff; (void) fy
#define GOURAUD_VARS \
int arstart, gbstart; \
int deltarx, deltgbx, deltary, deltgby; \
int ctmp, ctmp2, ctmp3, ctmp4; \
GLubyte *(col)[3]
GLubyte *(col)[3]; \
(void) arstart; (void) gbstart; (void) deltarx; (void) deltgbx; \
(void) deltary; (void) deltgby; (void) ctmp; (void) ctmp2; \
(void) ctmp3; (void) ctmp4; (void) col
#define FLAT_VARS \
int arstart, gbstart; \
int deltarx, deltgbx, deltary, deltgby; \
GLubyte *(col)[3]
GLubyte *(col)[3]; \
(void) arstart; (void) gbstart; (void) deltarx; (void) deltgbx; \
(void) deltary; (void) deltgby; (void) col
#define TEX_VARS \
int u0, u1, u2; \
@ -226,7 +245,15 @@ do { \
int rbaseu, rbasev; \
int dstart, ustart, wstart, vstart; \
static int stmp = 0; \
s3vTextureObjectPtr t
s3vTextureObjectPtr t; \
(void) u0; (void) u1; (void) u2; (void) ru0; (void) ru1; (void) ru2; \
(void) v0; (void) v1; (void) v2; (void) rv0; (void) rv1; (void) rv2; \
(void) w0; (void) w1; (void) w2; (void) rw0; (void) rw1; (void) rw2; \
(void) baseu; (void) basev; (void) d0; (void) d1; (void) d2; \
(void) deltdx; (void) deltvx; (void) deltux; (void) deltdy; \
(void) deltuy; (void) deltwx; (void) deltwy; (void) rbaseu; \
(void) rbasev; (void) dstart; (void) ustart; (void) wstart; \
(void) vstart; (void) stmp; (void) t
#define SORT_VERT() \
do { \
@ -376,15 +403,15 @@ do { \
u0 = (v[idx[0]].texcoord[0][0] \
* (GLfloat)(t->image[0].image->Width) * 256.0); \
u1 = (v[idx[1]].texcoord[0][0] \
* (GLfloat)(t->globj->Image[0]->Width) * 256.0); \
* (GLfloat)(t->globj->Image[0][0]->Width) * 256.0); \
u2 = (v[idx[2]].texcoord[0][0] \
* (GLfloat)(t->globj->Image[0]->Width) * 256.0); \
* (GLfloat)(t->globj->Image[0][0]->Width) * 256.0); \
v0 = (v[idx[0]].texcoord[0][1] \
* (GLfloat)(t->globj->Image[0]->Height) * 256.0); \
* (GLfloat)(t->globj->Image[0][0]->Height) * 256.0); \
v1 = (v[idx[1]].texcoord[0][1] \
* (GLfloat)(t->globj->Image[0]->Height) * 256.0); \
* (GLfloat)(t->globj->Image[0][0]->Height) * 256.0); \
v2 = (v[idx[2]].texcoord[0][1] \
* (GLfloat)(t->globj->Image[0]->Height) * 256.0); \
* (GLfloat)(t->globj->Image[0][0]->Height) * 256.0); \
\
w0 = (v[idx[0]].win[3]); \
w1 = (v[idx[1]].win[3]); \
@ -492,8 +519,8 @@ do { \
rv1 = (((v1 - basev) * rw1)); \
rv2 = (((v2 - basev) * rw2)); \
\
while (baseu < 0) { baseu += (t->globj->Image[0]->Width << 8); } \
while (basev < 0) { basev += (t->globj->Image[0]->Height << 8); } \
while (baseu < 0) { baseu += (t->globj->Image[0][0]->Width << 8); } \
while (basev < 0) { basev += (t->globj->Image[0][0]->Height << 8); } \
\
if (!(baseu & 0xFF)) \
{ baseu = (baseu >> 8); } \
@ -505,8 +532,8 @@ do { \
else \
{ basev = (basev >> 8) - 1; } \
\
rbaseu = (baseu) << (16 - t->globj->Image[0]->WidthLog2); \
rbasev = (basev) << (16 - t->globj->Image[0]->WidthLog2); \
rbaseu = (baseu) << (16 - t->globj->Image[0][0]->WidthLog2); \
rbasev = (basev) << (16 - t->globj->Image[0][0]->WidthLog2); \
deltuy = (((ru2 - ru0) / dy02)); \
deltvy = (((rv2 - rv0) / dy02)); \
rw0 *= (1024.0 * 512.0); \
@ -591,6 +618,7 @@ static void TAG(s3v_line)( s3vContextPtr vmesa,
#endif
#if (IND & S3V_RAST_CULL_BIT)
GLfloat cull;
(void) cull;
#endif
DEBUG(("*** s3v_line: "));

View file

@ -4,10 +4,8 @@
#include "glheader.h"
#include "mtypes.h"
#include "mem.h"
#include "macros.h"
#include "colormac.h"
#include "mmath.h"
#include "swrast_setup/swrast_setup.h"
#include "tnl/t_context.h"
@ -26,8 +24,8 @@
static struct {
void (*emit)( GLcontext *, GLuint, GLuint, void *, GLuint );
interp_func interp;
copy_pv_func copy_pv;
tnl_interp_func interp;
tnl_copy_pv_func copy_pv;
GLboolean (*check_tex_sizes)( GLcontext *ctx );
GLuint vertex_size;
GLuint vertex_stride_shift;
@ -61,6 +59,7 @@ static struct {
#define GET_VIEWPORT_MAT() 0 /* vmesa->hw_viewport */
#define GET_TEXSOURCE(n) n
#define GET_VERTEX_FORMAT() 0
#define GET_VERTEX_SIZE() S3V_CONTEXT(ctx)->vertex_size * sizeof(GLuint)
#define GET_VERTEX_STORE() S3V_CONTEXT(ctx)->verts
#define GET_VERTEX_STRIDE_SHIFT() S3V_CONTEXT(ctx)->vertex_stride_shift
#define INVALIDATE_STORED_VERTICES()
@ -71,8 +70,8 @@ static struct {
#define HAVE_HW_DIVIDE 1
#define HAVE_RGBA_COLOR 0 /* we're BGRA */
#define HAVE_TINY_VERTICES 1
#define HAVE_NOTEX_VERTICES 1
#define HAVE_TEX0_VERTICES 1
#define HAVE_NOTEX_VERTICES 0
#define HAVE_TEX0_VERTICES 0
#define HAVE_TEX1_VERTICES 0
#define HAVE_TEX2_VERTICES 0
#define HAVE_TEX3_VERTICES 0
@ -216,7 +215,6 @@ void s3vBuildVertices( GLcontext *ctx,
GLubyte *v = ((GLubyte *)vmesa->verts +
(start<<vmesa->vertex_stride_shift));
GLuint stride = 1<<vmesa->vertex_stride_shift;
GLuint ind = 0;
DEBUG(("*** s3vBuildVertices ***\n"));
DEBUG(("vmesa->SetupNewInputs = 0x%x\n", vmesa->SetupNewInputs));
@ -284,7 +282,7 @@ void s3vChooseVertexState( GLcontext *ctx )
*/
if (ctx->Texture._ReallyEnabled) {
if (ctx->Texture.Unit[0]._ReallyEnabled) {
_tnl_need_projected_coords( ctx, GL_FALSE );
ind |= S3V_TEX0_BIT;
} else {
@ -330,12 +328,12 @@ void s3vFreeVB( GLcontext *ctx )
}
if (vmesa->UbyteSecondaryColor.Ptr) {
ALIGN_FREE(vmesa->UbyteSecondaryColor.Ptr);
ALIGN_FREE((void *)vmesa->UbyteSecondaryColor.Ptr);
vmesa->UbyteSecondaryColor.Ptr = 0;
}
if (vmesa->UbyteColor.Ptr) {
ALIGN_FREE(vmesa->UbyteColor.Ptr);
ALIGN_FREE((void *)vmesa->UbyteColor.Ptr);
vmesa->UbyteColor.Ptr = 0;
}
}

View file

@ -5,7 +5,6 @@
#include "s3v_context.h"
#include "s3v_vb.h"
#include "context.h"
#include "mmath.h"
#include "matrix.h"
#include "s3v_dri.h"
@ -46,15 +45,14 @@ s3vDestroyContext(__DRIcontextPrivate *driContextPriv)
vmesa->glCtx->DriverCtx = NULL;
_mesa_destroy_context(vmesa->glCtx);
Xfree(vmesa);
_mesa_free(vmesa);
driContextPriv->driverPrivate = NULL;
}
}
static GLboolean
s3vCreateBuffer( Display *dpy,
__DRIscreenPrivate *driScrnPriv,
s3vCreateBuffer( __DRIscreenPrivate *driScrnPriv,
__DRIdrawablePrivate *driDrawPriv,
const __GLcontextModes *mesaVis,
GLboolean isPixmap )
@ -82,7 +80,7 @@ s3vDestroyBuffer(__DRIdrawablePrivate *driDrawPriv)
}
static void
s3vSwapBuffers(Display *dpy, void *drawablePrivate)
s3vSwapBuffers(__DRIdrawablePrivate *drawablePrivate)
{
__DRIdrawablePrivate *dPriv = (__DRIdrawablePrivate *) drawablePrivate;
__DRIscreenPrivate *sPriv;
@ -99,14 +97,14 @@ s3vSwapBuffers(Display *dpy, void *drawablePrivate)
/* DMAFLUSH(); */
_mesa_swapbuffers( ctx );
_mesa_notifySwapBuffers( ctx );
vmesa = (s3vContextPtr) dPriv->driContextPriv->driverPrivate;
/* driScrnPriv = vmesa->driScreen; */
/* if (vmesa->EnabledFlags & S3V_BACK_BUFFER) */
/* _mesa_swapbuffers( ctx ); */
/* _mesa_notifySwapBuffers( ctx ); */
#if 1
{
int x0, y0, x1, y1;
@ -275,18 +273,6 @@ s3vUnbindContext( __DRIcontextPrivate *driContextPriv )
return GL_TRUE;
}
static GLboolean
s3vOpenFullScreen(__DRIcontextPrivate *driContextPriv)
{
return GL_TRUE;
}
static GLboolean
s3vCloseFullScreen(__DRIcontextPrivate *driContextPriv)
{
return GL_TRUE;
}
static struct __DriverAPIRec s3vAPI = {
s3vInitDriver,
@ -298,12 +284,10 @@ static struct __DriverAPIRec s3vAPI = {
s3vSwapBuffers,
s3vMakeCurrent,
s3vUnbindContext,
s3vOpenFullScreen,
s3vCloseFullScreen
};
#if 0
/*
* This is the bootstrap function for the driver.
* The __driCreateScreen name is the symbol that libGL.so fetches.
@ -319,6 +303,7 @@ void *__driCreateScreen(Display *dpy, int scrn, __DRIscreen *psc,
DEBUG(("__driCreateScreen: psp = %p\n", psp));
return (void *) psp;
}
#endif
void __driRegisterExtensions(void)
{