*** empty log message ***
authorJon Taylor <taylorj@ggi-project.org>
Sun, 22 Aug 1999 08:56:50 +0000 (08:56 +0000)
committerJon Taylor <taylorj@ggi-project.org>
Sun, 22 Aug 1999 08:56:50 +0000 (08:56 +0000)
progs/ggi/gears.c
src/glut/ggi/ggiglut.c
src/mesa/drivers/ggi/default/genkgi.conf.in
src/mesa/drivers/ggi/default/genkgi.h
src/mesa/drivers/ggi/default/genkgi_mode.c
src/mesa/drivers/ggi/default/genkgi_visual.c
src/mesa/drivers/ggi/display/fbdev_mode.c
src/mesa/drivers/ggi/display/fbdev_visual.c
src/mesa/drivers/ggi/include/ggi/mesa/display_fbdev.h

index 61a8b9f33112ee5357b16c35662533f42f95c860..ac2e9f2a6ea9270b84ce0950b1f349f9e15ff772 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: gears.c,v 1.2 1999/08/21 08:53:27 jtaylor Exp $ */
+/* $Id: gears.c,v 1.3 1999/08/22 08:56:50 jtaylor Exp $ */
 
 /*
  * 3-D gear wheels.  This program is in the public domain.
@@ -222,7 +222,7 @@ key(unsigned char k, int x, int y)
     view_rotz -= 5.0;
     break;
   case 27:  /* Escape */
-    exit(0);
+    exit(0); /* FIXME: Shutdown and free resources cleanly in ggiglut */
     break;
   default:
     return;
@@ -320,20 +320,21 @@ visible(int vis)
 
 int main(int argc, char *argv[])
 {
-  glutInit(&argc, argv);
-  glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
-
-  glutInitWindowPosition(0, 0);
-  glutInitWindowSize(300, 300);
-  glutCreateWindow("Gears");
-  init();
-
-  glutDisplayFunc(draw);
-  glutReshapeFunc(reshape);
-  glutKeyboardFunc(key);
-  glutSpecialFunc(special);
-  glutVisibilityFunc(visible);
-
-  glutMainLoop();
-  return 0;             /* ANSI C requires main to return int. */
+       glutInit(&argc, argv);
+       glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
+
+//     glutInitWindowPosition(0, 0);
+//     glutInitWindowSize(300, 300);
+       glutCreateWindow("Gears");
+       init();
+
+       glutDisplayFunc(draw);
+       glutReshapeFunc(reshape);
+       glutKeyboardFunc(key);
+       glutSpecialFunc(special);
+       glutVisibilityFunc(visible);
+
+       glutMainLoop();
+       
+       return 0;
 }
index f9ca0a71fda6218dbac7042879b6a43f711760e5..31658c79ff3eb74e5c060d3a8958a5f57e256325 100644 (file)
@@ -51,10 +51,14 @@ static ggi_visual_t __glut_vis;
 
 static GGIMesaContext __glut_ctx;
 
-static int __glut_width = WIDTH;
-static int __glut_height = HEIGHT;
-static ggi_graphtype __glut_gt_rgb = GRAPHTYPE_RGB;
-static ggi_graphtype __glut_gt_index = GRAPHTYPE_INDEX;
+//static int __glut_width = WIDTH;
+//static int __glut_height = HEIGHT;
+//static ggi_graphtype __glut_gt_rgb = GRAPHTYPE_RGB;
+//static ggi_graphtype __glut_gt_index = GRAPHTYPE_INDEX;
+static int __glut_width = GGI_AUTO;
+static int __glut_height = GGI_AUTO;
+static ggi_graphtype __glut_gt_rgb = GT_AUTO;
+static ggi_graphtype __glut_gt_index = GT_8BIT;
 static int __glut_init = GL_FALSE;
 
 static int mousex = WIDTH / 2;
@@ -120,7 +124,6 @@ void glut_ggiDEBUG(char *format, ...)
                vfprintf(stderr, format, args);
                va_end(args);
        }
-       
 }
 
 void glutInit(int *argc, char **argv)
