Compare commits

..

8 Commits

Author SHA1 Message Date
Keith Whitwell
7b7af467dd Restore ability to build full driver.
Add config options to choose between full/subset driver, and fbdev vs. DRI
windowing systems.
2003-03-04 17:29:55 +00:00
Keith Whitwell
3101d43a76 Add a helpful message 2003-03-04 17:27:28 +00:00
Keith Whitwell
d95443f030 Initialize tnl vtxfmt stuff if _HAVE_FULL_GL 2003-03-04 17:23:34 +00:00
Keith Whitwell
be49c0fef2 Uncomment subsetted entrypoints, protect with _HAVE_FULL_GL instead. 2003-03-04 17:10:39 +00:00
Jose Fonseca
61d31cab97 Enable the extraction of static function documentation. 2003-03-02 00:28:38 +00:00
Jose Fonseca
7067815785 Doxygenization of the existing documentation. 2003-03-02 00:27:31 +00:00
Brian Paul
ad79ba8208 remove glPolygonMode 2003-02-26 20:21:54 +00:00
Keith Whitwell
b8cdeaae3a New file 2003-02-24 21:31:02 +00:00
30 changed files with 2357 additions and 1629 deletions

View File

@@ -12,7 +12,7 @@
<h2>
<center>
<h3>Tungsten Graphics, Inc.</h3>
<h3>February 3, 2003<br>
<h3>February 26, 2003<br>
</h3>
</center>
</h2>
@@ -623,34 +623,7 @@ Polygon culling is enabled and disabled with the commands <span
style="font-weight: bold;">glDisable</span>(GL_CULL_FACE),
respectively.<br>
<br>
<h3>4.3.3 Polygon Fill Mode</h3>
The command<br>
<br>
<div style="margin-left: 40px;">void<span style="font-weight: bold;"><span
style="font-weight: bold;"> </span><span style="font-weight: bold;"></span>glPolygonMode</span>(GLenum<span
style="font-style: italic;">face</span>, GLenum <span
style="font-style: italic;">mode</span>)<br>
</div>
<br>
controls whether polygons are filled, outlined or drawn with a point at
each vertex.&nbsp; The <span style="font-style: italic;">face</span>
parameter must be GL_FRONT_AND_BACK. &nbsp;The values GL_FRONT and
GL_BACK are not permitted by the subset.<br>
<br>
If <span style="font-style: italic;">mode</span> is GL_FILL then
triangles, quadrilaterals and triangles will be filled (the default).
&nbsp;If <span style="font-style: italic;">mode</span> is GL_LINE then
triangles, quadrilaterals and polygons will be outlined with line
segments instead of being filled.<span style="font-weight: bold;"></span>
&nbsp;If <span style="font-style: italic;">mode</span> is GL_POINT then
triangles, quadrilaterals and polygons will be rendered with a point at
each vertex instead of being filled.<span style="font-weight: bold;"></span><br>
<br>
Any other values for <span style="font-style: italic;">face</span> or <span
style="font-style: italic;">mode</span> will raise the error
GL_INVALID_ENUM.<br>
<br>
<h3>4.3.4 Polygon Antialiasing</h3>
<h3>4.3.3 Polygon Antialiasing</h3>
Polygons may be antialiased in order to smooth their edges.
&nbsp;Polygon antialiasing is enabled and disabled with the commands <span
style="font-weight: bold;">glEnable</span>(GL_POLYGON_SMOOTH) and <span
@@ -688,8 +661,8 @@ are linearly interpolated to produce the fragment colors.<br>
<h2>4.5 Bitmap Rasterization</h2>
A bitmap is a monochromatic, binary image in which each image element
(or pixel) is represented by one bit. &nbsp;Fragments are only generated
for the bits (pixels) which are set. &nbsp;Bitmaps are commonly used
to draw text (glyphs) and markers.<br>
for the bits (pixels) which are set. &nbsp;Bitmaps are commonly used to
draw text (glyphs) and markers.<br>
<br>
A bitmap is drawn with the command<br>
<br>
@@ -844,6 +817,7 @@ the subset.<br>
Polygon commands:<br>
<div style="margin-left: 40px; font-weight: bold;">glPolygonStipple<br>
glPolygonOffset<br>
glPolygonMode<br>
<br>
</div>
</div>
@@ -2762,15 +2736,6 @@ name stack.<br>
<td style="vertical-align: top;">Pixel packing row length.<br>
</td>
</tr>
<tr>
<td style="vertical-align: top;">GL_POLYGON_MODE<br>
</td>
<td style="vertical-align: top;">2<br>
</td>
<td style="vertical-align: top;">Current front and back polygon
modes: GL_POINT, GL_LINE or GL_FILL.<br>
</td>
</tr>
<tr>
<td style="vertical-align: top;">GL_POLYGON_SMOOTH<br>
</td>
@@ -3456,7 +3421,7 @@ number of approaches to antialiasing have been summarized in email.<br>
RECOMMENDATION: don't support edge flags. &nbsp;They don't effect
polygon antialiasing.<br>
<br>
RESOLUTION: open<br>
RESOLUTION: closed, as of 26 Feb 2003.<br>
<br>
<h2>A.3 glRasterPos vs. glWindowPos</h2>
Should glRasterPos and/or glWindowPos commands be supported?<br>
@@ -3601,6 +3566,12 @@ supported.<br>
<br>
RESOLUTION: open<br>
<br>
<h2>A.15 glPolygonMode</h2>
Is <span style="font-weight: bold;">glPolygonMode</span> needed?<br>
<br>
RECOMMENDATION: No. &nbsp;Omit it.<br>
<br>
RESOLUTION: closed, as of 26 Feb 2003<br>
<br>
<br>
<p> </p>

View File

@@ -9,7 +9,7 @@ OUTPUT_DIRECTORY = .
OUTPUT_LANGUAGE = English
EXTRACT_ALL = YES
EXTRACT_PRIVATE = NO
EXTRACT_STATIC = NO
EXTRACT_STATIC = YES
EXTRACT_LOCAL_CLASSES = YES
HIDE_UNDOC_MEMBERS = NO
HIDE_UNDOC_CLASSES = NO

28
progs/samples/Makefile Normal file
View File

@@ -0,0 +1,28 @@
PROGS = prim \
star \
line \
point \
depth \
tri \
bitmap1 \
bitmap2
##### RULES #####
.SUFFIXES:
.SUFFIXES: .c
# make executable from .c file:
.c: $(LIB_DEP)
gcc -I../include -g $< -L../lib -lglut -lGL -lm -o $@
default: $(PROGS)
clean:
-rm *.o *~

View File

@@ -1,4 +1,4 @@
# $Id: Makefile,v 1.1.2.1 2003/02/05 04:37:12 keithw Exp $
# $Id: Makefile,v 1.1.2.2 2003/03/04 17:29:55 keithw Exp $
# Mesa 3-D graphics library
# Version: 5.0
@@ -7,27 +7,18 @@
MESA = ../..
MESABUILDDIR = ..
default: dri.a
include $(MESA)/Makefile.include
INCLUDES = -I/usr/X11R6/include -I/usr/X11R6/include/X11/extensions -I$(MESA)/include -I. -I..
DEFINES =
CFLAGS = $(INCLUDES) $(DEFINES) -g -MD -Wall -Wpointer-arith \
-Wstrict-prototypes -Wmissing-prototypes \
-Wmissing-declarations -Wnested-externs
# The .a files for each mesa module required by this driver:
#
DRI_SOURCES = dri_glx.c \
dri_util.c \
xf86drm.c \
xf86drmHash.c \
xf86drmRandom.c \
xf86drmSL.c
C_SOURCES = $(DRI_SOURCES)
C_SOURCES = dri_glx.c \
dri_util.c \
xf86drm.c \
xf86drmHash.c \
xf86drmRandom.c \
xf86drmSL.c
ASM_SOURCES =
@@ -36,32 +27,11 @@ OBJECTS = $(C_SOURCES:.c=.o) \
##### RULES #####
.S.o:
$(CC) -c $(CFLAGS) $< -o $@
.c.o:
$(CC) -c $(CFLAGS) $< -o $@
##### TARGETS #####
default: dri.a
dri.a: $(OBJECTS) Makefile
rm -f $@ && ar rcv $@ $(OBJECTS) && ranlib $@
clean:
-rm -f *.o *~ *.d .\#* *.so
tags:
etags `find . -name \*.[ch]` `find ../include`
##### DEPENDENCIES #####
-include $(C_SOURCES:.c=.d)
.SUFFIXES: .c .d
.c.d:
$(CC) -M $(INCLUDES) $(DEFINES) $< > $@

View File

@@ -1,4 +1,4 @@
# $Id: Makefile,v 1.1.2.25 2003/02/23 20:24:11 keithw Exp $
# $Id: Makefile,v 1.1.2.26 2003/03/04 17:29:56 keithw Exp $
# Mesa 3-D graphics library
# Version: 5.0
@@ -7,12 +7,25 @@
MESA = ../../..
MESABUILDDIR = ../..
default: radeon_dri.so
include $(MESA)/Makefile.include
SHARED_INCLUDES = -I$(MESABUILDDIR) -I$(MESA)/include -I. -I../common -Iserver
SHARED_INCLUDES= -I$(MESABUILDDIR) -I$(MESA)/include -I. -I../common -Iserver
MINIGLX_INCLUDES = -I$(MESABUILDDIR)/miniglx
DRI_INCLUDES = -I$(MESABUILDDIR)/dri
ifeq ($(FULL_DRIVER),true)
DEFINES = \
-D_HAVE_SWRAST=1 \
-D_HAVE_SWTNL=1 \
-D_HAVE_SANITY=1 \
-D_HAVE_CODEGEN=1 \
-D_HAVE_LIGHTING=1 \
-D_HAVE_TEXGEN=1 \
-D_HAVE_USERCLIP=1 \
-D_HAVE_FULL_GL=1
else
DEFINES = \
-D_HAVE_SWRAST=0 \
-D_HAVE_SWTNL=0 \
@@ -22,10 +35,7 @@ DEFINES = \
-D_HAVE_TEXGEN=0 \
-D_HAVE_USERCLIP=0 \
-D_HAVE_FULL_GL=0
CFLAGS = $(INCLUDES) $(DEFINES) -g -MD -Wall -Wpointer-arith \
-Wstrict-prototypes -Wmissing-prototypes \
-Wmissing-declarations -Wnested-externs
endif
# The .a files for each mesa module required by this driver:
#
@@ -40,7 +50,7 @@ FULL_MESA = $(MESABUILDDIR)/swrast_setup/swrast_setup.a \
SUBSET_MESA = $(MESABUILDDIR)/mesa.a \
$(MESABUILDDIR)/math/math.a
DRI = $(MESABUILDDIR)/dri/dri.a
MINIGLX_SOURCES = server/radeon_dri.c
@@ -63,6 +73,7 @@ FULL_DRIVER_SOURCES = \
radeon_tex.c \
radeon_texmem.c \
radeon_texstate.c \
radeon_texcombine.c \
radeon_lighting.c \
radeon_userclip.c \
radeon_texgen.c \
@@ -81,55 +92,44 @@ FULL_DRIVER_SOURCES = \
INCLUDES = $(MINIGLX_INCLUDES) \
$(SHARED_INCLUDES)
ifeq ($(FULL_DRIVER),true)
C_SOURCES = $(DRIVER_SOURCES) \
$(FULL_DRIVER_SOURCES) \
$(MINIGLX_SOURCES)
MESA_MODULES = $(FULL_MESA)
else
C_SOURCES = $(DRIVER_SOURCES) \
$(SUBSET_DRIVER_SOURCES) \
$(MINIGLX_SOURCES)
MESA_MODULES = $(FULL_MESA)
endif
ifeq ($(WINDOW_SYSTEM),dri)
WINOBJ=$(MESABUILDDIR)/dri/dri.a
WINLIB=
else
WINOBJ=
WINLIB=-L$(MESA)/src/miniglx
endif
ASM_SOURCES =
OBJECTS = $(C_SOURCES:.c=.o) \
$(ASM_SOURCES:.S=.o)
##### RULES #####
.S.o:
$(CC) -c $(CFLAGS) $< -o $@
.c.o:
$(CC) -c $(CFLAGS) $< -o $@
##### TARGETS #####
default: radeon_dri.so install
radeon_dri.so: $(SUBSET_MESA) $(OBJECTS) Makefile
rm -f $@ && gcc -o $@ -shared $(OBJECTS) $(SUBSET_MESA) -L$(MESA)/src/miniglx -lGL -lc -lm
#radeon_dri.so: $(SUBSET_MESA) $(DRI) $(OBJECTS) Makefile
# rm -f $@ && gcc -o $@ -shared $(OBJECTS) $(SUBSET_MESA) $(DRI) -lc -lm
loc:
wc -l $(DRIVER_SOURCES) $(SUBSET_DRIVER_SOURCES)
wc -l $(DRIVER_SOURCES) $(FULL_DRIVER_SOURCES) radeon_maos_verts.c radeon_maos_vbtmp.h
install:
# Build the subset or full driver?
#
radeon_dri.so: $(OBJECTS) $(MESA_MODULES) $(WINOBJ) Makefile
rm -f $@ && gcc -o $@ -shared $(OBJECTS) $(MESA_MODULES) $(WINOBJ) $(WINLIB) -lGL -lc -lm
rm -f $(MESA)/lib/radeon_dri.so && \
install radeon_dri.so $(MESA)/lib/radeon_dri.so
clean:
-rm -f *.o *~ *.d .\#* *.so
tags:
etags `find . -name \*.[ch]` `find ../include`
##### DEPENDENCIES #####
-include $(C_SOURCES:.c=.d)
.SUFFIXES: .c .d
.c.d:
$(CC) -M $(INCLUDES) $(DEFINES) $< > $@

View File

@@ -51,6 +51,8 @@
#include "radeon_tcl.h"
#include "radeon_vtxfmt.h"
#include "radeon_tex.h"
#include "radeon_span.h"
#include "radeon_maos.h"
#else
#include "radeon_subset.h"
#endif
@@ -202,8 +204,10 @@ static void radeonInitDriverFuncs( GLcontext *ctx )
ctx->Driver.ResizeBuffers = ResizeBuffers;
ctx->Driver.Error = NULL;
ctx->Driver.DrawPixels = NULL;
#if !_HAVE_SWRAST
ctx->Driver.Bitmap = radeonPointsBitmap;
ctx->Driver.ReadPixels = radeonReadPixels;
#endif
}
@@ -366,8 +370,9 @@ radeonCreateContext( const __GLcontextModes *glVisual,
#if _HAVE_SWTNL
radeonInitSwtcl( ctx );
#endif
#if !_HAVE_FULL_GL
radeonInitSelect( ctx );
#endif
rmesa->do_irqs = (rmesa->radeonScreen->irq && !getenv("RADEON_NO_IRQS"));
rmesa->irqsEmitted = 0;

View File

@@ -49,9 +49,47 @@ typedef struct radeon_context *radeonContextPtr;
#include "radeon_screen.h"
#include "mm.h"
/**
* \brief Reference counting on DMA buffers.
*/
struct radeon_dma_buffer {
int refcount; /**< \brief number of retained regions in radeon_dma_buffer::buf */
drmBufPtr buf; /**< \brief DMA buffer */
};
/**
* \brief Get the start of a DMA region.
*
* \param rvb pointer to a radeon_dma_region structure.
*
* \return pointer to the region start.
*/
#define GET_START(rvb) (rmesa->radeonScreen->agp_buffer_offset + \
(rvb)->address - rmesa->dma.buf0_address + \
(rvb)->start)
/**
* \brief A retained DMA region.
*
* e.g. vertices for indexed vertices.
*/
struct radeon_dma_region {
struct radeon_dma_buffer *buf; /**< \brief DMA buffer */
char *address; /**< \brief buf->address */
int start; /**< \brief start offset from start of radeon_dma_region::buf */
int end; /**< \brief end offset from start of radeon_dma_region::buf */
int ptr; /**< \brief offsets from start of radeon_dma_region::buf */
int aos_start; /**< \brief array of structures start */
int aos_stride; /**< \brief array of structures stride */
int aos_size; /**< \brief array of structures size */
};
#if _HAVE_SWTNL
#include "radeon_swtcl.h"
#endif
#if _HAVE_FULL_GL
#include "radeon_vtxfmt.h"
#endif
/**
* \brief Color buffer state.
@@ -478,40 +516,6 @@ struct radeon_texture {
GLint numHeaps; /**< \brief number of active heaps */
};
/**
* \brief Reference counting on DMA buffers.
*/
struct radeon_dma_buffer {
int refcount; /**< \brief number of retained regions in radeon_dma_buffer::buf */
drmBufPtr buf; /**< \brief DMA buffer */
};
/**
* \brief Get the start of a DMA region.
*
* \param rvb pointer to a radeon_dma_region structure.
*
* \return pointer to the region start.
*/
#define GET_START(rvb) (rmesa->radeonScreen->agp_buffer_offset + \
(rvb)->address - rmesa->dma.buf0_address + \
(rvb)->start)
/**
* \brief A retained DMA region.
*
* e.g. vertices for indexed vertices.
*/
struct radeon_dma_region {
struct radeon_dma_buffer *buf; /**< \brief DMA buffer */
char *address; /**< \brief buf->address */
int start; /**< \brief start offset from start of radeon_dma_region::buf */
int end; /**< \brief end offset from start of radeon_dma_region::buf */
int ptr; /**< \brief offsets from start of radeon_dma_region::buf */
int aos_start; /**< \brief array of structures start */
int aos_stride; /**< \brief array of structures stride */
int aos_size; /**< \brief array of structures size */
};
/**
@@ -709,8 +713,9 @@ struct radeon_context {
/* radeon_vtxfmt.c
*/
/* struct radeon_vbinfo vb; */
#if _HAVE_FULL_GL
struct radeon_vbinfo vb;
#endif
/**
* \brief Mirrors of some DRI state
*/

View File

