tgsi: no need to separately malloc input and output arrays
authorKeith Whitwell <keith@tungstengraphics.com>
Wed, 15 Jul 2009 23:23:33 +0000 (00:23 +0100)
committerKeith Whitwell <keithw@vmware.com>
Thu, 16 Jul 2009 08:53:08 +0000 (09:53 +0100)
Can now guarantee alignment in the initial allocation of the tgsi exec machine.

src/gallium/auxiliary/tgsi/tgsi_exec.c
src/gallium/auxiliary/tgsi/tgsi_exec.h

index d9ebd955c82cecf321e1ef4bbb517f2dab6eea69..fe571a86bcad95c2bf7fea9f5b5c3764c9243046 100644 (file)
@@ -379,24 +379,12 @@ tgsi_exec_machine_create( void )
 
    mach->Samplers = NULL;
    mach->Consts = NULL;
-   mach->Inputs = NULL;
-   mach->Outputs = NULL;
    mach->Tokens = NULL;
    mach->Primitives = NULL;
    mach->InterpCoefs = NULL;
    mach->Instructions = NULL;
    mach->Declarations = NULL;
 
-   mach->Inputs = align_malloc(PIPE_MAX_ATTRIBS * 
-                              sizeof(struct tgsi_exec_vector), 16);
-   if (!mach->Inputs)
-      goto fail;
-
-   mach->Outputs = align_malloc(PIPE_MAX_ATTRIBS * 
-                               sizeof(struct tgsi_exec_vector), 16);
-   if (!mach->Outputs)
-      goto fail;
-
    /* Setup constants. */
    for( i = 0; i < 4; i++ ) {
       mach->Temps[TEMP_0_I].xyzw[TEMP_0_C].u[i] = 0x00000000;
@@ -420,12 +408,7 @@ tgsi_exec_machine_create( void )
    return mach;
 
 fail:
-   if (mach) {
-      align_free(mach->Inputs);
-      align_free(mach->Outputs);
-      align_free(mach);
-   }
-
+   align_free(mach);
    return NULL;
 }
 
@@ -433,16 +416,11 @@ fail:
 void
 tgsi_exec_machine_destroy(struct tgsi_exec_machine *mach)
 {
-   if (mach->Instructions) {
+   if (mach) {
       FREE(mach->Instructions);
-      mach->Instructions = NULL;
-      mach->NumInstructions = 0;
-   }
-   if (mach->Declarations) {
       FREE(mach->Declarations);
-      mach->Declarations = NULL;
-      mach->NumDeclarations = 0;
    }
+
    align_free(mach);
 }
 
index a9820ee78350deb92531c2702d8726006b2bd58f..8a9100f4c3e8c3f94685d69273c8745abe0ff74a 100644 (file)
@@ -198,14 +198,15 @@ struct tgsi_exec_machine
 
    float                         Imms[TGSI_EXEC_NUM_IMMEDIATES][4];
 
+   struct tgsi_exec_vector       Inputs[PIPE_MAX_ATTRIBS];
+   struct tgsi_exec_vector       Outputs[PIPE_MAX_ATTRIBS];
+
    struct tgsi_exec_vector       *Addrs;
 
    struct tgsi_sampler           **Samplers;
 
    unsigned                      ImmLimit;
    const float                   (*Consts)[4];
-   struct tgsi_exec_vector       *Inputs;
-   struct tgsi_exec_vector       *Outputs;
    const struct tgsi_token       *Tokens;   /**< Declarations, instructions */
    unsigned                      Processor; /**< TGSI_PROCESSOR_x */