@@ -159,10 +162,7 @@ void glutInit(int *argc, char **argv)
                                        case 24: gt = GT_24BIT; break;
                                        case 32: gt = GT_32BIT; break;
                                        default:
-                                       glut_ggiDEBUG("\"%s\" bits per pixel?\n",
-                                                     argv[i+1]);
-
-                                       exit(1);
+                                       ggiPanic("\"%s\" bits per pixel?\n", argv[i+1]);
                                }
                                __glut_gt_rgb = __glut_gt_index = gt;
                                REMOVE;
@@ -171,8 +171,8 @@ void glutInit(int *argc, char **argv)
                        else
                        if (strcmp(argv[i], "-size") == 0 && (i + 2) < (*argc))
                        {
-                               __glut_width=atoi(argv[i+1]);
-                               __glut_height=atoi(argv[i+2]);
+                               __glut_width = atoi(argv[i + 1]);
+                               __glut_height = atoi(argv[i + 2]);
                                REMOVE;
                                REMOVE;
                                REMOVE;
@@ -180,13 +180,13 @@ void glutInit(int *argc, char **argv)
                }
        }
        
-       if (ggiInit()<0)
+       if (ggiInit() < 0)
        {
                ggiPanic("ggiInit() failed!\n");
        }
-       __glut_init=GL_TRUE;
+       __glut_init = GL_TRUE;
 
-       #undef REMOVE
+#undef REMOVE
 }
 
 void glutInitWindowPosition(int x, int y)
@@ -266,11 +266,17 @@ int glutCreateWindow(const char *title)
                ggiPanic("GGIMesaSetVisual failed!\n");
        }
        
+       __glut_width = mode.visible.x;
+       __glut_height = mode.visible.y;
+       
+       mousex = mode.visible.x / 2;
+       mousey = mode.visible.y / 2;
+       
        GGIMesaMakeCurrent(__glut_ctx);
        
        if (__glut_reshape) 
          __glut_reshape(__glut_width, __glut_height);
-
+       
        return GL_TRUE;
 }
 
@@ -491,8 +497,9 @@ void glutMainLoop(void)
        ggi_event ev;
        ggi_event_mask evmask = (emKeyPress | emKeyRepeat | emPtrMove | emPtrButton);
   
+
        ggiSetEventMask(__glut_vis, evmask);
-       
+
        glutPostRedisplay();
        
        if (__glut_visibility) 
index 8b3a25431b6f65b29cd452a845e41fc89556befa..02acad2a1919ba0ec8b18758c3f4d429b33efcca 100644 (file)
@@ -1,4 +1,4 @@
 # GGIMesa genkgi helper configuration
-.root: @ggi_libdir@/ggi/mesa/default/
+.root: @ggi_libdir@/ggi/mesa/default
 
-tgt-fbdev-kgicon-savage4-mesa  kgi/savage4.so
+tgt-fbdev-kgicon-d3dim-mesa    d3dim.so
index c5a725cad825948466d808bd14a7dbd8e571f3a0..022189138f1f6ac5bb9f22aec037288bdd6b47b4 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: genkgi.h,v 1.2 1999/08/21 22:36:52 jtaylor Exp $
+/* $Id: genkgi.h,v 1.3 1999/08/22 08:56:50 jtaylor Exp $
 ******************************************************************************
 
    GGIMesa - KGIcon specific overrides for fbcon-mesa
 ******************************************************************************
 */
 
+#ifndef _GENKGI_MESA_H
+#define _GENKGI_MESA_H
+
+#undef KGI_USE_PPBUFS
+
+#include <unistd.h>
+#include <sys/mman.h>
 
 #include <ggi/internal/ggi-dl.h>
 #include <ggi/mesa/display_fbdev.h>
+#include <kgi/kgi.h>
 
-//ggifunc_setmode GGIMesa_genkgi_setmode;
-ggifunc_getapi GGIMesa_genkgi_getapi;
+#ifndef MAP_FAILED
+#define MAP_FAILED ((void *)-1)
+#endif
 
