Ignore:
Timestamp:
May 23, 2000, 10:41:28 PM (25 years ago)
Author:
jeroen
Message:

* empty log message *

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/opengl/mesa/3dfx/fxsetup.c

    r2938 r3598  
    33/*
    44 * Mesa 3-D graphics library
    5  * Version:  3.1
     5 * Version:  3.3
    66 *
    77 * Copyright (C) 1999  Brian Paul   All Rights Reserved.
     
    5757
    5858static GLuint fxGetTexSetConfiguration(GLcontext *ctx,
    59                                 struct gl_texture_object *tObj0,
    60                                 struct gl_texture_object *tObj1);
     59                                struct gl_texture_object *tObj0,
     60                                struct gl_texture_object *tObj1);
    6161static void fxSetupTextureSingleTMU_NoLock(GLcontext *ctx, GLuint textureset);
    62 static void fxSetupTextureSingleTMU(GLcontext *ctx, GLuint textureset);
    63 static void fxSetupDoubleTMU_NoLock(fxMesaContext fxMesa,
    64                              struct gl_texture_object *tObj0,
    65                              struct gl_texture_object *tObj1);
     62static void fxSetupDoubleTMU_NoLock(fxMesaContext fxMesa,
     63                             struct gl_texture_object *tObj0,
     64                             struct gl_texture_object *tObj1);
     65static void fxSetupTexture_NoLock(GLcontext *ctx);
     66static void fxSetupTexture(GLcontext *ctx);
    6667static void fxSetupBlend(GLcontext *ctx);
    6768static void fxSetupDepthTest(GLcontext *ctx);
    68 static void fxFogTableGenerate(GLcontext *ctx);
    69 static void fxSetupFog(GLcontext *ctx, GLboolean forceTableRebuild);
    7069static void fxSetupScissor(GLcontext *ctx);
    7170static void fxSetupCull(GLcontext *ctx);
     
    8584  if(ti->validated) {
    8685     if (MESA_VERBOSE&VERBOSE_DRIVER) {
    87         fprintf(stderr,"fxmesa: fxTexValidate(...) End (validated=GL_TRUE)\n");
     86        fprintf(stderr,"fxmesa: fxTexValidate(...) End (validated=GL_TRUE)\n");
    8887     }
    8988    return;
     
    9594
    9695  fxTexGetInfo(tObj->Image[minl]->Width, tObj->Image[minl]->Height,
    97                &(FX_largeLodLog2(ti->info)), &(FX_aspectRatioLog2(ti->info)),
    98                &(ti->sScale), &(ti->tScale),
    99                &(ti->int_sScale), &(ti->int_tScale),           
    100                NULL, NULL);
     96               &(FX_largeLodLog2(ti->info)), &(FX_aspectRatioLog2(ti->info)),
     97               &(ti->sScale), &(ti->tScale),
     98               &(ti->int_sScale), &(ti->int_tScale),
     99               NULL, NULL);
    101100
    102101  if((tObj->MinFilter!=GL_NEAREST) && (tObj->MinFilter!=GL_LINEAR))
    103102    fxTexGetInfo(tObj->Image[maxl]->Width,tObj->Image[maxl]->Height,
    104                 &(FX_smallLodLog2(ti->info)),NULL,
    105                 NULL,NULL,
    106                 NULL,NULL,
    107                 NULL,NULL);
     103                &(FX_smallLodLog2(ti->info)),NULL,
     104                NULL,NULL,
     105                NULL,NULL,
     106                NULL,NULL);
    108107  else
    109108    FX_smallLodLog2(ti->info)=FX_largeLodLog2(ti->info);
    110109
    111   fxTexGetFormat(tObj->Image[minl]->Format,&(ti->info.format),&(ti->baseLevelInternalFormat));
     110  fxTexGetFormat(tObj->Image[minl]->IntFormat,&(ti->info.format),&(ti->baseLevelInternalFormat));
    112111
    113112  switch (tObj->WrapS) {
     
    147146static void fxPrintUnitsMode( const char *msg, GLuint mode )
    148147{
    149    fprintf(stderr, 
    150            "%s: (0x%x) %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s\n",
    151            msg,
    152            mode,
    153            (mode & FX_UM_E0_REPLACE)         ? "E0_REPLACE, " : "",
    154            (mode & FX_UM_E0_MODULATE)        ? "E0_MODULATE, " : "",
    155            (mode & FX_UM_E0_DECAL)           ? "E0_DECAL, " : "",
    156            (mode & FX_UM_E0_BLEND)           ? "E0_BLEND, " : "",
    157            (mode & FX_UM_E1_REPLACE)         ? "E1_REPLACE, " : "",
    158            (mode & FX_UM_E1_MODULATE)        ? "E1_MODULATE, " : "",
    159            (mode & FX_UM_E1_DECAL)           ? "E1_DECAL, " : "",
    160            (mode & FX_UM_E1_BLEND)           ? "E1_BLEND, " : "",
    161            (mode & FX_UM_E0_ALPHA)           ? "E0_ALPHA, " : "",
    162            (mode & FX_UM_E0_LUMINANCE)       ? "E0_LUMINANCE, " : "",
    163            (mode & FX_UM_E0_LUMINANCE_ALPHA) ? "E0_LUMINANCE_ALPHA, " : "",
    164            (mode & FX_UM_E0_INTENSITY)       ? "E0_INTENSITY, " : "",
    165            (mode & FX_UM_E0_RGB)             ? "E0_RGB, " : "",
    166            (mode & FX_UM_E0_RGBA)            ? "E0_RGBA, " : "",
    167            (mode & FX_UM_E1_ALPHA)           ? "E1_ALPHA, " : "",
    168            (mode & FX_UM_E1_LUMINANCE)       ? "E1_LUMINANCE, " : "",
    169            (mode & FX_UM_E1_LUMINANCE_ALPHA) ? "E1_LUMINANCE_ALPHA, " : "",
    170            (mode & FX_UM_E1_INTENSITY)       ? "E1_INTENSITY, " : "",
    171            (mode & FX_UM_E1_RGB)             ? "E1_RGB, " : "",
    172            (mode & FX_UM_E1_RGBA)            ? "E1_RGBA, " : "",
    173            (mode & FX_UM_COLOR_ITERATED)     ? "COLOR_ITERATED, " : "",
    174            (mode & FX_UM_COLOR_CONSTANT)     ? "COLOR_CONSTANT, " : "",
    175            (mode & FX_UM_ALPHA_ITERATED)     ? "ALPHA_ITERATED, " : "",
    176            (mode & FX_UM_ALPHA_CONSTANT)     ? "ALPHA_CONSTANT, " : "");
     148   fprintf(stderr,
     149           "%s: (0x%x) %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s\n",
     150           msg,
     151           mode,
     152           (mode & FX_UM_E0_REPLACE)         ? "E0_REPLACE, " : "",
     153           (mode & FX_UM_E0_MODULATE)        ? "E0_MODULATE, " : "",
     154           (mode & FX_UM_E0_DECAL)           ? "E0_DECAL, " : "",
     155           (mode & FX_UM_E0_BLEND)           ? "E0_BLEND, " : "",
     156           (mode & FX_UM_E1_REPLACE)         ? "E1_REPLACE, " : "",
     157           (mode & FX_UM_E1_MODULATE)        ? "E1_MODULATE, " : "",
     158           (mode & FX_UM_E1_DECAL)           ? "E1_DECAL, " : "",
     159           (mode & FX_UM_E1_BLEND)           ? "E1_BLEND, " : "",
     160           (mode & FX_UM_E0_ALPHA)           ? "E0_ALPHA, " : "",
     161           (mode & FX_UM_E0_LUMINANCE)       ? "E0_LUMINANCE, " : "",
     162           (mode & FX_UM_E0_LUMINANCE_ALPHA) ? "E0_LUMINANCE_ALPHA, " : "",
     163           (mode & FX_UM_E0_INTENSITY)       ? "E0_INTENSITY, " : "",
     164           (mode & FX_UM_E0_RGB)             ? "E0_RGB, " : "",
     165           (mode & FX_UM_E0_RGBA)            ? "E0_RGBA, " : "",
     166           (mode & FX_UM_E1_ALPHA)           ? "E1_ALPHA, " : "",
     167           (mode & FX_UM_E1_LUMINANCE)       ? "E1_LUMINANCE, " : "",
     168           (mode & FX_UM_E1_LUMINANCE_ALPHA) ? "E1_LUMINANCE_ALPHA, " : "",
     169           (mode & FX_UM_E1_INTENSITY)       ? "E1_INTENSITY, " : "",
     170           (mode & FX_UM_E1_RGB)             ? "E1_RGB, " : "",
     171           (mode & FX_UM_E1_RGBA)            ? "E1_RGBA, " : "",
     172           (mode & FX_UM_COLOR_ITERATED)     ? "COLOR_ITERATED, " : "",
     173           (mode & FX_UM_COLOR_CONSTANT)     ? "COLOR_CONSTANT, " : "",
     174           (mode & FX_UM_ALPHA_ITERATED)     ? "ALPHA_ITERATED, " : "",
     175           (mode & FX_UM_ALPHA_CONSTANT)     ? "ALPHA_CONSTANT, " : "");
    177176}
    178177
    179178static GLuint fxGetTexSetConfiguration(GLcontext *ctx,
    180                                        struct gl_texture_object *tObj0,
    181                                        struct gl_texture_object *tObj1)
     179                                       struct gl_texture_object *tObj0,
     180                                       struct gl_texture_object *tObj1)
    182181{
    183182  GLuint unitsmode=0;
     
    198197    unitsmode|=FX_UM_COLOR_CONSTANT;
    199198
     199  /*
     200     OpenGL Feeds Texture 0 into Texture 1
     201     Glide Feeds Texture 1 into Texture 0
     202  */
    200203  if(tObj0) {
    201204    tfxTexInfo *ti0=fxTMGetTexInfo(tObj0);
     
    310313{
    311314  tfxTexInfo *ti=fxTMGetTexInfo(tObj);
    312 
     315  int tmu;
     316
     317  /* Make sure we're not loaded incorrectly */
     318  if (ti->isInTM) {
     319    if (ti->LODblend) {
     320      if (ti->whichTMU!=FX_TMU_SPLIT)
     321        fxTMMoveOutTM(fxMesa, tObj);
     322    } else {
     323      if (ti->whichTMU==FX_TMU_SPLIT)
     324        fxTMMoveOutTM(fxMesa, tObj);
     325    }
     326  }
     327
     328  /* Make sure we're loaded correctly */
    313329  if (!ti->isInTM) {
    314330    if (ti->LODblend)
     
    316332    else {
    317333      if (fxMesa->haveTwoTMUs) {
    318 #if 0
    319         /* This path is disabled because we're not correctly setting up
    320            the second TMU as the only texture unit. It is arguable if this
    321            fallback is ever really a win, because when we use the second
    322            TMU we have to do setup for both TMU0 and TMU1 which is extra
    323            work. We could just flush a texture from TMU0 instead. */
    324         if (fxMesa->freeTexMem[FX_TMU0] >
    325             FX_grTexTextureMemRequired_NoLock(GR_MIPMAPLEVELMASK_BOTH,
    326                                               &(ti->info))) {
    327           fxTMMoveInTM_NoLock(fxMesa,tObj, FX_TMU0);
    328         } else {
    329           fxTMMoveInTM_NoLock(fxMesa,tObj, FX_TMU1);
    330         }
    331 #else
    332         fxTMMoveInTM_NoLock(fxMesa, tObj, FX_TMU0);
    333 #endif
     334        if (fxMesa->freeTexMem[FX_TMU0] >
     335            FX_grTexTextureMemRequired_NoLock(GR_MIPMAPLEVELMASK_BOTH,
     336                                              &(ti->info))) {
     337          fxTMMoveInTM_NoLock(fxMesa,tObj, FX_TMU0);
     338        } else {
     339          fxTMMoveInTM_NoLock(fxMesa,tObj, FX_TMU1);
     340        }
    334341      } else
    335         fxTMMoveInTM_NoLock(fxMesa,tObj,FX_TMU0);
     342        fxTMMoveInTM_NoLock(fxMesa,tObj,FX_TMU0);
    336343    }
    337344  }
     
    340347    if ((ti->info.format==GR_TEXFMT_P_8) && (!fxMesa->haveGlobalPaletteTexture)) {
    341348       if (MESA_VERBOSE&VERBOSE_DRIVER) {
    342           fprintf(stderr,"fxmesa: uploading texture palette\n");
     349          fprintf(stderr,"fxmesa: uploading texture palette\n");
    343350       }
    344351      FX_grTexDownloadTable_NoLock(GR_TMU0,GR_TEXTABLE_PALETTE,&(ti->palette));
     
    354361
    355362    FX_grTexSource_NoLock(GR_TMU0,ti->tm[FX_TMU0]->startAddr,
    356                           GR_MIPMAPLEVELMASK_ODD,&(ti->info));
     363                          GR_MIPMAPLEVELMASK_ODD,&(ti->info));
    357364    FX_grTexSource_NoLock(GR_TMU1,ti->tm[FX_TMU1]->startAddr,
    358                           GR_MIPMAPLEVELMASK_EVEN,&(ti->info));
     365                          GR_MIPMAPLEVELMASK_EVEN,&(ti->info));
    359366  } else {
     367    if (ti->whichTMU==FX_TMU_BOTH) tmu=FX_TMU0;
     368    else tmu=ti->whichTMU;
     369
    360370    if((ti->info.format==GR_TEXFMT_P_8) && (!fxMesa->haveGlobalPaletteTexture)) {
    361371       if (MESA_VERBOSE&VERBOSE_DRIVER) {
    362           fprintf(stderr,"fxmesa: uploading texture palette\n");
     372          fprintf(stderr,"fxmesa: uploading texture palette\n");
    363373       }
    364       FX_grTexDownloadTable_NoLock(ti->whichTMU,GR_TEXTABLE_PALETTE,&(ti->palette));
     374      FX_grTexDownloadTable_NoLock(tmu, GR_TEXTABLE_PALETTE, &(ti->palette));
    365375    }
    366376
    367377    /* KW: The alternative is to do the download to the other tmu.  If
    368378     * we get to this point, I think it means we are thrashing the
    369      * texture memory, so perhaps it's not a good idea. 
     379     * texture memory, so perhaps it's not a good idea.
    370380     */
    371381    if (ti->LODblend && (MESA_VERBOSE&VERBOSE_DRIVER))
    372382       fprintf(stderr, "fxmesa: not blending texture - only on one tmu\n");
    373383
    374     FX_grTexClampMode_NoLock(ti->whichTMU,ti->sClamp,ti->tClamp);
    375     FX_grTexFilterMode_NoLock(ti->whichTMU,ti->minFilt,ti->maxFilt);
    376     FX_grTexMipMapMode_NoLock(ti->whichTMU,ti->mmMode,FXFALSE);
    377 
    378     FX_grTexSource_NoLock(ti->whichTMU,
    379                           ti->tm[ti->whichTMU]->startAddr,
    380                           GR_MIPMAPLEVELMASK_BOTH,&(ti->info));
    381   }
    382 }
    383 
    384 static void fxSetupSingleTMU(fxMesaContext fxMesa, struct gl_texture_object *tObj) {
    385   BEGIN_BOARD_LOCK();
    386   fxSetupSingleTMU_NoLock(fxMesa, tObj);
    387   END_BOARD_LOCK();
    388 }
    389 
    390 static void fxSelectSingleTMUSrc_NoLock(fxMesaContext fxMesa, GLint tmu,
    391                                         FxBool LODblend)
    392 {
    393    if (MESA_VERBOSE&VERBOSE_DRIVER) {
    394       fprintf(stderr,"fxmesa: fxSelectSingleTMUSrc(%d,%d)\n",tmu,LODblend);
    395    }
    396 
    397   if(LODblend) {
     384    FX_grTexClampMode_NoLock(tmu, ti->sClamp, ti->tClamp);
     385    FX_grTexFilterMode_NoLock(tmu, ti->minFilt, ti->maxFilt);
     386    FX_grTexMipMapMode_NoLock(tmu, ti->mmMode, FXFALSE);
     387
     388    FX_grTexSource_NoLock(tmu, ti->tm[tmu]->startAddr,
     389                          GR_MIPMAPLEVELMASK_BOTH, &(ti->info));
     390  }
     391}
     392
     393static void fxSelectSingleTMUSrc_NoLock(fxMesaContext fxMesa, GLint tmu,
     394                                        FxBool LODblend)
     395{
     396  if (MESA_VERBOSE&VERBOSE_DRIVER) {
     397    fprintf(stderr,"fxmesa: fxSelectSingleTMUSrc(%d,%d)\n",tmu,LODblend);
     398  }
     399
     400  if (LODblend) {
    398401    FX_grTexCombine_NoLock(GR_TMU0,
    399                            GR_COMBINE_FUNCTION_BLEND,
    400                            GR_COMBINE_FACTOR_ONE_MINUS_LOD_FRACTION,
    401                            GR_COMBINE_FUNCTION_BLEND,
    402                            GR_COMBINE_FACTOR_ONE_MINUS_LOD_FRACTION,
    403                            FXFALSE,FXFALSE);
    404 
    405     FX_grTexCombine_NoLock(GR_TMU1,
    406                            GR_COMBINE_FUNCTION_LOCAL,GR_COMBINE_FACTOR_NONE,
    407                            GR_COMBINE_FUNCTION_LOCAL,GR_COMBINE_FACTOR_NONE,
    408                            FXFALSE,FXFALSE);
     402                           GR_COMBINE_FUNCTION_BLEND,
     403                           GR_COMBINE_FACTOR_ONE_MINUS_LOD_FRACTION,
     404                           GR_COMBINE_FUNCTION_BLEND,
     405                           GR_COMBINE_FACTOR_ONE_MINUS_LOD_FRACTION,
     406                           FXFALSE,FXFALSE);
     407
     408    if (fxMesa->haveTwoTMUs)
     409      FX_grTexCombine_NoLock(GR_TMU1,
     410                             GR_COMBINE_FUNCTION_LOCAL,GR_COMBINE_FACTOR_NONE,
     411                             GR_COMBINE_FUNCTION_LOCAL,GR_COMBINE_FACTOR_NONE,
     412                             FXFALSE,FXFALSE);
    409413    fxMesa->tmuSrc=FX_TMU_SPLIT;
    410   } else {
    411     if(tmu==FX_TMU0) {
     414  }
     415  else {
     416    if (tmu!=FX_TMU1) {
    412417      FX_grTexCombine_NoLock(GR_TMU0,
    413                              GR_COMBINE_FUNCTION_LOCAL,GR_COMBINE_FACTOR_NONE,
    414                              GR_COMBINE_FUNCTION_LOCAL,GR_COMBINE_FACTOR_NONE,
    415                              FXFALSE,FXFALSE);
     418                             GR_COMBINE_FUNCTION_LOCAL,GR_COMBINE_FACTOR_NONE,
     419                             GR_COMBINE_FUNCTION_LOCAL,GR_COMBINE_FACTOR_NONE,
     420                             FXFALSE,FXFALSE);
     421      if (fxMesa->haveTwoTMUs) {
     422        FX_grTexCombine_NoLock(GR_TMU1,
     423                               GR_COMBINE_FUNCTION_ZERO, GR_COMBINE_FACTOR_NONE,
     424                               GR_COMBINE_FUNCTION_ZERO, GR_COMBINE_FACTOR_NONE,
     425                               FXFALSE,FXFALSE);
     426      }
    416427      fxMesa->tmuSrc=FX_TMU0;
    417     } else {
     428    }
     429    else {
    418430      FX_grTexCombine_NoLock(GR_TMU1,
    419                              GR_COMBINE_FUNCTION_LOCAL,GR_COMBINE_FACTOR_NONE,
    420                              GR_COMBINE_FUNCTION_LOCAL,GR_COMBINE_FACTOR_NONE,
    421                              FXFALSE,FXFALSE);
    422    
     431                             GR_COMBINE_FUNCTION_LOCAL,GR_COMBINE_FACTOR_NONE,
     432                             GR_COMBINE_FUNCTION_LOCAL,GR_COMBINE_FACTOR_NONE,
     433                             FXFALSE,FXFALSE);
     434
    423435      /* GR_COMBINE_FUNCTION_SCALE_OTHER doesn't work ?!? */
    424    
     436
    425437      FX_grTexCombine_NoLock(GR_TMU0,
    426                              GR_COMBINE_FUNCTION_BLEND,
    427                              GR_COMBINE_FACTOR_ONE,
    428                              GR_COMBINE_FUNCTION_BLEND,
    429                              GR_COMBINE_FACTOR_ONE,
    430                              FXFALSE,FXFALSE);
    431    
     438                             GR_COMBINE_FUNCTION_BLEND,
     439                             GR_COMBINE_FACTOR_ONE,
     440                             GR_COMBINE_FUNCTION_BLEND,
     441                             GR_COMBINE_FACTOR_ONE,
     442                             FXFALSE,FXFALSE);
     443
    432444      fxMesa->tmuSrc=FX_TMU1;
    433445    }
     
    443455  tfxTexInfo *ti;
    444456  struct gl_texture_object *tObj=ctx->Texture.Unit[textureset].CurrentD[2];
     457  int tmu;
    445458
    446459  if (MESA_VERBOSE&VERBOSE_DRIVER) {
     
    454467  fxSetupSingleTMU_NoLock(fxMesa,tObj);
    455468
    456   if(fxMesa->tmuSrc!=ti->whichTMU)
    457     fxSelectSingleTMUSrc_NoLock(fxMesa,ti->whichTMU,ti->LODblend);
     469  if (ti->whichTMU==FX_TMU_BOTH) tmu=FX_TMU0;
     470  else tmu=ti->whichTMU;
     471  if (fxMesa->tmuSrc!=tmu)
     472    fxSelectSingleTMUSrc_NoLock(fxMesa, tmu, ti->LODblend);
    458473
    459474  if(textureset==0 || !fxMesa->haveTwoTMUs)
     
    484499  if (MESA_VERBOSE & (VERBOSE_DRIVER|VERBOSE_TEXTURE))
    485500     fprintf(stderr, "fxMesa: fxSetupTextureSingleTMU, envmode is %s\n",
    486              gl_lookup_enum_by_nr(ctx->Texture.Unit[textureset].EnvMode));
     501             gl_lookup_enum_by_nr(ctx->Texture.Unit[textureset].EnvMode));
    487502
    488503  switch(ctx->Texture.Unit[textureset].EnvMode) {
    489504  case GL_DECAL:
    490505    FX_grAlphaCombine_NoLock(GR_COMBINE_FUNCTION_LOCAL,
    491                              GR_COMBINE_FACTOR_NONE,
    492                              locala,
    493                              GR_COMBINE_OTHER_NONE,
    494                              FXFALSE);
     506                             GR_COMBINE_FACTOR_NONE,
     507                             locala,
     508                             GR_COMBINE_OTHER_NONE,
     509                             FXFALSE);
    495510
    496511    FX_grColorCombine_NoLock(GR_COMBINE_FUNCTION_BLEND,
    497                              GR_COMBINE_FACTOR_TEXTURE_ALPHA,
    498                              localc,
    499                              GR_COMBINE_OTHER_TEXTURE,
    500                              FXFALSE);
     512                             GR_COMBINE_FACTOR_TEXTURE_ALPHA,
     513                             localc,
     514                             GR_COMBINE_OTHER_TEXTURE,
     515                             FXFALSE);
    501516    break;
    502517  case GL_MODULATE:
    503518    FX_grAlphaCombine_NoLock(GR_COMBINE_FUNCTION_SCALE_OTHER,
    504                              GR_COMBINE_FACTOR_LOCAL,
    505                              locala,
    506                              GR_COMBINE_OTHER_TEXTURE,
    507                              FXFALSE);
     519                             GR_COMBINE_FACTOR_LOCAL,
     520                             locala,
     521                             GR_COMBINE_OTHER_TEXTURE,
     522                             FXFALSE);
    508523
    509524    if(ifmt==GL_ALPHA)
    510525      FX_grColorCombine_NoLock(GR_COMBINE_FUNCTION_LOCAL,
    511                                GR_COMBINE_FACTOR_NONE,
    512                                localc,
    513                                GR_COMBINE_OTHER_NONE,
    514                                FXFALSE);
     526                               GR_COMBINE_FACTOR_NONE,
     527                               localc,
     528                               GR_COMBINE_OTHER_NONE,
     529                               FXFALSE);
    515530    else
    516531      FX_grColorCombine_NoLock(GR_COMBINE_FUNCTION_SCALE_OTHER,
    517                                GR_COMBINE_FACTOR_LOCAL,
    518                                localc,
    519                                GR_COMBINE_OTHER_TEXTURE,
    520                                FXFALSE);
     532                               GR_COMBINE_FACTOR_LOCAL,
     533                               localc,
     534                               GR_COMBINE_OTHER_TEXTURE,
     535                               FXFALSE);
    521536    break;
    522537  case GL_BLEND:
     538#if 0
    523539    FX_grAlphaCombine_NoLock(GR_COMBINE_FUNCTION_SCALE_OTHER,
    524                              GR_COMBINE_FACTOR_LOCAL,
    525                              locala,
    526                              GR_COMBINE_OTHER_TEXTURE,
    527                              FXFALSE);
     540                             GR_COMBINE_FACTOR_LOCAL,
     541                             locala,
     542                             GR_COMBINE_OTHER_TEXTURE,
     543                             FXFALSE);
    528544    if (ifmt==GL_ALPHA)
    529545      FX_grColorCombine_NoLock(GR_COMBINE_FUNCTION_LOCAL,
    530                                GR_COMBINE_FACTOR_NONE,
    531                                localc,
    532                                GR_COMBINE_OTHER_NONE,
    533                                FXFALSE);
     546                               GR_COMBINE_FACTOR_NONE,
     547                               localc,
     548                               GR_COMBINE_OTHER_NONE,
     549                               FXFALSE);
    534550    else
    535551      FX_grColorCombine_NoLock(GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
    536                                GR_COMBINE_FACTOR_LOCAL,
    537                                localc,
    538                                GR_COMBINE_OTHER_TEXTURE,
    539                                FXTRUE);
    540     /*ctx->Driver.MultipassFunc = fxMultipassBlend;*/
     552                               GR_COMBINE_FACTOR_LOCAL,
     553                               localc,
     554                               GR_COMBINE_OTHER_TEXTURE,
     555                               FXTRUE);
     556    ctx->Driver.MultipassFunc = fxMultipassBlend;
     557#else
     558#ifndef FX_SILENT
     559    fprintf(stderr,"fx Driver: GL_BLEND not yet supported\n");
     560#endif
     561#endif
    541562    break;
    542563  case GL_REPLACE:
    543564    if((ifmt==GL_RGB) || (ifmt==GL_LUMINANCE))
    544565      FX_grAlphaCombine_NoLock(GR_COMBINE_FUNCTION_LOCAL,
    545                                GR_COMBINE_FACTOR_NONE,
    546                                locala,
    547                                GR_COMBINE_OTHER_NONE,
    548                                FXFALSE);
     566                               GR_COMBINE_FACTOR_NONE,
     567                               locala,
     568                               GR_COMBINE_OTHER_NONE,
     569                               FXFALSE);
    549570    else
    550571      FX_grAlphaCombine_NoLock(GR_COMBINE_FUNCTION_SCALE_OTHER,
    551                                GR_COMBINE_FACTOR_ONE,
    552                                locala,
    553                                GR_COMBINE_OTHER_TEXTURE,
    554                                FXFALSE);
    555    
     572                               GR_COMBINE_FACTOR_ONE,
     573                               locala,
     574                               GR_COMBINE_OTHER_TEXTURE,
     575                               FXFALSE);
     576
    556577    if(ifmt==GL_ALPHA)
    557578      FX_grColorCombine_NoLock(GR_COMBINE_FUNCTION_LOCAL,
    558                                GR_COMBINE_FACTOR_NONE,
    559                                localc,
    560                                GR_COMBINE_OTHER_NONE,
    561                                FXFALSE);
     579                               GR_COMBINE_FACTOR_NONE,
     580                               localc,
     581                               GR_COMBINE_OTHER_NONE,
     582                               FXFALSE);
    562583    else
    563584      FX_grColorCombine_NoLock(GR_COMBINE_FUNCTION_SCALE_OTHER,
    564                                GR_COMBINE_FACTOR_ONE,
    565                                localc,
    566                                GR_COMBINE_OTHER_TEXTURE,
    567                                FXFALSE);
     585                               GR_COMBINE_FACTOR_ONE,
     586                               localc,
     587                               GR_COMBINE_OTHER_TEXTURE,
     588                               FXFALSE);
    568589    break;
    569590  default:
     
    587608/************************* Double Texture Set ***************************/
    588609
    589 static void fxSetupDoubleTMU_NoLock(fxMesaContext fxMesa, 
    590                                     struct gl_texture_object *tObj0,
    591                                     struct gl_texture_object *tObj1)
     610static void fxSetupDoubleTMU_NoLock(fxMesaContext fxMesa,
     611                                    struct gl_texture_object *tObj0,
     612                                    struct gl_texture_object *tObj1)
    592613{
    593614#define T0_NOT_IN_TMU  0x01
     
    601622  tfxTexInfo *ti1=fxTMGetTexInfo(tObj1);
    602623  GLuint tstate=0;
     624  int tmu0=0, tmu1=1;
    603625
    604626  if (MESA_VERBOSE&VERBOSE_DRIVER) {
     
    606628  }
    607629
    608   if(ti0->isInTM) {
    609     if(ti0->whichTMU==FX_TMU0)
     630  /* We shouldn't need to do this. There is something wrong with
     631     mutlitexturing when the TMUs are swapped. So, we're forcing
     632     them to always be loaded correctly. !!! */
     633  if (ti0->whichTMU==FX_TMU1)
     634    fxTMMoveOutTM_NoLock(fxMesa, tObj0);
     635  if (ti1->whichTMU==FX_TMU0)
     636    fxTMMoveOutTM_NoLock(fxMesa, tObj1);
     637
     638  if (ti0->isInTM) {
     639    switch (ti0->whichTMU) {
     640    case FX_TMU0:
    610641      tstate|=T0_IN_TMU0;
    611     else if(ti0->whichTMU==FX_TMU1)
     642      break;
     643    case FX_TMU1:
    612644      tstate|=T0_IN_TMU1;
    613     else {
    614       fxTMMoveOutTM(fxMesa,tObj0);
     645      break;
     646    case FX_TMU_BOTH:
     647      tstate|=T0_IN_TMU0|T0_IN_TMU1;
     648      break;
     649    case FX_TMU_SPLIT:
    615650      tstate|=T0_NOT_IN_TMU;
    616     }
    617   } else
    618     tstate|=T0_NOT_IN_TMU;
    619 
    620   if(ti1->isInTM) {
    621     if(ti1->whichTMU==FX_TMU0)
     651      break;
     652    }
     653  } else tstate|=T0_NOT_IN_TMU;
     654
     655  if (ti1->isInTM) {
     656    switch (ti1->whichTMU) {
     657    case FX_TMU0:
    622658      tstate|=T1_IN_TMU0;
    623     else if(ti1->whichTMU==FX_TMU1)
     659      break;
     660    case FX_TMU1:
    624661      tstate|=T1_IN_TMU1;
    625     else {
    626       fxTMMoveOutTM(fxMesa,tObj1);
     662      break;
     663    case FX_TMU_BOTH:
     664      tstate|=T1_IN_TMU0|T1_IN_TMU1;
     665      break;
     666    case FX_TMU_SPLIT:
    627667      tstate|=T1_NOT_IN_TMU;
    628     }
    629   } else
    630     tstate|=T1_NOT_IN_TMU;
     668      break;
     669    }
     670  } else tstate|=T1_NOT_IN_TMU;
    631671
    632672  ti0->lastTimeUsed=fxMesa->texBindNumber;
    633673  ti1->lastTimeUsed=fxMesa->texBindNumber;
    634674
    635   /* Move texture maps in TMUs */
    636 
    637   switch(tstate) {
    638   case (T0_IN_TMU0 | T1_IN_TMU0):
    639     fxTMMoveOutTM(fxMesa,tObj1);
    640 
    641     fxTMMoveInTM_NoLock(fxMesa,tObj1,FX_TMU1);
    642     break;
    643 
    644   case (T0_IN_TMU1 | T1_IN_TMU1):
    645     fxTMMoveOutTM(fxMesa,tObj0);
    646 
    647     fxTMMoveInTM_NoLock(fxMesa,tObj0,FX_TMU0);
    648     break;
    649 
    650   case (T0_NOT_IN_TMU | T1_NOT_IN_TMU):
    651     fxTMMoveInTM_NoLock(fxMesa,tObj0,FX_TMU0);
    652     fxTMMoveInTM_NoLock(fxMesa,tObj1,FX_TMU1);
    653     break;
    654 
    655     /*** T0/T1 ***/
    656 
    657   case (T0_NOT_IN_TMU | T1_IN_TMU0):
    658     fxTMMoveInTM_NoLock(fxMesa,tObj0,FX_TMU1);
    659     break;
    660 
    661   case (T0_NOT_IN_TMU | T1_IN_TMU1):
    662     fxTMMoveInTM_NoLock(fxMesa,tObj0,FX_TMU0);
    663     break;
    664 
    665   case (T0_IN_TMU0 | T1_NOT_IN_TMU):
    666     fxTMMoveInTM_NoLock(fxMesa,tObj1,FX_TMU1);
    667     break;
    668 
    669   case (T0_IN_TMU1 | T1_NOT_IN_TMU):
    670     fxTMMoveInTM_NoLock(fxMesa,tObj1,FX_TMU0);
    671     break;
    672 
    673     /*** Best Case ***/
    674 
    675   case (T0_IN_TMU1 | T1_IN_TMU0):
    676   case (T0_IN_TMU0 | T1_IN_TMU1):
    677     break;
    678 
    679   default:
    680     fprintf(stderr,"fx Driver: internal error in fxSetupDoubleTMU()\n");
    681     fxCloseHardware();
    682     exit(-1);
    683     break;
     675  /* Move texture maps into TMUs */
     676
     677  if (!(((tstate&T0_IN_TMU0) && (tstate&T1_IN_TMU1)) ||
     678        ((tstate&T0_IN_TMU1) && (tstate&T1_IN_TMU0)))) {
     679    if (tObj0==tObj1) fxTMMoveInTM_NoLock(fxMesa, tObj1, FX_TMU_BOTH);
     680    else {
     681      /* Find the minimal way to correct the situation */
     682      if ((tstate&T0_IN_TMU0) || (tstate&T1_IN_TMU1)) {
     683        /* We have one in the standard order, setup the other */
     684        if (tstate&T0_IN_TMU0) { /* T0 is in TMU0, put T1 in TMU1 */
     685          fxTMMoveInTM_NoLock(fxMesa, tObj1, FX_TMU1);
     686        } else {
     687          fxTMMoveInTM_NoLock(fxMesa, tObj0, FX_TMU0);
     688        }
     689        /* tmu0 and tmu1 are setup */
     690      } else if ((tstate&T0_IN_TMU1) || (tstate&T1_IN_TMU0)) {
     691        /* we have one in the reverse order, setup the other */
     692        if (tstate&T1_IN_TMU0) { /* T1 is in TMU0, put T0 in TMU1 */
     693          fxTMMoveInTM_NoLock(fxMesa, tObj0, FX_TMU1);
     694        } else {
     695          fxTMMoveInTM_NoLock(fxMesa, tObj1, FX_TMU0);
     696        }
     697        tmu0=1;
     698        tmu1=0;
     699      } else { /* Nothing is loaded */
     700        fxTMMoveInTM_NoLock(fxMesa, tObj0, FX_TMU0);
     701        fxTMMoveInTM_NoLock(fxMesa, tObj1, FX_TMU1);
     702        /* tmu0 and tmu1 are setup */
     703      }
     704    }
    684705  }
    685706
     
    687708    if (ti0->info.format==GR_TEXFMT_P_8) {
    688709       if (MESA_VERBOSE&VERBOSE_DRIVER) {
    689           fprintf(stderr,"fxmesa: uploading texture palette TMU0\n");
     710          fprintf(stderr,"fxmesa: uploading texture palette TMU0\n");
    690711       }
    691        FX_grTexDownloadTable_NoLock(ti0->whichTMU,GR_TEXTABLE_PALETTE,&(ti0->palette));
     712       FX_grTexDownloadTable_NoLock(tmu0, GR_TEXTABLE_PALETTE, &(ti0->palette));
    692713    }
    693714
    694715    if (ti1->info.format==GR_TEXFMT_P_8) {
    695716       if (MESA_VERBOSE&VERBOSE_DRIVER) {
    696           fprintf(stderr,"fxmesa: uploading texture palette TMU1\n");
     717          fprintf(stderr,"fxmesa: uploading texture palette TMU1\n");
    697718       }
    698        FX_grTexDownloadTable_NoLock(ti1->whichTMU, GR_TEXTABLE_PALETTE,&(ti1->palette));
    699     }
    700   }
    701 
    702   FX_grTexSource_NoLock(ti0->whichTMU,
    703                         ti0->tm[ti0->whichTMU]->startAddr,
    704                         GR_MIPMAPLEVELMASK_BOTH,&(ti0->info));
    705   FX_grTexClampMode_NoLock(ti0->whichTMU,ti0->sClamp,ti0->tClamp);
    706   FX_grTexFilterMode_NoLock(ti0->whichTMU,ti0->minFilt,ti0->maxFilt);
    707   FX_grTexMipMapMode_NoLock(ti0->whichTMU,ti0->mmMode,FXFALSE);
    708 
    709   FX_grTexSource_NoLock(ti1->whichTMU,
    710                         ti1->tm[ti1->whichTMU]->startAddr,
    711                         GR_MIPMAPLEVELMASK_BOTH,&(ti1->info));
    712   FX_grTexClampMode_NoLock(ti1->whichTMU,ti1->sClamp,ti1->tClamp);
    713   FX_grTexFilterMode_NoLock(ti1->whichTMU,ti1->minFilt,ti1->maxFilt);
    714   FX_grTexMipMapMode_NoLock(ti1->whichTMU,ti1->mmMode,FXFALSE);
     719       FX_grTexDownloadTable_NoLock(tmu1, GR_TEXTABLE_PALETTE, &(ti1->palette));
     720    }
     721  }
     722
     723  FX_grTexSource_NoLock(tmu0, ti0->tm[tmu0]->startAddr,
     724                        GR_MIPMAPLEVELMASK_BOTH, &(ti0->info));
     725  FX_grTexClampMode_NoLock(tmu0, ti0->sClamp, ti0->tClamp);
     726  FX_grTexFilterMode_NoLock(tmu0, ti0->minFilt, ti0->maxFilt);
     727  FX_grTexMipMapMode_NoLock(tmu0, ti0->mmMode, FXFALSE);
     728
     729  FX_grTexSource_NoLock(tmu1, ti1->tm[tmu1]->startAddr,
     730                        GR_MIPMAPLEVELMASK_BOTH, &(ti1->info));
     731  FX_grTexClampMode_NoLock(tmu1, ti1->sClamp, ti1->tClamp);
     732  FX_grTexFilterMode_NoLock(tmu1, ti1->minFilt, ti1->maxFilt);
     733  FX_grTexMipMapMode_NoLock(tmu1, ti1->mmMode, FXFALSE);
    715734
    716735#undef T0_NOT_IN_TMU
     
    730749  struct gl_texture_object *tObj1=ctx->Texture.Unit[1].CurrentD[2];
    731750  GLuint envmode,ifmt,unitsmode;
     751  int tmu0=0, tmu1=1;
    732752
    733753  if (MESA_VERBOSE&VERBOSE_DRIVER) {
     
    769789  if (MESA_VERBOSE & (VERBOSE_DRIVER|VERBOSE_TEXTURE))
    770790     fprintf(stderr, "fxMesa: fxSetupTextureDoubleTMU, envmode is %s/%s\n",
    771              gl_lookup_enum_by_nr(ctx->Texture.Unit[0].EnvMode),
    772              gl_lookup_enum_by_nr(ctx->Texture.Unit[1].EnvMode));
    773 
    774 
     791             gl_lookup_enum_by_nr(ctx->Texture.Unit[0].EnvMode),
     792             gl_lookup_enum_by_nr(ctx->Texture.Unit[1].EnvMode));
     793
     794
     795  if ((ti0->whichTMU==FX_TMU1) || (ti1->whichTMU==FX_TMU0)) {
     796    tmu0=1;
     797    tmu1=0;
     798  }
    775799  fxMesa->tmuSrc=FX_TMU_BOTH;
    776800  switch(envmode) {
     
    780804
    781805      if(ti0->baseLevelInternalFormat==GL_ALPHA)
    782         isalpha[ti0->whichTMU]=GL_TRUE;
     806        isalpha[tmu0]=GL_TRUE;
    783807      else
    784         isalpha[ti0->whichTMU]=GL_FALSE;
     808        isalpha[tmu0]=GL_FALSE;
    785809
    786810      if(ti1->baseLevelInternalFormat==GL_ALPHA)
    787         isalpha[ti1->whichTMU]=GL_TRUE;
     811        isalpha[tmu1]=GL_TRUE;
    788812      else
    789         isalpha[ti1->whichTMU]=GL_FALSE;
    790        
     813        isalpha[tmu1]=GL_FALSE;
     814
    791815      if(isalpha[FX_TMU1])
    792         FX_grTexCombine_NoLock(GR_TMU1,
    793                                GR_COMBINE_FUNCTION_ZERO,
    794                                GR_COMBINE_FACTOR_NONE,
    795                                GR_COMBINE_FUNCTION_LOCAL,
    796                                GR_COMBINE_FACTOR_NONE,
    797                                FXTRUE,FXFALSE);
     816        FX_grTexCombine_NoLock(GR_TMU1,
     817                               GR_COMBINE_FUNCTION_ZERO,
     818                               GR_COMBINE_FACTOR_NONE,
     819                               GR_COMBINE_FUNCTION_LOCAL,
     820                               GR_COMBINE_FACTOR_NONE,
     821                               FXTRUE,FXFALSE);
    798822      else
    799         FX_grTexCombine_NoLock(GR_TMU1,
    800                                GR_COMBINE_FUNCTION_LOCAL,
    801                                GR_COMBINE_FACTOR_NONE,
    802                                GR_COMBINE_FUNCTION_LOCAL,
    803                                GR_COMBINE_FACTOR_NONE,
    804                                FXFALSE,FXFALSE);
     823        FX_grTexCombine_NoLock(GR_TMU1,
     824                               GR_COMBINE_FUNCTION_LOCAL,
     825                               GR_COMBINE_FACTOR_NONE,
     826                               GR_COMBINE_FUNCTION_LOCAL,
     827                               GR_COMBINE_FACTOR_NONE,
     828                               FXFALSE,FXFALSE);
    805829
    806830      if(isalpha[FX_TMU0])
    807         FX_grTexCombine_NoLock(GR_TMU0,
    808                                GR_COMBINE_FUNCTION_BLEND_OTHER,
    809                                GR_COMBINE_FACTOR_ONE,
    810                                GR_COMBINE_FUNCTION_BLEND_OTHER,
    811                                GR_COMBINE_FACTOR_LOCAL,
    812                                FXFALSE,FXFALSE);
     831        FX_grTexCombine_NoLock(GR_TMU0,
     832                               GR_COMBINE_FUNCTION_BLEND_OTHER,
     833                               GR_COMBINE_FACTOR_ONE,
     834                               GR_COMBINE_FUNCTION_BLEND_OTHER,
     835                               GR_COMBINE_FACTOR_LOCAL,
     836                               FXFALSE,FXFALSE);
    813837      else
    814         FX_grTexCombine_NoLock(GR_TMU0,
    815                                GR_COMBINE_FUNCTION_BLEND_OTHER,
    816                                GR_COMBINE_FACTOR_LOCAL,
    817                                GR_COMBINE_FUNCTION_BLEND_OTHER,
    818                                GR_COMBINE_FACTOR_LOCAL,
    819                                FXFALSE,FXFALSE);
     838        FX_grTexCombine_NoLock(GR_TMU0,
     839                               GR_COMBINE_FUNCTION_BLEND_OTHER,
     840                               GR_COMBINE_FACTOR_LOCAL,
     841                               GR_COMBINE_FUNCTION_BLEND_OTHER,
     842                               GR_COMBINE_FACTOR_LOCAL,
     843                               FXFALSE,FXFALSE);
    820844
    821845      FX_grColorCombine_NoLock(GR_COMBINE_FUNCTION_SCALE_OTHER,
    822                                GR_COMBINE_FACTOR_LOCAL,
    823                                localc,
    824                                GR_COMBINE_OTHER_TEXTURE,
    825                                FXFALSE);
     846                               GR_COMBINE_FACTOR_LOCAL,
     847                               localc,
     848                               GR_COMBINE_OTHER_TEXTURE,
     849                               FXFALSE);
    826850
    827851      FX_grAlphaCombine_NoLock(GR_COMBINE_FUNCTION_SCALE_OTHER,
    828                                GR_COMBINE_FACTOR_LOCAL,
    829                                locala,
    830                                GR_COMBINE_OTHER_TEXTURE,
    831                                FXFALSE);
     852                               GR_COMBINE_FACTOR_LOCAL,
     853                               locala,
     854                               GR_COMBINE_OTHER_TEXTURE,
     855                               FXFALSE);
    832856      break;
    833857    }
    834858  case (FX_UM_E0_REPLACE | FX_UM_E1_BLEND): /* Only for GLQuake */
    835     if(ti1->whichTMU==FX_TMU1) {
     859    if (tmu1==FX_TMU1) {
    836860      FX_grTexCombine_NoLock(GR_TMU1,
    837                              GR_COMBINE_FUNCTION_LOCAL,
    838                              GR_COMBINE_FACTOR_NONE,
    839                              GR_COMBINE_FUNCTION_LOCAL,
    840                              GR_COMBINE_FACTOR_NONE,
    841                              FXTRUE,FXFALSE);
    842                  
     861                             GR_COMBINE_FUNCTION_LOCAL,
     862                             GR_COMBINE_FACTOR_NONE,
     863                             GR_COMBINE_FUNCTION_LOCAL,
     864                             GR_COMBINE_FACTOR_NONE,
     865                             FXTRUE,FXFALSE);
     866
    843867      FX_grTexCombine_NoLock(GR_TMU0,
    844                              GR_COMBINE_FUNCTION_BLEND_OTHER,
    845                              GR_COMBINE_FACTOR_LOCAL,
    846                              GR_COMBINE_FUNCTION_BLEND_OTHER,
    847                              GR_COMBINE_FACTOR_LOCAL,
    848                              FXFALSE,FXFALSE);
     868                             GR_COMBINE_FUNCTION_BLEND_OTHER,
     869                             GR_COMBINE_FACTOR_LOCAL,
     870                             GR_COMBINE_FUNCTION_BLEND_OTHER,
     871                             GR_COMBINE_FACTOR_LOCAL,
     872                             FXFALSE,FXFALSE);
    849873    } else {
    850874      FX_grTexCombine_NoLock(GR_TMU1,
    851                              GR_COMBINE_FUNCTION_LOCAL,
    852                              GR_COMBINE_FACTOR_NONE,
    853                              GR_COMBINE_FUNCTION_LOCAL,
    854                              GR_COMBINE_FACTOR_NONE,
    855                              FXFALSE,FXFALSE);
    856                  
     875                             GR_COMBINE_FUNCTION_LOCAL,
     876                             GR_COMBINE_FACTOR_NONE,
     877                             GR_COMBINE_FUNCTION_LOCAL,
     878                             GR_COMBINE_FACTOR_NONE,
     879                             FXFALSE,FXFALSE);
     880
    857881      FX_grTexCombine_NoLock(GR_TMU0,
    858                              GR_COMBINE_FUNCTION_BLEND_OTHER,
    859                              GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
    860                              GR_COMBINE_FUNCTION_BLEND_OTHER,
    861                              GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
    862                              FXFALSE,FXFALSE);
    863     }
    864          
     882                             GR_COMBINE_FUNCTION_BLEND_OTHER,
     883                             GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
     884                             GR_COMBINE_FUNCTION_BLEND_OTHER,
     885                             GR_COMBINE_FACTOR_ONE_MINUS_LOCAL,
     886                             FXFALSE,FXFALSE);
     887    }
     888
    865889    FX_grAlphaCombine_NoLock(GR_COMBINE_FUNCTION_LOCAL,
    866                              GR_COMBINE_FACTOR_NONE,
    867                              locala,
    868                              GR_COMBINE_OTHER_NONE,
    869                              FXFALSE);
     890                             GR_COMBINE_FACTOR_NONE,
     891                             locala,
     892                             GR_COMBINE_OTHER_NONE,
     893                             FXFALSE);
    870894
    871895    FX_grColorCombine_NoLock(GR_COMBINE_FUNCTION_SCALE_OTHER,
    872                              GR_COMBINE_FACTOR_ONE,
    873                              localc,
    874                              GR_COMBINE_OTHER_TEXTURE,
    875                              FXFALSE);
     896                             GR_COMBINE_FACTOR_ONE,
     897                             localc,
     898                             GR_COMBINE_OTHER_TEXTURE,
     899                             FXFALSE);
    876900    break;
    877901  case (FX_UM_E0_REPLACE | FX_UM_E1_MODULATE): /* Quake 2 and 3 */
    878     if(ti1->whichTMU==FX_TMU1) {
     902    if (tmu1==FX_TMU1) {
    879903      FX_grTexCombine_NoLock(GR_TMU1,
    880                              GR_COMBINE_FUNCTION_LOCAL,
    881                              GR_COMBINE_FACTOR_NONE,
    882                              GR_COMBINE_FUNCTION_ZERO,
    883                              GR_COMBINE_FACTOR_NONE,
    884                              FXFALSE,FXTRUE);
    885                  
     904                             GR_COMBINE_FUNCTION_LOCAL,
     905                             GR_COMBINE_FACTOR_NONE,
     906                             GR_COMBINE_FUNCTION_ZERO,
     907                             GR_COMBINE_FACTOR_NONE,
     908                             FXFALSE,FXTRUE);
     909
    886910      FX_grTexCombine_NoLock(GR_TMU0,
    887                              GR_COMBINE_FUNCTION_BLEND_OTHER,
    888                              GR_COMBINE_FACTOR_LOCAL,
    889                              GR_COMBINE_FUNCTION_BLEND_OTHER,
    890                              GR_COMBINE_FACTOR_LOCAL,
    891                              FXFALSE,FXFALSE);
     911                             GR_COMBINE_FUNCTION_BLEND_OTHER,
     912                             GR_COMBINE_FACTOR_LOCAL,
     913                             GR_COMBINE_FUNCTION_BLEND_OTHER,
     914                             GR_COMBINE_FACTOR_LOCAL,
     915                             FXFALSE,FXFALSE);
    892916
    893917    } else {
    894918      FX_grTexCombine_NoLock(GR_TMU1,
    895                              GR_COMBINE_FUNCTION_LOCAL,
    896                              GR_COMBINE_FACTOR_NONE,
    897                              GR_COMBINE_FUNCTION_LOCAL,
    898                              GR_COMBINE_FACTOR_NONE,
    899                              FXFALSE,FXFALSE);
    900                  
     919                             GR_COMBINE_FUNCTION_LOCAL,
     920                             GR_COMBINE_FACTOR_NONE,
     921                             GR_COMBINE_FUNCTION_LOCAL,
     922                             GR_COMBINE_FACTOR_NONE,
     923                             FXFALSE,FXFALSE);
     924
    901925      FX_grTexCombine_NoLock(GR_TMU0,
    902                              GR_COMBINE_FUNCTION_BLEND_OTHER,
    903                              GR_COMBINE_FACTOR_LOCAL,
    904                              GR_COMBINE_FUNCTION_BLEND_OTHER,
    905                              GR_COMBINE_FACTOR_ONE,
    906                              FXFALSE,FXFALSE);
    907     }
    908          
     926                             GR_COMBINE_FUNCTION_BLEND_OTHER,
     927                             GR_COMBINE_FACTOR_LOCAL,
     928                             GR_COMBINE_FUNCTION_BLEND_OTHER,
     929                             GR_COMBINE_FACTOR_ONE,
     930                             FXFALSE,FXFALSE);
     931    }
     932
    909933    if(ti0->baseLevelInternalFormat==GL_RGB)
    910934      FX_grAlphaCombine_NoLock(GR_COMBINE_FUNCTION_LOCAL,
    911                                GR_COMBINE_FACTOR_NONE,
    912                                locala,
    913                                GR_COMBINE_OTHER_NONE,
    914                                FXFALSE);
     935                               GR_COMBINE_FACTOR_NONE,
     936                               locala,
     937                               GR_COMBINE_OTHER_NONE,
     938                               FXFALSE);
    915939    else
    916940      FX_grAlphaCombine_NoLock(GR_COMBINE_FUNCTION_SCALE_OTHER,
    917                                GR_COMBINE_FACTOR_ONE,
    918                                locala,
    919                                GR_COMBINE_OTHER_NONE,
    920                                FXFALSE);
     941                               GR_COMBINE_FACTOR_ONE,
     942                               locala,
     943                               GR_COMBINE_OTHER_NONE,
     944                               FXFALSE);
    921945
    922946
    923947    FX_grColorCombine_NoLock(GR_COMBINE_FUNCTION_SCALE_OTHER,
    924                              GR_COMBINE_FACTOR_ONE,
    925                              localc,
    926                              GR_COMBINE_OTHER_TEXTURE,
    927                              FXFALSE);
    928     break;
    929  
     948                             GR_COMBINE_FACTOR_ONE,
     949                             localc,
     950                             GR_COMBINE_OTHER_TEXTURE,
     951                             FXFALSE);
     952    break;
     953
    930954
    931955  case (FX_UM_E0_MODULATE | FX_UM_E1_ADD): /* Quake 3 Sky */
     
    934958
    935959      if(ti0->baseLevelInternalFormat==GL_ALPHA)
    936         isalpha[ti0->whichTMU]=GL_TRUE;
     960        isalpha[tmu0]=GL_TRUE;
    937961      else
    938         isalpha[ti0->whichTMU]=GL_FALSE;
     962        isalpha[tmu0]=GL_FALSE;
    939963
    940964      if(ti1->baseLevelInternalFormat==GL_ALPHA)
    941         isalpha[ti1->whichTMU]=GL_TRUE;
     965        isalpha[tmu1]=GL_TRUE;
    942966      else
    943         isalpha[ti1->whichTMU]=GL_FALSE;
    944        
     967        isalpha[tmu1]=GL_FALSE;
     968
    945969      if(isalpha[FX_TMU1])
    946         FX_grTexCombine_NoLock(GR_TMU1,
    947                                GR_COMBINE_FUNCTION_ZERO,
    948                                GR_COMBINE_FACTOR_NONE,
    949                                GR_COMBINE_FUNCTION_LOCAL,
    950                                GR_COMBINE_FACTOR_NONE,
    951                                FXTRUE,FXFALSE);
     970        FX_grTexCombine_NoLock(GR_TMU1,
     971                               GR_COMBINE_FUNCTION_ZERO,
     972                               GR_COMBINE_FACTOR_NONE,
     973                               GR_COMBINE_FUNCTION_LOCAL,
     974                               GR_COMBINE_FACTOR_NONE,
     975                               FXTRUE,FXFALSE);
    952976      else
    953         FX_grTexCombine_NoLock(GR_TMU1,
    954                                GR_COMBINE_FUNCTION_LOCAL,
    955                                GR_COMBINE_FACTOR_NONE,
    956                                GR_COMBINE_FUNCTION_LOCAL,
    957                                GR_COMBINE_FACTOR_NONE,
    958                                FXFALSE,FXFALSE);
     977        FX_grTexCombine_NoLock(GR_TMU1,
     978                               GR_COMBINE_FUNCTION_LOCAL,
     979                               GR_COMBINE_FACTOR_NONE,
     980                               GR_COMBINE_FUNCTION_LOCAL,
     981                               GR_COMBINE_FACTOR_NONE,
     982                               FXFALSE,FXFALSE);
    959983
    960984      if(isalpha[FX_TMU0])
    961         FX_grTexCombine_NoLock(GR_TMU0,
    962                                GR_COMBINE_FUNCTION_SCALE_OTHER,
    963                                GR_COMBINE_FACTOR_ONE,
    964                                GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
    965                                GR_COMBINE_FACTOR_ONE,
    966                                FXFALSE,FXFALSE);
     985        FX_grTexCombine_NoLock(GR_TMU0,
     986                               GR_COMBINE_FUNCTION_SCALE_OTHER,
     987                               GR_COMBINE_FACTOR_ONE,
     988                               GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
     989                               GR_COMBINE_FACTOR_ONE,
     990                               FXFALSE,FXFALSE);
    967991      else
    968         FX_grTexCombine_NoLock(GR_TMU0,
    969                                GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
    970                                GR_COMBINE_FACTOR_ONE,
    971                                GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
    972                                GR_COMBINE_FACTOR_ONE,
    973                                FXFALSE,FXFALSE);
     992        FX_grTexCombine_NoLock(GR_TMU0,
     993                               GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
     994                               GR_COMBINE_FACTOR_ONE,
     995                               GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,
     996                               GR_COMBINE_FACTOR_ONE,
     997                               FXFALSE,FXFALSE);
    974998
    975999      FX_grColorCombine_NoLock(GR_COMBINE_FUNCTION_SCALE_OTHER,
    976                                GR_COMBINE_FACTOR_LOCAL,
    977                                localc,
    978                                GR_COMBINE_OTHER_TEXTURE,
    979                                FXFALSE);
     1000                               GR_COMBINE_FACTOR_LOCAL,
     1001                               localc,
     1002                               GR_COMBINE_OTHER_TEXTURE,
     1003                               FXFALSE);
    9801004
    9811005      FX_grAlphaCombine_NoLock(GR_COMBINE_FUNCTION_SCALE_OTHER,
    982                                GR_COMBINE_FACTOR_LOCAL,
    983                                locala,               
    984                                GR_COMBINE_OTHER_TEXTURE,
    985                                FXFALSE);
    986       break;
    987     }
    988    
     1006                               GR_COMBINE_FACTOR_LOCAL,
     1007                               locala,
     1008                               GR_COMBINE_OTHER_TEXTURE,
     1009                               FXFALSE);
     1010      break;
     1011    }
     1012  default:
     1013    fprintf(stderr, "Unexpected dual texture mode encountered\n");
     1014    break;
    9891015  }
    9901016
     
    10121038  else
    10131039    locala=GR_COMBINE_LOCAL_CONSTANT;
    1014  
     1040
    10151041  if(ctx->Light.ShadeModel==GL_SMOOTH)
    10161042    localc=GR_COMBINE_LOCAL_ITERATED;
    10171043  else
    10181044    localc=GR_COMBINE_LOCAL_CONSTANT;
    1019  
     1045
    10201046  FX_grAlphaCombine_NoLock(GR_COMBINE_FUNCTION_LOCAL,
    1021                            GR_COMBINE_FACTOR_NONE,
    1022                            locala,
    1023                            GR_COMBINE_OTHER_NONE,
    1024                            FXFALSE);
     1047                           GR_COMBINE_FACTOR_NONE,
     1048                           locala,
     1049                           GR_COMBINE_OTHER_NONE,
     1050                           FXFALSE);
    10251051
    10261052  FX_grColorCombine_NoLock(GR_COMBINE_FUNCTION_LOCAL,
    1027                            GR_COMBINE_FACTOR_NONE,
    1028                            localc,
    1029                            GR_COMBINE_OTHER_NONE,
    1030                            FXFALSE);
     1053                           GR_COMBINE_FACTOR_NONE,
     1054                           localc,
     1055                           GR_COMBINE_OTHER_NONE,
     1056                           FXFALSE);
    10311057
    10321058  fxMesa->lastUnitsMode=FX_UM_NONE;
     
    10371063/************************************************************************/
    10381064
    1039 void fxSetupTexture_NoLock(GLcontext *ctx)
     1065static void fxSetupTexture_NoLock(GLcontext *ctx)
    10401066{
    10411067  fxMesaContext fxMesa=(fxMesaContext)ctx->DriverCtx;
     
    10511077
    10521078  /* Texture Combine, Color Combine and Alpha Combine.
    1053    */ 
     1079   */
    10541080  tex2Denabled = (ctx->Texture.ReallyEnabled & TEXTURE0_2D);
    10551081
    10561082  if (fxMesa->emulateTwoTMUs)
    10571083     tex2Denabled |= (ctx->Texture.ReallyEnabled & TEXTURE1_2D);
    1058  
     1084
    10591085  switch(tex2Denabled) {
    10601086  case TEXTURE0_2D:
    1061     fxSetupTextureSingleTMU_NoLock(ctx,0);   
     1087    fxSetupTextureSingleTMU_NoLock(ctx,0);
    10621088    break;
    10631089  case TEXTURE1_2D:
     
    10661092  case (TEXTURE0_2D|TEXTURE1_2D):
    10671093     if (fxMesa->haveTwoTMUs)
    1068         fxSetupTextureDoubleTMU_NoLock(ctx);
     1094        fxSetupTextureDoubleTMU_NoLock(ctx);
    10691095     else {
    1070         if (MESA_VERBOSE&VERBOSE_DRIVER)
    1071            fprintf(stderr, "fxmesa: enabling fake multitexture\n");
    1072 
    1073         fxSetupTextureSingleTMU_NoLock(ctx,0);
    1074         ctx->Driver.MultipassFunc = fxMultipassTexture;
     1096        if (MESA_VERBOSE&VERBOSE_DRIVER)
     1097           fprintf(stderr, "fxmesa: enabling fake multitexture\n");
     1098
     1099        fxSetupTextureSingleTMU_NoLock(ctx,0);
     1100        ctx->Driver.MultipassFunc = fxMultipassTexture;
    10751101     }
    10761102    break;
     
    10811107}
    10821108
    1083 void fxSetupTexture(GLcontext *ctx) {
     1109static void fxSetupTexture(GLcontext *ctx) {
    10841110  BEGIN_BOARD_LOCK();
    10851111  fxSetupTexture_NoLock(ctx);
     
    11811207    break;
    11821208  case GL_DST_ALPHA:
    1183     dfact=GR_BLEND_DST_ALPHA;
     1209    /* dfact=GR_BLEND_DST_ALPHA; */
     1210    /* We can't do DST_ALPHA */
     1211    dfact=GR_BLEND_ONE;
    11841212    adfact=GR_BLEND_ZERO;
    11851213    break;
    11861214  case GL_ONE_MINUS_DST_ALPHA:
    1187     dfact=GR_BLEND_ONE_MINUS_DST_ALPHA;
     1215    /* dfact=GR_BLEND_ONE_MINUS_DST_ALPHA; */
     1216    /* We can't do DST_ALPHA */
     1217    dfact=GR_BLEND_ZERO;
    11881218    adfact=GR_BLEND_ZERO;
    11891219    break;
     
    12151245  if(us->blendEnabled)
    12161246     FX_grAlphaBlendFunction(us->blendSrcFuncRGB,us->blendDstFuncRGB,
    1217                           us->blendSrcFuncAlpha,us->blendDstFuncAlpha);
     1247                          us->blendSrcFuncAlpha,us->blendDstFuncAlpha);
    12181248  else
    12191249     FX_grAlphaBlendFunction(GR_BLEND_ONE,GR_BLEND_ZERO,GR_BLEND_ONE,GR_BLEND_ZERO);
    12201250}
    1221  
     1251
    12221252/************************************************************************/
    12231253/************************** Alpha Test SetUp ****************************/
     
    12581288    fprintf(stderr,"fx Driver: internal error in fxDDAlphaFunc()\n");
    12591289    fxCloseHardware();
    1260     exit(-1);
     1290    EXIT(-1);
    12611291    break;
    12621292  }
     
    13251355    fprintf(stderr,"fx Driver: internal error in fxDDDepthFunc()\n");
    13261356    fxCloseHardware();
    1327     exit(-1);
     1357    EXIT(-1);
    13281358    break;
    13291359  }
     
    13661396/************************************************************************/
    13671397
    1368 GLboolean fxDDColorMask(GLcontext *ctx, 
    1369                         GLboolean r, GLboolean g,
    1370                         GLboolean b, GLboolean a )
     1398GLboolean fxDDColorMask(GLcontext *ctx,
     1399                        GLboolean r, GLboolean g,
     1400                        GLboolean b, GLboolean a )
    13711401{
    13721402  fxMesaContext fxMesa=(fxMesaContext)ctx->DriverCtx;
     
    13741404  ctx->Driver.RenderStart = fxSetupFXUnits;
    13751405  (void) r; (void) g; (void) b; (void) a;
    1376   return 1;
     1406  return GL_FALSE;
    13771407}
    13781408
     
    13821412
    13831413  FX_grColorMask(ctx->Color.ColorMask[RCOMP] ||
    1384               ctx->Color.ColorMask[GCOMP] ||
    1385               ctx->Color.ColorMask[BCOMP],
    1386               ctx->Color.ColorMask[ACOMP] && fxMesa->haveAlphaBuffer);
     1414              ctx->Color.ColorMask[GCOMP] ||
     1415              ctx->Color.ColorMask[BCOMP],
     1416              ctx->Color.ColorMask[ACOMP] && fxMesa->haveAlphaBuffer);
    13871417}
    13881418
     
    13931423/************************************************************************/
    13941424
    1395 static void fxFogTableGenerate(GLcontext *ctx)
    1396 {
    1397   int i;
    1398   float f,eyez;
    1399   fxMesaContext fxMesa=(fxMesaContext)ctx->DriverCtx;
    1400 
    1401   for(i=0;i<FX_grGetInteger(FX_FOG_TABLE_ENTRIES);i++) {
    1402     eyez=guFogTableIndexToW(i);
    1403 
    1404     switch(ctx->Fog.Mode) {
    1405     case GL_LINEAR:
    1406       f=(ctx->Fog.End-eyez)/(ctx->Fog.End-ctx->Fog.Start);
    1407       break;
    1408     case GL_EXP:
    1409       f=exp(-ctx->Fog.Density*eyez); 
    1410       break;
    1411     case GL_EXP2:
    1412       f=exp(-ctx->Fog.Density*ctx->Fog.Density*eyez*eyez);
    1413       break;
    1414     default: /* That should never happen */
    1415       f=0.0f;
    1416       break;
    1417     }
    1418 
    1419     fxMesa->fogTable[i]=(GrFog_t)((1.0f-CLAMP(f,0.0f,1.0f))*255.0f);
    1420   }
    1421 }
    1422 
    1423 static void fxSetupFog(GLcontext *ctx, GLboolean forceTableRebuild)
    1424 {
    1425   fxMesaContext fxMesa=(fxMesaContext)ctx->DriverCtx;
    1426 
    1427   if(ctx->Fog.Enabled && ctx->FogMode==FOG_FRAGMENT) {
     1425/*
     1426 * This is called during state update in order to update the Glide fog state.
     1427 */
     1428static void fxSetupFog(GLcontext *ctx)
     1429{
     1430  if (ctx->Fog.Enabled && ctx->FogMode==FOG_FRAGMENT) {
     1431    fxMesaContext fxMesa = FX_CONTEXT(ctx);
     1432
     1433    /* update fog color */
    14281434    GLubyte col[4];
    1429     FX_grFogMode(GR_FOG_WITH_TABLE);
    1430 
    14311435    col[0]=(unsigned int)(255*ctx->Fog.Color[0]);
    14321436    col[1]=(unsigned int)(255*ctx->Fog.Color[1]);
    1433     col[2]=(unsigned int)(255*ctx->Fog.Color[2]); 
     1437    col[2]=(unsigned int)(255*ctx->Fog.Color[2]);
    14341438    col[3]=(unsigned int)(255*ctx->Fog.Color[3]);
    1435 
    14361439    FX_grFogColorValue(FXCOLOR4(col));
    14371440
    1438     if(forceTableRebuild ||
    1439        (fxMesa->fogTableMode!=ctx->Fog.Mode) ||
    1440        (fxMesa->fogDensity!=ctx->Fog.Density)) {
    1441       fxFogTableGenerate(ctx);
    1442          
    1443       fxMesa->fogTableMode=ctx->Fog.Mode;
    1444       fxMesa->fogDensity=ctx->Fog.Density;
    1445     }
    1446      
     1441    if(fxMesa->fogTableMode != ctx->Fog.Mode ||
     1442       fxMesa->fogDensity != ctx->Fog.Density ||
     1443       fxMesa->fogStart != ctx->Fog.Start ||
     1444       fxMesa->fogEnd != ctx->Fog.End) {
     1445      /* reload the fog table */
     1446      switch (ctx->Fog.Mode) {
     1447        case GL_LINEAR:
     1448          guFogGenerateLinear(fxMesa->fogTable, ctx->Fog.Start, ctx->Fog.End);
     1449          break;
     1450        case GL_EXP:
     1451          guFogGenerateExp(fxMesa->fogTable, ctx->Fog.Density);
     1452          break;
     1453        case GL_EXP2:
     1454          guFogGenerateExp2(fxMesa->fogTable, ctx->Fog.Density);
     1455          break;
     1456        default:
     1457          ;
     1458      }
     1459      fxMesa->fogTableMode = ctx->Fog.Mode;
     1460      fxMesa->fogDensity = ctx->Fog.Density;
     1461      fxMesa->fogStart = ctx->Fog.Start;
     1462      fxMesa->fogEnd = ctx->Fog.End;
     1463    }
     1464
    14471465    FX_grFogTable(fxMesa->fogTable);
    1448   } else
     1466    FX_grFogMode(GR_FOG_WITH_TABLE);
     1467  }
     1468  else {
    14491469    FX_grFogMode(GR_FOG_DISABLE);
     1470  }
    14501471}
    14511472
     
    14861507  if (xmin<fxMesa->clipMinX) xmin=fxMesa->clipMinX;
    14871508  if (xmax>fxMesa->clipMaxX) xmax=fxMesa->clipMaxX;
    1488   if (ymin<fxMesa->screen_height-fxMesa->clipMaxY) 
     1509  if (ymin<fxMesa->screen_height-fxMesa->clipMaxY)
    14891510    ymin=fxMesa->screen_height-fxMesa->clipMaxY;
    14901511  if (ymax>fxMesa->screen_height-fxMesa->clipMinY)
     
    15181539   (void) mode;
    15191540   FX_CONTEXT(ctx)->new_state |= FX_NEW_CULL;
    1520    ctx->Driver.RenderStart = fxSetupFXUnits;   
     1541   ctx->Driver.RenderStart = fxSetupFXUnits;
    15211542}
    15221543
     
    15251546   (void) mode;
    15261547   FX_CONTEXT(ctx)->new_state |= FX_NEW_CULL;
    1527    ctx->Driver.RenderStart = fxSetupFXUnits;   
     1548   ctx->Driver.RenderStart = fxSetupFXUnits;
    15281549}
    15291550
     
    15311552static void fxSetupCull(GLcontext *ctx)
    15321553{
    1533    if(ctx->Polygon.CullFlag) {
    1534       switch(ctx->Polygon.CullFaceMode) {
    1535       case GL_BACK:
    1536          if(ctx->Polygon.FrontFace==GL_CCW)
    1537             FX_grCullMode(GR_CULL_NEGATIVE);
    1538         else
    1539             FX_grCullMode(GR_CULL_POSITIVE);
    1540         break;
    1541       case GL_FRONT:
    1542         if(ctx->Polygon.FrontFace==GL_CCW)
    1543             FX_grCullMode(GR_CULL_POSITIVE);
    1544         else
    1545             FX_grCullMode(GR_CULL_NEGATIVE);
    1546         break;
    1547       case GL_FRONT_AND_BACK:
    1548          FX_grCullMode(GR_CULL_DISABLE);
    1549         break;
    1550       default:
    1551         break;
    1552       }
    1553    } else
    1554       FX_grCullMode(GR_CULL_DISABLE);
     1554  if (ctx->Polygon.CullFlag) {
     1555    switch (ctx->Polygon.CullFaceMode) {
     1556    case GL_BACK:
     1557      if (ctx->Polygon.FrontFace==GL_CCW)
     1558        FX_CONTEXT(ctx)->cullMode=GR_CULL_NEGATIVE;
     1559      else
     1560        FX_CONTEXT(ctx)->cullMode=GR_CULL_POSITIVE;
     1561      break;
     1562    case GL_FRONT:
     1563      if(ctx->Polygon.FrontFace==GL_CCW)
     1564        FX_CONTEXT(ctx)->cullMode=GR_CULL_POSITIVE;
     1565      else
     1566        FX_CONTEXT(ctx)->cullMode=GR_CULL_NEGATIVE;
     1567      break;
     1568    case GL_FRONT_AND_BACK:
     1569      FX_CONTEXT(ctx)->cullMode=GR_CULL_DISABLE;
     1570      break;
     1571    default:
     1572      break;
     1573    }
     1574  } else FX_CONTEXT(ctx)->cullMode=GR_CULL_DISABLE;
     1575  FX_grCullMode(FX_CONTEXT(ctx)->cullMode);
    15551576}
    15561577
     
    15941615     fxMesa->new_state |= FX_NEW_SCISSOR;
    15951616     ctx->Driver.RenderStart = fxSetupFXUnits;
     1617     break;
     1618  case GL_SHARED_TEXTURE_PALETTE_EXT:
     1619     fxDDTexUseGlbPalette(ctx, state);
    15961620     break;
    15971621  case GL_FOG:
     
    16041628     break;
    16051629  case GL_LINE_SMOOTH:
     1630  case GL_LINE_STIPPLE:
    16061631  case GL_POINT_SMOOTH:
    16071632  case GL_POLYGON_SMOOTH:
     
    16121637  default:
    16131638    ;  /* XXX no-op? */
    1614   }   
     1639  }
    16151640}
    16161641
     
    16361661      case GL_NEVER:
    16371662      case GL_ALWAYS:
    1638         break;
     1663        break;
    16391664      default:
    1640         fxDDDepthFunc(ctx, GL_EQUAL);
    1641         break;
     1665        fxDDDepthFunc(ctx, GL_EQUAL);
     1666        break;
    16421667      }
    16431668      fxDDDepthMask(ctx, FALSE);
     
    16461671    /* ? Set the Constant Color ? */
    16471672    fxDDEnable(ctx, GL_BLEND, GL_TRUE);
    1648     fxDDBlendFunc(ctx, ?, ?);
    1649     fxSetupTextureSingleTMU(ctx, ?);
     1673    fxDDBlendFunc(ctx, XXX, XXX);
     1674    fxSetupTextureSingleTMU(ctx, XXX);
    16501675    fxSetupBlend(ctx);
    16511676    fxSetupDepthTest(ctx);
     
    16551680    /* Reset everything back to normal */
    16561681    fxMesa->unitsState = fxMesa->restoreUnitsState;
    1657     fxMesa->setupdone &= ?;
    1658     fxSetupTextureSingleTMU(ctx, ?);
     1682    fxMesa->setupdone &= XXX;
     1683    fxSetupTextureSingleTMU(ctx, XXX);
    16591684    fxSetupBlend(ctx);
    16601685    fxSetupDepthTest(ctx);
     
    16761701 * support almost the same subset using multipass blending on the
    16771702 * voodoo 1.  In all other cases for both voodoo 1 and 2, we fall back
    1678  * to software rendering, satisfying the spec if not the user. 
     1703 * to software rendering, satisfying the spec if not the user.
    16791704 */
    16801705static GLboolean fxMultipassTexture( struct vertex_buffer *VB, GLuint pass )
     
    16881713   case 1:
    16891714      if (MESA_VERBOSE&(VERBOSE_DRIVER|VERBOSE_PIPELINE|VERBOSE_TEXTURE))
    1690         fprintf(stderr, "fxmesa: Second texture pass\n");
     1715        fprintf(stderr, "fxmesa: Second texture pass\n");
    16911716
    16921717      for ( ; v != last ; v++) {
    1693         v->f[S0COORD] = v->f[S1COORD];
    1694         v->f[T0COORD] = v->f[T1COORD];
     1718        v->f[S0COORD] = v->f[S1COORD];
     1719        v->f[T0COORD] = v->f[T1COORD];
    16951720      }
    16961721
    1697       fxMesa->restoreUnitsState = fxMesa->unitsState; 
     1722      fxMesa->restoreUnitsState = fxMesa->unitsState;
    16981723      fxMesa->tmu_source[0] = 1;
    16991724
    17001725      if (ctx->Depth.Mask) {
    1701         switch (ctx->Depth.Func) {
    1702         case GL_NEVER:
    1703         case GL_ALWAYS:
    1704             break;
    1705         default:
    1706             fxDDDepthFunc( ctx, GL_EQUAL );
    1707             break;
    1708         }
    1709 
    1710          fxDDDepthMask( ctx, GL_FALSE );
     1726        switch (ctx->Depth.Func) {
     1727        case GL_NEVER:
     1728        case GL_ALWAYS:
     1729            break;
     1730        default:
     1731            fxDDDepthFunc( ctx, GL_EQUAL );
     1732            break;
     1733        }
     1734
     1735         fxDDDepthMask( ctx, GL_FALSE );
    17111736      }
    1712      
     1737
    17131738      if (ctx->Texture.Unit[1].EnvMode == GL_MODULATE) {
    1714         fxDDEnable( ctx, GL_BLEND, GL_TRUE );
    1715         fxDDBlendFunc( ctx, GL_DST_COLOR, GL_ZERO );
     1739        fxDDEnable( ctx, GL_BLEND, GL_TRUE );
     1740        fxDDBlendFunc( ctx, GL_DST_COLOR, GL_ZERO );
    17161741      }
    17171742
    1718       fxSetupTextureSingleTMU( ctx, 1 ); 
     1743      fxSetupTextureSingleTMU( ctx, 1 );
    17191744      fxSetupBlend( ctx );
    17201745      fxSetupDepthTest( ctx );
     
    17221747
    17231748   case 2:
    1724       /* Restore original state. 
     1749      /* Restore original state.
    17251750       */
    17261751      fxMesa->tmu_source[0] = 0;
    17271752      fxMesa->unitsState = fxMesa->restoreUnitsState;
    17281753      fxMesa->setupdone &= ~SETUP_TMU0;
    1729       fxSetupTextureSingleTMU( ctx, 0 ); 
     1754      fxSetupTextureSingleTMU( ctx, 0 );
    17301755      fxSetupBlend( ctx );
    17311756      fxSetupDepthTest( ctx );
     
    17331758   }
    17341759
    1735    return pass == 1;     
     1760   return pass == 1;
    17361761}
    17371762
     
    17571782static void gl_print_fx_state_flags( const char *msg, GLuint flags )
    17581783{
    1759    fprintf(stderr, 
    1760            "%s: (0x%x) %s%s%s%s%s%s%s\n",
    1761            msg,
    1762            flags,
    1763            (flags & FX_NEW_TEXTURING)   ? "texture, " : "",
    1764            (flags & FX_NEW_BLEND)       ? "blend, " : "",
    1765            (flags & FX_NEW_ALPHA)       ? "alpha, " : "",
    1766            (flags & FX_NEW_FOG)         ? "fog, " : "",
    1767            (flags & FX_NEW_SCISSOR)     ? "scissor, " : "",
    1768            (flags & FX_NEW_COLOR_MASK)  ? "colormask, " : "",
    1769            (flags & FX_NEW_CULL)        ? "cull, " : "");
     1784   fprintf(stderr,
     1785           "%s: (0x%x) %s%s%s%s%s%s%s\n",
     1786           msg,
     1787           flags,
     1788           (flags & FX_NEW_TEXTURING)   ? "texture, " : "",
     1789           (flags & FX_NEW_BLEND)       ? "blend, " : "",
     1790           (flags & FX_NEW_ALPHA)       ? "alpha, " : "",
     1791           (flags & FX_NEW_FOG)         ? "fog, " : "",
     1792           (flags & FX_NEW_SCISSOR)     ? "scissor, " : "",
     1793           (flags & FX_NEW_COLOR_MASK)  ? "colormask, " : "",
     1794           (flags & FX_NEW_CULL)        ? "cull, " : "");
    17701795}
    17711796
     
    17801805  if (newstate) {
    17811806     if (newstate & FX_NEW_TEXTURING)
    1782         fxSetupTexture(ctx);
     1807        fxSetupTexture(ctx);
    17831808
    17841809     if (newstate & FX_NEW_BLEND)
    1785         fxSetupBlend(ctx);
     1810        fxSetupBlend(ctx);
    17861811
    17871812     if (newstate & FX_NEW_ALPHA)
    1788         fxSetupAlphaTest(ctx);
    1789      
     1813        fxSetupAlphaTest(ctx);
     1814
    17901815     if (newstate & FX_NEW_DEPTH)
    1791         fxSetupDepthTest(ctx);
     1816        fxSetupDepthTest(ctx);
    17921817
    17931818     if (newstate & FX_NEW_FOG)
    1794         fxSetupFog(ctx,GL_FALSE);
     1819        fxSetupFog(ctx);
    17951820
    17961821     if (newstate & FX_NEW_SCISSOR)
    1797         fxSetupScissor(ctx);
     1822        fxSetupScissor(ctx);
    17981823
    17991824     if (newstate & FX_NEW_COLOR_MASK)
    1800         fxSetupColorMask(ctx);
     1825        fxSetupColorMask(ctx);
    18011826
    18021827     if (newstate & FX_NEW_CULL)
    1803         fxSetupCull(ctx);     
     1828        fxSetupCull(ctx);
    18041829
    18051830     fxMesa->new_state = 0;
Note: See TracChangeset for help on using the changeset viewer.