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
