mesa: when printing src regs, use |reg| for absolute value
authorBrian Paul <brianp@vmware.com>
Fri, 6 Mar 2009 00:14:05 +0000 (17:14 -0700)
committerBrian Paul <brianp@vmware.com>
Fri, 6 Mar 2009 00:25:25 +0000 (17:25 -0700)
And check opcode number to avoid crashing on driver-private opcodes.

src/mesa/shader/prog_print.c

index 2747480834eb5f8bf9938b036963340a3435a66f..6988e9c052edf2a5084f28978543599cf43015ec 100644 (file)
@@ -458,11 +458,15 @@ fprint_src_reg(FILE *f,
                gl_prog_print_mode mode,
                const struct gl_program *prog)
 {
-   _mesa_fprintf(f, "%s%s",
+   const char *abs = srcReg->Abs ? "|" : "";
+
+   _mesa_fprintf(f, "%s%s%s%s",
+                 abs,
                  reg_string((enum register_file) srcReg->File,
                             srcReg->Index, mode, srcReg->RelAddr, prog),
                  _mesa_swizzle_string(srcReg->Swizzle,
-                                      srcReg->NegateBase, GL_FALSE));
+                                      srcReg->NegateBase, GL_FALSE),
+                 abs);
 #if 0
    _mesa_fprintf(f, "%s[%d]%s",
                  file_string((enum register_file) srcReg->File, mode),
@@ -724,11 +728,16 @@ _mesa_fprint_instruction_opt(FILE *f,
       break;
    /* XXX may need other special-case instructions */
    default:
-      /* typical alu instruction */
-      fprint_alu_instruction(f, inst,
-                             _mesa_opcode_string(inst->Opcode),
-                             _mesa_num_inst_src_regs(inst->Opcode),
-                             mode, prog);
+      if (inst->Opcode < MAX_OPCODE) {
+         /* typical alu instruction */
+         fprint_alu_instruction(f, inst,
+                                _mesa_opcode_string(inst->Opcode),
+                                _mesa_num_inst_src_regs(inst->Opcode),
+                                mode, prog);
+      }
+      else {
+         _mesa_fprintf(f, "Other opcode %d\n", inst->Opcode);
+      }
       break;
    }
    return indent;