diff options
Diffstat (limited to 'src/gallium/drivers')
| -rw-r--r-- | src/gallium/drivers/softpipe/sp_fs_sse.c | 24 | ||||
| -rw-r--r-- | src/gallium/drivers/softpipe/sp_quad_fs.c | 30 | 
2 files changed, 23 insertions, 31 deletions
| diff --git a/src/gallium/drivers/softpipe/sp_fs_sse.c b/src/gallium/drivers/softpipe/sp_fs_sse.c index 31c3ca21c5..f4fa0905d7 100644 --- a/src/gallium/drivers/softpipe/sp_fs_sse.c +++ b/src/gallium/drivers/softpipe/sp_fs_sse.c @@ -45,17 +45,6 @@  #include "rtasm/rtasm_x86sse.h" -/* Surely this should be defined somewhere in a tgsi header: - */ -typedef void (PIPE_CDECL *codegen_function)( -   const struct tgsi_exec_vector *input, -   struct tgsi_exec_vector *output, -   const float (*constant)[4], -   struct tgsi_exec_vector *temporary, -   const struct tgsi_interp_coef *coef, -   float (*immediates)[4] -   //, const struct tgsi_exec_vector *quadPos - );  /** @@ -65,7 +54,7 @@ struct sp_sse_fragment_shader  {     struct sp_fragment_shader base;     struct x86_function sse2_program; -   codegen_function func; +   tgsi_sse2_fs_function func;     float immediates[TGSI_EXEC_NUM_IMMEDIATES][4];  }; @@ -83,6 +72,7 @@ fs_sse_prepare( const struct sp_fragment_shader *base,  		struct tgsi_exec_machine *machine,  		struct tgsi_sampler **samplers )  { +   machine->Samplers = samplers;  } @@ -107,12 +97,10 @@ fs_sse_run( const struct sp_fragment_shader *base,     tgsi_set_kill_mask(machine, 0x0);     tgsi_set_exec_mask(machine, 1, 1, 1, 1); -   shader->func( machine->Inputs, -		 machine->Outputs, +   shader->func( machine,  		 machine->Consts, -		 machine->Temps, -		 machine->InterpCoefs, -                 shader->immediates +                 (const float (*)[4])shader->immediates, +		 machine->InterpCoefs  		 //	 , &machine->QuadPos        ); @@ -151,7 +139,7 @@ softpipe_create_fs_sse(struct softpipe_context *softpipe,        return NULL;     } -   shader->func = (codegen_function) x86_get_func( &shader->sse2_program ); +   shader->func = (tgsi_sse2_fs_function) x86_get_func( &shader->sse2_program );     if (!shader->func) {        x86_release_func( &shader->sse2_program );        FREE(shader); diff --git a/src/gallium/drivers/softpipe/sp_quad_fs.c b/src/gallium/drivers/softpipe/sp_quad_fs.c index ca637a1d6a..28f8d1a60e 100644 --- a/src/gallium/drivers/softpipe/sp_quad_fs.c +++ b/src/gallium/drivers/softpipe/sp_quad_fs.c @@ -52,7 +52,7 @@  struct quad_shade_stage  {     struct quad_stage stage;  /**< base class */ -   struct tgsi_exec_machine machine; +   struct tgsi_exec_machine *machine;     struct tgsi_exec_vector *inputs, *outputs;  }; @@ -73,7 +73,7 @@ shade_quad(struct quad_stage *qs, struct quad_header *quad)  {     struct quad_shade_stage *qss = quad_shade_stage( qs );     struct softpipe_context *softpipe = qs->softpipe; -   struct tgsi_exec_machine *machine = &qss->machine; +   struct tgsi_exec_machine *machine = qss->machine;     boolean z_written;     /* Consts do not require 16 byte alignment. */ @@ -146,7 +146,7 @@ shade_begin(struct quad_stage *qs)     struct softpipe_context *softpipe = qs->softpipe;     softpipe->fs->prepare( softpipe->fs,  -			  &qss->machine, +			  qss->machine,  			  (struct tgsi_sampler **)                               softpipe->tgsi.frag_samplers_list ); @@ -159,9 +159,8 @@ shade_destroy(struct quad_stage *qs)  {     struct quad_shade_stage *qss = (struct quad_shade_stage *) qs; -   tgsi_exec_machine_free_data(&qss->machine); -   FREE( qss->inputs ); -   FREE( qss->outputs ); +   tgsi_exec_machine_destroy(qss->machine); +     FREE( qs );  } @@ -170,19 +169,24 @@ struct quad_stage *  sp_quad_shade_stage( struct softpipe_context *softpipe )  {     struct quad_shade_stage *qss = CALLOC_STRUCT(quad_shade_stage); - -   /* allocate storage for program inputs/outputs, aligned to 16 bytes */ -   qss->inputs = MALLOC(PIPE_MAX_ATTRIBS * sizeof(*qss->inputs) + 16); -   qss->outputs = MALLOC(PIPE_MAX_ATTRIBS * sizeof(*qss->outputs) + 16); -   qss->machine.Inputs = align16(qss->inputs); -   qss->machine.Outputs = align16(qss->outputs); +   if (!qss) +      goto fail;     qss->stage.softpipe = softpipe;     qss->stage.begin = shade_begin;     qss->stage.run = shade_quad;     qss->stage.destroy = shade_destroy; -   tgsi_exec_machine_init( &qss->machine ); +   qss->machine = tgsi_exec_machine_create(); +   if (!qss->machine) +      goto fail;     return &qss->stage; + +fail: +   if (qss && qss->machine) +      tgsi_exec_machine_destroy(qss->machine); + +   FREE(qss); +   return NULL;  } | 
