extern "C" {
-static void
-st_dump_program_for_shader_db(struct gl_context *ctx,
- struct gl_shader_program *prog)
-{
- /* Dump only successfully compiled and linked shaders to the specified
- * file. This is for shader-db.
- *
- * These options allow some pre-processing of shaders while dumping,
- * because some apps have ill-formed shaders.
- */
- const char *dump_filename = os_get_option("ST_DUMP_SHADERS");
- const char *insert_directives = os_get_option("ST_DUMP_INSERT");
-
- if (dump_filename && prog->Name != 0) {
- FILE *f = fopen(dump_filename, "a");
-
- if (f) {
- for (unsigned i = 0; i < prog->NumShaders; i++) {
- const struct gl_shader *sh = prog->Shaders[i];
- const char *source;
- bool skip_version = false;
-
- if (!sh)
- continue;
-
- source = sh->Source;
-
- /* This string mustn't be changed. shader-db uses it to find
- * where the shader begins.
- */
- fprintf(f, "GLSL %s shader %d source for linked program %d:\n",
- _mesa_shader_stage_to_string(sh->Stage),
- i, prog->Name);
-
- /* Dump the forced version if set. */
- if (ctx->Const.ForceGLSLVersion) {
- fprintf(f, "#version %i\n", ctx->Const.ForceGLSLVersion);
- skip_version = true;
- }
-
- /* Insert directives (optional). */
- if (insert_directives) {
- if (!ctx->Const.ForceGLSLVersion && prog->Version)
- fprintf(f, "#version %i\n", prog->Version);
- fprintf(f, "%s\n", insert_directives);
- skip_version = true;
- }
-
- if (skip_version && strncmp(source, "#version ", 9) == 0) {
- const char *next_line = strstr(source, "\n");
-
- if (next_line)
- source = next_line + 1;
- else
- continue;
- }
-
- fprintf(f, "%s", source);
- fprintf(f, "\n");
- }
- fclose(f);
- }
- }
-}
-
/**
* Link a shader.
* Called via ctx->Driver.LinkShader()
_mesa_reference_program(ctx, &linked_prog, NULL);
}
- st_dump_program_for_shader_db(ctx, prog);
return GL_TRUE;
}