-typedef struct genkgi_hook_mesa
+/* FIXME: LibGGI needs to export its genkgi.h */
+struct genkgi_priv
+{
+       ggi_gc *mapped_gc;
+       unsigned int gc_size;
+       ggifunc_drawline *drawline;
+       ggifunc_drawbox *drawbox;
+       ggifunc_fillscreen *fillscreen;
+       int fd_gc;
+       int close_gc;
+       int fd_kgicommand;
+       uint8 *mapped_kgicommand;
+       uint8 *kgicommand_ptr;
+       unsigned int kgicommand_buffersize;
+};
+
+#define GENKGI_PRIV(vis) ((struct genkgi_priv *)FBDEV_PRIV(vis)->accelpriv)
+
+extern ggifunc_getapi GGIMesa_genkgi_getapi;
+extern ggifunc_flush  GGIMesa_genkgi_flush;
+
+struct genkgi_priv_mesa
 {
        char accel[100];
        int have_accel;
-       void *accelpriv;
-} genkgi_hook_mesa;
+       void *accelpriv; /* Private data of subdrivers */
+       struct genkgi_priv *oldpriv; /* LibGGI's private data */
+};
+
+#define GENKGI_PRIV_MESA(vis) ((struct genkgi_priv_mesa *)FBDEV_PRIV_MESA(vis)->accelpriv)
 
-#define GENKGI_PRIVATE(vis) ((genkgi_hook_mesa *)FBDEV_PRIV_MESA(vis)->accelpriv)
+#endif /* _GENKHI_MESA_H */
index 67e0145f7050e6b6a7d9d99687786770280da0e9..b11b6414996a70b1abb061861bdc03ae3b5b6c4e 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: genkgi_mode.c,v 1.2 1999/08/21 22:36:52 jtaylor Exp $
+/* $Id: genkgi_mode.c,v 1.3 1999/08/22 08:56:50 jtaylor Exp $
 ******************************************************************************
 
    display-fbdev-kgicon-generic-mesa
@@ -41,7 +41,7 @@
 
 int GGIMesa_genkgi_getapi(ggi_visual *vis, int num, char *apiname, char *arguments)
 {
-       genkgi_hook_mesa *priv = GENKGI_PRIVATE(vis);
+       struct genkgi_priv_mesa *priv = GENKGI_PRIV_MESA(vis);
        
        gl_ggiDEBUG("Entered mesa_genkgi_getapi, num=%d\n", num);
        
@@ -59,3 +59,44 @@ int GGIMesa_genkgi_getapi(ggi_visual *vis, int num, char *apiname, char *argumen
        }
        return -1;
 }
+
+int GGIMesa_genkgi_flush(ggi_visual *vis, int x, int y, int w, int h, int tryflag)
+{
+       struct genkgi_priv_mesa *priv = GENKGI_PRIV_MESA(vis);
+       int junkval; // There must be a better way to do this
+
+       priv->oldpriv->kgicommand_ptr += getpagesize(); 
+       (kgiu32)(priv->oldpriv->kgicommand_ptr) &= 0xfffff000;
+       junkval = *((int *)(priv->oldpriv->kgicommand_ptr));
+       
+       /* Check if we are now in the last page, and reset the
+        * FIFO if so.  We can't use the last page to send
+        * more commands, since there's no page after it that
+        * we can touch to fault in the last page's commands.
+        * 
+        * FIXME: This will be replaced with a flush-and-reset handler
+        * on the end-of-buffer pagefault at some point....
+        * 
+        */
+       if ((priv->oldpriv->kgicommand_ptr - priv->oldpriv->mapped_kgicommand)
+           >= (priv->oldpriv->kgicommand_buffersize - getpagesize()))
+       {
+               gl_ggiDEBUG("Hit end of FIFO, attempting remap");
+               munmap(priv->oldpriv->mapped_kgicommand, priv->oldpriv->kgicommand_buffersize);
+               gl_ggiDEBUG("Passed munmap");
+               if ((priv->oldpriv->mapped_kgicommand = 
+                    mmap(NULL, 
+                         priv->oldpriv->kgicommand_buffersize, 
+                         PROT_READ | PROT_WRITE,
+                         MAP_SHARED,
+                         priv->oldpriv->fd_kgicommand, 
+                         0)) == MAP_FAILED)
+               {
+                       ggiPanic("Failed to remap kgicommand!");
+               }
+               gl_ggiDEBUG("Passed mmap");
+               priv->oldpriv->kgicommand_ptr = priv->oldpriv->mapped_kgicommand;
+               gl_ggiDEBUG("Passed kgicommand_ptr reset");
+       }
+       return 0;
+}
index a1de5ff7c38c50e947e61f08a2f4fba0bfb737df..1ed038a0c78ec515c783e0993d7d7d82670e368c 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: genkgi_visual.c,v 1.3 1999/08/21 22:46:13 jtaylor Exp $
+/* $Id: genkgi_visual.c,v 1.4 1999/08/22 08:56:50 jtaylor Exp $
 ******************************************************************************
 
    genkgi_visual.c: visual handling for the generic KGI helper
@@ -70,7 +70,7 @@ typedef struct {
 
 static accel_info accel_strings[] = 
 {
-       { 0, "savage4" },               /* S3 Savage4                   */
+       { 0, "d3dim" },         /* Direct3D Immedaite Mode              */
 };
 
 #define NUM_ACCELS     (sizeof(accel_strings)/sizeof(accel_info))
