GL_TEXTURE_1D and other stories...

This commit is contained in:
Daniel Borca 2004-01-29 15:46:02 +00:00
parent f8c31fcba3
commit 4fe1303e83
10 changed files with 114 additions and 34 deletions

View File

@ -220,5 +220,6 @@ clean:
-$(call UNLINK,swrast_setup/*.o)
-$(call UNLINK,tnl/*.o)
-$(call UNLINK,x86/*.o)
-$(call UNLINK,drivers/common/*.o)
-$(call UNLINK,drivers/dos/*.o)
-$(call UNLINK,drivers/glide/*.o)

View File

@ -217,6 +217,7 @@ clean:
-$(call UNLINK,swrast_setup/*.o)
-$(call UNLINK,tnl/*.o)
-$(call UNLINK,x86/*.o)
-$(call UNLINK,drivers/common/*.o)
-$(call UNLINK,drivers/windows/gdi/*.o)
-$(call UNLINK,drivers/glide/*.o)
-$(call UNLINK,drivers/glide/*.res)

View File

@ -249,6 +249,7 @@ TNL_SOURCES =\
tnl\t_vtx_exec.c
DRIVER_SOURCES =\
drivers\common\driverfuncs.c\
drivers\glide\fxapi.c\
drivers\glide\fxdd.c\
drivers\glide\fxddspan.c\
@ -423,6 +424,7 @@ clean::
$(RM) swrast_setup\*.obj
$(RM) tnl\*.obj
$(RM) x86\*.obj
$(RM) drivers\common\*.obj
$(RM) drivers\glide\*.obj
$(RM) drivers\glide\*.res
$(RM) $(LIBDIR)\*.pdb

View File

@ -1501,6 +1501,11 @@ fxDDInitExtensions(GLcontext * ctx)
/* core-level extensions */
#if 1
_mesa_enable_extension(ctx, "GL_ARB_vertex_buffer_object");
#endif
/* not just yet */
#if 0
_mesa_enable_extension(ctx, "GL_ARB_fragment_program");
_mesa_enable_extension(ctx, "GL_ARB_vertex_program");
#endif
}
@ -1540,6 +1545,13 @@ fx_check_IsInHardware(GLcontext * ctx)
}
}
/* [dBorca]
* We could avoid this for certain `sfactor/dfactor'
* I do not think that is even worthwhile to check
* because if someone is using blending they use more
* interesting settings and also it would add more
* state tracking to a lot of the code.
*/
if (ctx->Color.ColorLogicOpEnabled && (ctx->Color.LogicOp != GL_COPY)) {
return FX_FALLBACK_LOGICOP;
}
@ -1558,17 +1570,18 @@ fx_check_IsInHardware(GLcontext * ctx)
/* Unsupported texture/multitexture cases */
if (fxMesa->haveTwoTMUs) {
/* we can only do 2D textures */
if (ctx->Texture.Unit[0]._ReallyEnabled & ~TEXTURE_2D_BIT)
return FX_FALLBACK_TEXTURE_1D_3D;
if (ctx->Texture.Unit[1]._ReallyEnabled & ~TEXTURE_2D_BIT)
return FX_FALLBACK_TEXTURE_1D_3D;
/* we can only do 1D/2D textures */
if (ctx->Texture.Unit[0]._ReallyEnabled & ~(TEXTURE_1D_BIT|TEXTURE_2D_BIT))
return FX_FALLBACK_TEXTURE_MAP;
if (ctx->Texture.Unit[0]._ReallyEnabled & TEXTURE_2D_BIT) {
if (fxMesa->haveTwoTMUs) {
if (ctx->Texture.Unit[1]._ReallyEnabled & ~(TEXTURE_1D_BIT|TEXTURE_2D_BIT))
return FX_FALLBACK_TEXTURE_MAP;
if (ctx->Texture.Unit[0]._ReallyEnabled) {
if (fxMesa->type < GR_SSTTYPE_Voodoo2)
if (ctx->Texture.Unit[0].EnvMode == GL_BLEND &&
(ctx->Texture.Unit[1]._ReallyEnabled & TEXTURE_2D_BIT ||
(ctx->Texture.Unit[1]._ReallyEnabled ||
ctx->Texture.Unit[0].EnvColor[0] != 0 ||
ctx->Texture.Unit[0].EnvColor[1] != 0 ||
ctx->Texture.Unit[0].EnvColor[2] != 0 ||
@ -1579,7 +1592,7 @@ fx_check_IsInHardware(GLcontext * ctx)
return FX_FALLBACK_TEXTURE_BORDER;
}
if (ctx->Texture.Unit[1]._ReallyEnabled & TEXTURE_2D_BIT) {
if (ctx->Texture.Unit[1]._ReallyEnabled) {
if (fxMesa->type < GR_SSTTYPE_Voodoo2)
if (ctx->Texture.Unit[1].EnvMode == GL_BLEND)
return FX_FALLBACK_TEXTURE_ENV;
@ -1600,6 +1613,8 @@ fx_check_IsInHardware(GLcontext * ctx)
if (ctx->Texture._EnabledUnits == 0x3) {
/* Can't use multipass to blend a multitextured triangle - fall
* back to software.
* [dBorca] we hit this case only when we try to emulate
* multitexture by multipass!
*/
if (!fxMesa->haveTwoTMUs && ctx->Color.BlendEnabled) {
return FX_FALLBACK_TEXTURE_MULTI;
@ -1621,7 +1636,7 @@ fx_check_IsInHardware(GLcontext * ctx)
}
if (fxMesa->type < GR_SSTTYPE_Voodoo2)
if ((ctx->Texture.Unit[0]._ReallyEnabled & TEXTURE_2D_BIT) &&
if (ctx->Texture.Unit[0]._ReallyEnabled &&
(ctx->Texture.Unit[0].EnvMode == GL_BLEND)) {
return FX_FALLBACK_TEXTURE_ENV;
}
@ -1688,12 +1703,14 @@ fxSetupDDPointers(GLcontext * ctx)
ctx->Driver.Finish = fxDDFinish;
ctx->Driver.Flush = NULL;
ctx->Driver.ChooseTextureFormat = fxDDChooseTextureFormat;
ctx->Driver.TexImage1D = fxDDTexImage1D;
ctx->Driver.TexImage2D = fxDDTexImage2D;
ctx->Driver.TexSubImage2D = fxDDTexSubImage2D;
ctx->Driver.CompressedTexImage2D = fxDDCompressedTexImage2D;
ctx->Driver.CompressedTexSubImage2D = fxDDCompressedTexSubImage2D;
ctx->Driver.IsCompressedFormat = fxDDIsCompressedFormat;
ctx->Driver.CompressedTextureSize = fxDDCompressedTextureSize;
ctx->Driver.TestProxyTexImage = fxDDTestProxyTexImage;
ctx->Driver.TexEnv = fxDDTexEnv;
ctx->Driver.TexParameter = fxDDTexParam;
ctx->Driver.BindTexture = fxDDTexBind;

View File

@ -141,7 +141,7 @@ fxDDTexBind(GLcontext * ctx, GLenum target, struct gl_texture_object *tObj)
fprintf(stderr, "fxDDTexBind(%d, %x)\n", tObj->Name, (GLuint)tObj->DriverData);
}
if (target != GL_TEXTURE_2D)
if ((target != GL_TEXTURE_1D) && (target != GL_TEXTURE_2D))
return;
if (!tObj->DriverData) {
@ -196,7 +196,7 @@ fxDDTexParam(GLcontext * ctx, GLenum target, struct gl_texture_object *tObj,
_mesa_lookup_enum_by_nr(param));
}
if (target != GL_TEXTURE_2D)
if ((target != GL_TEXTURE_1D) && (target != GL_TEXTURE_2D))
return;
if (!tObj->DriverData)
@ -477,6 +477,9 @@ fxDDTexPalette(GLcontext * ctx, struct gl_texture_object *tObj)
fprintf(stderr, "fxDDTexPalette(%d, %x)\n",
tObj->Name, (GLuint) tObj->DriverData);
}
/* This might be a proxy texture. */
if (!tObj->Palette.Table)
return;
if (!tObj->DriverData)
tObj->DriverData = fxAllocTexObjData(fxMesa);
ti = fxTMGetTexInfo(tObj);
@ -511,6 +514,7 @@ fxDDTexUseGlbPalette(GLcontext * ctx, GLboolean state)
else {
fxMesa->haveGlobalPaletteTexture = 0;
/* [dBorca] tis beyond my comprehension */
if ((ctx->Texture.Unit[0]._Current == ctx->Texture.Unit[0].Current2D) &&
(ctx->Texture.Unit[0]._Current != NULL)) {
struct gl_texture_object *tObj = ctx->Texture.Unit[0]._Current;
@ -635,7 +639,7 @@ static GLboolean
fxIsTexSupported(GLenum target, GLint internalFormat,
const struct gl_texture_image *image)
{
if (target != GL_TEXTURE_2D)
if ((target != GL_TEXTURE_1D) && (target != GL_TEXTURE_2D))
return GL_FALSE;
#if 0
@ -1227,6 +1231,7 @@ fxDDTexImage2D(GLcontext * ctx, GLenum target, GLint level,
return;
}
}
ti = fxTMGetTexInfo(texObj);
if (!texImage->DriverData) {
texImage->DriverData = CALLOC(sizeof(tfxMipMapLevel));
@ -1235,8 +1240,6 @@ fxDDTexImage2D(GLcontext * ctx, GLenum target, GLint level,
return;
}
}
ti = fxTMGetTexInfo(texObj);
mml = FX_MIPMAP_DATA(texImage);
fxTexGetInfo(width, height, NULL, NULL, NULL, NULL,
@ -1530,6 +1533,7 @@ fxDDCompressedTexImage2D (GLcontext *ctx, GLenum target,
return;
}
}
ti = fxTMGetTexInfo(texObj);
if (!texImage->DriverData) {
texImage->DriverData = CALLOC(sizeof(tfxMipMapLevel));
@ -1538,7 +1542,6 @@ fxDDCompressedTexImage2D (GLcontext *ctx, GLenum target,
return;
}
}
ti = fxTMGetTexInfo(texObj);
mml = FX_MIPMAP_DATA(texImage);
fxTexGetInfo(width, height, NULL, NULL, NULL, NULL,
@ -1671,6 +1674,41 @@ fxDDCompressedTexSubImage2D( GLcontext *ctx, GLenum target,
}
void
fxDDTexImage1D (GLcontext *ctx, GLenum target, GLint level,
GLint internalFormat, GLint width, GLint border,
GLenum format, GLenum type, const GLvoid *pixels,
const struct gl_pixelstore_attrib *packing,
struct gl_texture_object *texObj,
struct gl_texture_image *texImage)
{
fxDDTexImage2D(ctx, target, level,
internalFormat, width, 1, border,
format, type, pixels,
packing,
texObj,
texImage);
}
GLboolean
fxDDTestProxyTexImage (GLcontext *ctx, GLenum target,
GLint level, GLint internalFormat,
GLenum format, GLenum type,
GLint width, GLint height,
GLint depth, GLint border)
{
/* [dBorca]
* TODO - maybe through fxTexValidate()
*/
return _mesa_test_proxy_teximage(ctx, target,
level, internalFormat,
format, type,
width, height,
depth, border);
}
#else /* FX */
/*

View File

@ -607,6 +607,18 @@ extern void fxDDCompressedTexSubImage2D(GLcontext *ctx, GLenum target,
GLsizei imageSize, const GLvoid *data,
struct gl_texture_object *texObj,
struct gl_texture_image *texImage);
extern void fxDDTexImage1D(GLcontext * ctx, GLenum target, GLint level,
GLint internalFormat, GLint width,
GLint border, GLenum format, GLenum type,
const GLvoid * pixels,
const struct gl_pixelstore_attrib *packing,
struct gl_texture_object *texObj,
struct gl_texture_image *texImage);
extern GLboolean fxDDTestProxyTexImage (GLcontext *ctx, GLenum target,
GLint level, GLint internalFormat,
GLenum format, GLenum type,
GLint width, GLint height,
GLint depth, GLint border);
extern void fxDDTexEnv(GLcontext *, GLenum, GLenum, const GLfloat *);
extern void fxDDTexParam(GLcontext *, GLenum, struct gl_texture_object *,
GLenum, const GLfloat *);
@ -697,7 +709,7 @@ void fxSetupDepthTest (GLcontext *ctx);
void fxSetupTexture (GLcontext *ctx);
/* Flags for software fallback cases */
#define FX_FALLBACK_TEXTURE_1D_3D 0x0001
#define FX_FALLBACK_TEXTURE_MAP 0x0001
#define FX_FALLBACK_DRAW_BUFFER 0x0002
#define FX_FALLBACK_SPECULAR 0x0004
#define FX_FALLBACK_STENCIL 0x0008

View File

@ -537,7 +537,7 @@ fxSetupTextureSingleTMU_NoLock(GLcontext * ctx, GLuint textureset)
GLuint unitsmode;
GLint ifmt;
tfxTexInfo *ti;
struct gl_texture_object *tObj = ctx->Texture.Unit[textureset].Current2D;
struct gl_texture_object *tObj = ctx->Texture.Unit[textureset]._Current;
int tmu;
if (TDFX_DEBUG & VERBOSE_DRIVER) {
@ -921,8 +921,8 @@ fxSetupTextureDoubleTMU_NoLock(GLcontext * ctx)
struct tdfx_texcombine tex0, tex1;
GrCombineLocal_t localc, locala;
tfxTexInfo *ti0, *ti1;
struct gl_texture_object *tObj0 = ctx->Texture.Unit[1].Current2D;
struct gl_texture_object *tObj1 = ctx->Texture.Unit[0].Current2D;
struct gl_texture_object *tObj0 = ctx->Texture.Unit[1]._Current;
struct gl_texture_object *tObj1 = ctx->Texture.Unit[0]._Current;
GLuint envmode, ifmt, unitsmode;
int tmu0 = 0, tmu1 = 1;
@ -1269,15 +1269,15 @@ fxSetupTexture_NoLock(GLcontext * ctx)
if (fxMesa->HaveCmbExt) {
/* Texture Combine, Color Combine and Alpha Combine. */
if (ctx->Texture.Unit[0]._ReallyEnabled == TEXTURE_2D_BIT &&
ctx->Texture.Unit[1]._ReallyEnabled == TEXTURE_2D_BIT &&
if ((ctx->Texture.Unit[0]._ReallyEnabled & (TEXTURE_1D_BIT|TEXTURE_2D_BIT)) &&
(ctx->Texture.Unit[1]._ReallyEnabled & (TEXTURE_1D_BIT|TEXTURE_2D_BIT)) &&
fxMesa->haveTwoTMUs) {
fxSetupTextureDoubleTMUNapalm_NoLock(ctx);
}
else if (ctx->Texture.Unit[0]._ReallyEnabled == TEXTURE_2D_BIT) {
else if (ctx->Texture.Unit[0]._ReallyEnabled & (TEXTURE_1D_BIT|TEXTURE_2D_BIT)) {
fxSetupTextureSingleTMUNapalm_NoLock(ctx, 0);
}
else if (ctx->Texture.Unit[1]._ReallyEnabled == TEXTURE_2D_BIT) {
else if (ctx->Texture.Unit[1]._ReallyEnabled & (TEXTURE_1D_BIT|TEXTURE_2D_BIT)) {
fxSetupTextureSingleTMUNapalm_NoLock(ctx, 1);
}
else {
@ -1285,15 +1285,15 @@ fxSetupTexture_NoLock(GLcontext * ctx)
}
} else {
/* Texture Combine, Color Combine and Alpha Combine. */
if (ctx->Texture.Unit[0]._ReallyEnabled == TEXTURE_2D_BIT &&
ctx->Texture.Unit[1]._ReallyEnabled == TEXTURE_2D_BIT &&
if ((ctx->Texture.Unit[0]._ReallyEnabled & (TEXTURE_1D_BIT|TEXTURE_2D_BIT)) &&
(ctx->Texture.Unit[1]._ReallyEnabled & (TEXTURE_1D_BIT|TEXTURE_2D_BIT)) &&
fxMesa->haveTwoTMUs) {
fxSetupTextureDoubleTMU_NoLock(ctx);
}
else if (ctx->Texture.Unit[0]._ReallyEnabled == TEXTURE_2D_BIT) {
else if (ctx->Texture.Unit[0]._ReallyEnabled & (TEXTURE_1D_BIT|TEXTURE_2D_BIT)) {
fxSetupTextureSingleTMU_NoLock(ctx, 0);
}
else if (ctx->Texture.Unit[1]._ReallyEnabled == TEXTURE_2D_BIT) {
else if (ctx->Texture.Unit[1]._ReallyEnabled & (TEXTURE_1D_BIT|TEXTURE_2D_BIT)) {
fxSetupTextureSingleTMU_NoLock(ctx, 1);
}
else {
@ -2039,6 +2039,7 @@ fxDDEnable(GLcontext * ctx, GLenum cap, GLboolean state)
case GL_LINE_STIPPLE:
case GL_POINT_SMOOTH:
case GL_POLYGON_SMOOTH:
case GL_TEXTURE_1D:
case GL_TEXTURE_2D:
fxMesa->new_state |= FX_NEW_TEXTURING;
break;

View File

@ -169,7 +169,7 @@ fxSetupTextureEnvNapalm_NoLock(GLcontext * ctx, GLuint textureset, GLuint tmu, G
GrCombineLocal_t localc, locala; /* fragmentColor/Alpha */
GLint ifmt;
tfxTexInfo *ti;
struct gl_texture_object *tObj = texUnit->Current2D;
struct gl_texture_object *tObj = texUnit->_Current;
if (TDFX_DEBUG & VERBOSE_DRIVER) {
fprintf(stderr, "fxSetupTextureEnvNapalm_NoLock(unit %u, TMU %u, iterated %d)\n",
@ -1106,7 +1106,7 @@ fxSetupTextureSingleTMUNapalm_NoLock(GLcontext * ctx, GLuint textureset)
fxMesaContext fxMesa = FX_CONTEXT(ctx);
GLuint unitsmode;
tfxTexInfo *ti;
struct gl_texture_object *tObj = ctx->Texture.Unit[textureset].Current2D;
struct gl_texture_object *tObj = ctx->Texture.Unit[textureset]._Current;
int tmu;
if (TDFX_DEBUG & VERBOSE_DRIVER) {
@ -1158,8 +1158,8 @@ fxSetupTextureDoubleTMUNapalm_NoLock(GLcontext * ctx)
{
fxMesaContext fxMesa = FX_CONTEXT(ctx);
tfxTexInfo *ti0, *ti1;
struct gl_texture_object *tObj0 = ctx->Texture.Unit[1].Current2D;
struct gl_texture_object *tObj1 = ctx->Texture.Unit[0].Current2D;
struct gl_texture_object *tObj0 = ctx->Texture.Unit[1]._Current;
struct gl_texture_object *tObj1 = ctx->Texture.Unit[0]._Current;
GLuint unitsmode;
int tmu0 = 0, tmu1 = 1;

View File

@ -1299,7 +1299,7 @@ static void fxRenderFinish( GLcontext *ctx )
/**********************************************************************/
static char *fallbackStrings[] = {
"1D/3D Texture map",
"3D/Rect/Cube Texture map",
"glDrawBuffer(GL_FRONT_AND_BACK)",
"Separate specular color",
"glEnable/Disable(GL_STENCIL_TEST)",

View File

@ -290,6 +290,14 @@ __wglMonitor(HWND hwnd, UINT message, UINT wParam, LONG lParam)
return (ret);
}
static void wgl_error (long error)
{
#define WGL_INVALID_PIXELFORMAT ERROR_INVALID_PIXEL_FORMAT
SetLastError(0xC0000000 /* error severity */
|0x00070000 /* error facility (who we are) */
|error);
}
GLAPI BOOL GLAPIENTRY
wglCopyContext(HGLRC hglrcSrc, HGLRC hglrcDst, UINT mask)
{
@ -314,7 +322,7 @@ wglCreateContext(HDC hdc)
}
if (curPFD == 0) {
SetLastError(0);
wgl_error(WGL_INVALID_PIXELFORMAT);
return (NULL);
}