diff options
Diffstat (limited to 'src/mesa/drivers/dri/glamo/glamo_context.c')
-rw-r--r-- | src/mesa/drivers/dri/glamo/glamo_context.c | 105 |
1 files changed, 79 insertions, 26 deletions
diff --git a/src/mesa/drivers/dri/glamo/glamo_context.c b/src/mesa/drivers/dri/glamo/glamo_context.c index 42251470c0..f3c1dd32b8 100644 --- a/src/mesa/drivers/dri/glamo/glamo_context.c +++ b/src/mesa/drivers/dri/glamo/glamo_context.c @@ -3,6 +3,7 @@ * * (c) 2009 Thomas White <taw@bitwiz.org.uk> * Roughly based on sis_context.c (c) 2003 Eric Anholt + * and radeon_common_context.c * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -31,10 +32,13 @@ #include "vbo/vbo.h" #include "tnl/tnl.h" #include "tnl/t_pipeline.h" +#include "main/state.h" #include "glamo_context.h" #include "glamo_screen.h" #include "glamo_state.h" +#include "glamo_fbo.h" +#include "glamo_tris.h" #define DRIVER_DATE "20090402" @@ -57,20 +61,21 @@ static const GLubyte *glamoGetString(GLcontext *ctx, GLenum name) } +/* Called when Mesa needs to know the size of the framebuffer */ static void glamoBufferSize(GLframebuffer *buffer, GLuint *width, GLuint *height) { GET_CURRENT_CONTEXT(ctx); - glamoContextPtr glamesa = GLAMO_CONTEXT(ctx); + glamoContextPtr glamo = GLAMO_CONTEXT(ctx); - *width = glamesa->driDrawable->w; - *height = glamesa->driDrawable->h; + *width = glamo->driDrawable->w; + *height = glamo->driDrawable->h; } GLboolean glamoCreateContext(const __GLcontextModes *glVisual, - __DRIcontext *driContextPriv, - void *sharedContextPrivate) + __DRIcontext *driContextPriv, + void *sharedContextPrivate) { GLcontext *ctx, *shareCtx; __DRIscreenPrivate *sPriv = driContextPriv->driScreenPriv; @@ -107,22 +112,25 @@ GLboolean glamoCreateContext(const __GLcontextModes *glVisual, context->driDrawable = NULL; context->driFd = sPriv->fd; - /* Parse configuration files */ -// driParseConfigFiles(&context->optionCache, &glamoScreen->optionCache, -// glamoScreen->driScreen->myNum, "glamo"); - /* Initialize the software rasterizer and helper modules. */ _swrast_CreateContext(ctx); _vbo_CreateContext(ctx); _tnl_CreateContext(ctx); _swsetup_CreateContext(ctx); + /* use default TCL pipeline */ + { + TNLcontext *tnl = TNL_CONTEXT(ctx); + tnl->Driver.RunPipeline = _tnl_run_pipeline; + } + _swrast_allow_pixel_fog(ctx, GL_TRUE); _swrast_allow_vertex_fog(ctx, GL_FALSE); _tnl_allow_pixel_fog(ctx, GL_TRUE); _tnl_allow_vertex_fog(ctx, GL_FALSE); glamoInitStateFuncs(ctx); + glamoInitTriFuncs(ctx); return GL_TRUE; } @@ -150,34 +158,79 @@ void glamoDestroyContext(__DRIcontext *driContextPriv) } +static void glamo_update_renderbuffers(__DRIcontext *context, + __DRIdrawable *drawable) +{ + unsigned int attachments[10]; + __DRIbuffer *buffers; + __DRIscreen *screen; + struct glamo_renderbuffer *grb; + int i, count; + struct glamo_framebuffer *draw; + glamoContextPtr glamo; + char *regname; + + fprintf(stderr, "enter %s, drawable %p\n", __func__, drawable); + + draw = drawable->driverPrivate; + screen = context->driScreenPriv; + glamo = (glamoContextPtr)context->driverPrivate; + i = 0; + if ( draw->color_rb[0] ) + attachments[i++] = __DRI_BUFFER_FRONT_LEFT; + if ( draw->color_rb[1] ) + attachments[i++] = __DRI_BUFFER_BACK_LEFT; +printf("screen = %p\n", screen); fflush(stdout); +printf("screen->dri2.loader = %p\n", screen->dri2.loader); fflush(stdout); +printf("screen->dri2.loader->getBuffers = %p\n", screen->dri2.loader->getBuffers); fflush(stdout); + buffers = (*screen->dri2.loader->getBuffers)(drawable, + &drawable->w, + &drawable->h, + attachments, i, + &count, + drawable->loaderPrivate); +printf("b\n"); fflush(stdout); + if (buffers == NULL) return; +printf("c\n"); fflush(stdout); + + printf("%i, %i\n", drawable->w, drawable->h); +} + + GLboolean glamoMakeCurrent(__DRIcontext *driContextPriv, __DRIdrawable *driDrawPriv, __DRIdrawable *driReadPriv) { - if ( driContextPriv ) { + struct glamo_framebuffer *draw_fb; + struct gl_framebuffer *read_fb; + glamoContextPtr glamo; - GET_CURRENT_CONTEXT(ctx); - glamoContextPtr oldGlamoCtx; - glamoContextPtr newGlamoCtx; - struct gl_framebuffer *drawBuffer, *readBuffer; + printf("glamoMakeCurrent\n"); fflush(stdout); - oldGlamoCtx = ctx ? GLAMO_CONTEXT(ctx) : NULL; - newGlamoCtx = (glamoContextPtr)driContextPriv->driverPrivate; + if ( driContextPriv == NULL ) { + _mesa_make_current(NULL, NULL, NULL); + return GL_TRUE; + } - if ( newGlamoCtx != oldGlamoCtx) { - newGlamoCtx->GlobalFlag = GFLAG_ALL; - } + /* The Glamo context we're switching to */ + glamo = (glamoContextPtr)driContextPriv->driverPrivate; - newGlamoCtx->driDrawable = driDrawPriv; + glamo->driDrawable = driDrawPriv; - drawBuffer = (GLframebuffer *)driDrawPriv->driverPrivate; - readBuffer = (GLframebuffer *)driReadPriv->driverPrivate; + /* These two will probably be the same */ + draw_fb = (struct glamo_framebuffer *)driDrawPriv->driverPrivate; + read_fb = (struct gl_framebuffer *)driReadPriv->driverPrivate; - _mesa_make_current(newGlamoCtx->glCtx, drawBuffer, readBuffer); + glamo_update_renderbuffers(driContextPriv, driDrawPriv); + if (driDrawPriv != driReadPriv) + glamo_update_renderbuffers(driContextPriv, driReadPriv); - } else { - _mesa_make_current(NULL, NULL, NULL); - } +printf("%p %p %p %p\n", glamo->glCtx, draw_fb, &draw_fb->base, read_fb); +fflush(stdout); + _mesa_make_current(glamo->glCtx, &draw_fb->base, read_fb); +printf("BBB\n"); fflush(stdout); + _mesa_update_state(glamo->glCtx); +printf("done\n"); fflush(stdout); return GL_TRUE; } |