Updates for DOS driver from Daniel Borca.
authorBrian Paul <brian.paul@tungstengraphics.com>
Tue, 5 Nov 2002 20:52:07 +0000 (20:52 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Tue, 5 Nov 2002 20:52:07 +0000 (20:52 +0000)
docs/README.DJ
include/GL/dmesa.h
src/glut/dos/PC_HW/pc_hw.c
src/glut/dos/PC_HW/pc_hw.h
src/glut/dos/PC_HW/pc_mouse.c
src/glut/dos/window.c
src/mesa/drivers/dos/dmesa.c
src/mesa/drivers/dos/vesa/vesa.c
src/mesa/main/Makefile.DJ

index d13779eeaa86879a926fb4c65ba2f592662c6c23..41633b673e9e9b764d9750c98f8e960fc4d7755e 100644 (file)
@@ -1,4 +1,4 @@
-                       Mesa 4.0 DOS/DJGPP Port v1.1\r
+                       Mesa 4.1 DOS/DJGPP Port v1.2\r
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r
 \r
 \r
@@ -6,7 +6,7 @@
 Description:\r
 ~~~~~~~~~~~~\r
 \r
-Well, guess what... this is the DOS port of Mesa 4.0.4, for DJGPP fans... Whoa!\r
+Well, guess what... this is the DOS port of Mesa 4.1, for DJGPP fans... Whoa!\r
 The driver has its origins in ddsample.c, written by Brian Paul and found by me\r
 in Mesa 3.4.2.\r
 \r
@@ -66,7 +66,7 @@ Tested on:
        CPU:            K6-2 (CXT) @500(412.5) MHz\r
        Mainboard:      ViA Apollo VP2/97 w/ 128 MB SDRAM\r
        Video card:     PowerColor Evil King3 (Voodoo3 3000) w/ 16384 kB SDRAM\r
-       DJGPP:          djdev 2.03 + gcc v3.1 + make v3.79.1\r
+       DJGPP:          djdev 2.04 + gcc v3.2 + make v3.79.1\r
 \r
 \r
 \r
@@ -86,33 +86,27 @@ FAQ:
    A) You must have the DXE2 package (available on SimTel.Net, courtesy of\r
       Andrew Zabolotny) installed in order to build the dynamic modules.\r
 \r
-   Q) I have DXE2, but I couln'd build the `dxe2gen.exe'.\r
+   Q) I have DXE2, but I couldn't build the `dxe2gen.exe'.\r
    Q) I built `dxe2gen.exe', but it doesn't do the job right.\r
    A) There is a patched version on my web page.\r
 \r
    Q) DXE2 modules give me headaches...\r
    A) The DXE2 modules are not compulsory. The static libraries are still built\r
-      and you can use them in the old-fashioned, classic way. For example:\r
+      and you can use them in the old-fashioned, classic way... and learn to\r
+      live with your ~2MB executable size. For example:\r
        gcc -o OUT.exe IN.c -lglut -lglu -lgl\r
 \r
    Q) Okay, DXE2 modules are built. How can I use them?\r
-   A) Usage of the dynamic modules requires three things:\r
-       - include DMESADXE.H in one of the sources, so references inside\r
-         dynamic modules will get resolved (or use `-include' directive).\r
-       - link against import libraries (libI*.a) and LIBDL.A, which will do\r
-         the dynamic linkage job for you\r
-       - put the DXEs somewhere along the library path (LD_LIBRARY_PATH) or\r
-         in the current directory\r
+   A) Build your export object file; then link it with your application.\r
       For example:\r
-       gcc -o OUT.exe -include dmesadxe.h IN.c -ligl -liglu -liglut -ldl\r
+       dxe2res -o dmesadxe.c gl.dxe glu.dxe glut.dxe\r
+       gcc -o dmesadxe.o dmesadxe.c\r
+       gcc -o OUT.exe dmesadxe.o IN.c -liglut -liglu -ligl -ldl\r
 \r
-   Q) The application dies with "Abort!" due to unresolved symbols.\r
-   A) This is bad! Extract the unresolved symbol list from this module. For\r
-      example:\r
-       dxe2gen --show-unres gl.dxe > u\r
-      Check DMESADXE.H; the symbols in `u' must either be present here or be\r
-      exported from another module that has to be loaded before your faulting\r
-      one. Then recompile.\r
+   Q) What is that `dxe2res.exe' thing?\r
+   A) That is an utility that generates the export file for a given set of\r
+      modules. If you can't find it in the DXE2 package, you must be looking at\r
+      the wrong archive :)\r
 \r
 3. Using Mesa for DJGPP\r
 \r
@@ -138,7 +132,7 @@ FAQ:
       GLUT took this into account for _WIN32 DLL's only; I don't want to modify\r
       his headers. The only workaround is to link GLUT the old way :-(\r
 \r
-   Q) The DJGPP port of Mesa is so SLOOOW! The Win32 OpenGL performs so much\r
+   Q) DMesa is so SLOOOW! The Win32 OpenGL performs so much\r
       better...\r
    A) Is that a question? If you have a Voodoo3/Banshee card, you're lucky. The\r
       Glide port is on my web page. If you haven't, sorry; everything is done\r
@@ -196,11 +190,15 @@ History:
 ~~~~~~~~\r
 \r
 v1.0   mar-2002        initial release\r
+\r
 v1.1   sep-2002        + added 3dfx Glide3 support\r
                        + added refresh rate control\r
                        + added fonts in glut\r
                        * lots of minor changes\r
 \r
+v1.2   nov-2002        * synced w/ Mesa-4.1\r
+                       - removed dmesadxe.h\r
+\r
 \r
 \r
 Contact:\r
