*** empty log message ***

This commit is contained in:
Jon Taylor 1999-08-21 05:57:17 +00:00
parent 212ce73b08
commit 95dcb43951
18 changed files with 1639 additions and 0 deletions

View File

@ -0,0 +1,4 @@
# GGIMesa genkgi helper configuration
.root: @ggi_libdir@/ggi/mesa/default/
tgt-fbdev-kgicon-savage4-mesa kgi/savage4.so

View File

@ -0,0 +1,43 @@
/* $Id: genkgi.h,v 1.1 1999/08/21 05:59:29 jtaylor Exp $
******************************************************************************
GGIMesa - KGIcon specific overrides for fbcon-mesa
API header
Copyright (C) 1999 Creative Labs
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
THE AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
******************************************************************************
*/
#include <ggi/internal/ggi-dl.h>
#include <ggi/mesa/display/fbdev.h>
//ggifunc_setmode GGIMesa_genkgi_setmode;
ggifunc_getapi GGIMesa_genkgi_getapi;
typedef struct genkgi_hook_mesa
{
char accel[100];
int have_accel;
void *accelpriv;
} genkgi_hook_mesa;
#define GENKGI_PRIVATE(vis) ((genkgi_hook_mesa *)FBDEV_PRIV_MESA(vis)->accelpriv)

View File

