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