updated SVGA sources from Mesa 3.2
authorBrian Paul <brian.paul@tungstengraphics.com>
Sat, 22 Jan 2000 20:08:36 +0000 (20:08 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Sat, 22 Jan 2000 20:08:36 +0000 (20:08 +0000)
12 files changed:
src/mesa/drivers/svga/svgamesa.c
src/mesa/drivers/svga/svgamesa15.c [new file with mode: 0644]
src/mesa/drivers/svga/svgamesa15.h [new file with mode: 0644]
src/mesa/drivers/svga/svgamesa16.c [new file with mode: 0644]
src/mesa/drivers/svga/svgamesa16.h [new file with mode: 0644]
src/mesa/drivers/svga/svgamesa24.c [new file with mode: 0644]
src/mesa/drivers/svga/svgamesa24.h [new file with mode: 0644]
src/mesa/drivers/svga/svgamesa32.c [new file with mode: 0644]
src/mesa/drivers/svga/svgamesa32.h [new file with mode: 0644]
src/mesa/drivers/svga/svgamesa8.c [new file with mode: 0644]
src/mesa/drivers/svga/svgamesa8.h [new file with mode: 0644]
src/mesa/drivers/svga/svgapix.h [new file with mode: 0644]

index 4c4d9f793e0cd400c43ba67ec4e847fb58b91b97..09e3fec33c7db64eb1bd7bcd6d035032042cf332 100644 (file)
@@ -1,9 +1,9 @@
-/* $Id: svgamesa.c,v 1.1 1999/08/19 00:55:42 jtg Exp $ */
+/* $Id: svgamesa.c,v 1.2 2000/01/22 20:08:36 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
- * Version:  3.0
- * Copyright (C) 1995-1998  Brian Paul
+ * Version:  3.2
+ * Copyright (C) 1995-2000  Brian Paul
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
  */
 
 
-
 /*
- * Linux SVGA/Mesa interface.
- *
- * This interface is not finished!  Still have to implement pixel
- * reading functions and double buffering.  Then, look into accelerated
- * line and polygon rendering.  And, clean up a bunch of other stuff.
- * Any volunteers?
+ * SVGA driver for Mesa.
+ * Original author:  Brian Paul
+ * Additional authors:  Slawomir Szczyrba <steev@hot.pl>  (Mesa 3.2)
  */
 
+
 #ifdef HAVE_CONFIG_H
 #include "conf.h"
 #endif
 
 #ifdef SVGA
 
-
 #ifdef PC_HEADER
 #include "all.h"
 #else
 #include "context.h"
 #include "matrix.h"
 #include "types.h"
+#include <string.h>
 #endif
 
+#include "svgapix.h"
+#include "svgamesa8.h"
+#include "svgamesa15.h"
+#include "svgamesa16.h"
+#include "svgamesa24.h"
+#include "svgamesa32.h"
 
-struct svgamesa_context {
-   GLcontext *gl_ctx;          /* the core Mesa context */
-   GLvisual *gl_vis;           /* describes the color buffer */
-   GLframebuffer *gl_buffer;   /* the ancillary buffers */
-   GLuint index;               /* current color index */
-   GLint red, green, blue;     /* current rgb color */
-   GLint width, height;                /* size of color buffer */
-   GLint depth;                        /* bits per pixel (8,16,24 or 32) */
-};
-
-
-static SVGAMesaContext SVGAMesa = NULL;    /* the current context */
-
-
-
-/*
- * Convert Mesa window Y coordinate to VGA screen Y coordinate:
- */
-#define FLIP(Y)  (SVGAMesa->height-(Y)-1)
-
-
-
-/**********************************************************************/
-/*****                 Miscellaneous functions                    *****/
-/**********************************************************************/
-
-
-static void get_buffer_size( GLcontext *ctx, GLuint *width, GLuint *height )
-{
-   *width = SVGAMesa->width = vga_getxdim();
-   *height = SVGAMesa->height = vga_getydim();
-}
-
-
-/* Set current color index */
-static void set_index( GLcontext *ctx, GLuint index )
-{
-   SVGAMesa->index = index;
-   vga_setcolor( index );
-}
-
-
-/* Set current drawing color */
-static void set_color( GLcontext *ctx,
-                       GLubyte red, GLubyte green,
-                       GLubyte blue, GLubyte alpha )
-{
-   SVGAMesa->red = red;
-   SVGAMesa->green = green;
-   SVGAMesa->blue = blue;
-   vga_setrgbcolor( red, green, blue );
-}
+struct svga_buffer SVGABuffer;
+vga_modeinfo * SVGAInfo;
+SVGAMesaContext SVGAMesa;    /* the current context */
 
+#ifdef SVGA_DEBUG
 
-static void clear_index( GLcontext *ctx, GLuint index )
-{
-   /* TODO: Implements glClearIndex() */
-}
-
-
-static void clear_color( GLcontext *ctx,
-                         GLubyte red, GLubyte green,
-                         GLubyte blue, GLubyte alpha )
-{
-   /* TODO: Implements glClearColor() */
-}
-
-
-static GLbitfield clear( GLcontext *ctx, GLbitfield mask, GLboolean all,
-                         GLint x, GLint y, GLint width, GLint height )
-{
-   if (mask & GL_COLOR_BUFFER_BIT) {
-      vga_clear();
-   }
-   return mask & (~GL_COLOR_BUFFER_BIT);
-}
+#include <sys/types.h>
+#include <signal.h>
 
+FILE * logfile;
+char cbuf[1024]={0};
 
-static GLboolean set_buffer( GLcontext *ctx, GLenum buffer )
+void SVGAlog(char * what)
 {
-   /* TODO: implement double buffering and use this function to select */
-   /* between front and back buffers. */
-   if (buffer == GL_FRONT_LEFT)
-      return GL_TRUE;
-   else if (buffer == GL_BACK_LEFT)
-      return GL_TRUE;
-   else
-      return GL_FALSE;
-}
-
-
-
+ logfile=fopen("svgamesa.log","a");
+ if (!logfile) return;
+ fprintf(logfile,"%s\n",what);
+ fclose(logfile);
+} 
+#endif
 
 /**********************************************************************/
-/*****            Write spans of pixels                           *****/
+/*****                       Init stuff...                        *****/
 /**********************************************************************/
 
