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

📄 prog_print.c

📁 Mesa is an open-source implementation of the OpenGL specification - a system for rendering interacti
💻 C
📖 第 1 页 / 共 2 页
字号:
/* * Mesa 3-D graphics library * Version:  6.5.3 * * Copyright (C) 1999-2007  Brian Paul   All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. *//** * \file prog_print.c * Print vertex/fragment programs - for debugging. * \author Brian Paul */#include "glheader.h"#include "context.h"#include "imports.h"#include "prog_instruction.h"#include "prog_parameter.h"#include "prog_print.h"#include "prog_statevars.h"/** * Return string name for given program/register file. */static const char *file_string(enum register_file f, gl_prog_print_mode mode){   switch (f) {   case PROGRAM_TEMPORARY:      return "TEMP";   case PROGRAM_LOCAL_PARAM:      return "LOCAL";   case PROGRAM_ENV_PARAM:      return "ENV";   case PROGRAM_STATE_VAR:      return "STATE";   case PROGRAM_INPUT:      return "INPUT";   case PROGRAM_OUTPUT:      return "OUTPUT";   case PROGRAM_NAMED_PARAM:      return "NAMED";   case PROGRAM_CONSTANT:      return "CONST";   case PROGRAM_UNIFORM:      return "UNIFORM";   case PROGRAM_VARYING:      return "VARYING";   case PROGRAM_WRITE_ONLY:      return "WRITE_ONLY";   case PROGRAM_ADDRESS:      return "ADDR";   case PROGRAM_SAMPLER:      return "SAMPLER";   default:      return "Unknown program file!";   }}/** * Return ARB_v/f_prog-style input attrib string. */static const char *arb_input_attrib_string(GLint index, GLenum progType){   const char *vertAttribs[] = {      "vertex.position",      "vertex.weight",      "vertex.normal",      "vertex.color.primary",      "vertex.color.secondary",      "vertex.fogcoord",      "vertex.(six)",      "vertex.(seven)",      "vertex.texcoord[0]",      "vertex.texcoord[1]",      "vertex.texcoord[2]",      "vertex.texcoord[3]",      "vertex.texcoord[4]",      "vertex.texcoord[5]",      "vertex.texcoord[6]",      "vertex.texcoord[7]",      "vertex.attrib[0]",      "vertex.attrib[1]",      "vertex.attrib[2]",      "vertex.attrib[3]",      "vertex.attrib[4]",      "vertex.attrib[5]",      "vertex.attrib[6]",      "vertex.attrib[7]",      "vertex.attrib[8]",      "vertex.attrib[9]",      "vertex.attrib[10]",      "vertex.attrib[11]",      "vertex.attrib[12]",      "vertex.attrib[13]",      "vertex.attrib[14]",      "vertex.attrib[15]"   };   const char *fragAttribs[] = {      "fragment.position",      "fragment.color.primary",      "fragment.color.secondary",      "fragment.fogcoord",      "fragment.texcoord[0]",      "fragment.texcoord[1]",      "fragment.texcoord[2]",      "fragment.texcoord[3]",      "fragment.texcoord[4]",      "fragment.texcoord[5]",      "fragment.texcoord[6]",      "fragment.texcoord[7]",      "fragment.varying[0]",      "fragment.varying[1]",      "fragment.varying[2]",      "fragment.varying[3]",      "fragment.varying[4]",      "fragment.varying[5]",      "fragment.varying[6]",      "fragment.varying[7]"   };   if (progType == GL_VERTEX_PROGRAM_ARB) {      assert(index < sizeof(vertAttribs) / sizeof(vertAttribs[0]));      return vertAttribs[index];   }   else {      assert(index < sizeof(fragAttribs) / sizeof(fragAttribs[0]));      return fragAttribs[index];   }}/** * Return ARB_v/f_prog-style output attrib string. */static const char *arb_output_attrib_string(GLint index, GLenum progType){   const char *vertResults[] = {      "result.position",      "result.color.primary",      "result.color.secondary",      "result.fogcoord",      "result.texcoord[0]",      "result.texcoord[1]",      "result.texcoord[2]",      "result.texcoord[3]",      "result.texcoord[4]",      "result.texcoord[5]",      "result.texcoord[6]",      "result.texcoord[7]",      "result.varying[0]",      "result.varying[1]",      "result.varying[2]",      "result.varying[3]",      "result.varying[4]",      "result.varying[5]",      "result.varying[6]",      "result.varying[7]"   };   const char *fragResults[] = {      "result.color",      "result.depth"   };   if (progType == GL_VERTEX_PROGRAM_ARB) {      assert(index < sizeof(vertResults) / sizeof(vertResults[0]));      return vertResults[index];   }   else {      assert(index < sizeof(fragResults) / sizeof(fragResults[0]));      return fragResults[index];   }}/** * Return string representation of the given register. * Note that some types of registers (like PROGRAM_UNIFORM) aren't defined * by the ARB/NV program languages so we've taken some liberties here. * \param file  the register file (PROGRAM_INPUT, PROGRAM_TEMPORARY, etc) * \param index  number of the register in the register file * \param mode  the output format/mode/style * \param prog  pointer to containing program */static const char *reg_string(enum register_file f, GLint index, gl_prog_print_mode mode,           GLboolean relAddr, const struct gl_program *prog){   static char str[100];   str[0] = 0;   switch (mode) {   case PROG_PRINT_DEBUG:      if (relAddr)         sprintf(str, "%s[ADDR%s%d]", file_string(f, mode), (index > 0) ? "+" : "", index);      else         sprintf(str, "%s[%d]", file_string(f, mode), index);      break;   case PROG_PRINT_ARB:      switch (f) {      case PROGRAM_INPUT:         sprintf(str, "%s", arb_input_attrib_string(index, prog->Target));         break;      case PROGRAM_OUTPUT:         sprintf(str, "%s", arb_output_attrib_string(index, prog->Target));         break;      case PROGRAM_TEMPORARY:         sprintf(str, "temp%d", index);         break;      case PROGRAM_ENV_PARAM:         sprintf(str, "program.env[%d]", index);         break;      case PROGRAM_LOCAL_PARAM:         sprintf(str, "program.local[%d]", index);         break;      case PROGRAM_VARYING: /* extension */         sprintf(str, "varying[%d]", index);         break;      case PROGRAM_CONSTANT: /* extension */         sprintf(str, "constant[%d]", index);         break;      case PROGRAM_UNIFORM: /* extension */         sprintf(str, "uniform[%d]", index);         break;      case PROGRAM_STATE_VAR:         {            struct gl_program_parameter *param               = prog->Parameters->Parameters + index;            sprintf(str, _mesa_program_state_string(param->StateIndexes));         }         break;      case PROGRAM_ADDRESS:         sprintf(str, "A%d", index);         break;      default:         _mesa_problem(NULL, "bad file in reg_string()");      }      break;   case PROG_PRINT_NV:      switch (f) {      case PROGRAM_INPUT:         if (prog->Target == GL_VERTEX_PROGRAM_ARB)            sprintf(str, "v[%d]", index);         else            sprintf(str, "f[%d]", index);         break;      case PROGRAM_OUTPUT:         sprintf(str, "o[%d]", index);         break;      case PROGRAM_TEMPORARY:         sprintf(str, "R%d", index);         break;      case PROGRAM_ENV_PARAM:         sprintf(str, "c[%d]", index);         break;      case PROGRAM_VARYING: /* extension */         sprintf(str, "varying[%d]", index);         break;      case PROGRAM_UNIFORM: /* extension */         sprintf(str, "uniform[%d]", index);         break;      case PROGRAM_CONSTANT: /* extension */         sprintf(str, "constant[%d]", index);         break;      case PROGRAM_STATE_VAR: /* extension */         sprintf(str, "state[%d]", index);         break;      default:         _mesa_problem(NULL, "bad file in reg_string()");      }      break;   default:      _mesa_problem(NULL, "bad mode in reg_string()");   }   return str;}/** * Return a string representation of the given swizzle word. * If extended is true, use extended (comma-separated) format. * \param swizzle  the swizzle field * \param negateBase  4-bit negation vector * \param extended  if true, also allow 0, 1 values */const char *_mesa_swizzle_string(GLuint swizzle, GLuint negateBase, GLboolean extended){   static const char swz[] = "xyzw01!?";  /* See SWIZZLE_x definitions */   static char s[20];   GLuint i = 0;   if (!extended && swizzle == SWIZZLE_NOOP && negateBase == 0)      return ""; /* no swizzle/negation */   if (!extended)      s[i++] = '.';   if (negateBase & NEGATE_X)      s[i++] = '-';   s[i++] = swz[GET_SWZ(swizzle, 0)];   if (extended) {      s[i++] = ',';   }   if (negateBase & NEGATE_Y)      s[i++] = '-';   s[i++] = swz[GET_SWZ(swizzle, 1)];   if (extended) {      s[i++] = ',';   }   if (negateBase & NEGATE_Z)      s[i++] = '-';   s[i++] = swz[GET_SWZ(swizzle, 2)];   if (extended) {      s[i++] = ',';   }   if (negateBase & NEGATE_W)      s[i++] = '-';   s[i++] = swz[GET_SWZ(swizzle, 3)];   s[i] = 0;   return s;}static const char *writemask_string(GLuint writeMask){   static char s[10];   GLuint i = 0;   if (writeMask == WRITEMASK_XYZW)      return "";   s[i++] = '.';   if (writeMask & WRITEMASK_X)      s[i++] = 'x';   if (writeMask & WRITEMASK_Y)      s[i++] = 'y';   if (writeMask & WRITEMASK_Z)      s[i++] = 'z';   if (writeMask & WRITEMASK_W)      s[i++] = 'w';   s[i] = 0;   return s;}const char *_mesa_condcode_string(GLuint condcode){   switch (condcode) {   case COND_GT:  return "GT";   case COND_EQ:  return "EQ";   case COND_LT:  return "LT";   case COND_UN:  return "UN";   case COND_GE:  return "GE";   case COND_LE:  return "LE";   case COND_NE:  return "NE";   case COND_TR:  return "TR";   case COND_FL:  return "FL";   default: return "cond???";   }}static voidprint_dst_reg(const struct prog_dst_register *dstReg, gl_prog_print_mode mode,              const struct gl_program *prog){

⌨️ 快捷键说明

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