summaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers/svga
diff options
context:
space:
mode:
authorBrian Paul <[email protected]>2000-01-25 00:03:01 +0000
committerBrian Paul <[email protected]>2000-01-25 00:03:01 +0000
commitebd5feab9af92ff08c2b9280e6dfa1a44a7d1c22 (patch)
treea81939c5c81d4dd5c97ba77cc14d209f3f088911 /src/mesa/drivers/svga
parent2454429915c05c69a86804817c95cc5b634699af (diff)
updated for Mesa 3.3
Diffstat (limited to 'src/mesa/drivers/svga')
-rw-r--r--src/mesa/drivers/svga/svgamesa.c130
-rw-r--r--src/mesa/drivers/svga/svgamesa15.c64
-rw-r--r--src/mesa/drivers/svga/svgamesa15.h4
-rw-r--r--src/mesa/drivers/svga/svgamesa16.c60
-rw-r--r--src/mesa/drivers/svga/svgamesa24.c77
-rw-r--r--src/mesa/drivers/svga/svgamesa32.c60
-rw-r--r--src/mesa/drivers/svga/svgamesa8.c56
-rw-r--r--src/mesa/drivers/svga/svgapix.h6
8 files changed, 295 insertions, 162 deletions
diff --git a/src/mesa/drivers/svga/svgamesa.c b/src/mesa/drivers/svga/svgamesa.c
index 4e726fa48d3..f7175fe63e8 100644
--- a/src/mesa/drivers/svga/svgamesa.c
+++ b/src/mesa/drivers/svga/svgamesa.c
@@ -1,8 +1,8 @@
-/* $Id: svgamesa.c,v 1.3 2000/01/23 17:49:54 brianp Exp $ */
+/* $Id: svgamesa.c,v 1.4 2000/01/25 00:03:02 brianp Exp $ */
/*
* Mesa 3-D graphics library
- * Version: 3.2
+ * Version: 3.3
* Copyright (C) 1995-2000 Brian Paul
*
* This library is free software; you can redistribute it and/or
@@ -162,28 +162,33 @@ int SVGAMesaInit( int GraphMode )
SVGAlog(cbuf);
sprintf(cbuf,"SVGAMesaInit: done. (Mode %d)",GraphMode);
SVGAlog(cbuf);
-#endif
+#endif
+
+ SVGABuffer.DrawBuffer = SVGABuffer.BackBuffer;
+ SVGABuffer.ReadBuffer = SVGABuffer.BackBuffer;
+
return 0;
}
int SVGAMesaClose( void )
{
- vga_setmode(TEXT);
- free(SVGABuffer.FrontBuffer);
- free(SVGABuffer.BackBuffer);
- return 0;
+ vga_setmode(TEXT);
+ free(SVGABuffer.FrontBuffer);
+ free(SVGABuffer.BackBuffer);
+ return 0;
}
void SVGAMesaSetCI(int ndx, GLubyte red, GLubyte green, GLubyte blue)
{
- if (ndx<256) vga_setpalette(ndx, red>>2, green>>2, blue>>2);
+ if (ndx<256)
+ vga_setpalette(ndx, red>>2, green>>2, blue>>2);
}
/**********************************************************************/
/***** Miscellaneous functions *****/
/**********************************************************************/
-static void copy_buffer( GLubyte * buffer) {
+static void copy_buffer( const GLubyte * buffer) {
int size = SVGABuffer.BufferSize, page = 0;
#ifdef SVGA_DEBUG
@@ -209,29 +214,61 @@ static void get_buffer_size( GLcontext *ctx, GLuint *width, GLuint *height )
*height = SVGAMesa->height = vga_getydim();
}
-static GLboolean set_buffer( GLcontext *ctx, GLenum buffer )
+static GLboolean set_draw_buffer( GLcontext *ctx, GLenum buffer )
{
- void * tmpptr;
-
- if (buffer == GL_FRONT_LEFT)
- {
-/* vga_waitretrace(); */
- copy_buffer(SVGABuffer.FrontBuffer);
- tmpptr=SVGABuffer.BackBuffer;
- SVGABuffer.BackBuffer=SVGABuffer.FrontBuffer;
- SVGABuffer.FrontBuffer=tmpptr;
- return GL_TRUE;
- }
- else if (buffer == GL_BACK_LEFT)
- {
-/* vga_waitretrace(); */
- copy_buffer(SVGABuffer.BackBuffer);
- return GL_TRUE;
+ if (buffer == GL_FRONT_LEFT) {
+ SVGABuffer.DrawBuffer = SVGABuffer.FrontBuffer;
+#if 0
+ /* vga_waitretrace(); */
+ void * tmpptr;
+ copy_buffer(SVGABuffer.FrontBuffer);
+ tmpptr=SVGABuffer.BackBuffer;
+ SVGABuffer.BackBuffer=SVGABuffer.FrontBuffer;
+ SVGABuffer.FrontBuffer=tmpptr;
+#endif
+ return GL_TRUE;
}
+ else if (buffer == GL_BACK_LEFT) {
+ SVGABuffer.DrawBuffer = SVGABuffer.BackBuffer;
+#if 0
+ /* vga_waitretrace(); */
+ copy_buffer(SVGABuffer.BackBuffer);
+#endif
+ return GL_TRUE;
+ }
else
return GL_FALSE;
}
+
+static void set_read_buffer( GLcontext *ctx, GLframebuffer *colorBuffer,
+ GLenum buffer )
+{
+ /* We can ignore colorBuffer since we don't support a MakeCurrentRead()
+ * function.
+ */
+ (void) colorBuffer;
+
+ if (buffer == GL_FRONT_LEFT) {
+ SVGABuffer.ReadBuffer = SVGABuffer.FrontBuffer;
+#if 0
+ void * tmpptr;
+ /* vga_waitretrace(); */
+ copy_buffer(SVGABuffer.FrontBuffer);
+ tmpptr=SVGABuffer.BackBuffer;
+ SVGABuffer.BackBuffer=SVGABuffer.FrontBuffer;
+ SVGABuffer.FrontBuffer=tmpptr;
+#endif
+ }
+ else if (buffer == GL_BACK_LEFT) {
+ SVGABuffer.ReadBuffer = SVGABuffer.BackBuffer;
+#if 0
+ /* vga_waitretrace(); */
+ copy_buffer(SVGABuffer.BackBuffer);
+#endif
+ }
+}
+
/**********************************************************************/
/***** *****/
/**********************************************************************/
@@ -243,8 +280,9 @@ static void svgamesa_update_state( GLcontext *ctx )
ctx->Driver.UpdateState = svgamesa_update_state;
- ctx->Driver.SetBuffer = set_buffer;
ctx->Driver.GetBufferSize = get_buffer_size;
+ ctx->Driver.SetDrawBuffer = set_draw_buffer;
+ ctx->Driver.SetReadBuffer = set_read_buffer;
ctx->Driver.PointsFunc = NULL;
ctx->Driver.LineFunc = NULL;
@@ -385,7 +423,11 @@ SVGAMesaContext SVGAMesaCreateContext( GLboolean doubleBuffer )
NULL, /* share list context */
(void *) ctx, GL_TRUE );
- ctx->gl_buffer = gl_create_framebuffer( ctx->gl_vis );
+ ctx->gl_buffer = gl_create_framebuffer( ctx->gl_vis,
+ ctx->gl_vis->DepthBits > 0,
+ ctx->gl_vis->StencilBits > 0,
+ ctx->gl_vis->AccumBits > 0,
+ ctx->gl_vis->AlphaBits > 0 );
ctx->index = 1;
ctx->red = ctx->green = ctx->blue = 255;
@@ -445,10 +487,12 @@ SVGAMesaContext SVGAMesaGetCurrentContext( void )
*/
void SVGAMesaSwapBuffers( void )
{
- void * tmpptr;
-
-/* vga_waitretrace(); */
- copy_buffer(SVGABuffer.BackBuffer);
+#if 000
+ void * tmpptr;
+#endif
+
+ /* vga_waitretrace(); */
+ copy_buffer(SVGABuffer.BackBuffer);
#ifndef DEV
FLUSH_VB( SVGAMesa->gl_ctx, "swap buffers" );
@@ -456,19 +500,21 @@ void SVGAMesaSwapBuffers( void )
#endif /* DEV */
{
#ifdef SVGA_DEBUG
- sprintf(cbuf,"SVGAMesaSwapBuffers : Swapping...");
- SVGAlog(cbuf);
+ sprintf(cbuf,"SVGAMesaSwapBuffers : Swapping...");
+ SVGAlog(cbuf);
#endif /* SVGA_DEBUG */
- tmpptr=SVGABuffer.BackBuffer;
- SVGABuffer.BackBuffer=SVGABuffer.FrontBuffer;
- SVGABuffer.FrontBuffer=tmpptr;
+#if 000
+ tmpptr=SVGABuffer.BackBuffer;
+ SVGABuffer.BackBuffer=SVGABuffer.FrontBuffer;
+ SVGABuffer.FrontBuffer=tmpptr;
+#endif
#ifdef SVGA_DEBUG
- sprintf(cbuf,"SVGAMesaSwapBuffers : WriteBuffer : %p\n"
- " Readbuffer : %p", \
- SVGABuffer.BackBuffer, SVGABuffer.FrontBuffer );
- SVGAlog(cbuf);
+ sprintf(cbuf,"SVGAMesaSwapBuffers : WriteBuffer : %p\n"
+ " Readbuffer : %p", \
+ SVGABuffer.BackBuffer, SVGABuffer.FrontBuffer );
+ SVGAlog(cbuf);
#endif /* SVGA_DEBUG */
- }
+ }
}
#else /*SVGA*/
diff --git a/src/mesa/drivers/svga/svgamesa15.c b/src/mesa/drivers/svga/svgamesa15.c
index 80966d7ca49..bc352878f99 100644
--- a/src/mesa/drivers/svga/svgamesa15.c
+++ b/src/mesa/drivers/svga/svgamesa15.c
@@ -1,8 +1,8 @@
-/* $Id: svgamesa15.c,v 1.3 2000/01/23 17:49:54 brianp Exp $ */
+/* $Id: svgamesa15.c,v 1.4 2000/01/25 00:03:01 brianp Exp $ */
/*
* Mesa 3-D graphics library
- * Version: 3.2
+ * Version: 3.3
* Copyright (C) 1995-2000 Brian Paul
*
* This library is free software; you can redistribute it and/or
@@ -30,25 +30,21 @@
#ifdef SVGA
#include "svgapix.h"
+#include "svgamesa15.h"
-GLshort * shortBuffer;
-
-int __svga_drawpixel15(int x, int y, unsigned long c)
+static void __svga_drawpixel15(int x, int y, unsigned long c)
{
unsigned long offset;
-
- shortBuffer=(void *)SVGABuffer.BackBuffer;
+ GLshort *shortBuffer=(void *)SVGABuffer.DrawBuffer;
y = SVGAInfo->height-y-1;
offset = y * SVGAInfo->width + x;
shortBuffer[offset]=c;
- return 0;
}
-unsigned long __svga_getpixel15(int x, int y)
+static unsigned long __svga_getpixel15(int x, int y)
{
unsigned long offset;
-
- shortBuffer=(void *)SVGABuffer.BackBuffer;
+ GLshort *shortBuffer=(void *)SVGABuffer.ReadBuffer;
y = SVGAInfo->height-y-1;
offset = y * SVGAInfo->width + x;
return shortBuffer[offset];
@@ -73,19 +69,39 @@ void __clear_color15( GLcontext *ctx,
GLbitfield __clear15( GLcontext *ctx, GLbitfield mask, GLboolean all,
GLint x, GLint y, GLint width, GLint height )
{
- int i,j;
-
- if (mask & GL_COLOR_BUFFER_BIT) {
- shortBuffer=(void *)SVGABuffer.BackBuffer;
- if (all) {
- for (i=0;i<SVGABuffer.BufferSize / 2;i++) shortBuffer[i]=SVGAMesa->clear_hicolor;
- } else {
- for (i=x;i<width;i++)
- for (j=y;j<height;j++)
- __svga_drawpixel15(i,j,SVGAMesa->clear_hicolor);
- }
- }
- return mask & (~GL_COLOR_BUFFER_BIT);
+ int i, j;
+
+ if (mask & DD_FRONT_LEFT_BIT) {
+ GLshort *shortBuffer=(void *)SVGABuffer.FrontBuffer;
+ if (all) {
+ for (i=0;i<SVGABuffer.BufferSize / 2;i++)
+ shortBuffer[i]=SVGAMesa->clear_hicolor;
+ }
+ else {
+ GLubyte *tmp = SVGABuffer.DrawBuffer;
+ SVGABuffer.DrawBuffer = SVGABuffer.FrontBuffer;
+ for (i=x;i<width;i++)
+ for (j=y;j<height;j++)
+ __svga_drawpixel15(i,j,SVGAMesa->clear_hicolor);
+ SVGABuffer.DrawBuffer = tmp;
+ }
+ }
+ if (mask & DD_BACK_LEFT_BIT) {
+ GLshort *shortBuffer=(void *)SVGABuffer.BackBuffer;
+ if (all) {
+ for (i=0;i<SVGABuffer.BufferSize / 2;i++)
+ shortBuffer[i]=SVGAMesa->clear_hicolor;
+ }
+ else {
+ GLubyte *tmp = SVGABuffer.DrawBuffer;
+ SVGABuffer.DrawBuffer = SVGABuffer.BackBuffer;
+ for (i=x;i<width;i++)
+ for (j=y;j<height;j++)
+ __svga_drawpixel15(i,j,SVGAMesa->clear_hicolor);
+ SVGABuffer.DrawBuffer = tmp;
+ }
+ }
+ return mask & (~(DD_FRONT_LEFT_BIT | DD_BACK_LEFT_BIT));
}
void __write_rgba_span15( const GLcontext *ctx, GLuint n, GLint x, GLint y,
diff --git a/src/mesa/drivers/svga/svgamesa15.h b/src/mesa/drivers/svga/svgamesa15.h
index 498575c5fc2..ad04489f8e1 100644
--- a/src/mesa/drivers/svga/svgamesa15.h
+++ b/src/mesa/drivers/svga/svgamesa15.h
@@ -1,8 +1,8 @@
-/* $Id: svgamesa15.h,v 1.2 2000/01/22 20:08:36 brianp Exp $ */
+/* $Id: svgamesa15.h,v 1.3 2000/01/25 00:03:02 brianp Exp $ */
/*
* Mesa 3-D graphics library
- * Version: 3.2
+ * Version: 3.3
* Copyright (C) 1995-2000 Brian Paul
*
* This library is free software; you can redistribute it and/or
diff --git a/src/mesa/drivers/svga/svgamesa16.c b/src/mesa/drivers/svga/svgamesa16.c
index 061f40a9b70..26a36c7d03a 100644
--- a/src/mesa/drivers/svga/svgamesa16.c
+++ b/src/mesa/drivers/svga/svgamesa16.c
@@ -1,8 +1,8 @@
-/* $Id: svgamesa16.c,v 1.3 2000/01/23 17:49:54 brianp Exp $ */
+/* $Id: svgamesa16.c,v 1.4 2000/01/25 00:03:02 brianp Exp $ */
/*
* Mesa 3-D graphics library
- * Version: 3.2
+ * Version: 3.3
* Copyright (C) 1995-2000 Brian Paul
*
* This library is free software; you can redistribute it and/or
@@ -30,25 +30,23 @@
#ifdef SVGA
#include "svgapix.h"
+#include "svgamesa16.h"
-GLshort * shortBuffer;
-int __svga_drawpixel16(int x, int y, unsigned long c)
+static void __svga_drawpixel16(int x, int y, unsigned long c)
{
unsigned long offset;
-
- shortBuffer=(void *)SVGABuffer.BackBuffer;
+ GLshort *shortBuffer=(void *)SVGABuffer.DrawBuffer;
y = SVGAInfo->height-y-1;
offset = y * SVGAInfo->width + x;
shortBuffer[offset]=c;
- return 0;
}
-unsigned long __svga_getpixel16(int x, int y)
+static unsigned long __svga_getpixel16(int x, int y)
{
unsigned long offset;
- shortBuffer=(void *)SVGABuffer.BackBuffer;
+ GLshort *shortBuffer=(void *)SVGABuffer.ReadBuffer;
y = SVGAInfo->height-y-1;
offset = y * SVGAInfo->width + x;
return shortBuffer[offset];
@@ -74,18 +72,38 @@ GLbitfield __clear16( GLcontext *ctx, GLbitfield mask, GLboolean all,
GLint x, GLint y, GLint width, GLint height )
{
int i,j;
-
- if (mask & GL_COLOR_BUFFER_BIT) {
- if (all) {
- shortBuffer=(void *)SVGABuffer.BackBuffer;
- for (i=0;i<SVGABuffer.BufferSize / 2;i++) shortBuffer[i]=SVGAMesa->clear_hicolor;
- } else {
- for (i=x;i<width;i++)
- for (j=y;j<height;j++)
- __svga_drawpixel16(i,j,SVGAMesa->clear_hicolor);
- }
- }
- return mask & (~GL_COLOR_BUFFER_BIT);
+
+ if (mask & DD_FRONT_LEFT_BIT) {
+ if (all) {
+ GLshort *shortBuffer=(void *)SVGABuffer.FrontBuffer;
+ for (i=0;i<SVGABuffer.BufferSize / 2;i++)
+ shortBuffer[i]=SVGAMesa->clear_hicolor;
+ }
+ else {
+ GLubyte *tmp = SVGABuffer.DrawBuffer;
+ SVGABuffer.DrawBuffer = SVGABuffer.FrontBuffer;
+ for (i=x;i<width;i++)
+ for (j=y;j<height;j++)
+ __svga_drawpixel16(i,j,SVGAMesa->clear_hicolor);
+ SVGABuffer.DrawBuffer = tmp;
+ }
+ }
+ if (mask & DD_BACK_LEFT_BIT) {
+ if (all) {
+ GLshort *shortBuffer=(void *)SVGABuffer.BackBuffer;
+ for (i=0;i<SVGABuffer.BufferSize / 2;i++)
+ shortBuffer[i]=SVGAMesa->clear_hicolor;
+ }
+ else {
+ GLubyte *tmp = SVGABuffer.DrawBuffer;
+ SVGABuffer.DrawBuffer = SVGABuffer.BackBuffer;
+ for (i=x;i<width;i++)
+ for (j=y;j<height;j++)
+ __svga_drawpixel16(i,j,SVGAMesa->clear_hicolor);
+ SVGABuffer.DrawBuffer = tmp;
+ }
+ }
+ return mask & (~(DD_FRONT_LEFT_BIT | DD_BACK_LEFT_BIT));
}
void __write_rgba_span16( const GLcontext *ctx, GLuint n, GLint x, GLint y,
diff --git a/src/mesa/drivers/svga/svgamesa24.c b/src/mesa/drivers/svga/svgamesa24.c
index c4b78079f48..152779bf127 100644
--- a/src/mesa/drivers/svga/svgamesa24.c
+++ b/src/mesa/drivers/svga/svgamesa24.c
@@ -1,8 +1,8 @@
-/* $Id: svgamesa24.c,v 1.3 2000/01/23 17:49:54 brianp Exp $ */
+/* $Id: svgamesa24.c,v 1.4 2000/01/25 00:03:02 brianp Exp $ */
/*
* Mesa 3-D graphics library
- * Version: 3.2
+ * Version: 3.3
* Copyright (C) 1995-2000 Brian Paul
*
* This library is free software; you can redistribute it and/or
@@ -30,11 +30,11 @@
#ifdef SVGA
#include "svgapix.h"
+#include "svgamesa24.h"
-_RGB * rgbBuffer;
#if 0
-inline int RGB2BGR24(int c)
+static inline int RGB2BGR24(int c)
{
asm("rorw $8, %0\n"
"rorl $16, %0\n"
@@ -44,7 +44,7 @@ inline int RGB2BGR24(int c)
return c;
}
#else
-int RGB2BGR24(int c)
+static int RGB2BGR24(int c)
{
/* XXX this isn't right */
return c;
@@ -53,26 +53,24 @@ int RGB2BGR24(int c)
#endif
-int __svga_drawpixel24(int x, int y, GLubyte r, GLubyte g, GLubyte b)
+static void __svga_drawpixel24(int x, int y, GLubyte r, GLubyte g, GLubyte b)
{
unsigned long offset;
- rgbBuffer=(void *)SVGABuffer.BackBuffer;
+ _RGB *rgbBuffer=(void *)SVGABuffer.DrawBuffer;
y = SVGAInfo->height-y-1;
offset = y * SVGAInfo->width + x;
rgbBuffer[offset].r=r;
rgbBuffer[offset].g=g;
rgbBuffer[offset].b=b;
-
- return 0;
}
-unsigned long __svga_getpixel24(int x, int y)
+static unsigned long __svga_getpixel24(int x, int y)
{
unsigned long offset;
- rgbBuffer=(void *)SVGABuffer.BackBuffer;
+ _RGB *rgbBuffer=(void *)SVGABuffer.ReadBuffer;
y = SVGAInfo->height-y-1;
offset = y * SVGAInfo->width + x;
return rgbBuffer[offset].r<<16 | rgbBuffer[offset].g<<8 | rgbBuffer[offset].b;
@@ -103,24 +101,47 @@ GLbitfield __clear24( GLcontext *ctx, GLbitfield mask, GLboolean all,
{
int i,j;
- if (mask & GL_COLOR_BUFFER_BIT) {
- if (all) {
- rgbBuffer=(void *)SVGABuffer.BackBuffer;
- for (i=0;i<SVGABuffer.BufferSize / 3;i++)
- {
- rgbBuffer[i].r=SVGAMesa->clear_red;
- rgbBuffer[i].g=SVGAMesa->clear_green;
- rgbBuffer[i].b=SVGAMesa->clear_blue;
- }
- } else {
- for (i=x;i<width;i++)
- for (j=y;j<height;j++)
- __svga_drawpixel24( i, j, SVGAMesa->clear_red,
- SVGAMesa->clear_green,
- SVGAMesa->clear_blue);
- }
+ if (mask & DD_FRONT_LEFT_BIT) {
+ if (all) {
+ _RGB *rgbBuffer=(void *)SVGABuffer.FrontBuffer;
+ for (i=0;i<SVGABuffer.BufferSize / 3;i++) {
+ rgbBuffer[i].r=SVGAMesa->clear_red;
+ rgbBuffer[i].g=SVGAMesa->clear_green;
+ rgbBuffer[i].b=SVGAMesa->clear_blue;
+ }
+ }
+ else {
+ GLubyte *tmp = SVGABuffer.DrawBuffer;
+ SVGABuffer.DrawBuffer = SVGABuffer.FrontBuffer;
+ for (i=x;i<width;i++)
+ for (j=y;j<height;j++)
+ __svga_drawpixel24( i, j, SVGAMesa->clear_red,
+ SVGAMesa->clear_green,
+ SVGAMesa->clear_blue);
+ SVGABuffer.DrawBuffer = tmp;
+ }
+ }
+ if (mask & DD_BACK_LEFT_BIT) {
+ if (all) {
+ _RGB *rgbBuffer=(void *)SVGABuffer.BackBuffer;
+ for (i=0;i<SVGABuffer.BufferSize / 3;i++) {
+ rgbBuffer[i].r=SVGAMesa->clear_red;
+ rgbBuffer[i].g=SVGAMesa->clear_green;
+ rgbBuffer[i].b=SVGAMesa->clear_blue;
+ }
+ }
+ else {
+ GLubyte *tmp = SVGABuffer.DrawBuffer;
+ SVGABuffer.DrawBuffer = SVGABuffer.BackBuffer;
+ for (i=x;i<width;i++)
+ for (j=y;j<height;j++)
+ __svga_drawpixel24( i, j, SVGAMesa->clear_red,
+ SVGAMesa->clear_green,
+ SVGAMesa->clear_blue);
+ SVGABuffer.DrawBuffer = tmp;
+ }
}
- return mask & (~GL_COLOR_BUFFER_BIT);
+ return mask & (~(DD_FRONT_LEFT_BIT | DD_BACK_LEFT_BIT));
}
void __write_rgba_span24( const GLcontext *ctx, GLuint n, GLint x, GLint y,
diff --git a/src/mesa/drivers/svga/svgamesa32.c b/src/mesa/drivers/svga/svgamesa32.c
index a67188f65c6..ad683ef08f6 100644
--- a/src/mesa/drivers/svga/svgamesa32.c
+++ b/src/mesa/drivers/svga/svgamesa32.c
@@ -1,8 +1,8 @@
-/* $Id: svgamesa32.c,v 1.3 2000/01/23 17:49:54 brianp Exp $ */
+/* $Id: svgamesa32.c,v 1.4 2000/01/25 00:03:02 brianp Exp $ */
/*
* Mesa 3-D graphics library
- * Version: 3.2
+ * Version: 3.3
* Copyright (C) 1995-2000 Brian Paul
*
* This library is free software; you can redistribute it and/or
@@ -30,11 +30,10 @@
#ifdef SVGA
#include "svgapix.h"
-
-GLint * intBuffer;
+#include "svgamesa32.h"
#if 0
-inline int RGB2BGR32(int c)
+static inline int RGB2BGR32(int c)
{
asm("rorw $8, %0\n"
"rorl $16, %0\n"
@@ -44,29 +43,28 @@ inline int RGB2BGR32(int c)
return c;
}
#else
-int RGB2BGR32(int c)
+static int RGB2BGR32(int c)
{
/* XXX this isn't right */
return c;
}
#endif
-int __svga_drawpixel32(int x, int y, unsigned long c)
+static void __svga_drawpixel32(int x, int y, unsigned long c)
{
unsigned long offset;
- intBuffer=(void *)SVGABuffer.BackBuffer;
+ GLint *intBuffer=(void *)SVGABuffer.DrawBuffer;
y = SVGAInfo->height-y-1;
offset = y * SVGAInfo->width + x;
intBuffer[offset]=c;
- return 0;
}
-unsigned long __svga_getpixel32(int x, int y)
+static unsigned long __svga_getpixel32(int x, int y)
{
unsigned long offset;
- intBuffer=(void *)SVGABuffer.BackBuffer;
+ const GLint *intBuffer=(void *)SVGABuffer.ReadBuffer;
y = SVGAInfo->height-y-1;
offset = y * SVGAInfo->width + x;
return intBuffer[offset];
@@ -94,17 +92,37 @@ GLbitfield __clear32( GLcontext *ctx, GLbitfield mask, GLboolean all,
{
int i,j;
- if (mask & GL_COLOR_BUFFER_BIT) {
- if (all) {
- intBuffer=(void *)SVGABuffer.BackBuffer;
- for (i=0;i<SVGABuffer.BufferSize / 4;i++) intBuffer[i]=SVGAMesa->clear_truecolor;
- } else {
- for (i=x;i<width;i++)
- for (j=y;j<height;j++)
- __svga_drawpixel32(i,j,SVGAMesa->clear_truecolor);
- }
+ if (mask & DD_FRONT_LEFT_BIT) {
+ if (all) {
+ GLint *intBuffer=(void *)SVGABuffer.FrontBuffer;
+ for (i=0;i<SVGABuffer.BufferSize / 4;i++)
+ intBuffer[i]=SVGAMesa->clear_truecolor;
+ }
+ else {
+ GLubyte *tmp = SVGABuffer.DrawBuffer;
+ SVGABuffer.DrawBuffer = SVGABuffer.FrontBuffer;
+ for (i=x;i<width;i++)
+ for (j=y;j<height;j++)
+ __svga_drawpixel32(i,j,SVGAMesa->clear_truecolor);
+ SVGABuffer.DrawBuffer = tmp;
+ }
+ }
+ if (mask & DD_BACK_LEFT_BIT) {
+ if (all) {
+ GLint *intBuffer=(void *)SVGABuffer.BackBuffer;
+ for (i=0;i<SVGABuffer.BufferSize / 4;i++)
+ intBuffer[i]=SVGAMesa->clear_truecolor;
+ }
+ else {
+ GLubyte *tmp = SVGABuffer.DrawBuffer;
+ SVGABuffer.DrawBuffer = SVGABuffer.BackBuffer;
+ for (i=x;i<width;i++)
+ for (j=y;j<height;j++)
+ __svga_drawpixel32(i,j,SVGAMesa->clear_truecolor);
+ SVGABuffer.DrawBuffer = tmp;
+ }
}
- return mask & (~GL_COLOR_BUFFER_BIT);
+ return mask & (~(DD_FRONT_LEFT_BIT | DD_BACK_LEFT_BIT));
}
void __write_rgba_span32( const GLcontext *ctx, GLuint n, GLint x, GLint y,
diff --git a/src/mesa/drivers/svga/svgamesa8.c b/src/mesa/drivers/svga/svgamesa8.c
index dc9df3f4128..048ad988597 100644
--- a/src/mesa/drivers/svga/svgamesa8.c
+++ b/src/mesa/drivers/svga/svgamesa8.c
@@ -1,8 +1,8 @@
-/* $Id: svgamesa8.c,v 1.3 2000/01/23 17:49:54 brianp Exp $ */
+/* $Id: svgamesa8.c,v 1.4 2000/01/25 00:03:02 brianp Exp $ */
/*
* Mesa 3-D graphics library
- * Version: 3.2
+ * Version: 3.3
* Copyright (C) 1995-2000 Brian Paul
*
* This library is free software; you can redistribute it and/or
@@ -31,25 +31,22 @@
#include "svgapix.h"
+#include "svgamesa8.h"
-int __svga_drawpixel8(int x, int y, unsigned long c)
+static void __svga_drawpixel8(int x, int y, unsigned long c)
{
unsigned long offset;
-
y = SVGAInfo->height-y-1;
offset = y * SVGAInfo->linewidth + x;
- SVGABuffer.BackBuffer[offset]=c;
-
- return 0;
+ SVGABuffer.DrawBuffer[offset]=c;
}
-unsigned long __svga_getpixel8(int x, int y)
+static unsigned long __svga_getpixel8(int x, int y)
{
unsigned long offset;
-
y = SVGAInfo->height-y-1;
offset = y * SVGAInfo->linewidth + x;
- return SVGABuffer.BackBuffer[offset];
+ return SVGABuffer.ReadBuffer[offset];
}
void __set_index8( GLcontext *ctx, GLuint index )
@@ -67,18 +64,33 @@ GLbitfield __clear8( GLcontext *ctx, GLbitfield mask, GLboolean all,
{
int i,j;
- if (mask & GL_COLOR_BUFFER_BIT) {
-
- if (all)
- {
- memset(SVGABuffer.BackBuffer,SVGAMesa->clear_index,SVGABuffer.BufferSize);
- } else {
- for (i=x;i<width;i++)
- for (j=y;j<height;j++)
- __svga_drawpixel8(i,j,SVGAMesa->clear_index);
- }
- }
- return mask & (~GL_COLOR_BUFFER_BIT);
+ if (mask & DD_FRONT_LEFT_BIT) {
+ if (all) {
+ memset(SVGABuffer.FrontBuffer, SVGAMesa->clear_index, SVGABuffer.BufferSize);
+ }
+ else {
+ GLubyte *tmp = SVGABuffer.DrawBuffer;
+ SVGABuffer.DrawBuffer = SVGABuffer.FrontBuffer;
+ for (i=x;i<width;i++)
+ for (j=y;j<height;j++)
+ __svga_drawpixel8(i,j,SVGAMesa->clear_index);
+ SVGABuffer.DrawBuffer = tmp;
+ }
+ }
+ if (mask & DD_BACK_LEFT_BIT) {
+ if (all) {
+ memset(SVGABuffer.BackBuffer, SVGAMesa->clear_index, SVGABuffer.BufferSize);
+ }
+ else {
+ GLubyte *tmp = SVGABuffer.DrawBuffer;
+ SVGABuffer.DrawBuffer = SVGABuffer.BackBuffer;
+ for (i=x;i<width;i++)
+ for (j=y;j<height;j++)
+ __svga_drawpixel8(i,j,SVGAMesa->clear_index);
+ SVGABuffer.DrawBuffer = tmp;
+ }
+ }
+ return mask & (~(DD_FRONT_LEFT_BIT | DD_BACK_LEFT_BIT));
}
void __write_ci32_span8( const GLcontext *ctx, GLuint n, GLint x, GLint y,
diff --git a/src/mesa/drivers/svga/svgapix.h b/src/mesa/drivers/svga/svgapix.h
index 151975a909c..72d389e758d 100644
--- a/src/mesa/drivers/svga/svgapix.h
+++ b/src/mesa/drivers/svga/svgapix.h
@@ -1,8 +1,8 @@
-/* $Id: svgapix.h,v 1.2 2000/01/22 20:08:36 brianp Exp $ */
+/* $Id: svgapix.h,v 1.3 2000/01/25 00:03:02 brianp Exp $ */
/*
* Mesa 3-D graphics library
- * Version: 3.2
+ * Version: 3.3
* Copyright (C) 1995-2000 Brian Paul
*
* This library is free software; you can redistribute it and/or
@@ -62,6 +62,8 @@ struct svga_buffer {
GLubyte * FrontBuffer;
GLubyte * BackBuffer;
GLubyte * VideoRam;
+ GLubyte * DrawBuffer; /* == FrontBuffer or BackBuffer */
+ GLubyte * ReadBuffer; /* == FrontBuffer or BackBuffer */
};
extern struct svga_buffer SVGABuffer;