⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 prog_print.c

📁 Mesa is an open-source implementation of the OpenGL specification - a system for rendering interacti
💻 C
📖 第 1 页 / 共 2 页
字号:
   _mesa_printf("%s%s",                reg_string((enum register_file) dstReg->File,                           dstReg->Index, mode, GL_FALSE, prog),                writemask_string(dstReg->WriteMask));   if (dstReg->CondMask != COND_TR) {      _mesa_printf(" (%s.%s)",                   _mesa_condcode_string(dstReg->CondMask),                   _mesa_swizzle_string(dstReg->CondSwizzle, GL_FALSE, GL_FALSE));   }#if 0   _mesa_printf("%s[%d]%s",                file_string((enum register_file) dstReg->File, mode),                dstReg->Index,                writemask_string(dstReg->WriteMask));#endif}static voidprint_src_reg(const struct prog_src_register *srcReg, gl_prog_print_mode mode,              const struct gl_program *prog){   _mesa_printf("%s%s",                reg_string((enum register_file) srcReg->File,                           srcReg->Index, mode, srcReg->RelAddr, prog),                _mesa_swizzle_string(srcReg->Swizzle,                                     srcReg->NegateBase, GL_FALSE));#if 0   _mesa_printf("%s[%d]%s",                file_string((enum register_file) srcReg->File, mode),                srcReg->Index,                _mesa_swizzle_string(srcReg->Swizzle,                               srcReg->NegateBase, GL_FALSE));#endif}static voidprint_comment(const struct prog_instruction *inst){   if (inst->Comment)      _mesa_printf(";  # %s\n", inst->Comment);   else      _mesa_printf(";\n");}static voidprint_alu_instruction(const struct prog_instruction *inst,                      const char *opcode_string, GLuint numRegs,                      gl_prog_print_mode mode,                      const struct gl_program *prog){   GLuint j;   _mesa_printf("%s", opcode_string);   if (inst->CondUpdate)      _mesa_printf(".C");   /* frag prog only */   if (inst->SaturateMode == SATURATE_ZERO_ONE)      _mesa_printf("_SAT");   _mesa_printf(" ");   if (inst->DstReg.File != PROGRAM_UNDEFINED) {      print_dst_reg(&inst->DstReg, mode, prog);   }   else {      _mesa_printf(" ???");   }   if (numRegs > 0)      _mesa_printf(", ");   for (j = 0; j < numRegs; j++) {      print_src_reg(inst->SrcReg + j, mode, prog);      if (j + 1 < numRegs)	 _mesa_printf(", ");   }   print_comment(inst);}void_mesa_print_alu_instruction(const struct prog_instruction *inst,                            const char *opcode_string, GLuint numRegs){   print_alu_instruction(inst, opcode_string, numRegs, PROG_PRINT_DEBUG, NULL);}void_mesa_print_instruction(const struct prog_instruction *inst){   /* note: 4th param should be ignored for PROG_PRINT_DEBUG */   _mesa_print_instruction_opt(inst, 0, PROG_PRINT_DEBUG, NULL);}/** * Print a single vertex/fragment program instruction. */GLint_mesa_print_instruction_opt(const struct prog_instruction *inst, GLint indent,                            gl_prog_print_mode mode,                            const struct gl_program *prog){   GLint i;   if (inst->Opcode == OPCODE_ELSE ||       inst->Opcode == OPCODE_ENDIF ||       inst->Opcode == OPCODE_ENDLOOP ||       inst->Opcode == OPCODE_ENDSUB) {      indent -= 3;   }   for (i = 0; i < indent; i++) {      _mesa_printf(" ");   }   switch (inst->Opcode) {   case OPCODE_PRINT:      _mesa_printf("PRINT '%s'", inst->Data);      if (inst->SrcReg[0].File != PROGRAM_UNDEFINED) {         _mesa_printf(", ");         _mesa_printf("%s[%d]%s",                      file_string((enum register_file) inst->SrcReg[0].File,                                  mode),                      inst->SrcReg[0].Index,                      _mesa_swizzle_string(inst->SrcReg[0].Swizzle,                                           inst->SrcReg[0].NegateBase, GL_FALSE));      }      if (inst->Comment)         _mesa_printf("  # %s", inst->Comment);      print_comment(inst);      break;   case OPCODE_SWZ:      _mesa_printf("SWZ");      if (inst->SaturateMode == SATURATE_ZERO_ONE)         _mesa_printf("_SAT");      _mesa_printf(" ");      print_dst_reg(&inst->DstReg, mode, prog);      _mesa_printf(", %s[%d], %s",                   file_string((enum register_file) inst->SrcReg[0].File,                               mode),                   inst->SrcReg[0].Index,                   _mesa_swizzle_string(inst->SrcReg[0].Swizzle,                                        inst->SrcReg[0].NegateBase, GL_TRUE));      print_comment(inst);      break;   case OPCODE_TEX:   case OPCODE_TXP:   case OPCODE_TXL:   case OPCODE_TXB:      _mesa_printf("%s", _mesa_opcode_string(inst->Opcode));      if (inst->SaturateMode == SATURATE_ZERO_ONE)         _mesa_printf("_SAT");      _mesa_printf(" ");      print_dst_reg(&inst->DstReg, mode, prog);      _mesa_printf(", ");      print_src_reg(&inst->SrcReg[0], mode, prog);      _mesa_printf(", texture[%d], ", inst->TexSrcUnit);      switch (inst->TexSrcTarget) {      case TEXTURE_1D_INDEX:   _mesa_printf("1D");    break;      case TEXTURE_2D_INDEX:   _mesa_printf("2D");    break;      case TEXTURE_3D_INDEX:   _mesa_printf("3D");    break;      case TEXTURE_CUBE_INDEX: _mesa_printf("CUBE");  break;      case TEXTURE_RECT_INDEX: _mesa_printf("RECT");  break;      default:         ;      }      print_comment(inst);      break;   case OPCODE_KIL:      _mesa_printf("%s", _mesa_opcode_string(inst->Opcode));      _mesa_printf(" ");      print_src_reg(&inst->SrcReg[0], mode, prog);      print_comment(inst);      break;   case OPCODE_KIL_NV:      _mesa_printf("%s", _mesa_opcode_string(inst->Opcode));      _mesa_printf(" ");      _mesa_printf("%s.%s",                   _mesa_condcode_string(inst->DstReg.CondMask),                   _mesa_swizzle_string(inst->DstReg.CondSwizzle,                                        GL_FALSE, GL_FALSE));      print_comment(inst);      break;   case OPCODE_ARL:      _mesa_printf("ARL ");      print_dst_reg(&inst->DstReg, mode, prog);      _mesa_printf(", ");      print_src_reg(&inst->SrcReg[0], mode, prog);      print_comment(inst);      break;   case OPCODE_BRA:      _mesa_printf("BRA %d (%s%s)",                   inst->BranchTarget,                   _mesa_condcode_string(inst->DstReg.CondMask),                   _mesa_swizzle_string(inst->DstReg.CondSwizzle, 0, GL_FALSE));      print_comment(inst);      break;   case OPCODE_IF:      if (inst->SrcReg[0].File != PROGRAM_UNDEFINED) {         /* Use ordinary register */         _mesa_printf("IF ");         print_src_reg(&inst->SrcReg[0], mode, prog);         _mesa_printf("; ");      }      else {         /* Use cond codes */         _mesa_printf("IF (%s%s);",                      _mesa_condcode_string(inst->DstReg.CondMask),                      _mesa_swizzle_string(inst->DstReg.CondSwizzle,                                           0, GL_FALSE));      }      _mesa_printf(" # (if false, goto %d)", inst->BranchTarget);      print_comment(inst);      return indent + 3;   case OPCODE_ELSE:      _mesa_printf("ELSE; # (goto %d)\n", inst->BranchTarget);      return indent + 3;   case OPCODE_ENDIF:      _mesa_printf("ENDIF;\n");      break;   case OPCODE_BGNLOOP:      _mesa_printf("BGNLOOP; # (end at %d)\n", inst->BranchTarget);      return indent + 3;   case OPCODE_ENDLOOP:      _mesa_printf("ENDLOOP; # (goto %d)\n", inst->BranchTarget);      break;   case OPCODE_BRK:   case OPCODE_CONT:      _mesa_printf("%s (%s%s); # (goto %d)",                   _mesa_opcode_string(inst->Opcode),                   _mesa_condcode_string(inst->DstReg.CondMask),                   _mesa_swizzle_string(inst->DstReg.CondSwizzle, 0, GL_FALSE),                   inst->BranchTarget);      print_comment(inst);      break;   case OPCODE_BGNSUB:      if (mode == PROG_PRINT_NV) {         _mesa_printf("%s:\n", inst->Comment); /* comment is label */         return indent;      }      else {         _mesa_printf("BGNSUB");         print_comment(inst);         return indent + 3;      }   case OPCODE_ENDSUB:      if (mode == PROG_PRINT_DEBUG) {         _mesa_printf("ENDSUB");         print_comment(inst);      }      break;   case OPCODE_CAL:      if (mode == PROG_PRINT_NV) {         _mesa_printf("CAL %s;  # (goto %d)\n", inst->Comment, inst->BranchTarget);      }      else {         _mesa_printf("CAL %u", inst->BranchTarget);         print_comment(inst);      }      break;   case OPCODE_RET:      _mesa_printf("RET (%s%s)",                   _mesa_condcode_string(inst->DstReg.CondMask),                   _mesa_swizzle_string(inst->DstReg.CondSwizzle, 0, GL_FALSE));      print_comment(inst);      break;   case OPCODE_END:      _mesa_printf("END\n");      break;   case OPCODE_NOP:      if (mode == PROG_PRINT_DEBUG) {         _mesa_printf("NOP");         print_comment(inst);      }      else if (inst->Comment) {         /* ARB/NV extensions don't have NOP instruction */         _mesa_printf("# %s\n", inst->Comment);      }      break;   /* XXX may need other special-case instructions */   default:      /* typical alu instruction */      print_alu_instruction(inst,                            _mesa_opcode_string(inst->Opcode),                            _mesa_num_inst_src_regs(inst->Opcode),                            mode, prog);      break;   }   return indent;}/** * Print program to stdout, default options. */void_mesa_print_program(const struct gl_program *prog){   _mesa_print_program_opt(prog, PROG_PRINT_DEBUG, GL_TRUE);}/** * Print program, with options. */void_mesa_print_program_opt(const struct gl_program *prog,                        gl_prog_print_mode mode,                        GLboolean lineNumbers){   GLuint i, indent = 0;   switch (prog->Target) {   case GL_VERTEX_PROGRAM_ARB:      if (mode == PROG_PRINT_ARB)         _mesa_printf("!!ARBvp1.0\n");      else if (mode == PROG_PRINT_NV)         _mesa_printf("!!VP1.0\n");      else         _mesa_printf("# Vertex Program/Shader\n");      break;   case GL_FRAGMENT_PROGRAM_ARB:   case GL_FRAGMENT_PROGRAM_NV:      if (mode == PROG_PRINT_ARB)         _mesa_printf("!!ARBfp1.0\n");      else if (mode == PROG_PRINT_NV)         _mesa_printf("!!FP1.0\n");      else         _mesa_printf("# Fragment Program/Shader\n");      break;   }   for (i = 0; i < prog->NumInstructions; i++) {      if (lineNumbers)         _mesa_printf("%3d: ", i);      indent = _mesa_print_instruction_opt(prog->Instructions + i,                                           indent, mode, prog);   }}/** * Print all of a program's parameters. */void_mesa_print_program_parameters(GLcontext *ctx, const struct gl_program *prog){   GLuint i;   _mesa_printf("InputsRead: 0x%x\n", prog->InputsRead);   _mesa_printf("OutputsWritten: 0x%x\n", prog->OutputsWritten);   _mesa_printf("NumInstructions=%d\n", prog->NumInstructions);   _mesa_printf("NumTemporaries=%d\n", prog->NumTemporaries);   _mesa_printf("NumParameters=%d\n", prog->NumParameters);   _mesa_printf("NumAttributes=%d\n", prog->NumAttributes);   _mesa_printf("NumAddressRegs=%d\n", prog->NumAddressRegs);   _mesa_printf("Samplers=[ ");   for (i = 0; i < MAX_SAMPLERS; i++) {      _mesa_printf("%d ", prog->SamplerUnits[i]);   }   _mesa_printf("]\n");   _mesa_load_state_parameters(ctx, prog->Parameters);#if 0   _mesa_printf("Local Params:\n");   for (i = 0; i < MAX_PROGRAM_LOCAL_PARAMS; i++){      const GLfloat *p = prog->LocalParams[i];      _mesa_printf("%2d: %f, %f, %f, %f\n", i, p[0], p[1], p[2], p[3]);   }#endif	   _mesa_print_parameter_list(prog->Parameters);}void_mesa_print_parameter_list(const struct gl_program_parameter_list *list){   const gl_prog_print_mode mode = PROG_PRINT_DEBUG;   GLuint i;   if (!list)      return;   _mesa_printf("param list %p\n", (void *) list);   for (i = 0; i < list->NumParameters; i++){      struct gl_program_parameter *param = list->Parameters + i;      const GLfloat *v = list->ParameterValues[i];      _mesa_printf("param[%d] sz=%d %s %s = {%.3g, %.3g, %.3g, %.3g};\n",                   i, param->Size,                   file_string(list->Parameters[i].Type, mode),                   param->Name, v[0], v[1], v[2], v[3]);   }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -