A slightly less buggy version (still untested).  My incoming email seems to be
hosed...


#define CHOOSE_COLOR(FN, FNTYPE, NR, MASK, ACTIVE, ARGS1, ARGS2 )       \
static void choose_##FN ARGS1                                           \
{                                                                       \
   int key = vb.rmesa->vertex_format & (MASK|ACTIVE);                   \
   struct dynfn *dfn;                                                   \
   GLcontext *ctx = vb.context;                                         \
                                                                        \
   if (vb.rmesa->vertex_format & ACTIVE_PKCOLOR) {                      \
      ctx->Exec->FN = radeon_##FN##_ub;                                 \
   }                                                                    \
   else if ((vb.rmesa->vertex_format &                                  \
            (ACTIVE_FPCOLOR|ACTIVE_FPALPHA)) == ACTIVE_FPCOLOR) {       \
                                                                        \
      if (vb.installed_color_3f_sz != NR) {                             \
         vb.installed_color_3f_sz = NR;                                 \
         radeon_copy_to_current( ctx );                                 \
         if (NR == 3) ctx->Current.Color[3] = 1.0;                      \
         _mesa_install_exec_vtxfmt( ctx, &vb.vtxfmt );                  \
         ctx->Exec->FN ARGS2;                                           \
         return;                                                        \
      }                                                                 \
                                                                        \
      ctx->Exec->FN = radeon_##FN##_3f;                                 \
   }                                                                    \
   else {                                                               \
      ctx->Exec->FN = radeon_##FN##_4f;                                 \
   }                                                                    \
                                                                        \
                                                                        \
   dfn = lookup( &vb.dfn_cache.FN, key );                               \
   if (!dfn) dfn = vb.codegen.FN( &vb, key );                           \
                                                                        \
   if (dfn) {                                                           \
      if (RADEON_DEBUG & DEBUG_CODEGEN)                                 \
         fprintf(stderr, "%s -- codegen version\n", __FUNCTION__ );     \
      ctx->Exec->FN = (FNTYPE)dfn->code;                                \
   }                                                                    \
   else if (RADEON_DEBUG & DEBUG_CODEGEN)                               \
         fprintf(stderr, "%s -- 'c' version\n", __FUNCTION__ );         \
                                                                        \
   ctx->Driver.NeedFlush |= FLUSH_UPDATE_CURRENT;                       \
   ctx->Exec->FN ARGS2;                                                 \
}

_______________________________________________
Dri-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to