diff options
Diffstat (limited to 'src/mesa/drivers/dri/glamo/glamo_screen.c')
-rw-r--r-- | src/mesa/drivers/dri/glamo/glamo_screen.c | 69 |
1 files changed, 52 insertions, 17 deletions
diff --git a/src/mesa/drivers/dri/glamo/glamo_screen.c b/src/mesa/drivers/dri/glamo/glamo_screen.c index 1701eac2c0..82f2f6233d 100644 --- a/src/mesa/drivers/dri/glamo/glamo_screen.c +++ b/src/mesa/drivers/dri/glamo/glamo_screen.c @@ -32,6 +32,10 @@ #include "glamo_screen.h" #include "glamo_context.h" +#include "glamo_fbo.h" + +/* This comes from libdrm_glamo */ +#include <glamo_bo_gem.h> static int glamoInitDriver(__DRIscreenPrivate *psp) @@ -51,9 +55,8 @@ static glamoScreenPtr glamoCreateScreen(__DRIscreenPrivate *sPriv) glamoScreen->driScreen = sPriv; - /* parse information in __driConfigOptions */ -// driParseOptionInfo(&glamoScreen->optionCache, -// __driConfigOptions, __driNConfigOptions); + /* This is our link to the kernel's memory manager, via libdrm */ + glamoScreen->bom = glamo_bo_manager_gem_ctor(sPriv->fd); return glamoScreen; } @@ -144,26 +147,57 @@ static const __DRIconfig **glamoInitScreen2(__DRIscreenPrivate *sPriv) return (const __DRIconfig **)configs; } + +/* Allocate buffers for a context. This is where the fun starts... */ static GLboolean glamoCreateBuffer(__DRIscreen *driScrnPriv, __DRIdrawable *driDrawPriv, - const __GLcontextModes *glVis, - GLboolean pixmapBuffer) + const __GLcontextModes *mesaVis, + GLboolean isPixmap) { - struct gl_framebuffer *fb; + glamoScreenPtr screen = (glamoScreenPtr)driScrnPriv->private; + struct glamo_framebuffer *gfb; + GLenum rgbFormat; + + printf("glamoCreateBuffer\n");fflush(stdout); + + if ( isPixmap ) return GL_FALSE; /* not implemented */ + + gfb = CALLOC_STRUCT(glamo_framebuffer); + if ( !gfb ) return GL_FALSE; - if ( pixmapBuffer ) - return GL_FALSE; /* not implemented */ + _mesa_initialize_framebuffer(&gfb->base, mesaVis); - fb = _mesa_create_framebuffer(glVis); + /* we only support this one format at the moment */ + rgbFormat = GL_RGB5; + + /* Front color renderbuffer */ + gfb->color_rb[0] = glamo_create_renderbuffer(rgbFormat, driDrawPriv); + _mesa_add_renderbuffer(&gfb->base, BUFFER_FRONT_LEFT, + &gfb->color_rb[0]->base); + + /* Back color renderbuffer, if requested */ + if ( mesaVis->doubleBufferMode ) { + gfb->color_rb[1] = glamo_create_renderbuffer(rgbFormat, driDrawPriv); + _mesa_add_renderbuffer(&gfb->base, BUFFER_BACK_LEFT, + &gfb->color_rb[1]->base); + } + + if ( mesaVis->depthBits == 16 ) { + struct glamo_renderbuffer *depth; + depth = glamo_create_renderbuffer(GL_DEPTH_COMPONENT16, driDrawPriv); + _mesa_add_renderbuffer(&gfb->base, BUFFER_DEPTH, &depth->base); + } - _mesa_add_soft_renderbuffers(fb, - GL_FALSE, /* color */ - GL_FALSE, /* depth */ - glVis->stencilBits > 0, - glVis->accumRedBits > 0, - GL_FALSE, /* alpha */ - GL_FALSE /* aux */); - driDrawPriv->driverPrivate = (void *)fb; + /* Add software renderbuffers for the things we can't support in hardware */ + _mesa_add_soft_renderbuffers(&gfb->base, + GL_FALSE, /* color */ + GL_FALSE, /* depth */ + mesaVis->stencilBits > 0, /* stencil, if required */ + mesaVis->accumRedBits > 0, /* accum, if required */ + GL_FALSE, /* alpha */ + GL_FALSE /* aux */ + ); + driDrawPriv->driverPrivate = (void *)gfb; return (driDrawPriv->driverPrivate != NULL); } @@ -176,6 +210,7 @@ static void glamoDestroyBuffer(__DRIdrawable *driDrawPriv) static void glamoSwapBuffers(__DRIdrawable *driDrawPriv) { + printf("glamoSwapBuffers\n"); fflush(stdout); } |