Header file clean-up:
[mesa.git] / src / mesa / drivers / svga / svgamesa.c
index f7175fe63e866216226abedcc30e09b4e2ab265a..9f5e75199fef48d2a4707975efe31428abf713d8 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: svgamesa.c,v 1.4 2000/01/25 00:03:02 brianp Exp $ */
+/* $Id: svgamesa.c,v 1.22 2002/10/24 23:57:23 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
 
 #ifdef SVGA
 
-#ifdef PC_HEADER
-#include "all.h"
-#else
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <vga.h>
 #include "GL/svgamesa.h"
 #include "context.h"
+#include "extensions.h"
+#include "imports.h"
 #include "matrix.h"
-#include "types.h"
-#include <string.h>
-#endif
-
+#include "mtypes.h"
+#include "swrast/swrast.h"
 #include "svgapix.h"
 #include "svgamesa8.h"
 #include "svgamesa15.h"
@@ -72,7 +70,7 @@ void SVGAlog(char * what)
  if (!logfile) return;
  fprintf(logfile,"%s\n",what);
  fclose(logfile);
-} 
+}
 #endif
 
 /**********************************************************************/
@@ -80,23 +78,23 @@ void SVGAlog(char * what)
 /**********************************************************************/
 
 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    
+#endif
     return(1);
    }
-   SVGAInfo=vga_getmodeinfo(GraphMode);           
+   SVGAInfo=vga_getmodeinfo(GraphMode);
    if (SVGAInfo->flags & IS_MODEX)
    {
     fprintf(stderr,"ModeX not implemented...");
 #ifdef SVGA_DEBUG
     SVGAlog("SVGAMesaInit: invalid GraphMode (ModeX)");
-#endif    
+#endif
     return(2);
    }
    if (!SVGAInfo->bytesperpixel)
@@ -104,7 +102,7 @@ int SVGAMesaInit( int GraphMode )
     fprintf(stderr,"1 / 4 bit color not implemented...");
 #ifdef SVGA_DEBUG
     SVGAlog("SVGAMesaInit: invalid GraphMode (1 or 4 bit)");
-#endif    
+#endif
     return(3);
    }
    switch (SVGAInfo->colors) {
@@ -124,21 +122,21 @@ int SVGAMesaInit( int GraphMode )
                 SVGABuffer.Depth,GraphMode,SVGAInfo->linewidth, \
                 SVGAInfo->height,SVGABuffer.BufferSize);
    SVGAlog(cbuf);
-#endif    
+#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    
+#endif
      return(4);
     }
-   }       
+   }
 #ifdef SVGA_DEBUG
    sprintf(cbuf,"SVGAMesaInit: FrontBuffer - %p",SVGABuffer.FrontBuffer);
    SVGAlog(cbuf);
-#endif    
+#endif
    SVGABuffer.BackBuffer=(void*)malloc(SVGABuffer.BufferSize + 4);
    if (!SVGABuffer.BackBuffer) {
     {
@@ -146,14 +144,14 @@ int SVGAMesaInit( int GraphMode )
      fprintf(stderr,"Not enough RAM for BACK_LEFT_BUFFER...");
 #ifdef SVGA_DEBUG
      SVGAlog("SVGAMesaInit: Not enough RAM (back buffer)");
-#endif    
+#endif
      return(5);
     }
-   }       
+   }
 #ifdef SVGA_DEBUG
    sprintf(cbuf,"SVGAMesaInit: BackBuffer - %p",SVGABuffer.BackBuffer);
    SVGAlog(cbuf);
-#endif    
+#endif
 
    vga_setmode(GraphMode);
    SVGABuffer.VideoRam=vga_getgraphmem();
@@ -168,11 +166,11 @@ int SVGAMesaInit( int GraphMode )
    SVGABuffer.ReadBuffer = SVGABuffer.BackBuffer;
 
    return 0;
-}   
+}
 
 int SVGAMesaClose( void )
