summaryrefslogtreecommitdiff
path: root/src/mesa/pipe/draw
diff options
context:
space:
mode:
authorMichel Dänzer <michel@tungstengraphics.com>2008-02-07 19:44:42 +0000
committerMichel Dänzer <michel@tungstengraphics.com>2008-02-07 19:45:24 +0000
commit909c703bfbf7404414befaa0a94b76d78ba3cb4c (patch)
tree0d01e5427636de8a7f864304898b8696470d2dcf /src/mesa/pipe/draw
parent28ecb986d958d52c9a996453e53418d1f98d7f75 (diff)
tgsi: Fall back to interpreter instead of assert(0) on unimplemented SSE code.
Diffstat (limited to 'src/mesa/pipe/draw')
-rw-r--r--src/mesa/pipe/draw/draw_vertex_shader.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/src/mesa/pipe/draw/draw_vertex_shader.c b/src/mesa/pipe/draw/draw_vertex_shader.c
index e6590eafcc..5ca93aa615 100644
--- a/src/mesa/pipe/draw/draw_vertex_shader.c
+++ b/src/mesa/pipe/draw/draw_vertex_shader.c
@@ -121,11 +121,16 @@ run_vertex_program(struct draw_context *draw,
= (struct draw_vertex_shader *)draw->vertex_shader;
codegen_function func
= (codegen_function) x86_get_func( &shader->sse2_program );
- func(
- machine->Inputs,
- machine->Outputs,
- machine->Consts,
- machine->Temps );
+
+ if (func)
+ func(
+ machine->Inputs,
+ machine->Outputs,
+ machine->Consts,
+ machine->Temps );
+ else
+ /* interpreter */
+ tgsi_exec_machine_run( machine );
}
else
#endif
@@ -269,7 +274,12 @@ draw_create_vertex_shader(struct draw_context *draw,
struct pipe_shader_state *sh = (struct pipe_shader_state *) shader;
x86_init_func( &vs->sse2_program );
- tgsi_emit_sse2( (struct tgsi_token *) sh->tokens, &vs->sse2_program );
+ if (!tgsi_emit_sse2( (struct tgsi_token *) sh->tokens,
+ &vs->sse2_program )) {
+ x86_release_func( (struct x86_function *) &vs->sse2_program );
+ fprintf(stdout /*err*/,
+ "tgsi_emit_sse2() failed, falling back to interpreter\n");
+ }
}
#endif