Pass ptr to local memory copy instead of main memory to exec_instruction
authorIan Romanick <idr@us.ibm.com>
Wed, 30 Jan 2008 18:43:23 +0000 (10:43 -0800)
committerIan Romanick <idr@us.ibm.com>
Thu, 31 Jan 2008 04:14:51 +0000 (20:14 -0800)
This was essentially a cut-and-paste bug when the instruction fetcher
was added.  Also, the test for TGSI_PROCESSOR_FRAGMENT was moved
outside the loop for exec_declaration.

src/mesa/pipe/cell/spu/spu_exec.c

index f432781..b3db671 100644 (file)
@@ -2332,17 +2332,19 @@ spu_exec_machine_run( struct spu_exec_machine *mach )
 
 
    /* execute declarations (interpolants) */
-   for (i = 0; i < mach->NumDeclarations; i++) {
-      uint8_t buffer[sizeof(struct tgsi_full_declaration) + 32] ALIGN16_ATTRIB;
-      struct tgsi_full_declaration decl;
-      unsigned long decl_addr = (unsigned long) (mach->Declarations+i);
-      unsigned size = ((sizeof(decl) + (decl_addr & 0x0f) + 0x0f) & ~0x0f);
+   if( mach->Processor == TGSI_PROCESSOR_FRAGMENT ) {
+      for (i = 0; i < mach->NumDeclarations; i++) {
+        uint8_t buffer[sizeof(struct tgsi_full_declaration) + 32] ALIGN16_ATTRIB;
+        struct tgsi_full_declaration decl;
+        unsigned long decl_addr = (unsigned long) (mach->Declarations+i);
+        unsigned size = ((sizeof(decl) + (decl_addr & 0x0f) + 0x0f) & ~0x0f);
 
-      mfc_get(buffer, decl_addr & ~0x0f, size, TAG_INSTRUCTION_FETCH, 0, 0);
-      wait_on_mask(1 << TAG_INSTRUCTION_FETCH);
+        mfc_get(buffer, decl_addr & ~0x0f, size, TAG_INSTRUCTION_FETCH, 0, 0);
+        wait_on_mask(1 << TAG_INSTRUCTION_FETCH);
 
-      memcpy(& decl, buffer + (decl_addr & 0x0f), sizeof(decl));
-      exec_declaration( mach, mach->Declarations+i );
+        memcpy(& decl, buffer + (decl_addr & 0x0f), sizeof(decl));
+        exec_declaration( mach, decl );
+      }
    }
 
    /* execute instructions, until pc is set to -1 */
@@ -2357,7 +2359,7 @@ spu_exec_machine_run( struct spu_exec_machine *mach )
       wait_on_mask(1 << TAG_INSTRUCTION_FETCH);
 
       memcpy(& inst, buffer + (inst_addr & 0x0f), sizeof(inst));
-      exec_instruction( mach, mach->Instructions + pc, &pc );
+      exec_instruction( mach, & inst, &pc );
    }
 
 #if 0