diff options
Diffstat (limited to 'nx-X11/extras/Mesa_6.4.2/src/mesa/drivers/svga')
12 files changed, 1892 insertions, 0 deletions
diff --git a/nx-X11/extras/Mesa_6.4.2/src/mesa/drivers/svga/svgamesa.c b/nx-X11/extras/Mesa_6.4.2/src/mesa/drivers/svga/svgamesa.c new file mode 100644 index 000000000..7e783b540 --- /dev/null +++ b/nx-X11/extras/Mesa_6.4.2/src/mesa/drivers/svga/svgamesa.c @@ -0,0 +1,518 @@ +/* $Id: svgamesa.c,v 1.25 2004/11/29 17:30:21 brianp Exp $ */ + +/* + * Mesa 3-D graphics library + * Version: 5.0 + * Copyright (C) 1995-2002 Brian Paul + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free + * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + + +/* + * SVGA driver for Mesa. + * Original author: Brian Paul + * Additional authors: Slawomir Szczyrba <steev@hot.pl> (Mesa 3.2) + */ + + +#ifdef HAVE_CONFIG_H +#include "conf.h" +#endif + +#ifdef SVGA + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <vga.h> +#include "GL/svgamesa.h" +#include "buffers.h" +#include "context.h" +#include "extensions.h" +#include "imports.h" +#include "matrix.h" +#include "mtypes.h" +#include "swrast/swrast.h" +#include "svgapix.h" +#include "svgamesa8.h" +#include "svgamesa15.h" +#include "svgamesa16.h" +#include "svgamesa24.h" +#include "svgamesa32.h" + +struct svga_buffer SVGABuffer; +vga_modeinfo * SVGAInfo; +SVGAMesaContext SVGAMesa; /* the current context */ + +#ifdef SVGA_DEBUG + +#include <sys/types.h> +#include <signal.h> + +FILE * logfile; +char cbuf[1024]={0}; + +void SVGAlog(char * what) +{ + logfile=fopen("svgamesa.log","a"); + if (!logfile) return; + fprintf(logfile,"%s\n",what); + fclose(logfile); +} +#endif + +/**********************************************************************/ +/***** Init stuff... *****/ +/**********************************************************************/ + +int SVGAMesaInit( int GraphMode ) +{ + vga_init(); + if (!vga_hasmode(GraphMode)) + { + fprintf(stderr,"GraphMode %d unavailable...",GraphMode); +#ifdef SVGA_DEBUG + SVGAlog("SVGAMesaInit: invalid GraphMode (doesn't exist)"); +#endif + return(1); + } + SVGAInfo=vga_getmodeinfo(GraphMode); + if (SVGAInfo->flags & IS_MODEX) + { + fprintf(stderr,"ModeX not implemented..."); +#ifdef SVGA_DEBUG + SVGAlog("SVGAMesaInit: invalid GraphMode (ModeX)"); +#endif + return(2); + } + if (!SVGAInfo->bytesperpixel) + { + fprintf(stderr,"1 / 4 bit color not implemented..."); +#ifdef SVGA_DEBUG + SVGAlog("SVGAMesaInit: invalid GraphMode (1 or 4 bit)"); +#endif + return(3); + } + switch (SVGAInfo->colors) { + case 256: SVGABuffer.Depth = 8; break; + case 32768: SVGABuffer.Depth = 15; break; + case 65536: SVGABuffer.Depth = 16; break; + default: SVGABuffer.Depth = SVGAInfo->bytesperpixel<<3; break; + } + SVGABuffer.BufferSize=SVGAInfo->linewidth*SVGAInfo->height; +#ifdef SVGA_DEBUG + sprintf(cbuf,"SVGAMesaInit: double buffer info.\n" \ + " depth : %d\n" \ + " mode : %d\n" \ + " width : %d\n" \ + " height : %d\n" \ + " bufsize: %d\n", \ + SVGABuffer.Depth,GraphMode,SVGAInfo->linewidth, \ + SVGAInfo->height,SVGABuffer.BufferSize); + SVGAlog(cbuf); +#endif + SVGABuffer.FrontBuffer=(void*)malloc(SVGABuffer.BufferSize + 4); + if (!SVGABuffer.FrontBuffer) { + { + fprintf(stderr,"Not enough RAM for FRONT_LEFT_BUFFER..."); +#ifdef SVGA_DEBUG + SVGAlog("SVGAMesaInit: Not enough RAM (front buffer)"); +#endif + return(4); + } + } +#ifdef SVGA_DEBUG + sprintf(cbuf,"SVGAMesaInit: FrontBuffer - %p",SVGABuffer.FrontBuffer); + SVGAlog(cbuf); +#endif + SVGABuffer.BackBuffer=(void*)malloc(SVGABuffer.BufferSize + 4); + if (!SVGABuffer.BackBuffer) { + { + free(SVGABuffer.FrontBuffer); + fprintf(stderr,"Not enough RAM for BACK_LEFT_BUFFER..."); +#ifdef SVGA_DEBUG + SVGAlog("SVGAMesaInit: Not enough RAM (back buffer)"); +#endif + return(5); + } + } +#ifdef SVGA_DEBUG + sprintf(cbuf,"SVGAMesaInit: BackBuffer - %p",SVGABuffer.BackBuffer); + SVGAlog(cbuf); +#endif + + vga_setmode(GraphMode); + SVGABuffer.VideoRam=vga_getgraphmem(); +#ifdef SVGA_DEBUG + sprintf(cbuf,"SVGAMesaInit: VRAM - %p",SVGABuffer.VideoRam); + SVGAlog(cbuf); + sprintf(cbuf,"SVGAMesaInit: done. (Mode %d)",GraphMode); + SVGAlog(cbuf); +#endif + + SVGABuffer.DrawBuffer = SVGABuffer.BackBuffer; + SVGABuffer.ReadBuffer = SVGABuffer.BackBuffer; + + return 0; +} + +int SVGAMesaClose( void ) +{ + vga_setmode(TEXT); + free(SVGABuffer.FrontBuffer); + free(SVGABuffer.BackBuffer); + return 0; +} + +void SVGAMesaSetCI(int ndx, GLubyte red, GLubyte green, GLubyte blue) +{ + if (ndx<256) + vga_setpalette(ndx, red>>2, green>>2, blue>>2); +} + +/**********************************************************************/ +/***** Miscellaneous functions *****/ +/**********************************************************************/ + +static void copy_buffer( const GLubyte * buffer) { + int size = SVGABuffer.BufferSize, page = 0; + +#ifdef SVGA_DEBUG + sprintf(cbuf,"copy_buffer: copy %p to %p",buffer,SVGABuffer.VideoRam); + SVGAlog(cbuf); +#endif + + while(size>0) { + vga_setpage(page++); + if (size>>16) { + memcpy(SVGABuffer.VideoRam,buffer,0x10000); + buffer+=0x10000; + }else{ + memcpy(SVGABuffer.VideoRam,buffer,size & 0xffff); + } + size-=0xffff; + } +} + +static void get_buffer_size( GLframebuffer *buffer, GLuint *width, GLuint *height ) +{ + *width = SVGAMesa->width = vga_getxdim(); + *height = SVGAMesa->height = vga_getydim(); +} + +static void viewport(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h) +{ + /* poll for window size change and realloc software Z/stencil/etc if needed */ + _mesa_ResizeBuffersMESA(); +} + +static void set_buffer( GLcontext *ctx, GLframebuffer *colorBuffer, + GLenum buffer ) +{ + /* We can ignore colorBuffer since we don't support a MakeCurrentRead() + * function. + */ + (void) colorBuffer; + + if (buffer == GL_FRONT_LEFT) { + SVGABuffer.ReadBuffer = SVGABuffer.FrontBuffer; + SVGABuffer.DrawBuffer = SVGABuffer.FrontBuffer; +#if 0 + void * tmpptr; + /* vga_waitretrace(); */ + copy_buffer(SVGABuffer.FrontBuffer); + tmpptr=SVGABuffer.BackBuffer; + SVGABuffer.BackBuffer=SVGABuffer.FrontBuffer; + SVGABuffer.FrontBuffer=tmpptr; +#endif + } + else if (buffer == GL_BACK_LEFT) { + SVGABuffer.ReadBuffer = SVGABuffer.BackBuffer; + SVGABuffer.DrawBuffer = SVGABuffer.BackBuffer; +#if 0 + /* vga_waitretrace(); */ + copy_buffer(SVGABuffer.BackBuffer); +#endif + } +} + +/**********************************************************************/ +/***** *****/ +/**********************************************************************/ + +static void svgamesa_update_state( GLcontext *ctx, GLuint new_state ) +{ + struct swrast_device_driver *swdd = _swrast_GetDeviceDriverReference( ctx ); + + /* Initialize all the pointers in the DD struct. Do this whenever */ + /* a new context is made current or we change buffers via set_buffer! */ + + ctx->Driver.UpdateState = svgamesa_update_state; + + ctx->Driver.GetBufferSize = get_buffer_size; + ctx->Driver.ResizeBuffers = _swrast_alloc_buffers; + ctx->Driver.Viewport = viewport; + + /* Software rasterizer pixel paths: + */ + ctx->Driver.Accum = _swrast_Accum; + ctx->Driver.Bitmap = _swrast_Bitmap; + ctx->Driver.CopyPixels = _swrast_CopyPixels; + ctx->Driver.DrawPixels = _swrast_DrawPixels; + ctx->Driver.ReadPixels = _swrast_ReadPixels; + ctx->Driver.DrawBuffer = _swrast_DrawBuffer; + + /* Fill in the swrast driver interface: + */ + swdd->SetBuffer = set_buffer; + + switch (SVGABuffer.Depth) { + case 8: ctx->Driver.ClearIndex = __clear_index8; + ctx->Driver.Clear = __clear8; + + swdd->ReadCI32Span = __read_ci32_span8; + swdd->ReadCI32Pixels = __read_ci32_pixels8; + swdd->WriteCI8Span = __write_ci8_span8; + swdd->WriteCI32Span = __write_ci32_span8; + swdd->WriteCI32Pixels = __write_ci32_pixels8; + swdd->WriteMonoCISpan = __write_mono_ci_span8; + swdd->WriteMonoCIPixels = __write_mono_ci_pixels8; +#ifdef SVGA_DEBUG + SVGAlog("SVGAUpdateState: 8 bit mode."); +#endif + + break; + case 15: ctx->Driver.ClearColor = __clear_color15; + ctx->Driver.Clear = __clear15; + + swdd->ReadRGBASpan = __read_rgba_span15; + swdd->ReadRGBAPixels = __read_rgba_pixels15; + swdd->WriteRGBASpan = __write_rgba_span15; + swdd->WriteRGBAPixels = __write_rgba_pixels15; + swdd->WriteMonoRGBASpan = __write_mono_rgba_span15; + swdd->WriteMonoRGBAPixels = __write_mono_rgba_pixels15; +#ifdef SVGA_DEBUG + SVGAlog("SVGAUpdateState: 15 bit mode."); +#endif + break; + case 16: ctx->Driver.ClearColor = __clear_color16; + ctx->Driver.Clear = __clear16; + + swdd->ReadRGBASpan = __read_rgba_span16; + swdd->ReadRGBAPixels = __read_rgba_pixels16; + swdd->WriteRGBASpan = __write_rgba_span16; + swdd->WriteRGBAPixels = __write_rgba_pixels16; + swdd->WriteMonoRGBASpan = __write_mono_rgba_span16; + swdd->WriteMonoRGBAPixels = __write_mono_rgba_pixels16; + break; +#ifdef SVGA_DEBUG + SVGAlog("SVGAUpdateState: 16 bit mode."); +#endif + case 24: ctx->Driver.ClearColor = __clear_color24; + ctx->Driver.Clear = __clear24; + + swdd->ReadRGBASpan = __read_rgba_span24; + swdd->ReadRGBAPixels = __read_rgba_pixels24; + swdd->WriteRGBASpan = __write_rgba_span24; + swdd->WriteRGBAPixels = __write_rgba_pixels24; + swdd->WriteMonoRGBASpan = __write_mono_rgba_span24; + swdd->WriteMonoRGBAPixels = __write_mono_rgba_pixels24; + break; +#ifdef SVGA_DEBUG + SVGAlog("SVGAUpdateState: 32 bit mode."); +#endif + case 32: ctx->Driver.ClearColor = __clear_color32; + ctx->Driver.Clear = __clear32; + + swdd->ReadRGBASpan = __read_rgba_span32; + swdd->ReadRGBAPixels = __read_rgba_pixels32; + swdd->WriteRGBASpan = __write_rgba_span32; + swdd->WriteRGBAPixels = __write_rgba_pixels32; + swdd->WriteMonoRGBASpan = __write_mono_rgba_span32; + swdd->WriteMonoRGBAPixels = __write_mono_rgba_pixels32; + } +} + +/* + * Create a new VGA/Mesa context and return a handle to it. + */ +SVGAMesaContext SVGAMesaCreateContext( GLboolean doubleBuffer ) +{ + SVGAMesaContext ctx; +#ifndef DEV + GLboolean rgb_flag; + GLfloat redscale, greenscale, bluescale, alphascale; + GLint index_bits; + GLint redbits, greenbits, bluebits, alphabits; + + /* determine if we're in RGB or color index mode */ + if ((SVGABuffer.Depth==32) || (SVGABuffer.Depth==24)) { + rgb_flag = GL_TRUE; + redscale = greenscale = bluescale = alphascale = 255.0; + redbits = greenbits = bluebits = 8; + alphabits = 0; + index_bits = 0; + } + else if (SVGABuffer.Depth==8) { + rgb_flag = GL_FALSE; + redscale = greenscale = bluescale = alphascale = 0.0; + redbits = greenbits = bluebits = alphabits = 0; + index_bits = 8; + } + else if (SVGABuffer.Depth==15) { + rgb_flag = GL_TRUE; + redscale = greenscale = bluescale = alphascale = 31.0; + redbits = greenbits = bluebits = 5; + alphabits = 0; + index_bits = 0; + } + else if (SVGABuffer.Depth==16) { + rgb_flag = GL_TRUE; + redscale = bluescale = alphascale = 31.0; + greenscale = 63.0; + redbits = bluebits = 5; + greenbits = 6; + alphabits = 0; + index_bits = 0; + } + + ctx = (SVGAMesaContext) calloc( 1, sizeof(struct svgamesa_context) ); + if (!ctx) { + return NULL; + } + + ctx->gl_vis = _mesa_create_visual( rgb_flag, + doubleBuffer, + GL_FALSE, /* stereo */ + redbits, greenbits, + bluebits, alphabits, + index_bits, + 16, /* depth_size */ + 8, /* stencil_size */ + 16, 16, 16, 16, /* accum_size */ + 1 /* samples */ + ); + + ctx->gl_ctx = _mesa_create_context( ctx->gl_vis, + NULL, /* share list context */ + (void *) ctx, GL_FALSE ); + + _mesa_enable_sw_extensions(ctx->gl_ctx); + _mesa_enable_1_3_extensions(ctx->gl_ctx); + + ctx->gl_buffer = _mesa_create_framebuffer( ctx->gl_vis, + ctx->gl_vis->depthBits > 0, + ctx->gl_vis->stencilBits > 0, + ctx->gl_vis->accumRedBits > 0, + ctx->gl_vis->alphaBits > 0 ); + + ctx->width = ctx->height = 0; /* temporary until first "make-current" */ +#endif + return ctx; +} + +/* + * Destroy the given VGA/Mesa context. + */ +void SVGAMesaDestroyContext( SVGAMesaContext ctx ) +{ +#ifndef DEV + if (ctx) { + _mesa_destroy_visual( ctx->gl_vis ); + _mesa_destroy_context( ctx->gl_ctx ); + _mesa_destroy_framebuffer( ctx->gl_buffer ); + free( ctx ); + if (ctx==SVGAMesa) { + SVGAMesa = NULL; + } + } +#endif +} + +/* + * Make the specified VGA/Mesa context the current one. + */ +void SVGAMesaMakeCurrent( SVGAMesaContext ctx ) +{ +#ifndef DEV + SVGAMesa = ctx; + svgamesa_update_state( ctx->gl_ctx, ~0 ); + _mesa_make_current( ctx->gl_ctx, ctx->gl_buffer ); + + if (ctx->width==0 || ctx->height==0) { + ctx->width = vga_getxdim(); + ctx->height = vga_getydim(); + } +#endif +} + +/* + * Return a handle to the current VGA/Mesa context. + */ +SVGAMesaContext SVGAMesaGetCurrentContext( void ) +{ + return SVGAMesa; +} + +/* + * Swap front/back buffers for current context if double buffered. + */ +void SVGAMesaSwapBuffers( void ) +{ +#if 000 + void * tmpptr; +#endif + + /* vga_waitretrace(); */ + copy_buffer(SVGABuffer.BackBuffer); + +#ifndef DEV + _mesa_notifySwapBuffers( SVGAMesa->gl_ctx ); + if (SVGAMesa->gl_vis->doubleBufferMode) +#endif /* DEV */ + { +#ifdef SVGA_DEBUG + sprintf(cbuf,"SVGAMesaSwapBuffers : Swapping..."); + SVGAlog(cbuf); +#endif /* SVGA_DEBUG */ +#if 000 + tmpptr=SVGABuffer.BackBuffer; + SVGABuffer.BackBuffer=SVGABuffer.FrontBuffer; + SVGABuffer.FrontBuffer=tmpptr; +#endif +#ifdef SVGA_DEBUG + sprintf(cbuf,"SVGAMesaSwapBuffers : WriteBuffer : %p\n" + " Readbuffer : %p", \ + SVGABuffer.BackBuffer, SVGABuffer.FrontBuffer ); + SVGAlog(cbuf); +#endif /* SVGA_DEBUG */ + } +} + +#else /*SVGA*/ + +/* + * Need this to provide at least one external definition when SVGA is + * not defined on the compiler command line. + */ +extern int gl_svga_dummy_function(void); +int gl_svga_dummy_function(void) +{ + return 0; +} + +#endif /*SVGA*/ + diff --git a/nx-X11/extras/Mesa_6.4.2/src/mesa/drivers/svga/svgamesa15.c b/nx-X11/extras/Mesa_6.4.2/src/mesa/drivers/svga/svgamesa15.c new file mode 100644 index 000000000..54b6c977a --- /dev/null +++ b/nx-X11/extras/Mesa_6.4.2/src/mesa/drivers/svga/svgamesa15.c @@ -0,0 +1,217 @@ +/* $Id: svgamesa15.c,v 1.11 2002/11/11 18:42:39 brianp Exp $ */ + +/* + * Mesa 3-D graphics library + * Version: 5.0 + * Copyright (C) 1995-2002 Brian Paul + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free + * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + + +/* + * SVGA driver for Mesa. + * Original author: Brian Paul + * Additional authors: Slawomir Szczyrba <steev@hot.pl> (Mesa 3.2) + */ + +#ifdef HAVE_CONFIG_H +#include "conf.h" +#endif + +#ifdef SVGA + +#include "svgapix.h" +#include "svgamesa15.h" +#include "swrast/swrast.h" + + +static void __svga_drawpixel15(int x, int y, unsigned long c) +{ + unsigned long offset; + GLshort *shortBuffer=(void *)SVGABuffer.DrawBuffer; + y = SVGAInfo->height-y-1; + offset = y * SVGAInfo->width + x; + shortBuffer[offset]=c; +} + +static unsigned long __svga_getpixel15(int x, int y) +{ + unsigned long offset; + GLshort *shortBuffer=(void *)SVGABuffer.ReadBuffer; + y = SVGAInfo->height-y-1; + offset = y * SVGAInfo->width + x; + return shortBuffer[offset]; +} + +void __clear_color15( GLcontext *ctx, const GLfloat color[4] ) +{ + GLubyte col[3]; + CLAMPED_FLOAT_TO_UBYTE(col[0], color[0]); + CLAMPED_FLOAT_TO_UBYTE(col[1], color[1]); + CLAMPED_FLOAT_TO_UBYTE(col[2], color[2]); + SVGAMesa->clear_hicolor=(col[0]>>3)<<10 | (col[1]>>3)<<5 | (col[2]>>3); +/* SVGAMesa->clear_hicolor=(red)<<10 | (green)<<5 | (blue);*/ +} + +void __clear15( GLcontext *ctx, GLbitfield mask, GLboolean all, + GLint x, GLint y, GLint width, GLint height ) +{ + int i, j; + + if (mask & DD_FRONT_LEFT_BIT) { + GLshort *shortBuffer=(void *)SVGABuffer.FrontBuffer; + if (all) { + for (i=0;i<SVGABuffer.BufferSize / 2;i++) + shortBuffer[i]=SVGAMesa->clear_hicolor; + } + else { + GLubyte *tmp = SVGABuffer.DrawBuffer; + SVGABuffer.DrawBuffer = SVGABuffer.FrontBuffer; + for (i=x;i<width;i++) + for (j=y;j<height;j++) + __svga_drawpixel15(i,j,SVGAMesa->clear_hicolor); + SVGABuffer.DrawBuffer = tmp; + } + mask &= ~DD_FRONT_LEFT_BIT; + } + if (mask & DD_BACK_LEFT_BIT) { + GLshort *shortBuffer=(void *)SVGABuffer.BackBuffer; + if (all) { + for (i=0;i<SVGABuffer.BufferSize / 2;i++) + shortBuffer[i]=SVGAMesa->clear_hicolor; + } + else { + GLubyte *tmp = SVGABuffer.DrawBuffer; + SVGABuffer.DrawBuffer = SVGABuffer.BackBuffer; + for (i=x;i<width;i++) + for (j=y;j<height;j++) + __svga_drawpixel15(i,j,SVGAMesa->clear_hicolor); + SVGABuffer.DrawBuffer = tmp; + } + mask &= ~DD_BACK_LEFT_BIT; + } + + if (mask) + _swrast_Clear( ctx, mask, all, x, y, width, height ); +} + +void __write_rgba_span15( const GLcontext *ctx, GLuint n, GLint x, GLint y, + const GLubyte rgba[][4], const GLubyte mask[] ) +{ + int i; + if (mask) { + /* draw some pixels */ + for (i=0; i<n; i++, x++) { + if (mask[i]) { + __svga_drawpixel15( x, y, (rgba[i][RCOMP]>>3)<<10 | \ + (rgba[i][GCOMP]>>3)<<5 | \ + (rgba[i][BCOMP]>>3)); + } + } + } + else { + /* draw all pixels */ + for (i=0; i<n; i++, x++) { + __svga_drawpixel15( x, y, (rgba[i][RCOMP]>>3)<<10 | \ + (rgba[i][GCOMP]>>3)<<5 | \ + (rgba[i][BCOMP]>>3)); + } + } +} + +void __write_mono_rgba_span15( const GLcontext *ctx, + GLuint n, GLint x, GLint y, + const GLchan color[4], const GLubyte mask[]) +{ + GLushort hicolor = (color[RCOMP] >> 3) << 10 | + (color[GCOMP] >> 3) << 5 | + (color[BCOMP] >> 3); + int i; + for (i=0; i<n; i++, x++) { + if (mask[i]) { + __svga_drawpixel15( x, y, hicolor); + } + } +} + +void __read_rgba_span15( const GLcontext *ctx, GLuint n, GLint x, GLint y, + GLubyte rgba[][4] ) +{ + int i,pix; + for (i=0; i<n; i++, x++) { + pix = __svga_getpixel15( x, y); + rgba[i][RCOMP] = ((pix>>10)<<3) & 0xff; + rgba[i][GCOMP] = ((pix>> 5)<<3) & 0xff; + rgba[i][BCOMP] = ((pix )<<3) & 0xff; + } +} + +void __write_rgba_pixels15( const GLcontext *ctx, + GLuint n, const GLint x[], const GLint y[], + const GLubyte rgba[][4], const GLubyte mask[] ) +{ + int i; + for (i=0; i<n; i++) { + if (mask[i]) { + __svga_drawpixel15( x[i], y[i], (rgba[i][RCOMP]>>3)<<10 | \ + (rgba[i][GCOMP]>>3)<<5 | \ + (rgba[i][BCOMP]>>3)); + } + } +} + + +void __write_mono_rgba_pixels15( const GLcontext *ctx, + GLuint n, + const GLint x[], const GLint y[], + const GLchan color[4], const GLubyte mask[] ) +{ + GLushort hicolor = (color[RCOMP] >> 3) << 10 | + (color[GCOMP] >> 3) << 5 | + (color[BCOMP] >> 3); + int i; + /* use current rgb color */ + for (i=0; i<n; i++) { + if (mask[i]) { + __svga_drawpixel15( x[i], y[i], hicolor ); + } + } +} + +void __read_rgba_pixels15( const GLcontext *ctx, + GLuint n, const GLint x[], const GLint y[], + GLubyte rgba[][4], const GLubyte mask[] ) +{ + int i,pix; + for (i=0; i<n; i++,x++) { + pix = __svga_getpixel15( x[i], y[i] ); + rgba[i][RCOMP] = ((pix>>10)<<3) & 0xff; + rgba[i][GCOMP] = ((pix>> 5)<<3) & 0xff; + rgba[i][BCOMP] = ((pix )<<3) & 0xff; + } +} + +#else + + +/* silence compiler warning */ +extern void _mesa_svga15_dummy_function(void); +void _mesa_svga15_dummy_function(void) +{ +} + + +#endif diff --git a/nx-X11/extras/Mesa_6.4.2/src/mesa/drivers/svga/svgamesa15.h b/nx-X11/extras/Mesa_6.4.2/src/mesa/drivers/svga/svgamesa15.h new file mode 100644 index 000000000..3ed7db82e --- /dev/null +++ b/nx-X11/extras/Mesa_6.4.2/src/mesa/drivers/svga/svgamesa15.h @@ -0,0 +1,43 @@ +/* $Id: svgamesa15.h,v 1.7 2002/11/11 18:42:39 brianp Exp $ */ + +/* + * Mesa 3-D graphics library + * Version: 5.0 + * Copyright (C) 1995-2002 Brian Paul + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free + * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + + +/* + * SVGA driver for Mesa. + * Original author: Brian Paul + * Additional authors: Slawomir Szczyrba <steev@hot.pl> (Mesa 3.2) + */ + + +#ifndef SVGA_MESA_15_H +#define SVGA_MESA_15_H + +extern void __clear_color15( GLcontext *ctx, const GLfloat color[4] ); +extern void __clear15( GLcontext *ctx, GLbitfield mask, GLboolean all, GLint x, GLint y, GLint width, GLint height ); +extern void __write_rgba_span15( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLubyte rgba[][4], const GLubyte mask[] ); +extern void __write_mono_rgba_span15( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLchan color[4], const GLubyte mask[]); +extern void __read_rgba_span15( const GLcontext *ctx, GLuint n, GLint x, GLint y, GLubyte rgba[][4] ); +extern void __write_rgba_pixels15( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte rgba[][4], const GLubyte mask[] ); +extern void __write_mono_rgba_pixels15( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], const GLchan color[4], const GLubyte mask[] ); +extern void __read_rgba_pixels15( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], GLubyte rgba[][4], const GLubyte mask[] ); + +#endif /* SVGA_MESA_15_H */ diff --git a/nx-X11/extras/Mesa_6.4.2/src/mesa/drivers/svga/svgamesa16.c b/nx-X11/extras/Mesa_6.4.2/src/mesa/drivers/svga/svgamesa16.c new file mode 100644 index 000000000..72ac81832 --- /dev/null +++ b/nx-X11/extras/Mesa_6.4.2/src/mesa/drivers/svga/svgamesa16.c @@ -0,0 +1,215 @@ +/* $Id: svgamesa16.c,v 1.11 2002/11/11 18:42:40 brianp Exp $ */ + +/* + * Mesa 3-D graphics library + * Version: 5.0 + * Copyright (C) 1995-2002 Brian Paul + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free + * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + + +/* + * SVGA driver for Mesa. + * Original author: Brian Paul + * Additional authors: Slawomir Szczyrba <steev@hot.pl> (Mesa 3.2) + */ + +#ifdef HAVE_CONFIG_H +#include "conf.h" +#endif + +#ifdef SVGA + +#include "svgapix.h" +#include "svgamesa16.h" +#include "swrast/swrast.h" + + +static void __svga_drawpixel16(int x, int y, unsigned long c) +{ + unsigned long offset; + GLshort *shortBuffer=(void *)SVGABuffer.DrawBuffer; + y = SVGAInfo->height-y-1; + offset = y * SVGAInfo->width + x; + shortBuffer[offset]=c; +} + +static unsigned long __svga_getpixel16(int x, int y) +{ + unsigned long offset; + + GLshort *shortBuffer=(void *)SVGABuffer.ReadBuffer; + y = SVGAInfo->height-y-1; + offset = y * SVGAInfo->width + x; + return shortBuffer[offset]; +} + +void __clear_color16( GLcontext *ctx, const GLfloat color[4] ) +{ + GLubyte col[3]; + CLAMPED_FLOAT_TO_UBYTE(col[0], color[0]); + CLAMPED_FLOAT_TO_UBYTE(col[1], color[1]); + CLAMPED_FLOAT_TO_UBYTE(col[2], color[2]); + SVGAMesa->clear_hicolor = (col[0] >> 3) << 11 | + (col[1] >> 2) << 5 | + (col[2] >> 3); +/* SVGAMesa->clear_hicolor=(red)<<11 | (green)<<5 | (blue); */ +} + +void __clear16( GLcontext *ctx, GLbitfield mask, GLboolean all, + GLint x, GLint y, GLint width, GLint height ) +{ + int i,j; + + if (mask & DD_FRONT_LEFT_BIT) { + if (all) { + GLshort *shortBuffer=(void *)SVGABuffer.FrontBuffer; + for (i=0;i<SVGABuffer.BufferSize / 2;i++) + shortBuffer[i]=SVGAMesa->clear_hicolor; + } + else { + GLubyte *tmp = SVGABuffer.DrawBuffer; + SVGABuffer.DrawBuffer = SVGABuffer.FrontBuffer; + for (i=x;i<width;i++) + for (j=y;j<height;j++) + __svga_drawpixel16(i,j,SVGAMesa->clear_hicolor); + SVGABuffer.DrawBuffer = tmp; + } + mask &= ~DD_FRONT_LEFT_BIT; + } + if (mask & DD_BACK_LEFT_BIT) { + if (all) { + GLshort *shortBuffer=(void *)SVGABuffer.BackBuffer; + for (i=0;i<SVGABuffer.BufferSize / 2;i++) + shortBuffer[i]=SVGAMesa->clear_hicolor; + } + else { + GLubyte *tmp = SVGABuffer.DrawBuffer; + SVGABuffer.DrawBuffer = SVGABuffer.BackBuffer; + for (i=x;i<width;i++) + for (j=y;j<height;j++) + __svga_drawpixel16(i,j,SVGAMesa->clear_hicolor); + SVGABuffer.DrawBuffer = tmp; + } + mask &= ~DD_BACK_LEFT_BIT; + } + + if (mask) + _swrast_Clear( ctx, mask, all, x, y, width, height ); +} + +void __write_rgba_span16( const GLcontext *ctx, GLuint n, GLint x, GLint y, + const GLubyte rgba[][4], const GLubyte mask[] ) +{ + int i; + if (mask) { + /* draw some pixels */ + for (i=0; i<n; i++, x++) { + if (mask[i]) { + __svga_drawpixel16( x, y, (rgba[i][RCOMP]>>3)<<11 | \ + (rgba[i][GCOMP]>>2)<<5 | \ + (rgba[i][BCOMP]>>3)); + } + } + } + else { + /* draw all pixels */ + for (i=0; i<n; i++, x++) { + __svga_drawpixel16( x, y, (rgba[i][RCOMP]>>3)<<11 | \ + (rgba[i][GCOMP]>>2)<<5 | \ + (rgba[i][BCOMP]>>3)); + } + } +} + +void __write_mono_rgba_span16( const GLcontext *ctx, + GLuint n, GLint x, GLint y, + const GLchan color[4], const GLubyte mask[]) +{ + GLushort hicolor=(color[RCOMP]>>3)<<11 | (color[GCOMP]>>2)<<5 | (color[BCOMP]>>3); + int i; + for (i=0; i<n; i++, x++) { + if (mask[i]) { + __svga_drawpixel16( x, y, hicolor); + } + } +} + +void __read_rgba_span16( const GLcontext *ctx, GLuint n, GLint x, GLint y, + GLubyte rgba[][4] ) +{ + int i,pix; + for (i=0; i<n; i++, x++) { + pix = __svga_getpixel16( x, y ); + rgba[i][RCOMP] = ((pix>>11)<<3) & 0xff; + rgba[i][GCOMP] = ((pix>> 5)<<2) & 0xff; + rgba[i][BCOMP] = ((pix )<<3) & 0xff; + } +} + +void __write_rgba_pixels16( const GLcontext *ctx, + GLuint n, const GLint x[], const GLint y[], + const GLubyte rgba[][4], const GLubyte mask[] ) +{ + int i; + for (i=0; i<n; i++) { + if (mask[i]) { + __svga_drawpixel16( x[i], y[i], (rgba[i][RCOMP]>>3)<<11 | \ + (rgba[i][GCOMP]>>2)<<5 | \ + (rgba[i][BCOMP]>>3)); + } + } +} + + +void __write_mono_rgba_pixels16( const GLcontext *ctx, + GLuint n, + const GLint x[], const GLint y[], + const GLchan color[4], const GLubyte mask[] ) +{ + GLushort hicolor=(color[RCOMP]>>3)<<11 | (color[GCOMP]>>2)<<5 | (color[BCOMP]>>3); + int i; + for (i=0; i<n; i++) { + if (mask[i]) { + __svga_drawpixel16( x[i], y[i], hicolor ); + } + } +} + +void __read_rgba_pixels16( const GLcontext *ctx, + GLuint n, const GLint x[], const GLint y[], + GLubyte rgba[][4], const GLubyte mask[] ) +{ + int i,pix; + for (i=0; i<n; i++,x++) { + pix = __svga_getpixel16( x[i], y[i] ); + rgba[i][RCOMP] = ((pix>>11)<<3) & 0xff; + rgba[i][GCOMP] = ((pix>> 5)<<2) & 0xff; + rgba[i][BCOMP] = ((pix )<<3) & 0xff; + } +} + +#else + + +/* silence compiler warning */ +extern void _mesa_svga16_dummy_function(void); +void _mesa_svga16_dummy_function(void) +{ +} + + +#endif diff --git a/nx-X11/extras/Mesa_6.4.2/src/mesa/drivers/svga/svgamesa16.h b/nx-X11/extras/Mesa_6.4.2/src/mesa/drivers/svga/svgamesa16.h new file mode 100644 index 000000000..247c1f404 --- /dev/null +++ b/nx-X11/extras/Mesa_6.4.2/src/mesa/drivers/svga/svgamesa16.h @@ -0,0 +1,44 @@ +/* $Id: svgamesa16.h,v 1.6 2002/11/11 18:42:41 brianp Exp $ */ + +/* + * Mesa 3-D graphics library + * Version: 5.0 + * Copyright (C) 1995-2002 Brian Paul + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free + * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + + +/* + * SVGA driver for Mesa. + * Original author: Brian Paul + * Additional authors: Slawomir Szczyrba <steev@hot.pl> (Mesa 3.2) + */ + + +#ifndef SVGA_MESA_16_H +#define SVGA_MESA_16_H + +extern void __clear_color16( GLcontext *ctx, const GLfloat color[4] ); +extern void __clear16( GLcontext *ctx, GLbitfield mask, GLboolean all, GLint x, GLint y, GLint width, GLint height ); +extern void __write_rgba_span16( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLubyte rgba[][4], const GLubyte mask[] ); +extern void __write_mono_rgba_span16( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLchan color[4], const GLubyte mask[]); +extern void __read_rgba_span16( const GLcontext *ctx, GLuint n, GLint x, GLint y, GLubyte rgba[][4] ); +extern void __write_rgba_pixels16( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte rgba[][4], const GLubyte mask[] ); +extern void __write_mono_rgba_pixels16( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], const GLchan color[4], const GLubyte mask[] ); +extern void __read_rgba_pixels16( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], GLubyte rgba[][4], const GLubyte mask[] ); + +#endif /* SVGA_MESA_16_H */ + diff --git a/nx-X11/extras/Mesa_6.4.2/src/mesa/drivers/svga/svgamesa24.c b/nx-X11/extras/Mesa_6.4.2/src/mesa/drivers/svga/svgamesa24.c new file mode 100644 index 000000000..07491cc67 --- /dev/null +++ b/nx-X11/extras/Mesa_6.4.2/src/mesa/drivers/svga/svgamesa24.c @@ -0,0 +1,239 @@ +/* $Id: svgamesa24.c,v 1.12 2002/11/11 18:42:41 brianp Exp $ */ + +/* + * Mesa 3-D graphics library + * Version: 5.0 + * Copyright (C) 1995-2002 Brian Paul + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free + * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + + +/* + * SVGA driver for Mesa. + * Original author: Brian Paul + * Additional authors: Slawomir Szczyrba <steev@hot.pl> (Mesa 3.2) + */ + +#ifdef HAVE_CONFIG_H +#include "conf.h" +#endif + +#ifdef SVGA + +#include "svgapix.h" +#include "svgamesa24.h" +#include "swrast/swrast.h" + + +#if 0 +/* this doesn't compile with GCC on RedHat 6.1 */ +static inline int RGB2BGR24(int c) +{ + asm("rorw $8, %0\n" + "rorl $16, %0\n" + "rorw $8, %0\n" + "shrl $8, %0\n" + : "=q"(c):"0"(c)); + return c; +} +#else +static unsigned long RGB2BGR24(unsigned long color) +{ + return (color & 0xff00)|(color>>16)|((color & 0xff)<<16); +} +#endif + +static void __svga_drawpixel24(int x, int y, GLubyte r, GLubyte g, GLubyte b) +{ + unsigned long offset; + + _RGB *rgbBuffer=(void *)SVGABuffer.DrawBuffer; + y = SVGAInfo->height-y-1; + offset = y * SVGAInfo->width + x; + + rgbBuffer[offset].r=r; + rgbBuffer[offset].g=g; + rgbBuffer[offset].b=b; +} + +static unsigned long __svga_getpixel24(int x, int y) +{ + unsigned long offset; + + _RGB *rgbBuffer=(void *)SVGABuffer.ReadBuffer; + y = SVGAInfo->height-y-1; + offset = y * SVGAInfo->width + x; + return rgbBuffer[offset].r<<16 | rgbBuffer[offset].g<<8 | rgbBuffer[offset].b; +} + +void __clear_color24( GLcontext *ctx, const GLfloat color[4] ) +{ + GLubyte col[3]; + CLAMPED_FLOAT_TO_UBYTE(col[0], color[0]); + CLAMPED_FLOAT_TO_UBYTE(col[1], color[1]); + CLAMPED_FLOAT_TO_UBYTE(col[2], color[2]); + SVGAMesa->clear_red = col[0]; + SVGAMesa->clear_green = col[1]; + SVGAMesa->clear_blue = col[2]; +/* SVGAMesa->clear_truecolor = red<<16 | green<<8 | blue; */ +} + +void __clear24( GLcontext *ctx, GLbitfield mask, GLboolean all, + GLint x, GLint y, GLint width, GLint height ) +{ + int i,j; + + if (mask & DD_FRONT_LEFT_BIT) { + if (all) { + _RGB *rgbBuffer=(void *)SVGABuffer.FrontBuffer; + for (i=0;i<SVGABuffer.BufferSize / 3;i++) { + rgbBuffer[i].r=SVGAMesa->clear_red; + rgbBuffer[i].g=SVGAMesa->clear_green; + rgbBuffer[i].b=SVGAMesa->clear_blue; + } + } + else { + GLubyte *tmp = SVGABuffer.DrawBuffer; + SVGABuffer.DrawBuffer = SVGABuffer.FrontBuffer; + for (i=x;i<width;i++) + for (j=y;j<height;j++) + __svga_drawpixel24( i, j, SVGAMesa->clear_red, + SVGAMesa->clear_green, + SVGAMesa->clear_blue); + SVGABuffer.DrawBuffer = tmp; + } + mask &= ~DD_FRONT_LEFT_BIT; + } + if (mask & DD_BACK_LEFT_BIT) { + if (all) { + _RGB *rgbBuffer=(void *)SVGABuffer.BackBuffer; + for (i=0;i<SVGABuffer.BufferSize / 3;i++) { + rgbBuffer[i].r=SVGAMesa->clear_red; + rgbBuffer[i].g=SVGAMesa->clear_green; + rgbBuffer[i].b=SVGAMesa->clear_blue; + } + } + else { + GLubyte *tmp = SVGABuffer.DrawBuffer; + SVGABuffer.DrawBuffer = SVGABuffer.BackBuffer; + for (i=x;i<width;i++) + for (j=y;j<height;j++) + __svga_drawpixel24( i, j, SVGAMesa->clear_red, + SVGAMesa->clear_green, + SVGAMesa->clear_blue); + SVGABuffer.DrawBuffer = tmp; + } + mask &= ~DD_BACK_LEFT_BIT; + } + + if (mask) + _swrast_Clear( ctx, mask, all, x, y, width, height ); +} + +void __write_rgba_span24( const GLcontext *ctx, GLuint n, GLint x, GLint y, + const GLubyte rgba[][4], const GLubyte mask[] ) +{ + int i; + if (mask) { + /* draw some pixels */ + for (i=0; i<n; i++, x++) { + if (mask[i]) { + __svga_drawpixel24( x, y, rgba[i][RCOMP], + rgba[i][GCOMP], + rgba[i][BCOMP]); + } + } + } + else { + /* draw all pixels */ + for (i=0; i<n; i++, x++) { + __svga_drawpixel24( x, y, rgba[i][RCOMP], + rgba[i][GCOMP], + rgba[i][BCOMP]); + } + } +} + +void __write_mono_rgba_span24( const GLcontext *ctx, + GLuint n, GLint x, GLint y, + const GLchan color[4], const GLubyte mask[]) +{ + int i; + for (i=0; i<n; i++, x++) { + if (mask[i]) { + __svga_drawpixel24( x, y, color[RCOMP], color[GCOMP], color[BCOMP]); + } + } +} + +void __read_rgba_span24( const GLcontext *ctx, GLuint n, GLint x, GLint y, + GLubyte rgba[][4] ) +{ + int i; + for (i=0; i<n; i++, x++) { + *((GLint*)rgba[i]) = RGB2BGR24(__svga_getpixel24( x, y)); + } +} + +void __write_rgba_pixels24( const GLcontext *ctx, + GLuint n, const GLint x[], const GLint y[], + const GLubyte rgba[][4], const GLubyte mask[] ) +{ + int i; + for (i=0; i<n; i++) { + if (mask[i]) { + __svga_drawpixel24( x[i], y[i], rgba[i][RCOMP], + rgba[i][GCOMP], + rgba[i][BCOMP]); + } + } +} + +void __write_mono_rgba_pixels24( const GLcontext *ctx, + GLuint n, + const GLint x[], const GLint y[], + const GLchan color[4], const GLubyte mask[] ) +{ + int i; + for (i=0; i<n; i++) { + if (mask[i]) { + __svga_drawpixel24( x[i], y[i], + color[RCOMP], color[GCOMP], color[BCOMP] ); + } + } +} + +void __read_rgba_pixels24( const GLcontext *ctx, + GLuint n, const GLint x[], const GLint y[], + GLubyte rgba[][4], const GLubyte mask[] ) +{ + int i; + for (i=0; i<n; i++,x++) { + *((GLint*)rgba[i]) = RGB2BGR24(__svga_getpixel24( x[i], y[i])); + } +} + +#else + + +/* silence compiler warning */ +extern void _mesa_svga24_dummy_function(void); +void _mesa_svga24_dummy_function(void) +{ +} + + +#endif diff --git a/nx-X11/extras/Mesa_6.4.2/src/mesa/drivers/svga/svgamesa24.h b/nx-X11/extras/Mesa_6.4.2/src/mesa/drivers/svga/svgamesa24.h new file mode 100644 index 000000000..54d1a8298 --- /dev/null +++ b/nx-X11/extras/Mesa_6.4.2/src/mesa/drivers/svga/svgamesa24.h @@ -0,0 +1,44 @@ +/* $Id: svgamesa24.h,v 1.6 2002/11/11 18:42:41 brianp Exp $ */ + +/* + * Mesa 3-D graphics library + * Version: 5.0 + * Copyright (C) 1995-2002 Brian Paul + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free + * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + + +/* + * SVGA driver for Mesa. + * Original author: Brian Paul + * Additional authors: Slawomir Szczyrba <steev@hot.pl> (Mesa 3.2) + */ + + +#ifndef SVGA_MESA_24_H +#define SVGA_MESA_24_H + +extern void __clear_color24( GLcontext *ctx, const GLfloat color[4] ); +extern void __clear24( GLcontext *ctx, GLbitfield mask, GLboolean all, GLint x, GLint y, GLint width, GLint height ); +extern void __write_rgba_span24( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLubyte rgba[][4], const GLubyte mask[] ); +extern void __write_mono_rgba_span24( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLchan color[4], const GLubyte mask[]); +extern void __read_rgba_span24( const GLcontext *ctx, GLuint n, GLint x, GLint y, GLubyte rgba[][4] ); +extern void __write_rgba_pixels24( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte rgba[][4], const GLubyte mask[] ); +extern void __write_mono_rgba_pixels24( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], const GLchan color[4], const GLubyte mask[] ); +extern void __read_rgba_pixels24( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], GLubyte rgba[][4], const GLubyte mask[] ); + +#endif /* SVGA_MESA_24_H */ + diff --git a/nx-X11/extras/Mesa_6.4.2/src/mesa/drivers/svga/svgamesa32.c b/nx-X11/extras/Mesa_6.4.2/src/mesa/drivers/svga/svgamesa32.c new file mode 100644 index 000000000..8a366998d --- /dev/null +++ b/nx-X11/extras/Mesa_6.4.2/src/mesa/drivers/svga/svgamesa32.c @@ -0,0 +1,220 @@ +/* $Id: svgamesa32.c,v 1.12 2002/11/11 18:42:42 brianp Exp $ */ + +/* + * Mesa 3-D graphics library + * Version: 5.0 + * Copyright (C) 1995-2002 Brian Paul + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free + * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + + +/* + * SVGA driver for Mesa. + * Original author: Brian Paul + * Additional authors: Slawomir Szczyrba <steev@hot.pl> (Mesa 3.2) + */ + +#ifdef HAVE_CONFIG_H +#include "conf.h" +#endif + +#ifdef SVGA + +#include "svgapix.h" +#include "svgamesa32.h" +#include "swrast/swrast.h" + + +#if 0 +/* this doesn't compile with GCC on RedHat 6.1 */ +static inline int RGB2BGR32(int c) +{ + asm("rorw $8, %0\n" + "rorl $16, %0\n" + "rorw $8, %0\n" + "shrl $8, %0\n" + : "=q"(c):"0"(c)); + return c; +} +#else +static unsigned long RGB2BGR32(unsigned long color) +{ + return (color & 0xff00)|(color>>16)|((color & 0xff)<<16); +} +#endif + +static void __svga_drawpixel32(int x, int y, unsigned long c) +{ + unsigned long offset; + + GLint *intBuffer=(void *)SVGABuffer.DrawBuffer; + y = SVGAInfo->height-y-1; + offset = y * SVGAInfo->width + x; + intBuffer[offset]=c; +} + +static unsigned long __svga_getpixel32(int x, int y) +{ + unsigned long offset; + + const GLint *intBuffer=(void *)SVGABuffer.ReadBuffer; + y = SVGAInfo->height-y-1; + offset = y * SVGAInfo->width + x; + return intBuffer[offset]; +} + +void __clear_color32( GLcontext *ctx, const GLfloat color[4] ) +{ + GLubyte col[3]; + CLAMPED_FLOAT_TO_UBYTE(col[0], color[0]); + CLAMPED_FLOAT_TO_UBYTE(col[1], color[1]); + CLAMPED_FLOAT_TO_UBYTE(col[2], color[2]); + SVGAMesa->clear_truecolor = (col[0] << 16) | (col[1] << 8) | col[2]; +} + +void __clear32( GLcontext *ctx, GLbitfield mask, GLboolean all, + GLint x, GLint y, GLint width, GLint height ) +{ + int i,j; + + if (mask & DD_FRONT_LEFT_BIT) { + if (all) { + GLint *intBuffer=(void *)SVGABuffer.FrontBuffer; + for (i=0;i<SVGABuffer.BufferSize / 4;i++) + intBuffer[i]=SVGAMesa->clear_truecolor; + } + else { + GLubyte *tmp = SVGABuffer.DrawBuffer; + SVGABuffer.DrawBuffer = SVGABuffer.FrontBuffer; + for (i=x;i<width;i++) + for (j=y;j<height;j++) + __svga_drawpixel32(i,j,SVGAMesa->clear_truecolor); + SVGABuffer.DrawBuffer = tmp; + } + mask &= ~DD_FRONT_LEFT_BIT; + } + if (mask & DD_BACK_LEFT_BIT) { + if (all) { + GLint *intBuffer=(void *)SVGABuffer.BackBuffer; + for (i=0;i<SVGABuffer.BufferSize / 4;i++) + intBuffer[i]=SVGAMesa->clear_truecolor; + } + else { + GLubyte *tmp = SVGABuffer.DrawBuffer; + SVGABuffer.DrawBuffer = SVGABuffer.BackBuffer; + for (i=x;i<width;i++) + for (j=y;j<height;j++) + __svga_drawpixel32(i,j,SVGAMesa->clear_truecolor); + SVGABuffer.DrawBuffer = tmp; + } + mask &= ~DD_BACK_LEFT_BIT; + } + + if (mask) + _swrast_Clear( ctx, mask, all, x, y, width, height ); +} + +void __write_rgba_span32( const GLcontext *ctx, GLuint n, GLint x, GLint y, + const GLubyte rgba[][4], const GLubyte mask[] ) +{ + int i; + if (mask) { + /* draw some pixels */ + for (i=0; i<n; i++, x++) { + if (mask[i]) { + __svga_drawpixel32( x, y, RGB2BGR32(*((GLint*)rgba[i]))); + } + } + } + else { + /* draw all pixels */ + for (i=0; i<n; i++, x++) { + __svga_drawpixel32( x, y, RGB2BGR32(*((GLint*)rgba[i]))); + } + } +} + +void __write_mono_rgba_span32( const GLcontext *ctx, + GLuint n, GLint x, GLint y, + const GLchan color[4], const GLubyte mask[]) +{ + int i; + GLuint truecolor = color[RCOMP]<<16 | color[GCOMP]<<8 | color[BCOMP]; + for (i=0; i<n; i++, x++) { + if (mask[i]) { + __svga_drawpixel32( x, y, truecolor); + } + } +} + +void __read_rgba_span32( const GLcontext *ctx, GLuint n, GLint x, GLint y, + GLubyte rgba[][4] ) +{ + int i; + for (i=0; i<n; i++, x++) { + *((GLint*)rgba[i]) = RGB2BGR32(__svga_getpixel32( x, y )); + } +} + +void __write_rgba_pixels32( const GLcontext *ctx, + GLuint n, const GLint x[], const GLint y[], + const GLubyte rgba[][4], const GLubyte mask[] ) +{ + int i; + for (i=0; i<n; i++) { + if (mask[i]) { + __svga_drawpixel32( x[i], y[i], RGB2BGR32(*((GLint*)rgba[i]))); + } + } +} + +void __write_mono_rgba_pixels32( const GLcontext *ctx, + GLuint n, + const GLint x[], const GLint y[], + const GLchan color[4], const GLubyte mask[] ) +{ + GLuint truecolor = color[RCOMP]<<16 | color[GCOMP]<<8 | color[BCOMP]; + int i; + for (i=0; i<n; i++) { + if (mask[i]) { + __svga_drawpixel32( x[i], y[i], truecolor ); + } + } +} + +void __read_rgba_pixels32( const GLcontext *ctx, + GLuint n, const GLint x[], const GLint y[], + GLubyte rgba[][4], const GLubyte mask[] ) +{ + int i; + for (i=0; i<n; i++,x++) { + *((GLint*)rgba[i]) = RGB2BGR32(__svga_getpixel32( x[i], y[i] )); + } +} + + +#else + + +/* silence compiler warning */ +extern void _mesa_svga32_dummy_function(void); +void _mesa_svga32_dummy_function(void) +{ +} + + +#endif + diff --git a/nx-X11/extras/Mesa_6.4.2/src/mesa/drivers/svga/svgamesa32.h b/nx-X11/extras/Mesa_6.4.2/src/mesa/drivers/svga/svgamesa32.h new file mode 100644 index 000000000..f518e11ad --- /dev/null +++ b/nx-X11/extras/Mesa_6.4.2/src/mesa/drivers/svga/svgamesa32.h @@ -0,0 +1,44 @@ +/* $Id: svgamesa32.h,v 1.6 2002/11/11 18:42:42 brianp Exp $ */ + +/* + * Mesa 3-D graphics library + * Version: 5.0 + * Copyright (C) 1995-2002 Brian Paul + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free + * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + + +/* + * SVGA driver for Mesa. + * Original author: Brian Paul + * Additional authors: Slawomir Szczyrba <steev@hot.pl> (Mesa 3.2) + */ + + +#ifndef SVGA_MESA_32_H +#define SVGA_MESA_32_H + +extern void __clear_color32( GLcontext *ctx, const GLfloat color[4] ); +extern void __clear32( GLcontext *ctx, GLbitfield mask, GLboolean all, GLint x, GLint y, GLint width, GLint height ); +extern void __write_rgba_span32( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLubyte rgba[][4], const GLubyte mask[] ); +extern void __write_mono_rgba_span32( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLchan color[4], const GLubyte mask[]); +extern void __read_rgba_span32( const GLcontext *ctx, GLuint n, GLint x, GLint y, GLubyte rgba[][4] ); +extern void __write_rgba_pixels32( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte rgba[][4], const GLubyte mask[] ); +extern void __write_mono_rgba_pixels32( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], const GLchan color[4], const GLubyte mask[] ); +extern void __read_rgba_pixels32( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], GLubyte rgba[][4], const GLubyte mask[] ); + +#endif /* SVGA_MESA_32_H */ + diff --git a/nx-X11/extras/Mesa_6.4.2/src/mesa/drivers/svga/svgamesa8.c b/nx-X11/extras/Mesa_6.4.2/src/mesa/drivers/svga/svgamesa8.c new file mode 100644 index 000000000..fd880ef85 --- /dev/null +++ b/nx-X11/extras/Mesa_6.4.2/src/mesa/drivers/svga/svgamesa8.c @@ -0,0 +1,193 @@ +/* $Id: svgamesa8.c,v 1.9 2005/05/04 20:11:39 brianp Exp $ */ + +/* + * Mesa 3-D graphics library + * Version: 3.3 + * Copyright (C) 1995-2000 Brian Paul + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free + * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + + +/* + * SVGA driver for Mesa. + * Original author: Brian Paul + * Additional authors: Slawomir Szczyrba <steev@hot.pl> (Mesa 3.2) + */ + +#ifdef HAVE_CONFIG_H +#include "conf.h" +#endif + +#ifdef SVGA + + +#include "svgapix.h" +#include "svgamesa8.h" +#include "swrast/swrast.h" + + +static void __svga_drawpixel8(int x, int y, unsigned long c) +{ + unsigned long offset; + y = SVGAInfo->height-y-1; + offset = y * SVGAInfo->linewidth + x; + SVGABuffer.DrawBuffer[offset]=c; +} + +static unsigned long __svga_getpixel8(int x, int y) +{ + unsigned long offset; + y = SVGAInfo->height-y-1; + offset = y * SVGAInfo->linewidth + x; + return SVGABuffer.ReadBuffer[offset]; +} + +void __clear_index8( GLcontext *ctx, GLuint index ) +{ + SVGAMesa->clear_index = index; +} + +void __clear8( GLcontext *ctx, GLbitfield mask, GLboolean all, + GLint x, GLint y, GLint width, GLint height ) +{ + int i,j; + + if (mask & DD_FRONT_LEFT_BIT) { + if (all) { + memset(SVGABuffer.FrontBuffer, SVGAMesa->clear_index, SVGABuffer.BufferSize); + } + else { + GLubyte *tmp = SVGABuffer.DrawBuffer; + SVGABuffer.DrawBuffer = SVGABuffer.FrontBuffer; + for (i=x;i<width;i++) + for (j=y;j<height;j++) + __svga_drawpixel8(i,j,SVGAMesa->clear_index); + SVGABuffer.DrawBuffer = tmp; + } + mask &= ~DD_FRONT_LEFT_BIT; + } + if (mask & DD_BACK_LEFT_BIT) { + if (all) { + memset(SVGABuffer.BackBuffer, SVGAMesa->clear_index, SVGABuffer.BufferSize); + } + else { + GLubyte *tmp = SVGABuffer.DrawBuffer; + SVGABuffer.DrawBuffer = SVGABuffer.BackBuffer; + for (i=x;i<width;i++) + for (j=y;j<height;j++) + __svga_drawpixel8(i,j,SVGAMesa->clear_index); + SVGABuffer.DrawBuffer = tmp; + } + mask &= ~DD_BACK_LEFT_BIT; + } + + if (mask) + _swrast_Clear( ctx, mask, all, x, y, width, height ); +} + +void __write_ci32_span8( const GLcontext *ctx, struct gl_renderbuffer *rb, + GLuint n, GLint x, GLint y, + const GLuint index[], const GLubyte mask[] ) +{ + int i; + for (i=0;i<n;i++,x++) { + if (mask[i]) { + __svga_drawpixel8( x, y, index[i]); + } + } +} + +void __write_ci8_span8( const GLcontext *ctx, struct gl_renderbuffer *rb, + GLuint n, GLint x, GLint y, + const GLubyte index[], const GLubyte mask[] ) +{ + int i; + + for (i=0;i<n;i++,x++) { + if (mask[i]) { + __svga_drawpixel8( x, y, index[i]); + } + } +} + +void __write_mono_ci_span8( const GLcontext *ctx, struct gl_renderbuffer *rb, + GLuint n, GLint x, GLint y, + GLuint colorIndex, const GLubyte mask[] ) +{ + int i; + for (i=0;i<n;i++,x++) { + if (mask[i]) { + __svga_drawpixel8( x, y, colorIndex); + } + } +} + +void __read_ci32_span8( const GLcontext *ctx, struct gl_renderbuffer *rb, + GLuint n, GLint x, GLint y, GLuint index[]) +{ + int i; + for (i=0; i<n; i++,x++) { + index[i] = __svga_getpixel8( x, y); + } +} + +void __write_ci32_pixels8( const GLcontext *ctx, struct gl_renderbuffer *rb, + GLuint n, const GLint x[], const GLint y[], + const GLuint index[], const GLubyte mask[] ) +{ + int i; + for (i=0; i<n; i++) { + if (mask[i]) { + __svga_drawpixel8( x[i], y[i], index[i]); + } + } +} + + +void __write_mono_ci_pixels8( const GLcontext *ctx, struct gl_renderbuffer *rb, + GLuint n, const GLint x[], const GLint y[], + GLuint colorIndex, const GLubyte mask[] ) +{ + int i; + for (i=0; i<n; i++) { + if (mask[i]) { + __svga_drawpixel8( x[i], y[i], colorIndex); + } + } +} + +void __read_ci32_pixels8( const GLcontext *ctx, struct gl_renderbuffer *rb, + GLuint n, const GLint x[], const GLint y[], + GLuint index[], const GLubyte mask[] ) +{ + int i; + for (i=0; i<n; i++,x++) { + index[i] = __svga_getpixel8( x[i], y[i]); + } +} + + +#else + + +/* silence compiler warning */ +extern void _mesa_svga8_dummy_function(void); +void _mesa_svga8_dummy_function(void) +{ +} + + +#endif diff --git a/nx-X11/extras/Mesa_6.4.2/src/mesa/drivers/svga/svgamesa8.h b/nx-X11/extras/Mesa_6.4.2/src/mesa/drivers/svga/svgamesa8.h new file mode 100644 index 000000000..1aa25f93f --- /dev/null +++ b/nx-X11/extras/Mesa_6.4.2/src/mesa/drivers/svga/svgamesa8.h @@ -0,0 +1,44 @@ +/* $Id: svgamesa8.h,v 1.4 2001/02/06 00:03:48 brianp Exp $ */ + +/* + * Mesa 3-D graphics library + * Version: 3.2 + * Copyright (C) 1995-2000 Brian Paul + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free + * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + + +/* + * SVGA driver for Mesa. + * Original author: Brian Paul + * Additional authors: Slawomir Szczyrba <steev@hot.pl> (Mesa 3.2) + */ + + +#ifndef SVGA_MESA_8_H +#define SVGA_MESA_8_H + +extern void __clear_index8( GLcontext *ctx, GLuint index ); +extern void __clear8( GLcontext *ctx, GLbitfield mask, GLboolean all, GLint x, GLint y, GLint width, GLint height ); +extern void __write_ci32_span8( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLuint index[], const GLubyte mask[] ); +extern void __write_ci8_span8( const GLcontext *ctx, GLuint n, GLint x, GLint y, const GLubyte index[], const GLubyte mask[] ); +extern void __write_mono_ci_span8( const GLcontext *ctx, GLuint n, GLint x, GLint y, GLuint colorIndex, const GLubyte mask[] ); +extern void __read_ci32_span8( const GLcontext *ctx, GLuint n, GLint x, GLint y, GLuint index[]); +extern void __write_ci32_pixels8( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], const GLuint index[], const GLubyte mask[] ); +extern void __write_mono_ci_pixels8( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], GLuint colorIndex, const GLubyte mask[] ); +extern void __read_ci32_pixels8( const GLcontext *ctx, GLuint n, const GLint x[], const GLint y[], GLuint index[], const GLubyte mask[] ); + +#endif /* SVGA_MESA_15_H */ diff --git a/nx-X11/extras/Mesa_6.4.2/src/mesa/drivers/svga/svgapix.h b/nx-X11/extras/Mesa_6.4.2/src/mesa/drivers/svga/svgapix.h new file mode 100644 index 000000000..0b19551bf --- /dev/null +++ b/nx-X11/extras/Mesa_6.4.2/src/mesa/drivers/svga/svgapix.h @@ -0,0 +1,71 @@ +/* $Id: svgapix.h,v 1.5 2002/11/11 18:42:44 brianp Exp $ */ + +/* + * Mesa 3-D graphics library + * Version: 5.0 + * Copyright (C) 1995-2002 Brian Paul + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free + * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + + +/* + * SVGA driver for Mesa. + * Original author: Brian Paul + * Additional authors: Slawomir Szczyrba <steev@hot.pl> (Mesa 3.2) + */ + + +#ifndef SVGAPIX_H +#define SVGAPIX_H + +#include "GL/gl.h" +#include "GL/svgamesa.h" +#include "context.h" +#include "colormac.h" +#include "vga.h" + +struct svgamesa_context { + GLcontext *gl_ctx; /* the core Mesa context */ + GLvisual *gl_vis; /* describes the color buffer */ + GLframebuffer *gl_buffer; /* the ancillary buffers */ + GLuint clear_index; /* current clear index */ + GLint clear_red, + clear_green, + clear_blue; /* current clear rgb color */ + GLuint clear_truecolor; /* current clear rgb color */ + GLushort hicolor; /* current hicolor */ + GLushort clear_hicolor; /* current clear hicolor */ + GLint width, height; /* size of color buffer */ + GLint depth; /* bits per pixel (8,16,24 or 32) */ +}; + +typedef struct { GLubyte b,g,r; } _RGB; + +struct svga_buffer { + GLint Depth; + GLint BufferSize; + GLubyte * FrontBuffer; + GLubyte * BackBuffer; + GLubyte * VideoRam; + GLubyte * DrawBuffer; /* == FrontBuffer or BackBuffer */ + GLubyte * ReadBuffer; /* == FrontBuffer or BackBuffer */ +}; + +extern struct svga_buffer SVGABuffer; +extern vga_modeinfo * SVGAInfo; +extern SVGAMesaContext SVGAMesa; /* the current context */ + +#endif /* SVGAPIX_H */ |