@@ -115,7 +115,7 @@ static int changed(ggi_visual_t vis, int whatchanged)
 
 int GGIdlinit(ggi_visual *vis, const char *args, void *argptr)
 {
-       genkgi_hook_mesa *priv;
+       struct genkgi_priv_mesa *priv;
        char libname[256], libargs[256];
        int id, err;
        struct stat junk;
@@ -123,13 +123,15 @@ int GGIdlinit(ggi_visual *vis, const char *args, void *argptr)
 
        gl_ggiDEBUG("display-fbdev-kgicon-mesa: GGIdlinit start\n");
        
-       GENKGI_PRIVATE(vis) = priv = malloc(sizeof(genkgi_hook_mesa));
+       GENKGI_PRIV_MESA(vis) = priv = malloc(sizeof(struct genkgi_priv_mesa));
        if (priv == NULL) 
        {
-               fprintf(stderr, "Failed to allocate genkgi_hook!\n");
+               fprintf(stderr, "Failed to allocate genkgi private data\n");
                return GGI_DL_ERROR;
        }
        
+       priv->oldpriv = GENKGI_PRIV(vis);
+#if 0
        err = ggLoadConfig(conffile, &_configHandle);
        if (err != GGI_OK)
        {
@@ -137,24 +139,22 @@ int GGIdlinit(ggi_visual *vis, const char *args, void *argptr)
                return err;
        }
 
-       /* Hack city here.  We need to probe the KGI driver properly to discover
-        * the acceleration type.
+       /* Hack city here.  We need to probe the KGI driver properly for
+        * suggest-strings to discover the acceleration type(s).
         */
        priv->have_accel = 0;
-#if 0
-       if (stat("/proc/savage4", &junk) == 0)
+#if 1
+       if (stat("/proc/gfx0", &junk) == 0)
        {
-               sprintf(priv->accel, "%s%s", accel_prefix, "savage4");
+               sprintf(priv->accel, "%s%s", accel_prefix, "d3dim");
                priv->have_accel = 1;
                gl_ggiDEBUG("display-fbdev-kgicon-mesa: Using accel: \"%s\"\n", priv->accel);
        }
 
-#endif 
        /* Mode management */
-       vis->opdisplay->getapi = GGIMesa_genkgi_getapi;
-       
+       vis->opdisplay->getapi = GGIMesa_genkgi_getapi; 
        ggiIndicateChange(vis, GGI_CHG_APILIST);
-
+#endif
        
        /* Give the accel sublibs a chance to set up a driver */
        if (priv->have_accel == 1)
@@ -168,7 +168,11 @@ int GGIdlinit(ggi_visual *vis, const char *args, void *argptr)
                    (LIBGGI_MESAEXT(vis)->setup_driver == NULL))
                  vis->opdisplay->getapi = oldgetapi;
        }
