Ejemplo n.º 1
0
/**
 * 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 f  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(gl_register_file f, GLint index, gl_prog_print_mode mode,
           GLboolean relAddr, const struct gl_program *prog)
{
    static char str[100];
    const char *addr = relAddr ? "ADDR+" : "";

    str[0] = 0;

    switch (mode) {
    case PROG_PRINT_DEBUG:
        sprintf(str, "%s[%s%d]",
                _mesa_register_file_name(f), addr, 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_CONSTANT: /* extension */
            sprintf(str, "constant[%s%d]", addr, index);
            break;
        case PROGRAM_UNIFORM: /* extension */
            sprintf(str, "uniform[%s%d]", addr, index);
            break;
        case PROGRAM_SYSTEM_VALUE:
            sprintf(str, "sysvalue[%s%d]", addr, index);
            break;
        case PROGRAM_STATE_VAR:
        {
            struct gl_program_parameter *param
                    = prog->Parameters->Parameters + index;
            char *state = _mesa_program_state_string(param->StateIndexes);
            sprintf(str, "%s", state);
            free(state);
        }
        break;
        case PROGRAM_ADDRESS:
            sprintf(str, "A%d", index);
            break;
        default:
            _mesa_problem(NULL, "bad file in reg_string()");
        }
        break;

    default:
        _mesa_problem(NULL, "bad mode in reg_string()");
    }

    return str;
}
Ejemplo n.º 2
0
/**
 * 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 f  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(gl_register_file f, GLint index, gl_prog_print_mode mode,
           GLboolean relAddr, const struct gl_program *prog)
{
   static char str[100];
   const char *addr = relAddr ? "ADDR+" : "";

   str[0] = 0;

   switch (mode) {
   case PROG_PRINT_DEBUG:
      _mesa_sprintf(str, "%s[%s%d]", file_string(f, mode), addr, index);
      break;

   case PROG_PRINT_ARB:
      switch (f) {
      case PROGRAM_INPUT:
         _mesa_sprintf(str, "%s", arb_input_attrib_string(index, prog->Target));
         break;
      case PROGRAM_OUTPUT:
         _mesa_sprintf(str, "%s", arb_output_attrib_string(index, prog->Target));
         break;
      case PROGRAM_TEMPORARY:
         _mesa_sprintf(str, "temp%d", index);
         break;
      case PROGRAM_ENV_PARAM:
         _mesa_sprintf(str, "program.env[%s%d]", addr, index);
         break;
      case PROGRAM_LOCAL_PARAM:
         _mesa_sprintf(str, "program.local[%s%d]", addr, index);
         break;
      case PROGRAM_VARYING: /* extension */
         _mesa_sprintf(str, "varying[%s%d]", addr, index);
         break;
      case PROGRAM_CONSTANT: /* extension */
         _mesa_sprintf(str, "constant[%s%d]", addr, index);
         break;
      case PROGRAM_UNIFORM: /* extension */
         _mesa_sprintf(str, "uniform[%s%d]", addr, index);
         break;
      case PROGRAM_STATE_VAR:
         {
            struct gl_program_parameter *param
               = prog->Parameters->Parameters + index;
            char *state = _mesa_program_state_string(param->StateIndexes);
            _mesa_sprintf(str, state);
            _mesa_free(state);
         }
         break;
      case PROGRAM_ADDRESS:
         _mesa_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)
            _mesa_sprintf(str, "v[%d]", index);
         else
            _mesa_sprintf(str, "f[%d]", index);
         break;
      case PROGRAM_OUTPUT:
         _mesa_sprintf(str, "o[%d]", index);
         break;
      case PROGRAM_TEMPORARY:
         _mesa_sprintf(str, "R%d", index);
         break;
      case PROGRAM_ENV_PARAM:
         _mesa_sprintf(str, "c[%d]", index);
         break;
      case PROGRAM_VARYING: /* extension */
         _mesa_sprintf(str, "varying[%s%d]", addr, index);
         break;
      case PROGRAM_UNIFORM: /* extension */
         _mesa_sprintf(str, "uniform[%s%d]", addr, index);
         break;
      case PROGRAM_CONSTANT: /* extension */
         _mesa_sprintf(str, "constant[%s%d]", addr, index);
         break;
      case PROGRAM_STATE_VAR: /* extension */
         _mesa_sprintf(str, "state[%s%d]", addr, index);
         break;
      default:
         _mesa_problem(NULL, "bad file in reg_string()");
      }
      break;

   default:
      _mesa_problem(NULL, "bad mode in reg_string()");
   }

   return str;
}