Fix up origin in dri/fb driver

Calculated fbBPP
This commit is contained in:
Jon Smirl
2005-05-05 05:50:19 +00:00
parent db46e2a7dd
commit fd4f7064e2
2 changed files with 15 additions and 72 deletions

View File

@@ -1290,6 +1290,7 @@ __driUtilCreateNewScreen(__DRInativeDisplay *dpy, int scrn, __DRIscreen *psc,
psp->fbHeight = frame_buffer->height; psp->fbHeight = frame_buffer->height;
psp->devPrivSize = frame_buffer->dev_priv_size; psp->devPrivSize = frame_buffer->dev_priv_size;
psp->pDevPriv = frame_buffer->dev_priv; psp->pDevPriv = frame_buffer->dev_priv;
psp->fbBPP = psp->fbStride * 8 / frame_buffer->width;
psp->fd = fd; psp->fd = fd;

View File

@@ -78,18 +78,6 @@ typedef struct {
int currentPitch; int currentPitch;
} fbDrawable, *fbDrawablePtr; } 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)) #define FB_CONTEXT(ctx) ((fbContextPtr)(ctx->DriverCtx))
#ifdef USE_NEW_INTERFACE #ifdef USE_NEW_INTERFACE
@@ -363,41 +351,13 @@ fbSetSpanFunctions(driRenderbuffer *drb, const GLvisual *vis)
static GLboolean static GLboolean
fbInitDriver( __DRIscreenPrivate *sPriv ) fbInitDriver( __DRIscreenPrivate *sPriv )
{ {
fbDRIPtr dri_priv = (fbDRIPtr)sPriv->pDevPriv; sPriv->private = NULL;
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;
return GL_TRUE; return GL_TRUE;
} }
static void static void
fbDestroyScreen( __DRIscreenPrivate *sPriv ) fbDestroyScreen( __DRIscreenPrivate *sPriv )
{ {
fbDRIPtr priv = (fbDRIPtr)sPriv->private;
drmUnmap(priv->fbMap, priv->fbSize);
drmClose(priv->drmFD);
_mesa_free(priv);
} }
/* Create the device specific context. /* Create the device specific context.
@@ -504,7 +464,6 @@ fbCreateBuffer( __DRIscreenPrivate *driScrnPriv,
const __GLcontextModes *mesaVis, const __GLcontextModes *mesaVis,
GLboolean isPixmap ) GLboolean isPixmap )
{ {
fbDRIPtr spriv = (fbDRIPtr)driScrnPriv->private;
fbDrawablePtr fbdrawable; fbDrawablePtr fbdrawable;
if (isPixmap) { if (isPixmap) {
@@ -541,18 +500,18 @@ fbCreateBuffer( __DRIscreenPrivate *driScrnPriv,
/* XXX double-check these parameters (bpp vs cpp, etc) */ /* XXX double-check these parameters (bpp vs cpp, etc) */
{ {
driRenderbuffer *drb = driNewRenderbuffer(GL_RGBA, spriv->bpp, driRenderbuffer *drb = driNewRenderbuffer(GL_RGBA, driScrnPriv->fbBPP,
spriv->fbOrigin, driScrnPriv->fbOrigin,
spriv->fbStride); driScrnPriv->fbStride);
fbSetSpanFunctions(drb, mesaVis); fbSetSpanFunctions(drb, mesaVis);
_mesa_add_renderbuffer(fbdrawable->mesa_framebuffer, _mesa_add_renderbuffer(fbdrawable->mesa_framebuffer,
BUFFER_FRONT_LEFT, &drb->Base); BUFFER_FRONT_LEFT, &drb->Base);
} }
if (mesaVis->doubleBufferMode) { if (mesaVis->doubleBufferMode) {
/* XXX what are the correct origin/stride values? */ /* XXX what are the correct origin/stride values? */
driRenderbuffer *drb = driNewRenderbuffer(GL_RGBA, spriv->bpp, driRenderbuffer *drb = driNewRenderbuffer(GL_RGBA, driScrnPriv->fbBPP,
spriv->fbOrigin, driScrnPriv->fbOrigin,
spriv->fbStride); driScrnPriv->fbStride);
fbSetSpanFunctions(drb, mesaVis); fbSetSpanFunctions(drb, mesaVis);
_mesa_add_renderbuffer(fbdrawable->mesa_framebuffer, _mesa_add_renderbuffer(fbdrawable->mesa_framebuffer,
BUFFER_BACK_LEFT, &drb->Base); BUFFER_BACK_LEFT, &drb->Base);
@@ -570,8 +529,8 @@ fbCreateBuffer( __DRIscreenPrivate *driScrnPriv,
driDrawPriv->driverPrivate = fbdrawable; driDrawPriv->driverPrivate = fbdrawable;
fbdrawable->frontBuffer = fbdrawable->currentBuffer = spriv->fbMap; fbdrawable->frontBuffer = fbdrawable->currentBuffer = driScrnPriv->pFB;
fbdrawable->currentPitch = spriv->fbWidth; fbdrawable->currentPitch = driScrnPriv->fbStride;
/* Replace the framebuffer back buffer with a malloc'ed one -- /* Replace the framebuffer back buffer with a malloc'ed one --
* big speedup. * big speedup.
@@ -692,8 +651,6 @@ __driValidateMode(const DRIDriverContext *ctx )
static int static int
__driInitFBDev( struct DRIDriverContextRec *ctx ) __driInitFBDev( struct DRIDriverContextRec *ctx )
{ {
fbDRIPtr pfbDRI;
/* Note that drmOpen will try to load the kernel module, if needed. */ /* Note that drmOpen will try to load the kernel module, if needed. */
/* we need a fbdev drm driver - it will only track maps */ /* we need a fbdev drm driver - it will only track maps */
ctx->drmFD = drmOpen("radeon", NULL ); ctx->drmFD = drmOpen("radeon", NULL );
@@ -749,18 +706,6 @@ __driInitFBDev( struct DRIDriverContextRec *ctx )
fprintf(stderr, "[drm] framebuffer handle = 0x%08lx\n", fprintf(stderr, "[drm] framebuffer handle = 0x%08lx\n",
ctx->shared.hFrameBuffer); 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);
return 1; return 1;
} }
@@ -900,14 +845,11 @@ void * __driCreateNewScreen( __DRInativeDisplay *dpy, int scrn, __DRIscreen *psc
create_context_modes = (PFNGLXCREATECONTEXTMODES) create_context_modes = (PFNGLXCREATECONTEXTMODES)
glXGetProcAddress( (const GLubyte *) "__glXCreateContextModes" ); glXGetProcAddress( (const GLubyte *) "__glXCreateContextModes" );
if ( create_context_modes != NULL ) { if ( create_context_modes != NULL ) {
#if 0
fbDRIPtr dri_priv = (fbDRIPtr) psp->pDevPriv; *driver_modes = fbFillInModes( psp->fbBPP,
*driver_modes = fbFillInModes( dri_priv->bpp, (psp->fbBPP == 16) ? 16 : 24,
(dri_priv->bpp == 16) ? 16 : 24, (psp->fbBPP == 16) ? 0 : 8,
(dri_priv->bpp == 16) ? 0 : 8, 1);
(dri_priv->backOffset != dri_priv->depthOffset) );
#endif
*driver_modes = fbFillInModes( 24, 24, 8, 0);
} }
} }