mesa: add basic support for 2D register arrays to mesa

just like in Gallium it's a basic functionality needed by a lot
of modern graphcis extensions
diff --git a/src/mesa/program/prog_print.c b/src/mesa/program/prog_print.c
index 80c9203..876b2d4 100644
--- a/src/mesa/program/prog_print.c
+++ b/src/mesa/program/prog_print.c
@@ -265,7 +265,8 @@
  */
 static const char *
 reg_string(gl_register_file f, GLint index, gl_prog_print_mode mode,
-           GLboolean relAddr, const struct gl_program *prog)
+           GLboolean relAddr, const struct gl_program *prog,
+           GLboolean hasIndex2D, GLboolean relAddr2D, GLint index2D)
 {
    static char str[100];
    const char *addr = relAddr ? "ADDR+" : "";
@@ -275,6 +276,11 @@
    switch (mode) {
    case PROG_PRINT_DEBUG:
       sprintf(str, "%s[%s%d]", file_string(f, mode), addr, index);
+      if (hasIndex2D) {
+         int offset = strlen(str);
+         const char *addr2D = relAddr2D ? "ADDR+" : "";
+         sprintf(str+offset, "[%s%d]", addr2D, index2D);
+      }
       break;
 
    case PROG_PRINT_ARB:
@@ -478,7 +484,8 @@
 {
    fprintf(f, "%s%s",
 	   reg_string((gl_register_file) dstReg->File,
-		      dstReg->Index, mode, dstReg->RelAddr, prog),
+		      dstReg->Index, mode, dstReg->RelAddr, prog,
+                      GL_FALSE, GL_FALSE, 0),
 	   _mesa_writemask_string(dstReg->WriteMask));
    
    if (dstReg->CondMask != COND_TR) {
@@ -508,7 +515,8 @@
    fprintf(f, "%s%s%s%s",
 	   abs,
 	   reg_string((gl_register_file) srcReg->File,
-		      srcReg->Index, mode, srcReg->RelAddr, prog),
+		      srcReg->Index, mode, srcReg->RelAddr, prog,
+                      srcReg->HasIndex2D, srcReg->RelAddr2D, srcReg->Index2D),
 	   _mesa_swizzle_string(srcReg->Swizzle,
 				srcReg->Negate, GL_FALSE),
 	   abs);