nv50: save tgsi instructions
authorChristoph Bumiller <e0425955@student.tuwien.ac.at>
Sun, 5 Sep 2010 17:06:17 +0000 (19:06 +0200)
committerChristoph Bumiller <e0425955@student.tuwien.ac.at>
Thu, 9 Sep 2010 17:21:34 +0000 (19:21 +0200)
src/gallium/drivers/nv50/nv50_program.c
src/gallium/drivers/nv50/nv50_program.h

index 523603ca3af3c730e6d0aa57c8e42989d88b5d59..d7d3030e2f6880b46324d37fab8ea9d9778bee7c 100644 (file)
@@ -499,6 +499,8 @@ nv50_prog_scan(struct nv50_translation_info *ti)
    ti->immd32 = (uint32_t *)MALLOC(ti->scan.immediate_count * 16);
    ti->immd32_ty = (ubyte *)MALLOC(ti->scan.immediate_count * sizeof(ubyte));
 
+   ti->insns = MALLOC(ti->scan.num_instructions * sizeof(ti->insns[0]));
+
    tgsi_parse_init(&parse, p->pipe.tokens);
    while (!tgsi_parse_end_of_tokens(&parse)) {
       tgsi_parse_token(&parse);
@@ -511,6 +513,7 @@ nv50_prog_scan(struct nv50_translation_info *ti)
          prog_decl(ti, &parse.FullToken.FullDeclaration);
          break;
       case TGSI_TOKEN_TYPE_INSTRUCTION:
+         ti->insns[ti->inst_nr] = parse.FullToken.FullInstruction;
          prog_inst(ti, &parse.FullToken.FullInstruction, ++ti->inst_nr);
          break;
       }
@@ -567,6 +570,8 @@ out:
       FREE(ti->immd32);
    if (ti->immd32_ty)
       FREE(ti->immd32_ty);
+   if (ti->insns)
+      FREE(ti->insns);
    FREE(ti);
    return ret ? FALSE : TRUE;
 }
index 639f06217ed94ab55fbc3eb2734bb26068a328f9..3c3f1f7f9701fb828678000b42cb3ccd7290c7ba 100644 (file)
@@ -104,6 +104,7 @@ struct nv50_subroutine {
 struct nv50_translation_info {
    struct nv50_program *p;
    unsigned inst_nr;
+   struct tgsi_full_instruction *insns;
    ubyte input_file;
    ubyte output_file;
    ubyte input_map[PIPE_MAX_SHADER_INPUTS][4];