Exemplo n.º 1
0
/**
 * Append the shader's uniform info/values to the shader log file.
 * The log file will typically have been created by the
 * _mesa_write_shader_to_file function.
 */
void
_mesa_append_uniforms_to_file(const struct gl_shader *shader)
{
    const struct gl_program *const prog = shader->Program;
    const char *type;
    char filename[100];
    FILE *f;

    if (shader->Stage == MESA_SHADER_FRAGMENT)
        type = "frag";
    else
        type = "vert";

    _mesa_snprintf(filename, sizeof(filename), "shader_%u.%s", shader->Name, type);
    f = fopen(filename, "a"); /* append */
    if (!f) {
        fprintf(stderr, "Unable to open %s for appending\n", filename);
        return;
    }

    fprintf(f, "/* First-draw parameters / constants */\n");
    fprintf(f, "/*\n");
    _mesa_fprint_parameter_list(f, prog->Parameters);
    fprintf(f, "*/\n");

    fclose(f);
}
Exemplo n.º 2
0
/**
 * Write shader and associated info to a file.
 */
void
_mesa_write_shader_to_file(const struct gl_shader *shader)
{
    const char *type = "????";
    char filename[100];
    FILE *f;

    switch (shader->Stage) {
    case MESA_SHADER_FRAGMENT:
        type = "frag";
        break;
    case MESA_SHADER_TESS_CTRL:
        type = "tesc";
        break;
    case MESA_SHADER_TESS_EVAL:
        type = "tese";
        break;
    case MESA_SHADER_VERTEX:
        type = "vert";
        break;
    case MESA_SHADER_GEOMETRY:
        type = "geom";
        break;
    case MESA_SHADER_COMPUTE:
        type = "comp";
        break;
    }

    _mesa_snprintf(filename, sizeof(filename), "shader_%u.%s", shader->Name, type);
    f = fopen(filename, "w");
    if (!f) {
        fprintf(stderr, "Unable to open %s for writing\n", filename);
        return;
    }

    fprintf(f, "/* Shader %u source, checksum %u */\n", shader->Name, shader->SourceChecksum);
    fputs(shader->Source, f);
    fprintf(f, "\n");

    fprintf(f, "/* Compile status: %s */\n",
            shader->CompileStatus ? "ok" : "fail");
    fprintf(f, "/* Log Info: */\n");
    if (shader->InfoLog) {
        fputs(shader->InfoLog, f);
    }
    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);
        fprintf(f, "*/\n");
        fprintf(f, "/* Parameters / constants */\n");
        fprintf(f, "/*\n");
        _mesa_fprint_parameter_list(f, shader->Program->Parameters);
        fprintf(f, "*/\n");
    }

    fclose(f);
}
Exemplo n.º 3
0
/**
 * Write shader and associated info to a file.
 */
void
_mesa_write_shader_to_file(const struct gl_shader *shader)
{
   const char *type;
   char filename[100];
   FILE *f;

   if (shader->Type == GL_FRAGMENT_SHADER)
      type = "frag";
   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");
   if (!f) {
      fprintf(stderr, "Unable to open %s for writing\n", filename);
      return;
   }

   fprintf(f, "/* Shader %u source, checksum %u */\n", shader->Name, shader->SourceChecksum);
   fputs(shader->Source, f);
   fprintf(f, "\n");

   fprintf(f, "/* Compile status: %s */\n",
           shader->CompileStatus ? "ok" : "fail");
   fprintf(f, "/* Log Info: */\n");
   if (shader->InfoLog) {
      fputs(shader->InfoLog, f);
   }
   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);
      fprintf(f, "*/\n");
      fprintf(f, "/* Parameters / constants */\n");
      fprintf(f, "/*\n");
      _mesa_fprint_parameter_list(f, shader->Program->Parameters);
      fprintf(f, "*/\n");
   }

   fclose(f);
}
Exemplo n.º 4
0
/**
 * Print a program parameter list to stderr.
 */
void
_mesa_print_parameter_list(const struct gl_program_parameter_list *list)
{
    _mesa_fprint_parameter_list(stderr, list);
}