st/mesa: Clean up header file inclusion in st_cb_accum.h.
[mesa.git] / src / mesa / program / prog_print.c
index 05aae83f0c17670fd3c74e8878c3fc857963f8e1..abebf392c0ad9cc573124a8937c614db4afb18f9 100644 (file)
@@ -42,8 +42,8 @@
 /**
  * Return string name for given program/register file.
  */
-static const char *
-file_string(gl_register_file f, gl_prog_print_mode mode)
+const char *
+_mesa_register_file_name(gl_register_file f)
 {
    switch (f) {
    case PROGRAM_TEMPORARY:
@@ -265,7 +265,8 @@ arb_output_attrib_string(GLint index, GLenum progType)
  */
 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 hasIndex2, GLboolean relAddr2, GLint index2)
 {
    static char str[100];
    const char *addr = relAddr ? "ADDR+" : "";
@@ -274,7 +275,13 @@ reg_string(gl_register_file f, GLint index, gl_prog_print_mode mode,
 
    switch (mode) {
    case PROG_PRINT_DEBUG:
-      sprintf(str, "%s[%s%d]", file_string(f, mode), addr, index);
+      sprintf(str, "%s[%s%d]",
+              _mesa_register_file_name(f), addr, index);
+      if (hasIndex2) {
+         int offset = strlen(str);
+         const char *addr2 = relAddr2 ? "ADDR+" : "";
+         sprintf(str+offset, "[%s%d]", addr2, index2);
+      }
       break;
 
    case PROG_PRINT_ARB:
@@ -478,7 +485,8 @@ fprint_dst_reg(FILE * f,
 {
    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) {
@@ -490,7 +498,7 @@ fprint_dst_reg(FILE * f,
 
 #if 0
    fprintf(f, "%s[%d]%s",
-          file_string((gl_register_file) dstReg->File, mode),
+          _mesa_register_file_name((gl_register_file) dstReg->File),
           dstReg->Index,
           _mesa_writemask_string(dstReg->WriteMask));
 #endif
@@ -508,13 +516,14 @@ fprint_src_reg(FILE *f,
    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->HasIndex2, srcReg->RelAddr2, srcReg->Index2),
           _mesa_swizzle_string(srcReg->Swizzle,
                                srcReg->Negate, GL_FALSE),
           abs);
 #if 0
    fprintf(f, "%s[%d]%s",
-          file_string((gl_register_file) srcReg->File, mode),
+          _mesa_register_file_name((gl_register_file) srcReg->File),
           srcReg->Index,
           _mesa_swizzle_string(srcReg->Swizzle,
                                srcReg->Negate, GL_FALSE));
@@ -532,12 +541,12 @@ fprint_comment(FILE *f, const struct prog_instruction *inst)
 }
 
 
-static void
-fprint_alu_instruction(FILE *f,
-                       const struct prog_instruction *inst,
-                       const char *opcode_string, GLuint numRegs,
-                       gl_prog_print_mode mode,
-                       const struct gl_program *prog)
+void
+_mesa_fprint_alu_instruction(FILE *f,
+                            const struct prog_instruction *inst,
+                            const char *opcode_string, GLuint numRegs,
+                            gl_prog_print_mode mode,
+                            const struct gl_program *prog)
 {
    GLuint j;
 
@@ -574,8 +583,8 @@ void
 _mesa_print_alu_instruction(const struct prog_instruction *inst,
                             const char *opcode_string, GLuint numRegs)
 {
-   fprint_alu_instruction(stderr, inst, opcode_string,
-                          numRegs, PROG_PRINT_DEBUG, NULL);
+   _mesa_fprint_alu_instruction(stderr, inst, opcode_string,
+                               numRegs, PROG_PRINT_DEBUG, NULL);
 }
 
 
@@ -607,8 +616,7 @@ _mesa_fprint_instruction_opt(FILE *f,
       if (inst->SrcReg[0].File != PROGRAM_UNDEFINED) {
          fprintf(f, ", ");
          fprintf(f, "%s[%d]%s",
-                file_string((gl_register_file) inst->SrcReg[0].File,
-                            mode),
+                 _mesa_register_file_name((gl_register_file) inst->SrcReg[0].File),
                 inst->SrcReg[0].Index,
                 _mesa_swizzle_string(inst->SrcReg[0].Swizzle,
                                      inst->SrcReg[0].Negate, GL_FALSE));
@@ -624,8 +632,7 @@ _mesa_fprint_instruction_opt(FILE *f,
       fprintf(f, " ");
       fprint_dst_reg(f, &inst->DstReg, mode, prog);
       fprintf(f, ", %s[%d], %s",
-             file_string((gl_register_file) inst->SrcReg[0].File,
-                         mode),
+             _mesa_register_file_name((gl_register_file) inst->SrcReg[0].File),
              inst->SrcReg[0].Index,
              _mesa_swizzle_string(inst->SrcReg[0].Swizzle,
                                   inst->SrcReg[0].Negate, GL_TRUE));
@@ -773,20 +780,26 @@ _mesa_fprint_instruction_opt(FILE *f,
          fprintf(f, "# %s\n", inst->Comment);
       }
       break;
+   case OPCODE_EMIT_VERTEX:
+      fprintf(f, "EMIT_VERTEX\n");
+      break;
+   case OPCODE_END_PRIMITIVE:
+      fprintf(f, "END_PRIMITIVE\n");
+      break;
    /* XXX may need other special-case instructions */
    default:
       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);
+         _mesa_fprint_alu_instruction(f, inst,
+                                     _mesa_opcode_string(inst->Opcode),
+                                     _mesa_num_inst_src_regs(inst->Opcode),
+                                     mode, prog);
       }
       else {
-         fprint_alu_instruction(f, inst,
-                                _mesa_opcode_string(inst->Opcode),
-                                3/*_mesa_num_inst_src_regs(inst->Opcode)*/,
-                                mode, prog);
+         _mesa_fprint_alu_instruction(f, inst,
+                                     _mesa_opcode_string(inst->Opcode),
+                                     3/*_mesa_num_inst_src_regs(inst->Opcode)*/,
+                                     mode, prog);
       }
       break;
    }
@@ -842,6 +855,8 @@ _mesa_fprint_program_opt(FILE *f,
       else
          fprintf(f, "# Fragment Program/Shader %u\n", prog->Id);
       break;
+   case MESA_GEOMETRY_PROGRAM:
+      fprintf(f, "# Geometry Shader\n");
    }
 
    for (i = 0; i < prog->NumInstructions; i++) {
@@ -893,7 +908,7 @@ binary(GLbitfield64 val)
  */
 static void
 _mesa_fprint_program_parameters(FILE *f,
-                                GLcontext *ctx,
+                                struct gl_context *ctx,
                                 const struct gl_program *prog)
 {
    GLuint i;
@@ -901,12 +916,15 @@ _mesa_fprint_program_parameters(FILE *f,
    fprintf(f, "InputsRead: 0x%x (0b%s)\n",
                  prog->InputsRead, binary(prog->InputsRead));
    fprintf(f, "OutputsWritten: 0x%llx (0b%s)\n",
-                 prog->OutputsWritten, binary(prog->OutputsWritten));
+                 (unsigned long long)prog->OutputsWritten, 
+                binary(prog->OutputsWritten));
    fprintf(f, "NumInstructions=%d\n", prog->NumInstructions);
    fprintf(f, "NumTemporaries=%d\n", prog->NumTemporaries);
    fprintf(f, "NumParameters=%d\n", prog->NumParameters);
    fprintf(f, "NumAttributes=%d\n", prog->NumAttributes);
    fprintf(f, "NumAddressRegs=%d\n", prog->NumAddressRegs);
+   fprintf(f, "IndirectRegisterFiles: 0x%x (0b%s)\n",
+           prog->IndirectRegisterFiles, binary(prog->IndirectRegisterFiles));
    fprintf(f, "SamplersUsed: 0x%x (0b%s)\n",
                  prog->SamplersUsed, binary(prog->SamplersUsed));
    fprintf(f, "Samplers=[ ");
@@ -932,7 +950,7 @@ _mesa_fprint_program_parameters(FILE *f,
  * Print all of a program's parameters/fields to stderr.
  */
 void
-_mesa_print_program_parameters(GLcontext *ctx, const struct gl_program *prog)
+_mesa_print_program_parameters(struct gl_context *ctx, const struct gl_program *prog)
 {
    _mesa_fprint_program_parameters(stderr, ctx, prog);
 }
@@ -945,7 +963,6 @@ static void
 _mesa_fprint_parameter_list(FILE *f,
                             const struct gl_program_parameter_list *list)
 {
-   const gl_prog_print_mode mode = PROG_PRINT_DEBUG;
    GLuint i;
 
    if (!list)
@@ -959,7 +976,7 @@ _mesa_fprint_parameter_list(FILE *f,
       const GLfloat *v = list->ParameterValues[i];
       fprintf(f, "param[%d] sz=%d %s %s = {%.3g, %.3g, %.3g, %.3g}",
              i, param->Size,
-             file_string(list->Parameters[i].Type, mode),
+             _mesa_register_file_name(list->Parameters[i].Type),
              param->Name, v[0], v[1], v[2], v[3]);
       if (param->Flags & PROG_PARAM_BIT_CENTROID)
          fprintf(f, " Centroid");
@@ -996,8 +1013,10 @@ _mesa_write_shader_to_file(const struct gl_shader *shader)
 
    if (shader->Type == GL_FRAGMENT_SHADER)
       type = "frag";
-   else
+   else if (shader->Type == GL_VERTEX_SHADER)
       type = "vert";
+   else
+      type = "geom";
 
    _mesa_snprintf(filename, sizeof(filename), "shader_%u.%s", shader->Name, type);
    f = fopen(filename, "w");
@@ -1012,11 +1031,11 @@ _mesa_write_shader_to_file(const struct gl_shader *shader)
 
    fprintf(f, "/* Compile status: %s */\n",
            shader->CompileStatus ? "ok" : "fail");
-   if (!shader->CompileStatus) {
-      fprintf(f, "/* Log Info: */\n");
+   fprintf(f, "/* Log Info: */\n");
+   if (shader->InfoLog) {
       fputs(shader->InfoLog, f);
    }
-   else {
+   if (shader->CompileStatus && shader->Program) {
       fprintf(f, "/* GPU code */\n");
       fprintf(f, "/*\n");
       _mesa_fprint_program_opt(f, shader->Program, PROG_PRINT_DEBUG, GL_TRUE);