diff options
author | michal <michal@michal-laptop.(none)> | 2007-08-24 17:51:12 +0100 |
---|---|---|
committer | michal <michal@michal-laptop.(none)> | 2007-08-24 17:51:12 +0100 |
commit | 4fd7bc00f06a98e1db2ad886a13566f19895e3c0 (patch) | |
tree | 1bc1703dd3d8cc5ea14aa6e5605619e266d8361f /src/mesa/pipe | |
parent | 2c7b74725bfbd0a022ebfada4736d6cb8ac28047 (diff) |
Hook-up SSE2 to VS.
Diffstat (limited to 'src/mesa/pipe')
-rw-r--r-- | src/mesa/pipe/draw/draw_prim.c | 31 | ||||
-rw-r--r-- | src/mesa/pipe/p_state.h | 1 | ||||
-rw-r--r-- | src/mesa/pipe/tgsi/exec/tgsi_exec.c | 29 | ||||
-rw-r--r-- | src/mesa/pipe/tgsi/exec/tgsi_exec.h | 7 | ||||
-rwxr-xr-x | src/mesa/pipe/tgsi/exec/tgsi_sse2.c | 4 |
5 files changed, 34 insertions, 38 deletions
diff --git a/src/mesa/pipe/draw/draw_prim.c b/src/mesa/pipe/draw/draw_prim.c index 2d613754e8e..09616cf315c 100644 --- a/src/mesa/pipe/draw/draw_prim.c +++ b/src/mesa/pipe/draw/draw_prim.c @@ -113,6 +113,21 @@ fetch_attrib4(const void *ptr, unsigned format, float attrib[4]) } } +#if !defined(XSTDCALL) +#if defined(WIN32) +#define XSTDCALL __stdcall +#else +#define XSTDCALL +#endif +#endif + +#if defined(USE_X86_ASM) || defined(SLANG_X86) +typedef void (XSTDCALL *sse2_function)( + const struct tgsi_exec_vector *input, + struct tgsi_exec_vector *output, + float (*constant)[4], + struct tgsi_exec_vector *temporary ); +#endif /** * Transform vertices with the current vertex program/shader @@ -224,7 +239,21 @@ run_vertex_program(struct draw_context *draw, #endif /* run shader */ - tgsi_exec_machine_run( &machine ); + if( draw->vertex_shader.executable != NULL ) { +#if defined(USE_X86_ASM) || defined(SLANG_X86) + sse2_function func = (sse2_function) draw->vertex_shader.executable; + func( + machine.Inputs, + machine.Outputs, + machine.Consts, + machine.Temps ); +#else + assert( 0 ); +#endif + } + else { + tgsi_exec_machine_run( &machine ); + } #if 0 for (i = 0; i < 4; i++) { diff --git a/src/mesa/pipe/p_state.h b/src/mesa/pipe/p_state.h index e562a8d0585..25e5861e1e5 100644 --- a/src/mesa/pipe/p_state.h +++ b/src/mesa/pipe/p_state.h @@ -128,6 +128,7 @@ struct pipe_shader_state { unsigned inputs_read; /**< TGSI_ATTRIB_ bits */ unsigned outputs_written; /**< TGSI_ATTRIB_ bits */ const struct tgsi_token *tokens; + void *executable; }; struct pipe_depth_state diff --git a/src/mesa/pipe/tgsi/exec/tgsi_exec.c b/src/mesa/pipe/tgsi/exec/tgsi_exec.c index a1f46712b4f..793f8bc0f68 100644 --- a/src/mesa/pipe/tgsi/exec/tgsi_exec.c +++ b/src/mesa/pipe/tgsi/exec/tgsi_exec.c @@ -85,11 +85,6 @@ tgsi_exec_machine_init( mach->Temps = (struct tgsi_exec_vector *) tgsi_align_128bit( mach->_Temps); mach->Addrs = &mach->Temps[TGSI_EXEC_NUM_TEMPS]; -#if XXX_SSE - tgsi_emit_sse (tokens, - &mach->Function); -#endif - /* Setup constants. */ for( i = 0; i < 4; i++ ) { mach->Temps[TEMP_0_I].xyzw[TEMP_0_C].u[i] = 0x00000000; @@ -967,6 +962,7 @@ store_dest( default: assert( 0 ); + return; } switch (inst->Instruction.Saturate) @@ -2226,20 +2222,6 @@ exec_instruction( } } - -#if !defined(XSTDCALL) -#if defined(WIN32) -#define XSTDCALL __stdcall -#else -#define XSTDCALL -#endif -#endif - -typedef void (XSTDCALL *fp_function) (const struct tgsi_exec_vector *input, - struct tgsi_exec_vector *output, - GLfloat (*constant)[4], - struct tgsi_exec_vector *temporary); - void tgsi_exec_machine_run2( struct tgsi_exec_machine *mach, @@ -2251,16 +2233,7 @@ tgsi_exec_machine_run2( #endif #if XXX_SSE - fp_function function; - mach->Temps[TEMP_KILMASK_I].xyzw[TEMP_KILMASK_C].u[0] = 0; - - function = (fp_function) x86_get_func (&mach->Function); - - function (mach->Inputs, - mach->Outputs, - mach->Consts, - mach->Temps); #else struct tgsi_parse_context parse; GLuint k; diff --git a/src/mesa/pipe/tgsi/exec/tgsi_exec.h b/src/mesa/pipe/tgsi/exec/tgsi_exec.h index e5e8c3608ed..d50f7860292 100644 --- a/src/mesa/pipe/tgsi/exec/tgsi_exec.h +++ b/src/mesa/pipe/tgsi/exec/tgsi_exec.h @@ -3,10 +3,6 @@ #include "pipe/p_compiler.h" -#if 0 -#include "x86/rtasm/x86sse.h" -#endif - #if defined __cplusplus extern "C" { #endif // defined __cplusplus @@ -157,9 +153,6 @@ struct tgsi_exec_machine const struct tgsi_interp_coef *InterpCoefs; struct tgsi_exec_cond_stack CondStack; -#if XXX_SSE - struct x86_function Function; -#endif }; void diff --git a/src/mesa/pipe/tgsi/exec/tgsi_sse2.c b/src/mesa/pipe/tgsi/exec/tgsi_sse2.c index 359775fdfb5..d89bb199709 100755 --- a/src/mesa/pipe/tgsi/exec/tgsi_sse2.c +++ b/src/mesa/pipe/tgsi/exec/tgsi_sse2.c @@ -1659,13 +1659,13 @@ emit_instruction( } unsigned -tgsi_emit_sse( +tgsi_emit_sse2( struct tgsi_token *tokens, struct x86_function *func ) { struct tgsi_parse_context parse; - x86_init_func( func ); + func->csr = func->store; x86_mov( func, |