diff options
Diffstat (limited to 'mesalib/src/mesa/drivers')
-rw-r--r-- | mesalib/src/mesa/drivers/common/driverfuncs.c | 2 | ||||
-rw-r--r-- | mesalib/src/mesa/drivers/common/meta.c | 5 | ||||
-rw-r--r-- | mesalib/src/mesa/drivers/dri/common/depthtmp.h | 218 | ||||
-rw-r--r-- | mesalib/src/mesa/drivers/dri/common/spantmp2.h | 777 | ||||
-rw-r--r-- | mesalib/src/mesa/drivers/dri/common/spantmp_common.h | 78 | ||||
-rw-r--r-- | mesalib/src/mesa/drivers/dri/common/stenciltmp.h | 186 | ||||
-rw-r--r-- | mesalib/src/mesa/drivers/dri/swrast/Makefile.sources | 3 | ||||
-rw-r--r-- | mesalib/src/mesa/drivers/dri/swrast/swrast.c | 104 | ||||
-rw-r--r-- | mesalib/src/mesa/drivers/dri/swrast/swrast_priv.h | 21 | ||||
-rw-r--r-- | mesalib/src/mesa/drivers/dri/swrast/swrast_span.c | 347 | ||||
-rw-r--r-- | mesalib/src/mesa/drivers/dri/swrast/swrast_spantemp.h | 223 | ||||
-rw-r--r-- | mesalib/src/mesa/drivers/windows/gdi/wmesa.c | 51 |
12 files changed, 63 insertions, 1952 deletions
diff --git a/mesalib/src/mesa/drivers/common/driverfuncs.c b/mesalib/src/mesa/drivers/common/driverfuncs.c index c6b42a21d..1df838173 100644 --- a/mesalib/src/mesa/drivers/common/driverfuncs.c +++ b/mesalib/src/mesa/drivers/common/driverfuncs.c @@ -119,8 +119,6 @@ _mesa_init_driver_functions(struct dd_function_table *driver) driver->FreeTextureImageBuffer = _swrast_free_texture_image_buffer; driver->MapTextureImage = _swrast_map_teximage; driver->UnmapTextureImage = _swrast_unmap_teximage; - driver->MapTexture = NULL; - driver->UnmapTexture = NULL; driver->DrawTex = _mesa_meta_DrawTex; /* Vertex/fragment programs */ diff --git a/mesalib/src/mesa/drivers/common/meta.c b/mesalib/src/mesa/drivers/common/meta.c index 05cc712cf..aa5fef873 100644 --- a/mesalib/src/mesa/drivers/common/meta.c +++ b/mesalib/src/mesa/drivers/common/meta.c @@ -3131,6 +3131,11 @@ copy_tex_sub_image(struct gl_context *ctx, format = GL_RGBA; } + if (_mesa_is_format_integer_color(texImage->TexFormat)) { + _mesa_problem(ctx, "unsupported integer color copyteximage"); + return; + } + type = get_temp_image_type(ctx, format); bpp = _mesa_bytes_per_pixel(format, type); if (bpp <= 0) { diff --git a/mesalib/src/mesa/drivers/dri/common/depthtmp.h b/mesalib/src/mesa/drivers/dri/common/depthtmp.h deleted file mode 100644 index d8f259f67..000000000 --- a/mesalib/src/mesa/drivers/dri/common/depthtmp.h +++ /dev/null @@ -1,218 +0,0 @@ - -/* - * Notes: - * 1. These functions plug into the gl_renderbuffer structure. - * 2. The 'values' parameter always points to GLuint values, regardless of - * the actual Z buffer depth. - */ - - -#include "spantmp_common.h" - -#ifndef DBG -#define DBG 0 -#endif - -#ifndef HAVE_HW_DEPTH_SPANS -#define HAVE_HW_DEPTH_SPANS 0 -#endif - -#ifndef HAVE_HW_DEPTH_PIXELS -#define HAVE_HW_DEPTH_PIXELS 0 -#endif - -static void TAG(WriteDepthSpan)( struct gl_context *ctx, - struct gl_renderbuffer *rb, - GLuint n, GLint x, GLint y, - const void *values, - const GLubyte mask[] ) -{ - HW_WRITE_LOCK() - { - const VALUE_TYPE *depth = (const VALUE_TYPE *) values; - GLint x1; - GLint n1; - LOCAL_DEPTH_VARS; - - y = Y_FLIP( y ); - -#if HAVE_HW_DEPTH_SPANS - (void) x1; (void) n1; - - if ( DBG ) fprintf( stderr, "WriteDepthSpan 0..%d (x1 %d)\n", - (int)n, (int)x ); - - WRITE_DEPTH_SPAN(); -#else - HW_CLIPLOOP() - { - GLint i = 0; - CLIPSPAN( x, y, n, x1, n1, i ); - - if ( DBG ) fprintf( stderr, "WriteDepthSpan %d..%d (x1 %d) (mask %p)\n", - (int)i, (int)n1, (int)x1, mask ); - - if ( mask ) { - for ( ; n1>0 ; i++, x1++, n1-- ) { - if ( mask[i] ) WRITE_DEPTH( x1, y, depth[i] ); - } - } else { - for ( ; n1>0 ; i++, x1++, n1-- ) { - WRITE_DEPTH( x1, y, depth[i] ); - } - } - } - HW_ENDCLIPLOOP(); -#endif - } - HW_WRITE_UNLOCK(); - - (void) ctx; -} - - -static void TAG(WriteDepthPixels)( struct gl_context *ctx, - struct gl_renderbuffer *rb, - GLuint n, - const GLint x[], - const GLint y[], - const void *values, - const GLubyte mask[] ) -{ - HW_WRITE_LOCK() - { - const VALUE_TYPE *depth = (const VALUE_TYPE *) values; - GLuint i; - LOCAL_DEPTH_VARS; - - if ( DBG ) fprintf( stderr, "WriteDepthPixels\n" ); - -#if HAVE_HW_DEPTH_PIXELS - (void) i; - - WRITE_DEPTH_PIXELS(); -#else - HW_CLIPLOOP() - { - if ( mask ) { - for ( i = 0 ; i < n ; i++ ) { - if ( mask[i] ) { - const int fy = Y_FLIP( y[i] ); - if ( CLIPPIXEL( x[i], fy ) ) - WRITE_DEPTH( x[i], fy, depth[i] ); - } - } - } - else { - for ( i = 0 ; i < n ; i++ ) { - const int fy = Y_FLIP( y[i] ); - if ( CLIPPIXEL( x[i], fy ) ) - WRITE_DEPTH( x[i], fy, depth[i] ); - } - } - } - HW_ENDCLIPLOOP(); -#endif - } - HW_WRITE_UNLOCK(); - - (void) ctx; -} - - -/* Read depth spans and pixels - */ -static void TAG(ReadDepthSpan)( struct gl_context *ctx, - struct gl_renderbuffer *rb, - GLuint n, GLint x, GLint y, - void *values ) -{ - HW_READ_LOCK() - { - VALUE_TYPE *depth = (VALUE_TYPE *) values; - GLint x1, n1; - LOCAL_DEPTH_VARS; - - y = Y_FLIP( y ); - - if ( DBG ) fprintf( stderr, "ReadDepthSpan\n" ); - -#if HAVE_HW_DEPTH_SPANS - (void) x1; (void) n1; - - READ_DEPTH_SPAN(); -#else - HW_CLIPLOOP() - { - GLint i = 0; - CLIPSPAN( x, y, n, x1, n1, i ); - for ( ; n1>0 ; i++, n1-- ) { - READ_DEPTH( depth[i], x+i, y ); - } - } - HW_ENDCLIPLOOP(); -#endif - } - HW_READ_UNLOCK(); -} - -static void TAG(ReadDepthPixels)( struct gl_context *ctx, - struct gl_renderbuffer *rb, - GLuint n, - const GLint x[], const GLint y[], - void *values ) -{ - HW_READ_LOCK() - { - VALUE_TYPE *depth = (VALUE_TYPE *) values; - GLuint i; - LOCAL_DEPTH_VARS; - - if ( DBG ) fprintf( stderr, "ReadDepthPixels\n" ); - -#if HAVE_HW_DEPTH_PIXELS - (void) i; - - READ_DEPTH_PIXELS(); -#else - HW_CLIPLOOP() - { - for ( i = 0 ; i < n ;i++ ) { - int fy = Y_FLIP( y[i] ); - if ( CLIPPIXEL( x[i], fy ) ) - READ_DEPTH( depth[i], x[i], fy ); - } - } - HW_ENDCLIPLOOP(); -#endif - } - HW_READ_UNLOCK(); - - (void) ctx; -} - - -/** - * Initialize the given renderbuffer's span routines to point to - * the depth/z functions we generated above. - */ -static void TAG(InitDepthPointers)(struct gl_renderbuffer *rb) -{ - rb->GetRow = TAG(ReadDepthSpan); - rb->GetValues = TAG(ReadDepthPixels); - rb->PutRow = TAG(WriteDepthSpan); - rb->PutValues = TAG(WriteDepthPixels); -} - - -#if HAVE_HW_DEPTH_SPANS -#undef WRITE_DEPTH_SPAN -#undef WRITE_DEPTH_PIXELS -#undef READ_DEPTH_SPAN -#undef READ_DEPTH_PIXELS -#else -#undef WRITE_DEPTH -#undef READ_DEPTH -#endif -#undef TAG -#undef VALUE_TYPE diff --git a/mesalib/src/mesa/drivers/dri/common/spantmp2.h b/mesalib/src/mesa/drivers/dri/common/spantmp2.h deleted file mode 100644 index 744dfcd3b..000000000 --- a/mesalib/src/mesa/drivers/dri/common/spantmp2.h +++ /dev/null @@ -1,777 +0,0 @@ -/* - * Copyright 2000-2001 VA Linux Systems, Inc. - * (C) Copyright IBM Corporation 2004 - * 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 - * on the rights to use, copy, modify, merge, publish, distribute, sub - * license, 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 (including the next - * paragraph) 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 NON-INFRINGEMENT. IN NO EVENT SHALL - * VA LINUX SYSTEM, IBM AND/OR THEIR SUPPLIERS 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 spantmp2.h - * - * Template file of span read / write functions. - * - * \author Keith Whitwell <keithw@tungstengraphics.com> - * \author Gareth Hughes <gareth@nvidia.com> - * \author Ian Romanick <idr@us.ibm.com> - */ - -#include "main/colormac.h" -#include "spantmp_common.h" - -#ifndef DBG -#define DBG 0 -#endif - -#ifndef HW_READ_CLIPLOOP -#define HW_READ_CLIPLOOP() HW_CLIPLOOP() -#endif - -#ifndef HW_WRITE_CLIPLOOP -#define HW_WRITE_CLIPLOOP() HW_CLIPLOOP() -#endif - -#if (SPANTMP_PIXEL_FMT == GL_RGB) && (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_SHORT_5_6_5) - -/** - ** GL_RGB, GL_UNSIGNED_SHORT_5_6_5 - **/ - -#ifndef GET_VALUE -#ifndef GET_PTR -#define GET_PTR(_x, _y) (buf + (_x) * 2 + (_y) * pitch) -#endif - -#define GET_VALUE(_x, _y) *(volatile GLushort *)(GET_PTR(_x, _y)) -#define PUT_VALUE(_x, _y, _v) *(volatile GLushort *)(GET_PTR(_x, _y)) = (_v) -#endif /* GET_VALUE */ - -#define WRITE_RGBA( _x, _y, r, g, b, a ) \ - PUT_VALUE(_x, _y, ((((int)r & 0xf8) << 8) | \ - (((int)g & 0xfc) << 3) | \ - (((int)b & 0xf8) >> 3))) \ - -#define WRITE_PIXEL( _x, _y, p ) PUT_VALUE(_x, _y, p) - -#define READ_RGBA( rgba, _x, _y ) \ - do { \ - GLushort p = GET_VALUE(_x, _y); \ - rgba[0] = ((p >> 8) & 0xf8) * 255 / 0xf8; \ - rgba[1] = ((p >> 3) & 0xfc) * 255 / 0xfc; \ - rgba[2] = ((p << 3) & 0xf8) * 255 / 0xf8; \ - rgba[3] = 0xff; \ - } while (0) - -#elif (SPANTMP_PIXEL_FMT == GL_RGB) && (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_SHORT_5_6_5_REV) - -/** - ** GL_RGB, GL_UNSIGNED_SHORT_5_6_5_REV - **/ - -#ifndef GET_VALUE -#ifndef GET_PTR -#define GET_PTR(_x, _y) (buf + (_x) * 2 + (_y) * pitch) -#endif - -#define GET_VALUE(_x, _y) *(volatile GLushort *)(GET_PTR(_x, _y)) -#define PUT_VALUE(_x, _y, _v) *(volatile GLushort *)(GET_PTR(_x, _y)) = (_v) -#endif /* GET_VALUE */ - -#define WRITE_RGBA( _x, _y, r, g, b, a ) \ - PUT_VALUE(_x, _y, PACK_COLOR_565_REV( r, g, b )) - -#define WRITE_PIXEL( _x, _y, p ) PUT_VALUE(_x, _y, p) - -#define READ_RGBA( rgba, _x, _y ) \ - do { \ - GLushort p = GET_VALUE(_x, _y); \ - p = p << 8 | p >> 8; \ - rgba[0] = ((p >> 8) & 0xf8) * 255 / 0xf8; \ - rgba[1] = ((p >> 3) & 0xfc) * 255 / 0xfc; \ - rgba[2] = ((p << 3) & 0xf8) * 255 / 0xf8; \ - rgba[3] = 0xff; \ - } while (0) - -#elif (SPANTMP_PIXEL_FMT == GL_BGRA) && (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_SHORT_4_4_4_4) - -/** - ** GL_BGRA, GL_UNSIGNED_SHORT_4_4_4_4 - **/ - -#ifndef GET_VALUE -#ifndef GET_PTR -#define GET_PTR(_x, _y) (buf + (_x) * 2 + (_y) * pitch) -#endif - -#define GET_VALUE(_x, _y) *(volatile GLushort *)(GET_PTR(_x, _y)) -#define PUT_VALUE(_x, _y, _v) *(volatile GLushort *)(GET_PTR(_x, _y)) = (_v) -#endif /* GET_VALUE */ - -#define WRITE_RGBA( _x, _y, r, g, b, a ) \ - PUT_VALUE(_x, _y, PACK_COLOR_4444_REV(a, r, g, b)) \ - -#define WRITE_PIXEL( _x, _y, p ) PUT_VALUE(_x, _y, p) - -#define READ_RGBA( rgba, _x, _y ) \ - do { \ - GLushort p = GET_VALUE(_x, _y); \ - rgba[0] = ((p >> 0) & 0xf) * 0x11; \ - rgba[1] = ((p >> 12) & 0xf) * 0x11; \ - rgba[2] = ((p >> 4) & 0xf) * 0x11; \ - rgba[3] = ((p >> 8) & 0xf) * 0x11; \ - } while (0) - - -#elif (SPANTMP_PIXEL_FMT == GL_BGRA) && (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_SHORT_4_4_4_4_REV) - -/** - ** GL_BGRA, GL_UNSIGNED_SHORT_4_4_4_4_REV - **/ - -#ifndef GET_VALUE -#ifndef GET_PTR -#define GET_PTR(_x, _y) (buf + (_x) * 2 + (_y) * pitch) -#endif - -#define GET_VALUE(_x, _y) *(volatile GLushort *)(GET_PTR(_x, _y)) -#define PUT_VALUE(_x, _y, _v) *(volatile GLushort *)(GET_PTR(_x, _y)) = (_v) -#endif /* GET_VALUE */ - -#define WRITE_RGBA( _x, _y, r, g, b, a ) \ - PUT_VALUE(_x, _y, PACK_COLOR_4444(a, r, g, b)) \ - -#define WRITE_PIXEL( _x, _y, p ) PUT_VALUE(_x, _y, p) - -#define READ_RGBA( rgba, _x, _y ) \ - do { \ - GLushort p = GET_VALUE(_x, _y); \ - rgba[0] = ((p >> 8) & 0xf) * 0x11; \ - rgba[1] = ((p >> 4) & 0xf) * 0x11; \ - rgba[2] = ((p >> 0) & 0xf) * 0x11; \ - rgba[3] = ((p >> 12) & 0xf) * 0x11; \ - } while (0) - - -#elif (SPANTMP_PIXEL_FMT == GL_BGRA) && (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_SHORT_1_5_5_5_REV) - -/** - ** GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV - **/ - -#ifndef GET_VALUE -#ifndef GET_PTR -#define GET_PTR(_x, _y) (buf + (_x) * 2 + (_y) * pitch) -#endif - -#define GET_VALUE(_x, _y) *(volatile GLushort *)(GET_PTR(_x, _y)) -#define PUT_VALUE(_x, _y, _v) *(volatile GLushort *)(GET_PTR(_x, _y)) = (_v) -#endif /* GET_VALUE */ - -#define WRITE_RGBA( _x, _y, r, g, b, a ) \ - PUT_VALUE(_x, _y, PACK_COLOR_1555(a, r, g, b)) \ - -#define WRITE_PIXEL( _x, _y, p ) PUT_VALUE(_x, _y, p) - -#define READ_RGBA( rgba, _x, _y ) \ - do { \ - GLushort p = GET_VALUE(_x, _y); \ - rgba[0] = ((p >> 7) & 0xf8) * 255 / 0xf8; \ - rgba[1] = ((p >> 2) & 0xf8) * 255 / 0xf8; \ - rgba[2] = ((p << 3) & 0xf8) * 255 / 0xf8; \ - rgba[3] = ((p >> 15) & 0x1) * 0xff; \ - } while (0) - -#elif (SPANTMP_PIXEL_FMT == GL_BGRA) && (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_SHORT_1_5_5_5) - -/** - ** GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5 - **/ - -#ifndef GET_VALUE -#ifndef GET_PTR -#define GET_PTR(_x, _y) (buf + (_x) * 2 + (_y) * pitch) -#endif - -#define GET_VALUE(_x, _y) *(volatile GLushort *)(GET_PTR(_x, _y)) -#define PUT_VALUE(_x, _y, _v) *(volatile GLushort *)(GET_PTR(_x, _y)) = (_v) -#endif /* GET_VALUE */ - -#define WRITE_RGBA( _x, _y, r, g, b, a ) \ - PUT_VALUE(_x, _y, PACK_COLOR_1555_REV(a, r, g, b)) \ - -#define WRITE_PIXEL( _x, _y, p ) PUT_VALUE(_x, _y, p) - -#define READ_RGBA( rgba, _x, _y ) \ - do { \ - GLushort p = GET_VALUE(_x, _y); \ - p = p << 8 | p >> 8; \ - rgba[0] = ((p >> 7) & 0xf8) * 255 / 0xf8; \ - rgba[1] = ((p >> 2) & 0xf8) * 255 / 0xf8; \ - rgba[2] = ((p << 3) & 0xf8) * 255 / 0xf8; \ - rgba[3] = ((p >> 15) & 0x1) * 0xff; \ - } while (0) - -#elif (SPANTMP_PIXEL_FMT == GL_BGRA) && (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_INT_8_8_8_8_REV) - -/** - ** GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV - **/ - -#ifndef GET_VALUE -#ifndef GET_PTR -#define GET_PTR(_x, _y) ( buf + (_x) * 4 + (_y) * pitch) -#endif - -#define GET_VALUE(_x, _y) *(volatile GLuint *)(GET_PTR(_x, _y)) -#define PUT_VALUE(_x, _y, _v) *(volatile GLuint *)(GET_PTR(_x, _y)) = (_v) -#endif /* GET_VALUE */ - -# define WRITE_RGBA(_x, _y, r, g, b, a) \ - PUT_VALUE(_x, _y, ((r << 16) | \ - (g << 8) | \ - (b << 0) | \ - (a << 24))) - -#define WRITE_PIXEL(_x, _y, p) PUT_VALUE(_x, _y, p) - -# if defined( USE_X86_ASM ) -# define READ_RGBA(rgba, _x, _y) \ - do { \ - GLuint p = GET_VALUE(_x, _y); \ - __asm__ __volatile__( "bswap %0; rorl $8, %0" \ - : "=r" (p) : "0" (p) ); \ - ((GLuint *)rgba)[0] = p; \ - } while (0) -# elif defined( MESA_BIG_ENDIAN ) - /* On PowerPC with GCC 3.4.2 the shift madness below becomes a single - * rotlwi instruction. It also produces good code on SPARC. - */ -# define READ_RGBA( rgba, _x, _y ) \ - do { \ - GLuint p = GET_VALUE(_x, _y); \ - GLuint t = p; \ - *((uint32_t *) rgba) = (t >> 24) | (p << 8); \ - } while (0) -# else -# define READ_RGBA( rgba, _x, _y ) \ - do { \ - GLuint p = GET_VALUE(_x, _y); \ - rgba[0] = (p >> 16) & 0xff; \ - rgba[1] = (p >> 8) & 0xff; \ - rgba[2] = (p >> 0) & 0xff; \ - rgba[3] = (p >> 24) & 0xff; \ - } while (0) -# endif - -#elif (SPANTMP_PIXEL_FMT == GL_BGRA) && (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_INT_8_8_8_8) - -/** - ** GL_BGRA, GL_UNSIGNED_INT_8_8_8_8 - **/ - -#ifndef GET_VALUE -#ifndef GET_PTR -#define GET_PTR(_x, _y) ( buf + (_x) * 4 + (_y) * pitch) -#endif - -#define GET_VALUE(_x, _y) *(volatile GLuint *)(GET_PTR(_x, _y)) -#define PUT_VALUE(_x, _y, _v) *(volatile GLuint *)(GET_PTR(_x, _y)) = (_v) -#endif /* GET_VALUE */ - -# define WRITE_RGBA(_x, _y, r, g, b, a) \ - PUT_VALUE(_x, _y, ((r << 8) | \ - (g << 16) | \ - (b << 24) | \ - (a << 0))) - -#define WRITE_PIXEL(_x, _y, p) PUT_VALUE(_x, _y, p) - -# if defined( USE_X86_ASM ) -# define READ_RGBA(rgba, _x, _y) \ - do { \ - GLuint p = GET_VALUE(_x, _y); \ - __asm__ __volatile__( "rorl $8, %0" \ - : "=r" (p) : "0" (p) ); \ - ((GLuint *)rgba)[0] = p; \ - } while (0) -# elif defined( MESA_BIG_ENDIAN ) - /* On PowerPC with GCC 3.4.2 the shift madness below becomes a single - * rotlwi instruction. It also produces good code on SPARC. - */ -# define READ_RGBA( rgba, _x, _y ) \ - do { \ - GLuint p = CPU_TO_LE32(GET_VALUE(_x, _y)); \ - GLuint t = p; \ - *((uint32_t *) rgba) = (t >> 24) | (p << 8); \ - } while (0) -# else -# define READ_RGBA( rgba, _x, _y ) \ - do { \ - GLuint p = GET_VALUE(_x, _y); \ - rgba[0] = (p >> 8) & 0xff; \ - rgba[1] = (p >> 16) & 0xff; \ - rgba[2] = (p >> 24) & 0xff; \ - rgba[3] = (p >> 0) & 0xff; \ - } while (0) -# endif - -#elif (SPANTMP_PIXEL_FMT == GL_BGR) && (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_INT_8_8_8_8_REV) - -/** - ** GL_BGR, GL_UNSIGNED_INT_8_8_8_8_REV - ** - ** This is really for MESA_FORMAT_XRGB8888. The spantmp code needs to be - ** kicked to the curb, and we need to just code-gen this. - **/ - -#ifndef GET_VALUE -#ifndef GET_PTR -#define GET_PTR(_x, _y) ( buf + (_x) * 4 + (_y) * pitch) -#endif - -#define GET_VALUE(_x, _y) *(volatile GLuint *)(GET_PTR(_x, _y)) -#define PUT_VALUE(_x, _y, _v) *(volatile GLuint *)(GET_PTR(_x, _y)) = (_v) -#endif /* GET_VALUE */ - -# define WRITE_RGBA(_x, _y, r, g, b, a) \ - PUT_VALUE(_x, _y, ((r << 16) | \ - (g << 8) | \ - (b << 0) | \ - (0xff << 24))) - -#define WRITE_PIXEL(_x, _y, p) PUT_VALUE(_x, _y, p) - -# if defined( USE_X86_ASM ) -# define READ_RGBA(rgba, _x, _y) \ - do { \ - GLuint p = GET_VALUE(_x, _y); \ - __asm__ __volatile__( "bswap %0; rorl $8, %0" \ - : "=r" (p) : "0" (p) ); \ - ((GLuint *)rgba)[0] = p | 0xff000000; \ - } while (0) -# elif defined( MESA_BIG_ENDIAN ) - /* On PowerPC with GCC 3.4.2 the shift madness below becomes a single - * rotlwi instruction. It also produces good code on SPARC. - */ -# define READ_RGBA( rgba, _x, _y ) \ - do { \ - GLuint p = GET_VALUE(_x, _y); \ - *((uint32_t *) rgba) = (p << 8) | 0xff; \ - } while (0) -# else -# define READ_RGBA( rgba, _x, _y ) \ - do { \ - GLuint p = GET_VALUE(_x, _y); \ - rgba[0] = (p >> 16) & 0xff; \ - rgba[1] = (p >> 8) & 0xff; \ - rgba[2] = (p >> 0) & 0xff; \ - rgba[3] = 0xff; \ - } while (0) -# endif - -#elif (SPANTMP_PIXEL_FMT == GL_ALPHA) && (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_BYTE) - -/** - ** GL_ALPHA, GL_UNSIGNED_BYTE - **/ - -#ifndef GET_VALUE -#ifndef GET_PTR -#define GET_PTR(_x, _y) ( buf + (_x) + (_y) * pitch) -#endif - -#define GET_VALUE(_x, _y) *(volatile GLubyte *)(GET_PTR(_x, _y)) -#define PUT_VALUE(_x, _y, _v) *(volatile GLubyte *)(GET_PTR(_x, _y)) = (_v) -#endif /* GET_VALUE */ - -# define WRITE_RGBA(_x, _y, r, g, b, a) \ - PUT_VALUE(_x, _y, a | (r & 0 /* quiet warnings */)) - -#define WRITE_PIXEL(_x, _y, p) PUT_VALUE(_x, _y, p) - -#define READ_RGBA( rgba, _x, _y ) \ - do { \ - GLubyte p = GET_VALUE(_x, _y); \ - rgba[0] = 0; \ - rgba[1] = 0; \ - rgba[2] = 0; \ - rgba[3] = p; \ - } while (0) - -#else -#error SPANTMP_PIXEL_FMT must be set to a valid value! -#endif - - - -/** - ** Assembly routines. - **/ - -#if defined( USE_MMX_ASM ) || defined( USE_SSE_ASM ) -#include "x86/read_rgba_span_x86.h" -#include "x86/common_x86_asm.h" -#endif - -static void TAG(WriteRGBASpan)( struct gl_context *ctx, - struct gl_renderbuffer *rb, - GLuint n, GLint x, GLint y, - const void *values, const GLubyte mask[] ) -{ - (void) ctx; - - HW_WRITE_LOCK() - { - const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values; - GLint x1; - GLint n1; - LOCAL_VARS; - - y = Y_FLIP(y); - - HW_WRITE_CLIPLOOP() - { - GLint i = 0; - CLIPSPAN(x,y,n,x1,n1,i); - - if (DBG) fprintf(stderr, "WriteRGBASpan %d..%d (x1 %d)\n", - (int)i, (int)n1, (int)x1); - - if (mask) - { - for (;n1>0;i++,x1++,n1--) - if (mask[i]) - WRITE_RGBA( x1, y, - rgba[i][0], rgba[i][1], - rgba[i][2], rgba[i][3] ); - } - else - { - for (;n1>0;i++,x1++,n1--) - WRITE_RGBA( x1, y, - rgba[i][0], rgba[i][1], - rgba[i][2], rgba[i][3] ); - } - } - HW_ENDCLIPLOOP(); - } - HW_WRITE_UNLOCK(); -} - - -static void TAG(WriteRGBAPixels)( struct gl_context *ctx, - struct gl_renderbuffer *rb, - GLuint n, const GLint x[], const GLint y[], - const void *values, const GLubyte mask[] ) -{ - (void) ctx; - - HW_WRITE_LOCK() - { - const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values; - GLint i; - LOCAL_VARS; - - if (DBG) fprintf(stderr, "WriteRGBAPixels\n"); - - HW_WRITE_CLIPLOOP() - { - if (mask) - { - for (i=0;i<n;i++) - { - if (mask[i]) { - const int fy = Y_FLIP(y[i]); - if (CLIPPIXEL(x[i],fy)) - WRITE_RGBA( x[i], fy, - rgba[i][0], rgba[i][1], - rgba[i][2], rgba[i][3] ); - } - } - } - else - { - for (i=0;i<n;i++) - { - const int fy = Y_FLIP(y[i]); - if (CLIPPIXEL(x[i],fy)) - WRITE_RGBA( x[i], fy, - rgba[i][0], rgba[i][1], - rgba[i][2], rgba[i][3] ); - } - } - } - HW_ENDCLIPLOOP(); - } - HW_WRITE_UNLOCK(); -} - - -static void TAG(ReadRGBASpan)( struct gl_context *ctx, - struct gl_renderbuffer *rb, - GLuint n, GLint x, GLint y, void *values) -{ - (void) ctx; - - HW_READ_LOCK() - { - GLubyte (*rgba)[4] = (GLubyte (*)[4]) values; - GLint x1,n1; - LOCAL_VARS; - - y = Y_FLIP(y); - - if (DBG) fprintf(stderr, "ReadRGBASpan\n"); - - HW_READ_CLIPLOOP() - { - GLint i = 0; - CLIPSPAN(x,y,n,x1,n1,i); - for (;n1>0;i++,x1++,n1--) - READ_RGBA( rgba[i], x1, y ); - } - HW_ENDCLIPLOOP(); - } - HW_READ_UNLOCK(); -} - - -#if defined(GET_PTR) && \ - defined(USE_MMX_ASM) && \ - (((SPANTMP_PIXEL_FMT == GL_BGRA) && \ - (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_INT_8_8_8_8_REV)) || \ - ((SPANTMP_PIXEL_FMT == GL_RGB) && \ - (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_SHORT_5_6_5))) -static void TAG2(ReadRGBASpan,_MMX)( struct gl_context *ctx, - struct gl_renderbuffer *rb, - GLuint n, GLint x, GLint y, void *values) -{ -#ifndef USE_INNER_EMMS - /* The EMMS instruction is directly in-lined here because using GCC's - * built-in _mm_empty function was found to utterly destroy performance. - */ - __asm__ __volatile__( "emms" ); -#endif - - (void) ctx; - - HW_READ_LOCK() - { - GLubyte (*rgba)[4] = (GLubyte (*)[4]) values; - GLint x1,n1; - LOCAL_VARS; - - y = Y_FLIP(y); - - if (DBG) fprintf(stderr, "ReadRGBASpan\n"); - - HW_READ_CLIPLOOP() - { - GLint i = 0; - CLIPSPAN(x,y,n,x1,n1,i); - - { - const void * src = GET_PTR( x1, y ); -#if (SPANTMP_PIXEL_FMT == GL_RGB) && \ - (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_SHORT_5_6_5) - _generic_read_RGBA_span_RGB565_MMX( src, rgba[i], n1 ); -#else - _generic_read_RGBA_span_BGRA8888_REV_MMX( src, rgba[i], n1 ); -#endif - } - } - HW_ENDCLIPLOOP(); - } - HW_READ_UNLOCK(); -#ifndef USE_INNER_EMMS - __asm__ __volatile__( "emms" ); -#endif -} -#endif - - -#if defined(GET_PTR) && \ - defined(USE_SSE_ASM) && \ - (SPANTMP_PIXEL_FMT == GL_BGRA) && \ - (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_INT_8_8_8_8_REV) -static void TAG2(ReadRGBASpan,_SSE2)( struct gl_context *ctx, - struct gl_renderbuffer *rb, - GLuint n, GLint x, GLint y, - void *values) -{ - (void) ctx; - - HW_READ_LOCK() - { - GLubyte (*rgba)[4] = (GLubyte (*)[4]) values; - GLint x1,n1; - LOCAL_VARS; - - y = Y_FLIP(y); - - if (DBG) fprintf(stderr, "ReadRGBASpan\n"); - - HW_READ_CLIPLOOP() - { - GLint i = 0; - CLIPSPAN(x,y,n,x1,n1,i); - - { - const void * src = GET_PTR( x1, y ); - _generic_read_RGBA_span_BGRA8888_REV_SSE2( src, rgba[i], n1 ); - } - } - HW_ENDCLIPLOOP(); - } - HW_READ_UNLOCK(); -} -#endif - -#if defined(GET_PTR) && \ - defined(USE_SSE_ASM) && \ - (SPANTMP_PIXEL_FMT == GL_BGRA) && \ - (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_INT_8_8_8_8_REV) -static void TAG2(ReadRGBASpan,_SSE)( struct gl_context *ctx, - struct gl_renderbuffer *rb, - GLuint n, GLint x, GLint y, - void *values) -{ -#ifndef USE_INNER_EMMS - /* The EMMS instruction is directly in-lined here because using GCC's - * built-in _mm_empty function was found to utterly destroy performance. - */ - __asm__ __volatile__( "emms" ); -#endif - - (void) ctx; - - HW_READ_LOCK() - { - GLubyte (*rgba)[4] = (GLubyte (*)[4]) values; - GLint x1,n1; - LOCAL_VARS; - - y = Y_FLIP(y); - - if (DBG) fprintf(stderr, "ReadRGBASpan\n"); - - HW_READ_CLIPLOOP() - { - GLint i = 0; - CLIPSPAN(x,y,n,x1,n1,i); - - { - const void * src = GET_PTR( x1, y ); - _generic_read_RGBA_span_BGRA8888_REV_SSE( src, rgba[i], n1 ); - } - } - HW_ENDCLIPLOOP(); - } - HW_READ_UNLOCK(); -#ifndef USE_INNER_EMMS - __asm__ __volatile__( "emms" ); -#endif -} -#endif - - -static void TAG(ReadRGBAPixels)( struct gl_context *ctx, - struct gl_renderbuffer *rb, - GLuint n, const GLint x[], const GLint y[], - void *values ) -{ - (void) ctx; - - HW_READ_LOCK() - { - GLubyte (*rgba)[4] = (GLubyte (*)[4]) values; - GLint i; - LOCAL_VARS; - - if (DBG) fprintf(stderr, "ReadRGBAPixels\n"); - - HW_READ_CLIPLOOP() - { - for (i=0;i<n;i++) { - int fy = Y_FLIP( y[i] ); - if (CLIPPIXEL( x[i], fy )) - READ_RGBA( rgba[i], x[i], fy ); - } - } - HW_ENDCLIPLOOP(); - } - HW_READ_UNLOCK(); -} - -static void TAG(InitPointers)(struct gl_renderbuffer *rb) -{ - rb->PutRow = TAG(WriteRGBASpan); - rb->PutValues = TAG(WriteRGBAPixels); - rb->GetValues = TAG(ReadRGBAPixels); - -#if defined(GET_PTR) -#if defined(USE_SSE_ASM) && \ - (SPANTMP_PIXEL_FMT == GL_BGRA) && \ - (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_INT_8_8_8_8_REV) - if ( cpu_has_xmm2 ) { - if (DBG) fprintf( stderr, "Using %s version of GetRow\n", "SSE2" ); - rb->GetRow = TAG2(ReadRGBASpan, _SSE2); - } - else -#endif -#if defined(USE_SSE_ASM) && \ - (SPANTMP_PIXEL_FMT == GL_BGRA) && \ - (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_INT_8_8_8_8_REV) - if ( cpu_has_xmm ) { - if (DBG) fprintf( stderr, "Using %s version of GetRow\n", "SSE" ); - rb->GetRow = TAG2(ReadRGBASpan, _SSE); - } - else -#endif -#if defined(USE_MMX_ASM) && \ - (((SPANTMP_PIXEL_FMT == GL_BGRA) && \ - (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_INT_8_8_8_8_REV)) || \ - ((SPANTMP_PIXEL_FMT == GL_RGB) && \ - (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_SHORT_5_6_5))) - if ( cpu_has_mmx ) { - if (DBG) fprintf( stderr, "Using %s version of GetRow\n", "MMX" ); - rb->GetRow = TAG2(ReadRGBASpan, _MMX); - } - else -#endif -#endif /* GET_PTR */ - { - if (DBG) fprintf( stderr, "Using %s version of GetRow\n", "C" ); - rb->GetRow = TAG(ReadRGBASpan); - } - -} - - -#undef WRITE_PIXEL -#undef WRITE_RGBA -#undef READ_RGBA -#undef TAG -#undef TAG2 -#undef GET_VALUE -#undef PUT_VALUE -#undef GET_PTR -#undef SPANTMP_PIXEL_FMT -#undef SPANTMP_PIXEL_TYPE diff --git a/mesalib/src/mesa/drivers/dri/common/spantmp_common.h b/mesalib/src/mesa/drivers/dri/common/spantmp_common.h deleted file mode 100644 index 8916e7b0c..000000000 --- a/mesalib/src/mesa/drivers/dri/common/spantmp_common.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright 2000-2001 VA Linux Systems, Inc. - * (C) Copyright IBM Corporation 2004 - * 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 - * on the rights to use, copy, modify, merge, publish, distribute, sub - * license, 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 (including the next - * paragraph) 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 NON-INFRINGEMENT. IN NO EVENT SHALL - * VA LINUX SYSTEM, IBM AND/OR THEIR SUPPLIERS 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 spantmp_common.h - * - * common macros for span read / write functions to be used in the depth, - * stencil and pixel span templates. - */ - -#ifndef HW_WRITE_LOCK -#define HW_WRITE_LOCK() HW_LOCK() -#endif - -#ifndef HW_WRITE_UNLOCK -#define HW_WRITE_UNLOCK() HW_UNLOCK() -#endif - -#ifndef HW_READ_LOCK -#define HW_READ_LOCK() HW_LOCK() -#endif - -#ifndef HW_READ_UNLOCK -#define HW_READ_UNLOCK() HW_UNLOCK() -#endif - -#ifndef HW_CLIPLOOP -#define HW_CLIPLOOP() \ - do { \ - int minx = 0; \ - int miny = 0; \ - int maxx = dPriv->w; \ - int maxy = dPriv->h; -#endif - -#ifndef HW_ENDCLIPLOOP -#define HW_ENDCLIPLOOP() \ - } while (0) -#endif - -#ifndef CLIPPIXEL -#define CLIPPIXEL( _x, _y ) \ - ((_x >= minx) && (_x < maxx) && (_y >= miny) && (_y < maxy)) -#endif - -#ifndef CLIPSPAN -#define CLIPSPAN( _x, _y, _n, _x1, _n1, _i ) \ - if ( _y < miny || _y >= maxy /*|| _x + n < minx || _x >=maxx*/ ) { \ - _n1 = 0, _x1 = x; \ - } else { \ - _n1 = _n; \ - _x1 = _x; \ - if ( _x1 < minx ) _i += (minx-_x1), n1 -= (minx-_x1), _x1 = minx; \ - if ( _x1 + _n1 >= maxx ) n1 -= (_x1 + n1 - maxx); \ - } -#endif diff --git a/mesalib/src/mesa/drivers/dri/common/stenciltmp.h b/mesalib/src/mesa/drivers/dri/common/stenciltmp.h deleted file mode 100644 index 950d3c4df..000000000 --- a/mesalib/src/mesa/drivers/dri/common/stenciltmp.h +++ /dev/null @@ -1,186 +0,0 @@ - -#include "spantmp_common.h" - -#ifndef DBG -#define DBG 0 -#endif - -#ifndef HAVE_HW_STENCIL_SPANS -#define HAVE_HW_STENCIL_SPANS 0 -#endif - -#ifndef HAVE_HW_STENCIL_PIXELS -#define HAVE_HW_STENCIL_PIXELS 0 -#endif - -static void TAG(WriteStencilSpan)( struct gl_context *ctx, - struct gl_renderbuffer *rb, - GLuint n, GLint x, GLint y, - const void *values, const GLubyte mask[] ) -{ - HW_WRITE_LOCK() - { - const GLubyte *stencil = (const GLubyte *) values; - GLint x1; - GLint n1; - LOCAL_STENCIL_VARS; - - y = Y_FLIP(y); - -#if HAVE_HW_STENCIL_SPANS - (void) x1; (void) n1; - - if (DBG) fprintf(stderr, "WriteStencilSpan 0..%d (x1 %d)\n", - (int)n1, (int)x1); - - WRITE_STENCIL_SPAN(); -#else /* HAVE_HW_STENCIL_SPANS */ - HW_CLIPLOOP() - { - GLint i = 0; - CLIPSPAN(x,y,n,x1,n1,i); - - if (DBG) fprintf(stderr, "WriteStencilSpan %d..%d (x1 %d)\n", - (int)i, (int)n1, (int)x1); - - if (mask) - { - for (;n1>0;i++,x1++,n1--) - if (mask[i]) - WRITE_STENCIL( x1, y, stencil[i] ); - } - else - { - for (;n1>0;i++,x1++,n1--) - WRITE_STENCIL( x1, y, stencil[i] ); - } - } - HW_ENDCLIPLOOP(); -#endif /* !HAVE_HW_STENCIL_SPANS */ - } - HW_WRITE_UNLOCK(); -} - - -static void TAG(WriteStencilPixels)( struct gl_context *ctx, - struct gl_renderbuffer *rb, - GLuint n, - const GLint x[], const GLint y[], - const void *values, const GLubyte mask[] ) -{ - HW_WRITE_LOCK() - { - const GLubyte *stencil = (const GLubyte *) values; - GLuint i; - LOCAL_STENCIL_VARS; - - if (DBG) fprintf(stderr, "WriteStencilPixels\n"); - -#if HAVE_HW_STENCIL_PIXELS - (void) i; - - WRITE_STENCIL_PIXELS(); -#else /* HAVE_HW_STENCIL_PIXELS */ - HW_CLIPLOOP() - { - for (i=0;i<n;i++) - { - if (mask[i]) { - const int fy = Y_FLIP(y[i]); - if (CLIPPIXEL(x[i],fy)) - WRITE_STENCIL( x[i], fy, stencil[i] ); - } - } - } - HW_ENDCLIPLOOP(); -#endif /* !HAVE_HW_STENCIL_PIXELS */ - } - HW_WRITE_UNLOCK(); -} - - -/* Read stencil spans and pixels - */ -static void TAG(ReadStencilSpan)( struct gl_context *ctx, - struct gl_renderbuffer *rb, - GLuint n, GLint x, GLint y, - void *values) -{ - HW_READ_LOCK() - { - GLubyte *stencil = (GLubyte *) values; - GLint x1,n1; - LOCAL_STENCIL_VARS; - - y = Y_FLIP(y); - - if (DBG) fprintf(stderr, "ReadStencilSpan\n"); - -#if HAVE_HW_STENCIL_SPANS - (void) x1; (void) n1; - - READ_STENCIL_SPAN(); -#else /* HAVE_HW_STENCIL_SPANS */ - HW_CLIPLOOP() - { - GLint i = 0; - CLIPSPAN(x,y,n,x1,n1,i); - for (;n1>0;i++,n1--) - READ_STENCIL( stencil[i], (x+i), y ); - } - HW_ENDCLIPLOOP(); -#endif /* !HAVE_HW_STENCIL_SPANS */ - } - HW_READ_UNLOCK(); -} - -static void TAG(ReadStencilPixels)( struct gl_context *ctx, - struct gl_renderbuffer *rb, - GLuint n, const GLint x[], const GLint y[], - void *values ) -{ - HW_READ_LOCK() - { - GLubyte *stencil = (GLubyte *) values; - GLuint i; - LOCAL_STENCIL_VARS; - - if (DBG) fprintf(stderr, "ReadStencilPixels\n"); - -#if HAVE_HW_STENCIL_PIXELS - (void) i; - - READ_STENCIL_PIXELS(); -#else /* HAVE_HW_STENCIL_PIXELS */ - HW_CLIPLOOP() - { - for (i=0;i<n;i++) { - int fy = Y_FLIP( y[i] ); - if (CLIPPIXEL( x[i], fy )) - READ_STENCIL( stencil[i], x[i], fy ); - } - } - HW_ENDCLIPLOOP(); -#endif /* !HAVE_HW_STENCIL_PIXELS */ - } - HW_READ_UNLOCK(); -} - - - -/** - * Initialize the given renderbuffer's span routines to point to - * the stencil functions we generated above. - */ -static void TAG(InitStencilPointers)(struct gl_renderbuffer *rb) -{ - rb->GetRow = TAG(ReadStencilSpan); - rb->GetValues = TAG(ReadStencilPixels); - rb->PutRow = TAG(WriteStencilSpan); - rb->PutValues = TAG(WriteStencilPixels); -} - - -#undef WRITE_STENCIL -#undef READ_STENCIL -#undef TAG diff --git a/mesalib/src/mesa/drivers/dri/swrast/Makefile.sources b/mesalib/src/mesa/drivers/dri/swrast/Makefile.sources index 9de5cb823..7630dba4b 100644 --- a/mesalib/src/mesa/drivers/dri/swrast/Makefile.sources +++ b/mesalib/src/mesa/drivers/dri/swrast/Makefile.sources @@ -1,6 +1,5 @@ SWRAST_DRIVER_FILES = \ - swrast.c \ - swrast_span.c + swrast.c SWRAST_COMMON_FILES = \ ../common/utils.c \ diff --git a/mesalib/src/mesa/drivers/dri/swrast/swrast.c b/mesalib/src/mesa/drivers/dri/swrast/swrast.c index f8d749453..ff26e2769 100644 --- a/mesalib/src/mesa/drivers/dri/swrast/swrast.c +++ b/mesalib/src/mesa/drivers/dri/swrast/swrast.c @@ -99,7 +99,7 @@ static void swrastSetTexBuffer2(__DRIcontext *pDRICtx, GLint target, _mesa_init_teximage_fields(&dri_ctx->Base, texImage, w, h, 1, 0, internalFormat, texFormat); - sPriv->swrast_loader->getImage(dPriv, x, y, w, h, (char *)swImage->Data, + sPriv->swrast_loader->getImage(dPriv, x, y, w, h, (char *)swImage->Buffer, dPriv->loaderPrivate); _mesa_unlock_texture(&dri_ctx->Base, texObj); @@ -268,10 +268,12 @@ choose_pixel_format(const struct gl_config *v) static void swrast_delete_renderbuffer(struct gl_renderbuffer *rb) { + struct dri_swrast_renderbuffer *xrb = dri_swrast_renderbuffer(rb); + TRACE; - free(rb->Data); - free(rb); + free(xrb->Base.Buffer); + free(xrb); } /* see bytes_per_line in libGL */ @@ -287,17 +289,16 @@ static GLboolean swrast_alloc_front_storage(struct gl_context *ctx, struct gl_renderbuffer *rb, GLenum internalFormat, GLuint width, GLuint height) { - struct swrast_renderbuffer *xrb = swrast_renderbuffer(rb); + struct dri_swrast_renderbuffer *xrb = dri_swrast_renderbuffer(rb); TRACE; (void) ctx; (void) internalFormat; - rb->Data = NULL; + xrb->Base.Buffer = NULL; rb->Width = width; rb->Height = height; - rb->RowStride = width; xrb->pitch = bytes_per_line(width * xrb->bpp, 32); return GL_TRUE; @@ -307,24 +308,25 @@ static GLboolean swrast_alloc_back_storage(struct gl_context *ctx, struct gl_renderbuffer *rb, GLenum internalFormat, GLuint width, GLuint height) { - struct swrast_renderbuffer *xrb = swrast_renderbuffer(rb); + struct dri_swrast_renderbuffer *xrb = dri_swrast_renderbuffer(rb); TRACE; - free(rb->Data); + free(xrb->Base.Buffer); swrast_alloc_front_storage(ctx, rb, internalFormat, width, height); - rb->Data = malloc(height * xrb->pitch); + xrb->Base.Buffer = malloc(height * xrb->pitch); return GL_TRUE; } -static struct swrast_renderbuffer * +static struct dri_swrast_renderbuffer * swrast_new_renderbuffer(const struct gl_config *visual, __DRIdrawable *dPriv, GLboolean front) { - struct swrast_renderbuffer *xrb = calloc(1, sizeof *xrb); + struct dri_swrast_renderbuffer *xrb = calloc(1, sizeof *xrb); + struct gl_renderbuffer *rb; GLuint pixel_format; TRACE; @@ -332,48 +334,44 @@ swrast_new_renderbuffer(const struct gl_config *visual, __DRIdrawable *dPriv, if (!xrb) return NULL; - _mesa_init_renderbuffer(&xrb->Base, 0); + rb = &xrb->Base.Base; + + _mesa_init_renderbuffer(rb, 0); pixel_format = choose_pixel_format(visual); xrb->dPriv = dPriv; - xrb->Base.Delete = swrast_delete_renderbuffer; + xrb->Base.Base.Delete = swrast_delete_renderbuffer; if (front) { - xrb->Base.AllocStorage = swrast_alloc_front_storage; - swrast_set_span_funcs_front(xrb, pixel_format); + rb->AllocStorage = swrast_alloc_front_storage; } else { - xrb->Base.AllocStorage = swrast_alloc_back_storage; - swrast_set_span_funcs_back(xrb, pixel_format); + rb->AllocStorage = swrast_alloc_back_storage; } switch (pixel_format) { case PF_A8R8G8B8: - xrb->Base.Format = MESA_FORMAT_ARGB8888; - xrb->Base.InternalFormat = GL_RGBA; - xrb->Base._BaseFormat = GL_RGBA; - xrb->Base.DataType = GL_UNSIGNED_BYTE; + rb->Format = MESA_FORMAT_ARGB8888; + rb->InternalFormat = GL_RGBA; + rb->_BaseFormat = GL_RGBA; xrb->bpp = 32; break; case PF_X8R8G8B8: - xrb->Base.Format = MESA_FORMAT_ARGB8888; /* XXX */ - xrb->Base.InternalFormat = GL_RGB; - xrb->Base._BaseFormat = GL_RGB; - xrb->Base.DataType = GL_UNSIGNED_BYTE; + rb->Format = MESA_FORMAT_ARGB8888; /* XXX */ + rb->InternalFormat = GL_RGB; + rb->_BaseFormat = GL_RGB; xrb->bpp = 32; break; case PF_R5G6B5: - xrb->Base.Format = MESA_FORMAT_RGB565; - xrb->Base.InternalFormat = GL_RGB; - xrb->Base._BaseFormat = GL_RGB; - xrb->Base.DataType = GL_UNSIGNED_BYTE; + rb->Format = MESA_FORMAT_RGB565; + rb->InternalFormat = GL_RGB; + rb->_BaseFormat = GL_RGB; xrb->bpp = 16; break; case PF_R3G3B2: - xrb->Base.Format = MESA_FORMAT_RGB332; - xrb->Base.InternalFormat = GL_RGB; - xrb->Base._BaseFormat = GL_RGB; - xrb->Base.DataType = GL_UNSIGNED_BYTE; + rb->Format = MESA_FORMAT_RGB332; + rb->InternalFormat = GL_RGB; + rb->_BaseFormat = GL_RGB; xrb->bpp = 8; break; default: @@ -391,10 +389,10 @@ swrast_map_renderbuffer(struct gl_context *ctx, GLubyte **out_map, GLint *out_stride) { - struct swrast_renderbuffer *xrb = swrast_renderbuffer(rb); - GLubyte *map = rb->Data; + struct dri_swrast_renderbuffer *xrb = dri_swrast_renderbuffer(rb); + GLubyte *map = xrb->Base.Buffer; int cpp = _mesa_get_format_bytes(rb->Format); - int stride = rb->RowStride * cpp; + int stride = rb->Width * cpp; if (rb->AllocStorage == swrast_alloc_front_storage) { __DRIdrawable *dPriv = xrb->dPriv; @@ -407,18 +405,18 @@ swrast_map_renderbuffer(struct gl_context *ctx, xrb->map_h = h; stride = w * cpp; - rb->Data = malloc(h * stride); + xrb->Base.Buffer = malloc(h * stride); sPriv->swrast_loader->getImage(dPriv, x, y, w, h, - (char *)rb->Data, + (char *) xrb->Base.Buffer, dPriv->loaderPrivate); - *out_map = rb->Data; + *out_map = xrb->Base.Buffer; *out_stride = stride; return; } - ASSERT(rb->Data); + ASSERT(xrb->Base.Buffer); if (rb->AllocStorage == swrast_alloc_back_storage) { map += (rb->Height - 1) * stride; @@ -436,7 +434,7 @@ static void swrast_unmap_renderbuffer(struct gl_context *ctx, struct gl_renderbuffer *rb) { - struct swrast_renderbuffer *xrb = swrast_renderbuffer(rb); + struct dri_swrast_renderbuffer *xrb = dri_swrast_renderbuffer(rb); if (rb->AllocStorage == swrast_alloc_front_storage) { __DRIdrawable *dPriv = xrb->dPriv; @@ -446,12 +444,12 @@ swrast_unmap_renderbuffer(struct gl_context *ctx, sPriv->swrast_loader->putImage(dPriv, __DRI_SWRAST_IMAGE_OP_DRAW, xrb->map_x, xrb->map_y, xrb->map_w, xrb->map_h, - rb->Data, + (char *) xrb->Base.Buffer, dPriv->loaderPrivate); } - free(rb->Data); - rb->Data = NULL; + free(xrb->Base.Buffer); + xrb->Base.Buffer = NULL; } } @@ -462,7 +460,7 @@ dri_create_buffer(__DRIscreen * sPriv, { struct dri_drawable *drawable = NULL; struct gl_framebuffer *fb; - struct swrast_renderbuffer *frontrb, *backrb; + struct dri_swrast_renderbuffer *frontrb, *backrb; TRACE; @@ -487,12 +485,12 @@ dri_create_buffer(__DRIscreen * sPriv, /* add front renderbuffer */ frontrb = swrast_new_renderbuffer(visual, dPriv, GL_TRUE); - _mesa_add_renderbuffer(fb, BUFFER_FRONT_LEFT, &frontrb->Base); + _mesa_add_renderbuffer(fb, BUFFER_FRONT_LEFT, &frontrb->Base.Base); /* add back renderbuffer */ if (visual->doubleBufferMode) { backrb = swrast_new_renderbuffer(visual, dPriv, GL_FALSE); - _mesa_add_renderbuffer(fb, BUFFER_BACK_LEFT, &backrb->Base); + _mesa_add_renderbuffer(fb, BUFFER_BACK_LEFT, &backrb->Base.Base); } /* add software renderbuffers */ @@ -543,16 +541,16 @@ dri_swap_buffers(__DRIdrawable * dPriv) struct dri_drawable *drawable = dri_drawable(dPriv); struct gl_framebuffer *fb; - struct swrast_renderbuffer *frontrb, *backrb; + struct dri_swrast_renderbuffer *frontrb, *backrb; TRACE; fb = &drawable->Base; frontrb = - swrast_renderbuffer(fb->Attachment[BUFFER_FRONT_LEFT].Renderbuffer); + dri_swrast_renderbuffer(fb->Attachment[BUFFER_FRONT_LEFT].Renderbuffer); backrb = - swrast_renderbuffer(fb->Attachment[BUFFER_BACK_LEFT].Renderbuffer); + dri_swrast_renderbuffer(fb->Attachment[BUFFER_BACK_LEFT].Renderbuffer); /* check for signle-buffered */ if (backrb == NULL) @@ -566,9 +564,9 @@ dri_swap_buffers(__DRIdrawable * dPriv) sPriv->swrast_loader->putImage(dPriv, __DRI_SWRAST_IMAGE_OP_SWAP, 0, 0, - frontrb->Base.Width, - frontrb->Base.Height, - backrb->Base.Data, + frontrb->Base.Base.Width, + frontrb->Base.Base.Height, + (char *) backrb->Base.Buffer, dPriv->loaderPrivate); } diff --git a/mesalib/src/mesa/drivers/dri/swrast/swrast_priv.h b/mesalib/src/mesa/drivers/dri/swrast/swrast_priv.h index d08d42a81..36ab02053 100644 --- a/mesalib/src/mesa/drivers/dri/swrast/swrast_priv.h +++ b/mesalib/src/mesa/drivers/dri/swrast/swrast_priv.h @@ -31,6 +31,7 @@ #include <GL/internal/dri_interface.h> #include "main/mtypes.h" #include "dri_util.h" +#include "swrast/s_context.h" #ifdef _MSC_VER #ifdef PUBLIC @@ -107,8 +108,8 @@ swrast_drawable(struct gl_framebuffer *fb) return (struct dri_drawable *) fb; } -struct swrast_renderbuffer { - struct gl_renderbuffer Base; +struct dri_swrast_renderbuffer { + struct swrast_renderbuffer Base; __DRIdrawable *dPriv; /* GL_MAP_*_BIT, used for mapping of front buffer. */ @@ -121,10 +122,10 @@ struct swrast_renderbuffer { GLuint bpp; }; -static INLINE struct swrast_renderbuffer * -swrast_renderbuffer(struct gl_renderbuffer *rb) +static INLINE struct dri_swrast_renderbuffer * +dri_swrast_renderbuffer(struct gl_renderbuffer *rb) { - return (struct swrast_renderbuffer *) rb; + return (struct dri_swrast_renderbuffer *) rb; } @@ -137,14 +138,4 @@ swrast_renderbuffer(struct gl_renderbuffer *rb) #define PF_X8R8G8B8 4 /**< 32bpp TrueColor: 8-R, 8-G, 8-B bits */ -/* swrast_span.c */ - -extern void -swrast_set_span_funcs_back(struct swrast_renderbuffer *xrb, - GLuint pixel_format); - -extern void -swrast_set_span_funcs_front(struct swrast_renderbuffer *xrb, - GLuint pixel_format); - #endif /* _SWRAST_PRIV_H_ */ diff --git a/mesalib/src/mesa/drivers/dri/swrast/swrast_span.c b/mesalib/src/mesa/drivers/dri/swrast/swrast_span.c deleted file mode 100644 index ba6174f9d..000000000 --- a/mesalib/src/mesa/drivers/dri/swrast/swrast_span.c +++ /dev/null @@ -1,347 +0,0 @@ -/* - * Mesa 3-D graphics library - * Version: 7.1 - * - * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. - * Copyright 2008, 2010 George Sapountzis <gsapountzis@gmail.com> - * - * 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. - */ - -#include "swrast_priv.h" - -#define YFLIP(_xrb, Y) ((_xrb)->Base.Height - (Y) - 1) - -/* - * Dithering support takes the "computation" extreme in the "computation vs. - * storage" trade-off. This approach is very simple to implement and any - * computational overhead should be acceptable. XMesa uses table lookups for - * around 8KB of storage overhead per visual. - */ -#define DITHER 1 - -static const GLubyte kernel[16] = { - 0*16, 8*16, 2*16, 10*16, - 12*16, 4*16, 14*16, 6*16, - 3*16, 11*16, 1*16, 9*16, - 15*16, 7*16, 13*16, 5*16, -}; - -#if DITHER -#define DITHER_COMP(X, Y) kernel[((X) & 0x3) | (((Y) & 0x3) << 2)] - -#define DITHER_CLAMP(X) (((X) < 255) ? (X) : 255) -#else -#define DITHER_COMP(X, Y) 0 - -#define DITHER_CLAMP(X) (X) -#endif - - -/* - * Pixel macros shared across front/back buffer span functions. - */ - -/* 32-bit BGRA */ -#define STORE_PIXEL_A8R8G8B8(DST, X, Y, VALUE) \ - *DST = VALUE[ACOMP] << 24 | VALUE[RCOMP] << 16 | VALUE[GCOMP] << 8 | VALUE[BCOMP] -#define STORE_PIXEL_RGB_A8R8G8B8(DST, X, Y, VALUE) \ - *DST = 0xff << 24 | VALUE[RCOMP] << 16 | VALUE[GCOMP] << 8 | VALUE[BCOMP] -#define FETCH_PIXEL_A8R8G8B8(DST, SRC) \ - DST[ACOMP] = *SRC >> 24; \ - DST[RCOMP] = (*SRC >> 16) & 0xff; \ - DST[GCOMP] = (*SRC >> 8) & 0xff; \ - DST[BCOMP] = *SRC & 0xff - - -/* 32-bit BGRX */ -#define STORE_PIXEL_X8R8G8B8(DST, X, Y, VALUE) \ - *DST = 0xff << 24 | VALUE[RCOMP] << 16 | VALUE[GCOMP] << 8 | VALUE[BCOMP] -#define STORE_PIXEL_RGB_X8R8G8B8(DST, X, Y, VALUE) \ - *DST = 0xff << 24 | VALUE[RCOMP] << 16 | VALUE[GCOMP] << 8 | VALUE[BCOMP] -#define FETCH_PIXEL_X8R8G8B8(DST, SRC) \ - DST[ACOMP] = 0xff; \ - DST[RCOMP] = (*SRC >> 16) & 0xff; \ - DST[GCOMP] = (*SRC >> 8) & 0xff; \ - DST[BCOMP] = *SRC & 0xff - - -/* 16-bit BGR */ -#define STORE_PIXEL_R5G6B5(DST, X, Y, VALUE) \ - do { \ - int d = DITHER_COMP(X, Y) >> 6; \ - *DST = ( ((DITHER_CLAMP((VALUE[RCOMP]) + d) & 0xf8) << 8) | \ - ((DITHER_CLAMP((VALUE[GCOMP]) + d) & 0xfc) << 3) | \ - ((DITHER_CLAMP((VALUE[BCOMP]) + d) & 0xf8) >> 3) ); \ - } while(0) -#define FETCH_PIXEL_R5G6B5(DST, SRC) \ - do { \ - DST[ACOMP] = 0xff; \ - DST[RCOMP] = ((*SRC >> 8) & 0xf8) * 255 / 0xf8; \ - DST[GCOMP] = ((*SRC >> 3) & 0xfc) * 255 / 0xfc; \ - DST[BCOMP] = ((*SRC << 3) & 0xf8) * 255 / 0xf8; \ - } while(0) - - -/* 8-bit BGR */ -#define STORE_PIXEL_R3G3B2(DST, X, Y, VALUE) \ - do { \ - int d = DITHER_COMP(X, Y) >> 3; \ - GLubyte *p = (GLubyte *)DST; \ - *p = ( ((DITHER_CLAMP((VALUE[RCOMP]) + d) & 0xe0) >> 5) | \ - ((DITHER_CLAMP((VALUE[GCOMP]) + d) & 0xe0) >> 2) | \ - ((DITHER_CLAMP((VALUE[BCOMP]) + d) & 0xc0) >> 0) ); \ - } while(0) -#define FETCH_PIXEL_R3G3B2(DST, SRC) \ - do { \ - GLubyte p = *(GLubyte *)SRC; \ - DST[ACOMP] = 0xff; \ - DST[RCOMP] = ((p << 5) & 0xe0) * 255 / 0xe0; \ - DST[GCOMP] = ((p << 2) & 0xe0) * 255 / 0xe0; \ - DST[BCOMP] = ((p << 0) & 0xc0) * 255 / 0xc0; \ - } while(0) - - -/* - * Generate code for back-buffer span functions. - */ - -/* 32-bit BGRA */ -#define NAME(FUNC) FUNC##_A8R8G8B8 -#define RB_TYPE GLubyte -#define SPAN_VARS \ - struct swrast_renderbuffer *xrb = swrast_renderbuffer(rb); -#define INIT_PIXEL_PTR(P, X, Y) \ - GLuint *P = (GLuint *)xrb->Base.Data + YFLIP(xrb, Y) * xrb->pitch / 4 + (X) -#define INC_PIXEL_PTR(P) P++ -#define STORE_PIXEL(DST, X, Y, VALUE) \ - STORE_PIXEL_A8R8G8B8(DST, X, Y, VALUE) -#define STORE_PIXEL_RGB(DST, X, Y, VALUE) \ - STORE_PIXEL_RGB_A8R8G8B8(DST, X, Y, VALUE) -#define FETCH_PIXEL(DST, SRC) \ - FETCH_PIXEL_A8R8G8B8(DST, SRC) - -#include "swrast/s_spantemp.h" - - -/* 32-bit BGRX */ -#define NAME(FUNC) FUNC##_X8R8G8B8 -#define RB_TYPE GLubyte -#define SPAN_VARS \ - struct swrast_renderbuffer *xrb = swrast_renderbuffer(rb); -#define INIT_PIXEL_PTR(P, X, Y) \ - GLuint *P = (GLuint *)xrb->Base.Data + YFLIP(xrb, Y) * xrb->pitch / 4 + (X); -#define INC_PIXEL_PTR(P) P++ -#define STORE_PIXEL(DST, X, Y, VALUE) \ - STORE_PIXEL_X8R8G8B8(DST, X, Y, VALUE) -#define STORE_PIXEL_RGB(DST, X, Y, VALUE) \ - STORE_PIXEL_RGB_X8R8G8B8(DST, X, Y, VALUE) -#define FETCH_PIXEL(DST, SRC) \ - FETCH_PIXEL_X8R8G8B8(DST, SRC) - -#include "swrast/s_spantemp.h" - - -/* 16-bit BGR */ -#define NAME(FUNC) FUNC##_R5G6B5 -#define RB_TYPE GLubyte -#define SPAN_VARS \ - struct swrast_renderbuffer *xrb = swrast_renderbuffer(rb); -#define INIT_PIXEL_PTR(P, X, Y) \ - GLushort *P = (GLushort *)xrb->Base.Data + YFLIP(xrb, Y) * xrb->pitch / 2 + (X); -#define INC_PIXEL_PTR(P) P++ -#define STORE_PIXEL(DST, X, Y, VALUE) \ - STORE_PIXEL_R5G6B5(DST, X, Y, VALUE) -#define FETCH_PIXEL(DST, SRC) \ - FETCH_PIXEL_R5G6B5(DST, SRC) - -#include "swrast/s_spantemp.h" - - -/* 8-bit BGR */ -#define NAME(FUNC) FUNC##_R3G3B2 -#define RB_TYPE GLubyte -#define SPAN_VARS \ - struct swrast_renderbuffer *xrb = swrast_renderbuffer(rb); -#define INIT_PIXEL_PTR(P, X, Y) \ - GLubyte *P = (GLubyte *)xrb->Base.Data + YFLIP(xrb, Y) * xrb->pitch + (X) * 1; -#define INC_PIXEL_PTR(P) P += 1 -#define STORE_PIXEL(DST, X, Y, VALUE) \ - STORE_PIXEL_R3G3B2(DST, X, Y, VALUE) -#define FETCH_PIXEL(DST, SRC) \ - FETCH_PIXEL_R3G3B2(DST, SRC) - -#include "swrast/s_spantemp.h" - - -/* - * Generate code for front-buffer span functions. - */ - -/* 32-bit BGRA */ -#define NAME(FUNC) FUNC##_A8R8G8B8_front -#define RB_TYPE GLubyte -#define SPAN_VARS \ - struct swrast_renderbuffer *xrb = swrast_renderbuffer(rb); -#define INIT_PIXEL_PTR(P, X, Y) \ - GLuint *P = (GLuint *)row; -#define INC_PIXEL_PTR(P) P++ -#define STORE_PIXEL(DST, X, Y, VALUE) \ - STORE_PIXEL_A8R8G8B8(DST, X, Y, VALUE) -#define STORE_PIXEL_RGB(DST, X, Y, VALUE) \ - STORE_PIXEL_RGB_A8R8G8B8(DST, X, Y, VALUE) -#define FETCH_PIXEL(DST, SRC) \ - FETCH_PIXEL_A8R8G8B8(DST, SRC) - -#include "swrast_spantemp.h" - - -/* 32-bit BGRX */ -#define NAME(FUNC) FUNC##_X8R8G8B8_front -#define RB_TYPE GLubyte -#define SPAN_VARS \ - struct swrast_renderbuffer *xrb = swrast_renderbuffer(rb); -#define INIT_PIXEL_PTR(P, X, Y) \ - GLuint *P = (GLuint *)row; -#define INC_PIXEL_PTR(P) P++ -#define STORE_PIXEL(DST, X, Y, VALUE) \ - STORE_PIXEL_X8R8G8B8(DST, X, Y, VALUE) -#define STORE_PIXEL_RGB(DST, X, Y, VALUE) \ - STORE_PIXEL_RGB_X8R8G8B8(DST, X, Y, VALUE) -#define FETCH_PIXEL(DST, SRC) \ - FETCH_PIXEL_X8R8G8B8(DST, SRC) - -#include "swrast_spantemp.h" - - -/* 16-bit BGR */ -#define NAME(FUNC) FUNC##_R5G6B5_front -#define RB_TYPE GLubyte -#define SPAN_VARS \ - struct swrast_renderbuffer *xrb = swrast_renderbuffer(rb); -#define INIT_PIXEL_PTR(P, X, Y) \ - GLushort *P = (GLushort *)row; -#define INC_PIXEL_PTR(P) P++ -#define STORE_PIXEL(DST, X, Y, VALUE) \ - STORE_PIXEL_R5G6B5(DST, X, Y, VALUE) -#define FETCH_PIXEL(DST, SRC) \ - FETCH_PIXEL_R5G6B5(DST, SRC) - -#include "swrast_spantemp.h" - - -/* 8-bit BGR */ -#define NAME(FUNC) FUNC##_R3G3B2_front -#define RB_TYPE GLubyte -#define SPAN_VARS \ - struct swrast_renderbuffer *xrb = swrast_renderbuffer(rb); -#define INIT_PIXEL_PTR(P, X, Y) \ - GLubyte *P = (GLubyte *)row; -#define INC_PIXEL_PTR(P) P += 1 -#define STORE_PIXEL(DST, X, Y, VALUE) \ - STORE_PIXEL_R3G3B2(DST, X, Y, VALUE) -#define FETCH_PIXEL(DST, SRC) \ - FETCH_PIXEL_R3G3B2(DST, SRC) - -#include "swrast_spantemp.h" - - -/* - * Back-buffers are malloced memory and always private. - * - * BACK_PIXMAP (not supported) - * BACK_XIMAGE - */ -void -swrast_set_span_funcs_back(struct swrast_renderbuffer *xrb, - GLuint pixel_format) -{ - switch (pixel_format) { - case PF_A8R8G8B8: - xrb->Base.GetRow = get_row_A8R8G8B8; - xrb->Base.GetValues = get_values_A8R8G8B8; - xrb->Base.PutRow = put_row_A8R8G8B8; - xrb->Base.PutValues = put_values_A8R8G8B8; - break; - case PF_X8R8G8B8: - xrb->Base.GetRow = get_row_X8R8G8B8; - xrb->Base.GetValues = get_values_X8R8G8B8; - xrb->Base.PutRow = put_row_X8R8G8B8; - xrb->Base.PutValues = put_values_X8R8G8B8; - break; - case PF_R5G6B5: - xrb->Base.GetRow = get_row_R5G6B5; - xrb->Base.GetValues = get_values_R5G6B5; - xrb->Base.PutRow = put_row_R5G6B5; - xrb->Base.PutValues = put_values_R5G6B5; - break; - case PF_R3G3B2: - xrb->Base.GetRow = get_row_R3G3B2; - xrb->Base.GetValues = get_values_R3G3B2; - xrb->Base.PutRow = put_row_R3G3B2; - xrb->Base.PutValues = put_values_R3G3B2; - break; - default: - assert(0); - return; - } -} - - -/* - * Front-buffers are provided by the loader, the xorg loader uses pixmaps. - * - * WINDOW, An X window - * GLXWINDOW, GLX window - * PIXMAP, GLX pixmap - * PBUFFER GLX Pbuffer - */ -void -swrast_set_span_funcs_front(struct swrast_renderbuffer *xrb, - GLuint pixel_format) -{ - switch (pixel_format) { - case PF_A8R8G8B8: - xrb->Base.GetRow = get_row_A8R8G8B8_front; - xrb->Base.GetValues = get_values_A8R8G8B8_front; - xrb->Base.PutRow = put_row_A8R8G8B8_front; - xrb->Base.PutValues = put_values_A8R8G8B8_front; - break; - case PF_X8R8G8B8: - xrb->Base.GetRow = get_row_X8R8G8B8_front; - xrb->Base.GetValues = get_values_X8R8G8B8_front; - xrb->Base.PutRow = put_row_X8R8G8B8_front; - xrb->Base.PutValues = put_values_X8R8G8B8_front; - break; - case PF_R5G6B5: - xrb->Base.GetRow = get_row_R5G6B5_front; - xrb->Base.GetValues = get_values_R5G6B5_front; - xrb->Base.PutRow = put_row_R5G6B5_front; - xrb->Base.PutValues = put_values_R5G6B5_front; - break; - case PF_R3G3B2: - xrb->Base.GetRow = get_row_R3G3B2_front; - xrb->Base.GetValues = get_values_R3G3B2_front; - xrb->Base.PutRow = put_row_R3G3B2_front; - xrb->Base.PutValues = put_values_R3G3B2_front; - break; - default: - assert(0); - return; - } -} diff --git a/mesalib/src/mesa/drivers/dri/swrast/swrast_spantemp.h b/mesalib/src/mesa/drivers/dri/swrast/swrast_spantemp.h deleted file mode 100644 index 50671193e..000000000 --- a/mesalib/src/mesa/drivers/dri/swrast/swrast_spantemp.h +++ /dev/null @@ -1,223 +0,0 @@ -/* - * Mesa 3-D graphics library - * Version: 6.5.1 - * - * 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. - */ - - -/* - * Modified version of swrast/s_spantemp.h for front-buffer rendering. The - * no-mask paths use a scratch row to avoid repeated calls to the loader. - * - * For the mask paths we always use an array of 4 elements of RB_TYPE. This is - * to satisfy the xorg loader requirement of an image pitch of 32 bits and - * should be ok for other loaders also. - */ - - -#ifndef _SWRAST_SPANTEMP_ONCE -#define _SWRAST_SPANTEMP_ONCE - -static INLINE void -PUT_PIXEL( struct gl_context *glCtx, GLint x, GLint y, GLvoid *p ) -{ - __DRIcontext *ctx = swrast_context(glCtx)->cPriv; - __DRIdrawable *draw = swrast_drawable(glCtx->DrawBuffer)->dPriv; - - __DRIscreen *screen = ctx->driScreenPriv; - - screen->swrast_loader->putImage(draw, __DRI_SWRAST_IMAGE_OP_DRAW, - x, y, 1, 1, (char *)p, - draw->loaderPrivate); -} - - -static INLINE void -GET_PIXEL( struct gl_context *glCtx, GLint x, GLint y, GLubyte *p ) -{ - __DRIcontext *ctx = swrast_context(glCtx)->cPriv; - __DRIdrawable *read = swrast_drawable(glCtx->ReadBuffer)->dPriv; - - __DRIscreen *screen = ctx->driScreenPriv; - - screen->swrast_loader->getImage(read, x, y, 1, 1, (char *)p, - read->loaderPrivate); -} - -static INLINE void -PUT_ROW( struct gl_context *glCtx, GLint x, GLint y, GLuint n, char *row ) -{ - __DRIcontext *ctx = swrast_context(glCtx)->cPriv; - __DRIdrawable *draw = swrast_drawable(glCtx->DrawBuffer)->dPriv; - - __DRIscreen *screen = ctx->driScreenPriv; - - screen->swrast_loader->putImage(draw, __DRI_SWRAST_IMAGE_OP_DRAW, - x, y, n, 1, row, - draw->loaderPrivate); -} - -static INLINE void -GET_ROW( struct gl_context *glCtx, GLint x, GLint y, GLuint n, char *row ) -{ - __DRIcontext *ctx = swrast_context(glCtx)->cPriv; - __DRIdrawable *read = swrast_drawable(glCtx->ReadBuffer)->dPriv; - - __DRIscreen *screen = ctx->driScreenPriv; - - screen->swrast_loader->getImage(read, x, y, n, 1, row, - read->loaderPrivate); -} - -#endif /* _SWRAST_SPANTEMP_ONCE */ - - -/* - * Templates for the span/pixel-array write/read functions called via - * the gl_renderbuffer's GetRow, GetValues, PutRow and PutValues. - * - * Define the following macros before including this file: - * NAME(BASE) to generate the function name (i.e. add prefix or suffix) - * RB_TYPE the renderbuffer DataType - * SPAN_VARS to declare any local variables - * INIT_PIXEL_PTR(P, X, Y) to initialize a pointer to a pixel - * INC_PIXEL_PTR(P) to increment a pixel pointer by one pixel - * STORE_PIXEL(DST, X, Y, VALUE) to store pixel values in buffer - * FETCH_PIXEL(DST, SRC) to fetch pixel values from buffer - * - * Note that in the STORE_PIXEL macros, we also pass in the (X,Y) coordinates - * for the pixels to be stored. This is useful when dithering and probably - * ignored otherwise. - */ - -#include "main/macros.h" - - -#if !defined(RB_COMPONENTS) -#define RB_COMPONENTS 4 -#endif - - -static void -NAME(get_row)( struct gl_context *ctx, struct gl_renderbuffer *rb, - GLuint count, GLint x, GLint y, void *values ) -{ -#ifdef SPAN_VARS - SPAN_VARS -#endif - RB_TYPE (*dest)[RB_COMPONENTS] = (RB_TYPE (*)[RB_COMPONENTS]) values; - GLuint i; - char *row = swrast_drawable(ctx->ReadBuffer)->row; - INIT_PIXEL_PTR(pixel, x, y); - GET_ROW( ctx, x, YFLIP(xrb, y), count, row ); - for (i = 0; i < count; i++) { - FETCH_PIXEL(dest[i], pixel); - INC_PIXEL_PTR(pixel); - } - (void) rb; -} - - -static void -NAME(get_values)( struct gl_context *ctx, struct gl_renderbuffer *rb, - GLuint count, const GLint x[], const GLint y[], void *values ) -{ -#ifdef SPAN_VARS - SPAN_VARS -#endif - RB_TYPE (*dest)[RB_COMPONENTS] = (RB_TYPE (*)[RB_COMPONENTS]) values; - GLuint i; - for (i = 0; i < count; i++) { - RB_TYPE pixel[4]; - GET_PIXEL(ctx, x[i], YFLIP(xrb, y[i]), pixel); - FETCH_PIXEL(dest[i], pixel); - } - (void) rb; -} - - -static void -NAME(put_row)( struct gl_context *ctx, struct gl_renderbuffer *rb, - GLuint count, GLint x, GLint y, - const void *values, const GLubyte mask[] ) -{ -#ifdef SPAN_VARS - SPAN_VARS -#endif - const RB_TYPE (*src)[RB_COMPONENTS] = (const RB_TYPE (*)[RB_COMPONENTS]) values; - GLuint i; - if (mask) { - for (i = 0; i < count; i++) { - if (mask[i]) { - RB_TYPE row[4]; - INIT_PIXEL_PTR(pixel, x, y); - STORE_PIXEL(pixel, x + i, y, src[i]); - PUT_PIXEL(ctx, x + i, YFLIP(xrb, y), pixel); - } - } - } - else { - char *row = swrast_drawable(ctx->DrawBuffer)->row; - INIT_PIXEL_PTR(pixel, x, y); - for (i = 0; i < count; i++) { - STORE_PIXEL(pixel, x + i, y, src[i]); - INC_PIXEL_PTR(pixel); - } - PUT_ROW( ctx, x, YFLIP(xrb, y), count, row ); - } - (void) rb; -} - - -static void -NAME(put_values)( struct gl_context *ctx, struct gl_renderbuffer *rb, - GLuint count, const GLint x[], const GLint y[], - const void *values, const GLubyte mask[] ) -{ -#ifdef SPAN_VARS - SPAN_VARS -#endif - const RB_TYPE (*src)[RB_COMPONENTS] = (const RB_TYPE (*)[RB_COMPONENTS]) values; - GLuint i; - ASSERT(mask); - for (i = 0; i < count; i++) { - if (mask[i]) { - RB_TYPE row[4]; - INIT_PIXEL_PTR(pixel, x, y); - STORE_PIXEL(pixel, x[i], y[i], src[i]); - PUT_PIXEL(ctx, x[i], YFLIP(xrb, y[i]), pixel); - } - } - (void) rb; -} - - - - -#undef NAME -#undef RB_TYPE -#undef RB_COMPONENTS -#undef SPAN_VARS -#undef INIT_PIXEL_PTR -#undef INC_PIXEL_PTR -#undef STORE_PIXEL -#undef STORE_PIXEL_RGB -#undef FETCH_PIXEL diff --git a/mesalib/src/mesa/drivers/windows/gdi/wmesa.c b/mesalib/src/mesa/drivers/windows/gdi/wmesa.c index 255d811ca..ba11998eb 100644 --- a/mesalib/src/mesa/drivers/windows/gdi/wmesa.c +++ b/mesalib/src/mesa/drivers/windows/gdi/wmesa.c @@ -940,54 +940,6 @@ wmesa_renderbuffer_storage(struct gl_context *ctx, /** - * Plug in the Get/PutRow/Values functions for a renderbuffer depending - * on if we're drawing to the front or back color buffer. - */ -static void -wmesa_set_renderbuffer_funcs(struct gl_renderbuffer *rb, int pixelformat, - int cColorBits, int double_buffer) -{ - if (double_buffer) { - /* back buffer */ - /* Picking the correct span functions is important because - * the DIB was allocated with the indicated depth. */ - switch(pixelformat) { - case PF_5R6G5B: - rb->PutRow = write_rgba_span_16; - rb->PutValues = write_rgba_pixels_16; - rb->GetRow = read_rgba_span_16; - rb->GetValues = read_rgba_pixels_16; - break; - case PF_8R8G8B: - if (cColorBits == 24) - { - rb->PutRow = write_rgba_span_24; - rb->PutValues = write_rgba_pixels_24; - rb->GetRow = read_rgba_span_24; - rb->GetValues = read_rgba_pixels_24; - } - else - { - rb->PutRow = write_rgba_span_32; - rb->PutValues = write_rgba_pixels_32; - rb->GetRow = read_rgba_span_32; - rb->GetValues = read_rgba_pixels_32; - } - break; - default: - break; - } - } - else { - /* front buffer (actual Windows window) */ - rb->PutRow = write_rgba_span_front; - rb->PutValues = write_rgba_pixels_front; - rb->GetRow = read_rgba_span_front; - rb->GetValues = read_rgba_pixels_front; - } -} - -/** * Called by ctx->Driver.ResizeBuffers() * Resize the front/back colorbuffers to match the latest window size. */ @@ -1233,7 +1185,6 @@ wmesa_new_renderbuffer(void) rb->_BaseFormat = GL_RGBA; rb->InternalFormat = GL_RGBA; - rb->DataType = CHAN_TYPE; rb->Delete = wmesa_delete_renderbuffer; rb->AllocStorage = wmesa_renderbuffer_storage; return rb; @@ -1276,11 +1227,9 @@ void WMesaMakeCurrent(WMesaContext c, HDC hdc) if (visual->doubleBufferMode == 1) { rb = wmesa_new_renderbuffer(); _mesa_add_renderbuffer(&pwfb->Base, BUFFER_BACK_LEFT, rb); - wmesa_set_renderbuffer_funcs(rb, pwfb->pixelformat, pwfb->cColorBits, 1); } rb = wmesa_new_renderbuffer(); _mesa_add_renderbuffer(&pwfb->Base, BUFFER_FRONT_LEFT, rb); - wmesa_set_renderbuffer_funcs(rb, pwfb->pixelformat, pwfb->cColorBits, 0); /* Let Mesa own the Depth, Stencil, and Accum buffers */ _swrast_add_soft_renderbuffers(&pwfb->Base, |