diff options
-rw-r--r-- | src/compiler/glsl/link_varyings.cpp | 30 | ||||
-rw-r--r-- | src/compiler/glsl/linker.cpp | 39 | ||||
-rw-r--r-- | src/compiler/glsl/nir_linker.cpp | 1 |
3 files changed, 70 insertions, 0 deletions
diff --git a/src/compiler/glsl/link_varyings.cpp b/src/compiler/glsl/link_varyings.cpp index 767672b200..6cd75aa350 100644 --- a/src/compiler/glsl/link_varyings.cpp +++ b/src/compiler/glsl/link_varyings.cpp @@ -2511,6 +2511,16 @@ link_varyings(struct gl_shader_program *prog, unsigned first, unsigned last, return false; } + if (ctx->_Shader->Flags & GLSL_DUMP) { + printf("Before bottom of link_varyings\n"); + for (unsigned i = MESA_SHADER_VERTEX; i <= MESA_SHADER_FRAGMENT; i++) { + if (prog->_LinkedShaders[i] != NULL) { + printf("Stage: %s\n", _mesa_shader_stage_to_string(i)); + _mesa_print_ir(stdout, prog->_LinkedShaders[i]->ir, NULL); + } + } + } + if (last <= MESA_SHADER_FRAGMENT) { /* Remove unused varyings from the first/last stage unless SSO */ remove_unused_shader_inputs_and_outputs(prog->SeparateShader, @@ -2520,6 +2530,16 @@ link_varyings(struct gl_shader_program *prog, unsigned first, unsigned last, prog->_LinkedShaders[last], ir_var_shader_out); + if (ctx->_Shader->Flags & GLSL_DUMP) { + printf("After remove_unused_shader_inputs_and_outputs\n"); + for (unsigned i = MESA_SHADER_VERTEX; i <= MESA_SHADER_FRAGMENT; i++) { + if (prog->_LinkedShaders[i] != NULL) { + printf("Stage: %s\n", _mesa_shader_stage_to_string(i)); + _mesa_print_ir(stdout, prog->_LinkedShaders[i]->ir, NULL); + } + } + } + /* If the program is made up of only a single stage */ if (first == last) { gl_linked_shader *const sh = prog->_LinkedShaders[last]; @@ -2572,6 +2592,16 @@ link_varyings(struct gl_shader_program *prog, unsigned first, unsigned last, reserved_out_slots | reserved_in_slots)) return false; + if (ctx->_Shader->Flags & GLSL_DUMP) { + printf("After assign_varying_locations, stage %s\n", _mesa_shader_stage_to_string(i)); + for (unsigned i = MESA_SHADER_VERTEX; i <= MESA_SHADER_FRAGMENT; i++) { + if (prog->_LinkedShaders[i] != NULL) { + printf("Stage: %s\n", _mesa_shader_stage_to_string(i)); + _mesa_print_ir(stdout, prog->_LinkedShaders[i]->ir, NULL); + } + } + } + /* This must be done after all dead varyings are eliminated. */ if (sh_i != NULL) { unsigned slots_used = _mesa_bitcount_64(reserved_out_slots); diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp index 30996571c9..e9130287f7 100644 --- a/src/compiler/glsl/linker.cpp +++ b/src/compiler/glsl/linker.cpp @@ -4583,14 +4583,44 @@ link_varyings_and_uniforms(unsigned first, unsigned last, break; } + if (ctx->_Shader->Flags & GLSL_DUMP) { + printf("Before link_varyings\n"); + for (unsigned i = MESA_SHADER_VERTEX; i <= MESA_SHADER_FRAGMENT; i++) { + if (prog->_LinkedShaders[i] != NULL) { + printf("Stage: %s\n", _mesa_shader_stage_to_string(i)); + _mesa_print_ir(stdout, prog->_LinkedShaders[i]->ir, NULL); + } + } + } + if (!link_varyings(prog, first, last, ctx, mem_ctx)) return false; + if (ctx->_Shader->Flags & GLSL_DUMP) { + printf("Before link_and_validate_uniforms\n"); + for (unsigned i = MESA_SHADER_VERTEX; i <= MESA_SHADER_FRAGMENT; i++) { + if (prog->_LinkedShaders[i] != NULL) { + printf("Stage: %s\n", _mesa_shader_stage_to_string(i)); + _mesa_print_ir(stdout, prog->_LinkedShaders[i]->ir, NULL); + } + } + } + link_and_validate_uniforms(ctx, prog); if (!prog->data->LinkStatus) return false; + if (ctx->_Shader->Flags & GLSL_DUMP) { + printf("After link_varyings\n"); + for (unsigned i = MESA_SHADER_VERTEX; i <= MESA_SHADER_FRAGMENT; i++) { + if (prog->_LinkedShaders[i] != NULL) { + printf("Stage: %s\n", _mesa_shader_stage_to_string(i)); + _mesa_print_ir(stdout, prog->_LinkedShaders[i]->ir, NULL); + } + } + } + for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { if (prog->_LinkedShaders[i] == NULL) continue; @@ -5086,6 +5116,9 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog) } done: + if (ctx->_Shader->Flags & GLSL_DUMP) + printf("Linking done\n"); + for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { free(shader_list[i]); if (prog->_LinkedShaders[i] == NULL) @@ -5102,6 +5135,9 @@ done: /* Retain any live IR, but trash the rest. */ reparent_ir(prog->_LinkedShaders[i]->ir, prog->_LinkedShaders[i]->ir); + if (ctx->_Shader->Flags & GLSL_DUMP) + _mesa_print_ir(stdout, prog->_LinkedShaders[i]->ir, NULL); + /* The symbol table in the linked shaders may contain references to * variables that were removed (e.g., unused uniforms). Since it may * contain junk, there is no possible valid use. Delete it and set the @@ -5111,5 +5147,8 @@ done: prog->_LinkedShaders[i]->symbols = NULL; } + if (ctx->_Shader->Flags & GLSL_DUMP) + fflush(stdout); + ralloc_free(mem_ctx); } diff --git a/src/compiler/glsl/nir_linker.cpp b/src/compiler/glsl/nir_linker.cpp index c64198a375..22204c1d54 100644 --- a/src/compiler/glsl/nir_linker.cpp +++ b/src/compiler/glsl/nir_linker.cpp @@ -229,4 +229,5 @@ void finalize_linked_nir_shader(struct gl_shader_program *prog, struct gl_linked_shader *sh) { + nir_print_shader(sh->nir, stdout); } |