-{  
-   vga_setmode(TEXT); 
+{
+   vga_setmode(TEXT);
    free(SVGABuffer.FrontBuffer);
    free(SVGABuffer.BackBuffer);
    return 0;
@@ -194,55 +192,29 @@ static void copy_buffer( const GLubyte * buffer) {
 #ifdef SVGA_DEBUG
    sprintf(cbuf,"copy_buffer: copy %p to %p",buffer,SVGABuffer.VideoRam);
    SVGAlog(cbuf);
-#endif    
+#endif
 
  while(size>0) {
  vga_setpage(page++);
-  if (size>>16) { 
+  if (size>>16) {
    memcpy(SVGABuffer.VideoRam,buffer,0x10000);
    buffer+=0x10000;
-  }else{    
+  }else{
    memcpy(SVGABuffer.VideoRam,buffer,size & 0xffff);
   }
-  size-=0xffff; 
+  size-=0xffff;
  }
 }
 
-static void get_buffer_size( GLcontext *ctx, GLuint *width, GLuint *height )
+static void get_buffer_size( GLframebuffer *buffer, GLuint *width, GLuint *height )
 {
    *width = SVGAMesa->width = vga_getxdim();
    *height = SVGAMesa->height = vga_getydim();
 }
 
-static GLboolean set_draw_buffer( GLcontext *ctx, GLenum buffer )
-{
-   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 )
+static void set_buffer( GLcontext *ctx, GLframebuffer *colorBuffer,
+                        GLenum buffer )
 {
    /* We can ignore colorBuffer since we don't support a MakeCurrentRead()
     * function.
@@ -251,6 +223,7 @@ static void set_read_buffer( GLcontext *ctx, GLframebuffer *colorBuffer,
 
    if (buffer == GL_FRONT_LEFT) {
       SVGABuffer.ReadBuffer = SVGABuffer.FrontBuffer;
+      SVGABuffer.DrawBuffer = SVGABuffer.FrontBuffer;
 #if 0
       void * tmpptr;
       /*    vga_waitretrace(); */
@@ -262,6 +235,7 @@ static void set_read_buffer( GLcontext *ctx, GLframebuffer *colorBuffer,
    }
    else if (buffer == GL_BACK_LEFT) {
       SVGABuffer.ReadBuffer = SVGABuffer.BackBuffer;
+      SVGABuffer.DrawBuffer = SVGABuffer.BackBuffer;
 #if 0
       /*    vga_waitretrace(); */
       copy_buffer(SVGABuffer.BackBuffer);
@@ -273,91 +247,96 @@ static void set_read_buffer( GLcontext *ctx, GLframebuffer *colorBuffer,
 /*****                                                            *****/
 /**********************************************************************/
 
-static void svgamesa_update_state( GLcontext *ctx )
+static void svgamesa_update_state( GLcontext *ctx, GLuint new_state )
 {
+   struct swrast_device_driver *swdd = _swrast_GetDeviceDriverReference( ctx );
+
    /* Initialize all the pointers in the DD struct.  Do this whenever */
    /* a new context is made current or we change buffers via set_buffer! */
 
    ctx->Driver.UpdateState = svgamesa_update_state;
 
    ctx->Driver.GetBufferSize = get_buffer_size;
-   ctx->Driver.SetDrawBuffer = set_draw_buffer;
-   ctx->Driver.SetReadBuffer = set_read_buffer;
+   ctx->Driver.ResizeBuffers = _swrast_alloc_buffers;
 
-   ctx->Driver.PointsFunc = NULL;
-   ctx->Driver.LineFunc = NULL;
-   ctx->Driver.TriangleFunc = NULL;
+   /* Software rasterizer pixel paths:
+    */
+   ctx->Driver.Accum = _swrast_Accum;
+   ctx->Driver.Bitmap = _swrast_Bitmap;
+   ctx->Driver.CopyPixels = _swrast_CopyPixels;
+   ctx->Driver.DrawPixels = _swrast_DrawPixels;
+   ctx->Driver.ReadPixels = _swrast_ReadPixels;
+   ctx->Driver.DrawBuffer = _swrast_DrawBuffer;
+
+   /* Fill in the swrast driver interface:
+    */
+   swdd->SetBuffer = set_buffer;
 
    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;
+
+             swdd->ReadCI32Span         = __read_ci32_span8;
+             swdd->ReadCI32Pixels       = __read_ci32_pixels8;
+             swdd->WriteCI8Span         = __write_ci8_span8;
+             swdd->WriteCI32Span        = __write_ci32_span8;
+             swdd->WriteCI32Pixels      = __write_ci32_pixels8;
+             swdd->WriteMonoCISpan      = __write_mono_ci_span8;
+             swdd->WriteMonoCIPixels    = __write_mono_ci_pixels8;
 #ifdef SVGA_DEBUG
     SVGAlog("SVGAUpdateState: 8 bit mode.");
-#endif    
+#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;
+
+             swdd->ReadRGBASpan         = __read_rgba_span15;
+             swdd->ReadRGBAPixels       = __read_rgba_pixels15;
+             swdd->WriteRGBASpan        = __write_rgba_span15;
+             swdd->WriteRGBAPixels      = __write_rgba_pixels15;
+             swdd->WriteMonoRGBASpan    = __write_mono_rgba_span15;
+             swdd->WriteMonoRGBAPixels  = __write_mono_rgba_pixels15;
 #ifdef SVGA_DEBUG
     SVGAlog("SVGAUpdateState: 15 bit mode.");
-#endif    
+#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;
+
+             swdd->ReadRGBASpan         = __read_rgba_span16;
+             swdd->ReadRGBAPixels       = __read_rgba_pixels16;
+             swdd->WriteRGBASpan        = __write_rgba_span16;
+             swdd->WriteRGBAPixels      = __write_rgba_pixels16;
+             swdd->WriteMonoRGBASpan    = __write_mono_rgba_span16;
+             swdd->WriteMonoRGBAPixels  = __write_mono_rgba_pixels16;
             break;
 #ifdef SVGA_DEBUG
     SVGAlog("SVGAUpdateState: 16 bit mode.");
-#endif    
+#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;
+
+             swdd->ReadRGBASpan         = __read_rgba_span24;
+             swdd->ReadRGBAPixels       = __read_rgba_pixels24;
+             swdd->WriteRGBASpan        = __write_rgba_span24;
+             swdd->WriteRGBAPixels      = __write_rgba_pixels24;
+             swdd->WriteMonoRGBASpan    = __write_mono_rgba_span24;
+             swdd->WriteMonoRGBAPixels  = __write_mono_rgba_pixels24;
             break;
 #ifdef SVGA_DEBUG
     SVGAlog("SVGAUpdateState: 32 bit mode.");
-#endif    
+#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;
-   }        
+
+             swdd->ReadRGBASpan         = __read_rgba_span32;
+             swdd->ReadRGBAPixels       = __read_rgba_pixels32;
+             swdd->WriteRGBASpan        = __write_rgba_span32;
+             swdd->WriteRGBAPixels      = __write_rgba_pixels32;
+             swdd->WriteMonoRGBASpan    = __write_mono_rgba_span32;
+             swdd->WriteMonoRGBAPixels  = __write_mono_rgba_pixels32;
+   }   
 }
 
 /*
@@ -369,9 +348,9 @@ SVGAMesaContext SVGAMesaCreateContext( GLboolean doubleBuffer )
 #ifndef DEV
    GLboolean rgb_flag;
    GLfloat redscale, greenscale, bluescale, alphascale;
-   GLboolean alpha_flag = GL_FALSE;
    GLint index_bits;
    GLint redbits, greenbits, bluebits, alphabits;
+
    /* determine if we're in RGB or color index mode */
    if ((SVGABuffer.Depth==32) || (SVGABuffer.Depth==24)) {
       rgb_flag = GL_TRUE;
@@ -408,29 +387,30 @@ SVGAMesaContext SVGAMesaCreateContext( GLboolean doubleBuffer )
       return NULL;
    }
 
-   ctx->gl_vis = gl_create_visual( rgb_flag,
-                                   alpha_flag,
-                                   doubleBuffer,
-                                   GL_FALSE,  /* stereo */
-                                   16,   /* depth_size */
-                                   8,    /* stencil_size */
-                                   16,   /* accum_size */
-                                   index_bits,
-                                   redbits, greenbits,
-                                   bluebits, alphabits );
-
-   ctx->gl_ctx = gl_create_context( ctx->gl_vis,
-                                    NULL,  /* share list context */
-                                    (void *) ctx, GL_TRUE );
-
-   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;
+   ctx->gl_vis = _mesa_create_visual( rgb_flag,
+                                      doubleBuffer,
+                                      GL_FALSE,  /* stereo */
+                                      redbits, greenbits,
+                                      bluebits, alphabits,
+                                      index_bits,
+                                      16,   /* depth_size */
+                                      8,    /* stencil_size */
+                                      16, 16, 16, 16,   /* accum_size */
+                                      1     /* samples */
+                                      );
+
+   ctx->gl_ctx = _mesa_create_context( ctx->gl_vis,
+                                       NULL,  /* share list context */
+                                       (void *) ctx, GL_FALSE );
+
+   _mesa_enable_sw_extensions(ctx->gl_ctx);
+   _mesa_enable_1_3_extensions(ctx->gl_ctx);
+
+   ctx->gl_buffer = _mesa_create_framebuffer( ctx->gl_vis,
+                                              ctx->gl_vis->depthBits > 0,
+                                              ctx->gl_vis->stencilBits > 0,
+                                              ctx->gl_vis->accumRedBits > 0,
+                                              ctx->gl_vis->alphaBits > 0 );
 
    ctx->width = ctx->height = 0;  /* temporary until first "make-current" */
 #endif
@@ -444,9 +424,9 @@ void SVGAMesaDestroyContext( SVGAMesaContext ctx )
 {
 #ifndef DEV
    if (ctx) {
-      gl_destroy_visual( ctx->gl_vis );
-      gl_destroy_context( ctx->gl_ctx );
-      gl_destroy_framebuffer( ctx->gl_buffer );
+      _mesa_destroy_visual( ctx->gl_vis );
+      _mesa_destroy_context( ctx->gl_ctx );
+      _mesa_destroy_framebuffer( ctx->gl_buffer );
       free( ctx );
       if (ctx==SVGAMesa) {
          SVGAMesa = NULL;
@@ -462,14 +442,14 @@ void SVGAMesaMakeCurrent( SVGAMesaContext ctx )
 {
 #ifndef DEV
    SVGAMesa = ctx;
-   svgamesa_update_state( ctx->gl_ctx );
-   gl_make_current( ctx->gl_ctx, ctx->gl_buffer );
+   svgamesa_update_state( ctx->gl_ctx, ~0 );
+   _mesa_make_current( ctx->gl_ctx, ctx->gl_buffer );
 
    if (ctx->width==0 || ctx->height==0) {
       /* setup initial viewport */
       ctx->width = vga_getxdim();
       ctx->height = vga_getydim();
-      gl_Viewport( ctx->gl_ctx, 0, 0, ctx->width, ctx->height );
+      _mesa_set_viewport( ctx->gl_ctx, 0, 0, ctx->width, ctx->height );
    }
 #endif
 }
@@ -495,9 +475,9 @@ void SVGAMesaSwapBuffers( void )
    copy_buffer(SVGABuffer.BackBuffer);
 
 #ifndef DEV
-   FLUSH_VB( SVGAMesa->gl_ctx, "swap buffers" );
-   if (SVGAMesa->gl_vis->DBflag) 
-#endif /* DEV */   
+   _mesa_notifySwapBuffers( SVGAMesa->gl_ctx );
+   if (SVGAMesa->gl_vis->doubleBufferMode)
+#endif /* DEV */
    {
 #ifdef SVGA_DEBUG
       sprintf(cbuf,"SVGAMesaSwapBuffers : Swapping...");