draw: Always use the llvm middle end when available & enabled.

This commit is contained in:
José Fonseca 2010-04-26 15:31:37 +01:00
parent 7fd9e3cfb0
commit 6ecbbc3c05
2 changed files with 23 additions and 17 deletions

View file

@ -132,6 +132,7 @@ struct draw_context
struct draw_pt_middle_end *fetch_emit;
struct draw_pt_middle_end *fetch_shade_emit;
struct draw_pt_middle_end *general;
struct draw_pt_middle_end *llvm;
} middle;
struct {
@ -253,8 +254,8 @@ struct draw_context
#ifdef HAVE_LLVM
LLVMExecutionEngineRef engine;
boolean use_llvm;
#endif
void *driver_private;
};

View file

@ -97,12 +97,16 @@ draw_pt_arrays(struct draw_context *draw,
opt |= PT_SHADE;
}
if (opt == 0)
middle = draw->pt.middle.fetch_emit;
else if (opt == PT_SHADE && !draw->pt.no_fse)
middle = draw->pt.middle.fetch_shade_emit;
else
middle = draw->pt.middle.general;
if (draw->pt.middle.llvm) {
middle = draw->pt.middle.llvm;
} else {
if (opt == 0)
middle = draw->pt.middle.fetch_emit;
else if (opt == PT_SHADE && !draw->pt.no_fse)
middle = draw->pt.middle.fetch_shade_emit;
else
middle = draw->pt.middle.general;
}
/* Pick the right frontend
@ -148,25 +152,26 @@ boolean draw_pt_init( struct draw_context *draw )
if (!draw->pt.middle.fetch_shade_emit)
return FALSE;
#if HAVE_LLVM
draw->use_llvm = debug_get_option_draw_use_llvm();
if (draw->use_llvm)
draw->pt.middle.general = draw_pt_fetch_pipeline_or_emit_llvm( draw );
#else
draw->pt.middle.general = NULL;
#endif
if (!draw->pt.middle.general)
draw->pt.middle.general = draw_pt_fetch_pipeline_or_emit( draw );
draw->pt.middle.general = draw_pt_fetch_pipeline_or_emit( draw );
if (!draw->pt.middle.general)
return FALSE;
#if HAVE_LLVM
if (debug_get_option_draw_use_llvm())
draw->pt.middle.llvm = draw_pt_fetch_pipeline_or_emit_llvm( draw );
#endif
return TRUE;
}
void draw_pt_destroy( struct draw_context *draw )
{
if (draw->pt.middle.llvm) {
draw->pt.middle.llvm->destroy( draw->pt.middle.llvm );
draw->pt.middle.llvm = NULL;
}
if (draw->pt.middle.general) {
draw->pt.middle.general->destroy( draw->pt.middle.general );
draw->pt.middle.general = NULL;