index ab91bac67d53e0786be75eb3c396b08cc1065ba6..d624bb6c8288fe4a15404bec17430d9ecbb8aed6 100644 (file)
@@ -1,8 +1,8 @@
 /*\r
  * Mesa 3-D graphics library\r
- * Version:  4.0\r
+ * Version:  5.0\r
  * \r
- * Copyright (C) 1999  Brian Paul   All Rights Reserved.\r
+ * Copyright (C) 1999-2002  Brian Paul   All Rights Reserved.\r
  * \r
  * Permission is hereby granted, free of charge, to any person obtaining a\r
  * copy of this software and associated documentation files (the "Software"),\r
@@ -23,7 +23,7 @@
  */\r
 \r
 /*\r
- * DOS/DJGPP device driver v1.0 for Mesa 4.0\r
+ * DOS/DJGPP device driver v1.2 for Mesa 4.1\r
  *\r
  *  Copyright (C) 2002 - Borca Daniel\r
  *  Email : dborca@yahoo.com\r
  */\r
 \r
 \r
-#ifndef DMESA_included\r
-#define DMESA_included\r
+#ifndef DMESA_H_included\r
+#define DMESA_H_included\r
 \r
-#define DMESA_MAJOR_VERSION 4\r
+#define DMESA_MAJOR_VERSION 5\r
 #define DMESA_MINOR_VERSION 0\r
 \r
 typedef struct dmesa_context *DMesaContext;\r