@ -0,0 +1,61 @@
/* $Id: genkgi_mode.c,v 1.1 1999/08/21 05:59:29 jtaylor Exp $
******************************************************************************
display-fbdev-kgicon-generic-mesa
Copyright (C) 1999 Creative Labs
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
THE AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
******************************************************************************
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
//#include <linux/fb.h>
#include <ggi/internal/ggi-dl.h>
#include <ggi/mesa/ggimesa_int.h>
#include "genkgi.h"
int GGIMesa_genkgi_getapi(ggi_visual *vis, int num, char *apiname, char *arguments)
{
genkgi_hook_mesa *priv = GENKGI_PRIVATE(vis);
gl_ggiDEBUG("Entered mesa_genkgi_getapi, num=%d\n", num);
strcpy(arguments, "");
switch(num)
{
case 0:
if (priv->have_accel)
{
strcpy(apiname, priv->accel);
return 0;
}
break;
}
return -1;
}

View File

@ -0,0 +1,184 @@
/* $Id: genkgi_visual.c,v 1.1 1999/08/21 05:59:29 jtaylor Exp $
******************************************************************************
display-fbdev-mesa-generic-kgi: visual handling
Copyright (C) 1998 Andrew Apted [andrew@ggi-project.org]
Copyright (C) 1999 Marcus Sundberg [marcus@ggi-project.org]
Copyright (C) 1999 Creative Labs
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
THE AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
******************************************************************************
*/
#include <ggi/internal/ggi-dl.h>
#include <ggi/mesa/ggimesa_int.h>
#include <ggi/mesa/display/fbdev.h>
#include "genkgi.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <errno.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#ifdef HAVE_SYS_VT_H
#include <sys/vt.h>
#else
#include <linux/vt.h>
#endif
#ifdef HAVE_LINUX_KDEV_T_H
#include <linux/kdev_t.h>
#endif
#include <linux/tty.h>
static int refcount = 0;
static int vtnum;
static void *_ggi_fbdev_lock = NULL;
#ifdef FBIOGET_CON2FBMAP
static struct fb_con2fbmap origconmap;
#endif
#define MAX_DEV_LEN 63
#define DEFAULT_FBNUM 0
static char accel_prefix[] = "tgt-fbdev-kgicon-";
#define PREFIX_LEN (sizeof(accel_prefix))
typedef struct {
int async;
char *str;
} accel_info;
static accel_info accel_strings[] =
{
{ 0, "savage4" }, /* S3 Savage4 */
};
#define NUM_ACCELS (sizeof(accel_strings)/sizeof(accel_info))
/* FIXME: These should be defined in the makefile system */
#define CONF_FILE "/usr/local/etc/ggi/mesa/targets/genkgi.conf"
void *_configHandle;
char confstub[512] = CONF_FILE;
char *conffile = confstub;
static int changed(ggi_visual_t vis, int whatchanged)
{
gl_ggiDEBUG("Entered ggimesa_genkgi_changed\n");
switch (whatchanged)
{
case GGI_CHG_APILIST:
{
char api[256];
char args[256];
int i;
const char *fname;
ggi_dlhandle *lib;
for (i = 0; ggiGetAPI(vis, i, api, args) == 0; i++)
{
strcat(api, "-mesa");
gl_ggiDEBUG("ggimesa_genkgi_changed: api=%s, i=%d\n", api, i);
fname = ggMatchConfig(_configHandle, api, NULL);
if (fname == NULL)
{
/* No special implementation for this sublib */
continue;
}
lib = ggiExtensionLoadDL(vis, fname, args, NULL);
}
}
break;
}
return 0;
}
int GGIdlinit(ggi_visual *vis, const char *args, void *argptr)
{
genkgi_hook_mesa *priv;
char libname[256], libargs[256];
int id, err;
struct stat junk;
ggifunc_getapi *oldgetapi;
gl_ggiDEBUG("display-fbdev-kgicon-mesa: GGIdlinit start\n");
GENKGI_PRIVATE(vis) = priv = malloc(sizeof(genkgi_hook_mesa));
if (priv == NULL)
{
fprintf(stderr, "Failed to allocate genkgi_hook!\n");
return GGI_DL_ERROR;
}
err = ggLoadConfig(conffile, &_configHandle);
if (err != GGI_OK)
{
gl_ggiPrint("display-fbdev: Couldn't open %s\n", conffile);
return err;
}
/* Hack city here. We need to probe the KGI driver properly to discover
* the acceleration type.
*/
priv->have_accel = 0;
#if 1
if (stat("/proc/savage4", &junk) == 0)
{
sprintf(priv->accel, "%s%s", accel_prefix, "savage4");
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;
ggiIndicateChange(vis, GGI_CHG_APILIST);
/* Give the accel sublibs a chance to set up a driver */
if (priv->have_accel == 1)
{
oldgetapi = vis->opdisplay->getapi;
vis->opdisplay->getapi = GGIMesa_genkgi_getapi;
changed(vis, GGI_CHG_APILIST);
/* If the accel sublibs didn't produce, back up
* and keep looking */
if ((LIBGGI_MESAEXT(vis)->update_state == NULL) ||
(LIBGGI_MESAEXT(vis)->setup_driver == NULL))
vis->opdisplay->getapi = oldgetapi;
}
gl_ggiDEBUG("display-fbdev-kgicon-mesa: GGIdlinit finished\n");
return 0;
}
int GGIdlcleanup(ggi_visual *vis)
{
return 0;
}
#include <ggi/internal/ggidlinit.h>

View File

@ -0,0 +1,333 @@
/* GGI-Driver for MESA
*
* Copyright (C) 1997 Uwe Maurer
*
* 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.
* ---------------------------------------------------------------------
* This code was derived from the following source of information:
*
* svgamesa.c and ddsample.c by Brian Paul
*
*/
#include <ggi/mesa/ggimesa.h>
#include <ggi/mesa/ggimesa_int.h>
#define RMASK ((1<<R)-1)
#define GMASK ((1<<G)-1)
#define BMASK ((1<<B)-1)
#define RS (8-R)
#define GS (8-G)
#define BS (8-B)
/**********************************************************************/
/***** Write spans of pixels *****/
/**********************************************************************/
void GGIwrite_ci32_span(const GLcontext *ctx,
GLuint n, GLint x, GLint y,
const GLuint ci[],
const GLubyte mask[])
{
FB_TYPE *fb=LFB(FB_TYPE,x,FLIP(y));
if (mask)
{
while (n--) {
if (*mask++) *fb=*ci;
fb++;
ci++;
}
}
else
{
while (n--) *fb++ = *ci++;
}
}
void GGIwrite_ci8_span(const GLcontext *ctx,
GLuint n, GLint x, GLint y,
const GLubyte ci[],
const GLubyte mask[] )
{
FB_TYPE *fb=LFB(FB_TYPE,x,FLIP(y));
if (mask)
{
while (n--) {
if (*mask++) *fb=*ci;
fb++;
ci++;
}
}
else
{
while (n--) *fb++ = *ci++;
}
}
void GGIwrite_rgba_span(const GLcontext *ctx,
GLuint n, GLint x, GLint y,
const GLubyte rgba[][4],
const GLubyte mask[])
{
FB_TYPE *fb=LFB(FB_TYPE,x,FLIP(y));
if (mask)
{
while (n--) {
if (*mask++) {
*fb= ((rgba[0][RCOMP]>>RS) << (G+B)) |
((rgba[0][GCOMP]>>GS) << B) |
((rgba[0][BCOMP]>>BS));
}
fb++;
rgba++;
}
}
else
{
while (n--) {
*fb++= ((rgba[0][RCOMP]>>RS) << (G+B)) |
((rgba[0][GCOMP]>>GS) << B)|
((rgba[0][BCOMP]>>BS));
rgba++;
}
}
}
void GGIwrite_rgb_span( const GLcontext *ctx,
GLuint n, GLint x, GLint y,
const GLubyte rgba[][3],
const GLubyte mask[] )
{
FB_TYPE *fb=LFB(FB_TYPE,x,FLIP(y));
if (mask)
{
while (n--) {
if (*mask++) {
*fb= ((rgba[0][RCOMP]>>RS) << (G+B)) |
((rgba[0][GCOMP]>>GS) << B) |
((rgba[0][BCOMP]>>BS));
}
fb++;
rgba++;
}
}
else
{
while (n--) {
*fb++= ((rgba[0][RCOMP]>>RS) << (G+B)) |
((rgba[0][GCOMP]>>GS) << B) |
((rgba[0][BCOMP]>>BS));
rgba++;
}
}
}
void GGIwrite_mono_span( const GLcontext *ctx,
GLuint n, GLint x, GLint y,
const GLubyte mask[])
{
FB_TYPE *fb;
FB_TYPE color;
if (mask)
{
fb=LFB(FB_TYPE,x,FLIP(y));
color=(FB_TYPE) GGICTX->color;
while (n--)
{
if (*mask++) *fb=color;
fb++;
}
}
else
{
ggiDrawHLine(VIS,x,FLIP(y),n);
}
}
/**********************************************************************/
/***** Read spans of pixels *****/
/**********************************************************************/
void GGIread_ci32_span(const GLcontext *ctx,
GLuint n, GLint x, GLint y, GLuint ci[])
{
FB_TYPE *fb=LFB(FB_TYPE,x,FLIP(y));
while (n--)
*ci++=(GLuint)*fb++;
}
void GGIread_rgba_span(const GLcontext *ctx,
GLuint n, GLint x, GLint y,
GLubyte rgba[][4])
{
FB_TYPE *fb=LFB(FB_TYPE,x,FLIP(y));
FB_TYPE color;
while (n--)
{
color=*fb++;
rgba[0][RCOMP] = (GLubyte) (color>>(G+B))<<RS;
rgba[0][GCOMP] = (GLubyte) ((color>>B)& ((1<<G)-1))<<GS;
rgba[0][BCOMP] = (GLubyte) (color & ((1<<B)-1))<<BS;
rgba[0][ACOMP] =0;
rgba++;
}
}
/**********************************************************************/
/***** Write arrays of pixels *****/
/**********************************************************************/
void GGIwrite_ci32_pixels(const GLcontext *ctx,
GLuint n, const GLint x[], const GLint y[],
const GLuint ci[], const GLubyte mask[] )
{
FB_TYPE *fb=LFB(FB_TYPE,0,0);
while (n--) {
if (*mask++) *(fb+ *x + FLIP(*y)*GGICTX->width)=*ci;
ci++;
x++;
y++;
}
}
void GGIwrite_mono_pixels(const GLcontext *ctx,
GLuint n,
const GLint x[], const GLint y[],
const GLubyte mask[] )
{
FB_TYPE *fb=LFB(FB_TYPE,0,0);
FB_TYPE color=(FB_TYPE) GGICTX->color;
while (n--) {
if (*mask++) *(fb+ *x + FLIP(*y)*GGICTX->width)=color;
x++;
y++;
}
}
void GGIwrite_rgba_pixels(const GLcontext *ctx,
GLuint n, const GLint x[], const GLint y[],
const GLubyte rgba[][4],
const GLubyte mask[] )
{
FB_TYPE *fb=LFB(FB_TYPE,0,0);
FB_TYPE color;
while (n--) {
if (*mask++) {
color= ((rgba[0][RCOMP]>>RS) << (G+B)) |
((rgba[0][GCOMP]>>GS) << B) |
((rgba[0][BCOMP]>>BS));
*(fb+ *x + FLIP(*y)*GGICTX->width)=color;
}
x++;y++;
rgba++;
}
}
/**********************************************************************/
/***** Read arrays of pixels *****/
/**********************************************************************/
void GGIread_ci32_pixels(const GLcontext *ctx,
GLuint n, const GLint x[], const GLint y[],
GLuint ci[], const GLubyte mask[])
{
FB_TYPE *fb=LFB(FB_TYPE,0,0);
while (n--) {
if (*mask++)
*ci=*(fb+ *x + FLIP(*y)*GGICTX->width);
ci++;
x++;
y++;
}
}
void GGIread_rgba_pixels(const GLcontext *ctx,
GLuint n, const GLint x[], const GLint y[],
GLubyte rgba[][4],
const GLubyte mask[] )
{
FB_TYPE *fb=LFB(FB_TYPE,0,0);
FB_TYPE color;
while (n--)
{
if (*mask++)
{
color=*(fb+ *x + FLIP(*y)*GGICTX->width);
rgba[0][RCOMP] =(GLubyte)(color>>(G+B))<<RS;
rgba[0][GCOMP] =(GLubyte)((color>>B)& ((1<<G)-1))<<GS;
rgba[0][BCOMP] =(GLubyte) (color & ((1<<B)-1))<<BS;
rgba[0][ACOMP] =0;
}
x++; y++;
rgba++;
}
}
int GGIsetup_driver(GGIMesaContext ggictx,struct ggi_mesa_info *info)
{
GLcontext *ctx=ggictx->gl_ctx;
ctx->Driver.WriteRGBASpan = GGIwrite_rgba_span;
ctx->Driver.WriteRGBSpan = GGIwrite_rgb_span;
ctx->Driver.WriteMonoRGBASpan = GGIwrite_mono_span;
ctx->Driver.WriteRGBAPixels = GGIwrite_rgba_pixels;
ctx->Driver.WriteMonoRGBAPixels = GGIwrite_mono_pixels;
ctx->Driver.WriteCI32Span = GGIwrite_ci32_span;
ctx->Driver.WriteCI8Span = GGIwrite_ci8_span;
ctx->Driver.WriteMonoCISpan = GGIwrite_mono_span;
ctx->Driver.WriteCI32Pixels = GGIwrite_ci32_pixels;
ctx->Driver.WriteMonoCIPixels = GGIwrite_mono_pixels;
ctx->Driver.ReadCI32Span = GGIread_ci32_span;
ctx->Driver.ReadRGBASpan = GGIread_rgba_span;
ctx->Driver.ReadCI32Pixels = GGIread_ci32_pixels;
ctx->Driver.ReadRGBAPixels = GGIread_rgba_pixels;
info->red_bits=R;
info->green_bits=G;
info->blue_bits=B;
return 0;
}
int GGIdlinit(ggi_visual_t vis,const char *version,void *argptr)
{
LIBGGI_MESAEXT(vis)->setup_driver=GGIsetup_driver;
return 0;
}
int GGIdlcleanup(ggi_visual_t vis)
{
return 0;
}

View File

@ -0,0 +1,35 @@
/* GGI-Driver for MESA
*
* Copyright (C) 1997 Uwe Maurer
*
* 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.
* ---------------------------------------------------------------------
* This code was derived from the following source of information:
*
* svgamesa.c and ddsample.c by Brian Paul
*
*/
#include <ggi/mesa/ggimesa.h>
#define R 5
#define G 5
#define B 5
#define FB_TYPE uint16
#define FB_BITS 15
#include "../common/linear.c"

View File

@ -0,0 +1,35 @@
/* GGI-Driver for MESA
*
* Copyright (C) 1997 Uwe Maurer
*
* 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.
* ---------------------------------------------------------------------
* This code was derived from the following source of information:
*
* svgamesa.c and ddsample.c by Brian Paul
*
*/
#include <ggi/mesa/ggimesa.h>
#define R 5
#define G 6
#define B 5
#define FB_TYPE uint16
#define FB_BITS 16
#include "../common/linear.c"

View File

@ -0,0 +1,35 @@
/* GGI-Driver for MESA
*
* Copyright (C) 1997 Uwe Maurer
*
* 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.
* ---------------------------------------------------------------------
* This code was derived from the following source of information:
*
* svgamesa.c and ddsample.c by Brian Paul
*
*/
#include <ggi/mesa/ggimesa.h>
#define R 8
#define G 8
#define B 8
#define FB_TYPE uint32
#define FB_BITS 24
#include "../common/linear.c"

View File

@ -0,0 +1,35 @@
/* GGI-Driver for MESA
*
* Copyright (C) 1997 Uwe Maurer
*
* 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.
* ---------------------------------------------------------------------
* This code was derived from the following source of information:
*
* svgamesa.c and ddsample.c by Brian Paul
*
*/
#include <ggi/mesa/ggimesa.h>
#define R 8
#define G 8
#define B 8
#define FB_TYPE uint32
#define FB_BITS 32
#include "../common/linear.c"

View File

@ -0,0 +1,35 @@
/* GGI-Driver for MESA
*
* Copyright (C) 1997 Uwe Maurer
*
* 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.
* ---------------------------------------------------------------------
* This code was derived from the following source of information:
*
* svgamesa.c and ddsample.c by Brian Paul
*
*/
#include <ggi/mesa/ggimesa.h>
#define R 3
#define G 3
#define B 2
#define FB_TYPE uint8
#define FB_BITS 8
#include "../common/linear.c"

View File

@ -0,0 +1,409 @@
/* GGI-Driver for MESA
*
* Copyright (C) 1997 Uwe Maurer
*
* 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.
* ---------------------------------------------------------------------
* This code was derived from the following source of information:
*
* svgamesa.c and ddsample.c by Brian Paul
*
*/
#include <stdio.h>
#include <ggi/internal/ggi-dl.h>
#include <ggi/mesa/ggimesa_int.h>
/**********************************************************************/
/***** Write spans of pixels *****/
/**********************************************************************/
void GGIwrite_ci32_span(const GLcontext *ctx,
GLuint n, GLint x, GLint y,
const GLuint ci[],
const GLubyte mask[] )
{
y=FLIP(y);
if (mask)
{
while (n--) {
if (*mask++) ggiPutPixel(VIS,x,y,*ci);
x++;
ci++;
}
}
else
{
while (n--) ggiPutPixel(VIS,x++,y,*ci++);
}
}
void GGIwrite_ci8_span(const GLcontext *ctx,
GLuint n, GLint x, GLint y,
const GLubyte ci[],
const GLubyte mask[] )
{
y=FLIP(y);
if (mask)
{
while (n--) {
if (*mask++) ggiPutPixel(VIS,x,y,*ci);
x++;
ci++;
}
}
else
{
while (n--) ggiPutPixel(VIS,x++,y,*ci++);
}
}
void GGIwrite_mono_span( const GLcontext *ctx,
GLuint n, GLint x, GLint y,
const GLubyte mask[] )
{
y=FLIP(y);
if (mask)
{
while (n--) {
if (*mask++) ggiDrawPixel(VIS,x,y);
x++;
}
}
else
{
ggiDrawHLine(VIS,x,y,n);
}
}
void GGIwrite_rgba_span( const GLcontext *ctx,
GLuint n, GLint x, GLint y,
const GLubyte rgba[][4],
const GLubyte mask[])
{
ggi_color rgb;
ggi_pixel col;
y=FLIP(y);
if (mask)
{
while (n--) {
if (*mask++)
{
rgb.r=(uint16)(rgba[0][RCOMP]) << SHIFT;
rgb.g=(uint16)(rgba[0][GCOMP]) << SHIFT;
rgb.b=(uint16)(rgba[0][BCOMP]) << SHIFT;
col=ggiMapColor(VIS,&rgb);
ggiPutPixel(VIS,x,y,col);
}
x++;
rgba++;
}
}
else
{
while (n--)
{
rgb.r=(uint16)(rgba[0][RCOMP]) << SHIFT;
rgb.g=(uint16)(rgba[0][GCOMP]) << SHIFT;
rgb.b=(uint16)(rgba[0][BCOMP]) << SHIFT;
col=ggiMapColor(VIS,&rgb);
ggiPutPixel(VIS,x++,y,col);
rgba++;
}
}
}
void GGIwrite_rgb_span( const GLcontext *ctx,
GLuint n, GLint x, GLint y,
const GLubyte rgba[][3],
const GLubyte mask[] )
{
ggi_color rgb;
ggi_pixel col;
y=FLIP(y);
if (mask)
{
while (n--) {
if (*mask++)
{
rgb.r=(uint16)(rgba[0][RCOMP]) << SHIFT;
rgb.g=(uint16)(rgba[0][GCOMP]) << SHIFT;
rgb.b=(uint16)(rgba[0][BCOMP]) << SHIFT;
col=ggiMapColor(VIS,&rgb);
ggiPutPixel(VIS,x,y,col);
}
x++;
rgba++;
}
}
else
{
while (n--)
{
rgb.r=(uint16)(rgba[0][RCOMP]) << SHIFT;
rgb.g=(uint16)(rgba[0][GCOMP]) << SHIFT;
rgb.b=(uint16)(rgba[0][BCOMP]) << SHIFT;
col=ggiMapColor(VIS,&rgb);
ggiPutPixel(VIS,x++,y,col);
rgba++;
}
}
}
/**********************************************************************/
/***** Read spans of pixels *****/
/**********************************************************************/
void GGIread_ci32_span( const GLcontext *ctx,
GLuint n, GLint x, GLint y, GLuint ci[])
{
y = FLIP(y);
while (n--)
ggiGetPixel(VIS, x++, y,ci++);
}
void GGIread_rgba_span( const GLcontext *ctx,
GLuint n, GLint x, GLint y,
GLubyte rgba[][4])
{
ggi_color rgb;
ggi_pixel col;
y=FLIP(y);
while (n--)
{
ggiGetPixel(VIS,x++,y,&col);
ggiUnmapPixel(VIS,col,&rgb);
rgba[0][RCOMP] = (GLubyte) (rgb.r >> SHIFT);
rgba[0][GCOMP] = (GLubyte) (rgb.g >> SHIFT);
rgba[0][BCOMP] = (GLubyte) (rgb.b >> SHIFT);
rgba[0][ACOMP] = 0;
rgba++;
}
}
/**********************************************************************/
/***** Write arrays of pixels *****/
/**********************************************************************/
void GGIwrite_ci32_pixels( const GLcontext *ctx,
GLuint n, const GLint x[], const GLint y[],
const GLuint ci[], const GLubyte mask[] )
{
while (n--) {
if (*mask++) ggiPutPixel(VIS,*x, FLIP(*y),*ci);
ci++;
x++;
y++;
}
}
void GGIwrite_mono_pixels( const GLcontext *ctx,
GLuint n,
const GLint x[], const GLint y[],
const GLubyte mask[] )
{
while (n--) {
if (*mask++) ggiDrawPixel(VIS,*x,FLIP(*y));
x++;
y++;
}
}
void GGIwrite_rgba_pixels( const GLcontext *ctx,
GLuint n, const GLint x[], const GLint y[],
const GLubyte rgba[][4],
const GLubyte mask[] )
{
ggi_pixel col;
ggi_color rgb;
while (n--) {
if (*mask++) {
rgb.r=(uint16)(rgba[0][RCOMP]) << SHIFT;
rgb.g=(uint16)(rgba[0][GCOMP]) << SHIFT;
rgb.b=(uint16)(rgba[0][BCOMP]) << SHIFT;
col=ggiMapColor(VIS,&rgb);
ggiPutPixel(VIS,*x,FLIP(*y),col);
}
x++;y++;
rgba++;
}
}
/**********************************************************************/
/***** Read arrays of pixels *****/
/**********************************************************************/
void GGIread_ci32_pixels( const GLcontext *ctx,
GLuint n, const GLint x[], const GLint y[],
GLuint ci[], const GLubyte mask[])
{
while (n--) {
if (*mask++)
ggiGetPixel(VIS, *x, FLIP(*y) ,ci);
ci++;
x++;
y++;
}
}
void GGIread_rgba_pixels( const GLcontext *ctx,
GLuint n, const GLint x[], const GLint y[],
GLubyte rgba[][4],
const GLubyte mask[] )
{
ggi_color rgb;
ggi_pixel col;
while (n--)
{
if (*mask++)
{
ggiGetPixel(VIS,*x,FLIP(*y),&col);
ggiUnmapPixel(VIS,col,&rgb);
rgba[0][RCOMP]= rgb.r >> SHIFT;
rgba[0][GCOMP]= rgb.g >> SHIFT;
rgba[0][BCOMP]= rgb.b >> SHIFT;
rgba[0][ACOMP]=0;
}
x++; y++;
rgba++;
}
}
triangle_func ggiGetTriangleFunc(GLcontext *ctx);
int GGIsetup_driver(GGIMesaContext ggictx,struct ggi_mesa_info *info)
{
GLcontext *ctx=ggictx->gl_ctx;
ctx->Driver.WriteRGBASpan = GGIwrite_rgba_span;
ctx->Driver.WriteRGBSpan = GGIwrite_rgb_span;
ctx->Driver.WriteMonoRGBASpan = GGIwrite_mono_span;
ctx->Driver.WriteRGBAPixels = GGIwrite_rgba_pixels;
ctx->Driver.WriteMonoRGBAPixels = GGIwrite_mono_pixels;
ctx->Driver.WriteCI32Span = GGIwrite_ci32_span;
ctx->Driver.WriteCI8Span = GGIwrite_ci8_span;
ctx->Driver.WriteMonoCISpan = GGIwrite_mono_span;
ctx->Driver.WriteCI32Pixels = GGIwrite_ci32_pixels;
ctx->Driver.WriteMonoCIPixels = GGIwrite_mono_pixels;
ctx->Driver.ReadCI32Span = GGIread_ci32_span;
ctx->Driver.ReadRGBASpan = GGIread_rgba_span;
ctx->Driver.ReadCI32Pixels = GGIread_ci32_pixels;
ctx->Driver.ReadRGBAPixels = GGIread_rgba_pixels;
return 0;
}
void GGIupdate_state(GLcontext *ctx)
{
ctx->Driver.TriangleFunc = ggiGetTriangleFunc(ctx);
}
void GGItriangle_flat(GLcontext *ctx,GLuint v0,GLuint v1,GLuint v2,GLuint pv)
{
#define SETUP_CODE \
GLubyte r = VB->ColorPtr->data[pv][0]; \
GLubyte g = VB->ColorPtr->data[pv][1]; \
GLubyte b = VB->ColorPtr->data[pv][2]; \
GLubyte a = VB->ColorPtr->data[pv][3]; \
(*ctx->Driver.Color)(ctx,r,g,b,a);
#define INNER_LOOP(LEFT,RIGHT,Y) \
ggiDrawHLine(VIS,LEFT,FLIP(Y),RIGHT-LEFT);
#include "tritemp.h"
}
void GGItriangle_flat_depth(GLcontext *ctx,GLuint v0,GLuint v1,
GLuint v2,GLuint pv)
{
#define INTERP_Z 1
#define SETUP_CODE \
GLubyte r = VB->ColorPtr->data[pv][0]; \
GLubyte g = VB->ColorPtr->data[pv][1]; \
GLubyte b = VB->ColorPtr->data[pv][2]; \
GLubyte a = VB->ColorPtr->data[pv][3]; \
(*ctx->Driver.Color)(ctx,r,g,b,a);
#define INNER_LOOP(LEFT,RIGHT,Y) \
{ \
GLint i,xx=LEFT,yy=FLIP(Y),n=RIGHT-LEFT,length=0; \
GLint startx=xx; \
for (i=0;i<n;i++){ \
GLdepth z=FixedToDepth(ffz); \
if (z<zRow[i]) \
{ \
zRow[i]=z; \
length++; \
} \
else \
{ \
if (length) \
{ \
ggiDrawHLine(VIS,startx,yy,length); \
length=0; \
} \
startx=xx+i+1; \
} \
ffz+=fdzdx; \
} \
if (length) ggiDrawHLine(VIS,startx,yy,length); \
}
#include "tritemp.h"
}
triangle_func ggiGetTriangleFunc(GLcontext *ctx)
{
if (ctx->Stencil.Enabled) return NULL;
if (ctx->Polygon.SmoothFlag) return NULL;
if (ctx->Polygon.StippleFlag) return NULL;
if (ctx->Texture.Enabled) return NULL;
if (ctx->Light.ShadeModel==GL_SMOOTH) return NULL;
if (ctx->Depth.Test && ctx->Depth.Func != GL_LESS) return NULL;
if (ctx->Depth.Test)
return GGItriangle_flat_depth;
return GGItriangle_flat;
}
int GGIdlinit(ggi_visual_t vis, const char *version, void *argptr)
{
LIBGGI_MESAEXT(vis)->update_state = GGIupdate_state;
LIBGGI_MESAEXT(vis)->setup_driver = GGIsetup_driver;
return 0;
}
int GGIdlcleanup(ggi_visual_t vis)
{
return 0;
}

View File

@ -0,0 +1,6 @@
# GGIMesa fbdev target configuration
.root: @ggi_libdir@/ggi/mesa/default
tgt-fbdev-kgicon-generic-mesa kgi/genkgi.so
# .include /usr/local/etc/ggi/mesa/genkgi.conf

View File

@ -0,0 +1,134 @@
/* $Id: fbdev_mode.c,v 1.1 1999/08/21 05:57:59 jtaylor Exp $
******************************************************************************
display-fbdev-mesa
Copyright (C) 1999 Creative Labs
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
THE AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
******************************************************************************
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <linux/fb.h>
#include <ggi/internal/ggi-dl.h>
#include <ggi/mesa/ggimesa_int.h>
#include <ggi/mesa/display/fbdev.h>
#ifndef MAP_FAILED
#define MAP_FAILED ((void*)-1)
#endif
#define FB_KLUDGE_FONTX 8
#define FB_KLUDGE_FONTY 16
#define FB_KLUDGE_TEXTMODE 13
#define TIMINGFILE "/etc/fb.modes"
int GGIMesa_fbdev_getapi(ggi_visual *vis, int num, char *apiname, char *arguments)
{
fbdev_hook_mesa *priv = GGIMESA_PRIVATE(vis);
strcpy(arguments, "");
switch(num)
{
case 0:
if (priv->oldpriv->have_accel)
{
strcpy(apiname, priv->oldpriv->accel);
return 0;
}
break;
}
return -1;
}
static int do_setmode(ggi_visual *vis)
{
fbdev_hook_mesa *priv = GGIMESA_PRIVATE(vis);
int err, id;
char libname[256], libargs[256];
ggi_graphtype gt;
_ggiZapMode(vis, ~GGI_DL_OPDISPLAY);
priv->have_accel = 0;
for (id = 1; GGIMesa_fbdev_getapi(vis, id, libname, libargs) == 0; id++)
{
if (_ggiOpenDL(vis, libname, libargs, NULL) == NULL)
{
fprintf(stderr, "display-fbdev-mesa: Error opening the "
"%s (%s) library.\n", libname, libargs);
return GGI_EFATAL;
}
gl_ggiDEBUG("Success in loading %s (%s)\n", libname, libargs);
}
if (priv->oldpriv->accel &&
_ggiOpenDL(vis, priv->accel, NULL, NULL) != NULL) {
priv->have_accel = 1;
}
else
{
priv->have_accel = 0;
}
vis->accelactive = 0;
ggiIndicateChange(vis, GGI_CHG_APILIST);
gl_ggiDEBUG("display-fbdev-mesa: do_setmode SUCCESS\n");
return 0;
}
int GGIMesa_fbdev_setmode(ggi_visual *vis, ggi_mode *mode)
{
int err;
if ((err = ggiCheckMode(vis, mode)) != 0) {
return err;
}
gl_ggiDEBUG("display-fbdev-mesa: setmode %dx%d#%dx%dF%d[0x%02x]\n",
mode->visible.x, mode->visible.y,
mode->virt.x, mode->virt.y,
mode->frames, mode->graphtype);
memcpy(LIBGGI_MODE(vis), mode, sizeof(ggi_mode));
/* Now actually set the mode */
err = do_setmode(vis);
if (err != 0) {
return err;
}
gl_ggiDEBUG("display-fbdev-mesa: setmode success.\n");
return 0;
}

