{
struct draw_context *draw = CALLOC_STRUCT( draw_context );
+#if defined(__i386__) || defined(__386__)
+ draw->use_sse = getenv("GALLIUM_SSE") != NULL;
+#else
+ draw->use_sse = false;
+#endif
+
/* create pipeline stages */
draw->pipeline.unfilled = draw_unfilled_stage( draw );
draw->pipeline.twoside = draw_twoside_stage( draw );
}
}
+boolean draw_use_sse(struct draw_context *draw)
+{
+ return draw->use_sse;
+}
+
void draw_delete_vertex_shader(struct draw_context *draw,
void *vcso);
+boolean draw_use_sse(struct draw_context *draw);
void
draw_set_vertex_buffer(struct draw_context *draw,
struct prim_header queue[PRIM_QUEUE_LENGTH];
unsigned queue_nr;
} pq;
+
+ int use_sse : 1;
};
#if defined(__i386__) || defined(__386__)
x86_init_func(&vs->sse2_program);
- tgsi_emit_sse2(shader->tokens, &vs->sse2_program);
-
- ((struct pipe_shader_state*)(vs->state))->executable =
- x86_get_func(&vs->sse2_program);
+ if (draw->use_sse) {
+ tgsi_emit_sse2(shader->tokens, &vs->sse2_program);
+ ((struct pipe_shader_state*)(vs->state))->executable =
+ x86_get_func(&vs->sse2_program);
+ }
#endif
return vs;
#include "pipe/p_context.h"
#include "pipe/p_defines.h"
+#include "pipe/draw/draw_context.h"
#include "pipe/tgsi/mesa/mesa_to_tgsi.h"
#include "pipe/tgsi/exec/tgsi_core.h"
tgsi_dump( tokensOut, 0/*TGSI_DUMP_VERBOSE*/ );
#if defined(__i386__) || defined(__386__)
- if (stfp->sse2_program.csr == stfp->sse2_program.store)
- tgsi_emit_sse2_fs( tokensOut, &stfp->sse2_program );
+ if (draw_use_sse(st->draw)) {
+ if (stfp->sse2_program.csr == stfp->sse2_program.store)
+ tgsi_emit_sse2_fs( tokensOut, &stfp->sse2_program );
- if (!cso->state.executable)
- ((struct cso_fragment_shader*)cso)->state.executable = (void *) x86_get_func( &stfp->sse2_program );
+ if (!cso->state.executable)
+ ((struct cso_fragment_shader*)cso)->state.executable = (void *) x86_get_func( &stfp->sse2_program );
+ }
#endif
return cso;