diff options
14 files changed, 511 insertions, 188 deletions
diff --git a/src/mesa/drivers/windows/gldirect/dglcontext.c b/src/mesa/drivers/windows/gldirect/dglcontext.c index c504be58ace..5dafe14518d 100644 --- a/src/mesa/drivers/windows/gldirect/dglcontext.c +++ b/src/mesa/drivers/windows/gldirect/dglcontext.c @@ -37,7 +37,7 @@ #include "dglcontext.h" // Get compile errors without this. KeithH -#include "scitech.h" // ibool, etc. +//#include "scitech.h" // ibool, etc. #ifdef _USE_GLD3_WGL #include "gld_driver.h" @@ -517,12 +517,12 @@ LRESULT CALLBACK dglKeyProc( HGLRC hGLRC = NULL; DGL_ctx* lpCtx = NULL; int cmd = 0, dx1 = 0, dx2 = 0, i; - static ibool bAltPressed = false; - static ibool bCtrlPressed = false; - static ibool bShiftPressed = false; + static BOOL bAltPressed = FALSE; + static BOOL bCtrlPressed = FALSE; + static BOOL bShiftPressed = FALSE; RECT r, rf, rc; POINT pt; - ibool bForceReshape = false; + BOOL bForceReshape = FALSE; return CallNextHookEx(hKeyHook, code, wParam, lParam); } diff --git a/src/mesa/drivers/windows/gldirect/dglwgl.c b/src/mesa/drivers/windows/gldirect/dglwgl.c index 437358ae165..74ecb01a5b0 100644 --- a/src/mesa/drivers/windows/gldirect/dglwgl.c +++ b/src/mesa/drivers/windows/gldirect/dglwgl.c @@ -39,7 +39,7 @@ #include "gld_driver.h" #endif -#include "glu.h" // MUST USE MICROSOFT'S GLU32! +#include "gl/glu.h" // MUST USE MICROSOFT'S GLU32! #ifndef _USE_GLD3_WGL extern DGL_mesaFuncs mesaFuncs; diff --git a/src/mesa/drivers/windows/gldirect/dll_main.c b/src/mesa/drivers/windows/gldirect/dll_main.c index 04f6466d12c..1d7ac64f498 100644 --- a/src/mesa/drivers/windows/gldirect/dll_main.c +++ b/src/mesa/drivers/windows/gldirect/dll_main.c @@ -43,8 +43,8 @@ #include "dllmain.h" -#include "snap/graphics.h" -#include "drvlib/os/os.h" +//#include "snap/graphics.h" +//#include "drvlib/os/os.h" #ifdef _USE_GLD3_WGL typedef void (APIENTRY *LPDGLSPLASHSCREEN)(int, int, char*); @@ -390,6 +390,7 @@ BOOL dllReadRegistry( if (bRegistryError || !bSuccess) return FALSE; else + return TRUE; #undef REG_READ_DWORD @@ -568,7 +569,7 @@ BOOL dglInitDriver(void) "Direct3D RGB SW", "Direct3D HW", }; - static ibool bWarnOnce = false; + static BOOL bWarnOnce = FALSE; // Already initialized? if (bInitialized) @@ -586,7 +587,7 @@ BOOL dglInitDriver(void) "Please run the configuration program\n" "before using GLDirect with applications.\n", "GLDirect", MB_OK | MB_ICONWARNING); - bWarnOnce = true; + bWarnOnce = TRUE; return FALSE; } diff --git a/src/mesa/drivers/windows/gldirect/dllmain.h b/src/mesa/drivers/windows/gldirect/dllmain.h index d898c310678..03343ef7ad3 100644 --- a/src/mesa/drivers/windows/gldirect/dllmain.h +++ b/src/mesa/drivers/windows/gldirect/dllmain.h @@ -47,7 +47,7 @@ #include "DirectGL.h" #endif // _USE_GLD3_WGL -#include "gldirect/regkeys.h" +//#include "gldirect/regkeys.h" #include "dglglobals.h" #include "ddlog.h" #ifndef _USE_GLD3_WGL diff --git a/src/mesa/drivers/windows/gldirect/dx7/gld_texture_dx7.c b/src/mesa/drivers/windows/gldirect/dx7/gld_texture_dx7.c index 6e9de16b8f5..bbe673516d6 100644 --- a/src/mesa/drivers/windows/gldirect/dx7/gld_texture_dx7.c +++ b/src/mesa/drivers/windows/gldirect/dx7/gld_texture_dx7.c @@ -69,10 +69,10 @@ D3DX_SURFACEFORMAT _gldD3DXFormatFromSurface(IDirectDrawSurface7 *pSurface); static void gld_fetch_1d_texel_X8R8G8B8( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLchan *src = CHAN_SRC( texImage, i, j, k, 4 ); - GLchan *rgba = (GLchan *) texel; + GLchan *rgba = (GLchan *)texel; rgba[RCOMP] = src[2]; rgba[GCOMP] = src[1]; rgba[BCOMP] = src[0]; @@ -81,9 +81,22 @@ static void gld_fetch_1d_texel_X8R8G8B8( //--------------------------------------------------------------------------- +static void gld_fetch_1d_texel_f_X8R8G8B8( + const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLchan *src = CHAN_SRC( texImage, i, j, k, 4 ); + texel[RCOMP] = CHAN_TO_FLOAT(src[0]); + texel[GCOMP] = CHAN_TO_FLOAT(src[1]); + texel[BCOMP] = CHAN_TO_FLOAT(src[2]); + texel[ACOMP] = 1.f; +} + +//--------------------------------------------------------------------------- + static void gld_fetch_1d_texel_X1R5G5B5( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLushort *src = USHORT_SRC( texImage, i, j, k ); GLchan *rgba = (GLchan *) texel; GLushort s = *src; @@ -95,9 +108,23 @@ static void gld_fetch_1d_texel_X1R5G5B5( //--------------------------------------------------------------------------- +static void gld_fetch_1d_texel_f_X1R5G5B5( + const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLushort *src = USHORT_SRC( texImage, i, j, k ); + GLushort s = *src; + texel[RCOMP] = UBYTE_TO_FLOAT( ((s >> 10) & 0xf8) * 255 / 0xf8 ); + texel[GCOMP] = UBYTE_TO_FLOAT( ((s >> 5) & 0xf8) * 255 / 0xf8 ); + texel[BCOMP] = UBYTE_TO_FLOAT( ((s ) & 0xf8) * 255 / 0xf8 ); + texel[ACOMP] = 1.f; +} + +//--------------------------------------------------------------------------- + static void gld_fetch_1d_texel_X4R4G4B4( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLushort *src = USHORT_SRC( texImage, i, j, k ); GLchan *rgba = (GLchan *) texel; GLushort s = *src; @@ -109,6 +136,20 @@ static void gld_fetch_1d_texel_X4R4G4B4( //--------------------------------------------------------------------------- +static void gld_fetch_1d_texel_f_X4R4G4B4( + const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLushort *src = USHORT_SRC( texImage, i, j, k ); + GLushort s = *src; + texel[RCOMP] = UBYTE_TO_FLOAT( ((s >> 8) & 0xf) * 255 / 0xf ); + texel[GCOMP] = UBYTE_TO_FLOAT( ((s >> 4) & 0xf) * 255 / 0xf ); + texel[BCOMP] = UBYTE_TO_FLOAT( ((s ) & 0xf) * 255 / 0xf ); + texel[ACOMP] = 1.f; +} + +//--------------------------------------------------------------------------- + #undef CHAN_SRC #undef UBYTE_SRC #undef USHORT_SRC @@ -131,10 +172,10 @@ static void gld_fetch_1d_texel_X4R4G4B4( static void gld_fetch_2d_texel_X8R8G8B8( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLchan *src = CHAN_SRC( texImage, i, j, k, 4 ); - GLchan *rgba = (GLchan *) texel; + GLchan *rgba = (GLchan *)texel; rgba[RCOMP] = src[2]; rgba[GCOMP] = src[1]; rgba[BCOMP] = src[0]; @@ -143,9 +184,22 @@ static void gld_fetch_2d_texel_X8R8G8B8( //--------------------------------------------------------------------------- +static void gld_fetch_2d_texel_f_X8R8G8B8( + const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLchan *src = CHAN_SRC( texImage, i, j, k, 4 ); + texel[RCOMP] = CHAN_TO_FLOAT(src[0]); + texel[GCOMP] = CHAN_TO_FLOAT(src[1]); + texel[BCOMP] = CHAN_TO_FLOAT(src[2]); + texel[ACOMP] = 1.f; +} + +//--------------------------------------------------------------------------- + static void gld_fetch_2d_texel_X1R5G5B5( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLushort *src = USHORT_SRC( texImage, i, j, k ); GLchan *rgba = (GLchan *) texel; GLushort s = *src; @@ -157,9 +211,23 @@ static void gld_fetch_2d_texel_X1R5G5B5( //--------------------------------------------------------------------------- +static void gld_fetch_2d_texel_f_X1R5G5B5( + const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLushort *src = USHORT_SRC( texImage, i, j, k ); + GLushort s = *src; + texel[RCOMP] = UBYTE_TO_FLOAT( ((s >> 10) & 0xf8) * 255 / 0xf8 ); + texel[GCOMP] = UBYTE_TO_FLOAT( ((s >> 5) & 0xf8) * 255 / 0xf8 ); + texel[BCOMP] = UBYTE_TO_FLOAT( ((s ) & 0xf8) * 255 / 0xf8 ); + texel[ACOMP] = 1.f; +} + +//--------------------------------------------------------------------------- + static void gld_fetch_2d_texel_X4R4G4B4( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLushort *src = USHORT_SRC( texImage, i, j, k ); GLchan *rgba = (GLchan *) texel; GLushort s = *src; @@ -171,6 +239,20 @@ static void gld_fetch_2d_texel_X4R4G4B4( //--------------------------------------------------------------------------- +static void gld_fetch_2d_texel_f_X4R4G4B4( + const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLushort *src = USHORT_SRC( texImage, i, j, k ); + GLushort s = *src; + texel[RCOMP] = UBYTE_TO_FLOAT( ((s >> 8) & 0xf) * 255 / 0xf ); + texel[GCOMP] = UBYTE_TO_FLOAT( ((s >> 4) & 0xf) * 255 / 0xf ); + texel[BCOMP] = UBYTE_TO_FLOAT( ((s ) & 0xf) * 255 / 0xf ); + texel[ACOMP] = 1.f; +} + +//--------------------------------------------------------------------------- + #undef CHAN_SRC #undef UBYTE_SRC #undef USHORT_SRC @@ -197,10 +279,10 @@ static void gld_fetch_2d_texel_X4R4G4B4( static void gld_fetch_3d_texel_X8R8G8B8( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLchan *src = CHAN_SRC( texImage, i, j, k, 4 ); - GLchan *rgba = (GLchan *) texel; + GLchan *rgba = (GLchan *)texel; rgba[RCOMP] = src[2]; rgba[GCOMP] = src[1]; rgba[BCOMP] = src[0]; @@ -209,9 +291,22 @@ static void gld_fetch_3d_texel_X8R8G8B8( //--------------------------------------------------------------------------- +static void gld_fetch_3d_texel_f_X8R8G8B8( + const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLchan *src = CHAN_SRC( texImage, i, j, k, 4 ); + texel[RCOMP] = CHAN_TO_FLOAT(src[0]); + texel[GCOMP] = CHAN_TO_FLOAT(src[1]); + texel[BCOMP] = CHAN_TO_FLOAT(src[2]); + texel[ACOMP] = 1.f; +} + +//--------------------------------------------------------------------------- + static void gld_fetch_3d_texel_X1R5G5B5( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLushort *src = USHORT_SRC( texImage, i, j, k ); GLchan *rgba = (GLchan *) texel; GLushort s = *src; @@ -223,9 +318,23 @@ static void gld_fetch_3d_texel_X1R5G5B5( //--------------------------------------------------------------------------- +static void gld_fetch_3d_texel_f_X1R5G5B5( + const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLushort *src = USHORT_SRC( texImage, i, j, k ); + GLushort s = *src; + texel[RCOMP] = UBYTE_TO_FLOAT( ((s >> 10) & 0xf8) * 255 / 0xf8 ); + texel[GCOMP] = UBYTE_TO_FLOAT( ((s >> 5) & 0xf8) * 255 / 0xf8 ); + texel[BCOMP] = UBYTE_TO_FLOAT( ((s ) & 0xf8) * 255 / 0xf8 ); + texel[ACOMP] = 1.f; +} + +//--------------------------------------------------------------------------- + static void gld_fetch_3d_texel_X4R4G4B4( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLushort *src = USHORT_SRC( texImage, i, j, k ); GLchan *rgba = (GLchan *) texel; GLushort s = *src; @@ -237,6 +346,20 @@ static void gld_fetch_3d_texel_X4R4G4B4( //--------------------------------------------------------------------------- +static void gld_fetch_3d_texel_f_X4R4G4B4( + const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLushort *src = USHORT_SRC( texImage, i, j, k ); + GLushort s = *src; + texel[RCOMP] = UBYTE_TO_FLOAT( ((s >> 8) & 0xf) * 255 / 0xf ); + texel[GCOMP] = UBYTE_TO_FLOAT( ((s >> 4) & 0xf) * 255 / 0xf ); + texel[BCOMP] = UBYTE_TO_FLOAT( ((s ) & 0xf) * 255 / 0xf ); + texel[ACOMP] = 1.f; +} + +//--------------------------------------------------------------------------- + #undef CHAN_SRC #undef UBYTE_SRC #undef USHORT_SRC @@ -249,6 +372,7 @@ static void gld_fetch_3d_texel_X4R4G4B4( const struct gl_texture_format _gld_texformat_X8R8G8B8 = { MESA_FORMAT_ARGB8888, /* MesaFormat */ GL_RGBA, /* BaseFormat */ + GL_UNSIGNED_NORMALIZED_ARB, /* DataType */ 8, /* RedBits */ 8, /* GreenBits */ 8, /* BlueBits */ @@ -258,14 +382,19 @@ const struct gl_texture_format _gld_texformat_X8R8G8B8 = { 0, /* IndexBits */ 0, /* DepthBits */ 4, /* TexelBytes */ + _mesa_texstore_argb8888, /* StoreTexImageFunc */ gld_fetch_1d_texel_X8R8G8B8, /* FetchTexel1D */ gld_fetch_2d_texel_X8R8G8B8, /* FetchTexel2D */ gld_fetch_3d_texel_X8R8G8B8, /* FetchTexel3D */ + gld_fetch_1d_texel_f_X8R8G8B8, /* FetchTexel1Df */ + gld_fetch_2d_texel_f_X8R8G8B8, /* FetchTexel2Df */ + gld_fetch_3d_texel_f_X8R8G8B8, /* FetchTexel3Df */ }; const struct gl_texture_format _gld_texformat_X1R5G5B5 = { MESA_FORMAT_ARGB1555, /* MesaFormat */ GL_RGBA, /* BaseFormat */ + GL_UNSIGNED_NORMALIZED_ARB, /* DataType */ 5, /* RedBits */ 5, /* GreenBits */ 5, /* BlueBits */ @@ -275,14 +404,19 @@ const struct gl_texture_format _gld_texformat_X1R5G5B5 = { 0, /* IndexBits */ 0, /* DepthBits */ 2, /* TexelBytes */ + _mesa_texstore_argb1555, /* StoreTexImageFunc */ gld_fetch_1d_texel_X1R5G5B5, /* FetchTexel1D */ gld_fetch_2d_texel_X1R5G5B5, /* FetchTexel2D */ gld_fetch_3d_texel_X1R5G5B5, /* FetchTexel3D */ + gld_fetch_1d_texel_f_X1R5G5B5, /* FetchTexel1Df */ + gld_fetch_2d_texel_f_X1R5G5B5, /* FetchTexel2Df */ + gld_fetch_3d_texel_f_X1R5G5B5, /* FetchTexel3Df */ }; const struct gl_texture_format _gld_texformat_X4R4G4B4 = { MESA_FORMAT_ARGB4444, /* MesaFormat */ GL_RGBA, /* BaseFormat */ + GL_UNSIGNED_NORMALIZED_ARB, /* DataType */ 4, /* RedBits */ 4, /* GreenBits */ 4, /* BlueBits */ @@ -292,9 +426,13 @@ const struct gl_texture_format _gld_texformat_X4R4G4B4 = { 0, /* IndexBits */ 0, /* DepthBits */ 2, /* TexelBytes */ + _mesa_texstore_argb4444, /* StoreTexImageFunc */ gld_fetch_1d_texel_X4R4G4B4, /* FetchTexel1D */ gld_fetch_2d_texel_X4R4G4B4, /* FetchTexel2D */ gld_fetch_3d_texel_X4R4G4B4, /* FetchTexel3D */ + gld_fetch_1d_texel_f_X4R4G4B4, /* FetchTexel1Df */ + gld_fetch_2d_texel_f_X4R4G4B4, /* FetchTexel2Df */ + gld_fetch_3d_texel_f_X4R4G4B4, /* FetchTexel3Df */ }; //--------------------------------------------------------------------------- @@ -887,6 +1025,10 @@ void gld_DrawPixels_DX7( D3DX_SURFACEFORMAT sf; DWORD dwMipmaps; + const struct gl_texture_format *MesaFormat; + + MesaFormat = _mesa_choose_tex_format(ctx, format, format, type); + gldCtx = GLD_GET_CONTEXT(ctx); gld = GLD_GET_DX7_DRIVER(gldCtx); @@ -923,7 +1065,7 @@ void gld_DrawPixels_DX7( } // unpack image, apply transfer ops and store directly in texture - _mesa_transfer_teximage( + MesaFormat->StoreImage( ctx, 2, GL_RGBA, @@ -1070,9 +1212,9 @@ void gld_ReadPixels_DX7( // We need to flip the data. Yuck. // Perhaps Mesa has a span packer we can use in future... for (i=0; i<height; i++) { - BYTE *pDestRow = (BYTE*)_mesa_image_address2d(pack, dest, width, height, format, type, 0, i, 0); + BYTE *pDestRow = (BYTE*)_mesa_image_address(2,pack, dest, width, height, format, type, 0, i, 0); BYTE *pSrcRow = (BYTE*)d3dLockedRect.pBits + (d3dLockedRect.Pitch * (height-i-1)); - _mesa_transfer_teximage( + texImage->TexFormat->StoreImage( ctx, 2, GL_RGBA, // base format @@ -1295,7 +1437,7 @@ void gld_Bitmap_DX7( for (i=0; i<height; i++) { GLubyte byte; pBits = (D3DCOLOR*)((BYTE*)ddsd.lpSurface + (i*ddsd.lPitch)); - src = (const GLubyte *) _mesa_image_address2d( + src = (const GLubyte *) _mesa_image_address(2, &ctx->DefaultPacking, pTempBitmap, width, height, GL_COLOR_INDEX, GL_BITMAP, 0, i, 0); for (j=0; j<(width>>3); j++) { @@ -1527,7 +1669,7 @@ void gld_TexImage2D_DX7( return; } // unpack image, apply transfer ops and store in tempImage - _mesa_transfer_teximage(ctx, 2, texImage->Format, + texImage->TexFormat->StoreImage(ctx, 2, texImage->Format, &_mesa_texformat_argb8888, // dest format tempImage, width, height, 1, 0, 0, 0, @@ -1633,7 +1775,7 @@ void gld_TexImage2D_DX7( } // unpack image, apply transfer ops and store directly in texture - _mesa_transfer_teximage( + texImage->TexFormat->StoreImage( ctx, 2, texImage->Format, @@ -1705,7 +1847,7 @@ void gld_TexSubImage2D( GLcontext *ctx, GLenum target, GLint level, } // unpack image, apply transfer ops and store in tempImage - _mesa_transfer_teximage(ctx, 2, texImage->Format, + texImage->TexFormat->StoreImage(ctx, 2, texImage->Format, &_mesa_texformat_argb8888, // dest format tempImage, width, height, 1, 0, 0, 0, @@ -1802,7 +1944,7 @@ void gld_TexSubImage2D_DX7( GLcontext *ctx, GLenum target, GLint level, } // unpack image, apply transfer ops and store directly in texture - _mesa_transfer_teximage(ctx, 2, texImage->Format, + texImage->TexFormat->StoreImage(ctx, 2, texImage->Format, _gldMesaFormatForD3DFormat(_gldD3DXFormatFromSurface(pSurface)), ddsd.lpSurface, width, height, 1, diff --git a/src/mesa/drivers/windows/gldirect/dx7/gld_vb_mesa_render_dx7.c b/src/mesa/drivers/windows/gldirect/dx7/gld_vb_mesa_render_dx7.c index fe342498dd4..9035574045f 100644 --- a/src/mesa/drivers/windows/gldirect/dx7/gld_vb_mesa_render_dx7.c +++ b/src/mesa/drivers/windows/gldirect/dx7/gld_vb_mesa_render_dx7.c @@ -1,4 +1,4 @@ -/* $Id: gld_vb_mesa_render_dx7.c,v 1.3 2005/04/14 16:58:25 bencrossman Exp $ */ +/* $Id: gld_vb_mesa_render_dx7.c,v 1.4 2005/04/15 17:17:47 bencrossman Exp $ */ /* * Mesa 3-D graphics library @@ -420,40 +420,7 @@ static void _gld_mesa_render_stage_check( GLcontext *ctx, struct tnl_pipeline_stage *stage) { - GLuint inputs = VERT_BIT_CLIP; - GLuint i; - - if (ctx->Visual.rgbMode) { - inputs |= VERT_BIT_COLOR0; - - if (ctx->_TriangleCaps & DD_SEPARATE_SPECULAR) - inputs |= VERT_BIT_COLOR1; //VERT_BIT_SPEC_RGB; - - //if (ctx->Texture._ReallyEnabled) { - for (i=0; i<ctx->Const.MaxTextureUnits; i++) { - if (ctx->Texture.Unit[i]._ReallyEnabled) - inputs |= VERT_BIT_TEX(i); - } - //} - } else { - inputs |= VERT_BIT_INDEX; - } - - if (ctx->Point._Attenuated) - inputs |= VERT_BIT_POINT_SIZE; - - /* How do drivers turn this off? - */ - if (ctx->Fog.Enabled) - inputs |= VERT_BIT_FOG; // VERT_FOG_COORD; - - if (ctx->_TriangleCaps & DD_TRI_UNFILLED) - inputs |= VERT_BIT_EDGEFLAG; - - if (ctx->RenderMode==GL_FEEDBACK) - inputs |= VERT_BITS_TEX_ANY; - - stage->inputs = inputs; + stage->inputs = TNL_CONTEXT(ctx)->render_inputs; } //--------------------------------------------------------------------------- diff --git a/src/mesa/drivers/windows/gldirect/dx7/gld_wgl_dx7.c b/src/mesa/drivers/windows/gldirect/dx7/gld_wgl_dx7.c index 80395130805..0f8fe33eb15 100644 --- a/src/mesa/drivers/windows/gldirect/dx7/gld_wgl_dx7.c +++ b/src/mesa/drivers/windows/gldirect/dx7/gld_wgl_dx7.c @@ -256,7 +256,7 @@ HRESULT _gldCreatePrimitiveBuffer( // If CVA (Compiled Vertex Array) is used by an OpenGL app, then we // will need enough vertices to cater for Mesa::Const.MaxArrayLockSize. // We'll use IMM_SIZE if it's larger (which it should not be). - dwMaxVertices = (IMM_SIZE < MAX_ARRAY_LOCK_SIZE) ? MAX_ARRAY_LOCK_SIZE : IMM_SIZE; + dwMaxVertices = MAX_ARRAY_LOCK_SIZE; // Max vertex buffer size limited in DX7. (DaveM) if (dwMaxVertices*9 > D3DMAXNUMVERTICES) diff --git a/src/mesa/drivers/windows/gldirect/dx8/gld_texture_dx8.c b/src/mesa/drivers/windows/gldirect/dx8/gld_texture_dx8.c index 53935b2630a..f24b3cfb74d 100644 --- a/src/mesa/drivers/windows/gldirect/dx8/gld_texture_dx8.c +++ b/src/mesa/drivers/windows/gldirect/dx8/gld_texture_dx8.c @@ -67,10 +67,10 @@ static void gld_fetch_1d_texel_X8R8G8B8( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLchan *src = CHAN_SRC( texImage, i, j, k, 4 ); - GLchan *rgba = (GLchan *) texel; + GLchan *rgba = (GLchan *)texel; rgba[RCOMP] = src[2]; rgba[GCOMP] = src[1]; rgba[BCOMP] = src[0]; @@ -79,9 +79,22 @@ static void gld_fetch_1d_texel_X8R8G8B8( //--------------------------------------------------------------------------- +static void gld_fetch_1d_texel_f_X8R8G8B8( + const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLchan *src = CHAN_SRC( texImage, i, j, k, 4 ); + texel[RCOMP] = CHAN_TO_FLOAT(src[0]); + texel[GCOMP] = CHAN_TO_FLOAT(src[1]); + texel[BCOMP] = CHAN_TO_FLOAT(src[2]); + texel[ACOMP] = 1.f; +} + +//--------------------------------------------------------------------------- + static void gld_fetch_1d_texel_X1R5G5B5( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLushort *src = USHORT_SRC( texImage, i, j, k ); GLchan *rgba = (GLchan *) texel; GLushort s = *src; @@ -93,9 +106,23 @@ static void gld_fetch_1d_texel_X1R5G5B5( //--------------------------------------------------------------------------- +static void gld_fetch_1d_texel_f_X1R5G5B5( + const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLushort *src = USHORT_SRC( texImage, i, j, k ); + GLushort s = *src; + texel[RCOMP] = UBYTE_TO_FLOAT( ((s >> 10) & 0xf8) * 255 / 0xf8 ); + texel[GCOMP] = UBYTE_TO_FLOAT( ((s >> 5) & 0xf8) * 255 / 0xf8 ); + texel[BCOMP] = UBYTE_TO_FLOAT( ((s ) & 0xf8) * 255 / 0xf8 ); + texel[ACOMP] = 1.f; +} + +//--------------------------------------------------------------------------- + static void gld_fetch_1d_texel_X4R4G4B4( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLushort *src = USHORT_SRC( texImage, i, j, k ); GLchan *rgba = (GLchan *) texel; GLushort s = *src; @@ -107,6 +134,20 @@ static void gld_fetch_1d_texel_X4R4G4B4( //--------------------------------------------------------------------------- +static void gld_fetch_1d_texel_f_X4R4G4B4( + const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLushort *src = USHORT_SRC( texImage, i, j, k ); + GLushort s = *src; + texel[RCOMP] = UBYTE_TO_FLOAT( ((s >> 8) & 0xf) * 255 / 0xf ); + texel[GCOMP] = UBYTE_TO_FLOAT( ((s >> 4) & 0xf) * 255 / 0xf ); + texel[BCOMP] = UBYTE_TO_FLOAT( ((s ) & 0xf) * 255 / 0xf ); + texel[ACOMP] = 1.f; +} + +//--------------------------------------------------------------------------- + #undef CHAN_SRC #undef UBYTE_SRC #undef USHORT_SRC @@ -129,10 +170,10 @@ static void gld_fetch_1d_texel_X4R4G4B4( static void gld_fetch_2d_texel_X8R8G8B8( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLchan *src = CHAN_SRC( texImage, i, j, k, 4 ); - GLchan *rgba = (GLchan *) texel; + GLchan *rgba = (GLchan *)texel; rgba[RCOMP] = src[2]; rgba[GCOMP] = src[1]; rgba[BCOMP] = src[0]; @@ -141,9 +182,22 @@ static void gld_fetch_2d_texel_X8R8G8B8( //--------------------------------------------------------------------------- +static void gld_fetch_2d_texel_f_X8R8G8B8( + const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLchan *src = CHAN_SRC( texImage, i, j, k, 4 ); + texel[RCOMP] = CHAN_TO_FLOAT(src[0]); + texel[GCOMP] = CHAN_TO_FLOAT(src[1]); + texel[BCOMP] = CHAN_TO_FLOAT(src[2]); + texel[ACOMP] = 1.f; +} + +//--------------------------------------------------------------------------- + static void gld_fetch_2d_texel_X1R5G5B5( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLushort *src = USHORT_SRC( texImage, i, j, k ); GLchan *rgba = (GLchan *) texel; GLushort s = *src; @@ -155,9 +209,23 @@ static void gld_fetch_2d_texel_X1R5G5B5( //--------------------------------------------------------------------------- +static void gld_fetch_2d_texel_f_X1R5G5B5( + const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLushort *src = USHORT_SRC( texImage, i, j, k ); + GLushort s = *src; + texel[RCOMP] = UBYTE_TO_FLOAT( ((s >> 10) & 0xf8) * 255 / 0xf8 ); + texel[GCOMP] = UBYTE_TO_FLOAT( ((s >> 5) & 0xf8) * 255 / 0xf8 ); + texel[BCOMP] = UBYTE_TO_FLOAT( ((s ) & 0xf8) * 255 / 0xf8 ); + texel[ACOMP] = 1.f; +} + +//--------------------------------------------------------------------------- + static void gld_fetch_2d_texel_X4R4G4B4( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLushort *src = USHORT_SRC( texImage, i, j, k ); GLchan *rgba = (GLchan *) texel; GLushort s = *src; @@ -169,6 +237,20 @@ static void gld_fetch_2d_texel_X4R4G4B4( //--------------------------------------------------------------------------- +static void gld_fetch_2d_texel_f_X4R4G4B4( + const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLushort *src = USHORT_SRC( texImage, i, j, k ); + GLushort s = *src; + texel[RCOMP] = UBYTE_TO_FLOAT( ((s >> 8) & 0xf) * 255 / 0xf ); + texel[GCOMP] = UBYTE_TO_FLOAT( ((s >> 4) & 0xf) * 255 / 0xf ); + texel[BCOMP] = UBYTE_TO_FLOAT( ((s ) & 0xf) * 255 / 0xf ); + texel[ACOMP] = 1.f; +} + +//--------------------------------------------------------------------------- + #undef CHAN_SRC #undef UBYTE_SRC #undef USHORT_SRC @@ -195,10 +277,10 @@ static void gld_fetch_2d_texel_X4R4G4B4( static void gld_fetch_3d_texel_X8R8G8B8( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLchan *src = CHAN_SRC( texImage, i, j, k, 4 ); - GLchan *rgba = (GLchan *) texel; + GLchan *rgba = (GLchan *)texel; rgba[RCOMP] = src[2]; rgba[GCOMP] = src[1]; rgba[BCOMP] = src[0]; @@ -207,9 +289,22 @@ static void gld_fetch_3d_texel_X8R8G8B8( //--------------------------------------------------------------------------- +static void gld_fetch_3d_texel_f_X8R8G8B8( + const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLchan *src = CHAN_SRC( texImage, i, j, k, 4 ); + texel[RCOMP] = CHAN_TO_FLOAT(src[0]); + texel[GCOMP] = CHAN_TO_FLOAT(src[1]); + texel[BCOMP] = CHAN_TO_FLOAT(src[2]); + texel[ACOMP] = 1.f; +} + +//--------------------------------------------------------------------------- + static void gld_fetch_3d_texel_X1R5G5B5( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLushort *src = USHORT_SRC( texImage, i, j, k ); GLchan *rgba = (GLchan *) texel; GLushort s = *src; @@ -221,9 +316,23 @@ static void gld_fetch_3d_texel_X1R5G5B5( //--------------------------------------------------------------------------- +static void gld_fetch_3d_texel_f_X1R5G5B5( + const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLushort *src = USHORT_SRC( texImage, i, j, k ); + GLushort s = *src; + texel[RCOMP] = UBYTE_TO_FLOAT( ((s >> 10) & 0xf8) * 255 / 0xf8 ); + texel[GCOMP] = UBYTE_TO_FLOAT( ((s >> 5) & 0xf8) * 255 / 0xf8 ); + texel[BCOMP] = UBYTE_TO_FLOAT( ((s ) & 0xf8) * 255 / 0xf8 ); + texel[ACOMP] = 1.f; +} + +//--------------------------------------------------------------------------- + static void gld_fetch_3d_texel_X4R4G4B4( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLushort *src = USHORT_SRC( texImage, i, j, k ); GLchan *rgba = (GLchan *) texel; GLushort s = *src; @@ -235,6 +344,20 @@ static void gld_fetch_3d_texel_X4R4G4B4( //--------------------------------------------------------------------------- +static void gld_fetch_3d_texel_f_X4R4G4B4( + const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLushort *src = USHORT_SRC( texImage, i, j, k ); + GLushort s = *src; + texel[RCOMP] = UBYTE_TO_FLOAT( ((s >> 8) & 0xf) * 255 / 0xf ); + texel[GCOMP] = UBYTE_TO_FLOAT( ((s >> 4) & 0xf) * 255 / 0xf ); + texel[BCOMP] = UBYTE_TO_FLOAT( ((s ) & 0xf) * 255 / 0xf ); + texel[ACOMP] = 1.f; +} + +//--------------------------------------------------------------------------- + #undef CHAN_SRC #undef UBYTE_SRC #undef USHORT_SRC @@ -247,7 +370,7 @@ static void gld_fetch_3d_texel_X4R4G4B4( const struct gl_texture_format _gld_texformat_X8R8G8B8 = { MESA_FORMAT_ARGB8888, /* MesaFormat */ GL_RGBA, /* BaseFormat */ -// GL_UNSIGNED_BYTE, /* Type */ + GL_UNSIGNED_NORMALIZED_ARB, /* DataType */ 8, /* RedBits */ 8, /* GreenBits */ 8, /* BlueBits */ @@ -257,15 +380,19 @@ const struct gl_texture_format _gld_texformat_X8R8G8B8 = { 0, /* IndexBits */ 0, /* DepthBits */ 4, /* TexelBytes */ + _mesa_texstore_argb8888, /* StoreTexImageFunc */ gld_fetch_1d_texel_X8R8G8B8, /* FetchTexel1D */ gld_fetch_2d_texel_X8R8G8B8, /* FetchTexel2D */ gld_fetch_3d_texel_X8R8G8B8, /* FetchTexel3D */ + gld_fetch_1d_texel_f_X8R8G8B8, /* FetchTexel1Df */ + gld_fetch_2d_texel_f_X8R8G8B8, /* FetchTexel2Df */ + gld_fetch_3d_texel_f_X8R8G8B8, /* FetchTexel3Df */ }; const struct gl_texture_format _gld_texformat_X1R5G5B5 = { MESA_FORMAT_ARGB1555, /* MesaFormat */ GL_RGBA, /* BaseFormat */ -// GL_UNSIGNED_SHORT_1_5_5_5_REV, /* Type */ + GL_UNSIGNED_NORMALIZED_ARB, /* DataType */ 5, /* RedBits */ 5, /* GreenBits */ 5, /* BlueBits */ @@ -275,15 +402,19 @@ const struct gl_texture_format _gld_texformat_X1R5G5B5 = { 0, /* IndexBits */ 0, /* DepthBits */ 2, /* TexelBytes */ + _mesa_texstore_argb1555, /* StoreTexImageFunc */ gld_fetch_1d_texel_X1R5G5B5, /* FetchTexel1D */ gld_fetch_2d_texel_X1R5G5B5, /* FetchTexel2D */ gld_fetch_3d_texel_X1R5G5B5, /* FetchTexel3D */ + gld_fetch_1d_texel_f_X1R5G5B5, /* FetchTexel1Df */ + gld_fetch_2d_texel_f_X1R5G5B5, /* FetchTexel2Df */ + gld_fetch_3d_texel_f_X1R5G5B5, /* FetchTexel3Df */ }; const struct gl_texture_format _gld_texformat_X4R4G4B4 = { MESA_FORMAT_ARGB4444, /* MesaFormat */ GL_RGBA, /* BaseFormat */ -// GL_UNSIGNED_SHORT_4_4_4_4_REV, /* Type */ + GL_UNSIGNED_NORMALIZED_ARB, /* DataType */ 4, /* RedBits */ 4, /* GreenBits */ 4, /* BlueBits */ @@ -293,9 +424,13 @@ const struct gl_texture_format _gld_texformat_X4R4G4B4 = { 0, /* IndexBits */ 0, /* DepthBits */ 2, /* TexelBytes */ + _mesa_texstore_argb4444, /* StoreTexImageFunc */ gld_fetch_1d_texel_X4R4G4B4, /* FetchTexel1D */ gld_fetch_2d_texel_X4R4G4B4, /* FetchTexel2D */ gld_fetch_3d_texel_X4R4G4B4, /* FetchTexel3D */ + gld_fetch_1d_texel_f_X4R4G4B4, /* FetchTexel1Df */ + gld_fetch_2d_texel_f_X4R4G4B4, /* FetchTexel2Df */ + gld_fetch_3d_texel_f_X4R4G4B4, /* FetchTexel3Df */ }; //--------------------------------------------------------------------------- @@ -860,6 +995,8 @@ void gld_DrawPixels_DX8( HRESULT hr; D3DLOCKED_RECT d3dLockedRect; + const struct gl_texture_format *MesaFormat; + gldCtx = GLD_GET_CONTEXT(ctx); gld = GLD_GET_DX8_DRIVER(gldCtx); @@ -884,8 +1021,10 @@ void gld_DrawPixels_DX8( return; } + MesaFormat = _mesa_choose_tex_format(ctx, format, format, type); + // unpack image, apply transfer ops and store directly in texture - _mesa_transfer_teximage( + MesaFormat->StoreImage( ctx, 2, GL_RGBA, @@ -1031,9 +1170,9 @@ void gld_ReadPixels_DX8( // We need to flip the data. Yuck. // Perhaps Mesa has a span packer we can use in future... for (i=0; i<height; i++) { - BYTE *pDestRow = (BYTE*)_mesa_image_address2d(pack, dest, width, height, format, type, 0, i, 0); + BYTE *pDestRow = (BYTE*)_mesa_image_address(2,pack, dest, width, height, format, type, 0, i, 0); BYTE *pSrcRow = (BYTE*)d3dLockedRect.pBits + (d3dLockedRect.Pitch * (height-i-1)); - _mesa_transfer_teximage( + MesaFormat->StoreImage( ctx, 2, GL_RGBA, // base format @@ -1203,7 +1342,7 @@ void gld_Bitmap_DX8( for (i=0; i<height; i++) { GLubyte byte; pBits = (D3DCOLOR*)((BYTE*)d3dLockedRect.pBits + (i*d3dLockedRect.Pitch)); - src = (const GLubyte *) _mesa_image_address2d( + src = (const GLubyte *) _mesa_image_address(2, &ctx->DefaultPacking, pTempBitmap, width, height, GL_COLOR_INDEX, GL_BITMAP, 0, i, 0); for (j=0; j<(width>>3); j++) { @@ -1227,7 +1366,7 @@ void gld_Bitmap_DX8( /* // unpack image, apply transfer ops and store directly in texture - _mesa_transfer_teximage( + texImage->TexFormat->StoreImage( ctx, 2, GL_BITMAP, @@ -1432,7 +1571,7 @@ void gld_TexImage2D_DX8( return; } // unpack image, apply transfer ops and store in tempImage - _mesa_transfer_teximage(ctx, 2, texImage->Format, + texImage->TexFormat->StoreImage(ctx, 2, texImage->Format, &_mesa_texformat_argb8888, // dest format tempImage, width, height, 1, 0, 0, 0, @@ -1520,7 +1659,7 @@ void gld_TexImage2D_DX8( } // unpack image, apply transfer ops and store directly in texture - _mesa_transfer_teximage( + texImage->TexFormat->StoreImage( ctx, 2, texImage->Format, @@ -1592,7 +1731,7 @@ void gld_TexSubImage2D( GLcontext *ctx, GLenum target, GLint level, } // unpack image, apply transfer ops and store in tempImage - _mesa_transfer_teximage(ctx, 2, texImage->Format, + texImage->TexFormat->StoreImage(ctx, 2, texImage->Format, &_mesa_texformat_argb8888, // dest format tempImage, width, height, 1, 0, 0, 0, @@ -1673,7 +1812,7 @@ void gld_TexSubImage2D_DX8( GLcontext *ctx, GLenum target, GLint level, } // unpack image, apply transfer ops and store directly in texture - _mesa_transfer_teximage(ctx, 2, texImage->Format, + texImage->TexFormat->StoreImage(ctx, 2, texImage->Format, _gldMesaFormatForD3DFormat(d3dsd.Format), d3dLockedRect.pBits, width, height, 1, diff --git a/src/mesa/drivers/windows/gldirect/dx8/gld_vb_mesa_render_dx8.c b/src/mesa/drivers/windows/gldirect/dx8/gld_vb_mesa_render_dx8.c index 43fe35d6e9c..c07370474a8 100644 --- a/src/mesa/drivers/windows/gldirect/dx8/gld_vb_mesa_render_dx8.c +++ b/src/mesa/drivers/windows/gldirect/dx8/gld_vb_mesa_render_dx8.c @@ -1,4 +1,4 @@ -/* $Id: gld_vb_mesa_render_dx8.c,v 1.3 2005/04/14 16:58:25 bencrossman Exp $ */ +/* $Id: gld_vb_mesa_render_dx8.c,v 1.4 2005/04/15 17:17:47 bencrossman Exp $ */ /* * Mesa 3-D graphics library @@ -443,40 +443,7 @@ static void _gld_mesa_render_stage_check( GLcontext *ctx, struct tnl_pipeline_stage *stage) { - GLuint inputs = VERT_BIT_CLIP; - GLuint i; - - if (ctx->Visual.rgbMode) { - inputs |= VERT_BIT_COLOR0; - - if (ctx->_TriangleCaps & DD_SEPARATE_SPECULAR) - inputs |= VERT_BIT_COLOR1; //VERT_BIT_SPEC_RGB; - - //if (ctx->Texture._ReallyEnabled) { - for (i=0; i<ctx->Const.MaxTextureUnits; i++) { - if (ctx->Texture.Unit[i]._ReallyEnabled) - inputs |= VERT_BIT_TEX(i); - } - //} - } else { - inputs |= VERT_BIT_INDEX; - } - - if (ctx->Point._Attenuated) - inputs |= VERT_BIT_POINT_SIZE; - - /* How do drivers turn this off? - */ - if (ctx->Fog.Enabled) - inputs |= VERT_BIT_FOG; // VERT_FOG_COORD; - - if (ctx->_TriangleCaps & DD_TRI_UNFILLED) - inputs |= VERT_BIT_EDGEFLAG; - - if (ctx->RenderMode==GL_FEEDBACK) - inputs |= VERT_BITS_TEX_ANY; - - stage->inputs = inputs; + stage->inputs = TNL_CONTEXT(ctx)->render_inputs; } //--------------------------------------------------------------------------- diff --git a/src/mesa/drivers/windows/gldirect/dx8/gld_wgl_dx8.c b/src/mesa/drivers/windows/gldirect/dx8/gld_wgl_dx8.c index 1c7992ed553..690f68b68f1 100644 --- a/src/mesa/drivers/windows/gldirect/dx8/gld_wgl_dx8.c +++ b/src/mesa/drivers/windows/gldirect/dx8/gld_wgl_dx8.c @@ -245,7 +245,7 @@ HRESULT _gldCreatePrimitiveBuffer( // If CVA (Compiled Vertex Array) is used by an OpenGL app, then we // will need enough vertices to cater for Mesa::Const.MaxArrayLockSize. // We'll use IMM_SIZE if it's larger (which it should not be). - dwMaxVertices = (IMM_SIZE < MAX_ARRAY_LOCK_SIZE) ? MAX_ARRAY_LOCK_SIZE : IMM_SIZE; + dwMaxVertices = MAX_ARRAY_LOCK_SIZE; // Now calculate how many vertices to allow for in total // 1 per point, 2 per line, 6 per quad = 9 diff --git a/src/mesa/drivers/windows/gldirect/dx9/gld_texture_dx9.c b/src/mesa/drivers/windows/gldirect/dx9/gld_texture_dx9.c index 91aa5a5d7b5..5a822356164 100644 --- a/src/mesa/drivers/windows/gldirect/dx9/gld_texture_dx9.c +++ b/src/mesa/drivers/windows/gldirect/dx9/gld_texture_dx9.c @@ -67,10 +67,10 @@ static void gld_fetch_1d_texel_X8R8G8B8( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLchan *src = CHAN_SRC( texImage, i, j, k, 4 ); - GLchan *rgba = (GLchan *) texel; + GLchan *rgba = (GLchan *)texel; rgba[RCOMP] = src[2]; rgba[GCOMP] = src[1]; rgba[BCOMP] = src[0]; @@ -79,9 +79,22 @@ static void gld_fetch_1d_texel_X8R8G8B8( //--------------------------------------------------------------------------- +static void gld_fetch_1d_texel_f_X8R8G8B8( + const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLchan *src = CHAN_SRC( texImage, i, j, k, 4 ); + texel[RCOMP] = CHAN_TO_FLOAT(src[0]); + texel[GCOMP] = CHAN_TO_FLOAT(src[1]); + texel[BCOMP] = CHAN_TO_FLOAT(src[2]); + texel[ACOMP] = 1.f; +} + +//--------------------------------------------------------------------------- + static void gld_fetch_1d_texel_X1R5G5B5( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLushort *src = USHORT_SRC( texImage, i, j, k ); GLchan *rgba = (GLchan *) texel; GLushort s = *src; @@ -93,9 +106,23 @@ static void gld_fetch_1d_texel_X1R5G5B5( //--------------------------------------------------------------------------- +static void gld_fetch_1d_texel_f_X1R5G5B5( + const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLushort *src = USHORT_SRC( texImage, i, j, k ); + GLushort s = *src; + texel[RCOMP] = UBYTE_TO_FLOAT( ((s >> 10) & 0xf8) * 255 / 0xf8 ); + texel[GCOMP] = UBYTE_TO_FLOAT( ((s >> 5) & 0xf8) * 255 / 0xf8 ); + texel[BCOMP] = UBYTE_TO_FLOAT( ((s ) & 0xf8) * 255 / 0xf8 ); + texel[ACOMP] = 1.f; +} + +//--------------------------------------------------------------------------- + static void gld_fetch_1d_texel_X4R4G4B4( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLushort *src = USHORT_SRC( texImage, i, j, k ); GLchan *rgba = (GLchan *) texel; GLushort s = *src; @@ -107,6 +134,20 @@ static void gld_fetch_1d_texel_X4R4G4B4( //--------------------------------------------------------------------------- +static void gld_fetch_1d_texel_f_X4R4G4B4( + const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLushort *src = USHORT_SRC( texImage, i, j, k ); + GLushort s = *src; + texel[RCOMP] = UBYTE_TO_FLOAT( ((s >> 8) & 0xf) * 255 / 0xf ); + texel[GCOMP] = UBYTE_TO_FLOAT( ((s >> 4) & 0xf) * 255 / 0xf ); + texel[BCOMP] = UBYTE_TO_FLOAT( ((s ) & 0xf) * 255 / 0xf ); + texel[ACOMP] = 1.f; +} + +//--------------------------------------------------------------------------- + #undef CHAN_SRC #undef UBYTE_SRC #undef USHORT_SRC @@ -129,10 +170,10 @@ static void gld_fetch_1d_texel_X4R4G4B4( static void gld_fetch_2d_texel_X8R8G8B8( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLchan *src = CHAN_SRC( texImage, i, j, k, 4 ); - GLchan *rgba = (GLchan *) texel; + GLchan *rgba = (GLchan *)texel; rgba[RCOMP] = src[2]; rgba[GCOMP] = src[1]; rgba[BCOMP] = src[0]; @@ -141,9 +182,22 @@ static void gld_fetch_2d_texel_X8R8G8B8( //--------------------------------------------------------------------------- +static void gld_fetch_2d_texel_f_X8R8G8B8( + const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLchan *src = CHAN_SRC( texImage, i, j, k, 4 ); + texel[RCOMP] = CHAN_TO_FLOAT(src[0]); + texel[GCOMP] = CHAN_TO_FLOAT(src[1]); + texel[BCOMP] = CHAN_TO_FLOAT(src[2]); + texel[ACOMP] = 1.f; +} + +//--------------------------------------------------------------------------- + static void gld_fetch_2d_texel_X1R5G5B5( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLushort *src = USHORT_SRC( texImage, i, j, k ); GLchan *rgba = (GLchan *) texel; GLushort s = *src; @@ -155,9 +209,23 @@ static void gld_fetch_2d_texel_X1R5G5B5( //--------------------------------------------------------------------------- +static void gld_fetch_2d_texel_f_X1R5G5B5( + const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLushort *src = USHORT_SRC( texImage, i, j, k ); + GLushort s = *src; + texel[RCOMP] = UBYTE_TO_FLOAT( ((s >> 10) & 0xf8) * 255 / 0xf8 ); + texel[GCOMP] = UBYTE_TO_FLOAT( ((s >> 5) & 0xf8) * 255 / 0xf8 ); + texel[BCOMP] = UBYTE_TO_FLOAT( ((s ) & 0xf8) * 255 / 0xf8 ); + texel[ACOMP] = 1.f; +} + +//--------------------------------------------------------------------------- + static void gld_fetch_2d_texel_X4R4G4B4( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLushort *src = USHORT_SRC( texImage, i, j, k ); GLchan *rgba = (GLchan *) texel; GLushort s = *src; @@ -169,6 +237,20 @@ static void gld_fetch_2d_texel_X4R4G4B4( //--------------------------------------------------------------------------- +static void gld_fetch_2d_texel_f_X4R4G4B4( + const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLushort *src = USHORT_SRC( texImage, i, j, k ); + GLushort s = *src; + texel[RCOMP] = UBYTE_TO_FLOAT( ((s >> 8) & 0xf) * 255 / 0xf ); + texel[GCOMP] = UBYTE_TO_FLOAT( ((s >> 4) & 0xf) * 255 / 0xf ); + texel[BCOMP] = UBYTE_TO_FLOAT( ((s ) & 0xf) * 255 / 0xf ); + texel[ACOMP] = 1.f; +} + +//--------------------------------------------------------------------------- + #undef CHAN_SRC #undef UBYTE_SRC #undef USHORT_SRC @@ -195,10 +277,10 @@ static void gld_fetch_2d_texel_X4R4G4B4( static void gld_fetch_3d_texel_X8R8G8B8( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLchan *src = CHAN_SRC( texImage, i, j, k, 4 ); - GLchan *rgba = (GLchan *) texel; + GLchan *rgba = (GLchan *)texel; rgba[RCOMP] = src[2]; rgba[GCOMP] = src[1]; rgba[BCOMP] = src[0]; @@ -207,9 +289,22 @@ static void gld_fetch_3d_texel_X8R8G8B8( //--------------------------------------------------------------------------- +static void gld_fetch_3d_texel_f_X8R8G8B8( + const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLchan *src = CHAN_SRC( texImage, i, j, k, 4 ); + texel[RCOMP] = CHAN_TO_FLOAT(src[0]); + texel[GCOMP] = CHAN_TO_FLOAT(src[1]); + texel[BCOMP] = CHAN_TO_FLOAT(src[2]); + texel[ACOMP] = 1.f; +} + +//--------------------------------------------------------------------------- + static void gld_fetch_3d_texel_X1R5G5B5( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLushort *src = USHORT_SRC( texImage, i, j, k ); GLchan *rgba = (GLchan *) texel; GLushort s = *src; @@ -221,9 +316,23 @@ static void gld_fetch_3d_texel_X1R5G5B5( //--------------------------------------------------------------------------- +static void gld_fetch_3d_texel_f_X1R5G5B5( + const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLushort *src = USHORT_SRC( texImage, i, j, k ); + GLushort s = *src; + texel[RCOMP] = UBYTE_TO_FLOAT( ((s >> 10) & 0xf8) * 255 / 0xf8 ); + texel[GCOMP] = UBYTE_TO_FLOAT( ((s >> 5) & 0xf8) * 255 / 0xf8 ); + texel[BCOMP] = UBYTE_TO_FLOAT( ((s ) & 0xf8) * 255 / 0xf8 ); + texel[ACOMP] = 1.f; +} + +//--------------------------------------------------------------------------- + static void gld_fetch_3d_texel_X4R4G4B4( const struct gl_texture_image *texImage, - GLint i, GLint j, GLint k, GLvoid *texel ) + GLint i, GLint j, GLint k, GLchan *texel ) { const GLushort *src = USHORT_SRC( texImage, i, j, k ); GLchan *rgba = (GLchan *) texel; GLushort s = *src; @@ -235,6 +344,20 @@ static void gld_fetch_3d_texel_X4R4G4B4( //--------------------------------------------------------------------------- +static void gld_fetch_3d_texel_f_X4R4G4B4( + const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLushort *src = USHORT_SRC( texImage, i, j, k ); + GLushort s = *src; + texel[RCOMP] = UBYTE_TO_FLOAT( ((s >> 8) & 0xf) * 255 / 0xf ); + texel[GCOMP] = UBYTE_TO_FLOAT( ((s >> 4) & 0xf) * 255 / 0xf ); + texel[BCOMP] = UBYTE_TO_FLOAT( ((s ) & 0xf) * 255 / 0xf ); + texel[ACOMP] = 1.f; +} + +//--------------------------------------------------------------------------- + #undef CHAN_SRC #undef UBYTE_SRC #undef USHORT_SRC @@ -247,7 +370,7 @@ static void gld_fetch_3d_texel_X4R4G4B4( const struct gl_texture_format _gld_texformat_X8R8G8B8 = { MESA_FORMAT_ARGB8888, /* MesaFormat */ GL_RGBA, /* BaseFormat */ -// GL_UNSIGNED_BYTE, /* Type */ + GL_UNSIGNED_NORMALIZED_ARB, /* DataType */ 8, /* RedBits */ 8, /* GreenBits */ 8, /* BlueBits */ @@ -257,15 +380,19 @@ const struct gl_texture_format _gld_texformat_X8R8G8B8 = { 0, /* IndexBits */ 0, /* DepthBits */ 4, /* TexelBytes */ + _mesa_texstore_argb8888, /* StoreTexImageFunc */ gld_fetch_1d_texel_X8R8G8B8, /* FetchTexel1D */ gld_fetch_2d_texel_X8R8G8B8, /* FetchTexel2D */ gld_fetch_3d_texel_X8R8G8B8, /* FetchTexel3D */ + gld_fetch_1d_texel_f_X8R8G8B8, /* FetchTexel1Df */ + gld_fetch_2d_texel_f_X8R8G8B8, /* FetchTexel2Df */ + gld_fetch_3d_texel_f_X8R8G8B8, /* FetchTexel3Df */ }; const struct gl_texture_format _gld_texformat_X1R5G5B5 = { MESA_FORMAT_ARGB1555, /* MesaFormat */ GL_RGBA, /* BaseFormat */ -// GL_UNSIGNED_SHORT_1_5_5_5_REV, /* Type */ + GL_UNSIGNED_NORMALIZED_ARB, /* DataType */ 5, /* RedBits */ 5, /* GreenBits */ 5, /* BlueBits */ @@ -275,15 +402,19 @@ const struct gl_texture_format _gld_texformat_X1R5G5B5 = { 0, /* IndexBits */ 0, /* DepthBits */ 2, /* TexelBytes */ + _mesa_texstore_argb1555, /* StoreTexImageFunc */ gld_fetch_1d_texel_X1R5G5B5, /* FetchTexel1D */ gld_fetch_2d_texel_X1R5G5B5, /* FetchTexel2D */ gld_fetch_3d_texel_X1R5G5B5, /* FetchTexel3D */ + gld_fetch_1d_texel_f_X1R5G5B5, /* FetchTexel1Df */ + gld_fetch_2d_texel_f_X1R5G5B5, /* FetchTexel2Df */ + gld_fetch_3d_texel_f_X1R5G5B5, /* FetchTexel3Df */ }; const struct gl_texture_format _gld_texformat_X4R4G4B4 = { MESA_FORMAT_ARGB4444, /* MesaFormat */ GL_RGBA, /* BaseFormat */ -// GL_UNSIGNED_SHORT_4_4_4_4_REV, /* Type */ + GL_UNSIGNED_NORMALIZED_ARB, /* DataType */ 4, /* RedBits */ 4, /* GreenBits */ 4, /* BlueBits */ @@ -293,9 +424,13 @@ const struct gl_texture_format _gld_texformat_X4R4G4B4 = { 0, /* IndexBits */ 0, /* DepthBits */ 2, /* TexelBytes */ + _mesa_texstore_argb4444, /* StoreTexImageFunc */ gld_fetch_1d_texel_X4R4G4B4, /* FetchTexel1D */ gld_fetch_2d_texel_X4R4G4B4, /* FetchTexel2D */ gld_fetch_3d_texel_X4R4G4B4, /* FetchTexel3D */ + gld_fetch_1d_texel_f_X4R4G4B4, /* FetchTexel1Df */ + gld_fetch_2d_texel_f_X4R4G4B4, /* FetchTexel2Df */ + gld_fetch_3d_texel_f_X4R4G4B4, /* FetchTexel3Df */ }; //--------------------------------------------------------------------------- @@ -869,6 +1004,10 @@ void gld_DrawPixels_DX9( HRESULT hr; D3DLOCKED_RECT d3dLockedRect; + const struct gl_texture_format *MesaFormat; + + MesaFormat = _mesa_choose_tex_format(ctx, format, format, type); + // Mesa does not currently handle this format. if (format == GL_BGR) return; @@ -900,7 +1039,7 @@ void gld_DrawPixels_DX9( } // unpack image, apply transfer ops and store directly in texture - _mesa_transfer_teximage( + MesaFormat->StoreImage( ctx, 2, GL_RGBA, @@ -1063,9 +1202,9 @@ void gld_ReadPixels_DX9( // We need to flip the data. Yuck. // Perhaps Mesa has a span packer we can use in future... for (i=0; i<height; i++) { - BYTE *pDestRow = (BYTE*)_mesa_image_address2d(pack, dest, width, height, format, type, 0, i, 0); + BYTE *pDestRow = (BYTE*)_mesa_image_address(2,pack, dest, width, height, format, type, 0, i, 0); BYTE *pSrcRow = (BYTE*)d3dLockedRect.pBits + (d3dLockedRect.Pitch * (height-i-1)); - _mesa_transfer_teximage( + MesaFormat->StoreImage( ctx, 2, GL_RGBA, // base format @@ -1254,7 +1393,7 @@ void gld_Bitmap_DX9( for (i=0; i<height; i++) { GLubyte byte; pBits = (D3DCOLOR*)((BYTE*)d3dLockedRect.pBits + (i*d3dLockedRect.Pitch)); - src = (const GLubyte *) _mesa_image_address2d( + src = (const GLubyte *) _mesa_image_address(2, &ctx->DefaultPacking, pTempBitmap, width, height, GL_COLOR_INDEX, GL_BITMAP, 0, i, 0); for (j=0; j<(width>>3); j++) { @@ -1278,7 +1417,7 @@ void gld_Bitmap_DX9( /* // unpack image, apply transfer ops and store directly in texture - _mesa_transfer_teximage( + texImage->TexFormat->StoreImage( ctx, 2, GL_BITMAP, @@ -1483,7 +1622,7 @@ void gld_TexImage2D_DX9( return; } // unpack image, apply transfer ops and store in tempImage - _mesa_transfer_teximage(ctx, 2, texImage->Format, + texImage->TexFormat->StoreImage(ctx, 2, texImage->Format, &_mesa_texformat_argb8888, // dest format tempImage, width, height, 1, 0, 0, 0, @@ -1571,7 +1710,7 @@ void gld_TexImage2D_DX9( } // unpack image, apply transfer ops and store directly in texture - _mesa_transfer_teximage( + texImage->TexFormat->StoreImage( ctx, 2, texImage->Format, @@ -1643,7 +1782,7 @@ void gld_TexSubImage2D( GLcontext *ctx, GLenum target, GLint level, } // unpack image, apply transfer ops and store in tempImage - _mesa_transfer_teximage(ctx, 2, texImage->Format, + texImage->TexFormat->StoreImage(ctx, 2, texImage->Format, &_mesa_texformat_argb8888, // dest format tempImage, width, height, 1, 0, 0, 0, @@ -1724,7 +1863,7 @@ void gld_TexSubImage2D_DX9( GLcontext *ctx, GLenum target, GLint level, } // unpack image, apply transfer ops and store directly in texture - _mesa_transfer_teximage(ctx, 2, texImage->Format, + texImage->TexFormat->StoreImage(ctx, 2, texImage->Format, _gldMesaFormatForD3DFormat(d3dsd.Format), d3dLockedRect.pBits, width, height, 1, diff --git a/src/mesa/drivers/windows/gldirect/dx9/gld_vb_mesa_render_dx9.c b/src/mesa/drivers/windows/gldirect/dx9/gld_vb_mesa_render_dx9.c index ac7d2ccefd7..1dff553a4a7 100644 --- a/src/mesa/drivers/windows/gldirect/dx9/gld_vb_mesa_render_dx9.c +++ b/src/mesa/drivers/windows/gldirect/dx9/gld_vb_mesa_render_dx9.c @@ -1,4 +1,4 @@ -/* $Id: gld_vb_mesa_render_dx9.c,v 1.3 2005/04/14 16:58:25 bencrossman Exp $ */ +/* $Id: gld_vb_mesa_render_dx9.c,v 1.4 2005/04/15 17:17:47 bencrossman Exp $ */ /* * Mesa 3-D graphics library @@ -440,40 +440,7 @@ static void _gld_mesa_render_stage_check( GLcontext *ctx, struct tnl_pipeline_stage *stage) { - GLuint inputs = VERT_BIT_CLIP; - GLuint i; - - if (ctx->Visual.rgbMode) { - inputs |= VERT_BIT_COLOR0; - - if (ctx->_TriangleCaps & DD_SEPARATE_SPECULAR) - inputs |= VERT_BIT_COLOR1; //VERT_BIT_SPEC_RGB; - - //if (ctx->Texture._ReallyEnabled) { - for (i=0; i<ctx->Const.MaxTextureUnits; i++) { - if (ctx->Texture.Unit[i]._ReallyEnabled) - inputs |= VERT_BIT_TEX(i); - } - //} - } else { - inputs |= VERT_BIT_INDEX; - } - - if (ctx->Point._Attenuated) - inputs |= VERT_BIT_POINT_SIZE; - - /* How do drivers turn this off? - */ - if (ctx->Fog.Enabled) - inputs |= VERT_BIT_FOG; // VERT_FOG_COORD; - - if (ctx->_TriangleCaps & DD_TRI_UNFILLED) - inputs |= VERT_BIT_EDGEFLAG; - - if (ctx->RenderMode==GL_FEEDBACK) - inputs |= VERT_BITS_TEX_ANY; - - stage->inputs = inputs; + stage->inputs = TNL_CONTEXT(ctx)->render_inputs; } //--------------------------------------------------------------------------- diff --git a/src/mesa/drivers/windows/gldirect/dx9/gld_wgl_dx9.c b/src/mesa/drivers/windows/gldirect/dx9/gld_wgl_dx9.c index 86c4e305551..dc465c54185 100644 --- a/src/mesa/drivers/windows/gldirect/dx9/gld_wgl_dx9.c +++ b/src/mesa/drivers/windows/gldirect/dx9/gld_wgl_dx9.c @@ -258,7 +258,7 @@ HRESULT _gldCreatePrimitiveBuffer( // If CVA (Compiled Vertex Array) is used by an OpenGL app, then we // will need enough vertices to cater for Mesa::Const.MaxArrayLockSize. // We'll use IMM_SIZE if it's larger (which it should not be). - dwMaxVertices = (IMM_SIZE < MAX_ARRAY_LOCK_SIZE) ? MAX_ARRAY_LOCK_SIZE : IMM_SIZE; + dwMaxVertices = MAX_ARRAY_LOCK_SIZE; // Now calculate how many vertices to allow for in total // 1 per point, 2 per line, 6 per quad = 9 diff --git a/src/mesa/drivers/windows/gldirect/mesasw/gld_wgl_mesasw.c b/src/mesa/drivers/windows/gldirect/mesasw/gld_wgl_mesasw.c index b4e4029b237..0f11b4fe513 100644 --- a/src/mesa/drivers/windows/gldirect/mesasw/gld_wgl_mesasw.c +++ b/src/mesa/drivers/windows/gldirect/mesasw/gld_wgl_mesasw.c @@ -53,6 +53,7 @@ #include "mtypes.h" #include "texformat.h" #include "texstore.h" +#include "teximage.h" #include "array_cache/acache.h" #include "swrast/swrast.h" #include "swrast_setup/swrast_setup.h" @@ -706,7 +707,7 @@ static clear(GLcontext* ctx, GLbitfield mask, if ((mask & (DD_FRONT_LEFT_BIT | DD_BACK_RIGHT_BIT)) && ctx->DrawBuffer->UseSoftwareAlphaBuffers && ctx->Color.ColorMask[ACOMP]) { - _mesa_clear_alpha_buffers( ctx ); + _swrast_clear_alpha_buffers( ctx ); } if (*colorMask == 0xffffffff && ctx->Color.IndexMask == 0xffffffff) { |