-
-static void write_ci32_span( const GLcontext *ctx, GLuint n, GLint x, GLint y,
-                             const GLuint index[], const GLubyte mask[] )
-{
-   int i;
-   y = FLIP(y);
-   for (i=0;i<n;i++,x++) {
-      if (mask[i]) {
-         vga_setcolor( index[i] );
-         vga_drawpixel( x, y );
-      }
-   }
-}
-
-static void write_ci8_span( const GLcontext *ctx, GLuint n, GLint x, GLint y,
-                            const GLubyte index[], const GLubyte mask[] )
-{
-   int i;
-   y = FLIP(y);
-   for (i=0;i<n;i++,x++) {
-      if (mask[i]) {
-         vga_setcolor( index[i] );
-         vga_drawpixel( x, y );
-      }
-   }
-}
-
-
-
-static void write_mono_ci_span( const GLcontext *ctx, GLuint n,
-                                GLint x, GLint y, const GLubyte mask[] )
-{
-   int i;
-   y = FLIP(y);
-   /* use current color index */
-   vga_setcolor( SVGAMesa->index );
-   for (i=0;i<n;i++,x++) {
-      if (mask[i]) {
-         vga_drawpixel( x, y );
-      }
+int SVGAMesaInit( int GraphMode )
+{  
+   vga_init();
+   if (!vga_hasmode(GraphMode))
+   {
+    fprintf(stderr,"GraphMode %d unavailable...",GraphMode);
+#ifdef SVGA_DEBUG
+    SVGAlog("SVGAMesaInit: invalid GraphMode (doesn't exist)");
+#endif    
+    return(1);
    }
-}
-
-
-
-static void write_rgba_span( const GLcontext *ctx, GLuint n, GLint x, GLint y,
-                             const GLubyte rgba[][4], const GLubyte mask[] )
-{
-   int i;
-   y=FLIP(y);
-   if (mask) {
-      /* draw some pixels */
-      for (i=0; i<n; i++, x++) {
-         if (mask[i]) {
-            vga_setrgbcolor( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
-            vga_drawpixel( x, y );
-         }
-      }
+   SVGAInfo=vga_getmodeinfo(GraphMode);           
+   if (SVGAInfo->flags & IS_MODEX)
+   {
+    fprintf(stderr,"ModeX not implemented...");
+#ifdef SVGA_DEBUG
+    SVGAlog("SVGAMesaInit: invalid GraphMode (ModeX)");
+#endif    
+    return(2);
    }
-   else {
-      /* draw all pixels */
-      for (i=0; i<n; i++, x++) {
-         vga_setrgbcolor( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
-         vga_drawpixel( x, y );
-      }
+   if (!SVGAInfo->bytesperpixel)
+   {
+    fprintf(stderr,"1 / 4 bit color not implemented...");
+#ifdef SVGA_DEBUG
+    SVGAlog("SVGAMesaInit: invalid GraphMode (1 or 4 bit)");
+#endif    
+    return(3);
    }
-}
-
-
-
-static void write_mono_rgba_span( const GLcontext *ctx,
-                                  GLuint n, GLint x, GLint y,
-                                  const GLubyte mask[])
-{
-   int i;
-   y=FLIP(y);
-   /* use current rgb color */
-   vga_setrgbcolor( SVGAMesa->red, SVGAMesa->green, SVGAMesa->blue );
-   for (i=0; i<n; i++, x++) {
-      if (mask[i]) {
-         vga_drawpixel( x, y );
-      }
-   }
-}
-
-
-
-/**********************************************************************/
-/*****                 Read spans of pixels                       *****/
-/**********************************************************************/
-
-
-static void read_ci32_span( const GLcontext *ctx,
-                            GLuint n, GLint x, GLint y, GLuint index[])
-{
-   int i;
-   y = FLIP(y);
-   for (i=0; i<n; i++,x++) {
-      index[i] = vga_getpixel( x, y );
+   switch (SVGAInfo->colors) {
+    case   256: SVGABuffer.Depth = 8;  break;
+    case 32768: SVGABuffer.Depth = 15; break;
+    case 65536: SVGABuffer.Depth = 16; break;
+    default: SVGABuffer.Depth = SVGAInfo->bytesperpixel<<3; break;
    }
+   SVGABuffer.BufferSize=SVGAInfo->linewidth*SVGAInfo->height;
+#ifdef SVGA_DEBUG
+   sprintf(cbuf,"SVGAMesaInit: double buffer info.\n" \
+                 "              depth  : %d\n" \
+                 "              mode   : %d\n" \
+                "              width  : %d\n" \
+                "              height : %d\n" \
+                "              bufsize: %d\n", \
+                SVGABuffer.Depth,GraphMode,SVGAInfo->linewidth, \
+                SVGAInfo->height,SVGABuffer.BufferSize);
+   SVGAlog(cbuf);
+#endif    
+   SVGABuffer.FrontBuffer=(void*)malloc(SVGABuffer.BufferSize + 4);
+   if (!SVGABuffer.FrontBuffer) {
+    {
+     fprintf(stderr,"Not enough RAM for FRONT_LEFT_BUFFER...");
+#ifdef SVGA_DEBUG
+     SVGAlog("SVGAMesaInit: Not enough RAM (front buffer)");
+#endif    
+     return(4);
+    }
+   }       
+#ifdef SVGA_DEBUG
+   sprintf(cbuf,"SVGAMesaInit: FrontBuffer - %p",SVGABuffer.FrontBuffer);
+   SVGAlog(cbuf);
+#endif    
+   SVGABuffer.BackBuffer=(void*)malloc(SVGABuffer.BufferSize + 4);
+   if (!SVGABuffer.BackBuffer) {
+    {
+     free(SVGABuffer.FrontBuffer);
+     fprintf(stderr,"Not enough RAM for BACK_LEFT_BUFFER...");
+#ifdef SVGA_DEBUG
+     SVGAlog("SVGAMesaInit: Not enough RAM (back buffer)");
+#endif    
+     return(5);
+    }
+   }       
+#ifdef SVGA_DEBUG
+   sprintf(cbuf,"SVGAMesaInit: BackBuffer - %p",SVGABuffer.BackBuffer);
+   SVGAlog(cbuf);
+#endif    
+
+   vga_setmode(GraphMode);
+   SVGABuffer.VideoRam=vga_getgraphmem();
+#ifdef SVGA_DEBUG
+   sprintf(cbuf,"SVGAMesaInit: VRAM - %p",SVGABuffer.VideoRam);
+   SVGAlog(cbuf);
+   sprintf(cbuf,"SVGAMesaInit: done. (Mode %d)",GraphMode);
+   SVGAlog(cbuf);
+#endif    
+   return 0;
+}   
+
+int SVGAMesaClose( void )
+{  
+ vga_setmode(TEXT); 
+ free(SVGABuffer.FrontBuffer);
+ free(SVGABuffer.BackBuffer);
+ return 0;
 }
 
-
-
-static void read_rgba_span( const GLcontext *ctx, GLuint n, GLint x, GLint y,
-                            GLubyte rgba[][4] )
+void SVGAMesaSetCI(int ndx, GLubyte red, GLubyte green, GLubyte blue)
 {
-   int i;
-   for (i=0; i<n; i++, x++) {
-      /* TODO */
-   }
+ if (ndx<256) vga_setpalette(ndx, red>>2, green>>2, blue>>2);
 }
 
-
-
 /**********************************************************************/
-/*****                  Write arrays of pixels                    *****/
+/*****                 Miscellaneous functions                    *****/
 /**********************************************************************/
 
-
-static void write_ci32_pixels( const GLcontext *ctx,
-                               GLuint n, const GLint x[], const GLint y[],
-                               const GLuint index[], const GLubyte mask[] )
-{
-   int i;
-   for (i=0; i<n; i++) {
-      if (mask[i]) {
-         vga_setcolor( index[i] );
-         vga_drawpixel( x[i], FLIP(y[i]) );
-      }
-   }
-}
-
-
-static void write_mono_ci_pixels( const GLcontext *ctx, GLuint n,
-                                  const GLint x[], const GLint y[],
-                                  const GLubyte mask[] )
-{
-   int i;
-   /* use current color index */
-   vga_setcolor( SVGAMesa->index );
-   for (i=0; i<n; i++) {
-      if (mask[i]) {
-         vga_drawpixel( x[i], FLIP(y[i]) );
-      }
-   }
+static void copy_buffer( GLubyte * buffer) {
+ int size = SVGABuffer.BufferSize, page = 0;
+
+#ifdef SVGA_DEBUG
+   sprintf(cbuf,"copy_buffer: copy %p to %p",buffer,SVGABuffer.VideoRam);
+   SVGAlog(cbuf);
+#endif    
+
+ while(size>0) {
+ vga_setpage(page++);
+  if (size>>16) { 
+   memcpy(SVGABuffer.VideoRam,buffer,0x10000);
+   buffer+=0x10000;
+  }else{    
+   memcpy(SVGABuffer.VideoRam,buffer,size & 0xffff);
+  }
+  size-=0xffff; 
+ }
 }
 
-
-
-static void write_rgba_pixels( const GLcontext *ctx,
-                               GLuint n, const GLint x[], const GLint y[],
-                               const GLubyte rgba[][4], const GLubyte mask[] )
+static void get_buffer_size( GLcontext *ctx, GLuint *width, GLuint *height )
 {
-   int i;
-   for (i=0; i<n; i++) {
-      if (mask[i]) {
-         vga_setrgbcolor( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
-         vga_drawpixel( x[i], FLIP(y[i]) );
-      }
-   }
+   *width = SVGAMesa->width = vga_getxdim();
+   *height = SVGAMesa->height = vga_getydim();
 }
 
-
-
-static void write_mono_rgba_pixels( const GLcontext *ctx,
-                                    GLuint n,
-                                    const GLint x[], const GLint y[],
-                                    const GLubyte mask[] )
+static GLboolean set_buffer( GLcontext *ctx, GLenum buffer )
 {
-   int i;
-   /* use current rgb color */
-   vga_setrgbcolor( SVGAMesa->red, SVGAMesa->green, SVGAMesa->blue );
-   for (i=0; i<n; i++) {
-      if (mask[i]) {
-         vga_drawpixel( x[i], FLIP(y[i]) );
-      }
-   }
+ 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;
+   }    
+   else
+      return GL_FALSE;
 }
 
-
-
-
 /**********************************************************************/
-/*****                   Read arrays of pixels                    *****/
+/*****                                                            *****/
 /**********************************************************************/
 
-/* Read an array of color index pixels. */
-static void read_ci32_pixels( const GLcontext *ctx,
-                              GLuint n, const GLint x[], const GLint y[],
-                              GLuint index[], const GLubyte mask[] )
-{
-   int i;
-   for (i=0; i<n; i++,x++) {
-      index[i] = vga_getpixel( x[i], FLIP(y[i]) );
-   }
-}
-
-
-
-static void read_rgba_pixels( const GLcontext *ctx,
-                              GLuint n, const GLint x[], const GLint y[],
-                              GLubyte rgba[][4], const GLubyte mask[] )
-{
-   /* TODO */
-}
-
-
-
 static void svgamesa_update_state( GLcontext *ctx )
 {
    /* Initialize all the pointers in the DD struct.  Do this whenever */
@@ -364,13 +243,6 @@ static void svgamesa_update_state( GLcontext *ctx )
 
    ctx->Driver.UpdateState = svgamesa_update_state;
 
-   ctx->Driver.ClearIndex = clear_index;
-   ctx->Driver.ClearColor = clear_color;
-   ctx->Driver.Clear = clear;
-
-   ctx->Driver.Index = set_index;
-   ctx->Driver.Color = set_color;
-
    ctx->Driver.SetBuffer = set_buffer;
    ctx->Driver.GetBufferSize = get_buffer_size;
 
@@ -378,59 +250,119 @@ static void svgamesa_update_state( GLcontext *ctx )
    ctx->Driver.LineFunc = NULL;
    ctx->Driver.TriangleFunc = NULL;
 
-   /* Pixel/span writing functions: */
-   /* TODO: use different funcs for 8, 16, 32-bit depths */
-   ctx->Driver.WriteRGBASpan        = write_rgba_span;
-   ctx->Driver.WriteMonoRGBASpan    = write_mono_rgba_span;
-   ctx->Driver.WriteRGBAPixels      = write_rgba_pixels;
-   ctx->Driver.WriteMonoRGBAPixels  = write_mono_rgba_pixels;
-   ctx->Driver.WriteCI32Span        = write_ci32_span;
-   ctx->Driver.WriteCI8Span         = write_ci8_span;
-   ctx->Driver.WriteMonoCISpan      = write_mono_ci_span;
-   ctx->Driver.WriteCI32Pixels      = write_ci32_pixels;
-   ctx->Driver.WriteMonoCIPixels    = write_mono_ci_pixels;
-
-   /* Pixel/span reading functions: */
-   /* TODO: use different funcs for 8, 16, 32-bit depths */
-   ctx->Driver.ReadCI32Span   = read_ci32_span;
-   ctx->Driver.ReadRGBASpan   = read_rgba_span;
-   ctx->Driver.ReadCI32Pixels = read_ci32_pixels;
-   ctx->Driver.ReadRGBAPixels = read_rgba_pixels;
+   switch (SVGABuffer.Depth) {
+    case  8: ctx->Driver.ClearIndex = __clear_index8;
+             ctx->Driver.Clear             = __clear8;
+             ctx->Driver.Index             = __set_index8; 
+
+             ctx->Driver.ReadCI32Span         = __read_ci32_span8;
+             ctx->Driver.ReadCI32Pixels       = __read_ci32_pixels8;
+             ctx->Driver.WriteCI8Span         = __write_ci8_span8;
+             ctx->Driver.WriteCI32Span        = __write_ci32_span8;
+             ctx->Driver.WriteCI32Pixels      = __write_ci32_pixels8;
+             ctx->Driver.WriteMonoCISpan      = __write_mono_ci_span8;
+             ctx->Driver.WriteMonoCIPixels    = __write_mono_ci_pixels8;
+#ifdef SVGA_DEBUG
+    SVGAlog("SVGAUpdateState: 8 bit mode.");
+#endif    
+
+            break;
+    case 15: ctx->Driver.ClearColor = __clear_color15;
+             ctx->Driver.Clear             = __clear15;
+             ctx->Driver.Color             = __set_color15;
+
+             ctx->Driver.ReadRGBASpan         = __read_rgba_span15;
+             ctx->Driver.ReadRGBAPixels       = __read_rgba_pixels15;
+             ctx->Driver.WriteRGBASpan        = __write_rgba_span15;
+             ctx->Driver.WriteRGBAPixels      = __write_rgba_pixels15;
+             ctx->Driver.WriteMonoRGBASpan    = __write_mono_rgba_span15;
+             ctx->Driver.WriteMonoRGBAPixels  = __write_mono_rgba_pixels15;
+#ifdef SVGA_DEBUG
+    SVGAlog("SVGAUpdateState: 15 bit mode.");
+#endif    
+            break;
+    case 16: ctx->Driver.ClearColor = __clear_color16;
+             ctx->Driver.Clear             = __clear16;
+             ctx->Driver.Color             = __set_color16;
+
+             ctx->Driver.ReadRGBASpan         = __read_rgba_span16;
+             ctx->Driver.ReadRGBAPixels       = __read_rgba_pixels16;
+             ctx->Driver.WriteRGBASpan        = __write_rgba_span16;
+             ctx->Driver.WriteRGBAPixels      = __write_rgba_pixels16;
+             ctx->Driver.WriteMonoRGBASpan    = __write_mono_rgba_span16;
+             ctx->Driver.WriteMonoRGBAPixels  = __write_mono_rgba_pixels16;
+            break;
+#ifdef SVGA_DEBUG
+    SVGAlog("SVGAUpdateState: 16 bit mode.");
+#endif    
+    case 24: ctx->Driver.ClearColor = __clear_color24;
+             ctx->Driver.Clear             = __clear24;
+             ctx->Driver.Color             = __set_color24;
+
+             ctx->Driver.ReadRGBASpan         = __read_rgba_span24;
+             ctx->Driver.ReadRGBAPixels       = __read_rgba_pixels24;
+             ctx->Driver.WriteRGBASpan        = __write_rgba_span24;
+             ctx->Driver.WriteRGBAPixels      = __write_rgba_pixels24;
+             ctx->Driver.WriteMonoRGBASpan    = __write_mono_rgba_span24;
+             ctx->Driver.WriteMonoRGBAPixels  = __write_mono_rgba_pixels24;
+            break;
+#ifdef SVGA_DEBUG
+    SVGAlog("SVGAUpdateState: 32 bit mode.");
+#endif    
+    case 32: ctx->Driver.ClearColor = __clear_color32;
+             ctx->Driver.Clear             = __clear32;
+             ctx->Driver.Color             = __set_color32;
+
+             ctx->Driver.ReadRGBASpan         = __read_rgba_span32;
+             ctx->Driver.ReadRGBAPixels       = __read_rgba_pixels32;
+             ctx->Driver.WriteRGBASpan        = __write_rgba_span32;
+             ctx->Driver.WriteRGBAPixels      = __write_rgba_pixels32;
+             ctx->Driver.WriteMonoRGBASpan    = __write_mono_rgba_span32;
+             ctx->Driver.WriteMonoRGBAPixels  = __write_mono_rgba_pixels32;
+   }        
 }
 
-
-
 /*
  * Create a new VGA/Mesa context and return a handle to it.
  */
 SVGAMesaContext SVGAMesaCreateContext( GLboolean doubleBuffer )
 {
    SVGAMesaContext ctx;
+#ifndef DEV
    GLboolean rgb_flag;
    GLfloat redscale, greenscale, bluescale, alphascale;
    GLboolean alpha_flag = GL_FALSE;
-   int colors;
    GLint index_bits;
    GLint redbits, greenbits, bluebits, alphabits;
-
    /* determine if we're in RGB or color index mode */
-   colors = vga_getcolors();
-   if (colors==32768) {
+   if ((SVGABuffer.Depth==32) || (SVGABuffer.Depth==24)) {
       rgb_flag = GL_TRUE;
       redscale = greenscale = bluescale = alphascale = 255.0;
       redbits = greenbits = bluebits = 8;
       alphabits = 0;
       index_bits = 0;
    }
-   else if (colors==256) {
+   else if (SVGABuffer.Depth==8) {
       rgb_flag = GL_FALSE;
       redscale = greenscale = bluescale = alphascale = 0.0;
       redbits = greenbits = bluebits = alphabits = 0;
       index_bits = 8;
    }
-   else {
-      printf(">16 bit color not implemented yet!\n");
-      return NULL;
+   else if (SVGABuffer.Depth==15) {
+      rgb_flag = GL_TRUE;
+      redscale = greenscale = bluescale = alphascale = 31.0;
+      redbits = greenbits = bluebits = 5;
+      alphabits = 0;
+      index_bits = 0;
+   }
+   else if (SVGABuffer.Depth==16) {
+      rgb_flag = GL_TRUE;
+      redscale = bluescale = alphascale = 31.0;
+      greenscale = 63.0;
+      redbits = bluebits = 5;
+      greenbits = 6;
+      alphabits = 0;
+      index_bits = 0;
    }
 
    ctx = (SVGAMesaContext) calloc( 1, sizeof(struct svgamesa_context) );
@@ -459,18 +391,16 @@ SVGAMesaContext SVGAMesaCreateContext( GLboolean doubleBuffer )
    ctx->red = ctx->green = ctx->blue = 255;
 
    ctx->width = ctx->height = 0;  /* temporary until first "make-current" */
-
+#endif
    return ctx;
 }
 
-
-
-
 /*
  * Destroy the given VGA/Mesa context.
  */
 void SVGAMesaDestroyContext( SVGAMesaContext ctx )
 {
+#ifndef DEV
    if (ctx) {
       gl_destroy_visual( ctx->gl_vis );
       gl_destroy_context( ctx->gl_ctx );
@@ -480,15 +410,15 @@ void SVGAMesaDestroyContext( SVGAMesaContext ctx )
          SVGAMesa = NULL;
       }
    }
+#endif
 }
 
-
-
 /*
  * Make the specified VGA/Mesa context the current one.
  */
 void SVGAMesaMakeCurrent( SVGAMesaContext ctx )
 {
+#ifndef DEV
    SVGAMesa = ctx;
    svgamesa_update_state( ctx->gl_ctx );
    gl_make_current( ctx->gl_ctx, ctx->gl_buffer );
@@ -499,10 +429,9 @@ void SVGAMesaMakeCurrent( SVGAMesaContext ctx )
       ctx->height = vga_getydim();
       gl_Viewport( ctx->gl_ctx, 0, 0, ctx->width, ctx->height );
    }
+#endif
 }
 
-
-
 /*
  * Return a handle to the current VGA/Mesa context.
  */
@@ -511,20 +440,38 @@ SVGAMesaContext SVGAMesaGetCurrentContext( void )
    return SVGAMesa;
 }
 
-
 /*
  * Swap front/back buffers for current context if double buffered.
  */
 void SVGAMesaSwapBuffers( void )
 {
+ void * tmpptr;
+/* vga_waitretrace(); */
+ copy_buffer(SVGABuffer.BackBuffer);
+
+#ifndef DEV
    FLUSH_VB( SVGAMesa->gl_ctx, "swap buffers" );
-   if (SVGAMesa->gl_vis->DBflag) {
-      vga_flip();
-   }
+   if (SVGAMesa->gl_vis->DBflag) 
+#endif /* DEV */   
+   {
+#ifdef SVGA_DEBUG
+   sprintf(cbuf,"SVGAMesaSwapBuffers : Swapping...");
+   SVGAlog(cbuf);
+#endif /* SVGA_DEBUG */
+   tmpptr=SVGABuffer.BackBuffer;
+   SVGABuffer.BackBuffer=SVGABuffer.FrontBuffer;
+   SVGABuffer.FrontBuffer=tmpptr;
+#ifdef SVGA_DEBUG
+   sprintf(cbuf,"SVGAMesaSwapBuffers : WriteBuffer : %p\n"
+                "                      Readbuffer  : %p", \
+               SVGABuffer.BackBuffer, SVGABuffer.FrontBuffer );
+   SVGAlog(cbuf);
+#endif /* SVGA_DEBUG */
+   }       
 }
 
-
-#else
+#else /*SVGA*/
 
 /*
  * Need this to provide at least one external definition when SVGA is
diff --git a/src/mesa/drivers/svga/svgamesa15.c b/src/mesa/drivers/svga/svgamesa15.c
new file mode 100644 (file)
index 0000000..f5a4df5
--- /dev/null
@@ -0,0 +1,178 @@
+/* $Id: svgamesa15.c,v 1.2 2000/01/22 20:08:36 brianp Exp $ */
+
+/*
+ * Mesa 3-D graphics library
+ * Version:  3.2
+ * Copyright (C) 1995-2000  Brian Paul
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+/*
+ * SVGA driver for Mesa.
+ * Original author:  Brian Paul
+ * Additional authors:  Slawomir Szczyrba <steev@hot.pl>  (Mesa 3.2)
+ */
+
+
+#include "svgapix.h"
+
+GLshort * shortBuffer;
+
+int __svga_drawpixel15(int x, int y, unsigned long c)
+{
+    unsigned long offset;
+    
+    shortBuffer=(void *)SVGABuffer.BackBuffer;
+    y = SVGAInfo->height-y-1;
+    offset = y * SVGAInfo->width + x;
+    shortBuffer[offset]=c;
+    return 0;
+}
+
+unsigned long __svga_getpixel15(int x, int y)
+{
+    unsigned long offset;
+
+    shortBuffer=(void *)SVGABuffer.BackBuffer;
+    y = SVGAInfo->height-y-1;
+    offset = y * SVGAInfo->width + x;
+    return shortBuffer[offset];
+}
+
+void __set_color15( GLcontext *ctx,
+                    GLubyte red, GLubyte green,
+                    GLubyte blue, GLubyte alpha )
+{
+   SVGAMesa->hicolor=(red>>3)<<10 | (green>>3)<<5 | (blue>>3); 
+/*   SVGAMesa->hicolor=(red)<<10 | (green)<<5 | (blue); */
+}   
+
+void __clear_color15( GLcontext *ctx,
+                      GLubyte red, GLubyte green,
+                      GLubyte blue, GLubyte alpha )
+{
+   SVGAMesa->clear_hicolor=(red>>3)<<10 | (green>>3)<<5 | (blue>>3);  
+/*   SVGAMesa->clear_hicolor=(red)<<10 | (green)<<5 | (blue);*/
+}   
+
+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);
+}
+
+void __write_rgba_span15( const GLcontext *ctx, GLuint n, GLint x, GLint y,
+                          const GLubyte rgba[][4], const GLubyte mask[] )
+{
+   int i;
+   if (mask) {
+      /* draw some pixels */
+      for (i=0; i<n; i++, x++) {
+         if (mask[i]) {
+         __svga_drawpixel15( x, y, (rgba[i][RCOMP]>>3)<<10 | \
+                                  (rgba[i][GCOMP]>>3)<<5 |  \
+                                  (rgba[i][BCOMP]>>3));
+         }
+      }
+   }
+   else {
+      /* draw all pixels */
+      for (i=0; i<n; i++, x++) {
+         __svga_drawpixel15( x, y, (rgba[i][RCOMP]>>3)<<10 | \
+                                  (rgba[i][GCOMP]>>3)<<5  | \
+                                  (rgba[i][BCOMP]>>3));
+      }
+   }
+}
+
+void __write_mono_rgba_span15( const GLcontext *ctx,
+                               GLuint n, GLint x, GLint y,
+                               const GLubyte mask[])
+{
+   int i;
+   for (i=0; i<n; i++, x++) {
+      if (mask[i]) {
+         __svga_drawpixel15( x, y, SVGAMesa->hicolor);
+      }
+   }
+}
+
+void __read_rgba_span15( const GLcontext *ctx, GLuint n, GLint x, GLint y,
+                         GLubyte rgba[][4] )
+{
+   int i,pix;
+   for (i=0; i<n; i++, x++) {
+    pix = __svga_getpixel15( x, y);
+    rgba[i][RCOMP] = ((pix>>10)<<3) & 0xff;
+    rgba[i][GCOMP] = ((pix>> 5)<<3) & 0xff;
+    rgba[i][BCOMP] = ((pix    )<<3) & 0xff;
+   }
+}
+
+void __write_rgba_pixels15( const GLcontext *ctx,
+                            GLuint n, const GLint x[], const GLint y[],
+                            const GLubyte rgba[][4], const GLubyte mask[] )
+{
+   int i;
+   for (i=0; i<n; i++) {
+      if (mask[i]) {
+         __svga_drawpixel15( x[i], y[i], (rgba[i][RCOMP]>>3)<<10 | \
+                                        (rgba[i][GCOMP]>>3)<<5  | \
+                                        (rgba[i][BCOMP]>>3));
+      }
+   }
+}
+
+
+void __write_mono_rgba_pixels15( const GLcontext *ctx,
+                                 GLuint n,
+                                 const GLint x[], const GLint y[],
+                                 const GLubyte mask[] )
+{
+   int i;
+   /* use current rgb color */
+   for (i=0; i<n; i++) {
+      if (mask[i]) {
+         __svga_drawpixel15( x[i], y[i], SVGAMesa->hicolor );
+      }
+   }
+}
+
+void __read_rgba_pixels15( const GLcontext *ctx,
+                           GLuint n, const GLint x[], const GLint y[],
+                           GLubyte rgba[][4], const GLubyte mask[] )
+{
+   int i,pix;
+   for (i=0; i<n; i++,x++) {
+    pix = __svga_getpixel15( x[i], y[i] );
+    rgba[i][RCOMP] = ((pix>>10)<<3) & 0xff;
+    rgba[i][GCOMP] = ((pix>> 5)<<3) & 0xff;
+    rgba[i][BCOMP] = ((pix    )<<3) & 0xff;
+   }
+}
diff --git a/src/mesa/drivers/svga/svgamesa15.h b/src/mesa/drivers/svga/svgamesa15.h
new file mode 100644 (file)
index 0000000..498575c
--- /dev/null
@@ -0,0 +1,44 @@
+/* $Id: svgamesa15.h,v 1.2 2000/01/22 20:08:36 brianp Exp $ */
+
+/*
+ * Mesa 3-D graphics library
+ * Version:  3.2
+ * Copyright (C) 1995-2000  Brian Paul
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+/*
+ * SVGA driver for Mesa.
+ * Original author:  Brian Paul
+ * Additional authors:  Slawomir Szczyrba <steev@hot.pl>  (Mesa 3.2)
+ */
+
+
+#ifndef SVGA_MESA_15_H
+#define SVGA_MESA_15_H
+
+extern void __set_color15( GLcontext *ctx, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha );
+extern void __clear_color15( GLcontext *ctx, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha );
+extern GLbitfield __clear15( GLcontext *ctx, GLbitfield mask, GLboolean all, GLint x, GLint y, GLint width, GLint height );
+extern void __write_rgba_span15( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLubyte rgba[][4], const GLubyte mask[] );
+extern void __write_mono_rgba_span15( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLubyte mask[]);
+extern void __read_rgba_span15( const GLcontext *ctx, GLuint n, GLint x, GLint y, GLubyte rgba[][4] );
+extern void __write_rgba_pixels15( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte rgba[][4], const GLubyte mask[] );
+extern void __write_mono_rgba_pixels15( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte mask[] );
+extern void __read_rgba_pixels15( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], GLubyte rgba[][4], const GLubyte mask[] );
+
+#endif /* SVGA_MESA_15_H */
diff --git a/src/mesa/drivers/svga/svgamesa16.c b/src/mesa/drivers/svga/svgamesa16.c
new file mode 100644 (file)
index 0000000..423483d
--- /dev/null
@@ -0,0 +1,178 @@
+/* $Id: svgamesa16.c,v 1.2 2000/01/22 20:08:36 brianp Exp $ */
+
+/*
+ * Mesa 3-D graphics library
+ * Version:  3.2
+ * Copyright (C) 1995-2000  Brian Paul
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+/*
+ * SVGA driver for Mesa.
+ * Original author:  Brian Paul
+ * Additional authors:  Slawomir Szczyrba <steev@hot.pl>  (Mesa 3.2)
+ */
+
+
+#include "svgapix.h"
+
+GLshort * shortBuffer;
+
+int __svga_drawpixel16(int x, int y, unsigned long c)
+{
+    unsigned long offset;
+
+    shortBuffer=(void *)SVGABuffer.BackBuffer;
+    y = SVGAInfo->height-y-1;
+    offset = y * SVGAInfo->width + x;
+    shortBuffer[offset]=c;
+    return 0;
+}
+
+unsigned long __svga_getpixel16(int x, int y)
+{
+    unsigned long offset;
+
+    shortBuffer=(void *)SVGABuffer.BackBuffer;
+    y = SVGAInfo->height-y-1;
+    offset = y * SVGAInfo->width + x;
+    return shortBuffer[offset];
+}
+
+void __set_color16( GLcontext *ctx,
+                    GLubyte red, GLubyte green,
+                    GLubyte blue, GLubyte alpha )
+{
+    SVGAMesa->hicolor=(red>>3)<<11 | (green>>2)<<5 | (blue>>3); 
+/*    SVGAMesa->hicolor=(red)<<11 | (green)<<5 | (blue); */
+}   
+
+void __clear_color16( GLcontext *ctx,
+                      GLubyte red, GLubyte green,
+                      GLubyte blue, GLubyte alpha )
+{
+    SVGAMesa->clear_hicolor=(red>>3)<<11 | (green>>2)<<5 | (blue>>3); 
+/*    SVGAMesa->clear_hicolor=(red)<<11 | (green)<<5 | (blue); */
+}   
+
+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);
+}
+
+void __write_rgba_span16( const GLcontext *ctx, GLuint n, GLint x, GLint y,
+                          const GLubyte rgba[][4], const GLubyte mask[] )
+{
+   int i;
+   if (mask) {
+      /* draw some pixels */
+      for (i=0; i<n; i++, x++) {
+         if (mask[i]) {
+         __svga_drawpixel16( x, y, (rgba[i][RCOMP]>>3)<<11 | \
+                                  (rgba[i][GCOMP]>>2)<<5  | \
+                                  (rgba[i][BCOMP]>>3));
+         }
+      }
+   }
+   else {
+      /* draw all pixels */
+      for (i=0; i<n; i++, x++) {
+         __svga_drawpixel16( x, y, (rgba[i][RCOMP]>>3)<<11 | \
+                                  (rgba[i][GCOMP]>>2)<<5  | \
+                                  (rgba[i][BCOMP]>>3));
+      }
+   }
+}
+
+void __write_mono_rgba_span16( const GLcontext *ctx,
+                               GLuint n, GLint x, GLint y,
+                               const GLubyte mask[])
+{
+   int i;
+   for (i=0; i<n; i++, x++) {
+      if (mask[i]) {
+         __svga_drawpixel16( x, y, SVGAMesa->hicolor);
+      }
+   }
+}
+
+void __read_rgba_span16( const GLcontext *ctx, GLuint n, GLint x, GLint y,
+                         GLubyte rgba[][4] )
+{
+   int i,pix;
+   for (i=0; i<n; i++, x++) {
+    pix = __svga_getpixel16( x, y );
+    rgba[i][RCOMP] = ((pix>>11)<<3) & 0xff;
+    rgba[i][GCOMP] = ((pix>> 5)<<2) & 0xff;
+    rgba[i][BCOMP] = ((pix    )<<3) & 0xff;
+   }
+}
+
+void __write_rgba_pixels16( const GLcontext *ctx,
+                            GLuint n, const GLint x[], const GLint y[],
+                            const GLubyte rgba[][4], const GLubyte mask[] )
+{
+   int i;
+   for (i=0; i<n; i++) {
+      if (mask[i]) {
+         __svga_drawpixel16( x[i], y[i], (rgba[i][RCOMP]>>3)<<11 | \
+                                        (rgba[i][GCOMP]>>2)<<5  | \
+                                        (rgba[i][BCOMP]>>3));
+      }
+   }
+}
+
+
+void __write_mono_rgba_pixels16( const GLcontext *ctx,
+                                 GLuint n,
+                                 const GLint x[], const GLint y[],
+                                 const GLubyte mask[] )
+{
+   int i;
+   /* use current rgb color */
+   for (i=0; i<n; i++) {
+      if (mask[i]) {
+         __svga_drawpixel16( x[i], y[i], SVGAMesa->hicolor );
+      }
+   }
+}
+
+void __read_rgba_pixels16( const GLcontext *ctx,
+                           GLuint n, const GLint x[], const GLint y[],
+                           GLubyte rgba[][4], const GLubyte mask[] )
+{
+   int i,pix;
+   for (i=0; i<n; i++,x++) {
+    pix = __svga_getpixel16( x[i], y[i] );
+    rgba[i][RCOMP] = ((pix>>11)<<3) & 0xff;
+    rgba[i][GCOMP] = ((pix>> 5)<<2) & 0xff;
+    rgba[i][BCOMP] = ((pix    )<<3) & 0xff;
+   }
+}
diff --git a/src/mesa/drivers/svga/svgamesa16.h b/src/mesa/drivers/svga/svgamesa16.h
new file mode 100644 (file)
index 0000000..114defd
--- /dev/null
@@ -0,0 +1,45 @@
+/* $Id: svgamesa16.h,v 1.2 2000/01/22 20:08:36 brianp Exp $ */
+
+/*
+ * Mesa 3-D graphics library
+ * Version:  3.2
+ * Copyright (C) 1995-2000  Brian Paul
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+/*
+ * SVGA driver for Mesa.
+ * Original author:  Brian Paul
+ * Additional authors:  Slawomir Szczyrba <steev@hot.pl>  (Mesa 3.2)
+ */
+
+
+#ifndef SVGA_MESA_16_H
+#define SVGA_MESA_16_H
+
+extern void __set_color16( GLcontext *ctx, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha );
+extern void __clear_color16( GLcontext *ctx, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha );
+extern GLbitfield __clear16( GLcontext *ctx, GLbitfield mask, GLboolean all, GLint x, GLint y, GLint width, GLint height );
+extern void __write_rgba_span16( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLubyte rgba[][4], const GLubyte mask[] );
+extern void __write_mono_rgba_span16( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLubyte mask[]);
+extern void __read_rgba_span16( const GLcontext *ctx, GLuint n, GLint x, GLint y, GLubyte rgba[][4] );
+extern void __write_rgba_pixels16( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte rgba[][4], const GLubyte mask[] );
+extern void __write_mono_rgba_pixels16( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte mask[] );
+extern void __read_rgba_pixels16( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], GLubyte rgba[][4], const GLubyte mask[] );
+
+#endif /* SVGA_MESA_16_H */
+
diff --git a/src/mesa/drivers/svga/svgamesa24.c b/src/mesa/drivers/svga/svgamesa24.c
new file mode 100644 (file)
index 0000000..6e31c06
--- /dev/null
@@ -0,0 +1,201 @@
+/* $Id: svgamesa24.c,v 1.2 2000/01/22 20:08:36 brianp Exp $ */
+
+/*
+ * Mesa 3-D graphics library
+ * Version:  3.2
+ * Copyright (C) 1995-2000  Brian Paul
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+/*
+ * SVGA driver for Mesa.
+ * Original author:  Brian Paul
+ * Additional authors:  Slawomir Szczyrba <steev@hot.pl>  (Mesa 3.2)
+ */
+
+
+#include "svgapix.h"
+
+_RGB * rgbBuffer;
+
+inline int RGB2BGR24(int c)
+{
+       asm("rorw  $8, %0\n"     
+           "rorl $16, %0\n"     
+           "rorw  $8, %0\n"     
+           "shrl  $8, %0\n"     
+      : "=q"(c):"0"(c));
+    return c;
+}
+
+
+int __svga_drawpixel24(int x, int y, GLubyte r, GLubyte g, GLubyte b)
+{
+    unsigned long offset;
+
+    rgbBuffer=(void *)SVGABuffer.BackBuffer;
+    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)
+{
+    unsigned long offset;
+
+    rgbBuffer=(void *)SVGABuffer.BackBuffer;
+    y = SVGAInfo->height-y-1;
+    offset = y * SVGAInfo->width + x;
+    return rgbBuffer[offset].r<<16 | rgbBuffer[offset].g<<8 | rgbBuffer[offset].b;
+}
+
+void __set_color24( GLcontext *ctx,
+                    GLubyte red, GLubyte green,
+                    GLubyte blue, GLubyte alpha )
+{
+   SVGAMesa->red = red;
+   SVGAMesa->green = green;
+   SVGAMesa->blue = blue;
+/*   SVGAMesa->truecolor = red<<16 | green<<8 | blue; */
+}
+
+void __clear_color24( GLcontext *ctx,
+                      GLubyte red, GLubyte green,
+                      GLubyte blue, GLubyte alpha )
+{
+   SVGAMesa->clear_red = red;
+   SVGAMesa->clear_green = green;
+   SVGAMesa->clear_blue = blue;
+/*   SVGAMesa->clear_truecolor = red<<16 | green<<8 | blue; */
+}
+
+GLbitfield __clear24( 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) {
+     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);
+    }  
+   }
+   return mask & (~GL_COLOR_BUFFER_BIT);
+}
+
+void __write_rgba_span24( const GLcontext *ctx, GLuint n, GLint x, GLint y,
+                          const GLubyte rgba[][4], const GLubyte mask[] )
+{
+   int i;
+   if (mask) {
+      /* draw some pixels */
+      for (i=0; i<n; i++, x++) {
+         if (mask[i]) {
+         __svga_drawpixel24( x, y, rgba[i][RCOMP],
+                                  rgba[i][GCOMP],
+                                  rgba[i][BCOMP]);
+         }
+      }
+   }
+   else {
+      /* draw all pixels */
+      for (i=0; i<n; i++, x++) {
+         __svga_drawpixel24( x, y, rgba[i][RCOMP],
+                                  rgba[i][GCOMP],
+                                  rgba[i][BCOMP]);
+      }
+   }
+}
+
+void __write_mono_rgba_span24( const GLcontext *ctx,
+                               GLuint n, GLint x, GLint y,
+                               const GLubyte mask[])
+{
+   int i;
+   for (i=0; i<n; i++, x++) {
+      if (mask[i]) {
+         __svga_drawpixel24( x, y, SVGAMesa->red,
+                                   SVGAMesa->green,
+                                  SVGAMesa->blue);
+      }
+   }
+}
+
+void __read_rgba_span24( const GLcontext *ctx, GLuint n, GLint x, GLint y,
+                         GLubyte rgba[][4] )
+{
+   int i;
+   for (i=0; i<n; i++, x++) {
+    *((GLint*)rgba[i]) = RGB2BGR24(__svga_getpixel24( x, y));
+   }
+}
+
+void __write_rgba_pixels24( const GLcontext *ctx,
+                            GLuint n, const GLint x[], const GLint y[],
+                            const GLubyte rgba[][4], const GLubyte mask[] )
+{
+   int i;
+   for (i=0; i<n; i++) {
+      if (mask[i]) {
+         __svga_drawpixel24( x[i], y[i], rgba[i][RCOMP],
+                                        rgba[i][GCOMP],
+                                        rgba[i][BCOMP]);
+      }
+   }
+}
+
+void __write_mono_rgba_pixels24( const GLcontext *ctx,
+                                 GLuint n,
+                                 const GLint x[], const GLint y[],
+                                 const GLubyte mask[] )
+{
+   int i;
+   /* use current rgb color */
+   for (i=0; i<n; i++) {
+      if (mask[i]) {
+         __svga_drawpixel24( x[i], y[i], SVGAMesa->red,
+                                         SVGAMesa->green,
+                                        SVGAMesa->blue);
+      }
+   }
+}
+
+void __read_rgba_pixels24( const GLcontext *ctx,
+                           GLuint n, const GLint x[], const GLint y[],
+                           GLubyte rgba[][4], const GLubyte mask[] )
+{
+   int i;
+   for (i=0; i<n; i++,x++) {
+    *((GLint*)rgba[i]) = RGB2BGR24(__svga_getpixel24( x[i], y[i]));    
+   }
+}
diff --git a/src/mesa/drivers/svga/svgamesa24.h b/src/mesa/drivers/svga/svgamesa24.h
new file mode 100644 (file)
index 0000000..9ec4e2d
--- /dev/null
@@ -0,0 +1,45 @@
+/* $Id: svgamesa24.h,v 1.2 2000/01/22 20:08:36 brianp Exp $ */
+
+/*
+ * Mesa 3-D graphics library
+ * Version:  3.2
+ * Copyright (C) 1995-2000  Brian Paul
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+/*
+ * SVGA driver for Mesa.
+ * Original author:  Brian Paul
+ * Additional authors:  Slawomir Szczyrba <steev@hot.pl>  (Mesa 3.2)
+ */
+
+
+#ifndef SVGA_MESA_24_H
+#define SVGA_MESA_24_H
+
+extern void __set_color24( GLcontext *ctx, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha );
+extern void __clear_color24( GLcontext *ctx, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha );
+extern GLbitfield __clear24( GLcontext *ctx, GLbitfield mask, GLboolean all, GLint x, GLint y, GLint width, GLint height );
+extern void __write_rgba_span24( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLubyte rgba[][4], const GLubyte mask[] );
+extern void __write_mono_rgba_span24( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLubyte mask[]);
+extern void __read_rgba_span24( const GLcontext *ctx, GLuint n, GLint x, GLint y, GLubyte rgba[][4] );
+extern void __write_rgba_pixels24( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte rgba[][4], const GLubyte mask[] );
+extern void __write_mono_rgba_pixels24( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte mask[] );
+extern void __read_rgba_pixels24( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], GLubyte rgba[][4], const GLubyte mask[] );
+
+#endif /* SVGA_MESA_24_H */
+
diff --git a/src/mesa/drivers/svga/svgamesa32.c b/src/mesa/drivers/svga/svgamesa32.c
new file mode 100644 (file)
index 0000000..204d582
--- /dev/null
@@ -0,0 +1,176 @@
+/* $Id: svgamesa32.c,v 1.2 2000/01/22 20:08:36 brianp Exp $ */
+
+/*
+ * Mesa 3-D graphics library
+ * Version:  3.2
+ * Copyright (C) 1995-2000  Brian Paul
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+/*
+ * SVGA driver for Mesa.
+ * Original author:  Brian Paul
+ * Additional authors:  Slawomir Szczyrba <steev@hot.pl>  (Mesa 3.2)
+ */
+
+
+#include "svgapix.h"
+
+GLint * intBuffer;
+
+inline int RGB2BGR32(int c)
+{
+       asm("rorw  $8, %0\n"     
+           "rorl $16, %0\n"     
+           "rorw  $8, %0\n"     
+           "shrl  $8, %0\n"     
+      : "=q"(c):"0"(c));
+    return c;
+}
+
+int __svga_drawpixel32(int x, int y, unsigned long c)
+{
+    unsigned long offset;
+
+    intBuffer=(void *)SVGABuffer.BackBuffer;
+    y = SVGAInfo->height-y-1;
+    offset = y * SVGAInfo->width + x;
+    intBuffer[offset]=c;
+    return 0;
+}
+
+unsigned long __svga_getpixel32(int x, int y)
+{
+    unsigned long offset;
+
+    intBuffer=(void *)SVGABuffer.BackBuffer;
+    y = SVGAInfo->height-y-1;
+    offset = y * SVGAInfo->width + x;
+    return intBuffer[offset];
+}
+
+void __set_color32( GLcontext *ctx,
+                    GLubyte red, GLubyte green,
+                    GLubyte blue, GLubyte alpha )
+{
+   SVGAMesa->red = red;
+   SVGAMesa->green = green;
+   SVGAMesa->blue = blue;
+   SVGAMesa->truecolor = red<<16 | green<<8 | blue;
+}
+
+void __clear_color32( GLcontext *ctx,
+                      GLubyte red, GLubyte green,
+                      GLubyte blue, GLubyte alpha )
+{
+   SVGAMesa->clear_truecolor = red<<16 | green<<8 | blue;
+}
+
+GLbitfield __clear32( 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) {
+     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);
+    }  
+   }
+   return mask & (~GL_COLOR_BUFFER_BIT);
+}
+
+void __write_rgba_span32( const GLcontext *ctx, GLuint n, GLint x, GLint y,
+                          const GLubyte rgba[][4], const GLubyte mask[] )
+{
+   int i;
+   if (mask) {
+      /* draw some pixels */
+      for (i=0; i<n; i++, x++) {
+         if (mask[i]) {
+         __svga_drawpixel32( x, y, RGB2BGR32(*((GLint*)rgba[i])));
+         }
+      }
+   }
+   else {
+      /* draw all pixels */
+      for (i=0; i<n; i++, x++) {
+         __svga_drawpixel32( x, y, RGB2BGR32(*((GLint*)rgba[i])));
+      }
+   }
+}
+
+void __write_mono_rgba_span32( const GLcontext *ctx,
+                               GLuint n, GLint x, GLint y,
+                               const GLubyte mask[])
+{
+   int i;
+   for (i=0; i<n; i++, x++) {
+      if (mask[i]) {
+         __svga_drawpixel32( x, y, SVGAMesa->truecolor);
+      }
+   }
+}
+
+void __read_rgba_span32( const GLcontext *ctx, GLuint n, GLint x, GLint y,
+                         GLubyte rgba[][4] )
+{
+   int i;
+   for (i=0; i<n; i++, x++) {
+     *((GLint*)rgba[i]) = RGB2BGR32(__svga_getpixel32( x, y ));
+   }
+}
+
+void __write_rgba_pixels32( const GLcontext *ctx,
+                            GLuint n, const GLint x[], const GLint y[],
+                            const GLubyte rgba[][4], const GLubyte mask[] )
+{
+   int i;
+   for (i=0; i<n; i++) {
+      if (mask[i]) {
+         __svga_drawpixel32( x[i], y[i], RGB2BGR32(*((GLint*)rgba[i])));
+      }
+   }
+}
+
+void __write_mono_rgba_pixels32( const GLcontext *ctx,
+                                 GLuint n,
+                                 const GLint x[], const GLint y[],
+                                 const GLubyte mask[] )
+{
+   int i;
+   /* use current rgb color */
+   for (i=0; i<n; i++) {
+      if (mask[i]) {
+         __svga_drawpixel32( x[i], y[i], SVGAMesa->truecolor );
+      }
+   }
+}
+
+void __read_rgba_pixels32( const GLcontext *ctx,
+                           GLuint n, const GLint x[], const GLint y[],
+                           GLubyte rgba[][4], const GLubyte mask[] )
+{
+   int i;
+   for (i=0; i<n; i++,x++) {
+    *((GLint*)rgba[i]) = RGB2BGR32(__svga_getpixel32( x[i], y[i] ));
+   }
+}
diff --git a/src/mesa/drivers/svga/svgamesa32.h b/src/mesa/drivers/svga/svgamesa32.h
new file mode 100644 (file)
index 0000000..5029ea0
--- /dev/null
@@ -0,0 +1,45 @@
+/* $Id: svgamesa32.h,v 1.2 2000/01/22 20:08:36 brianp Exp $ */
+
+/*
+ * Mesa 3-D graphics library
+ * Version:  3.2
+ * Copyright (C) 1995-2000  Brian Paul
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+/*
+ * SVGA driver for Mesa.
+ * Original author:  Brian Paul
+ * Additional authors:  Slawomir Szczyrba <steev@hot.pl>  (Mesa 3.2)
+ */
+
+
+#ifndef SVGA_MESA_32_H
+#define SVGA_MESA_32_H
+
+extern void __set_color32( GLcontext *ctx, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha );
+extern void __clear_color32( GLcontext *ctx, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha );
+extern GLbitfield __clear32( GLcontext *ctx, GLbitfield mask, GLboolean all, GLint x, GLint y, GLint width, GLint height );
+extern void __write_rgba_span32( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLubyte rgba[][4], const GLubyte mask[] );
+extern void __write_mono_rgba_span32( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLubyte mask[]);
+extern void __read_rgba_span32( const GLcontext *ctx, GLuint n, GLint x, GLint y, GLubyte rgba[][4] );
+extern void __write_rgba_pixels32( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte rgba[][4], const GLubyte mask[] );
+extern void __write_mono_rgba_pixels32( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte mask[] );
+extern void __read_rgba_pixels32( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], GLubyte rgba[][4], const GLubyte mask[] );
+
+#endif /* SVGA_MESA_32_H */
+
diff --git a/src/mesa/drivers/svga/svgamesa8.c b/src/mesa/drivers/svga/svgamesa8.c
new file mode 100644 (file)
index 0000000..ed61373
--- /dev/null
@@ -0,0 +1,159 @@
+/* $Id: svgamesa8.c,v 1.2 2000/01/22 20:08:36 brianp Exp $ */
+
+/*
+ * Mesa 3-D graphics library
+ * Version:  3.2
+ * Copyright (C) 1995-2000  Brian Paul
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+/*
+ * SVGA driver for Mesa.
+ * Original author:  Brian Paul
+ * Additional authors:  Slawomir Szczyrba <steev@hot.pl>  (Mesa 3.2)
+ */
+
+
+#include "svgapix.h"
+
+int __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;
+}
+
+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];
+}
+
+void __set_index8( GLcontext *ctx, GLuint index )
+{
+   SVGAMesa->index = index;
+}
+
+void __clear_index8( GLcontext *ctx, GLuint index )
+{
+   SVGAMesa->clear_index = index;
+}
+
+GLbitfield __clear8( 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) 
+    { 
+     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);
+}
+
+void __write_ci32_span8( const GLcontext *ctx, GLuint n, GLint x, GLint y,
+                         const GLuint index[], const GLubyte mask[] )
+{
+   int i;
+   for (i=0;i<n;i++,x++) {
+      if (mask[i]) {
+         __svga_drawpixel8( x, y, index[i]);
+      }
+   }
+}
+
+void __write_ci8_span8( const GLcontext *ctx, GLuint n, GLint x, GLint y,
+                        const GLubyte index[], const GLubyte mask[] )
+{
+   int i;
+
+   for (i=0;i<n;i++,x++) {
+      if (mask[i]) {
+         __svga_drawpixel8( x, y, index[i]);
+      }
+   }
+}
+
+void __write_mono_ci_span8( const GLcontext *ctx, GLuint n,
+                            GLint x, GLint y, const GLubyte mask[] )
+{
+   int i;
+   for (i=0;i<n;i++,x++) {
+      if (mask[i]) {
+         __svga_drawpixel8( x, y, SVGAMesa->index);
+      }
+   }
+}
+
+void __read_ci32_span8( const GLcontext *ctx,
+                        GLuint n, GLint x, GLint y, GLuint index[])
+{
+   int i;
+   for (i=0; i<n; i++,x++) {
+      index[i] = __svga_getpixel8( x, y);
+   }
+}
+
+void __write_ci32_pixels8( const GLcontext *ctx,
+                           GLuint n, const GLint x[], const GLint y[],
+                           const GLuint index[], const GLubyte mask[] )
+{
+   int i;
+   for (i=0; i<n; i++) {
+      if (mask[i]) {
+         __svga_drawpixel8( x[i], y[i], index[i]);
+      }
+   }
+}
+
+
+void __write_mono_ci_pixels8( const GLcontext *ctx, GLuint n,
+                              const GLint x[], const GLint y[],
+                              const GLubyte mask[] )
+{
+   int i;
+   for (i=0; i<n; i++) {
+      if (mask[i]) {
+         __svga_drawpixel8( x[i], y[i], SVGAMesa->index);
+      }
+   }
+}
+
+void __read_ci32_pixels8( const GLcontext *ctx,
+                          GLuint n, const GLint x[], const GLint y[],
+                          GLuint index[], const GLubyte mask[] )
+{
+   int i;
+   for (i=0; i<n; i++,x++) {
+      index[i] = __svga_getpixel8( x[i], y[i]);
+   }
+}
+
diff --git a/src/mesa/drivers/svga/svgamesa8.h b/src/mesa/drivers/svga/svgamesa8.h
new file mode 100644 (file)
index 0000000..a8a175b
--- /dev/null
@@ -0,0 +1,45 @@
+/* $Id: svgamesa8.h,v 1.2 2000/01/22 20:08:36 brianp Exp $ */
+
+/*
+ * Mesa 3-D graphics library
+ * Version:  3.2
+ * Copyright (C) 1995-2000  Brian Paul
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+/*
+ * SVGA driver for Mesa.
+ * Original author:  Brian Paul
+ * Additional authors:  Slawomir Szczyrba <steev@hot.pl>  (Mesa 3.2)
+ */
+
+
+#ifndef SVGA_MESA_8_H
+#define SVGA_MESA_8_H
+
+extern void __set_index8( GLcontext *ctx, GLuint index );
+extern void __clear_index8( GLcontext *ctx, GLuint index );
+extern GLbitfield __clear8( GLcontext *ctx, GLbitfield mask, GLboolean all, GLint x, GLint y, GLint width, GLint height );
+extern void __write_ci32_span8( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLuint index[], const GLubyte mask[] );
+extern void __write_ci8_span8( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLubyte index[], const GLubyte mask[] );
+extern void __write_mono_ci_span8( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLubyte mask[] );
+extern void __read_ci32_span8( const GLcontext *ctx, GLuint n, GLint x, GLint y, GLuint index[]);
+extern void __write_ci32_pixels8( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], const GLuint index[], const GLubyte mask[] );
+extern void __write_mono_ci_pixels8( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte mask[] );
+extern void __read_ci32_pixels8( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], GLuint index[], const GLubyte mask[] );
+
+#endif /* SVGA_MESA_15_H */
diff --git a/src/mesa/drivers/svga/svgapix.h b/src/mesa/drivers/svga/svgapix.h
new file mode 100644 (file)
index 0000000..151975a
--- /dev/null
@@ -0,0 +1,71 @@
+/* $Id: svgapix.h,v 1.2 2000/01/22 20:08:36 brianp Exp $ */
+
+/*
+ * Mesa 3-D graphics library
+ * Version:  3.2
+ * Copyright (C) 1995-2000  Brian Paul
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+/*
+ * SVGA driver for Mesa.
+ * Original author:  Brian Paul
+ * Additional authors:  Slawomir Szczyrba <steev@hot.pl>  (Mesa 3.2)
+ */
+
+
+#ifndef SVGAPIX_H
+#define SVGAPIX_H
+
+#include "GL/gl.h"
+#include "GL/svgamesa.h"
+#include "context.h"
+#include "vga.h"
+
+struct svgamesa_context {
+   GLcontext *gl_ctx;          /* the core Mesa context */
+   GLvisual *gl_vis;           /* describes the color buffer */
+   GLframebuffer *gl_buffer;   /* the ancillary buffers */
+   GLuint index;               /* current color index */
+   GLuint clear_index;         /* current clear index */
+   GLint red, green, blue;     /* current rgb color */
+   GLuint truecolor;           /* current rgb color */
+   GLint clear_red, 
+         clear_green, 
+        clear_blue;            /* current clear rgb color */
+   GLuint clear_truecolor;     /* current clear rgb color */
+   GLushort hicolor;           /* current hicolor */
+   GLushort clear_hicolor;     /* current clear hicolor */
+   GLint width, height;                /* size of color buffer */
+   GLint depth;                        /* bits per pixel (8,16,24 or 32) */
+};
+
+typedef struct { GLubyte b,g,r; } _RGB;
+
+struct svga_buffer {   
+   GLint     Depth;
+   GLint     BufferSize;
+   GLubyte   * FrontBuffer;
+   GLubyte   * BackBuffer;
+   GLubyte   * VideoRam;
+};
+
+extern struct svga_buffer SVGABuffer;
+extern vga_modeinfo * SVGAInfo;
+extern SVGAMesaContext SVGAMesa;    /* the current context */
+
+#endif /* SVGAPIX_H */