-
+#endif
+       
+       LIBGGI_MESAEXT(vis)->update_state = genkgi_update_state;
+       LIBGGI_MESAEXT(vis)->setup_driver = genkgi_setup_driver;
+       
        gl_ggiDEBUG("display-fbdev-kgicon-mesa: GGIdlinit finished\n");
 
        return 0;
index 478ad83801ca13d9318a6d3523de59c41dbad78d..6815e5f198e421cda197056e4d0ab4c0e636af54 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: fbdev_mode.c,v 1.2 1999/08/21 22:46:13 jtaylor Exp $
+/* $Id: fbdev_mode.c,v 1.3 1999/08/22 08:56:50 jtaylor Exp $
 ******************************************************************************
 
    display-fbdev-mesa
@@ -50,7 +50,7 @@
 
 int GGIMesa_fbdev_getapi(ggi_visual *vis, int num, char *apiname, char *arguments)
 {
-       fbdev_hook_mesa *priv = GGIMESA_PRIVATE(vis);
+       struct fbdev_priv_mesa *priv = GGIMESA_PRIVATE(vis);
        
        strcpy(arguments, "");
 
@@ -70,7 +70,7 @@ int GGIMesa_fbdev_getapi(ggi_visual *vis, int num, char *apiname, char *argument
 
 static int do_setmode(ggi_visual *vis)
 {
-       fbdev_hook_mesa *priv = GGIMESA_PRIVATE(vis);
+       struct fbdev_priv_mesa *priv = GGIMESA_PRIVATE(vis);
        int err, id;
        char libname[256], libargs[256];
        ggi_graphtype gt;
index 60af90412af74ec98d5644b8c580bd75080327ad..13ac848e7cca6368b0ed1ba1252262cb170bfd52 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: fbdev_visual.c,v 1.2 1999/08/21 22:46:13 jtaylor Exp $
+/* $Id: fbdev_visual.c,v 1.3 1999/08/22 08:56:50 jtaylor Exp $
 ******************************************************************************
 
    display-fbdev-mesa: visual handling
@@ -107,16 +107,16 @@ static int changed(ggi_visual_t vis, int whatchanged)
 
 int GGIdlinit(ggi_visual *vis, const char *args, void *argptr)
 {
-       fbdev_hook_mesa *priv;
+       struct fbdev_priv_mesa *priv;
        char libname[256], libargs[256];
        int id, err;
        ggifunc_getapi *oldgetapi;
 
        gl_ggiDEBUG("display-fbdev-mesa: GGIdlinit start\n");
        
-       GGIMESA_PRIVATE(vis) = priv = malloc(sizeof(fbdev_hook_mesa));
+       GGIMESA_PRIVATE(vis) = priv = malloc(sizeof(struct fbdev_priv_mesa));
        if (priv == NULL) {
-               fprintf(stderr, "Failed to allocate fbdev_hook!\n");
+               fprintf(stderr, "Failed to allocate fbdev private data\n");
                return GGI_DL_ERROR;
        }
        
index eee65339782cd39354d8013ba2446f3ff9a21665..72d294bb6fc2102be49b16792646adcc661d73a7 100644 (file)
@@ -7,14 +7,14 @@
 ggifunc_setmode GGIMesa_fbdev_setmode;
 ggifunc_getapi GGIMesa_fbdev_getapi;
 
-#define FBDEV_PRIV_MESA(vis) ((fbdev_hook_mesa *)(FBDEV_PRIV(vis)->accelpriv))
+#define FBDEV_PRIV_MESA(vis) ((struct fbdev_priv_mesa *)(FBDEV_PRIV(vis)->accelpriv))
 
-typedef struct fbdev_hook_mesa
+struct fbdev_priv_mesa
 {
        char *accel;
        int have_accel;
        void *accelpriv;
        fbdev_hook *oldpriv;    // Hooks back to the LibGGI fbdev target's private data
-} fbdev_hook_mesa;
+};
 
 #endif /* _GGIMESA_DISPLAY_FBDEV_H */