summaryrefslogtreecommitdiff
path: root/src/mesa/drivers/dri/glamo/glamo_screen.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/drivers/dri/glamo/glamo_screen.c')
-rw-r--r--src/mesa/drivers/dri/glamo/glamo_screen.c69
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);
}