update TexturesUsed[] in slang_update_inputs_outputs()
authorBrian <brian@yutani.localnet.net>
Fri, 5 Jan 2007 00:43:53 +0000 (17:43 -0700)
committerBrian <brian@yutani.localnet.net>
Fri, 5 Jan 2007 00:43:53 +0000 (17:43 -0700)
src/mesa/shader/slang/slang_link2.c

index f68eaca167c3c774944549f2ff8e5a7eedffbf83..33813fecc4a49d642558650d0cb555a235963f19 100644 (file)
@@ -296,6 +296,7 @@ slang_resolve_branches(struct gl_program *prog)
 /**
  * Scan program instructions to update the program's InputsRead and
  * OutputsWritten fields.
+ * Also, update the program's TexturesUsed[] array.
  */
 static void
 slang_update_inputs_outputs(struct gl_program *prog)
@@ -305,6 +306,9 @@ slang_update_inputs_outputs(struct gl_program *prog)
    prog->InputsRead = 0x0;
    prog->OutputsWritten = 0x0;
 
+   for (i = 0; i < MAX_TEXTURE_IMAGE_UNITS; i++)
+      prog->TexturesUsed[i] = 0;
+
    for (i = 0; i < prog->NumInstructions; i++) {
       const struct prog_instruction *inst = prog->Instructions + i;
       const GLuint numSrc = _mesa_num_inst_src_regs(inst->Opcode);
@@ -316,6 +320,12 @@ slang_update_inputs_outputs(struct gl_program *prog)
       if (inst->DstReg.File == PROGRAM_OUTPUT) {
          prog->OutputsWritten |= 1 << inst->DstReg.Index;
       }
+
+      if (inst->Opcode == OPCODE_TEX ||
+          inst->Opcode == OPCODE_TXB ||
+          inst->Opcode == OPCODE_TXP) {
+         prog->TexturesUsed[inst->TexSrcUnit] |= (1 << inst->TexSrcTarget);
+      }
    }
 }