@@ -45,8 +45,10 @@ typedef struct dmesa_buffer *DMesaBuffer;
 extern "C" {\r
 #endif\r
 \r
-DMesaVisual DMesaCreateVisual (GLint width, GLint height, GLint colDepth,\r
-                               GLboolean dbFlag, GLint depthSize,\r
+DMesaVisual DMesaCreateVisual (GLint width, GLint height,\r
+                               GLint colDepth,\r
+                               GLboolean dbFlag,\r
+                               GLint depthSize,\r
                                GLint stencilSize,\r
                                GLint accumSize);\r
 \r
index 09ab46140498571d4d382c540c994edafd4c3cee..9b30c5808c1c367e8ffc263266eb78a09dfa1633 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * PC/HW routine collection v1.0 for DOS/DJGPP\r
+ * PC/HW routine collection v1.2 for DOS/DJGPP\r
  *\r
  *  Copyright (C) 2002 - Borca Daniel\r
  *  Email : dborca@yahoo.com\r
@@ -12,7 +12,6 @@
 #include <sys/stat.h> /* for mode definitions */\r
 #include <stdio.h>\r
 #include <stdlib.h>\r
-#include <string.h>\r
 #include <unistd.h>\r
 \r
 #include "pc_hw.h"\r
@@ -74,68 +73,76 @@ void *pc_malloc (size_t size)
 /*\r
  * standard redirection\r
  */\r
-static char errname[L_tmpnam];\r
-static char outname[L_tmpnam];\r
+static int h_out, h_outbak, h_err, h_errbak;\r
 \r
-static int h_out, h_outbak;\r
-static int h_err, h_errbak;\r
-\r
-void pc_open_stderr (void)\r
+int pc_open_stdout (void)\r
 {\r
- if (tmpnam(errname)) {\r
-    h_err = open(errname, O_WRONLY |/* O_BINARY |*/ O_CREAT | O_TRUNC,\r
-                          S_IREAD | S_IWRITE);\r
-    h_errbak = dup(2);\r
-    fflush(stderr);\r
-    dup2(h_err, 2);\r
+ if ((h_out=open(tmpnam(NULL), O_WRONLY | O_CREAT | O_TRUNC | O_TEXT | O_TEMPORARY, S_IRUSR | S_IWUSR)) >= 0) {\r
+    if ((h_outbak=dup(1)) != -1) {\r
+       fflush(stdout);\r
+       if (dup2(h_out, 1) != -1) {\r
+          return 0;\r
+       }\r
+       close(h_outbak);\r
+    }\r
+    close(h_out);\r
  }\r
+ return (h_out = -1);\r
 }\r
 \r
-void pc_close_stderr (void)\r
+void pc_close_stdout (void)\r
 {\r
  FILE *f;\r
  char *line = alloca(512);\r
\r
- dup2(h_errbak, 2);\r
- close(h_err);\r
- close(h_errbak);\r
\r
- if ((f=fopen(errname, "r"))!=NULL) {\r
-    while (fgets(line, 512, f)) {\r
-          fputs(line, stderr);\r
+\r
+ if (h_out >= 0) {\r
+    dup2(h_outbak, 1);\r
+    close(h_outbak);\r
+\r
+    if ((f=fdopen(h_out, "r")) != NULL) {\r
+       fseek(f, 0, SEEK_SET);\r
+       while (fgets(line, 512, f)) {\r
+             fputs(line, stdout);\r
+       }\r
+       fclose(f);\r
+    } else {\r
+       close(h_out);\r
     }\r
-    fclose(f);\r
  }\r
-\r
- remove(errname);\r
 }\r
 \r
-void pc_open_stdout (void)\r
+int pc_open_stderr (void)\r
 {\r
- if (tmpnam(outname)) {\r
-    h_out = open(outname, O_WRONLY |/* O_BINARY |*/ O_CREAT | O_TRUNC,\r
-                          S_IREAD | S_IWRITE);\r
-    h_outbak = dup(1);\r
-    fflush(stdout);\r
-    dup2(h_out, 1);\r
+ if ((h_err=open(tmpnam(NULL), O_WRONLY | O_CREAT | O_TRUNC | O_TEXT | O_TEMPORARY, S_IRUSR | S_IWUSR)) >= 0) {\r
+    if ((h_errbak=dup(2)) != -1) {\r
+       fflush(stderr);\r
+       if (dup2(h_err, 2) != -1) {\r
+          return 0;\r
+       }\r
+       close(h_errbak);\r
+    }\r
+    close(h_err);\r
  }\r
+ return (h_err = -1);\r
 }\r
 \r
-void pc_close_stdout (void)\r
+void pc_close_stderr (void)\r
 {\r
  FILE *f;\r
  char *line = alloca(512);\r
\r
- dup2(h_outbak, 1);\r
- close(h_out);\r
- close(h_outbak);\r
\r
- if ((f=fopen(outname, "r"))!=NULL) {\r
-    while (fgets(line, 512, f)) {\r
-          fputs(line, stdout);\r
+\r
+ if (h_err >= 0) {\r
+    dup2(h_errbak, 2);\r
+    close(h_errbak);\r
+\r
+    if ((f=fdopen(h_err, "r")) != NULL) {\r
+       fseek(f, 0, SEEK_SET);\r
+       while (fgets(line, 512, f)) {\r
+             fputs(line, stderr);\r
+       }\r
+       fclose(f);\r
+    } else {\r
+       close(h_err);\r
     }\r
-    fclose(f);\r
  }\r
-\r
- remove(outname);\r
 }\r
index fd0e777953d902b38d73a26141f218e43c5ec411..77572e6441446b47f07d6f9670e359d27171f5eb 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * PC/HW routine collection v1.1 for DOS/DJGPP\r
+ * PC/HW routine collection v1.2 for DOS/DJGPP\r
  *\r
  *  Copyright (C) 2002 - Borca Daniel\r
  *  Email : dborca@yahoo.com\r
@@ -217,8 +217,8 @@ void pc_unscare_mouse (void);
 /*\r
  * standard redirection\r
  */\r
-void pc_open_stdout (void);\r
-void pc_open_stderr (void);\r
+int pc_open_stdout (void);\r
+int pc_open_stderr (void);\r
 void pc_close_stdout (void);\r
 void pc_close_stderr (void);\r
 \r
index 5a04cf21913a66eae8397376f8b54ccfda224f6a..01e9502dd0ca1950aa0fc024fc6333683f56dbb1 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * PC/HW routine collection v1.1 for DOS/DJGPP\r
+ * PC/HW routine collection v1.2 for DOS/DJGPP\r
  *\r
  *  Copyright (C) 2002 - Borca Daniel\r
  *  Email : dborca@yahoo.com\r
@@ -226,6 +226,7 @@ void pc_unscare_mouse (void)
 }\r
 \r
 __asm("\n\\r
+               .text                                   \n\\r
                .balign 4                               \n\\r
                .global _mouse_wrapper                  \n\\r
 _mouse_wrapper:                                                \n\\r
@@ -252,7 +253,6 @@ _mouse_wrapper:                                             \n\
                movl    %esi, %esp                      \n\\r
                popl    %es                             \n\\r
                iret                                    \n\\r
-                                                       \n\\r
                .balign 4                               \n\\r
                .global _mouse_wrapper_end              \n\\r
 _mouse_wrapper_end:");\r
index 384e10a03b813dc556cbb88aae80473b2e0f1109..ba0f5acee5c4327411fa8f80d084626698365f4d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
  * Mesa 3-D graphics library\r
- * Version:  4.0\r
+ * Version:  4.1\r
  * Copyright (C) 1995-1998  Brian Paul\r
  *\r
  * This library is free software; you can redistribute it and/or\r
@@ -19,7 +19,7 @@
  */\r
 \r
 /*\r
- * DOS/DJGPP glut driver v1.1 for Mesa 4.0\r
+ * DOS/DJGPP glut driver v1.2 for Mesa 4.1\r
  *\r
  *  Copyright (C) 2002 - Borca Daniel\r
  *  Email : dborca@yahoo.com\r
@@ -113,6 +113,7 @@ int APIENTRY glutCreateWindow (const char *title)
     if ((context=fxMesaCreateBestContext(-1, screen_w, screen_h, fx_attrib))==NULL) {\r
        return 0;\r
     }\r
+    visual = context;\r
 #endif\r
     \r
     pc_open_stdout();\r
index 474d1336e3df22aaeaf66422033c93bd78e33d20..77c9a3a1b8584e950eb94a29a707eeb66e83b45d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
  * Mesa 3-D graphics library\r
- * Version:  4.0\r
+ * Version:  4.1\r
  * \r
  * Copyright (C) 1999  Brian Paul   All Rights Reserved.\r
  * \r
@@ -23,7 +23,7 @@
  */\r
 \r
 /*\r
- * DOS/DJGPP device driver v1.1 for Mesa 4.0\r
+ * DOS/DJGPP device driver v1.2 for Mesa 4.1\r
  *\r
  *  Copyright (C) 2002 - Borca Daniel\r
  *  Email : dborca@yahoo.com\r
@@ -94,25 +94,16 @@ struct dmesa_context {
 \r
 \r
 \r
-static void dmesa_update_state (GLcontext *ctx, GLuint new_state);\r
-\r
-\r
-\r
-/**********************************************************************/\r
-/*****            Read/Write pixels                               *****/\r
-/**********************************************************************/\r
-\r
-\r
-\r
+/****************************************************************************\r
+ * Read/Write pixels\r
+ ***************************************************************************/\r
 #define FLIP(y)  (c->Buffer->height - (y) - 1)\r
 #define FLIP2(y) (h - (y) - 1)\r
 \r
-\r
-\r
 static void write_rgba_span (const GLcontext *ctx, GLuint n, GLint x, GLint y,\r
                              const GLubyte rgba[][4], const GLubyte mask[])\r
 {\r
- DMesaContext c = (DMesaContext)ctx->DriverCtx;\r
const DMesaContext c = (DMesaContext)ctx->DriverCtx;\r
  void *b = c->Buffer->the_window;\r
  GLuint i, offset;\r
 \r
@@ -132,10 +123,12 @@ static void write_rgba_span (const GLcontext *ctx, GLuint n, GLint x, GLint y,
  }\r
 }\r
 \r
+\r
+\r
 static void write_rgb_span (const GLcontext *ctx, GLuint n, GLint x, GLint y,\r
                             const GLubyte rgb[][3], const GLubyte mask[])\r
 {\r
- DMesaContext c = (DMesaContext)ctx->DriverCtx;\r
const DMesaContext c = (DMesaContext)ctx->DriverCtx;\r
  void *b = c->Buffer->the_window;\r
  GLuint i, offset;\r
 \r
@@ -155,11 +148,13 @@ static void write_rgb_span (const GLcontext *ctx, GLuint n, GLint x, GLint y,
  }\r
 }\r
 \r
+\r
+\r
 static void write_mono_rgba_span (const GLcontext *ctx,\r
                                   GLuint n, GLint x, GLint y,\r
                                   const GLchan color[4], const GLubyte mask[])\r
 {\r
- DMesaContext c = (DMesaContext)ctx->DriverCtx;\r
const DMesaContext c = (DMesaContext)ctx->DriverCtx;\r
  void *b = c->Buffer->the_window;\r
  GLuint i, offset, rgba = vl_mixrgba(color);\r
 \r
@@ -179,10 +174,12 @@ static void write_mono_rgba_span (const GLcontext *ctx,
  }\r
 }\r
 \r
+\r
+\r
 static void read_rgba_span (const GLcontext *ctx, GLuint n, GLint x, GLint y,\r
                             GLubyte rgba[][4])\r
 {\r
- DMesaContext c = (DMesaContext)ctx->DriverCtx;\r
const DMesaContext c = (DMesaContext)ctx->DriverCtx;\r
  void *b = c->Buffer->the_window;\r
  GLuint i, offset;\r
 \r
@@ -193,11 +190,13 @@ static void read_rgba_span (const GLcontext *ctx, GLuint n, GLint x, GLint y,
  }\r
 }\r
 \r
+\r
+\r
 static void write_rgba_pixels (const GLcontext *ctx,\r
                                GLuint n, const GLint x[], const GLint y[],\r
                                const GLubyte rgba[][4], const GLubyte mask[])\r
 {\r
- DMesaContext c = (DMesaContext)ctx->DriverCtx;\r
const DMesaContext c = (DMesaContext)ctx->DriverCtx;\r
  void *b = c->Buffer->the_window;\r
  GLuint i, w = c->Buffer->width, h = c->Buffer->height;\r
 \r
@@ -216,11 +215,13 @@ static void write_rgba_pixels (const GLcontext *ctx,
  }\r
 }\r
 \r
+\r
+\r
 static void write_mono_rgba_pixels (const GLcontext *ctx,\r
                                     GLuint n, const GLint x[], const GLint y[],\r
                                     const GLchan color[4], const GLubyte mask[])\r
 {\r
- DMesaContext c = (DMesaContext)ctx->DriverCtx;\r
const DMesaContext c = (DMesaContext)ctx->DriverCtx;\r
  void *b = c->Buffer->the_window;\r
  GLuint i, w = c->Buffer->width, h = c->Buffer->height, rgba = vl_mixrgba(color);\r
 \r
@@ -239,11 +240,13 @@ static void write_mono_rgba_pixels (const GLcontext *ctx,
  }\r
 }\r
 \r
+\r
+\r
 static void read_rgba_pixels (const GLcontext *ctx,\r
                               GLuint n, const GLint x[], const GLint y[],\r
                               GLubyte rgba[][4], const GLubyte mask[])\r
 {\r
- DMesaContext c = (DMesaContext)ctx->DriverCtx;\r
const DMesaContext c = (DMesaContext)ctx->DriverCtx;\r
  void *b = c->Buffer->the_window;\r
  GLuint i, w = c->Buffer->width, h = c->Buffer->height;\r
 \r
@@ -264,11 +267,9 @@ static void read_rgba_pixels (const GLcontext *ctx,
 \r
 \r
 \r
-/**********************************************************************/\r
-/*****                   Optimized triangle rendering             *****/\r
-/**********************************************************************/\r
-\r
-\r
+/****************************************************************************\r
+ * Optimized triangle rendering\r
+ ***************************************************************************/\r
 \r
 /*\r
  * flat, NON-depth-buffered, triangle.\r
@@ -278,7 +279,7 @@ static void tri_rgb_flat (GLcontext *ctx,
                           const SWvertex *v1,\r
                           const SWvertex *v2)\r
 {\r
- DMesaContext c = (DMesaContext)ctx->DriverCtx;\r
const DMesaContext c = (DMesaContext)ctx->DriverCtx;\r
  void *b = c->Buffer->the_window;\r
  GLuint w = c->Buffer->width, h = c->Buffer->height;\r
 \r
@@ -286,7 +287,7 @@ static void tri_rgb_flat (GLcontext *ctx,
 \r
 #define RENDER_SPAN(span)                                      \\r
  GLuint i, offset = FLIP2(span.y)*w + span.x;                  \\r
- for (i = 0; i < span.count; i++, offset++) {                  \\r
+ for (i = 0; i < span.end; i++, offset++) {                    \\r
      vl_putpixel(b, offset, rgb);                              \\r
  }\r
 \r
@@ -303,7 +304,7 @@ static void tri_rgb_flat_z (GLcontext *ctx,
                             const SWvertex *v1,\r
                             const SWvertex *v2)\r
 {\r
- DMesaContext c = (DMesaContext)ctx->DriverCtx;\r
const DMesaContext c = (DMesaContext)ctx->DriverCtx;\r
  void *b = c->Buffer->the_window;\r
  GLuint w = c->Buffer->width, h = c->Buffer->height;\r
 \r
@@ -313,7 +314,7 @@ static void tri_rgb_flat_z (GLcontext *ctx,
 \r
 #define RENDER_SPAN(span)                                      \\r
  GLuint i, offset = FLIP2(span.y)*w + span.x;                  \\r
- for (i = 0; i < span.count; i++, offset++) {                  \\r
+ for (i = 0; i < span.end; i++, offset++) {                    \\r
      const DEPTH_TYPE z = FixedToDepth(span.z);                        \\r
      if (z < zRow[i]) {                                                \\r
         vl_putpixel(b, offset, rgb);                           \\r
@@ -335,14 +336,14 @@ static void tri_rgb_smooth (GLcontext *ctx,
                             const SWvertex *v1,\r
                             const SWvertex *v2)\r
 {\r
- DMesaContext c = (DMesaContext)ctx->DriverCtx;\r
const DMesaContext c = (DMesaContext)ctx->DriverCtx;\r
  void *b = c->Buffer->the_window;\r
  GLuint w = c->Buffer->width, h = c->Buffer->height;\r
 \r
 #define INTERP_RGB 1\r
 #define RENDER_SPAN(span)                                      \\r
  GLuint i, offset = FLIP2(span.y)*w + span.x;                  \\r
- for (i = 0; i < span.count; i++, offset++) {                  \\r
+ for (i = 0; i < span.end; i++, offset++) {                    \\r
      unsigned char rgb[3];                                     \\r
      rgb[0] = FixedToInt(span.red);                            \\r
      rgb[1] = FixedToInt(span.green);                          \\r
@@ -366,7 +367,7 @@ static void tri_rgb_smooth_z (GLcontext *ctx,
                               const SWvertex *v1,\r
                               const SWvertex *v2)\r
 {\r
- DMesaContext c = (DMesaContext)ctx->DriverCtx;\r
const DMesaContext c = (DMesaContext)ctx->DriverCtx;\r
  void *b = c->Buffer->the_window;\r
  GLuint w = c->Buffer->width, h = c->Buffer->height;\r
 \r
@@ -376,7 +377,7 @@ static void tri_rgb_smooth_z (GLcontext *ctx,
 \r
 #define RENDER_SPAN(span)                                      \\r
  GLuint i, offset = FLIP2(span.y)*w + span.x;                  \\r
- for (i = 0; i < span.count; i++, offset++) {                  \\r
+ for (i = 0; i < span.end; i++, offset++) {                    \\r
      const DEPTH_TYPE z = FixedToDepth(span.z);                        \\r
      if (z < zRow[i]) {                                                \\r
         unsigned char rgb[3];                                  \\r
@@ -455,15 +456,13 @@ static void dmesa_choose_tri (GLcontext *ctx)
 \r
 \r
 \r
-/**********************************************************************/\r
-/*****              Miscellaneous device driver funcs             *****/\r
-/**********************************************************************/\r
+/****************************************************************************\r
+ * Miscellaneous device driver funcs\r
+ ***************************************************************************/\r
 \r
-\r
-\r
-static void clear_color (GLcontext *ctx, const GLchan color[4])\r
+static void clear_color (GLcontext *ctx, const GLfloat color[4])\r
 {\r
const GLubyte col[4];\r
+ GLubyte col[4];\r
  DMesaContext c = (DMesaContext)ctx->DriverCtx;\r
  CLAMPED_FLOAT_TO_UBYTE(col[0], color[0]);\r
  CLAMPED_FLOAT_TO_UBYTE(col[1], color[1]);\r
@@ -477,7 +476,7 @@ static void clear_color (GLcontext *ctx, const GLchan color[4])
 static void clear (GLcontext *ctx, GLbitfield mask, GLboolean all,\r
                    GLint x, GLint y, GLint width, GLint height)\r
 {\r
- DMesaContext c = (DMesaContext)ctx->DriverCtx;\r
const DMesaContext c = (DMesaContext)ctx->DriverCtx;\r
  const GLuint *colorMask = (GLuint *)&ctx->Color.ColorMask;\r
  DMesaBuffer b = c->Buffer;\r
 \r
@@ -508,27 +507,29 @@ static void clear (GLcontext *ctx, GLbitfield mask, GLboolean all,
 \r
 \r
 \r
-/*\r
- * Set the current reading buffer.\r
- */\r
-static void set_read_buffer (GLcontext *ctx, GLframebuffer *buffer,\r
-                             GLenum mode)\r
+static void color_mask (GLcontext *ctx, GLboolean rmask, GLboolean gmask, GLboolean bmask, GLboolean amask)\r
 {\r
  /*\r
-     XXX this has to be fixed\r
-   */\r
+ /*\r
+  * XXX todo - Implements glColorMask()\r
+  */\r
 }\r
 \r
 \r
 \r
-/*\r
- * Set the destination/draw buffer.\r
- */\r
-static void set_draw_buffer (GLcontext *ctx, GLenum mode)\r
+static void set_buffer (GLcontext *ctx, GLframebuffer *colorBuffer, GLuint bufferBit)\r
 {\r
-   /*\r
-     XXX this has to be fixed\r
-   */\r
+ /*\r
+  * XXX todo - examine bufferBit and set read/write pointers\r
+  */\r
+}\r
+\r
+\r
+\r
+static void enable (GLcontext *ctx, GLenum pname, GLboolean state)\r
+{\r
+ /*\r
+  *  XXX todo -\r
+  */\r
 }\r
 \r
 \r
@@ -552,7 +553,7 @@ static const GLubyte* get_string (GLcontext *ctx, GLenum name)
 {\r
  switch (name) {\r
         case GL_RENDERER:\r
-             return (const GLubyte *)"Mesa DJGPP\0port (c) Borca Daniel 3-sep-2002";\r
+             return (const GLubyte *)"Mesa DJGPP\0port (c) Borca Daniel nov-2002";\r
         default:\r
              return NULL;\r
  }\r
@@ -560,38 +561,27 @@ static const GLubyte* get_string (GLcontext *ctx, GLenum name)
 \r
 \r
 \r
-/**********************************************************************/\r
-/*****              Miscellaneous device driver funcs             *****/\r
-/*****           Note that these functions are mandatory          *****/\r
-/**********************************************************************/\r
-\r
-\r
-\r
-/* OPTIONAL FUNCTION: implements glFinish if possible */\r
 static void finish (GLcontext *ctx)\r
 {\r
-/*\r
- DMesaContext c = (DMesaContext)ctx->DriverCtx;\r
-*/\r
+ /*\r
+  * XXX todo - OPTIONAL FUNCTION: implements glFinish if possible\r
+  */\r
 }\r
 \r
 \r
 \r
-/* OPTIONAL FUNCTION: implements glFlush if possible */\r
 static void flush (GLcontext *ctx)\r
 {\r
-/*\r
- DMesaContext c = (DMesaContext)ctx->DriverCtx;\r
-*/\r
+ /*\r
+  * XXX todo - OPTIONAL FUNCTION: implements glFlush if possible\r
+  */\r
 }\r
 \r
 \r
 \r
-/**********************************************************************/\r
-/**********************************************************************/\r
-\r
-\r
-\r
+/****************************************************************************\r
+ * State\r
+ ***************************************************************************/\r
 #define DMESA_NEW_TRIANGLE (_NEW_POLYGON | \\r
                             _NEW_TEXTURE | \\r
                             _NEW_LIGHT | \\r
@@ -599,8 +589,6 @@ static void flush (GLcontext *ctx)
                             _NEW_RENDERMODE | \\r
                             _SWRAST_NEW_RASTERMASK)\r
 \r
-\r
-\r
 /* Extend the software rasterizer with our line and triangle\r
  * functions.\r
  */\r
@@ -618,11 +606,10 @@ static void dmesa_register_swrast_functions (GLcontext *ctx)
 /* Setup pointers and other driver state that is constant for the life\r
  * of a context.\r
  */\r
-void dmesa_init_pointers (GLcontext *ctx)\r
+static void dmesa_init_pointers (GLcontext *ctx)\r
 {\r
  TNLcontext *tnl;\r
-\r
- ctx->Driver.UpdateState = dmesa_update_state;\r
+ struct swrast_device_driver *dd = _swrast_GetDeviceDriverReference(ctx);\r
 \r
  ctx->Driver.GetString = get_string;\r
  ctx->Driver.GetBufferSize = get_buffer_size;\r
@@ -638,6 +625,7 @@ void dmesa_init_pointers (GLcontext *ctx)
  ctx->Driver.CopyPixels = _swrast_CopyPixels;\r
  ctx->Driver.DrawPixels = _swrast_DrawPixels;\r
  ctx->Driver.ReadPixels = _swrast_ReadPixels;\r
+ ctx->Driver.DrawBuffer = _swrast_DrawBuffer;\r
 \r
  /* Software texture functions:\r
   */\r
@@ -650,6 +638,12 @@ void dmesa_init_pointers (GLcontext *ctx)
  ctx->Driver.TexSubImage3D = _mesa_store_texsubimage3d;\r
  ctx->Driver.TestProxyTexImage = _mesa_test_proxy_teximage;\r
 \r
+ ctx->Driver.CopyTexImage1D = _swrast_copy_teximage1d;\r
+ ctx->Driver.CopyTexImage2D = _swrast_copy_teximage2d;\r
+ ctx->Driver.CopyTexSubImage1D = _swrast_copy_texsubimage1d;\r
+ ctx->Driver.CopyTexSubImage2D = _swrast_copy_texsubimage2d;\r
+ ctx->Driver.CopyTexSubImage3D = _swrast_copy_texsubimage3d;\r
+\r
  ctx->Driver.CompressedTexImage1D = _mesa_store_compressed_teximage1d;\r
  ctx->Driver.CompressedTexImage2D = _mesa_store_compressed_teximage2d;\r
  ctx->Driver.CompressedTexImage3D = _mesa_store_compressed_teximage3d;\r
@@ -657,12 +651,6 @@ void dmesa_init_pointers (GLcontext *ctx)
  ctx->Driver.CompressedTexSubImage2D = _mesa_store_compressed_texsubimage2d;\r
  ctx->Driver.CompressedTexSubImage3D = _mesa_store_compressed_texsubimage3d;\r
 \r
- ctx->Driver.CopyTexImage1D = _swrast_copy_teximage1d;\r
- ctx->Driver.CopyTexImage2D = _swrast_copy_teximage2d;\r
- ctx->Driver.CopyTexSubImage1D = _swrast_copy_texsubimage1d;\r
- ctx->Driver.CopyTexSubImage2D = _swrast_copy_texsubimage2d;\r
- ctx->Driver.CopyTexSubImage3D = _swrast_copy_texsubimage3d;\r
-\r
  /* Swrast hooks for imaging extensions:\r
   */\r
  ctx->Driver.CopyColorTable = _swrast_CopyColorTable;\r
@@ -672,13 +660,16 @@ void dmesa_init_pointers (GLcontext *ctx)
 \r
  /* Statechange callbacks:\r
   */\r
- ctx->Driver.SetDrawBuffer = set_draw_buffer;\r
  ctx->Driver.ClearColor = clear_color;\r
+ ctx->Driver.ColorMask = color_mask;\r
+ ctx->Driver.Enable = enable;\r
 \r
  /* Initialize the TNL driver interface:\r
   */\r
  tnl = TNL_CONTEXT(ctx);\r
  tnl->Driver.RunPipeline = _tnl_run_pipeline;\r
+\r
+ dd->SetBuffer = set_buffer;\r
    \r
  /* Install swsetup for tnl->Driver.Render.*:\r
   */\r
@@ -689,36 +680,31 @@ void dmesa_init_pointers (GLcontext *ctx)
 \r
 static void dmesa_update_state (GLcontext *ctx, GLuint new_state)\r
 {\r
- DMesaContext c = (DMesaContext)ctx->DriverCtx;\r
- struct swrast_device_driver *swdd = _swrast_GetDeviceDriverReference(ctx);\r
+ struct swrast_device_driver *dd = _swrast_GetDeviceDriverReference(ctx);\r
 \r
- /* Initialize all the pointers in the DD struct.  Do this whenever */\r
- /* a new context is made current or we change buffers via set_buffer! */\r
-\r
- _swrast_InvalidateState(ctx, new_state);\r
- _swsetup_InvalidateState(ctx, new_state);\r
- _ac_InvalidateState(ctx, new_state);\r
- _tnl_InvalidateState(ctx, new_state);\r
-\r
- swdd->SetReadBuffer = set_read_buffer;\r
+ /* Propogate statechange information to swrast and swrast_setup\r
+  * modules. The DMesa driver has no internal GL-dependent state.\r
+  */\r
+ _swrast_InvalidateState( ctx, new_state );\r
+ _ac_InvalidateState( ctx, new_state );\r
+ _tnl_InvalidateState( ctx, new_state );\r
+ _swsetup_InvalidateState( ctx, new_state );\r
 \r
  /* RGB(A) span/pixel functions */\r
swdd->WriteRGBASpan = write_rgba_span;\r
swdd->WriteRGBSpan = write_rgb_span;\r
swdd->WriteMonoRGBASpan = write_mono_rgba_span;\r
swdd->WriteRGBAPixels = write_rgba_pixels;\r
swdd->WriteMonoRGBAPixels = write_mono_rgba_pixels;\r
swdd->ReadRGBASpan = read_rgba_span;\r
swdd->ReadRGBAPixels = read_rgba_pixels;\r
+ dd->WriteRGBASpan = write_rgba_span;\r
+ dd->WriteRGBSpan = write_rgb_span;\r
+ dd->WriteMonoRGBASpan = write_mono_rgba_span;\r
+ dd->WriteRGBAPixels = write_rgba_pixels;\r
+ dd->WriteMonoRGBAPixels = write_mono_rgba_pixels;\r
+ dd->ReadRGBASpan = read_rgba_span;\r
+ dd->ReadRGBAPixels = read_rgba_pixels;\r
 }\r
 \r
 \r
 \r
-/**********************************************************************/\r
-/*****               DMesa Public API Functions                   *****/\r
-/**********************************************************************/\r
-\r
-\r
+/****************************************************************************\r
+ * DMesa Public API Functions\r
+ ***************************************************************************/\r
 \r
 /*\r
  * The exact arguments to this function will depend on your window system\r
@@ -731,15 +717,13 @@ DMesaVisual DMesaCreateVisual (GLint width, GLint height, GLint colDepth,
  DMesaVisual v;\r
  GLint redBits, greenBits, blueBits, alphaBits;\r
 \r
- int refresh;\r
  char *var = getenv("DMESA_REFRESH");\r
- if ((var == NULL) || ((refresh=atoi(var)) == 0)) {\r
-    refresh = 60;\r
- }\r
+ int refresh = (var != NULL) ? atoi(var) : 0;\r
 \r
  if (!dbFlag) {\r
     return NULL;\r
  }\r
+\r
  alphaBits = 0;\r
  switch (colDepth) {\r
         case 15:\r
@@ -767,7 +751,7 @@ DMesaVisual DMesaCreateVisual (GLint width, GLint height, GLint colDepth,
     return NULL;\r
  }\r
 \r
- if ((v=(DMesaVisual)calloc(1, sizeof(struct dmesa_visual)))!=NULL) {\r
+ if ((v=(DMesaVisual)calloc(1, sizeof(struct dmesa_visual))) != NULL) {\r
     /* Create core visual */\r
     v->gl_visual = _mesa_create_visual(colDepth>8,             /* rgb */\r
                                        dbFlag,\r
@@ -809,7 +793,7 @@ DMesaBuffer DMesaCreateBuffer (DMesaVisual visual,
 {\r
  DMesaBuffer b;\r
 \r
- if ((b=(DMesaBuffer)calloc(1, sizeof(struct dmesa_buffer)))!=NULL) {\r
+ if ((b=(DMesaBuffer)calloc(1, sizeof(struct dmesa_buffer))) != NULL) {\r
 \r
     _mesa_initialize_framebuffer(&b->gl_buffer,\r
                                  visual->gl_visual,\r
@@ -844,7 +828,7 @@ DMesaContext DMesaCreateContext (DMesaVisual visual,
  DMesaContext c;\r
  GLboolean direct = GL_FALSE;\r
 \r
- if ((c=(DMesaContext)calloc(1, sizeof(struct dmesa_context)))!=NULL) {\r
+ if ((c=(DMesaContext)calloc(1, sizeof(struct dmesa_context))) != NULL) {\r
     c->gl_ctx = _mesa_create_context(visual->gl_visual,\r
                                      share ? share->gl_ctx : NULL,\r
                                      (void *)c, direct);\r
@@ -852,17 +836,19 @@ DMesaContext DMesaCreateContext (DMesaVisual visual,
     _mesa_enable_sw_extensions(c->gl_ctx);\r
     _mesa_enable_1_3_extensions(c->gl_ctx);\r
 \r
-   /* you probably have to do a bunch of other initializations here. */\r
+    /* you probably have to do a bunch of other initializations here. */\r
     c->visual = visual;\r
 \r
-   /* Initialize the software rasterizer and helper modules.\r
-    */\r
+    c->gl_ctx->Driver.UpdateState = dmesa_update_state;\r
+\r
+    /* Initialize the software rasterizer and helper modules.\r
+     */\r
     _swrast_CreateContext(c->gl_ctx);\r
     _ac_CreateContext(c->gl_ctx);\r
     _tnl_CreateContext(c->gl_ctx);\r
     _swsetup_CreateContext(c->gl_ctx);\r
-    dmesa_init_pointers(c->gl_ctx);\r
     dmesa_register_swrast_functions(c->gl_ctx);\r
+    dmesa_init_pointers(c->gl_ctx);\r
  }\r
 \r
  return c;\r
@@ -884,7 +870,7 @@ GLboolean DMesaViewport (DMesaBuffer b,
 {\r
  void *new_window;\r
 \r
- if ((new_window=vl_sync_buffer(b->the_window, xpos, ypos, width, height))==NULL) {\r
+ if ((new_window=vl_sync_buffer(b->the_window, xpos, ypos, width, height)) == NULL) {\r
     return GL_FALSE;\r
  } else {\r
     b->the_window = new_window;\r
@@ -905,16 +891,15 @@ GLboolean DMesaViewport (DMesaBuffer b,
  */\r
 GLboolean DMesaMakeCurrent (DMesaContext c, DMesaBuffer b)\r
 {\r
- if (c&&b) {\r
+ if ((c != NULL) && (b != NULL)) {\r
     if (!DMesaViewport(b, b->xpos, b->ypos, b->width, b->height)) {\r
        return GL_FALSE;\r
     }\r
 \r
     c->Buffer = b;\r
 \r
-    dmesa_update_state(c->gl_ctx, 0);\r
     _mesa_make_current(c->gl_ctx, &b->gl_buffer);\r
-    if (c->gl_ctx->Viewport.Width==0) {\r
+    if (c->gl_ctx->Viewport.Width == 0) {\r
        /* initialize viewport to window size */\r
        _mesa_Viewport(0, 0, b->width, b->height);\r
     }\r
index c43b6ec4284f4eb2eb004124b59bccd9fb940f38..8dbeb9e52c48904f5dc558926389a1c0b02f5af3 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
  * Mesa 3-D graphics library\r
- * Version:  4.0\r
+ * Version:  4.1\r
  * \r
  * Copyright (C) 1999  Brian Paul   All Rights Reserved.\r
  * \r
@@ -23,7 +23,7 @@
  */\r
 \r
 /*\r
- * DOS/DJGPP device driver v1.1 for Mesa 4.0\r
+ * DOS/DJGPP device driver v1.2 for Mesa 4.1\r
  *\r
  *  Copyright (C) 2002 - Borca Daniel\r
  *  Email : dborca@yahoo.com\r
@@ -337,7 +337,7 @@ static int vesa_entermode (vl_mode *p, int refresh)
  r.x.ax = 0x4f02;\r
  r.x.bx = p->mode;\r
 \r
- if ((vesa_ver>>8) >= 3) {\r
+ if (refresh && ((vesa_ver>>8) >= 3)) {\r
     /* VESA 3.0 stuff for controlling the refresh rate */\r
     CRTCInfoBlock crtc;\r
     unsigned long vclk;\r
index 528c71dd5a860137d42c68e9c8df3783915df92f..b9e0024ad7320c4539002d352db862c8be5dc9ee 100644 (file)
@@ -20,7 +20,7 @@
 # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
 # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
 \r
-# DOS/DJGPP core makefile v1.1 for Mesa 4.0\r
+# DOS/DJGPP core makefile v1.2 for Mesa 4.1\r
 #\r
 #  Copyright (C) 2002 - Borca Daniel\r
 #  Email : dborca@yahoo.com\r
@@ -59,6 +59,7 @@
 \r
 \r
 .PHONY: all clean\r
+.INTERMEDIATE: X86/gen_matypes.exe\r
 \r
 TOP = ..\r
 GLIDE ?= $(TOP)/include/glide3\r
@@ -83,9 +84,6 @@ endif
 RM = del\r
 \r
 CORE_SOURCES = \\r
-       swrast_setup/ss_context.c \\r
-       swrast_setup/ss_triangle.c \\r
-       swrast_setup/ss_vb.c \\r
        api_arrayelt.c \\r
        api_loopback.c \\r
        api_noop.c \\r
@@ -96,7 +94,6 @@ CORE_SOURCES = \
        buffers.c \\r
        clip.c \\r
        colortab.c \\r
-       config.c \\r
        context.c \\r
        convolve.c \\r
        debug.c \\r
@@ -136,16 +133,17 @@ CORE_SOURCES = \
        texstore.c \\r
        texutil.c \\r
        varray.c \\r
+       vpexec.c \\r
+       vpparse.c \\r
+       vpstate.c \\r
        vtxfmt.c \\r
        math/m_debug_clip.c \\r
        math/m_debug_norm.c \\r
-       math/m_debug_vertex.c \\r
        math/m_debug_xform.c \\r
        math/m_eval.c \\r
        math/m_matrix.c \\r
        math/m_translate.c \\r
        math/m_vector.c \\r
-       math/m_vertices.c \\r
        math/m_xform.c \\r
        array_cache/ac_context.c \\r
        array_cache/ac_import.c \\r
@@ -168,17 +166,18 @@ CORE_SOURCES = \
        swrast/s_lines.c \\r
        swrast/s_logic.c \\r
        swrast/s_masking.c \\r
-       swrast/s_pb.c \\r
        swrast/s_pixeltex.c \\r
        swrast/s_points.c \\r
        swrast/s_readpix.c \\r
-       swrast/s_scissor.c \\r
        swrast/s_span.c \\r
        swrast/s_stencil.c \\r
        swrast/s_texture.c \\r
        swrast/s_texstore.c \\r
        swrast/s_triangle.c \\r
        swrast/s_zoom.c \\r
+       swrast_setup/ss_context.c \\r
+       swrast_setup/ss_triangle.c \\r
+       swrast_setup/ss_vb.c \\r
        tnl/t_array_api.c \\r
        tnl/t_array_import.c \\r
        tnl/t_context.c \\r
@@ -196,6 +195,7 @@ CORE_SOURCES = \
        tnl/t_vb_light.c \\r
        tnl/t_vb_normals.c \\r
        tnl/t_vb_points.c \\r
+       tnl/t_vb_program.c \\r
        tnl/t_vb_render.c \\r
        tnl/t_vb_texgen.c \\r
        tnl/t_vb_texmat.c \\r
@@ -209,7 +209,6 @@ X86_SOURCES = \
        X86/x86_xform2.S \\r
        X86/x86_xform3.S \\r
        X86/x86_xform4.S \\r
-       X86/x86_vertex.S \\r
        X86/x86_cliptest.S\r
 \r
 MMX_SOURCES = \\r
@@ -220,7 +219,6 @@ SSE_SOURCES = \
        X86/sse_xform2.S \\r
        X86/sse_xform3.S \\r
        X86/sse_xform4.S \\r
-       X86/sse_vertex.S \\r
        X86/sse_normal.S\r
 \r
 K3D_SOURCES = \\r
@@ -228,7 +226,7 @@ K3D_SOURCES = \
        X86/3dnow_xform2.S \\r
        X86/3dnow_xform3.S \\r
        X86/3dnow_xform4.S \\r
-       X86/3dnow_vertex.S\r
+       X86/3dnow_normal.S\r
 \r
 ifdef HAVE_MMX\r
 X86_SOURCES += $(MMX_SOURCES)\r
@@ -275,6 +273,8 @@ SOURCES = $(CORE_SOURCES) $(X86_SOURCES) $(DRIVER_SOURCES)
 \r
 OBJECTS = $(addsuffix .o,$(basename $(SOURCES)))\r
 \r
+X86_OBJECTS = $(addsuffix .o,$(basename $(X86_SOURCES)))\r
+\r
 .c.o:\r
        $(CC) -o $@ -c $(CFLAGS) $<\r
 .S.o:\r
@@ -295,6 +295,14 @@ else
        -dxe2gen -o $(LIBDIR)/$(GL_DXE) -I $(LIBDIR)/$(GL_IMP) $(OBJECTS) -E djgpp_ -E gl -E DMesa -E fxMesa -D "Mesa DJGPP GL" -U\r
 endif\r
 \r
+$(X86_OBJECTS): X86/matypes.h\r
+\r
+X86/matypes.h: X86/gen_matypes.exe\r
+       $< > $@\r
+\r
+X86/gen_matypes.exe: X86/gen_matypes.c\r
+       $(CC) -o $@ $(CFLAGS) -s $<\r
+\r
 clean:\r
        -$(RM) $(subst /,\,*.o)\r
        -$(RM) $(subst /,\,array_cache/*.o)\r