X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fdrivers%2Fdri%2Ffb%2Ffb_dri.c;h=fd869b2fe7dace1737762ee0ad9c159287f15e90;hb=1160acbfea986a821761d18f5f14d5d2cb0dea8c;hp=ff307009bd5c4af77ec989ff2ccfd1840cd33589;hpb=d83c4e6dd164e97fbcce4c6ee5cc06e4338d24d4;p=mesa.git diff --git a/src/mesa/drivers/dri/fb/fb_dri.c b/src/mesa/drivers/dri/fb/fb_dri.c index ff307009bd5..fd869b2fe7d 100644 --- a/src/mesa/drivers/dri/fb/fb_dri.c +++ b/src/mesa/drivers/dri/fb/fb_dri.c @@ -47,17 +47,18 @@ #include "drirenderbuffer.h" #include "buffers.h" -#include "extensions.h" -#include "framebuffer.h" -#include "renderbuffer.h" -#include "array_cache/acache.h" +#include "main/extensions.h" +#include "main/framebuffer.h" +#include "main/renderbuffer.h" +#include "vbo/vbo.h" #include "swrast/swrast.h" #include "swrast_setup/swrast_setup.h" #include "tnl/tnl.h" -#include "tnl/t_context.h" +#include "tnl/tcontext.h" #include "tnl/t_pipeline.h" #include "drivers/common/driverfuncs.h" +void fbSetSpanFunctions(driRenderbuffer *drb, const GLvisual *vis); typedef struct { GLcontext *glCtx; /* Mesa context */ @@ -70,31 +71,8 @@ typedef struct { } fbContext, *fbContextPtr; -typedef struct { - GLframebuffer *mesa_framebuffer; - void *currentBuffer; - void *frontBuffer; - void *backBuffer; - int currentPitch; -} fbDrawable, *fbDrawablePtr; - -typedef struct { - unsigned long hFrameBuffer; - int fbOrigin; - int fbSize; - int fbStride; - int fbWidth; - int fbHeight; - int bpp; - int drmFD; - drmAddress fbMap; -} fbDRI, *fbDRIPtr; - #define FB_CONTEXT(ctx) ((fbContextPtr)(ctx->DriverCtx)) -#ifdef USE_NEW_INTERFACE -static PFNGLXCREATECONTEXTMODES create_context_modes = NULL; -#endif /* USE_NEW_INTERFACE */ static const GLubyte * get_string(GLcontext *ctx, GLenum pname) @@ -115,7 +93,7 @@ update_state( GLcontext *ctx, GLuint new_state ) /* not much to do here - pass it on */ _swrast_InvalidateState( ctx, new_state ); _swsetup_InvalidateState( ctx, new_state ); - _ac_InvalidateState( ctx, new_state ); + _vbo_InvalidateState( ctx, new_state ); _tnl_InvalidateState( ctx, new_state ); } @@ -136,36 +114,21 @@ get_buffer_size( GLframebuffer *buffer, GLuint *width, GLuint *height ) static void -viewport(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h) +updateFramebufferSize(GLcontext *ctx) { - _mesa_ResizeBuffersMESA(); + fbContextPtr fbmesa = FB_CONTEXT(ctx); + struct gl_framebuffer *fb = ctx->WinSysDrawBuffer; + if (fbmesa->dri.drawable->w != fb->Width || + fbmesa->dri.drawable->h != fb->Height) { + driUpdateFramebufferSize(ctx, fbmesa->dri.drawable); + } } - -/* specifies the buffer for swrast span rendering/reading */ static void -set_buffer( GLcontext *ctx, GLframebuffer *buffer, GLuint bufferBit ) +viewport(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h) { - fbContextPtr fbdevctx = FB_CONTEXT(ctx); - __DRIdrawablePrivate *dPriv = fbdevctx->dri.drawable; - fbDrawablePtr fbdrawable = (fbDrawablePtr)dPriv->driverPrivate; - - /* What a twisted mess of private structs - */ - assert(buffer == fbdrawable->mesa_framebuffer); - - - switch (bufferBit) { - case BUFFER_BIT_FRONT_LEFT: - fbdrawable->currentBuffer = fbdrawable->frontBuffer; - break; - case BUFFER_BIT_BACK_LEFT: - fbdrawable->currentBuffer = fbdrawable->backBuffer; - break; - default: - /* This happens a lot if the client renders to the frontbuffer */ - if (0) _mesa_problem(ctx, "bad bufferBit in set_buffer()"); - } + /* XXX this should be called after we acquire the DRI lock, not here */ + updateFramebufferSize(ctx); } @@ -174,7 +137,6 @@ init_core_functions( struct dd_function_table *functions ) { functions->GetString = get_string; functions->UpdateState = update_state; - functions->ResizeBuffers = _mesa_resize_framebuffer; functions->GetBufferSize = get_buffer_size; functions->Viewport = viewport; @@ -190,11 +152,9 @@ init_core_functions( struct dd_function_table *functions ) #define NAME(PREFIX) PREFIX##_B8G8R8 #define FORMAT GL_RGBA8 #define SPAN_VARS \ - const fbContextPtr fbdevctx = FB_CONTEXT(ctx); \ - __DRIdrawablePrivate *dPriv = fbdevctx->dri.drawable; \ - const fbDrawablePtr fbdrawable = (fbDrawablePtr)dPriv->driverPrivate; + driRenderbuffer *drb = (driRenderbuffer *) rb; #define INIT_PIXEL_PTR(P, X, Y) \ - GLubyte *P = (GLubyte *)fbdrawable->currentBuffer + (Y) * fbdrawable->currentPitch + (X) * 3 + GLubyte *P = (GLubyte *)drb->Base.Data + (drb->Base.Height - (Y)) * drb->pitch + (X) * 3; #define INC_PIXEL_PTR(P) P += 3 #define STORE_PIXEL(DST, X, Y, VALUE) \ DST[0] = VALUE[BCOMP]; \ @@ -213,11 +173,9 @@ init_core_functions( struct dd_function_table *functions ) #define NAME(PREFIX) PREFIX##_B8G8R8A8 #define FORMAT GL_RGBA8 #define SPAN_VARS \ - const fbContextPtr fbdevctx = FB_CONTEXT(ctx); \ - __DRIdrawablePrivate *dPriv = fbdevctx->dri.drawable; \ - const fbDrawablePtr fbdrawable = (fbDrawablePtr)dPriv->driverPrivate; + driRenderbuffer *drb = (driRenderbuffer *) rb; #define INIT_PIXEL_PTR(P, X, Y) \ - GLubyte *P = (GLubyte *)fbdrawable->currentBuffer + (Y) * fbdrawable->currentPitch + (X) * 4; + GLubyte *P = (GLubyte *)drb->Base.Data + (drb->Base.Height - (Y)) * drb->pitch + (X) * 4; #define INC_PIXEL_PTR(P) P += 4 #define STORE_PIXEL(DST, X, Y, VALUE) \ DST[0] = VALUE[BCOMP]; \ @@ -242,11 +200,9 @@ init_core_functions( struct dd_function_table *functions ) #define NAME(PREFIX) PREFIX##_B5G6R5 #define FORMAT GL_RGBA8 #define SPAN_VARS \ - const fbContextPtr fbdevctx = FB_CONTEXT(ctx); \ - __DRIdrawablePrivate *dPriv = fbdevctx->dri.drawable; \ - const fbDrawablePtr fbdrawable = (fbDrawablePtr)dPriv->driverPrivate; + driRenderbuffer *drb = (driRenderbuffer *) rb; #define INIT_PIXEL_PTR(P, X, Y) \ - GLushort *P = (GLushort *) ((char *)fbdrawable->currentBuffer + (Y) * fbdrawable->currentPitch + (X) * 2) + GLushort *P = (GLushort *)drb->Base.Data + (drb->Base.Height - (Y)) * drb->pitch + (X) * 2; #define INC_PIXEL_PTR(P) P += 1 #define STORE_PIXEL(DST, X, Y, VALUE) \ DST[0] = ( (((VALUE[RCOMP]) & 0xf8) << 8) | (((VALUE[GCOMP]) & 0xfc) << 3) | ((VALUE[BCOMP]) >> 3) ) @@ -263,11 +219,9 @@ init_core_functions( struct dd_function_table *functions ) #define NAME(PREFIX) PREFIX##_B5G5R5 #define FORMAT GL_RGBA8 #define SPAN_VARS \ - const fbContextPtr fbdevctx = FB_CONTEXT(ctx); \ - __DRIdrawablePrivate *dPriv = fbdevctx->dri.drawable; \ - const fbDrawablePtr fbdrawable = (fbDrawablePtr)dPriv->driverPrivate; + driRenderbuffer *drb = (driRenderbuffer *) rb; #define INIT_PIXEL_PTR(P, X, Y) \ - GLushort *P = (GLushort *) ((char *)fbdrawable->currentBuffer + (Y) * fbdrawable->currentPitch + (X) * 2) + GLushort *P = (GLushort *)drb->Base.Data + (drb->Base.Height - (Y)) * drb->pitch + (X) * 2; #define INC_PIXEL_PTR(P) P += 1 #define STORE_PIXEL(DST, X, Y, VALUE) \ DST[0] = ( (((VALUE[RCOMP]) & 0xf8) << 7) | (((VALUE[GCOMP]) & 0xf8) << 2) | ((VALUE[BCOMP]) >> 3) ) @@ -284,11 +238,9 @@ init_core_functions( struct dd_function_table *functions ) #define NAME(PREFIX) PREFIX##_CI8 #define FORMAT GL_COLOR_INDEX8_EXT #define SPAN_VARS \ - const fbContextPtr fbdevctx = FB_CONTEXT(ctx); \ - __DRIdrawablePrivate *dPriv = fbdevctx->dri.drawable; \ - const fbDrawablePtr fbdrawable = (fbDrawablePtr)dPriv->driverPrivate; + driRenderbuffer *drb = (driRenderbuffer *) rb; #define INIT_PIXEL_PTR(P, X, Y) \ - GLubyte *P = (GLubyte *)fbdrawable->currentBuffer + (Y) * fbdrawable->currentPitch + (X) + GLubyte *P = (GLubyte *)drb->Base.Data + (drb->Base.Height - (Y)) * drb->pitch + (X); #define INC_PIXEL_PTR(P) P += 1 #define STORE_PIXEL(DST, X, Y, VALUE) \ *DST = VALUE[0] @@ -299,7 +251,7 @@ init_core_functions( struct dd_function_table *functions ) -static void +void fbSetSpanFunctions(driRenderbuffer *drb, const GLvisual *vis) { ASSERT(drb->Base.InternalFormat == GL_RGBA); @@ -363,43 +315,16 @@ fbSetSpanFunctions(driRenderbuffer *drb, const GLvisual *vis) static GLboolean fbInitDriver( __DRIscreenPrivate *sPriv ) { - fbDRIPtr dri_priv = (fbDRIPtr)sPriv->pDevPriv; - fbDRIPtr priv; - int drmFD; - - drmFD = drmOpen("radeon", NULL ); - if (drmFD < 0) { - fprintf(stderr, "[drm] drmOpen failed\n"); - return GL_FALSE; - } - - priv = _mesa_malloc(sizeof(*priv)); - if (!priv) - return GL_FALSE; - - *priv = *dri_priv; - - priv->drmFD = drmFD; - if (drmMap(drmFD, priv->hFrameBuffer, priv->fbSize, &priv->fbMap) < 0) { - fprintf(stderr, "[drm] drmMap framebuffer failed\n"); - free(priv); - return GL_FALSE; - } - - sPriv->private = priv; + sPriv->private = NULL; return GL_TRUE; } static void fbDestroyScreen( __DRIscreenPrivate *sPriv ) { - fbDRIPtr priv = (fbDRIPtr)sPriv->private; - - drmUnmap(priv->fbMap, priv->fbSize); - drmClose(priv->drmFD); - _mesa_free(priv); } + /* Create the device specific context. */ static GLboolean @@ -440,21 +365,12 @@ fbCreateContext( const __GLcontextModes *glVisual, /* Create module contexts */ _swrast_CreateContext( ctx ); - _ac_CreateContext( ctx ); + _vbo_CreateContext( ctx ); _tnl_CreateContext( ctx ); _swsetup_CreateContext( ctx ); _swsetup_Wakeup( ctx ); - /* swrast init -- need to verify these tests - I just plucked the - * numbers out of the air. (KW) - */ - { - struct swrast_device_driver *swdd; - swdd = _swrast_GetDeviceDriverReference( ctx ); - swdd->SetBuffer = set_buffer; - } - /* use default TCL pipeline */ { TNLcontext *tnl = TNL_CONTEXT(ctx); @@ -483,7 +399,7 @@ fbDestroyContext( __DRIcontextPrivate *driContextPriv ) if ( fbmesa ) { _swsetup_DestroyContext( fbmesa->glCtx ); _tnl_DestroyContext( fbmesa->glCtx ); - _ac_DestroyContext( fbmesa->glCtx ); + _vbo_DestroyContext( fbmesa->glCtx ); _swrast_DestroyContext( fbmesa->glCtx ); /* free the Mesa context */ @@ -504,8 +420,7 @@ fbCreateBuffer( __DRIscreenPrivate *driScrnPriv, const __GLcontextModes *mesaVis, GLboolean isPixmap ) { - fbDRIPtr spriv = (fbDRIPtr)driScrnPriv->private; - fbDrawablePtr fbdrawable; + struct gl_framebuffer *mesa_framebuffer; if (isPixmap) { return GL_FALSE; /* not implemented */ @@ -516,67 +431,46 @@ fbCreateBuffer( __DRIscreenPrivate *driScrnPriv, const GLboolean swAccum = mesaVis->accumRedBits > 0; const GLboolean swStencil = mesaVis->stencilBits > 0; - fbdrawable = _mesa_calloc(sizeof(*fbdrawable)); - if (!fbdrawable) + mesa_framebuffer = _mesa_create_framebuffer(mesaVis); + if (!mesa_framebuffer) return 0; - -#if 0 - fbdrawable->mesa_framebuffer = (void *) - _mesa_create_framebuffer( mesaVis, - swDepth, - swStencil, - swAccum, - swAlpha ); - - if (!fbdrawable->mesa_framebuffer) { - _mesa_free(fbdrawable); - return 0; - } -#else - fbdrawable->mesa_framebuffer = _mesa_create_framebuffer(mesaVis); - if (!fbdrawable->mesa_framebuffer) { - _mesa_free(fbdrawable); - return 0; - } /* XXX double-check these parameters (bpp vs cpp, etc) */ { - driRenderbuffer *drb = driNewRenderbuffer(GL_RGBA, spriv->bpp, - spriv->fbOrigin, - spriv->fbStride); + driRenderbuffer *drb = driNewRenderbuffer(MESA_FORMAT_ARGB8888, + driScrnPriv->pFB, + driScrnPriv->fbBPP / 8, + driScrnPriv->fbOrigin, + driScrnPriv->fbStride, + driDrawPriv); fbSetSpanFunctions(drb, mesaVis); - _mesa_add_renderbuffer(fbdrawable->mesa_framebuffer, + _mesa_add_renderbuffer(mesa_framebuffer, BUFFER_FRONT_LEFT, &drb->Base); } if (mesaVis->doubleBufferMode) { /* XXX what are the correct origin/stride values? */ - driRenderbuffer *drb = driNewRenderbuffer(GL_RGBA, spriv->bpp, - spriv->fbOrigin, - spriv->fbStride); + GLvoid *backBuf = _mesa_malloc(driScrnPriv->fbStride + * driScrnPriv->fbHeight); + driRenderbuffer *drb = driNewRenderbuffer(MESA_FORMAT_ARGB8888, + backBuf, + driScrnPriv->fbBPP /8, + driScrnPriv->fbOrigin, + driScrnPriv->fbStride, + driDrawPriv); fbSetSpanFunctions(drb, mesaVis); - _mesa_add_renderbuffer(fbdrawable->mesa_framebuffer, + _mesa_add_renderbuffer(mesa_framebuffer, BUFFER_BACK_LEFT, &drb->Base); } - _mesa_add_soft_renderbuffers(fbdrawable->mesa_framebuffer, + _mesa_add_soft_renderbuffers(mesa_framebuffer, GL_FALSE, /* color */ swDepth, swStencil, swAccum, - swAlpha, + swAlpha, /* or always zero? */ GL_FALSE /* aux */); - -#endif - - driDrawPriv->driverPrivate = fbdrawable; - - fbdrawable->frontBuffer = fbdrawable->currentBuffer = spriv->fbMap; - fbdrawable->currentPitch = spriv->fbWidth; - /* Replace the framebuffer back buffer with a malloc'ed one -- - * big speedup. - */ - fbdrawable->backBuffer = _mesa_malloc(fbdrawable->currentPitch * driDrawPriv->h); + driDrawPriv->driverPrivate = mesa_framebuffer; return 1; } @@ -586,12 +480,7 @@ fbCreateBuffer( __DRIscreenPrivate *driScrnPriv, static void fbDestroyBuffer(__DRIdrawablePrivate *driDrawPriv) { - fbDrawablePtr fbdrawable = (fbDrawablePtr)driDrawPriv->driverPrivate; - - _mesa_destroy_framebuffer(fbdrawable->mesa_framebuffer); - _mesa_free(fbdrawable->backBuffer); - _mesa_free(fbdrawable); - driDrawPriv->driverPrivate = NULL; + _mesa_reference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate)), NULL); } @@ -601,29 +490,32 @@ fbDestroyBuffer(__DRIdrawablePrivate *driDrawPriv) static void fbSwapBuffers( __DRIdrawablePrivate *dPriv ) { - fbDrawablePtr fbdrawable = (fbDrawablePtr)dPriv->driverPrivate; + struct gl_framebuffer *mesa_framebuffer = (struct gl_framebuffer *)dPriv->driverPrivate; + struct gl_renderbuffer * front_renderbuffer = mesa_framebuffer->Attachment[BUFFER_FRONT_LEFT].Renderbuffer; + void *frontBuffer = front_renderbuffer->Data; + int currentPitch = ((driRenderbuffer *)front_renderbuffer)->pitch; + void *backBuffer = mesa_framebuffer->Attachment[BUFFER_BACK_LEFT].Renderbuffer->Data; if (dPriv->driContextPriv && dPriv->driContextPriv->driverPrivate) { - fbContextPtr fbmesa; - GLcontext *ctx; - fbmesa = (fbContextPtr) dPriv->driContextPriv->driverPrivate; - ctx = fbmesa->glCtx; + fbContextPtr fbmesa = (fbContextPtr) dPriv->driContextPriv->driverPrivate; + GLcontext *ctx = fbmesa->glCtx; + if (ctx->Visual.doubleBufferMode) { int i; int offset = 0; - char *tmp = _mesa_malloc(fbdrawable->currentPitch); + char *tmp = _mesa_malloc(currentPitch); _mesa_notifySwapBuffers( ctx ); /* flush pending rendering comands */ - ASSERT(fbdrawable->frontBuffer); - ASSERT(fbdrawable->backBuffer); + ASSERT(frontBuffer); + ASSERT(backBuffer); for (i = 0; i < dPriv->h; i++) { - _mesa_memcpy(tmp, (char *) fbdrawable->backBuffer + offset, - fbdrawable->currentPitch); - _mesa_memcpy((char *) fbdrawable->frontBuffer + offset, tmp, - fbdrawable->currentPitch); - offset += fbdrawable->currentPitch; + _mesa_memcpy(tmp, (char *) backBuffer + offset, + currentPitch); + _mesa_memcpy((char *) frontBuffer + offset, tmp, + currentPitch); + offset += currentPitch; } _mesa_free(tmp); @@ -646,13 +538,13 @@ fbMakeCurrent( __DRIcontextPrivate *driContextPriv, { if ( driContextPriv ) { fbContextPtr newFbCtx = - (fbContextPtr) driContextPriv->driverPrivate; + (fbContextPtr) driContextPriv->driverPrivate; newFbCtx->dri.drawable = driDrawPriv; - _mesa_make_current( newFbCtx->glCtx, - ((fbDrawablePtr)driDrawPriv->driverPrivate)->mesa_framebuffer, - ((fbDrawablePtr)driReadPriv->driverPrivate)->mesa_framebuffer); + _mesa_make_current( newFbCtx->glCtx, + driDrawPriv->driverPrivate, + driReadPriv->driverPrivate); } else { _mesa_make_current( NULL, NULL, NULL ); } @@ -692,8 +584,6 @@ __driValidateMode(const DRIDriverContext *ctx ) static int __driInitFBDev( struct DRIDriverContextRec *ctx ) { - fbDRIPtr pfbDRI; - /* Note that drmOpen will try to load the kernel module, if needed. */ /* we need a fbdev drm driver - it will only track maps */ ctx->drmFD = drmOpen("radeon", NULL ); @@ -715,7 +605,8 @@ __driInitFBDev( struct DRIDriverContextRec *ctx ) return 0; } fprintf(stderr, "[drm] added %d byte SAREA at 0x%08lx\n", - ctx->shared.SAREASize, ctx->shared.hSAREA); + ctx->shared.SAREASize, + (unsigned long) ctx->shared.hSAREA); if (drmMap( ctx->drmFD, ctx->shared.hSAREA, @@ -727,7 +618,8 @@ __driInitFBDev( struct DRIDriverContextRec *ctx ) } memset(ctx->pSAREA, 0, ctx->shared.SAREASize); fprintf(stderr, "[drm] mapped SAREA 0x%08lx to %p, size %d\n", - ctx->shared.hSAREA, ctx->pSAREA, ctx->shared.SAREASize); + (unsigned long) ctx->shared.hSAREA, ctx->pSAREA, + ctx->shared.SAREASize); /* Need to AddMap the framebuffer and mmio regions here: */ @@ -747,20 +639,8 @@ __driInitFBDev( struct DRIDriverContextRec *ctx ) } fprintf(stderr, "[drm] framebuffer handle = 0x%08lx\n", - ctx->shared.hFrameBuffer); - - pfbDRI = (fbDRIPtr)malloc(sizeof(*pfbDRI)); - pfbDRI->hFrameBuffer = ctx->shared.hFrameBuffer; - pfbDRI->fbOrigin = ctx->shared.fbOrigin; - pfbDRI->fbSize = ctx->shared.fbSize; - pfbDRI->fbStride = ctx->shared.fbStride; - pfbDRI->fbWidth = ctx->shared.virtualWidth; - pfbDRI->fbHeight = ctx->shared.virtualHeight; - pfbDRI->bpp = ctx->bpp; - - ctx->driverClientMsg = pfbDRI; - ctx->driverClientMsgSize = sizeof(*pfbDRI); - + (unsigned long) ctx->shared.hFrameBuffer); + return 1; } @@ -776,10 +656,10 @@ struct DRIDriverRec __driDriver = { __driHaltFBDev }; -#ifdef USE_NEW_INTERFACE static __GLcontextModes * -fbFillInModes( unsigned pixel_bits, unsigned depth_bits, - unsigned stencil_bits, GLboolean have_back_buffer ) +fbFillInModes( __DRIscreenPrivate *psp, + unsigned pixel_bits, unsigned depth_bits, + unsigned stencil_bits, GLboolean have_back_buffer ) { __GLcontextModes * modes; __GLcontextModes * m; @@ -798,8 +678,8 @@ fbFillInModes( unsigned pixel_bits, unsigned depth_bits, GLX_NONE, GLX_SWAP_UNDEFINED_OML /*, GLX_SWAP_COPY_OML */ }; - u_int8_t depth_bits_array[2]; - u_int8_t stencil_bits_array[2]; + uint8_t depth_bits_array[2]; + uint8_t stencil_bits_array[2]; depth_bits_array[0] = depth_bits; @@ -822,11 +702,11 @@ fbFillInModes( unsigned pixel_bits, unsigned depth_bits, fb_type = GL_UNSIGNED_SHORT_5_6_5; } else { - fb_format = GL_BGR; + fb_format = GL_RGBA; fb_type = GL_UNSIGNED_INT_8_8_8_8_REV; } - modes = (*create_context_modes)( num_modes, sizeof( __GLcontextModes ) ); + modes = (*psp->contextModes->createContextModes)( num_modes, sizeof( __GLcontextModes ) ); m = modes; if ( ! driFillInModes( & m, fb_format, fb_type, depth_bits_array, stencil_bits_array, depth_buffer_factor, @@ -897,20 +777,11 @@ void * __driCreateNewScreen( __DRInativeDisplay *dpy, int scrn, __DRIscreen *psc frame_buffer, pSAREA, fd, internal_api_version, &fbAPI); if ( psp != NULL ) { - create_context_modes = (PFNGLXCREATECONTEXTMODES) - glXGetProcAddress( (const GLubyte *) "__glXCreateContextModes" ); - if ( create_context_modes != NULL ) { -#if 0 - fbDRIPtr dri_priv = (fbDRIPtr) psp->pDevPriv; - *driver_modes = fbFillInModes( dri_priv->bpp, - (dri_priv->bpp == 16) ? 16 : 24, - (dri_priv->bpp == 16) ? 0 : 8, - (dri_priv->backOffset != dri_priv->depthOffset) ); -#endif - *driver_modes = fbFillInModes( 24, 24, 8, 0); - } + *driver_modes = fbFillInModes( psp, psp->fbBPP, + (psp->fbBPP == 16) ? 16 : 24, + (psp->fbBPP == 16) ? 0 : 8, + 1); } return (void *) psp; } -#endif /* USE_NEW_INTERFACE */