diff options
Diffstat (limited to 'mesalib/src/mesa')
-rw-r--r-- | mesalib/src/mesa/SConscript | 2 | ||||
-rw-r--r-- | mesalib/src/mesa/drivers/common/driverfuncs.c | 5 | ||||
-rw-r--r-- | mesalib/src/mesa/drivers/common/meta.c | 14 | ||||
-rw-r--r-- | mesalib/src/mesa/main/texgetimage.c | 28 | ||||
-rw-r--r-- | mesalib/src/mesa/main/texrender.h | 18 | ||||
-rw-r--r-- | mesalib/src/mesa/sources.mak | 2 | ||||
-rw-r--r-- | mesalib/src/mesa/swrast/s_texrender.c (renamed from mesalib/src/mesa/main/texrender.c) | 26 | ||||
-rw-r--r-- | mesalib/src/mesa/swrast/swrast.h | 474 | ||||
-rw-r--r-- | mesalib/src/mesa/vbo/vbo_exec_array.c | 8 |
9 files changed, 291 insertions, 286 deletions
diff --git a/mesalib/src/mesa/SConscript b/mesalib/src/mesa/SConscript index fdb4d5a58..24e2155c3 100644 --- a/mesalib/src/mesa/SConscript +++ b/mesalib/src/mesa/SConscript @@ -121,7 +121,6 @@ main_sources = [ 'main/texobj.c', 'main/texpal.c', 'main/texparam.c', - 'main/texrender.c', 'main/texstate.c', 'main/texstore.c', 'main/texturebarrier.c', @@ -174,6 +173,7 @@ swrast_sources = [ 'swrast/s_stencil.c', 'swrast/s_texcombine.c', 'swrast/s_texfilter.c', + 'swrast/s_texrender.c', 'swrast/s_triangle.c', 'swrast/s_zoom.c', ] diff --git a/mesalib/src/mesa/drivers/common/driverfuncs.c b/mesalib/src/mesa/drivers/common/driverfuncs.c index 0dbc7c3e8..8ab129dd7 100644 --- a/mesalib/src/mesa/drivers/common/driverfuncs.c +++ b/mesalib/src/mesa/drivers/common/driverfuncs.c @@ -40,7 +40,6 @@ #include "main/texstore.h" #include "main/bufferobj.h" #include "main/fbobject.h" -#include "main/texrender.h" #include "main/samplerobj.h" #include "main/syncobj.h" #include "main/texturebarrier.h" @@ -183,8 +182,8 @@ _mesa_init_driver_functions(struct dd_function_table *driver) driver->NewFramebuffer = _mesa_new_framebuffer; driver->NewRenderbuffer = _mesa_new_soft_renderbuffer; - driver->RenderTexture = _mesa_render_texture; - driver->FinishRenderTexture = _mesa_finish_render_texture; + driver->RenderTexture = _swrast_render_texture; + driver->FinishRenderTexture = _swrast_finish_render_texture; driver->FramebufferRenderbuffer = _mesa_framebuffer_renderbuffer; driver->ValidateFramebuffer = _mesa_validate_framebuffer; diff --git a/mesalib/src/mesa/drivers/common/meta.c b/mesalib/src/mesa/drivers/common/meta.c index 979926a7e..0e58aeca3 100644 --- a/mesalib/src/mesa/drivers/common/meta.c +++ b/mesalib/src/mesa/drivers/common/meta.c @@ -2691,12 +2691,26 @@ copy_tex_image(struct gl_context *ctx, GLuint dims, GLenum target, GLint level, GLenum format, type; GLint bpp; void *buf; + struct gl_renderbuffer *read_rb = ctx->ReadBuffer->_ColorReadBuffer; texObj = _mesa_get_current_tex_object(ctx, target); texImage = _mesa_get_tex_image(ctx, texObj, target, level); /* Choose format/type for temporary image buffer */ format = _mesa_base_tex_format(ctx, internalFormat); + + if (format == GL_LUMINANCE && + _mesa_get_format_base_format(read_rb->Format) != GL_LUMINANCE) { + /* The glReadPixels() path will convert RGB to luminance by + * summing R+G+B. glCopyTexImage() is supposed to behave as + * glCopyPixels, which doesn't do that change, and instead + * leaves it up to glTexImage which converts RGB to luminance by + * just taking the R channel. To avoid glReadPixels() trashing + * our data, use RGBA for our temporary image. + */ + format = GL_RGBA; + } + type = get_temp_image_type(ctx, format); bpp = _mesa_bytes_per_pixel(format, type); if (bpp <= 0) { diff --git a/mesalib/src/mesa/main/texgetimage.c b/mesalib/src/mesa/main/texgetimage.c index 97d101225..26c2ff98b 100644 --- a/mesalib/src/mesa/main/texgetimage.c +++ b/mesalib/src/mesa/main/texgetimage.c @@ -233,6 +233,7 @@ get_tex_rgba(struct gl_context *ctx, GLuint dimensions, const GLint width = texImage->Width; const GLint height = texImage->Height; const GLint depth = texImage->Depth; + const GLenum dataType = _mesa_get_format_datatype(texImage->TexFormat); /* Normally, no pixel transfer ops are performed during glGetTexImage. * The only possible exception is component clamping to [0,1]. */ @@ -248,6 +249,19 @@ get_tex_rgba(struct gl_context *ctx, GLuint dimensions, return; } + /* Clamping does not apply to GetTexImage (final conversion)? + * Looks like we need clamp though when going from format + * containing negative values to unsigned format. + */ + if (format == GL_LUMINANCE || format == GL_LUMINANCE_ALPHA) { + transferOps |= IMAGE_CLAMP_BIT; + } + else if (!type_with_negative_values(type) && + (dataType == GL_FLOAT || + dataType == GL_SIGNED_NORMALIZED)) { + transferOps |= IMAGE_CLAMP_BIT; + } + /* glGetTexImage always returns sRGB data for sRGB textures. Make sure the * fetch functions return sRGB data without linearizing it. */ @@ -262,20 +276,6 @@ get_tex_rgba(struct gl_context *ctx, GLuint dimensions, width, height, format, type, img, row, 0); GLint col; - GLenum dataType = _mesa_get_format_datatype(texImage->TexFormat); - - /* clamp does not apply to GetTexImage (final conversion)? - * Looks like we need clamp though when going from format - * containing negative values to unsigned format. - */ - if (format == GL_LUMINANCE || format == GL_LUMINANCE_ALPHA) { - transferOps |= IMAGE_CLAMP_BIT; - } - else if (!type_with_negative_values(type) && - (dataType == GL_FLOAT || - dataType == GL_SIGNED_NORMALIZED)) { - transferOps |= IMAGE_CLAMP_BIT; - } for (col = 0; col < width; col++) { texImage->FetchTexelf(texImage, col, row, img, rgba[col]); diff --git a/mesalib/src/mesa/main/texrender.h b/mesalib/src/mesa/main/texrender.h deleted file mode 100644 index d6e4784ca..000000000 --- a/mesalib/src/mesa/main/texrender.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef TEXRENDER_H
-#define TEXRENDER_H
-
-struct gl_context;
-struct gl_framebuffer;
-struct gl_renderbuffer_attachment;
-
-extern void
-_mesa_render_texture(struct gl_context *ctx,
- struct gl_framebuffer *fb,
- struct gl_renderbuffer_attachment *att);
-
-extern void
-_mesa_finish_render_texture(struct gl_context *ctx,
- struct gl_renderbuffer_attachment *att);
-
-
-#endif /* TEXRENDER_H */
diff --git a/mesalib/src/mesa/sources.mak b/mesalib/src/mesa/sources.mak index 9b2cb1a3c..4b2ec08bb 100644 --- a/mesalib/src/mesa/sources.mak +++ b/mesalib/src/mesa/sources.mak @@ -92,7 +92,6 @@ MAIN_SOURCES = \ main/texobj.c \ main/texpal.c \ main/texparam.c \ - main/texrender.c \ main/texstate.c \ main/texstore.c \ main/texturebarrier.c \ @@ -145,6 +144,7 @@ SWRAST_SOURCES = \ swrast/s_stencil.c \ swrast/s_texcombine.c \ swrast/s_texfilter.c \ + swrast/s_texrender.c \ swrast/s_triangle.c \ swrast/s_zoom.c diff --git a/mesalib/src/mesa/main/texrender.c b/mesalib/src/mesa/swrast/s_texrender.c index a7641a5f9..52d03c92a 100644 --- a/mesalib/src/mesa/main/texrender.c +++ b/mesalib/src/mesa/swrast/s_texrender.c @@ -1,12 +1,12 @@ -#include "context.h" -#include "colormac.h" -#include "fbobject.h" -#include "macros.h" -#include "texfetch.h" -#include "teximage.h" -#include "texrender.h" -#include "renderbuffer.h" +#include "main/context.h" +#include "main/colormac.h" +#include "main/fbobject.h" +#include "main/macros.h" +#include "main/texfetch.h" +#include "main/teximage.h" +#include "main/renderbuffer.h" +#include "swrast/swrast.h" /* @@ -628,9 +628,9 @@ update_wrapper(struct gl_context *ctx, struct gl_renderbuffer_attachment *att) * \sa _mesa_framebuffer_renderbuffer */ void -_mesa_render_texture(struct gl_context *ctx, - struct gl_framebuffer *fb, - struct gl_renderbuffer_attachment *att) +_swrast_render_texture(struct gl_context *ctx, + struct gl_framebuffer *fb, + struct gl_renderbuffer_attachment *att) { (void) fb; @@ -642,8 +642,8 @@ _mesa_render_texture(struct gl_context *ctx, void -_mesa_finish_render_texture(struct gl_context *ctx, - struct gl_renderbuffer_attachment *att) +_swrast_finish_render_texture(struct gl_context *ctx, + struct gl_renderbuffer_attachment *att) { /* do nothing */ /* The renderbuffer texture wrapper will get deleted by the diff --git a/mesalib/src/mesa/swrast/swrast.h b/mesalib/src/mesa/swrast/swrast.h index 2db536c7b..27b74c324 100644 --- a/mesalib/src/mesa/swrast/swrast.h +++ b/mesalib/src/mesa/swrast/swrast.h @@ -1,232 +1,242 @@ -/*
- * Mesa 3-D graphics library
- * Version: 6.5
- *
- * Copyright (C) 1999-2006 Brian Paul All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- */
-
-/**
- * \file swrast/swrast.h
- * \brief Public interface to the software rasterization functions.
- * \author Keith Whitwell <keith@tungstengraphics.com>
- */
-
-#ifndef SWRAST_H
-#define SWRAST_H
-
-#include "main/mtypes.h"
-
-/**
- * \struct SWvertex
- * \brief Data-structure to handle vertices in the software rasterizer.
- *
- * The software rasterizer now uses this format for vertices. Thus a
- * 'RasterSetup' stage or other translation is required between the
- * tnl module and the swrast rasterization functions. This serves to
- * isolate the swrast module from the internals of the tnl module, and
- * improve its usefulness as a fallback mechanism for hardware
- * drivers.
- *
- * wpos = attr[FRAG_ATTRIB_WPOS] and MUST BE THE FIRST values in the
- * vertex because of the tnl clipping code.
-
- * wpos[0] and [1] are the screen-coords of SWvertex.
- * wpos[2] is the z-buffer coord (if 16-bit Z buffer, in range [0,65535]).
- * wpos[3] is 1/w where w is the clip-space W coord. This is the value
- * that clip{XYZ} were multiplied by to get ndc{XYZ}.
- *
- * Full software drivers:
- * - Register the rastersetup and triangle functions from
- * utils/software_helper.
- * - On statechange, update the rasterization pointers in that module.
- *
- * Rasterization hardware drivers:
- * - Keep native rastersetup.
- * - Implement native twoside,offset and unfilled triangle setup.
- * - Implement a translator from native vertices to swrast vertices.
- * - On partial fallback (mix of accelerated and unaccelerated
- * prims), call a pass-through function which translates native
- * vertices to SWvertices and calls the appropriate swrast function.
- * - On total fallback (vertex format insufficient for state or all
- * primitives unaccelerated), hook in swrast_setup instead.
- */
-typedef struct {
- GLfloat attrib[FRAG_ATTRIB_MAX][4];
- GLchan color[4]; /** integer color */
- GLfloat pointSize;
-} SWvertex;
-
-
-#define FRAG_ATTRIB_CI FRAG_ATTRIB_COL0
-
-
-struct swrast_device_driver;
-
-
-/* These are the public-access functions exported from swrast.
- */
-
-extern GLboolean
-_swrast_CreateContext( struct gl_context *ctx );
-
-extern void
-_swrast_DestroyContext( struct gl_context *ctx );
-
-/* Get a (non-const) reference to the device driver struct for swrast.
- */
-extern struct swrast_device_driver *
-_swrast_GetDeviceDriverReference( struct gl_context *ctx );
-
-extern void
-_swrast_Bitmap( struct gl_context *ctx,
- GLint px, GLint py,
- GLsizei width, GLsizei height,
- const struct gl_pixelstore_attrib *unpack,
- const GLubyte *bitmap );
-
-extern void
-_swrast_CopyPixels( struct gl_context *ctx,
- GLint srcx, GLint srcy,
- GLint destx, GLint desty,
- GLsizei width, GLsizei height,
- GLenum type );
-
-extern void
-_swrast_DrawPixels( struct gl_context *ctx,
- GLint x, GLint y,
- GLsizei width, GLsizei height,
- GLenum format, GLenum type,
- const struct gl_pixelstore_attrib *unpack,
- const GLvoid *pixels );
-
-extern void
-_swrast_ReadPixels( struct gl_context *ctx,
- GLint x, GLint y, GLsizei width, GLsizei height,
- GLenum format, GLenum type,
- const struct gl_pixelstore_attrib *unpack,
- GLvoid *pixels );
-
-extern void
-_swrast_BlitFramebuffer(struct gl_context *ctx,
- GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
- GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
- GLbitfield mask, GLenum filter);
-
-extern void
-_swrast_Clear(struct gl_context *ctx, GLbitfield buffers);
-
-extern void
-_swrast_Accum(struct gl_context *ctx, GLenum op, GLfloat value);
-
-
-
-/* Reset the stipple counter
- */
-extern void
-_swrast_ResetLineStipple( struct gl_context *ctx );
-
-/**
- * Indicates front/back facing for subsequent points/lines when drawing
- * unfilled polygons. Needed for two-side stencil.
- */
-extern void
-_swrast_SetFacing(struct gl_context *ctx, GLuint facing);
-
-/* These will always render the correct point/line/triangle for the
- * current state.
- *
- * For flatshaded primitives, the provoking vertex is the final one.
- */
-extern void
-_swrast_Point( struct gl_context *ctx, const SWvertex *v );
-
-extern void
-_swrast_Line( struct gl_context *ctx, const SWvertex *v0, const SWvertex *v1 );
-
-extern void
-_swrast_Triangle( struct gl_context *ctx, const SWvertex *v0,
- const SWvertex *v1, const SWvertex *v2 );
-
-extern void
-_swrast_Quad( struct gl_context *ctx,
- const SWvertex *v0, const SWvertex *v1,
- const SWvertex *v2, const SWvertex *v3);
-
-extern void
-_swrast_flush( struct gl_context *ctx );
-
-extern void
-_swrast_render_primitive( struct gl_context *ctx, GLenum mode );
-
-extern void
-_swrast_render_start( struct gl_context *ctx );
-
-extern void
-_swrast_render_finish( struct gl_context *ctx );
-
-/* Tell the software rasterizer about core state changes.
- */
-extern void
-_swrast_InvalidateState( struct gl_context *ctx, GLbitfield new_state );
-
-/* Configure software rasterizer to match hardware rasterizer characteristics:
- */
-extern void
-_swrast_allow_vertex_fog( struct gl_context *ctx, GLboolean value );
-
-extern void
-_swrast_allow_pixel_fog( struct gl_context *ctx, GLboolean value );
-
-/* Debug:
- */
-extern void
-_swrast_print_vertex( struct gl_context *ctx, const SWvertex *v );
-
-
-
-extern void
-_swrast_eject_texture_images(struct gl_context *ctx);
-
-
-
-/**
- * The driver interface for the software rasterizer.
- * XXX this may go away.
- * We may move these functions to ctx->Driver.RenderStart, RenderEnd.
- */
-struct swrast_device_driver {
- /*
- * These are called before and after accessing renderbuffers during
- * software rasterization.
- *
- * These are a suitable place for grabbing/releasing hardware locks.
- *
- * NOTE: The swrast triangle/line/point routines *DO NOT* call
- * these functions. Locking in that case must be organized by the
- * driver by other mechanisms.
- */
- void (*SpanRenderStart)(struct gl_context *ctx);
- void (*SpanRenderFinish)(struct gl_context *ctx);
-};
-
-
-
-#endif
+/* + * Mesa 3-D graphics library + * Version: 6.5 + * + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +/** + * \file swrast/swrast.h + * \brief Public interface to the software rasterization functions. + * \author Keith Whitwell <keith@tungstengraphics.com> + */ + +#ifndef SWRAST_H +#define SWRAST_H + +#include "main/mtypes.h" + +/** + * \struct SWvertex + * \brief Data-structure to handle vertices in the software rasterizer. + * + * The software rasterizer now uses this format for vertices. Thus a + * 'RasterSetup' stage or other translation is required between the + * tnl module and the swrast rasterization functions. This serves to + * isolate the swrast module from the internals of the tnl module, and + * improve its usefulness as a fallback mechanism for hardware + * drivers. + * + * wpos = attr[FRAG_ATTRIB_WPOS] and MUST BE THE FIRST values in the + * vertex because of the tnl clipping code. + + * wpos[0] and [1] are the screen-coords of SWvertex. + * wpos[2] is the z-buffer coord (if 16-bit Z buffer, in range [0,65535]). + * wpos[3] is 1/w where w is the clip-space W coord. This is the value + * that clip{XYZ} were multiplied by to get ndc{XYZ}. + * + * Full software drivers: + * - Register the rastersetup and triangle functions from + * utils/software_helper. + * - On statechange, update the rasterization pointers in that module. + * + * Rasterization hardware drivers: + * - Keep native rastersetup. + * - Implement native twoside,offset and unfilled triangle setup. + * - Implement a translator from native vertices to swrast vertices. + * - On partial fallback (mix of accelerated and unaccelerated + * prims), call a pass-through function which translates native + * vertices to SWvertices and calls the appropriate swrast function. + * - On total fallback (vertex format insufficient for state or all + * primitives unaccelerated), hook in swrast_setup instead. + */ +typedef struct { + GLfloat attrib[FRAG_ATTRIB_MAX][4]; + GLchan color[4]; /** integer color */ + GLfloat pointSize; +} SWvertex; + + +#define FRAG_ATTRIB_CI FRAG_ATTRIB_COL0 + + +struct swrast_device_driver; + + +/* These are the public-access functions exported from swrast. + */ + +extern GLboolean +_swrast_CreateContext( struct gl_context *ctx ); + +extern void +_swrast_DestroyContext( struct gl_context *ctx ); + +/* Get a (non-const) reference to the device driver struct for swrast. + */ +extern struct swrast_device_driver * +_swrast_GetDeviceDriverReference( struct gl_context *ctx ); + +extern void +_swrast_Bitmap( struct gl_context *ctx, + GLint px, GLint py, + GLsizei width, GLsizei height, + const struct gl_pixelstore_attrib *unpack, + const GLubyte *bitmap ); + +extern void +_swrast_CopyPixels( struct gl_context *ctx, + GLint srcx, GLint srcy, + GLint destx, GLint desty, + GLsizei width, GLsizei height, + GLenum type ); + +extern void +_swrast_DrawPixels( struct gl_context *ctx, + GLint x, GLint y, + GLsizei width, GLsizei height, + GLenum format, GLenum type, + const struct gl_pixelstore_attrib *unpack, + const GLvoid *pixels ); + +extern void +_swrast_ReadPixels( struct gl_context *ctx, + GLint x, GLint y, GLsizei width, GLsizei height, + GLenum format, GLenum type, + const struct gl_pixelstore_attrib *unpack, + GLvoid *pixels ); + +extern void +_swrast_BlitFramebuffer(struct gl_context *ctx, + GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, + GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, + GLbitfield mask, GLenum filter); + +extern void +_swrast_Clear(struct gl_context *ctx, GLbitfield buffers); + +extern void +_swrast_Accum(struct gl_context *ctx, GLenum op, GLfloat value); + + + +/* Reset the stipple counter + */ +extern void +_swrast_ResetLineStipple( struct gl_context *ctx ); + +/** + * Indicates front/back facing for subsequent points/lines when drawing + * unfilled polygons. Needed for two-side stencil. + */ +extern void +_swrast_SetFacing(struct gl_context *ctx, GLuint facing); + +/* These will always render the correct point/line/triangle for the + * current state. + * + * For flatshaded primitives, the provoking vertex is the final one. + */ +extern void +_swrast_Point( struct gl_context *ctx, const SWvertex *v ); + +extern void +_swrast_Line( struct gl_context *ctx, const SWvertex *v0, const SWvertex *v1 ); + +extern void +_swrast_Triangle( struct gl_context *ctx, const SWvertex *v0, + const SWvertex *v1, const SWvertex *v2 ); + +extern void +_swrast_Quad( struct gl_context *ctx, + const SWvertex *v0, const SWvertex *v1, + const SWvertex *v2, const SWvertex *v3); + +extern void +_swrast_flush( struct gl_context *ctx ); + +extern void +_swrast_render_primitive( struct gl_context *ctx, GLenum mode ); + +extern void +_swrast_render_start( struct gl_context *ctx ); + +extern void +_swrast_render_finish( struct gl_context *ctx ); + +/* Tell the software rasterizer about core state changes. + */ +extern void +_swrast_InvalidateState( struct gl_context *ctx, GLbitfield new_state ); + +/* Configure software rasterizer to match hardware rasterizer characteristics: + */ +extern void +_swrast_allow_vertex_fog( struct gl_context *ctx, GLboolean value ); + +extern void +_swrast_allow_pixel_fog( struct gl_context *ctx, GLboolean value ); + +/* Debug: + */ +extern void +_swrast_print_vertex( struct gl_context *ctx, const SWvertex *v ); + + + +extern void +_swrast_eject_texture_images(struct gl_context *ctx); + + +extern void +_swrast_render_texture(struct gl_context *ctx, + struct gl_framebuffer *fb, + struct gl_renderbuffer_attachment *att); + +extern void +_swrast_finish_render_texture(struct gl_context *ctx, + struct gl_renderbuffer_attachment *att); + + + +/** + * The driver interface for the software rasterizer. + * XXX this may go away. + * We may move these functions to ctx->Driver.RenderStart, RenderEnd. + */ +struct swrast_device_driver { + /* + * These are called before and after accessing renderbuffers during + * software rasterization. + * + * These are a suitable place for grabbing/releasing hardware locks. + * + * NOTE: The swrast triangle/line/point routines *DO NOT* call + * these functions. Locking in that case must be organized by the + * driver by other mechanisms. + */ + void (*SpanRenderStart)(struct gl_context *ctx); + void (*SpanRenderFinish)(struct gl_context *ctx); +}; + + + +#endif diff --git a/mesalib/src/mesa/vbo/vbo_exec_array.c b/mesalib/src/mesa/vbo/vbo_exec_array.c index 5e9b2798c..7959337de 100644 --- a/mesalib/src/mesa/vbo/vbo_exec_array.c +++ b/mesalib/src/mesa/vbo/vbo_exec_array.c @@ -337,7 +337,8 @@ print_draw_arrays(struct gl_context *ctx, mode, start, count); for (i = 0; i < 32; i++) { - GLuint bufName = exec->array.inputs[i]->BufferObj->Name; + struct gl_buffer_object *bufObj = exec->array.inputs[i]->BufferObj; + GLuint bufName = bufObj->Name; GLint stride = exec->array.inputs[i]->Stride; printf("attr %2d: size %d stride %d enabled %d " "ptr %p Bufobj %u\n", @@ -350,9 +351,8 @@ print_draw_arrays(struct gl_context *ctx, bufName); if (bufName) { - struct gl_buffer_object *buf = _mesa_lookup_bufferobj(ctx, bufName); GLubyte *p = ctx->Driver.MapBuffer(ctx, GL_ARRAY_BUFFER_ARB, - GL_READ_ONLY_ARB, buf); + GL_READ_ONLY_ARB, bufObj); int offset = (int) (GLintptr) exec->array.inputs[i]->Ptr; float *f = (float *) (p + offset); int *k = (int *) f; @@ -364,7 +364,7 @@ print_draw_arrays(struct gl_context *ctx, for (i = 0; i < n; i++) { printf(" float[%d] = 0x%08x %f\n", i, k[i], f[i]); } - ctx->Driver.UnmapBuffer(ctx, GL_ARRAY_BUFFER_ARB, buf); + ctx->Driver.UnmapBuffer(ctx, GL_ARRAY_BUFFER_ARB, bufObj); } } } |