View File

@ -0,0 +1,157 @@
/* $Id: fbdev_visual.c,v 1.1 1999/08/21 05:57:59 jtaylor Exp $
******************************************************************************
display-fbdev-mesa: visual handling
Copyright (C) 1998 Andrew Apted [andrew@ggi-project.org]
Copyright (C) 1999 Marcus Sundberg [marcus@ggi-project.org]
Copyright (C) 1999 Creative Labs
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
THE AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
******************************************************************************
*/
#include <ggi/internal/ggi-dl.h>
#include <ggi/mesa/ggimesa_int.h>
#include <ggi/mesa/display/fbdev.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <errno.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#ifdef HAVE_SYS_VT_H
#include <sys/vt.h>
#else
#include <linux/vt.h>
#endif
#ifdef HAVE_LINUX_KDEV_T_H
#include <linux/kdev_t.h>
#endif
#include <linux/tty.h>
#define MAX_DEV_LEN 63
#define DEFAULT_FBNUM 0
static char accel_prefix[] = "tgt-fbdev-";
#define PREFIX_LEN (sizeof(accel_prefix))
typedef struct {
int async;
char *str;
} accel_info;
static accel_info accel_strings[] = {
{ 0, "kgicon-generic",}, /* no accel - check for KGIcon */
{ 0, NULL }, /* Atari Blitter */
};
#define NUM_ACCELS (sizeof(accel_strings)/sizeof(accel_info))
/* FIXME: These should really be defined in the make system */
#define CONF_FILE "/usr/local/etc/ggi/mesa/targets/fbdev.conf"
void *_configHandle;
char confstub[512] = CONF_FILE;
char *conffile = confstub;
static int changed(ggi_visual_t vis, int whatchanged)
{
gl_ggiDEBUG("Entered ggimesa_fbdev_changed\n");
switch (whatchanged)
{
case GGI_CHG_APILIST:
{
char api[256];
char args[256];
int i;
const char *fname;
ggi_dlhandle *lib;
for (i = 0; ggiGetAPI(vis, i, api, args) == 0; i++)
{
strcat(api, "-mesa");
gl_ggiDEBUG("ggimesa_fbdev_changed: api=%s, i=%d\n", api, i);
fname = ggMatchConfig(_configHandle, api, NULL);
if (fname == NULL)
{
/* No special implementation for this sublib */
continue;
}
lib = ggiExtensionLoadDL(vis, fname, args, NULL);
}
}
break;
}
gl_ggiDEBUG("Leaving ggimesa_fbdev_changed\n");
return 0;
}
int GGIdlinit(ggi_visual *vis, const char *args, void *argptr)
{
fbdev_hook_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));
if (priv == NULL) {
fprintf(stderr, "Failed to allocate fbdev_hook!\n");
return GGI_DL_ERROR;
}
priv->oldpriv = LIBGGI_PRIVATE(vis); // Hook back
err = ggLoadConfig(conffile, &_configHandle);
if (err != GGI_OK)
{
gl_ggiPrint("display-fbdev: Couldn't open %s\n", conffile);
return err;
}
LIBGGI_MESAEXT(vis)->update_state = NULL;
LIBGGI_MESAEXT(vis)->setup_driver = NULL;
oldgetapi = vis->opdisplay->getapi;
vis->opdisplay->getapi = GGIMesa_fbdev_getapi;
changed(vis, GGI_CHG_APILIST);
/* If the accel sublibs didn't sucessfuly hook a driver,
* back up and keep looking */
if ((LIBGGI_MESAEXT(vis)->update_state == NULL) ||
(LIBGGI_MESAEXT(vis)->setup_driver == NULL))
{
vis->opdisplay->getapi = oldgetapi;
}
gl_ggiDEBUG("display-fbdev-mesa: GGIdlinit done\n");
return 0;
}
int GGIdlcleanup(ggi_visual *vis)
{
return 0;
}
#include <ggi/internal/ggidlinit.h>