@@ -53,7 +53,7 @@
/* Update on colormaterial, material emmissive/ambient,
* lightmodel.globalambient
*/
void update_global_ambient( GLcontext *ctx )
void update_global_ambient( GLcontext *ctx )
{
radeonContextPtr rmesa = RADEON_CONTEXT(ctx);
float *fcmd = (float *)RADEON_DB_STATE( glt );
@@ -137,7 +137,7 @@ void check_twoside_fallback( GLcontext *ctx )
TCL_FALLBACK( ctx, RADEON_TCL_FALLBACK_LIGHT_TWOSIDE, fallback );
}
void radeonColorMaterial( GLcontext *ctx, GLenum face, GLenum mode )
void radeonColorMaterial( GLcontext *ctx, GLenum face, GLenum mode )
{
if (ctx->Light.ColorMaterialEnabled) {
radeonContextPtr rmesa = RADEON_CONTEXT(ctx);
@@ -321,8 +321,9 @@ void radeonUpdateLighting( GLcontext *ctx )
}
}
void radeonLightfv( GLcontext *ctx, GLenum light,
GLenum pname, const GLfloat *params )
void radeonLightfv( GLcontext *ctx, GLenum light,
GLenum pname, const GLfloat *params )
{
radeonContextPtr rmesa = RADEON_CONTEXT(ctx);
GLint p = light - GL_LIGHT0;
@@ -395,8 +396,8 @@ void radeonUpdateLighting( GLcontext *ctx )
void radeonLightModelfv( GLcontext *ctx, GLenum pname,
const GLfloat *param )
void radeonLightModelfv( GLcontext *ctx, GLenum pname,
const GLfloat *param )
{
radeonContextPtr rmesa = RADEON_CONTEXT(ctx);

View File

@@ -38,5 +38,6 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
#define __RADEON_SPAN_H__
extern void radeonInitSpanFuncs( GLcontext *ctx );
extern void radeonCreateSwrastContext( GLcontext *ctx );
#endif

View File

@@ -1307,8 +1307,8 @@ static void radeonEnable( GLcontext *ctx, GLenum cap, GLboolean state )
case GL_CLIP_PLANE2:
case GL_CLIP_PLANE3:
case GL_CLIP_PLANE4:
case GL_CLIP_PLANE5:
p = cap-GL_CLIP_PLANE0;
case GL_CLIP_PLANE5: {
GLuint p = cap-GL_CLIP_PLANE0;
RADEON_STATECHANGE( rmesa, tcl );
if (state) {
rmesa->hw.tcl.cmd[TCL_UCP_VERT_BLEND_CTL] |= (RADEON_UCP_ENABLE_0<<p);
@@ -1318,6 +1318,7 @@ static void radeonEnable( GLcontext *ctx, GLenum cap, GLboolean state )
rmesa->hw.tcl.cmd[TCL_UCP_VERT_BLEND_CTL] &= ~(RADEON_UCP_ENABLE_0<<p);
}
break;
}
#endif
case GL_CULL_FACE:

View File

@@ -75,7 +75,6 @@ extern void radeonFallback( GLcontext *ctx, GLuint bit, GLboolean mode );
#define TEXMAT_2 5
extern void radeonUpdateSpecular( GLcontext *ctx );
extern void radeonClipPlane( GLcontext *ctx, GLenum plane, const GLfloat *eq );
extern void radeonUploadMatrixTranspose( radeonContextPtr rmesa, GLfloat *src,
int idx );
@@ -83,5 +82,18 @@ extern void radeonUploadMatrix( radeonContextPtr rmesa, GLfloat *src, int idx );
extern void radeonUpdateScissor( GLcontext *ctx );
/* radeon_lighting.c
*/
extern void radeonInitLightStateFuncs( GLcontext *ctx );
extern void radeonColorMaterial( GLcontext *ctx, GLenum face, GLenum mode );
extern void check_twoside_fallback( GLcontext *ctx );
extern void radeonUpdateLighting( GLcontext *ctx );
/* radeon_userclip.c
*/
extern void radeonClipPlane( GLcontext *ctx, GLenum plane, const GLfloat *eq );
extern void radeonInitUserClip( GLcontext *ctx );
extern void radeonUpdateClipPlanes( GLcontext *ctx );
#endif

View File

@@ -33,13 +33,12 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
*
*/
#ifndef __RADEON_TRIS_H__
#define __RADEON_TRIS_H__
#ifndef __RADEON_SWTCL_H__
#define __RADEON_SWTCL_H__
#include "mtypes.h"
#include "swrast/swrast.h"
/* Flags for software fallback cases */
/* See correponding strings in radeon_swtcl.c */
#define RADEON_FALLBACK_TEXTURE 0x0001
@@ -94,6 +93,7 @@ struct radeon_swtcl_info {
struct radeon_dma_region indexed_verts;
};
extern void radeonCreateTnlContext( GLcontext *ctx );
extern void radeonInitSwtcl( GLcontext *ctx );
extern void radeonDestroySwtcl( GLcontext *ctx );

View File

@@ -40,6 +40,8 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "mtypes.h"
#include "enums.h"
#include "radeon_context.h"
#if _HAVE_SWTNL
#include "array_cache/acache.h"
#include "tnl/tnl.h"
@@ -48,7 +50,6 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "radeon_maos.h"
#endif
#include "radeon_context.h"
#include "radeon_state.h"
#include "radeon_ioctl.h"
#include "radeon_tex.h"

View File

@@ -39,6 +39,9 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
extern void radeonUpdateTextureState( GLcontext *ctx );
extern void radeonUpdateTextureMatrix( GLcontext *ctx );
extern GLboolean radeonUpdateTexgen( GLcontext *ctx, GLuint unit );
extern GLboolean radeonUpdateTextureEnvCombine( GLcontext *ctx, int unit );
extern int radeonUploadTexImages( radeonContextPtr rmesa, radeonTexObjPtr t );
@@ -52,4 +55,7 @@ extern void radeonUpdateTexLRU( radeonContextPtr rmesa, radeonTexObjPtr t );
extern void radeonInitTextureFuncs( GLcontext *ctx );
extern void radeonInitTexTransform( GLcontext *ctx );
#endif /* __RADEON_TEX_H__ */

View File

@@ -140,6 +140,36 @@ struct radeon_vbinfo {
GLvertexformat vtxfmt;
};
struct radeon_vb {
/* Keep these first: referenced from codegen templates:
*/
GLint counter, initial_counter;
GLint *dmaptr;
void (*notify)( void );
GLint vertex_size;
/* A maximum total of 15 elements per vertex: 3 floats for position, 3
* floats for normal, 4 floats for color, 4 bytes for secondary color,
* 2 floats for each texture unit (4 floats total).
*
* As soon as the 3rd TMU is supported or cube maps (or 3D textures) are
* supported, this value will grow.
*
* The position data is never actually stored here, so 3 elements could be
* trimmed out of the buffer.
*/
union { float f; int i; radeon_color_t color; } vertex[15];
GLfloat *normalptr;
GLfloat *floatcolorptr;
radeon_color_t *colorptr;
GLfloat *floatspecptr;
radeon_color_t *specptr;
GLfloat *texcoordptr[2];
GLcontext *context; /* current context : Single thread only! */
};
extern struct radeon_vb vb;

View File

@@ -38,7 +38,7 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "api_noop.h"
#include "vtxfmt.h"
#include "radeon_vtxfmt.h"
#include "radeon_context.h"
/* Fallback versions of all the entrypoints for situations where
* codegen isn't available. This is still a lot faster than the

View File

@@ -35,7 +35,7 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "glheader.h"
#include "imports.h"
#include "simple_list.h"
#include "radeon_vtxfmt.h"
#include "radeon_context.h"
#if defined(USE_SSE_ASM) && _HAVE_CODEGEN
#include "X86/common_x86_asm.h"

View File

@@ -36,7 +36,7 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "imports.h"
#include "mmath.h"
#include "simple_list.h"
#include "radeon_vtxfmt.h"
#include "radeon_context.h"
#if defined(USE_X86_ASM)

View File

@@ -1096,6 +1096,7 @@ static int __driInitFBDev( struct MiniGLXDisplayRec *dpy )
if (!get_chipfamily_from_chipset( info )) {
fprintf(stderr, "Unknown or non-radeon chipset -- cannot continue\n");
fprintf(stderr, "==> Verify PCI BusID is correct in miniglx.conf\n");
return 0;
}

View File

@@ -1,4 +1,6 @@
/* $Id: glapi.h,v 1.20 2002/06/29 19:48:16 brianp Exp $ */
/**
* \file glapi.h
*/
/*
* Mesa 3-D graphics library
@@ -24,6 +26,7 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* $Id: glapi.h,v 1.20.6.1 2003/03/02 00:27:35 jrfonseca Exp $ */
#ifndef _GLAPI_H
#define _GLAPI_H

View File

@@ -1,4 +1,8 @@
/* $Id: context.c,v 1.188.2.1.2.3 2003/02/21 21:14:08 keithw Exp $ */
/**
* \file context.c
* \brief Mesa context/visual/framebuffer management functions.
* \author Brian Paul
*/
/*
* Mesa 3-D graphics library
@@ -24,7 +28,7 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* $Id: context.c,v 1.188.2.1.2.5 2003/03/04 17:23:34 keithw Exp $ */
/**
* \mainpage Mesa Core Module
@@ -68,13 +72,6 @@
*/
/**
* \file context.c
* \brief Mesa context/visual/framebuffer management functions.
* \author Brian Paul
*/
#include "glheader.h"
#include "imports.h"
#include "buffers.h"
@@ -132,10 +129,12 @@ free_shared_state( GLcontext *ctx, struct gl_shared_state *ss );
/**********************************************************************/
/***** OpenGL SI-style interface (new in Mesa 3.5) *****/
/** \name OpenGL SI-style interface (new in Mesa 3.5) */
/**********************************************************************/
/*@{*/
/* Called by window system/device driver (via gc->exports.destroyCurrent())
/**
* Called by window system/device driver (via gc->exports.destroyCurrent())
* when the rendering context is to be destroyed.
*/
GLboolean
@@ -148,7 +147,8 @@ _mesa_destroyContext(__GLcontext *gc)
return GL_TRUE;
}
/* Called by window system/device driver (via gc->exports.loseCurrent())
/**
* Called by window system/device driver (via gc->exports.loseCurrent())
* when the rendering context is made non-current.
*/
GLboolean
@@ -158,7 +158,8 @@ _mesa_loseCurrent(__GLcontext *gc)
return GL_TRUE;
}
/* Called by window system/device driver (via gc->exports.makeCurrent())
/**
* Called by window system/device driver (via gc->exports.makeCurrent())
* when the rendering context is made current.
*/
GLboolean
@@ -168,7 +169,8 @@ _mesa_makeCurrent(__GLcontext *gc)
return GL_TRUE;
}
/* Called by window system/device driver - yadda, yadda, yadda.
/**
* Called by window system/device driver - yadda, yadda, yadda.
* See above comments.
*/
GLboolean
@@ -219,14 +221,17 @@ _mesa_notifyResize(__GLcontext *gc)
return GL_TRUE;
}
/**
* Called when the context's window/buffer is going to be destroyed.
*/
void
_mesa_notifyDestroy(__GLcontext *gc)
{
/* Called when the context's window/buffer is going to be destroyed. */
/* Unbind from it. */
}
/* Called by window system just before swapping buffers.
/**
* Called by window system just before swapping buffers.
* We have to finish any pending rendering.
*/
void
@@ -251,9 +256,13 @@ _mesa_endDispatchOverride(__GLcontext *gc)
{
}
/* Setup the exports. The window system will call these functions
* when it needs Mesa to do something.
* NOTE: Device drivers should override these functions! For example,
/**
* \brief Setup the exports.
*
* The window system will call these functions when it needs Mesa to do
* something.
*
* \note Device drivers should override these functions! For example,
* the Xlib driver should plug in the XMesa*-style functions into this
* structure. The XMesa-style functions should then call the _mesa_*
* version of these functions. This is an approximation to OO design
@@ -276,9 +285,9 @@ _mesa_init_default_exports(__GLexports *exports)
exports->endDispatchOverride = _mesa_endDispatchOverride;
}
/* exported OpenGL SI interface */
/**
* \brief Exported OpenGL SI interface.
*/
__GLcontext *
__glCoreCreateContext(__GLimports *imports, __GLcontextModes *modes)
{
@@ -295,8 +304,9 @@ __glCoreCreateContext(__GLimports *imports, __GLcontextModes *modes)
return ctx;
}
/* exported OpenGL SI interface */
/**
* \brief Exported OpenGL SI interface.
*/
void
__glCoreNopDispatch(void)
{
@@ -309,28 +319,34 @@ __glCoreNopDispatch(void)
#endif
}
/*@}*/
/**********************************************************************/
/***** GL Visual allocation/destruction *****/
/** \name GL Visual allocation/destruction */
/**********************************************************************/
/*@{*/
/*
* Allocate a new GLvisual object.
* Input: rgbFlag - GL_TRUE=RGB(A) mode, GL_FALSE=Color Index mode
* dbFlag - double buffering?
* stereoFlag - stereo buffer?
* depthBits - requested bits per depth buffer value
* Any value in [0, 32] is acceptable but the actual
* depth type will be GLushort or GLuint as needed.
* stencilBits - requested minimum bits per stencil buffer value
* accumBits - requested minimum bits per accum buffer component
* indexBits - number of bits per pixel if rgbFlag==GL_FALSE
* red/green/blue/alphaBits - number of bits per color component
* in frame buffer for RGB(A) mode.
* We always use 8 in core Mesa though.
* Return: pointer to new GLvisual or NULL if requested parameters can't
* be met.
/**
* \brief Allocate a new GLvisual object.
*
* \param rgbFlag GL_TRUE=RGB(A) mode, GL_FALSE=Color Index mode
* \param dbFlag double buffering?
* \param stereoFlag stereo buffer?
* \param depthBits requested bits per depth buffer value. Any value in [0, 32]
* is acceptable but the actual depth type will be GLushort or GLuint as
* needed.
* \param stencilBits requested minimum bits per stencil buffer value
* \param accumBits requested minimum bits per accum buffer component
* \param indexBits number of bits per pixel if rgbFlag==GL_FALSE
* \param red number of bits per color component in frame buffer for RGB(A)
* mode. We always use 8 in core Mesa though.
* \param green same as above.
* \param blue same as above.
* \param alphaBits same as above.
*
* \return pointer to new GLvisual or NULL if requested parameters can't be
* met.
*/
GLvisual *
_mesa_create_visual( GLboolean rgbFlag,
@@ -364,12 +380,12 @@ _mesa_create_visual( GLboolean rgbFlag,
return vis;
}
/*
* Initialize the fields of the given GLvisual.
* Input: see _mesa_create_visual() above.
* Return: GL_TRUE = success
* GL_FALSE = failure.
/**
* \brief Initialize the fields of the given GLvisual.
*
* \return GL_TRUE on success, or GL_FALSE on failure.
*
* \sa see _mesa_create_visual() above.
*/
GLboolean
_mesa_initialize_visual( GLvisual *vis,
@@ -446,29 +462,33 @@ _mesa_initialize_visual( GLvisual *vis,
return GL_TRUE;
}
void
_mesa_destroy_visual( GLvisual *vis )
{
FREE(vis);
}
/*@}*/
/**********************************************************************/
/***** GL Framebuffer allocation/destruction *****/
/** \name GL Framebuffer allocation/destruction */
/**********************************************************************/
/*@{*/
/*
* Create a new framebuffer. A GLframebuffer is a struct which
* encapsulates the depth, stencil and accum buffers and related
* parameters.
* Input: visual - a GLvisual pointer (we copy the struct contents)
* softwareDepth - create/use a software depth buffer?
* softwareStencil - create/use a software stencil buffer?
* softwareAccum - create/use a software accum buffer?
* softwareAlpha - create/use a software alpha buffer?
* Return: pointer to new GLframebuffer struct or NULL if error.
/**
* \brief Create a new framebuffer.
*
* A GLframebuffer is a struct which encapsulates the depth, stencil and accum
* buffers and related parameters.
*
* \param visual a GLvisual pointer (we copy the struct contents)
* \param softwareDepth create/use a software depth buffer?
* \param softwareStencil create/use a software stencil buffer?
* \param softwareAccum create/use a software accum buffer?
* \param softwareAlpha create/use a software alpha buffer?
*
* \return pointer to new GLframebuffer struct or NULL if error.
*/
GLframebuffer *
_mesa_create_framebuffer( const GLvisual *visual,
@@ -487,10 +507,10 @@ _mesa_create_framebuffer( const GLvisual *visual,
return buffer;
}
/*
* Initialize a GLframebuffer object.
* Input: See _mesa_create_framebuffer() above.
/**
* \brief Initialize a GLframebuffer object.
*
* \sa _mesa_create_framebuffer() above.
*/
void
_mesa_initialize_framebuffer( GLframebuffer *buffer,
@@ -531,8 +551,8 @@ _mesa_initialize_framebuffer( GLframebuffer *buffer,
}
/*
* Free a framebuffer struct and its buffers.
/**
* \brief Free a framebuffer struct and its buffers.
*/
void
_mesa_destroy_framebuffer( GLframebuffer *buffer )
@@ -544,8 +564,8 @@ _mesa_destroy_framebuffer( GLframebuffer *buffer )
}
/*
* Free the data hanging off of <buffer>, but not <buffer> itself.
/**
* \brief Free the data hanging off of \p buffer, but not \p buffer itself.
*/
void
_mesa_free_framebuffer_data( GLframebuffer *buffer )
@@ -583,18 +603,18 @@ _mesa_free_framebuffer_data( GLframebuffer *buffer )
}
}
/*@}*/
/**********************************************************************/
/***** Context allocation, initialization, destroying *****/
/** \name Context allocation, initialization, destroying *****/
/**********************************************************************/
/*@{*/
_glthread_DECLARE_STATIC_MUTEX(OneTimeLock);
/*
* This function just calls all the various one-time-init functions in Mesa.
/**
* \brief This function just calls all the various one-time-init functions in Mesa.
*/
static void
one_time_init( GLcontext *ctx )
@@ -641,7 +661,6 @@ one_time_init( GLcontext *ctx )
_glthread_UNLOCK_MUTEX(OneTimeLock);
}
static void
init_matrix_stack( struct matrix_stack *stack,
GLuint maxDepth, GLuint dirtyFlag )
@@ -660,7 +679,6 @@ init_matrix_stack( struct matrix_stack *stack,
stack->Top = stack->Stack;
}
static void
free_matrix_stack( struct matrix_stack *stack )
{
@@ -672,9 +690,8 @@ free_matrix_stack( struct matrix_stack *stack )
stack->Stack = stack->Top = NULL;
}
/*
* Allocate and initialize a shared context state structure.
/**
* \brief Allocate and initialize a shared context state structure.
*/
static struct gl_shared_state *
alloc_shared_state( void )
@@ -754,9 +771,8 @@ alloc_shared_state( void )
}
}
/*
* Deallocate a shared state context and all children structures.
/**
* \brief Deallocate a shared state context and all children structures.
*/
static void
free_shared_state( GLcontext *ctx, struct gl_shared_state *ss )
@@ -799,11 +815,10 @@ free_shared_state( GLcontext *ctx, struct gl_shared_state *ss )
FREE(ss);
}
/*
* Initialize the nth light. Note that the defaults for light 0 are
* different than the other lights.
/**
* \brief Initialize the n-th light.
*
* Note that the defaults for light 0 are different than the other lights.
*/
static void
init_light( struct gl_light *l, GLuint n )
@@ -831,8 +846,6 @@ init_light( struct gl_light *l, GLuint n )
l->Enabled = GL_FALSE;
}
static void
init_lightmodel( struct gl_lightmodel *lm )
{
@@ -842,7 +855,6 @@ init_lightmodel( struct gl_lightmodel *lm )
lm->ColorControl = GL_SINGLE_COLOR;
}
static void
init_material( struct gl_material *m )
{
@@ -856,8 +868,6 @@ init_material( struct gl_material *m )
m->SpecularIndex = 1;
}
static void
init_texture_unit( GLcontext *ctx, GLuint unit )
{
@@ -910,9 +920,9 @@ init_texture_unit( GLcontext *ctx, GLuint unit )
}
/* Initialize a 1-D evaluator map */
/**
* \brief Initialize a 1-D evaluator map.
*/
static void
init_1d_map( struct gl_1d_map *map, int n, const float *initial )
{
@@ -928,7 +938,9 @@ init_1d_map( struct gl_1d_map *map, int n, const float *initial )
}
/* Initialize a 2-D evaluator map */
/**
* \brief Initialize a 2-D evaluator map
*/
static void
init_2d_map( struct gl_2d_map *map, int n, const float *initial )
{
@@ -946,9 +958,8 @@ init_2d_map( struct gl_2d_map *map, int n, const float *initial )
}
}
/*
* Initialize the attribute groups in a GLcontext.
/**
* \brief Initialize the attribute groups in a GLcontext.
*/
static void
init_attrib_groups( GLcontext *ctx )
@@ -1547,13 +1558,13 @@ init_attrib_groups( GLcontext *ctx )
}
}
/*
* Allocate the proxy textures. If we run out of memory part way through
* the allocations clean up and return GL_FALSE.
* Return: GL_TRUE=success, GL_FALSE=failure
/**
* \brief Allocate the proxy textures.
*
* If we run out of memory part way through the allocations clean up and return
* GL_FALSE.
*
* \return GL_TRUE on success, or GL_FALSE on failure
*/
static GLboolean
alloc_proxy_textures( GLcontext *ctx )
@@ -1645,7 +1656,6 @@ alloc_proxy_textures( GLcontext *ctx )
}
}
static void add_debug_flags( const char *debug )
{
#ifdef MESA_DEBUG
@@ -1683,10 +1693,11 @@ static void add_debug_flags( const char *debug )
#endif
}
/*
* Initialize a GLcontext struct. This includes allocating all the
* other structs and arrays which hang off of the context by pointers.
/**
* \brief Initialize a GLcontext struct.
*
* This includes allocating all the other structs and arrays which hang off of
* the context by pointers.
*/
GLboolean
_mesa_initialize_context( GLcontext *ctx,
@@ -1883,7 +1894,9 @@ _mesa_initialize_context( GLcontext *ctx,
ctx->SavePrefersFloat = GL_FALSE;
/* Neutral tnl module stuff */
/* _mesa_init_exec_vtxfmt( ctx ); */
#if _HAVE_FULL_GL
_mesa_init_exec_vtxfmt( ctx );
#endif
ctx->TnlModule.Current = NULL;
ctx->TnlModule.SwapCount = 0;
@@ -1920,15 +1933,15 @@ _mesa_initialize_context( GLcontext *ctx,
return GL_TRUE;
}
/**
* Allocate and initialize a GLcontext structure.
* Input: visual - a GLvisual pointer (we copy the struct contents)
* sharelist - another context to share display lists with or NULL
* driver_ctx - pointer to device driver's context state struct
* direct - direct rendering?
* Return: pointer to a new __GLcontextRec or NULL if error.
* \brief Allocate and initialize a GLcontext structure.
*
* \param visual a GLvisual pointer (we copy the struct contents)
* \param sharelist another context to share display lists with or NULL
* \param driver_ctx pointer to device driver's context state struct
* \param direct direct rendering?
*
* \return pointer to a new __GLcontextRec or NULL if error.
*/
GLcontext *
_mesa_create_context( const GLvisual *visual,
@@ -1955,10 +1968,9 @@ _mesa_create_context( const GLvisual *visual,
}
}
/**
* Free the data associated with the given context.
* \brief Free the data associated with the given context.
*
* But don't free() the GLcontext struct itself!
*/
void
@@ -2073,10 +2085,8 @@ _mesa_free_context_data( GLcontext *ctx )
FREE(ctx->Save);
}
/**
* Destroy a GLcontext structure.
* \brief Destroy a GLcontext structure.
*/
void
_mesa_destroy_context( GLcontext *ctx )
@@ -2087,13 +2097,12 @@ _mesa_destroy_context( GLcontext *ctx )
}
}
/*
* Copy attribute groups from one context to another.
* Input: src - source context
* dst - destination context
* mask - bitwise OR of GL_*_BIT flags
/**
* \brief Copy attribute groups from one context to another.
*
* \param src source context
* \param dst destination context
* \param mask bitwise OR of GL_*_BIT flags
*/
void
_mesa_copy_context( const GLcontext *src, GLcontext *dst, GLuint mask )
@@ -2202,8 +2211,6 @@ _mesa_copy_context( const GLcontext *src, GLcontext *dst, GLuint mask )
dst->NewState = _NEW_ALL;
}
static void print_info( void )
{
_mesa_debug(NULL, "Mesa GL_VERSION = %s\n",
@@ -2231,9 +2238,8 @@ static void print_info( void )
#endif
}
/*
* Set the current context, binding the given frame buffer to the context.
/**
* \brief Set the current context, binding the given frame buffer to the context.
*/
void
_mesa_make_current( GLcontext *newCtx, GLframebuffer *buffer )
@@ -2242,9 +2248,9 @@ _mesa_make_current( GLcontext *newCtx, GLframebuffer *buffer )
}
/*
* Bind the given context to the given draw-buffer and read-buffer
* and make it the current context for this thread.
/**
* \brief Bind the given context to the given draw-buffer and read-buffer and
* make it the current context for this thread.
*/
void
_mesa_make_current2( GLcontext *newCtx, GLframebuffer *drawBuffer,
@@ -2345,10 +2351,9 @@ _mesa_make_current2( GLcontext *newCtx, GLframebuffer *drawBuffer,
}
}
/*
* Return current context handle for the calling thread.
/**
* \brief Return current context handle for the calling thread.
*
* This isn't the fastest way to get the current context.
* If you need speed, see the GET_CURRENT_CONTEXT() macro in context.h
*/
@@ -2358,11 +2363,11 @@ _mesa_get_current_context( void )
return (GLcontext *) _glapi_get_context();
}
/*
* Return pointer to this context's current API dispatch table.
* It'll either be the immediate-mode execute dispatcher or the
* display list compile dispatcher.
/**
* \brief Return pointer to this context's current API dispatch table.
*
* It'll either be the immediate-mode execute dispatcher or the display list
* compile dispatcher.
*/
struct _glapi_table *
_mesa_get_dispatch(GLcontext *ctx)
@@ -2370,15 +2375,17 @@ _mesa_get_dispatch(GLcontext *ctx)
return ctx->CurrentDispatch;
}
/*@}*/
/**********************************************************************/
/***** Miscellaneous functions *****/
/** \name Miscellaneous functions *****/
/**********************************************************************/
/*@{*/
/*
/**
* Record the given error code and call the driver's Error function if defined.
*
* This is called via _mesa_error().
*/
void
@@ -2397,7 +2404,6 @@ _mesa_record_error( GLcontext *ctx, GLenum error )
}
}
void
_mesa_Finish( void )
{
@@ -2408,8 +2414,6 @@ _mesa_Finish( void )
}
}
void
_mesa_Flush( void )
{
@@ -2420,8 +2424,9 @@ _mesa_Flush( void )
}
}
/**
* \brief Primitive names
*/
const char *_mesa_prim_name[GL_POLYGON+4] = {
"GL_POINTS",
"GL_LINES",
@@ -2437,3 +2442,5 @@ const char *_mesa_prim_name[GL_POLYGON+4] = {
"inside unkown primitive",
"unknown state"
};
/*@{*/

View File

@@ -1,4 +1,23 @@
/* $Id: context.h,v 1.35 2002/10/24 23:57:20 brianp Exp $ */
/**
* \file context.h
* \brief Context.
*
* There are three Mesa datatypes which are meant to be used by device
* drivers:
* - GLcontext: this contains the Mesa rendering state
* - GLvisual: this describes the color buffer (RGB vs. ci), whether or not
* there's a depth buffer, stencil buffer, etc.
* - GLframebuffer: contains pointers to the depth buffer, stencil buffer,
* accum buffer and alpha buffers.
*
* These types should be encapsulated by corresponding device driver
* datatypes. See xmesa.h and xmesaP.h for an example.
*
* In OOP terms, GLcontext, GLvisual, and GLframebuffer are base classes
* which the device driver must derive from.
*
* The following functions create and destroy these datatypes.
*/
/*
* Mesa 3-D graphics library
@@ -24,6 +43,7 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* $Id: context.h,v 1.35.4.1 2003/03/02 00:27:32 jrfonseca Exp $ */
#ifndef CONTEXT_H
#define CONTEXT_H
@@ -33,28 +53,10 @@
#include "mtypes.h"
/*
* There are three Mesa datatypes which are meant to be used by device
* drivers:
* GLcontext: this contains the Mesa rendering state
* GLvisual: this describes the color buffer (rgb vs. ci), whether
* or not there's a depth buffer, stencil buffer, etc.
* GLframebuffer: contains pointers to the depth buffer, stencil
* buffer, accum buffer and alpha buffers.
*
* These types should be encapsulated by corresponding device driver
* datatypes. See xmesa.h and xmesaP.h for an example.
*
* In OOP terms, GLcontext, GLvisual, and GLframebuffer are base classes
* which the device driver must derive from.
*
* The following functions create and destroy these datatypes.
*/
/*
* Create/destroy a GLvisual.
*/
/**********************************************************************/
/** \name Create/destroy a GLvisual. */
/*@{*/
extern GLvisual *
_mesa_create_visual( GLboolean rgbFlag,
GLboolean dbFlag,
@@ -93,11 +95,13 @@ _mesa_initialize_visual( GLvisual *v,
extern void
_mesa_destroy_visual( GLvisual *vis );
/*@}*/
/*
* Create/destroy a GLframebuffer.
*/
/**********************************************************************/
/** \name Create/destroy a GLframebuffer. */
/*@{*/
extern GLframebuffer *
_mesa_create_framebuffer( const GLvisual *visual,
GLboolean softwareDepth,
@@ -119,11 +123,13 @@ _mesa_free_framebuffer_data( GLframebuffer *buffer );
extern void
_mesa_destroy_framebuffer( GLframebuffer *buffer );
/*@}*/
/*
* Create/destroy a GLcontext.
*/
/**********************************************************************/
/** \name Create/destroy a GLcontext. */
/*@{*/
extern GLcontext *
_mesa_create_context( const GLvisual *visual,
GLcontext *share_list,
@@ -160,10 +166,13 @@ _mesa_make_current2( GLcontext *ctx, GLframebuffer *drawBuffer,
extern GLcontext *
_mesa_get_current_context(void);
/*@}*/
/*
* Macros for fetching current context.
/**
* \brief Macro for fetching the current context.
*
* It should be used in the variable declaration area of a function.
*/
#ifdef THREADS
@@ -177,7 +186,9 @@ _mesa_get_current_context(void);
/* OpenGL SI-style export functions. */
/**********************************************************************/
/** \name OpenGL SI-style export functions. */
/*@{*/
extern GLboolean
_mesa_destroyContext(__GLcontext *gc);
@@ -215,6 +226,7 @@ _mesa_beginDispatchOverride(__GLcontext *gc);
extern void
_mesa_endDispatchOverride(__GLcontext *gc);
/*@}*/
extern struct _glapi_table *
@@ -222,9 +234,9 @@ _mesa_get_dispatch(GLcontext *ctx);
/*
* Miscellaneous
*/
/**********************************************************************/
/** \name Miscellaneous */
/*@{*/
extern void
_mesa_record_error( GLcontext *ctx, GLenum error );
@@ -236,5 +248,6 @@ _mesa_Finish( void );
extern void
_mesa_Flush( void );
/*@}*/
#endif

View File

@@ -1,4 +1,7 @@
/* $Id: dd.h,v 1.74 2002/10/11 17:41:04 brianp Exp $ */
/**
* \file dd.h
* \brief Device driver interfaces.
*/
/*
* Mesa 3-D graphics library
@@ -24,6 +27,7 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* $Id: dd.h,v 1.74.6.1 2003/03/02 00:27:33 jrfonseca Exp $ */
#ifndef DD_INCLUDED
@@ -47,136 +51,181 @@ struct gl_pixelstore_attrib;
#define DD_STENCIL_BIT GL_STENCIL_BUFFER_BIT /* 0x00000400 */
/*
* Device Driver function table.
/**
* \brief Device driver function table.
*/
struct dd_function_table {
/**
* \brief Return a string as needed by glGetString().
*
* Only the GL_RENDERER token must be implemented. Otherwise, NULL can be
* returned.
*/
const GLubyte * (*GetString)( GLcontext *ctx, GLenum name );
/* Return a string as needed by glGetString().
* Only the GL_RENDERER token must be implemented. Otherwise,
* NULL can be returned.
*/
/**
* \brief Notify the driver after Mesa has made some internal state changes.
*
* This is in addition to any statechange callbacks Mesa may already have
* made.
*/
void (*UpdateState)( GLcontext *ctx, GLuint new_state );
/*
* UpdateState() is called to notify the driver after Mesa has made
* some internal state changes. This is in addition to any
* statechange callbacks Mesa may already have made.
*/
void (*Clear)( GLcontext *ctx, GLbitfield mask, GLboolean all,
GLint x, GLint y, GLint width, GLint height );
/* Clear the color/depth/stencil/accum buffer(s).
* 'mask' is a bitmask of the DD_*_BIT values defined above that indicates
/**
* \brief Clear the color/depth/stencil/accum buffer(s).
*
* \p mask is a bitmask of the DD_*_BIT values defined above that indicates
* which buffers need to be cleared.
* If 'all' is true then the clear the whole buffer, else clear only the
* region defined by (x,y,width,height).
* This function must obey the glColorMask, glIndexMask and glStencilMask
* If \p all is true then clear the whole buffer, else clear only the
* region defined by \c (x, y, width, height).
* This function must obey the glColorMask(), glIndexMask() and glStencilMask()
* settings!
* Software Mesa can do masked clears if the device driver can't.
*/
void (*Clear)( GLcontext *ctx, GLbitfield mask, GLboolean all,
GLint x, GLint y, GLint width, GLint height );
/**
* \brief Specify the current buffer for writing.
*
* Called via glDrawBuffer(). Note the driver must organize fallbacks (e.g.
* with swrast) if it cannot implement the requested mode.
*/
void (*DrawBuffer)( GLcontext *ctx, GLenum buffer );
/*
* Specifies the current buffer for writing. Called via glDrawBuffer().
* Note the driver must organize fallbacks (eg with swrast) if it
* cannot implement the requested mode.
/**
* \brief Specifies the current buffer for reading.
*
* Called via glReadBuffer().
*/
void (*ReadBuffer)( GLcontext *ctx, GLenum buffer );
/*
* Specifies the current buffer for reading. Called via glReadBuffer().
*/
void (*GetBufferSize)( GLframebuffer *buffer,
GLuint *width, GLuint *height );
/*
* Returns the width and height of the named buffer/window.
/**
* \brief Get the width and height of the named buffer/window.
*
* Mesa uses this to determine when the driver's window size has changed.
*/
void (*GetBufferSize)( GLframebuffer *buffer,
GLuint *width, GLuint *height );
/**
* \brief Resize the driver's depth/stencil/accum/back buffers to match the
* size given in the GLframebuffer struct.
*
* This is typically called when Mesa detects that a window size has changed.
*/
void (*ResizeBuffers)( GLframebuffer *buffer );
/*
* Resize the driver's depth/stencil/accum/back buffers to match the
* size given in the GLframebuffer struct. This is typically called
* when Mesa detects that a window size has changed.
*/
/**
* \brief This is called whenever glFinish() is called.
*/
void (*Finish)( GLcontext *ctx );
/*
* This is called whenever glFinish() is called.
*/
/**
* \brief This is called whenever glFlush() is called.
*/
void (*Flush)( GLcontext *ctx );
/*
* This is called whenever glFlush() is called.
*/
void (*Error)( GLcontext *ctx );
/*
* Called whenever an error is generated. ctx->ErrorValue contains
/**
* \brief Called whenever an error is generated. ctx->ErrorValue contains
* the error value.
*/
void (*Error)( GLcontext *ctx );
/***
*** For hardware accumulation buffer:
***/
/**
* \name For hardware accumulation buffer
*/
/*@{*/
/**
* \brief Execute glAccum command within the given scissor region.
*/
void (*Accum)( GLcontext *ctx, GLenum op, GLfloat value,
GLint xpos, GLint ypos, GLint width, GLint height );
/* Execute glAccum command within the given scissor region.
/*@}*/
/**
* \name glDraw(), glRead(), glCopyPixels() and glBitmap() functions
*/
/*@{*/
/***
*** glDraw/Read/CopyPixels and glBitmap functions:
***/
/**
* \brief This is called by glDrawPixels().
*
* \p unpack describes how to unpack the source image data.
*/
void (*DrawPixels)( GLcontext *ctx,
GLint x, GLint y, GLsizei width, GLsizei height,
GLenum format, GLenum type,
const struct gl_pixelstore_attrib *unpack,
const GLvoid *pixels );
/* This is called by glDrawPixels.
* 'unpack' describes how to unpack the source image data.
*/
/**
* \brief Called by glReadPixels().
*/
void (*ReadPixels)( GLcontext *ctx,
GLint x, GLint y, GLsizei width, GLsizei height,
GLenum format, GLenum type,
const struct gl_pixelstore_attrib *unpack,
GLvoid *dest );
/* Called by glReadPixels.
*/
/**
* \brief Do a glCopyPixels().
*
* This function must respect all rasterization state, glPixelTransfer(),
* glPixelZoom(), etc.
*/
void (*CopyPixels)( GLcontext *ctx,
GLint srcx, GLint srcy,
GLsizei width, GLsizei height,
GLint dstx, GLint dsty, GLenum type );
/* Do a glCopyPixels. This function must respect all rasterization
* state, glPixelTransfer, glPixelZoom, etc.
*/
/**
* \brief This is called by glBitmap().
*
* Works the same as dd_function_table::DrawPixels, above.
*/
void (*Bitmap)( GLcontext *ctx,
GLint x, GLint y, GLsizei width, GLsizei height,
const struct gl_pixelstore_attrib *unpack,
const GLubyte *bitmap );
/* This is called by glBitmap. Works the same as DrawPixels, above.
*/
/*@}*/
/***
*** Texture image functions:
***/
/**
* \name Texture image functions
*/
/*@{*/
/**
* \brief Choose texture format.
*
* This is called by the \c _mesa_store_tex[sub]image[123]d() fallback
* functions. The driver should examine \p internalFormat and return a
* pointer to an appropriate gl_texture_format.
*/
const struct gl_texture_format *
(*ChooseTextureFormat)( GLcontext *ctx, GLint internalFormat,
GLenum srcFormat, GLenum srcType );
/* This is called by the _mesa_store_tex[sub]image[123]d() fallback
* functions. The driver should examine <internalFormat> and return a
* pointer to an appropriate gl_texture_format.
*/
/**
* \brief Called by glTexImage1D().
*
* \param target user specified.
* \param format user specified.
* \param type user specified.
* \param pixels user specified.
* \param packing indicates the image packing of pixels.
* \param texObj is the target texture object.
* \param texImage is the target texture image. It will have the texture \p
* width, \p height, \p depth, \p border and \p internalFormat information.
*
* \p retainInternalCopy is returned by this function and indicates whether
* core Mesa should keep an internal copy of the texture image.
*
* Drivers should call a fallback routine from texstore.c if needed.
*/
void (*TexImage1D)( GLcontext *ctx, GLenum target, GLint level,
GLint internalFormat,
GLint width, GLint border,
@@ -184,6 +233,12 @@ struct dd_function_table {
const struct gl_pixelstore_attrib *packing,
struct gl_texture_object *texObj,
struct gl_texture_image *texImage );
/**
* \brief Called by glTexImage2D().
*
* \sa dd_function_table::TexImage1D.
*/
void (*TexImage2D)( GLcontext *ctx, GLenum target, GLint level,
GLint internalFormat,
GLint width, GLint height, GLint border,
@@ -191,6 +246,12 @@ struct dd_function_table {
const struct gl_pixelstore_attrib *packing,
struct gl_texture_object *texObj,
struct gl_texture_image *texImage );
/**
* \brief Called by glTexImage3D().
*
* \sa dd_function_table::TexImage1D.
*/
void (*TexImage3D)( GLcontext *ctx, GLenum target, GLint level,
GLint internalFormat,
GLint width, GLint height, GLint depth, GLint border,
@@ -198,18 +259,28 @@ struct dd_function_table {
const struct gl_pixelstore_attrib *packing,
struct gl_texture_object *texObj,
struct gl_texture_image *texImage );
/* Called by glTexImage1/2/3D.
* Arguments:
* <target>, <level>, <format>, <type> and <pixels> are user specified.
* <packing> indicates the image packing of pixels.
* <texObj> is the target texture object.
* <texImage> is the target texture image. It will have the texture
* width, height, depth, border and internalFormat information.
* <retainInternalCopy> is returned by this function and indicates whether
* core Mesa should keep an internal copy of the texture image.
* Drivers should call a fallback routine from texstore.c if needed.
*/
/**
* \brief Called by glTexSubImage1D().
*
* \param target user specified.
* \param level user specified.
* \param xoffset user specified.
* \param yoffset user specified.
* \param zoffset user specified.
* \param width user specified.
* \param height user specified.
* \param depth user specified.
* \param format user specified.
* \param type user specified.
* \param pixels user specified.
* \param packing indicates the image packing of pixels.
* \param texObj is the target texture object.
* \param texImage is the target texture image. It will have the texture \p
* width, \p height, \p border and \p internalFormat information.
*
* The driver should use a fallback routine from texstore.c if needed.
*/
void (*TexSubImage1D)( GLcontext *ctx, GLenum target, GLint level,
GLint xoffset, GLsizei width,
GLenum format, GLenum type,
@@ -217,6 +288,12 @@ struct dd_function_table {
const struct gl_pixelstore_attrib *packing,
struct gl_texture_object *texObj,
struct gl_texture_image *texImage );
/**
* \brief Called by glTexSubImage2D().
*
* \sa dd_function_table::TexSubImage1D.
*/
void (*TexSubImage2D)( GLcontext *ctx, GLenum target, GLint level,
GLint xoffset, GLint yoffset,
GLsizei width, GLsizei height,
@@ -225,6 +302,12 @@ struct dd_function_table {
const struct gl_pixelstore_attrib *packing,
struct gl_texture_object *texObj,
struct gl_texture_image *texImage );
/**
* \brief Called by glTexSubImage3D().
*
* \sa dd_function_table::TexSubImage1D.
*/
void (*TexSubImage3D)( GLcontext *ctx, GLenum target, GLint level,
GLint xoffset, GLint yoffset, GLint zoffset,
GLsizei width, GLsizei height, GLint depth,
@@ -233,68 +316,108 @@ struct dd_function_table {
const struct gl_pixelstore_attrib *packing,
struct gl_texture_object *texObj,
struct gl_texture_image *texImage );
/* Called by glTexSubImage1/2/3D.
* Arguments:
* <target>, <level>, <xoffset>, <yoffset>, <zoffset>, <width>, <height>,
* <depth>, <format>, <type> and <pixels> are user specified.
* <packing> indicates the image packing of pixels.
* <texObj> is the target texture object.
* <texImage> is the target texture image. It will have the texture
* width, height, border and internalFormat information.
* The driver should use a fallback routine from texstore.c if needed.
*/
/**
* \brief Called by glCopyTexImage1D().
*
* Drivers should use a fallback routine from texstore.c if needed.
*/
void (*CopyTexImage1D)( GLcontext *ctx, GLenum target, GLint level,
GLenum internalFormat, GLint x, GLint y,
GLsizei width, GLint border );
/**
* \brief Called by glCopyTexImage2D().
*
* Drivers should use a fallback routine from texstore.c if needed.
*/
void (*CopyTexImage2D)( GLcontext *ctx, GLenum target, GLint level,
GLenum internalFormat, GLint x, GLint y,
GLsizei width, GLsizei height, GLint border );
/* Called by glCopyTexImage1D and glCopyTexImage2D.
/**
* \brief Called by glCopyTexSubImage1D().
*
* Drivers should use a fallback routine from texstore.c if needed.
*/
void (*CopyTexSubImage1D)( GLcontext *ctx, GLenum target, GLint level,
GLint xoffset,
GLint x, GLint y, GLsizei width );
/**
* \brief Called by glCopyTexSubImage2D().
*
* Drivers should use a fallback routine from texstore.c if needed.
*/
void (*CopyTexSubImage2D)( GLcontext *ctx, GLenum target, GLint level,
GLint xoffset, GLint yoffset,
GLint x, GLint y,
GLsizei width, GLsizei height );
/**
* \brief Called by glCopyTexSubImage3D().
*
* Drivers should use a fallback routine from texstore.c if needed.
*/
void (*CopyTexSubImage3D)( GLcontext *ctx, GLenum target, GLint level,
GLint xoffset, GLint yoffset, GLint zoffset,
GLint x, GLint y,
GLsizei width, GLsizei height );
/* Called by glCopyTexSubImage1/2/3D.
* Drivers should use a fallback routine from texstore.c if needed.
*/
/**
* \brief Called by glTexImage[123]D when user specifies a proxy texture
* target.
*
* \return GL_TRUE if the proxy test passes, or GL_FALSE if the test fails.
*/
GLboolean (*TestProxyTexImage)(GLcontext *ctx, GLenum target,
GLint level, GLint internalFormat,
GLenum format, GLenum type,
GLint width, GLint height,
GLint depth, GLint border);
/* Called by glTexImage[123]D when user specifies a proxy texture
* target. Return GL_TRUE if the proxy test passes, return GL_FALSE
* if the test fails.
/*@}*/
/**
* \name Compressed texture functions
*/
/*@{*/
/***
*** Compressed texture functions:
***/
/**
* \brief Called by glCompressedTexImage1D().
*
* \param target user specified.
* \param format user specified.
* \param type user specified.
* \param pixels user specified.
* \param packing indicates the image packing of pixels.
* \param texObj is the target texture object.
* \param texImage is the target texture image. It will have the texture \p
* width, \p height, \p depth, \p border and \p internalFormat information.
*
* \a retainInternalCopy is returned by this function and indicates whether
* core Mesa should keep an internal copy of the texture image.
*/
void (*CompressedTexImage1D)( GLcontext *ctx, GLenum target,
GLint level, GLint internalFormat,
GLsizei width, GLint border,
GLsizei imageSize, const GLvoid *data,
struct gl_texture_object *texObj,
struct gl_texture_image *texImage );
/**
* \brief Called by glCompressedTexImage2D().
*
* \sa dd_function_table::glCompressedTexImage1D.
*/
void (*CompressedTexImage2D)( GLcontext *ctx, GLenum target,
GLint level, GLint internalFormat,
GLsizei width, GLsizei height, GLint border,
GLsizei imageSize, const GLvoid *data,
struct gl_texture_object *texObj,
struct gl_texture_image *texImage );
/**
* \brief Called by glCompressedTexImage3D().
*
* \sa dd_function_table::glCompressedTexImage3D.
*/
void (*CompressedTexImage3D)( GLcontext *ctx, GLenum target,
GLint level, GLint internalFormat,
GLsizei width, GLsizei height, GLsizei depth,
@@ -302,24 +425,35 @@ struct dd_function_table {
GLsizei imageSize, const GLvoid *data,
struct gl_texture_object *texObj,
struct gl_texture_image *texImage );
/* Called by glCompressedTexImage1/2/3D.
* Arguments:
* <target>, <level>, <internalFormat>, <data> are user specified.
* <texObj> is the target texture object.
* <texImage> is the target texture image. It will have the texture
* width, height, depth, border and internalFormat information.
* <retainInternalCopy> is returned by this function and indicates whether
* core Mesa should keep an internal copy of the texture image.
* Return GL_TRUE if operation completed, return GL_FALSE if core Mesa
* should do the job.
*/
/**
* \brief Called by glCompressedTexSubImage1D().
*
* \param target user specified.
* \param level user specified.
* \param xoffset user specified.
* \param yoffset user specified.
* \param zoffset user specified.
* \param width user specified.
* \param height user specified.
* \param depth user specified.
* \param imageSize user specified.
* \param data user specified.
* \param texObj is the target texture object.
* \param texImage is the target texture image. It will have the texture \p
* width, \p height, \p depth, \p border and \p internalFormat information.
*/
void (*CompressedTexSubImage1D)(GLcontext *ctx, GLenum target, GLint level,
GLint xoffset, GLsizei width,
GLenum format,
GLsizei imageSize, const GLvoid *data,
struct gl_texture_object *texObj,
struct gl_texture_image *texImage);
/**
* \brief Called by glCompressedTexSubImage2D().
*
* \sa dd_function_table::glCompressedTexImage3D.
*/
void (*CompressedTexSubImage2D)(GLcontext *ctx, GLenum target, GLint level,
GLint xoffset, GLint yoffset,
GLsizei width, GLint height,
@@ -327,6 +461,11 @@ struct dd_function_table {
GLsizei imageSize, const GLvoid *data,
struct gl_texture_object *texObj,
struct gl_texture_image *texImage);
/**
* \brief Called by glCompressedTexSubImage3D().
*
* \sa dd_function_table::glCompressedTexImage3D.
*/
void (*CompressedTexSubImage3D)(GLcontext *ctx, GLenum target, GLint level,
GLint xoffset, GLint yoffset, GLint zoffset,
GLsizei width, GLint height, GLint depth,
@@ -334,59 +473,64 @@ struct dd_function_table {
GLsizei imageSize, const GLvoid *data,
struct gl_texture_object *texObj,
struct gl_texture_image *texImage);
/* Called by glCompressedTexSubImage1/2/3D.
* Arguments:
* <target>, <level>, <x/z/zoffset>, <width>, <height>, <depth>,
* <imageSize>, and <data> are user specified.
* <texObj> is the target texture object.
* <texImage> is the target texture image. It will have the texture
* width, height, depth, border and internalFormat information.
* Return GL_TRUE if operation completed, return GL_FALSE if core Mesa
* should do the job.
/*@}*/
/**
* \name Texture object functions
*/
/*@{*/
/***
*** Texture object functions:
***/
/**
* \brief Called by glBindTexture().
*/
void (*BindTexture)( GLcontext *ctx, GLenum target,
struct gl_texture_object *tObj );
/* Called by glBindTexture().
*/
/**
* \brief Called when a texture object is created.
*/
void (*CreateTexture)( GLcontext *ctx, struct gl_texture_object *tObj );
/* Called when a texture object is created.
*/
/**
* \brief Called when a texture object is about to be deallocated.
*
* Driver should free anything attached to the DriverData pointers.
*/
void (*DeleteTexture)( GLcontext *ctx, struct gl_texture_object *tObj );
/* Called when a texture object is about to be deallocated. Driver
* should free anything attached to the DriverData pointers.
*/
/**
* \brief Called by glAreTextureResident().
*/
GLboolean (*IsTextureResident)( GLcontext *ctx,
struct gl_texture_object *t );
/* Called by glAreTextureResident().
*/
/**
* \brief Called by glPrioritizeTextures().
*/
void (*PrioritizeTexture)( GLcontext *ctx, struct gl_texture_object *t,
GLclampf priority );
/* Called by glPrioritizeTextures().
*/
/**
* \brief Called by glActiveTextureARB() to set current texture unit.
*/
void (*ActiveTexture)( GLcontext *ctx, GLuint texUnitNumber );
/* Called by glActiveTextureARB to set current texture unit.
*/
void (*UpdateTexturePalette)( GLcontext *ctx,
struct gl_texture_object *tObj );
/* Called when the texture's color lookup table is changed.
* If tObj is NULL then the shared texture palette ctx->Texture.Palette
/**
* \brief Called when the texture's color lookup table is changed.
*
* If \p tObj is NULL then the shared texture palette ctx->Texture.Palette
* is to be updated.
*/
void (*UpdateTexturePalette)( GLcontext *ctx,
struct gl_texture_object *tObj );
/*@}*/
/***
*** Imaging functionality:
***/
/**
* \name Imaging functionality
* .
*/
/*@{*/
void (*CopyColorTable)( GLcontext *ctx,
GLenum target, GLenum internalformat,
GLint x, GLint y, GLsizei width );
@@ -403,16 +547,19 @@ struct dd_function_table {
GLenum internalFormat,
GLint x, GLint y,
GLsizei width, GLsizei height );
/*@}*/
/***
*** State-changing functions (drawing functions are above)
***
*** These functions are called by their corresponding OpenGL API functions.
*** They're ALSO called by the gl_PopAttrib() function!!!
*** May add more functions like these to the device driver in the future.
***/
/**
* \name State-changing functions.
*
* \note drawing functions are above.
*
* These functions are called by their corresponding OpenGL API functions.
* They're \e also called by the gl_PopAttrib() function!!!
* May add more functions like these to the device driver in the future.
*/
/*@{*/
void (*AlphaFunc)(GLcontext *ctx, GLenum func, GLfloat ref);
void (*BlendColor)(GLcontext *ctx, const GLfloat color[4]);
void (*BlendEquation)(GLcontext *ctx, GLenum mode);
@@ -465,12 +612,15 @@ struct dd_function_table {
GLenum pname, const GLfloat *params);
void (*TextureMatrix)(GLcontext *ctx, GLuint unit, const GLmatrix *mat);
void (*Viewport)(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h);
/*@}*/
/***
*** Vertex array functions
***
*** Called by the corresponding OpenGL functions.
***/
/**
* \name Vertex array functions
*
* Called by the corresponding OpenGL functions.
*/
/*@{*/
void (*VertexPointer)(GLcontext *ctx, GLint size, GLenum type,
GLsizei stride, const GLvoid *ptr);
void (*NormalPointer)(GLcontext *ctx, GLenum type,
@@ -488,111 +638,164 @@ struct dd_function_table {
void (*EdgeFlagPointer)(GLcontext *ctx, GLsizei stride, const GLvoid *ptr);
void (*VertexAttribPointer)(GLcontext *ctx, GLuint index, GLint size,
GLenum type, GLsizei stride, const GLvoid *ptr);
/*@}*/
/*** State-query functions
***
*** Return GL_TRUE if query was completed, GL_FALSE otherwise.
***/
/**
* \name State-query functions
*
* Return GL_TRUE if query was completed, GL_FALSE otherwise.
*/
/*@{*/
GLboolean (*GetBooleanv)(GLcontext *ctx, GLenum pname, GLboolean *result);
GLboolean (*GetDoublev)(GLcontext *ctx, GLenum pname, GLdouble *result);
GLboolean (*GetFloatv)(GLcontext *ctx, GLenum pname, GLfloat *result);
GLboolean (*GetIntegerv)(GLcontext *ctx, GLenum pname, GLint *result);
GLboolean (*GetPointerv)(GLcontext *ctx, GLenum pname, GLvoid **result);
/*@}*/
/***
*** Support for multiple t&l engines
***/
/**
* \name Support for multiple T&L engines
*/
/*@{*/
GLuint NeedValidate;
/* Bitmask of state changes that require the current tnl module to be
/**
* \brief Bitmask of state changes that require the current T&L module to be
* validated, using ValidateTnlModule() below.
*/
GLuint NeedValidate;
void (*ValidateTnlModule)( GLcontext *ctx, GLuint new_state );
/* Validate the current tnl module. This is called directly after
* UpdateState() when a state change that has occured matches the
* NeedValidate bitmask above. This ensures all computed values are
* up to date, thus allowing the driver to decide if the current tnl
* module needs to be swapped out.
/**
* \brief Validate the current T&L module.
*
* This must be non-NULL if a driver installs a custom tnl module and
* sets the NeedValidate bitmask, but may be NULL otherwise.
* This is called directly after UpdateState() when a state change that has
* occured matches the dd_function_table::NeedValidate bitmask above. This
* ensures all computed values are up to date, thus allowing the driver to
* decide if the current T&L module needs to be swapped out.
*
* This must be non-NULL if a driver installs a custom T&L module and sets
* the dd_function_table::NeedValidate bitmask, but may be NULL otherwise.
*/
void (*ValidateTnlModule)( GLcontext *ctx, GLuint new_state );
#define PRIM_OUTSIDE_BEGIN_END GL_POLYGON+1
#define PRIM_INSIDE_UNKNOWN_PRIM GL_POLYGON+2
#define PRIM_UNKNOWN GL_POLYGON+3
/**
* \brief Set by the driver-supplied T&L engine.
*
* Set to PRIM_OUTSIDE_BEGIN_END when outside glBegin()/glEnd().
*/
GLuint CurrentExecPrimitive;
/* Set by the driver-supplied t&l engine. Set to
* PRIM_OUTSIDE_BEGIN_END when outside begin/end.
*/
GLuint CurrentSavePrimitive;
/* Current state of an in-progress compilation. May take on any of
* the additional values defined above.
/**
* Current state of an in-progress compilation.
*
* May take on any of the additional values PRIM_OUTSIDE_BEGIN_END,
* PRIM_INSIDE_UNKNOWN_PRIM or PRIM_UNKNOWN defined above.
*/
GLuint CurrentSavePrimitive;
#define FLUSH_STORED_VERTICES 0x1
#define FLUSH_UPDATE_CURRENT 0x2
GLuint NeedFlush;
/* Set by the driver-supplied t&l engine whenever vertices are
* buffered between begin/end objects or ctx->Current is not uptodate.
/**
* Set by the driver-supplied T&L engine whenever vertices are
* buffered between glBegin()/glEnd() objects or ctx->Current is not uptodate.
*
* The FlushVertices() call below may be used to resolve
* The dd_function_table::FlushVertices call below may be used to resolve
* these conditions.
*/
GLuint NeedFlush;
void (*FlushVertices)( GLcontext *ctx, GLuint flags );
/* If inside begin/end, ASSERT(0).
* Otherwise,
* if (flags & FLUSH_STORED_VERTICES) flushes any buffered vertices,
* if (flags & FLUSH_UPDATE_CURRENT) updates ctx->Current
* and ctx->Light.Material
/**
* If inside glBegin()/glEnd(), it should ASSERT(0). Otherwise, if
* FLUSH_STORED_VERTICES bit in \p flags is set flushes any buffered
* vertices, if FLUSH_UPDATE_CURRENT bit is set updates ctx->Current and
* ctx->Light.Material
*
* Note that the default t&l engine never clears the
* Note that the default T&L engine never clears the
* FLUSH_UPDATE_CURRENT bit, even after performing the update.
*/
void (*FlushVertices)( GLcontext *ctx, GLuint flags );
void (*LightingSpaceChange)( GLcontext *ctx );
/* Notify driver that the special derived value _NeedEyeCoords has
/**
* \brief Notify driver that the special derived value _NeedEyeCoords has
* changed.
*/
void (*LightingSpaceChange)( GLcontext *ctx );
void (*NewList)( GLcontext *ctx, GLuint list, GLenum mode );
void (*EndList)( GLcontext *ctx );
/* Let the t&l component know what is going on with display lists
/**
* \brief Called by glNewList().
*
* Let the T&L component know what is going on with display lists
* in time to make changes to dispatch tables, etc.
* Called by glNewList() and glEndList(), respectively.
*/
void (*NewList)( GLcontext *ctx, GLuint list, GLenum mode );
/**
* \brief Called by glEndList().
*
* \sa dd_function_table::NewList.
*/
void (*EndList)( GLcontext *ctx );
void (*BeginCallList)( GLcontext *ctx, GLuint list );
void (*EndCallList)( GLcontext *ctx );
/* Notify the t&l component before and after calling a display list.
/**
* \brief Called by glCallList(s), but not recursively.
*
* Notify the T&L component before and after calling a display list.
* Called by glCallList(s), but not recursively.
*/
void (*BeginCallList)( GLcontext *ctx, GLuint list );
/**
* \brief Called by glEndCallList().
*
* \sa dd_function_table::BeginCallList.
*/
void (*EndCallList)( GLcontext *ctx );
/**
* \brief Let the T&L component know when the context becomes current.
*/
void (*MakeCurrent)( GLcontext *ctx, GLframebuffer *drawBuffer,
GLframebuffer *readBuffer );
/* Let the t&l component know when the context becomes current.
/**
* \brief Called by glLockArraysEXT().
*/
void (*LockArraysEXT)( GLcontext *ctx, GLint first, GLsizei count );
void (*UnlockArraysEXT)( GLcontext *ctx );
/* Called by glLockArraysEXT() and glUnlockArraysEXT(), respectively.
/**
* \brief Called by UnlockArraysEXT().
*/
void (*UnlockArraysEXT)( GLcontext *ctx );
/*@}*/
};
/*
* Transform/Clip/Lighting interface
/**
* \brief Transform/Clip/Lighting interface
*/
typedef struct {
/**
* Drivers present a reduced set of the functions possible in
* glBegin()/glEnd() objects. Core mesa provides translation stubs for the
* remaining functions to map down to these entrypoints.
*
* These are the initial values to be installed into dispatch by
* mesa. If the T&L driver wants to modify the dispatch table
* while installed, it must do so itself. It would be possible for
* the vertexformat to install it's own initial values for these
* functions, but this way there is an obvious list of what is
* expected of the driver.
*
* If the driver wants to hook in entrypoints other than those
* listed, it must restore them to their original values in
* the disable() callback, below.
*/
/*@{*/
void (*ArrayElement)( GLint ); /* NOTE */
void (*Color3f)( GLfloat, GLfloat, GLfloat );
void (*Color3fv)( const GLfloat * );
@@ -648,52 +851,44 @@ typedef struct {
void (*End)( void );
void (*VertexAttrib4fNV)( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w );
void (*VertexAttrib4fvNV)( GLuint index, const GLfloat *v );
/*@}*/
/* Drivers present a reduced set of the functions possible in
* begin/end objects. Core mesa provides translation stubs for the
* remaining functions to map down to these entrypoints.
*
* These are the initial values to be installed into dispatch by
* mesa. If the t&l driver wants to modify the dispatch table
* while installed, it must do so itself. It would be possible for
* the vertexformat to install it's own initial values for these
* functions, but this way there is an obvious list of what is
* expected of the driver.
*
* If the driver wants to hook in entrypoints other than those
* listed above, it must restore them to their original values in
* the disable() callback, below.
*/
void (*Rectf)( GLfloat, GLfloat, GLfloat, GLfloat );
/*
*/
void (*Rectf)( GLfloat, GLfloat, GLfloat, GLfloat );
/**
* These may or may not belong here. Heuristic: if an array is
* enabled, the installed vertex format should support that array and
* it's current size natively.
*/
/*@{*/
void (*DrawArrays)( GLenum mode, GLint start, GLsizei count );
void (*DrawElements)( GLenum mode, GLsizei count, GLenum type,
const GLvoid *indices );
void (*DrawRangeElements)( GLenum mode, GLuint start,
GLuint end, GLsizei count,
GLenum type, const GLvoid *indices );
/* These may or may not belong here. Heuristic: If an array is
* enabled, the installed vertex format should support that array and
* it's current size natively.
*/
/*@}*/
void (*EvalMesh1)( GLenum mode, GLint i1, GLint i2 );
void (*EvalMesh2)( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 );
/* If you don't support eval, fallback to the default vertex format
/**
* If you don't support eval, fallback to the default vertex format
* on receiving an eval call and use the pipeline mechanism to
* provide partial t&l acceleration.
* provide partial T&L acceleration.
*
* Mesa will provide a set of helper functions to do eval within
* accelerated vertex formats, eventually...
*/
/*@{*/
void (*EvalMesh1)( GLenum mode, GLint i1, GLint i2 );
void (*EvalMesh2)( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 );
/*@}*/
GLboolean prefer_float_colors;
/* Should core try to send colors to glColor4f or glColor4chan,
/**
* Should core try to send colors to glColor4f or glColor4chan,
* where it has a choice?
*/
GLboolean prefer_float_colors;
} GLvertexformat;

View File

@@ -1,4 +1,7 @@
/* $Id: dlist.c,v 1.100 2002/11/06 15:16:23 brianp Exp $ */
/**
* \file dlist.c
* \brief Display lists management functions.
*/
/*
* Mesa 3-D graphics library
@@ -24,6 +27,8 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* $Id: dlist.c,v 1.100.4.1 2003/03/02 00:27:34 jrfonseca Exp $ */
#include "glheader.h"
#include "imports.h"
#include "api_loopback.h"
@@ -70,47 +75,48 @@
/*
Functions which aren't compiled but executed immediately:
glIsList
glGenLists
glDeleteLists
glEndList --- BUT: call ctx->Driver.EndList at end of list execution?
glFeedbackBuffer
glSelectBuffer
glRenderMode
glReadPixels
glPixelStore
glFlush
glFinish
glIsEnabled
glGet*
Functions which cause errors if called while compiling a display list:
glNewList
*/
/**
* Functions which aren't compiled but executed immediately:
* - glIsList
* - glGenLists
* - glDeleteLists
* - glEndList --- BUT: call ctx->Driver.EndList at end of list execution?
* - glFeedbackBuffer
* - glSelectBuffer
* - glRenderMode
* - glReadPixels
* - glPixelStore
* - glFlush
* - glFinish
* - glIsEnabled
* - glGet*
*
* Functions which cause errors if called while compiling a display list:
* - glNewList
*/
/*
/**
* Display list instructions are stored as sequences of "nodes". Nodes
* are allocated in blocks. Each block has BLOCK_SIZE nodes. Blocks
* are linked together with a pointer.
*/
/* How many nodes to allocate at a time:
* - reduced now that we hold vertices etc. elsewhere.
/**
* \brief How many nodes to allocate at a time.
*
* \note Reduced now that we hold vertices etc. elsewhere.
*/
#define BLOCK_SIZE 256
/*
* Display list opcodes.
/**
* \brief Display list opcodes.
*
* The fact that these identifiers are assigned consecutive
* integer values starting at 0 is very important, see InstSize array usage)
*
*/
typedef enum {
OPCODE_ACCUM,
@@ -258,7 +264,9 @@ typedef enum {
} OpCode;
/*
/**
* \brief Display list node.
*
* Each instruction in the display list is stored as a sequence of
* contiguous nodes in memory.
* Each node is the union of a variety of datatypes.
@@ -279,9 +287,9 @@ union node {
};
/* Number of nodes of storage needed for each instruction. Sizes for
* dynamically allocated opcodes are stored in the context struct.
/**
* \brief Number of nodes of storage needed for each instruction.
* Sizes for dynamically allocated opcodes are stored in the context struct.
*/
static GLuint InstSize[ OPCODE_END_OF_LIST+1 ];
@@ -292,10 +300,6 @@ void mesa_print_display_list( GLuint list );
/***** Private *****/
/**********************************************************************/
/*
* Make an empty display list. This is used by glGenLists() to
* reserver display list IDs.

View File

@@ -1,4 +1,20 @@
/* $Id: glheader.h,v 1.29 2002/10/30 19:44:41 brianp Exp $ */
/**
* \file glheader.h
* \brief Top-most include file.
*
* This is the top-most include file of the Mesa sources.
* It includes gl.h and all system headers which are needed.
* Other Mesa source files should _not_ directly include any system
* headers. This allows Mesa to be integrated into XFree86 and
* allows system-dependent hacks/work-arounds to be collected in one place.
*
* If you touch this file, everything gets recompiled!
*
* This file should be included before any other header in the .c files.
*
* Put compiler/OS/assembly pragmas and macros here to avoid
* cluttering other source files.
*/
/*
* Mesa 3-D graphics library
@@ -24,26 +40,13 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* $Id: glheader.h,v 1.29.4.1 2003/03/02 00:27:35 jrfonseca Exp $ */
#ifndef GLHEADER_H
#define GLHEADER_H
/*
* This is the top-most include file of the Mesa sources.
* It includes gl.h and all system headers which are needed.
* Other Mesa source files should _not_ directly include any system
* headers. This allows Mesa to be integrated into XFree86 and
* allows system-dependent hacks/work-arounds to be collected in one place.
*
* If you touch this file, everything gets recompiled!
*
* This file should be included before any other header in the .c files.
*
* Put compiler/OS/assembly pragmas and macros here to avoid
* cluttering other source files.
*/
#if defined(XFree86LOADER) && defined(IN_MODULE)
@@ -282,7 +285,7 @@ typedef struct tagPIXELFORMATDESCRIPTOR PIXELFORMATDESCRIPTOR, *PPIXELFORMATDESC
#endif
/*
/**
* Sometimes we treat GLfloats as GLints. On x86 systems, moving a float
* as a int (thereby using integer registers instead of fp registers) is
* a performance win. Typically, this can be done with ordinary casts.

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,4 @@
/* $Id: state.c,v 1.97.4.1 2003/02/21 21:14:18 keithw Exp $ */
/* $Id: state.c,v 1.97.4.2 2003/03/04 17:10:39 keithw Exp $ */
/*
* Mesa 3-D graphics library
@@ -114,264 +114,272 @@ _mesa_init_exec_table(struct _glapi_table *exec, GLuint tableSize)
_mesa_loopback_init_api_table( exec, GL_TRUE );
/* load the dispatch slots we understand */
/* exec->Accum = _mesa_Accum; */
exec->AlphaFunc = _mesa_AlphaFunc;
exec->Bitmap = _mesa_Bitmap;
exec->BlendFunc = _mesa_BlendFunc;
/* exec->CallList = _mesa_CallList; */
/* exec->CallLists = _mesa_CallLists; */
exec->Clear = _mesa_Clear;
/* exec->ClearAccum = _mesa_ClearAccum; */
exec->ClearColor = _mesa_ClearColor;
/* exec->ClearDepth = _mesa_ClearDepth; */
/* exec->ClearIndex = _mesa_ClearIndex; */
exec->ClearStencil = _mesa_ClearStencil;
/* exec->ClipPlane = _mesa_ClipPlane; */
exec->ColorMask = _mesa_ColorMask;
/* exec->ColorMaterial = _mesa_ColorMaterial; */
/* exec->CopyPixels = _mesa_CopyPixels; */
exec->CullFace = _mesa_CullFace;
/* exec->DeleteLists = _mesa_DeleteLists; */
/* exec->DepthFunc = _mesa_DepthFunc; */
/* exec->DepthMask = _mesa_DepthMask; */
/* exec->DepthRange = _mesa_DepthRange; */
exec->Disable = _mesa_Disable;
exec->DrawBuffer = _mesa_DrawBuffer;
/* exec->DrawPixels = _mesa_DrawPixels; */
exec->Enable = _mesa_Enable;
/* exec->EndList = _mesa_EndList; */
/* exec->FeedbackBuffer = _mesa_FeedbackBuffer; */
exec->Finish = _mesa_Finish;
exec->Flush = _mesa_Flush;
/* exec->FogCoordPointerEXT = _mesa_FogCoordPointerEXT; */
/* exec->Fogf = _mesa_Fogf; */
/* exec->Fogfv = _mesa_Fogfv; */
/* exec->Fogi = _mesa_Fogi; */
/* exec->Fogiv = _mesa_Fogiv; */
exec->FrontFace = _mesa_FrontFace;
exec->Frustum = _mesa_Frustum;
/* exec->GenLists = _mesa_GenLists; */
exec->GetBooleanv = _mesa_GetBooleanv;
/* exec->GetClipPlane = _mesa_GetClipPlane; */
/* exec->GetDoublev = _mesa_GetDoublev; */
exec->GetError = _mesa_GetError;
exec->GetFloatv = _mesa_GetFloatv;
exec->GetIntegerv = _mesa_GetIntegerv;
/* exec->GetLightfv = _mesa_GetLightfv; */
/* exec->GetLightiv = _mesa_GetLightiv; */
/* exec->GetMapdv = _mesa_GetMapdv; */
/* exec->GetMapfv = _mesa_GetMapfv; */
/* exec->GetMapiv = _mesa_GetMapiv; */
/* exec->GetMaterialfv = _mesa_GetMaterialfv; */
/* exec->GetMaterialiv = _mesa_GetMaterialiv; */
/* exec->GetPixelMapfv = _mesa_GetPixelMapfv; */
/* exec->GetPixelMapuiv = _mesa_GetPixelMapuiv; */
/* exec->GetPixelMapusv = _mesa_GetPixelMapusv; */
/* exec->GetPolygonStipple = _mesa_GetPolygonStipple; */
exec->GetString = _mesa_GetString;
exec->GetTexEnvfv = _mesa_GetTexEnvfv;
exec->GetTexEnviv = _mesa_GetTexEnviv;
/* exec->GetTexGendv = _mesa_GetTexGendv; */
/* exec->GetTexGenfv = _mesa_GetTexGenfv; */
/* exec->GetTexGeniv = _mesa_GetTexGeniv; */
/* exec->GetTexImage = _mesa_GetTexImage; */
exec->GetTexLevelParameterfv = _mesa_GetTexLevelParameterfv;
exec->GetTexLevelParameteriv = _mesa_GetTexLevelParameteriv;
exec->GetTexParameterfv = _mesa_GetTexParameterfv;
exec->GetTexParameteriv = _mesa_GetTexParameteriv;
/* exec->Hint = _mesa_Hint; */
/* exec->IndexMask = _mesa_IndexMask; */
exec->InitNames = _mesa_InitNames;
/* exec->IsEnabled = _mesa_IsEnabled; */
/* exec->IsList = _mesa_IsList; */
/* exec->LightModelf = _mesa_LightModelf; */
/* exec->LightModelfv = _mesa_LightModelfv; */
/* exec->LightModeli = _mesa_LightModeli; */
/* exec->LightModeliv = _mesa_LightModeliv; */
/* exec->Lightf = _mesa_Lightf; */
/* exec->Lightfv = _mesa_Lightfv; */
/* exec->Lighti = _mesa_Lighti; */
/* exec->Lightiv = _mesa_Lightiv; */
exec->LineStipple = _mesa_LineStipple;
exec->LineWidth = _mesa_LineWidth;
/* exec->ListBase = _mesa_ListBase; */
exec->LoadIdentity = _mesa_LoadIdentity;
/* exec->LoadMatrixd = _mesa_LoadMatrixd; */
exec->LoadMatrixf = _mesa_LoadMatrixf;
exec->LoadName = _mesa_LoadName;
exec->LogicOp = _mesa_LogicOp;
/* exec->Map1d = _mesa_Map1d; */
/* exec->Map1f = _mesa_Map1f; */
/* exec->Map2d = _mesa_Map2d; */
/* exec->Map2f = _mesa_Map2f; */
/* exec->MapGrid1d = _mesa_MapGrid1d; */
/* exec->MapGrid1f = _mesa_MapGrid1f; */
/* exec->MapGrid2d = _mesa_MapGrid2d; */
/* exec->MapGrid2f = _mesa_MapGrid2f; */
exec->MatrixMode = _mesa_MatrixMode;
/* exec->MultMatrixd = _mesa_MultMatrixd; */
exec->MultMatrixf = _mesa_MultMatrixf;
/* exec->NewList = _mesa_NewList; */
exec->Ortho = _mesa_Ortho;
/* exec->PassThrough = _mesa_PassThrough; */
/* exec->PixelMapfv = _mesa_PixelMapfv; */
/* exec->PixelMapuiv = _mesa_PixelMapuiv; */
/* exec->PixelMapusv = _mesa_PixelMapusv; */
/* exec->PixelStoref = _mesa_PixelStoref; */
exec->PixelStorei = _mesa_PixelStorei;
/* exec->PixelTransferf = _mesa_PixelTransferf; */
/* exec->PixelTransferi = _mesa_PixelTransferi; */
/* exec->PixelZoom = _mesa_PixelZoom; */
/* exec->PointSize = _mesa_PointSize; */
/* exec->PolygonMode = _mesa_PolygonMode; */
/* exec->PolygonOffset = _mesa_PolygonOffset; */
/* exec->PolygonStipple = _mesa_PolygonStipple; */
/* exec->PopAttrib = _mesa_PopAttrib; */
exec->PopMatrix = _mesa_PopMatrix;
exec->PopName = _mesa_PopName;
/* exec->PushAttrib = _mesa_PushAttrib; */
exec->PushMatrix = _mesa_PushMatrix;
exec->PushName = _mesa_PushName;
/* exec->RasterPos2d = _mesa_RasterPos2d; */
/* exec->RasterPos2dv = _mesa_RasterPos2dv; */
exec->RasterPos2f = _mesa_RasterPos2f;
exec->RasterPos2fv = _mesa_RasterPos2fv;
exec->RasterPos2i = _mesa_RasterPos2i;
exec->RasterPos2iv = _mesa_RasterPos2iv;
/* exec->RasterPos2s = _mesa_RasterPos2s; */
/* exec->RasterPos2sv = _mesa_RasterPos2sv; */
/* exec->RasterPos3d = _mesa_RasterPos3d; */
/* exec->RasterPos3dv = _mesa_RasterPos3dv; */
/* exec->RasterPos3f = _mesa_RasterPos3f; */
/* exec->RasterPos3fv = _mesa_RasterPos3fv; */
/* exec->RasterPos3i = _mesa_RasterPos3i; */
/* exec->RasterPos3iv = _mesa_RasterPos3iv; */
/* exec->RasterPos3s = _mesa_RasterPos3s; */
/* exec->RasterPos3sv = _mesa_RasterPos3sv; */
/* exec->RasterPos4d = _mesa_RasterPos4d; */
/* exec->RasterPos4dv = _mesa_RasterPos4dv; */
/* exec->RasterPos4f = _mesa_RasterPos4f; */
/* exec->RasterPos4fv = _mesa_RasterPos4fv; */
/* exec->RasterPos4i = _mesa_RasterPos4i; */
/* exec->RasterPos4iv = _mesa_RasterPos4iv; */
/* exec->RasterPos4s = _mesa_RasterPos4s; */
/* exec->RasterPos4sv = _mesa_RasterPos4sv; */
exec->ReadBuffer = _mesa_ReadBuffer;
exec->ReadPixels = _mesa_ReadPixels;
exec->RenderMode = _mesa_RenderMode;
/* exec->Rotated = _mesa_Rotated; */
exec->Rotatef = _mesa_Rotatef;
/* exec->Scaled = _mesa_Scaled; */
exec->Scalef = _mesa_Scalef;
exec->Scissor = _mesa_Scissor;
/* exec->SecondaryColorPointerEXT = _mesa_SecondaryColorPointerEXT; */
exec->SelectBuffer = _mesa_SelectBuffer;
exec->ShadeModel = _mesa_ShadeModel;
exec->StencilFunc = _mesa_StencilFunc;
exec->StencilMask = _mesa_StencilMask;
exec->StencilOp = _mesa_StencilOp;
/* exec->TexEnvf = _mesa_TexEnvf; */
exec->TexEnvfv = _mesa_TexEnvfv;
exec->TexEnvi = _mesa_TexEnvi;
/* exec->TexEnviv = _mesa_TexEnviv; */
/* exec->TexGend = _mesa_TexGend; */
/* exec->TexGendv = _mesa_TexGendv; */
/* exec->TexGenf = _mesa_TexGenf; */
/* exec->TexGenfv = _mesa_TexGenfv; */
/* exec->TexGeni = _mesa_TexGeni; */
/* exec->TexGeniv = _mesa_TexGeniv; */
/* exec->TexImage1D = _mesa_TexImage1D; */
exec->TexImage2D = _mesa_TexImage2D;
/* exec->TexParameterf = _mesa_TexParameterf; */
/* exec->TexParameterfv = _mesa_TexParameterfv; */
exec->TexParameteri = _mesa_TexParameteri;
/* exec->TexParameteriv = _mesa_TexParameteriv; */
/* exec->Translated = _mesa_Translated; */
exec->Translatef = _mesa_Translatef;
exec->Viewport = _mesa_Viewport;
#if _HAVE_FULL_GL
exec->Accum = _mesa_Accum;
exec->CallList = _mesa_CallList;
exec->CallLists = _mesa_CallLists;
exec->ClearAccum = _mesa_ClearAccum;
exec->ClearDepth = _mesa_ClearDepth;
exec->ClearIndex = _mesa_ClearIndex;
exec->ClipPlane = _mesa_ClipPlane;
exec->ColorMaterial = _mesa_ColorMaterial;
exec->CopyPixels = _mesa_CopyPixels;
exec->DeleteLists = _mesa_DeleteLists;
exec->DepthFunc = _mesa_DepthFunc;
exec->DepthMask = _mesa_DepthMask;
exec->DepthRange = _mesa_DepthRange;
exec->DrawPixels = _mesa_DrawPixels;
exec->EndList = _mesa_EndList;
exec->FeedbackBuffer = _mesa_FeedbackBuffer;
exec->FogCoordPointerEXT = _mesa_FogCoordPointerEXT;
exec->Fogf = _mesa_Fogf;
exec->Fogfv = _mesa_Fogfv;
exec->Fogi = _mesa_Fogi;
exec->Fogiv = _mesa_Fogiv;
exec->GenLists = _mesa_GenLists;
exec->GetClipPlane = _mesa_GetClipPlane;
exec->GetDoublev = _mesa_GetDoublev;
exec->GetLightfv = _mesa_GetLightfv;
exec->GetLightiv = _mesa_GetLightiv;
exec->GetMapdv = _mesa_GetMapdv;
exec->GetMapfv = _mesa_GetMapfv;
exec->GetMapiv = _mesa_GetMapiv;
exec->GetMaterialfv = _mesa_GetMaterialfv;
exec->GetMaterialiv = _mesa_GetMaterialiv;
exec->GetPixelMapfv = _mesa_GetPixelMapfv;
exec->GetPixelMapuiv = _mesa_GetPixelMapuiv;
exec->GetPixelMapusv = _mesa_GetPixelMapusv;
exec->GetPolygonStipple = _mesa_GetPolygonStipple;
exec->GetTexGendv = _mesa_GetTexGendv;
exec->GetTexGenfv = _mesa_GetTexGenfv;
exec->GetTexGeniv = _mesa_GetTexGeniv;
exec->GetTexImage = _mesa_GetTexImage;
exec->Hint = _mesa_Hint;
exec->IndexMask = _mesa_IndexMask;
exec->IsEnabled = _mesa_IsEnabled;
exec->IsList = _mesa_IsList;
exec->LightModelf = _mesa_LightModelf;
exec->LightModelfv = _mesa_LightModelfv;
exec->LightModeli = _mesa_LightModeli;
exec->LightModeliv = _mesa_LightModeliv;
exec->Lightf = _mesa_Lightf;
exec->Lightfv = _mesa_Lightfv;
exec->Lighti = _mesa_Lighti;
exec->Lightiv = _mesa_Lightiv;
exec->ListBase = _mesa_ListBase;
exec->LoadMatrixd = _mesa_LoadMatrixd;
exec->Map1d = _mesa_Map1d;
exec->Map1f = _mesa_Map1f;
exec->Map2d = _mesa_Map2d;
exec->Map2f = _mesa_Map2f;
exec->MapGrid1d = _mesa_MapGrid1d;
exec->MapGrid1f = _mesa_MapGrid1f;
exec->MapGrid2d = _mesa_MapGrid2d;
exec->MapGrid2f = _mesa_MapGrid2f;
exec->MultMatrixd = _mesa_MultMatrixd;
exec->NewList = _mesa_NewList;
exec->PassThrough = _mesa_PassThrough;
exec->PixelMapfv = _mesa_PixelMapfv;
exec->PixelMapuiv = _mesa_PixelMapuiv;
exec->PixelMapusv = _mesa_PixelMapusv;
exec->PixelStoref = _mesa_PixelStoref;
exec->PixelTransferf = _mesa_PixelTransferf;
exec->PixelTransferi = _mesa_PixelTransferi;
exec->PixelZoom = _mesa_PixelZoom;
exec->PointSize = _mesa_PointSize;
exec->PolygonMode = _mesa_PolygonMode;
exec->PolygonOffset = _mesa_PolygonOffset;
exec->PolygonStipple = _mesa_PolygonStipple;
exec->PopAttrib = _mesa_PopAttrib;
exec->PushAttrib = _mesa_PushAttrib;
exec->RasterPos2d = _mesa_RasterPos2d;
exec->RasterPos2dv = _mesa_RasterPos2dv;
exec->RasterPos2s = _mesa_RasterPos2s;
exec->RasterPos2sv = _mesa_RasterPos2sv;
exec->RasterPos3d = _mesa_RasterPos3d;
exec->RasterPos3dv = _mesa_RasterPos3dv;
exec->RasterPos3f = _mesa_RasterPos3f;
exec->RasterPos3fv = _mesa_RasterPos3fv;
exec->RasterPos3i = _mesa_RasterPos3i;
exec->RasterPos3iv = _mesa_RasterPos3iv;
exec->RasterPos3s = _mesa_RasterPos3s;
exec->RasterPos3sv = _mesa_RasterPos3sv;
exec->RasterPos4d = _mesa_RasterPos4d;
exec->RasterPos4dv = _mesa_RasterPos4dv;
exec->RasterPos4f = _mesa_RasterPos4f;
exec->RasterPos4fv = _mesa_RasterPos4fv;
exec->RasterPos4i = _mesa_RasterPos4i;
exec->RasterPos4iv = _mesa_RasterPos4iv;
exec->RasterPos4s = _mesa_RasterPos4s;
exec->RasterPos4sv = _mesa_RasterPos4sv;
exec->Rotated = _mesa_Rotated;
exec->Scaled = _mesa_Scaled;
exec->SecondaryColorPointerEXT = _mesa_SecondaryColorPointerEXT;
exec->TexEnvf = _mesa_TexEnvf;
exec->TexEnviv = _mesa_TexEnviv;
exec->TexGend = _mesa_TexGend;
exec->TexGendv = _mesa_TexGendv;
exec->TexGenf = _mesa_TexGenf;
exec->TexGenfv = _mesa_TexGenfv;
exec->TexGeni = _mesa_TexGeni;
exec->TexGeniv = _mesa_TexGeniv;
exec->TexImage1D = _mesa_TexImage1D;
exec->TexParameterf = _mesa_TexParameterf;
exec->TexParameterfv = _mesa_TexParameterfv;
exec->TexParameteriv = _mesa_TexParameteriv;
exec->Translated = _mesa_Translated;
#endif
/* 1.1 */
/* exec->AreTexturesResident = _mesa_AreTexturesResident; */
/* exec->AreTexturesResidentEXT = _mesa_AreTexturesResident; */
exec->BindTexture = _mesa_BindTexture;
/* exec->ColorPointer = _mesa_ColorPointer; */
/* exec->CopyTexImage1D = _mesa_CopyTexImage1D; */
/* exec->CopyTexImage2D = _mesa_CopyTexImage2D; */
/* exec->CopyTexSubImage1D = _mesa_CopyTexSubImage1D; */
/* exec->CopyTexSubImage2D = _mesa_CopyTexSubImage2D; */
exec->DeleteTextures = _mesa_DeleteTextures;
/* exec->DisableClientState = _mesa_DisableClientState; */
/* exec->EdgeFlagPointer = _mesa_EdgeFlagPointer; */
/* exec->EnableClientState = _mesa_EnableClientState; */
exec->GenTextures = _mesa_GenTextures;
/* exec->GenTexturesEXT = _mesa_GenTextures; */
/* exec->GetPointerv = _mesa_GetPointerv; */
/* exec->IndexPointer = _mesa_IndexPointer; */
/* exec->InterleavedArrays = _mesa_InterleavedArrays; */
/* exec->IsTexture = _mesa_IsTexture; */
/* exec->IsTextureEXT = _mesa_IsTexture; */
/* exec->NormalPointer = _mesa_NormalPointer; */
/* exec->PopClientAttrib = _mesa_PopClientAttrib; */
/* exec->PrioritizeTextures = _mesa_PrioritizeTextures; */
/* exec->PushClientAttrib = _mesa_PushClientAttrib; */
/* exec->TexCoordPointer = _mesa_TexCoordPointer; */
/* exec->TexSubImage1D = _mesa_TexSubImage1D; */
/* exec->TexSubImage2D = _mesa_TexSubImage2D; */
/* exec->VertexPointer = _mesa_VertexPointer; */
#if _HAVE_FULL_GL
exec->AreTexturesResident = _mesa_AreTexturesResident;
exec->AreTexturesResidentEXT = _mesa_AreTexturesResident;
exec->ColorPointer = _mesa_ColorPointer;
exec->CopyTexImage1D = _mesa_CopyTexImage1D;
exec->CopyTexImage2D = _mesa_CopyTexImage2D;
exec->CopyTexSubImage1D = _mesa_CopyTexSubImage1D;
exec->CopyTexSubImage2D = _mesa_CopyTexSubImage2D;
exec->DisableClientState = _mesa_DisableClientState;
exec->EdgeFlagPointer = _mesa_EdgeFlagPointer;
exec->EnableClientState = _mesa_EnableClientState;
exec->GenTexturesEXT = _mesa_GenTextures;
exec->GetPointerv = _mesa_GetPointerv;
exec->IndexPointer = _mesa_IndexPointer;
exec->InterleavedArrays = _mesa_InterleavedArrays;
exec->IsTexture = _mesa_IsTexture;
exec->IsTextureEXT = _mesa_IsTexture;
exec->NormalPointer = _mesa_NormalPointer;
exec->PopClientAttrib = _mesa_PopClientAttrib;
exec->PrioritizeTextures = _mesa_PrioritizeTextures;
exec->PushClientAttrib = _mesa_PushClientAttrib;
exec->TexCoordPointer = _mesa_TexCoordPointer;
exec->TexSubImage1D = _mesa_TexSubImage1D;
exec->TexSubImage2D = _mesa_TexSubImage2D;
exec->VertexPointer = _mesa_VertexPointer;
#endif
/* 1.2 */
/* exec->CopyTexSubImage3D = _mesa_CopyTexSubImage3D; */
/* exec->TexImage3D = _mesa_TexImage3D; */
/* exec->TexSubImage3D = _mesa_TexSubImage3D; */
#if _HAVE_FULL_GL
exec->CopyTexSubImage3D = _mesa_CopyTexSubImage3D;
exec->TexImage3D = _mesa_TexImage3D;
exec->TexSubImage3D = _mesa_TexSubImage3D;
#endif
/* OpenGL 1.2 GL_ARB_imaging */
/* exec->BlendColor = _mesa_BlendColor; */
/* exec->BlendEquation = _mesa_BlendEquation; */
/* exec->ColorSubTable = _mesa_ColorSubTable; */
/* exec->ColorTable = _mesa_ColorTable; */
/* exec->ColorTableParameterfv = _mesa_ColorTableParameterfv; */
/* exec->ColorTableParameteriv = _mesa_ColorTableParameteriv; */
/* exec->ConvolutionFilter1D = _mesa_ConvolutionFilter1D; */
/* exec->ConvolutionFilter2D = _mesa_ConvolutionFilter2D; */
/* exec->ConvolutionParameterf = _mesa_ConvolutionParameterf; */
/* exec->ConvolutionParameterfv = _mesa_ConvolutionParameterfv; */
/* exec->ConvolutionParameteri = _mesa_ConvolutionParameteri; */
/* exec->ConvolutionParameteriv = _mesa_ConvolutionParameteriv; */
/* exec->CopyColorSubTable = _mesa_CopyColorSubTable; */
/* exec->CopyColorTable = _mesa_CopyColorTable; */
/* exec->CopyConvolutionFilter1D = _mesa_CopyConvolutionFilter1D; */
/* exec->CopyConvolutionFilter2D = _mesa_CopyConvolutionFilter2D; */
/* exec->GetColorTable = _mesa_GetColorTable; */
/* exec->GetColorTableEXT = _mesa_GetColorTable; */
/* exec->GetColorTableParameterfv = _mesa_GetColorTableParameterfv; */
/* exec->GetColorTableParameterfvEXT = _mesa_GetColorTableParameterfv; */
/* exec->GetColorTableParameteriv = _mesa_GetColorTableParameteriv; */
/* exec->GetColorTableParameterivEXT = _mesa_GetColorTableParameteriv; */
/* exec->GetConvolutionFilter = _mesa_GetConvolutionFilter; */
/* exec->GetConvolutionFilterEXT = _mesa_GetConvolutionFilter; */
/* exec->GetConvolutionParameterfv = _mesa_GetConvolutionParameterfv; */
/* exec->GetConvolutionParameterfvEXT = _mesa_GetConvolutionParameterfv; */
/* exec->GetConvolutionParameteriv = _mesa_GetConvolutionParameteriv; */
/* exec->GetConvolutionParameterivEXT = _mesa_GetConvolutionParameteriv; */
/* exec->GetHistogram = _mesa_GetHistogram; */
/* exec->GetHistogramEXT = _mesa_GetHistogram; */
/* exec->GetHistogramParameterfv = _mesa_GetHistogramParameterfv; */
/* exec->GetHistogramParameterfvEXT = _mesa_GetHistogramParameterfv; */
/* exec->GetHistogramParameteriv = _mesa_GetHistogramParameteriv; */
/* exec->GetHistogramParameterivEXT = _mesa_GetHistogramParameteriv; */
/* exec->GetMinmax = _mesa_GetMinmax; */
/* exec->GetMinmaxEXT = _mesa_GetMinmax; */
/* exec->GetMinmaxParameterfv = _mesa_GetMinmaxParameterfv; */
/* exec->GetMinmaxParameterfvEXT = _mesa_GetMinmaxParameterfv; */
/* exec->GetMinmaxParameteriv = _mesa_GetMinmaxParameteriv; */
/* exec->GetMinmaxParameterivEXT = _mesa_GetMinmaxParameteriv; */
/* exec->GetSeparableFilter = _mesa_GetSeparableFilter; */
/* exec->GetSeparableFilterEXT = _mesa_GetSeparableFilter; */
/* exec->Histogram = _mesa_Histogram; */
/* exec->Minmax = _mesa_Minmax; */
/* exec->ResetHistogram = _mesa_ResetHistogram; */
/* exec->ResetMinmax = _mesa_ResetMinmax; */
/* exec->SeparableFilter2D = _mesa_SeparableFilter2D; */
#if _HAVE_FULL_GL
exec->BlendColor = _mesa_BlendColor;
exec->BlendEquation = _mesa_BlendEquation;
exec->ColorSubTable = _mesa_ColorSubTable;
exec->ColorTable = _mesa_ColorTable;
exec->ColorTableParameterfv = _mesa_ColorTableParameterfv;
exec->ColorTableParameteriv = _mesa_ColorTableParameteriv;
exec->ConvolutionFilter1D = _mesa_ConvolutionFilter1D;
exec->ConvolutionFilter2D = _mesa_ConvolutionFilter2D;
exec->ConvolutionParameterf = _mesa_ConvolutionParameterf;
exec->ConvolutionParameterfv = _mesa_ConvolutionParameterfv;
exec->ConvolutionParameteri = _mesa_ConvolutionParameteri;
exec->ConvolutionParameteriv = _mesa_ConvolutionParameteriv;
exec->CopyColorSubTable = _mesa_CopyColorSubTable;
exec->CopyColorTable = _mesa_CopyColorTable;
exec->CopyConvolutionFilter1D = _mesa_CopyConvolutionFilter1D;
exec->CopyConvolutionFilter2D = _mesa_CopyConvolutionFilter2D;
exec->GetColorTable = _mesa_GetColorTable;
exec->GetColorTableEXT = _mesa_GetColorTable;
exec->GetColorTableParameterfv = _mesa_GetColorTableParameterfv;
exec->GetColorTableParameterfvEXT = _mesa_GetColorTableParameterfv;
exec->GetColorTableParameteriv = _mesa_GetColorTableParameteriv;
exec->GetColorTableParameterivEXT = _mesa_GetColorTableParameteriv;
exec->GetConvolutionFilter = _mesa_GetConvolutionFilter;
exec->GetConvolutionFilterEXT = _mesa_GetConvolutionFilter;
exec->GetConvolutionParameterfv = _mesa_GetConvolutionParameterfv;
exec->GetConvolutionParameterfvEXT = _mesa_GetConvolutionParameterfv;
exec->GetConvolutionParameteriv = _mesa_GetConvolutionParameteriv;
exec->GetConvolutionParameterivEXT = _mesa_GetConvolutionParameteriv;
exec->GetHistogram = _mesa_GetHistogram;
exec->GetHistogramEXT = _mesa_GetHistogram;
exec->GetHistogramParameterfv = _mesa_GetHistogramParameterfv;
exec->GetHistogramParameterfvEXT = _mesa_GetHistogramParameterfv;
exec->GetHistogramParameteriv = _mesa_GetHistogramParameteriv;
exec->GetHistogramParameterivEXT = _mesa_GetHistogramParameteriv;
exec->GetMinmax = _mesa_GetMinmax;
exec->GetMinmaxEXT = _mesa_GetMinmax;
exec->GetMinmaxParameterfv = _mesa_GetMinmaxParameterfv;
exec->GetMinmaxParameterfvEXT = _mesa_GetMinmaxParameterfv;
exec->GetMinmaxParameteriv = _mesa_GetMinmaxParameteriv;
exec->GetMinmaxParameterivEXT = _mesa_GetMinmaxParameteriv;
exec->GetSeparableFilter = _mesa_GetSeparableFilter;
exec->GetSeparableFilterEXT = _mesa_GetSeparableFilter;
exec->Histogram = _mesa_Histogram;
exec->Minmax = _mesa_Minmax;
exec->ResetHistogram = _mesa_ResetHistogram;
exec->ResetMinmax = _mesa_ResetMinmax;
exec->SeparableFilter2D = _mesa_SeparableFilter2D;
#endif
/* 2. GL_EXT_blend_color */
#if 0
@@ -379,7 +387,9 @@ _mesa_init_exec_table(struct _glapi_table *exec, GLuint tableSize)
#endif
/* 3. GL_EXT_polygon_offset */
/* exec->PolygonOffsetEXT = _mesa_PolygonOffsetEXT; */
#if _HAVE_FULL_GL
exec->PolygonOffsetEXT = _mesa_PolygonOffsetEXT;
#endif
/* 6. GL_EXT_texture3d */
#if 0
@@ -389,147 +399,181 @@ _mesa_init_exec_table(struct _glapi_table *exec, GLuint tableSize)
#endif
/* 11. GL_EXT_histogram */
/* exec->GetHistogramEXT = _mesa_GetHistogram; */
/* exec->GetHistogramParameterfvEXT = _mesa_GetHistogramParameterfv; */
/* exec->GetHistogramParameterivEXT = _mesa_GetHistogramParameteriv; */
/* exec->GetMinmaxEXT = _mesa_GetMinmax; */
/* exec->GetMinmaxParameterfvEXT = _mesa_GetMinmaxParameterfv; */
/* exec->GetMinmaxParameterivEXT = _mesa_GetMinmaxParameteriv; */
#if _HAVE_FULL_GL
exec->GetHistogramEXT = _mesa_GetHistogram;
exec->GetHistogramParameterfvEXT = _mesa_GetHistogramParameterfv;
exec->GetHistogramParameterivEXT = _mesa_GetHistogramParameteriv;
exec->GetMinmaxEXT = _mesa_GetMinmax;
exec->GetMinmaxParameterfvEXT = _mesa_GetMinmaxParameterfv;
exec->GetMinmaxParameterivEXT = _mesa_GetMinmaxParameteriv;
#endif
/* ?. GL_SGIX_pixel_texture */
/* exec->PixelTexGenSGIX = _mesa_PixelTexGenSGIX; */
#if _HAVE_FULL_GL
exec->PixelTexGenSGIX = _mesa_PixelTexGenSGIX;
#endif
/* 15. GL_SGIS_pixel_texture */
/* exec->PixelTexGenParameteriSGIS = _mesa_PixelTexGenParameteriSGIS; */
/* exec->PixelTexGenParameterivSGIS = _mesa_PixelTexGenParameterivSGIS; */
/* exec->PixelTexGenParameterfSGIS = _mesa_PixelTexGenParameterfSGIS; */
/* exec->PixelTexGenParameterfvSGIS = _mesa_PixelTexGenParameterfvSGIS; */
/* exec->GetPixelTexGenParameterivSGIS = _mesa_GetPixelTexGenParameterivSGIS; */
/* exec->GetPixelTexGenParameterfvSGIS = _mesa_GetPixelTexGenParameterfvSGIS; */
#if _HAVE_FULL_GL
exec->PixelTexGenParameteriSGIS = _mesa_PixelTexGenParameteriSGIS;
exec->PixelTexGenParameterivSGIS = _mesa_PixelTexGenParameterivSGIS;
exec->PixelTexGenParameterfSGIS = _mesa_PixelTexGenParameterfSGIS;
exec->PixelTexGenParameterfvSGIS = _mesa_PixelTexGenParameterfvSGIS;
exec->GetPixelTexGenParameterivSGIS = _mesa_GetPixelTexGenParameterivSGIS;
exec->GetPixelTexGenParameterfvSGIS = _mesa_GetPixelTexGenParameterfvSGIS;
#endif
/* 30. GL_EXT_vertex_array */
/* exec->ColorPointerEXT = _mesa_ColorPointerEXT; */
/* exec->EdgeFlagPointerEXT = _mesa_EdgeFlagPointerEXT; */
/* exec->IndexPointerEXT = _mesa_IndexPointerEXT; */
/* exec->NormalPointerEXT = _mesa_NormalPointerEXT; */
/* exec->TexCoordPointerEXT = _mesa_TexCoordPointerEXT; */
/* exec->VertexPointerEXT = _mesa_VertexPointerEXT; */
#if _HAVE_FULL_GL
exec->ColorPointerEXT = _mesa_ColorPointerEXT;
exec->EdgeFlagPointerEXT = _mesa_EdgeFlagPointerEXT;
exec->IndexPointerEXT = _mesa_IndexPointerEXT;
exec->NormalPointerEXT = _mesa_NormalPointerEXT;
exec->TexCoordPointerEXT = _mesa_TexCoordPointerEXT;
exec->VertexPointerEXT = _mesa_VertexPointerEXT;
#endif
/* 37. GL_EXT_blend_minmax */
#if 0
/* exec->BlendEquationEXT = _mesa_BlendEquationEXT; */
exec->BlendEquationEXT = _mesa_BlendEquationEXT;
#endif
/* 54. GL_EXT_point_parameters */
/* exec->PointParameterfEXT = _mesa_PointParameterfEXT; */
/* exec->PointParameterfvEXT = _mesa_PointParameterfvEXT; */
#if _HAVE_FULL_GL
exec->PointParameterfEXT = _mesa_PointParameterfEXT;
exec->PointParameterfvEXT = _mesa_PointParameterfvEXT;
#endif
/* 78. GL_EXT_paletted_texture */
#if 0
/* exec->ColorTableEXT = _mesa_ColorTableEXT; */
/* exec->ColorSubTableEXT = _mesa_ColorSubTableEXT; */
exec->ColorTableEXT = _mesa_ColorTableEXT;
exec->ColorSubTableEXT = _mesa_ColorSubTableEXT;
#endif
#if _HAVE_FULL_GL
exec->GetColorTableEXT = _mesa_GetColorTable;
exec->GetColorTableParameterfvEXT = _mesa_GetColorTableParameterfv;
exec->GetColorTableParameterivEXT = _mesa_GetColorTableParameteriv;
#endif
/* exec->GetColorTableEXT = _mesa_GetColorTable; */
/* exec->GetColorTableParameterfvEXT = _mesa_GetColorTableParameterfv; */
/* exec->GetColorTableParameterivEXT = _mesa_GetColorTableParameteriv; */
/* 97. GL_EXT_compiled_vertex_array */
/* exec->LockArraysEXT = _mesa_LockArraysEXT; */
/* exec->UnlockArraysEXT = _mesa_UnlockArraysEXT; */
#if _HAVE_FULL_GL
exec->LockArraysEXT = _mesa_LockArraysEXT;
exec->UnlockArraysEXT = _mesa_UnlockArraysEXT;
#endif
/* 148. GL_EXT_multi_draw_arrays */
/* exec->MultiDrawArraysEXT = _mesa_MultiDrawArraysEXT; */
/* exec->MultiDrawElementsEXT = _mesa_MultiDrawElementsEXT; */
#if _HAVE_FULL_GL
exec->MultiDrawArraysEXT = _mesa_MultiDrawArraysEXT;
exec->MultiDrawElementsEXT = _mesa_MultiDrawElementsEXT;
#endif
/* 173. GL_INGR_blend_func_separate */
/* exec->BlendFuncSeparateEXT = _mesa_BlendFuncSeparateEXT; */
#if _HAVE_FULL_GL
exec->BlendFuncSeparateEXT = _mesa_BlendFuncSeparateEXT;
#endif
/* 196. GL_MESA_resize_buffers */
/* exec->ResizeBuffersMESA = _mesa_ResizeBuffersMESA; */
#if _HAVE_FULL_GL
exec->ResizeBuffersMESA = _mesa_ResizeBuffersMESA;
#endif
/* 197. GL_MESA_window_pos */
/* exec->WindowPos2dMESA = _mesa_WindowPos2dMESA; */
/* exec->WindowPos2dvMESA = _mesa_WindowPos2dvMESA; */
/* exec->WindowPos2fMESA = _mesa_WindowPos2fMESA; */
/* exec->WindowPos2fvMESA = _mesa_WindowPos2fvMESA; */
/* exec->WindowPos2iMESA = _mesa_WindowPos2iMESA; */
/* exec->WindowPos2ivMESA = _mesa_WindowPos2ivMESA; */
/* exec->WindowPos2sMESA = _mesa_WindowPos2sMESA; */
/* exec->WindowPos2svMESA = _mesa_WindowPos2svMESA; */
/* exec->WindowPos3dMESA = _mesa_WindowPos3dMESA; */
/* exec->WindowPos3dvMESA = _mesa_WindowPos3dvMESA; */
/* exec->WindowPos3fMESA = _mesa_WindowPos3fMESA; */
/* exec->WindowPos3fvMESA = _mesa_WindowPos3fvMESA; */
/* exec->WindowPos3iMESA = _mesa_WindowPos3iMESA; */
/* exec->WindowPos3ivMESA = _mesa_WindowPos3ivMESA; */
/* exec->WindowPos3sMESA = _mesa_WindowPos3sMESA; */
/* exec->WindowPos3svMESA = _mesa_WindowPos3svMESA; */
/* exec->WindowPos4dMESA = _mesa_WindowPos4dMESA; */
/* exec->WindowPos4dvMESA = _mesa_WindowPos4dvMESA; */
/* exec->WindowPos4fMESA = _mesa_WindowPos4fMESA; */
/* exec->WindowPos4fvMESA = _mesa_WindowPos4fvMESA; */
/* exec->WindowPos4iMESA = _mesa_WindowPos4iMESA; */
/* exec->WindowPos4ivMESA = _mesa_WindowPos4ivMESA; */
/* exec->WindowPos4sMESA = _mesa_WindowPos4sMESA; */
/* exec->WindowPos4svMESA = _mesa_WindowPos4svMESA; */
#if _HAVE_FULL_GL
exec->WindowPos2dMESA = _mesa_WindowPos2dMESA;
exec->WindowPos2dvMESA = _mesa_WindowPos2dvMESA;
exec->WindowPos2fMESA = _mesa_WindowPos2fMESA;
exec->WindowPos2fvMESA = _mesa_WindowPos2fvMESA;
exec->WindowPos2iMESA = _mesa_WindowPos2iMESA;
exec->WindowPos2ivMESA = _mesa_WindowPos2ivMESA;
exec->WindowPos2sMESA = _mesa_WindowPos2sMESA;
exec->WindowPos2svMESA = _mesa_WindowPos2svMESA;
exec->WindowPos3dMESA = _mesa_WindowPos3dMESA;
exec->WindowPos3dvMESA = _mesa_WindowPos3dvMESA;
exec->WindowPos3fMESA = _mesa_WindowPos3fMESA;
exec->WindowPos3fvMESA = _mesa_WindowPos3fvMESA;
exec->WindowPos3iMESA = _mesa_WindowPos3iMESA;
exec->WindowPos3ivMESA = _mesa_WindowPos3ivMESA;
exec->WindowPos3sMESA = _mesa_WindowPos3sMESA;
exec->WindowPos3svMESA = _mesa_WindowPos3svMESA;
exec->WindowPos4dMESA = _mesa_WindowPos4dMESA;
exec->WindowPos4dvMESA = _mesa_WindowPos4dvMESA;
exec->WindowPos4fMESA = _mesa_WindowPos4fMESA;
exec->WindowPos4fvMESA = _mesa_WindowPos4fvMESA;
exec->WindowPos4iMESA = _mesa_WindowPos4iMESA;
exec->WindowPos4ivMESA = _mesa_WindowPos4ivMESA;
exec->WindowPos4sMESA = _mesa_WindowPos4sMESA;
exec->WindowPos4svMESA = _mesa_WindowPos4svMESA;
#endif
/* 233. GL_NV_vertex_program */
#if FEATURE_NV_vertex_program
/* exec->BindProgramNV = _mesa_BindProgramNV; */
/* exec->DeleteProgramsNV = _mesa_DeleteProgramsNV; */
/* exec->ExecuteProgramNV = _mesa_ExecuteProgramNV; */
/* exec->GenProgramsNV = _mesa_GenProgramsNV; */
/* exec->AreProgramsResidentNV = _mesa_AreProgramsResidentNV; */
/* exec->RequestResidentProgramsNV = _mesa_RequestResidentProgramsNV; */
/* exec->GetProgramParameterfvNV = _mesa_GetProgramParameterfvNV; */
/* exec->GetProgramParameterdvNV = _mesa_GetProgramParameterdvNV; */
/* exec->GetProgramivNV = _mesa_GetProgramivNV; */
/* exec->GetProgramStringNV = _mesa_GetProgramStringNV; */
/* exec->GetTrackMatrixivNV = _mesa_GetTrackMatrixivNV; */
/* exec->GetVertexAttribdvNV = _mesa_GetVertexAttribdvNV; */
/* exec->GetVertexAttribfvNV = _mesa_GetVertexAttribfvNV; */
/* exec->GetVertexAttribivNV = _mesa_GetVertexAttribivNV; */
/* exec->GetVertexAttribPointervNV = _mesa_GetVertexAttribPointervNV; */
/* exec->IsProgramNV = _mesa_IsProgramNV; */
/* exec->LoadProgramNV = _mesa_LoadProgramNV; */
/* exec->ProgramParameter4dNV = _mesa_ProgramParameter4dNV; */
/* exec->ProgramParameter4dvNV = _mesa_ProgramParameter4dvNV; */
/* exec->ProgramParameter4fNV = _mesa_ProgramParameter4fNV; */
/* exec->ProgramParameter4fvNV = _mesa_ProgramParameter4fvNV; */
/* exec->ProgramParameters4dvNV = _mesa_ProgramParameters4dvNV; */
/* exec->ProgramParameters4fvNV = _mesa_ProgramParameters4fvNV; */
/* exec->TrackMatrixNV = _mesa_TrackMatrixNV; */
/* exec->VertexAttribPointerNV = _mesa_VertexAttribPointerNV; */
#if _HAVE_FULL_GL && FEATURE_NV_vertex_program
exec->BindProgramNV = _mesa_BindProgramNV;
exec->DeleteProgramsNV = _mesa_DeleteProgramsNV;
exec->ExecuteProgramNV = _mesa_ExecuteProgramNV;
exec->GenProgramsNV = _mesa_GenProgramsNV;
exec->AreProgramsResidentNV = _mesa_AreProgramsResidentNV;
exec->RequestResidentProgramsNV = _mesa_RequestResidentProgramsNV;
exec->GetProgramParameterfvNV = _mesa_GetProgramParameterfvNV;
exec->GetProgramParameterdvNV = _mesa_GetProgramParameterdvNV;
exec->GetProgramivNV = _mesa_GetProgramivNV;
exec->GetProgramStringNV = _mesa_GetProgramStringNV;
exec->GetTrackMatrixivNV = _mesa_GetTrackMatrixivNV;
exec->GetVertexAttribdvNV = _mesa_GetVertexAttribdvNV;
exec->GetVertexAttribfvNV = _mesa_GetVertexAttribfvNV;
exec->GetVertexAttribivNV = _mesa_GetVertexAttribivNV;
exec->GetVertexAttribPointervNV = _mesa_GetVertexAttribPointervNV;
exec->IsProgramNV = _mesa_IsProgramNV;
exec->LoadProgramNV = _mesa_LoadProgramNV;
exec->ProgramParameter4dNV = _mesa_ProgramParameter4dNV;
exec->ProgramParameter4dvNV = _mesa_ProgramParameter4dvNV;
exec->ProgramParameter4fNV = _mesa_ProgramParameter4fNV;
exec->ProgramParameter4fvNV = _mesa_ProgramParameter4fvNV;
exec->ProgramParameters4dvNV = _mesa_ProgramParameters4dvNV;
exec->ProgramParameters4fvNV = _mesa_ProgramParameters4fvNV;
exec->TrackMatrixNV = _mesa_TrackMatrixNV;
exec->VertexAttribPointerNV = _mesa_VertexAttribPointerNV;
#endif
/* 262. GL_NV_point_sprite */
/* exec->PointParameteriNV = _mesa_PointParameteriNV; */
/* exec->PointParameterivNV = _mesa_PointParameterivNV; */
#if _HAVE_FULL_GL
exec->PointParameteriNV = _mesa_PointParameteriNV;
exec->PointParameterivNV = _mesa_PointParameterivNV;
#endif
/* 268. GL_EXT_stencil_two_side */
/* exec->ActiveStencilFaceEXT = _mesa_ActiveStencilFaceEXT; */
#if _HAVE_FULL_GL
exec->ActiveStencilFaceEXT = _mesa_ActiveStencilFaceEXT;
#endif
/* ARB 1. GL_ARB_multitexture */
/* exec->ActiveTextureARB = _mesa_ActiveTextureARB; */
/* exec->ClientActiveTextureARB = _mesa_ClientActiveTextureARB; */
#if _HAVE_FULL_GL
exec->ActiveTextureARB = _mesa_ActiveTextureARB;
exec->ClientActiveTextureARB = _mesa_ClientActiveTextureARB;
#endif
/* ARB 3. GL_ARB_transpose_matrix */
/* exec->LoadTransposeMatrixdARB = _mesa_LoadTransposeMatrixdARB; */
/* exec->LoadTransposeMatrixfARB = _mesa_LoadTransposeMatrixfARB; */
/* exec->MultTransposeMatrixdARB = _mesa_MultTransposeMatrixdARB; */
/* exec->MultTransposeMatrixfARB = _mesa_MultTransposeMatrixfARB; */
#if _HAVE_FULL_GL
exec->LoadTransposeMatrixdARB = _mesa_LoadTransposeMatrixdARB;
exec->LoadTransposeMatrixfARB = _mesa_LoadTransposeMatrixfARB;
exec->MultTransposeMatrixdARB = _mesa_MultTransposeMatrixdARB;
exec->MultTransposeMatrixfARB = _mesa_MultTransposeMatrixfARB;
#endif
/* ARB 5. GL_ARB_multisample */
/* exec->SampleCoverageARB = _mesa_SampleCoverageARB; */
#if _HAVE_FULL_GL
exec->SampleCoverageARB = _mesa_SampleCoverageARB;
#endif
/* ARB 12. GL_ARB_texture_compression */
/* exec->CompressedTexImage3DARB = _mesa_CompressedTexImage3DARB; */
/* exec->CompressedTexImage2DARB = _mesa_CompressedTexImage2DARB; */
/* exec->CompressedTexImage1DARB = _mesa_CompressedTexImage1DARB; */
/* exec->CompressedTexSubImage3DARB = _mesa_CompressedTexSubImage3DARB; */
/* exec->CompressedTexSubImage2DARB = _mesa_CompressedTexSubImage2DARB; */
/* exec->CompressedTexSubImage1DARB = _mesa_CompressedTexSubImage1DARB; */
/* exec->GetCompressedTexImageARB = _mesa_GetCompressedTexImageARB; */
#if _HAVE_FULL_GL
exec->CompressedTexImage3DARB = _mesa_CompressedTexImage3DARB;
exec->CompressedTexImage2DARB = _mesa_CompressedTexImage2DARB;
exec->CompressedTexImage1DARB = _mesa_CompressedTexImage1DARB;
exec->CompressedTexSubImage3DARB = _mesa_CompressedTexSubImage3DARB;
exec->CompressedTexSubImage2DARB = _mesa_CompressedTexSubImage2DARB;
exec->CompressedTexSubImage1DARB = _mesa_CompressedTexSubImage1DARB;
exec->GetCompressedTexImageARB = _mesa_GetCompressedTexImageARB;
#endif
/* ARB 14. GL_ARB_point_parameters */
/* reuse EXT_point_parameters functions */

View File

@@ -1,4 +1,12 @@
/* $Id: m_matrix.c,v 1.14 2002/10/24 23:57:24 brianp Exp $ */
/**
* \file m_matrix.c
* \brief Matrix operations.
*
* \note
* -# 4x4 transformation matrices are stored in memory in column major order.
* -# Points/vertices are to be thought of as column vectors.
* -# Transformation of a point p by a matrix M is: p' = M * p
*/
/*
* Mesa 3-D graphics library
@@ -24,15 +32,8 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* $Id: m_matrix.c,v 1.14.4.1 2003/03/02 00:27:36 jrfonseca Exp $ */
/*
* Matrix operations
*
* NOTES:
* 1. 4x4 transformation matrices are stored in memory in column major order.
* 2. Points/vertices are to be thought of as column vectors.
* 3. Transformation of a point p by a matrix M is: p' = M * p
*/
#include "glheader.h"
#include "imports.h"
@@ -43,6 +44,9 @@
#include "m_matrix.h"
/**
* \brief Names of the corresponding GLmatrixtype values.
*/
static const char *types[] = {
"MATRIX_GENERAL",
"MATRIX_IDENTITY",
@@ -54,6 +58,9 @@ static const char *types[] = {
};
/**
* \brief Identity matrix.
*/
static GLfloat Identity[16] = {
1.0, 0.0, 0.0, 0.0,
0.0, 1.0, 0.0, 0.0,
@@ -63,22 +70,27 @@ static GLfloat Identity[16] = {
/**********************************************************************/
/** \name Matrix multiplication */
/*@{*/
/*
* This matmul was contributed by Thomas Malik
*
* Perform a 4x4 matrix multiplication (product = a x b).
* Input: a, b - matrices to multiply
* Output: product - product of a and b
* WARNING: (product != b) assumed
* NOTE: (product == a) allowed
*
* KW: 4*16 = 64 muls
*/
#define A(row,col) a[(col<<2)+row]
#define B(row,col) b[(col<<2)+row]
#define P(row,col) product[(col<<2)+row]
/**
* \brief Perform a full 4x4 matrix multiplication.
*
* \param a matrix.
* \param b matrix.
* \param product will receive the product of \p a and \p b.
*
* \warning Is assumed that \p product != \p b. \p product == \p a is allowed.
*
* \note KW: 4*16 = 64 multiplications
*
* \author This \c matmul was contributed by Thomas Malik
*/
static void matmul4( GLfloat *product, const GLfloat *a, const GLfloat *b )
{
GLint i;
@@ -91,9 +103,13 @@ static void matmul4( GLfloat *product, const GLfloat *a, const GLfloat *b )
}
}
/* Multiply two matrices known to occupy only the top three rows, such
/**
* \brief Multiply two matrices known to occupy only the top three rows, such
* as typical model matrices, and ortho matrices.
*
* \param a matrix.
* \param b matrix.
* \param product will receive the product of \p a and \p b.
*/
static void matmul34( GLfloat *product, const GLfloat *a, const GLfloat *b )
{
@@ -111,14 +127,20 @@ static void matmul34( GLfloat *product, const GLfloat *a, const GLfloat *b )
P(3,3) = 1;
}
#undef A
#undef B
#undef P
/*
* Multiply a matrix by an array of floats with known properties.
/**
* \brief Multiply a matrix by an array of floats with known properties.
*
* \param mat pointer to a GLmatrix structure containing the left mutiplication
* matrix, and that will receive the product result.
* \param m right multiplication matrix array.
* \param flags flags of the matrix \p m.
*
* Joins both flags and marks the type and inverse as drity. Calls matmul34()
* if both matrices are 3D, or matmul4() otherwise.
*/
static void matrix_multf( GLmatrix *mat, const GLfloat *m, GLuint flags )
{
@@ -130,7 +152,49 @@ static void matrix_multf( GLmatrix *mat, const GLfloat *m, GLuint flags )
matmul4( mat->m, mat->m, m );
}
/**
* \brief Matrix multiplication.
*
*/
void
_math_matrix_mul_matrix( GLmatrix *dest, const GLmatrix *a, const GLmatrix *b )
{
dest->flags = (a->flags |
b->flags |
MAT_DIRTY_TYPE |
MAT_DIRTY_INVERSE);
if (TEST_MAT_FLAGS(dest, MAT_FLAGS_3D))
matmul34( dest->m, a->m, b->m );
else
matmul4( dest->m, a->m, b->m );
}
void
_math_matrix_mul_floats( GLmatrix *dest, const GLfloat *m )
{
dest->flags |= (MAT_FLAG_GENERAL |
MAT_DIRTY_TYPE |
MAT_DIRTY_INVERSE);
matmul4( dest->m, dest->m, m );
}
/*@{*/
/**********************************************************************/
/** \name Matrix output */
/*@{*/
/**
* \brief Print a matrix array.
*
* \param m matrix array.
*
* Called by _math_matrix_print() to print a matrix or its inverse.
*/
static void print_matrix_floats( const GLfloat m[16] )
{
int i;
@@ -139,6 +203,11 @@ static void print_matrix_floats( const GLfloat m[16] )
}
}
/**
* \brief Dumps the contents of a GLmatrix structure.
*
* \param m pointer to the GLmatrix strucure.
*/
void
_math_matrix_print( const GLmatrix *m )
{
@@ -157,16 +226,48 @@ _math_matrix_print( const GLmatrix *m )
}
}
/*@}*/
#define SWAP_ROWS(a, b) { GLfloat *_tmp = a; (a)=(b); (b)=_tmp; }
/**
* \brief References an element of 4x4 matrix.
*
* \param m matrix array.
* \param c column of the desired element.
* \param r row of the desired element.
*
* \return value of the desired element.
*
* Calculate the linear storage index of the element and references it.
*/
#define MAT(m,r,c) (m)[(c)*4+(r)]
/*
* Compute inverse of 4x4 transformation matrix.
/**********************************************************************/
/** \name Matrix inversion */
/*@{*/
/**
* \brief Swaps the values of two floating pointer variables.
*
* Used by invert_matrix_general() to swap the row pointers.
*/
#define SWAP_ROWS(a, b) { GLfloat *_tmp = a; (a)=(b); (b)=_tmp; }
/**
* \brief Compute inverse of 4x4 transformation matrix.
*
* \param mat pointer to a GLmatrix structure. The matrix inverse will be
* stored in the GLmatrix::inv attribute.
*
* \return GL_TRUE for success, GL_FALSE for failure (\p singular matrix).
*
* \author
* Code contributed by Jacques Leroy jle@star.be
* Return GL_TRUE for success, GL_FALSE for failure (singular matrix)
*
* Calculates the inverse matrix by performing the gaussian matrix reduction
* with partial pivoting folloed by back/substitution with the loops manually
* unrolled.
*/
static GLboolean invert_matrix_general( GLmatrix *mat )
{
@@ -281,8 +382,20 @@ static GLboolean invert_matrix_general( GLmatrix *mat )
}
#undef SWAP_ROWS
/* Adapted from graphics gems II.
/**
* \brief Compute inverse of a general 3d transformation matrix.
*
* \param mat pointer to a GLmatrix structure. The matrix inverse will be
* stored in the GLmatrix::inv attribute.
*
* \return GL_TRUE for success, GL_FALSE for failure (\p singular matrix).
*
* \author Adapted from graphics gems II.
*
* Calculates the inverse of the upper left by first calculating its
* determinant and multiplying it to the simetric adjust matrix of each
* element. Finally deals with the translation part by transforming the
* original translation vector using by the calculated submatrix inverse.
*/
static GLboolean invert_matrix_3d_general( GLmatrix *mat )
{
@@ -343,7 +456,19 @@ static GLboolean invert_matrix_3d_general( GLmatrix *mat )
return GL_TRUE;
}
/**
* \brief Compute inverse of a 3d transformation matrix.
*
* \param mat pointer to a GLmatrix structure. The matrix inverse will be
* stored in the GLmatrix::inv attribute.
*
* \return GL_TRUE for success, GL_FALSE for failure (\p singular matrix).
*
* If the matrix is not an angle preserving matrix then calls
* invert_matrix_3d_general for the actual calculation. Otherwise calculates
* the inverse matrix analyzing and inverting each of the scaling, rotation and
* translation parts.
*/
static GLboolean invert_matrix_3d( GLmatrix *mat )
{
const GLfloat *in = mat->m;
@@ -414,15 +539,32 @@ static GLboolean invert_matrix_3d( GLmatrix *mat )
return GL_TRUE;
}
/**
* \brief Compute inverse of an identity transformation matrix.
*
* \param mat pointer to a GLmatrix structure. The matrix inverse will be
* stored in the GLmatrix::inv attribute.
*
* \return always GL_TRUE.
*
* Simply copies Identity into GLmatrix::inv.
*/
static GLboolean invert_matrix_identity( GLmatrix *mat )
{
MEMCPY( mat->inv, Identity, sizeof(Identity) );
return GL_TRUE;
}
/**
* \brief Compute inverse of a no-rotation 3d transformation matrix.
*
* \param mat pointer to a GLmatrix structure. The matrix inverse will be
* stored in the GLmatrix::inv attribute.
*
* \return GL_TRUE for success, GL_FALSE for failure (\p singular matrix).
*
* Calculates the
*/
static GLboolean invert_matrix_3d_no_rot( GLmatrix *mat )
{
const GLfloat *in = mat->m;
@@ -445,7 +587,17 @@ static GLboolean invert_matrix_3d_no_rot( GLmatrix *mat )
return GL_TRUE;
}
/**
* \brief Compute inverse of a no-rotation 2d transformation matrix.
*
* \param mat pointer to a GLmatrix structure. The matrix inverse will be
* stored in the GLmatrix::inv attribute.
*
* \return GL_TRUE for success, GL_FALSE for failure (\p singular matrix).
*
* Calculates the inverse matrix by applying the inverse scaling and
* translation to the identity matrix.
*/
static GLboolean invert_matrix_2d_no_rot( GLmatrix *mat )
{
const GLfloat *in = mat->m;
@@ -466,7 +618,6 @@ static GLboolean invert_matrix_2d_no_rot( GLmatrix *mat )
return GL_TRUE;
}
#if 0
/* broken */
static GLboolean invert_matrix_perspective( GLmatrix *mat )
@@ -495,10 +646,14 @@ static GLboolean invert_matrix_perspective( GLmatrix *mat )
}
#endif
/**
* \brief Matrix inversion function pointer type.
*/
typedef GLboolean (*inv_mat_func)( GLmatrix *mat );
/**
* \brief Table of the matrix inversion functions according to the matrix type.
*/
static inv_mat_func inv_mat_tab[7] = {
invert_matrix_general,
invert_matrix_identity,
@@ -516,7 +671,18 @@ static inv_mat_func inv_mat_tab[7] = {
invert_matrix_3d
};
/**
* \brief Compute inverse of a transformation matrix.
*
* \param mat pointer to a GLmatrix structure. The matrix inverse will be
* stored in the GLmatrix::inv attribute.
*
* \return GL_TRUE for success, GL_FALSE for failure (\p singular matrix).
*
* Calls the matrix inversion function in inv_mat_tab corresponding to the
* given matrix type. In case of failure, updates the MAT_FLAG_SINGULAR flag,
* and copies the identity matrix into GLmatrix::inv.
*/
static GLboolean matrix_invert( GLmatrix *mat )
{
if (inv_mat_tab[mat->type](mat)) {
@@ -529,16 +695,20 @@ static GLboolean matrix_invert( GLmatrix *mat )
}
}
/*@}*/
/**********************************************************************/
/** \name Matrix generation */
/*@{*/
/*
* Generate a 4x4 transformation matrix from glRotate parameters, and
* postmultiply the input matrix by it.
* This function contributed by Erich Boleyn (erich@uruk.org).
* Optimizatios contributed by Rudolf Opalla (rudi@khm.de).
/**
* \brief Generate a 4x4 transformation matrix from glRotate parameters, and
* post-multiply the input matrix by it.
*
* \author
* This function was contributed by Erich Boleyn (erich@uruk.org).
* Optimizations contributed by Rudolf Opalla (rudi@khm.de).
*/
void
_math_matrix_rotate( GLmatrix *mat,
@@ -710,8 +880,6 @@ _math_matrix_rotate( GLmatrix *mat,
matrix_multf( mat, m, MAT_FLAG_ROTATION );
}
void
_math_matrix_frustum( GLmatrix *mat,
GLfloat left, GLfloat right,
@@ -765,6 +933,58 @@ _math_matrix_ortho( GLmatrix *mat,
matrix_multf( mat, m, (MAT_FLAG_GENERAL_SCALE|MAT_FLAG_TRANSLATION));
}
void
_math_matrix_scale( GLmatrix *mat, GLfloat x, GLfloat y, GLfloat z )
{
GLfloat *m = mat->m;
m[0] *= x; m[4] *= y; m[8] *= z;
m[1] *= x; m[5] *= y; m[9] *= z;
m[2] *= x; m[6] *= y; m[10] *= z;
m[3] *= x; m[7] *= y; m[11] *= z;
if (fabs(x - y) < 1e-8 && fabs(x - z) < 1e-8)
mat->flags |= MAT_FLAG_UNIFORM_SCALE;
else
mat->flags |= MAT_FLAG_GENERAL_SCALE;
mat->flags |= (MAT_DIRTY_TYPE |
MAT_DIRTY_INVERSE);
}
void
_math_matrix_translate( GLmatrix *mat, GLfloat x, GLfloat y, GLfloat z )
{
GLfloat *m = mat->m;
m[12] = m[0] * x + m[4] * y + m[8] * z + m[12];
m[13] = m[1] * x + m[5] * y + m[9] * z + m[13];
m[14] = m[2] * x + m[6] * y + m[10] * z + m[14];
m[15] = m[3] * x + m[7] * y + m[11] * z + m[15];
mat->flags |= (MAT_FLAG_TRANSLATION |
MAT_DIRTY_TYPE |
MAT_DIRTY_INVERSE);
}
void
_math_matrix_set_identity( GLmatrix *mat )
{
MEMCPY( mat->m, Identity, 16*sizeof(GLfloat) );
if (mat->inv)
MEMCPY( mat->inv, Identity, 16*sizeof(GLfloat) );
mat->type = MATRIX_IDENTITY;
mat->flags &= ~(MAT_DIRTY_FLAGS|
MAT_DIRTY_TYPE|
MAT_DIRTY_INVERSE);
}
/*@}*/
/**********************************************************************/
/** \name Matrix analysis */
/*@{*/
#define ZERO(x) (1<<x)
#define ONE(x) (1<<(x+16))
@@ -917,7 +1137,6 @@ static void analyse_from_scratch( GLmatrix *mat )
}
}
/* Analyse a matrix given that its flags are accurate - this is the
* more common operation, hopefully.
*/
@@ -959,7 +1178,6 @@ static void analyse_from_flags( GLmatrix *mat )
}
}
void
_math_matrix_analyse( GLmatrix *mat )
{
@@ -979,6 +1197,12 @@ _math_matrix_analyse( GLmatrix *mat )
MAT_DIRTY_INVERSE);
}
/*@}*/
/**********************************************************************/
/** \name Matrix setup */
/*@{*/
void
_math_matrix_copy( GLmatrix *to, const GLmatrix *from )
@@ -998,40 +1222,6 @@ _math_matrix_copy( GLmatrix *to, const GLmatrix *from )
}
void
_math_matrix_scale( GLmatrix *mat, GLfloat x, GLfloat y, GLfloat z )
{
GLfloat *m = mat->m;
m[0] *= x; m[4] *= y; m[8] *= z;
m[1] *= x; m[5] *= y; m[9] *= z;
m[2] *= x; m[6] *= y; m[10] *= z;
m[3] *= x; m[7] *= y; m[11] *= z;
if (fabs(x - y) < 1e-8 && fabs(x - z) < 1e-8)
mat->flags |= MAT_FLAG_UNIFORM_SCALE;
else
mat->flags |= MAT_FLAG_GENERAL_SCALE;
mat->flags |= (MAT_DIRTY_TYPE |
MAT_DIRTY_INVERSE);
}
void
_math_matrix_translate( GLmatrix *mat, GLfloat x, GLfloat y, GLfloat z )
{
GLfloat *m = mat->m;
m[12] = m[0] * x + m[4] * y + m[8] * z + m[12];
m[13] = m[1] * x + m[5] * y + m[9] * z + m[13];
m[14] = m[2] * x + m[6] * y + m[10] * z + m[14];
m[15] = m[3] * x + m[7] * y + m[11] * z + m[15];
mat->flags |= (MAT_FLAG_TRANSLATION |
MAT_DIRTY_TYPE |
MAT_DIRTY_INVERSE);
}
void
_math_matrix_loadf( GLmatrix *mat, const GLfloat *m )
{
@@ -1063,7 +1253,6 @@ _math_matrix_dtr( GLmatrix *m )
}
}
void
_math_matrix_alloc_inv( GLmatrix *m )
{
@@ -1074,47 +1263,12 @@ _math_matrix_alloc_inv( GLmatrix *m )
}
}
void
_math_matrix_mul_matrix( GLmatrix *dest, const GLmatrix *a, const GLmatrix *b )
{
dest->flags = (a->flags |
b->flags |
MAT_DIRTY_TYPE |
MAT_DIRTY_INVERSE);
if (TEST_MAT_FLAGS(dest, MAT_FLAGS_3D))
matmul34( dest->m, a->m, b->m );
else
matmul4( dest->m, a->m, b->m );
}
void
_math_matrix_mul_floats( GLmatrix *dest, const GLfloat *m )
{
dest->flags |= (MAT_FLAG_GENERAL |
MAT_DIRTY_TYPE |
MAT_DIRTY_INVERSE);
matmul4( dest->m, dest->m, m );
}
void
_math_matrix_set_identity( GLmatrix *mat )
{
MEMCPY( mat->m, Identity, 16*sizeof(GLfloat) );
if (mat->inv)
MEMCPY( mat->inv, Identity, 16*sizeof(GLfloat) );
mat->type = MATRIX_IDENTITY;
mat->flags &= ~(MAT_DIRTY_FLAGS|
MAT_DIRTY_TYPE|
MAT_DIRTY_INVERSE);
}
/*@}*/
/**********************************************************************/
/** \name Matrix transpose */
/*@{*/
void
_math_transposef( GLfloat to[16], const GLfloat from[16] )
@@ -1137,7 +1291,6 @@ _math_transposef( GLfloat to[16], const GLfloat from[16] )
to[15] = from[15];
}
void
_math_transposed( GLdouble to[16], const GLdouble from[16] )
{
@@ -1179,3 +1332,6 @@ _math_transposefd( GLfloat to[16], const GLdouble from[16] )
to[14] = (GLfloat) from[11];
to[15] = (GLfloat) from[15];
}
/*@}*/

View File

@@ -1,4 +1,7 @@
/* $Id: m_matrix.h,v 1.4 2001/03/12 00:48:41 gareth Exp $ */
/**
* \file m_matrix.h
* \brief Matrix operations.
*/
/*
* Mesa 3-D graphics library
@@ -24,13 +27,15 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* $Id: m_matrix.h,v 1.4.8.1 2003/03/02 00:27:36 jrfonseca Exp $ */
#ifndef _M_MATRIX_H
#define _M_MATRIX_H
/* Give symbolic names to some of the entries in the matrix to help
/**
* Give symbolic names to some of the entries in the matrix to help
* out with the rework of the viewport_map as a matrix transform.
*/
#define MAT_SX 0
@@ -40,43 +45,52 @@
#define MAT_TY 13
#define MAT_TZ 14
/*
* Different kinds of 4x4 transformation matrices:
/**
* \brief Different kinds of 4x4 transformation matrices.
*/
#define MATRIX_GENERAL 0 /* general 4x4 matrix */
#define MATRIX_IDENTITY 1 /* identity matrix */
#define MATRIX_3D_NO_ROT 2 /* ortho projection and others... */
#define MATRIX_PERSPECTIVE 3 /* perspective projection matrix */
#define MATRIX_2D 4 /* 2-D transformation */
#define MATRIX_2D_NO_ROT 5 /* 2-D scale & translate only */
#define MATRIX_3D 6 /* 3-D transformation */
enum GLmatrixtype {
MATRIX_GENERAL = 0, /**< \brief general 4x4 matrix */
MATRIX_IDENTITY = 1, /**< \brief identity matrix */
MATRIX_3D_NO_ROT = 2, /**< \brief ortho projection and others... */
MATRIX_PERSPECTIVE = 3, /**< \brief perspective projection matrix */
MATRIX_2D = 4, /**< \brief 2-D transformation */
MATRIX_2D_NO_ROT = 5, /**< \brief 2-D scale & translate only */
MATRIX_3D = 6, /**< \brief 3-D transformation */
} ;
#define MAT_FLAG_IDENTITY 0
#define MAT_FLAG_GENERAL 0x1
#define MAT_FLAG_ROTATION 0x2
#define MAT_FLAG_TRANSLATION 0x4
#define MAT_FLAG_UNIFORM_SCALE 0x8
#define MAT_FLAG_GENERAL_SCALE 0x10
#define MAT_FLAG_GENERAL_3D 0x20
#define MAT_FLAG_PERSPECTIVE 0x40
#define MAT_FLAG_SINGULAR 0x80
#define MAT_DIRTY_TYPE 0x100
#define MAT_DIRTY_FLAGS 0x200
#define MAT_DIRTY_INVERSE 0x400
#define MAT_FLAG_IDENTITY 0 /**< \brief is an identity matrix flag.
* (Not actualy used - the identity
* matrix is identified by the abcense
/ of all other flags.) */
#define MAT_FLAG_GENERAL 0x1 /**< \brief is a general matrix flag */
#define MAT_FLAG_ROTATION 0x2 /**< \brief is a rotation matrix flag */
#define MAT_FLAG_TRANSLATION 0x4 /**< \brief is a translation matrix flag */
#define MAT_FLAG_UNIFORM_SCALE 0x8 /**< \brief is an uniform scaling matrix flag */
#define MAT_FLAG_GENERAL_SCALE 0x10 /**< \brief is a general scaling matrix flag */
#define MAT_FLAG_GENERAL_3D 0x20 /**< \brief general 3D matrix flag */
#define MAT_FLAG_PERSPECTIVE 0x40 /**< \brief is a perspective projection matrix flag */
#define MAT_FLAG_SINGULAR 0x80 /**< \brief is a singular matrix flag */
#define MAT_DIRTY_TYPE 0x100 /**< \brief matrix type is dirty */
#define MAT_DIRTY_FLAGS 0x200 /**< \brief matrix flags are dirty */
#define MAT_DIRTY_INVERSE 0x400 /**< \brief matrix inverse is dirty */
/** \brief angle preserving matrix flags mask */
#define MAT_FLAGS_ANGLE_PRESERVING (MAT_FLAG_ROTATION | \
MAT_FLAG_TRANSLATION | \
MAT_FLAG_UNIFORM_SCALE)
/** \brief length preserving matrix flags mask */
#define MAT_FLAGS_LENGTH_PRESERVING (MAT_FLAG_ROTATION | \
MAT_FLAG_TRANSLATION)
/** \brief 3D (non-perspective) matrix flags mask */
#define MAT_FLAGS_3D (MAT_FLAG_ROTATION | \
MAT_FLAG_TRANSLATION | \
MAT_FLAG_UNIFORM_SCALE | \
MAT_FLAG_GENERAL_SCALE | \
MAT_FLAG_GENERAL_3D)
/** \brief geometry related matrix flags mask */
#define MAT_FLAGS_GEOMETRY (MAT_FLAG_GENERAL | \
MAT_FLAG_ROTATION | \
MAT_FLAG_TRANSLATION | \
@@ -86,19 +100,32 @@
MAT_FLAG_PERSPECTIVE | \
MAT_FLAG_SINGULAR)
/** \brief dirty matrix flags mask */
#define MAT_DIRTY (MAT_DIRTY_TYPE | \
MAT_DIRTY_FLAGS | \
MAT_DIRTY_INVERSE)
/**
* \brief Test geometry related matrix flags.
*
* \param mat a pointer to a GLmatrix structure.
* \param a flags mask.
*
* \returns non-zero if all geometry related matrix flags are contained within
* the mask, or zero otherwise.
*/
#define TEST_MAT_FLAGS(mat, a) \
((MAT_FLAGS_GEOMETRY & (~(a)) & ((mat)->flags) ) == 0)
/**
* \brief Matrix.
*/
typedef struct {
GLfloat *m; /* 16-byte aligned */
GLfloat *inv; /* optional, 16-byte aligned */
GLuint flags;
GLuint type; /* one of the MATRIX_* values */
GLfloat *m; /**< \brief matrix, 16-byte aligned */
GLfloat *inv; /**< \brief optional inverse, 16-byte aligned */
GLuint flags; /**< \brief property flags */
GLuint type; /**< \brief one of the GLmatrixtype values */
} GLmatrix;
@@ -158,9 +185,11 @@ _math_matrix_print( const GLmatrix *m );
/* Related functions that don't actually operate on GLmatrix structs:
/**
* \name Related functions that don't actually operate on GLmatrix structs
*/
/*@{*/
extern void
_math_transposef( GLfloat to[16], const GLfloat from[16] );
@@ -170,7 +199,7 @@ _math_transposed( GLdouble to[16], const GLdouble from[16] );
extern void
_math_transposefd( GLfloat to[16], const GLdouble from[16] );
/*@}*/
#endif

View File

@@ -12,7 +12,7 @@ clientDriverName=radeon_dri.so
# The pci bus id of the video card. Find this with scanpci, lspci or
# look in /proc/pci.
pciBusID=PCI:3:0:0
pciBusID=PCI:1:0:0
# Virtual screen dimensions. Can reduce this to save videocard memory
# at the expense of maximum window size available.