View File

@ -0,0 +1 @@
/* Nothing here yet */

View File

@ -0,0 +1,20 @@
#ifndef _GGIMESA_DISPLAY_FBDEV_H
#define _GGIMESA_DISPLAY_FBDEV_H
#include <ggi/internal/ggi-dl.h>
#include <ggi/display/fbdev.h>
ggifunc_setmode GGIMesa_fbdev_setmode;
ggifunc_getapi GGIMesa_fbdev_getapi;
#define FBDEV_PRIV_MESA(vis) ((fbdev_hook_mesa *)(FBDEV_PRIV(vis)->accelpriv))
typedef struct fbdev_hook_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 */

View File

@ -0,0 +1,90 @@
/* GGI-Driver for MESA
*
* Copyright (C) 1997 Uwe Maurer
*
* 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.
* ---------------------------------------------------------------------
* This code was derived from the following source of information:
*
* svgamesa.c and ddsample.c by Brian Paul
*
*/
#ifndef _GGIMESA_H
#define _GGIMESA_H
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include "config.h"
#include "context.h"
#include "matrix.h"
#include "types.h"
#include "vb.h"
#include "macros.h"
#include "depth.h"
#undef ASSERT /* ASSERT is redefined */
#include <ggi/internal/internal.h>
#include <ggi/ggi_ext.h>
#include <ggi/ggi.h>
#include "GL/ggimesa.h"
struct ggi_mesa_info;
struct ggi_mesa_context
{
GLcontext *gl_ctx;
GLvisual *gl_vis;
GLframebuffer *gl_buffer;
ggi_visual_t ggi_vis;
ggi_coord origin;
int flip_y;
int width, height, stride; /* Stride is in pixels */
ggi_pixel color; /* Current color or index*/
ggi_pixel clearcolor;
void *lfb; /* Linear frame buffer*/
int viewport_init;
};
struct ggi_mesa_info
{
GLboolean rgb_flag;
GLboolean db_flag;
GLboolean alpha_flag;
GLint index_bits;
GLint red_bits, green_bits, blue_bits, alpha_bits;
GLint depth_bits, stencil_bits, accum_bits;
};
extern GGIMesaContext GGIMesa; /* The current context */
#define SHIFT (GGI_COLOR_PRECISION - 8)
#define GGICTX ((GGIMesaContext)ctx->DriverCtx)
#define VIS (GGICTX->ggi_vis)
#define FLIP(y) (GGICTX->flip_y-(y))
#define LFB(type,x,y) ((type *)GGICTX->lfb + (x) + (y) * GGICTX->stride)
#define CTX_OPMESA(ctx) \
((struct mesa_ext *)LIBGGI_EXT(((GGIMesaContext)ctx->DriverCtx)->ggi_vis, \
ggiMesaID))
#endif

View File

@ -0,0 +1,22 @@
#ifndef _GGI_MESA_INT_H
#define _GGI_MESA_INT_H
#include <ggi/internal/internal.h>
#include "ggimesa.h"
extern ggi_extid ggiMesaID;
ggifunc_setmode GGIMesa_setmode;
ggifunc_getapi GGIMesa_getapi;
typedef struct mesa_ext
{
void (*update_state)(GLcontext *ctx);
int (*setup_driver)(GGIMesaContext ctx, struct ggi_mesa_info *info);
void *private;
} mesaext;
#define LIBGGI_MESAEXT(vis) ((mesaext *)LIBGGI_EXT(vis,ggiMesaID))
#define GGIMESA_PRIVATE(vis) ((LIBGGI_MESAEXT(vis)->private))
#endif /* _GGI_MISC_INT_H */