This lets us assign uniform storage for packed UBOs after they have been lowered otherwise the var is removed too early. --- src/compiler/glsl/glsl_parser_extras.cpp | 5 +++-- src/compiler/glsl/ir_optimization.h | 4 +++- src/compiler/glsl/link_varyings.cpp | 2 +- src/compiler/glsl/linker.cpp | 1 + src/compiler/glsl/opt_dead_code.cpp | 8 +++++--- src/compiler/glsl/standalone.cpp | 1 + src/compiler/glsl/test_optpass.cpp | 5 +++-- src/mesa/drivers/dri/i965/brw_link.cpp | 2 +- src/mesa/main/ff_fragment_shader.cpp | 2 +- src/mesa/program/ir_to_mesa.cpp | 2 +- src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 2 +- 11 files changed, 21 insertions(+), 13 deletions(-)
diff --git a/src/compiler/glsl/glsl_parser_extras.cpp b/src/compiler/glsl/glsl_parser_extras.cpp index f1820b9..673f6d2 100644 --- a/src/compiler/glsl/glsl_parser_extras.cpp +++ b/src/compiler/glsl/glsl_parser_extras.cpp @@ -1969,7 +1969,7 @@ _mesa_glsl_compile_shader(struct gl_context *ctx, struct gl_shader *shader, /* Do some optimization at compile time to reduce shader IR size * and reduce later work if the same shader is linked multiple times */ - while (do_common_optimization(shader->ir, false, false, options, + while (do_common_optimization(shader->ir, false, false, false, options, ctx->Const.NativeIntegers)) ; @@ -2067,6 +2067,7 @@ _mesa_glsl_compile_shader(struct gl_context *ctx, struct gl_shader *shader, bool do_common_optimization(exec_list *ir, bool linked, bool uniform_locations_assigned, + bool ubos_lowered, const struct gl_shader_compiler_options *options, bool native_integers) { @@ -2109,7 +2110,7 @@ do_common_optimization(exec_list *ir, bool linked, } if (linked) - OPT(do_dead_code, ir, uniform_locations_assigned); + OPT(do_dead_code, ir, uniform_locations_assigned, ubos_lowered); else OPT(do_dead_code_unlinked, ir); OPT(do_dead_code_local, ir); diff --git a/src/compiler/glsl/ir_optimization.h b/src/compiler/glsl/ir_optimization.h index 0d6c4e6..88a4ebd 100644 --- a/src/compiler/glsl/ir_optimization.h +++ b/src/compiler/glsl/ir_optimization.h @@ -77,6 +77,7 @@ enum lower_packing_builtins_op { bool do_common_optimization(exec_list *ir, bool linked, bool uniform_locations_assigned, + bool ubos_lowered, const struct gl_shader_compiler_options *options, bool native_integers); @@ -97,7 +98,8 @@ void do_dead_builtin_varyings(struct gl_context *ctx, gl_linked_shader *consumer, unsigned num_tfeedback_decls, class tfeedback_decl *tfeedback_decls); -bool do_dead_code(exec_list *instructions, bool uniform_locations_assigned); +bool do_dead_code(exec_list *instructions, bool uniform_locations_assigned, + bool ubos_lowered); bool do_dead_code_local(exec_list *instructions); bool do_dead_code_unlinked(exec_list *instructions); bool do_dead_functions(exec_list *instructions); diff --git a/src/compiler/glsl/link_varyings.cpp b/src/compiler/glsl/link_varyings.cpp index fe499a5..dd1c36a 100644 --- a/src/compiler/glsl/link_varyings.cpp +++ b/src/compiler/glsl/link_varyings.cpp @@ -607,7 +607,7 @@ remove_unused_shader_inputs_and_outputs(bool is_separate_shader_object, /* Eliminate code that is now dead due to unused inputs/outputs being * demoted. */ - while (do_dead_code(sh->ir, false)) + while (do_dead_code(sh->ir, false, true)) ; } diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp index 126d11d..d7ed436 100644 --- a/src/compiler/glsl/linker.cpp +++ b/src/compiler/glsl/linker.cpp @@ -5053,6 +5053,7 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog) } while (do_common_optimization(prog->_LinkedShaders[i]->ir, true, false, + false, &ctx->Const.ShaderCompilerOptions[i], ctx->Const.NativeIntegers)) ; diff --git a/src/compiler/glsl/opt_dead_code.cpp b/src/compiler/glsl/opt_dead_code.cpp index 75e668a..980660e 100644 --- a/src/compiler/glsl/opt_dead_code.cpp +++ b/src/compiler/glsl/opt_dead_code.cpp @@ -43,7 +43,8 @@ static bool debug = false; * for usage on an unlinked instruction stream. */ bool -do_dead_code(exec_list *instructions, bool uniform_locations_assigned) +do_dead_code(exec_list *instructions, bool uniform_locations_assigned, + bool ubos_lowered) { ir_variable_refcount_visitor v; bool progress = false; @@ -144,7 +145,8 @@ do_dead_code(exec_list *instructions, bool uniform_locations_assigned) * layouts, do not eliminate it. */ if (entry->var->is_in_buffer_block()) { - if (entry->var->get_interface_type_packing() != + if (ubos_lowered || + entry->var->get_interface_type_packing() != GLSL_INTERFACE_PACKING_PACKED) continue; } @@ -187,7 +189,7 @@ do_dead_code_unlinked(exec_list *instructions) * inside the body of the function, something has already gone * terribly, terribly wrong. */ - if (do_dead_code(&sig->body, false)) + if (do_dead_code(&sig->body, false, false)) progress = true; } } diff --git a/src/compiler/glsl/standalone.cpp b/src/compiler/glsl/standalone.cpp index 5fe1f61..a81041f 100644 --- a/src/compiler/glsl/standalone.cpp +++ b/src/compiler/glsl/standalone.cpp @@ -537,6 +537,7 @@ standalone_compile_shader(const struct standalone_options *_options, progress = do_common_optimization(ir, false, false, + false, compiler_options, true) && progress; diff --git a/src/compiler/glsl/test_optpass.cpp b/src/compiler/glsl/test_optpass.cpp index c6e9788..008e573 100644 --- a/src/compiler/glsl/test_optpass.cpp +++ b/src/compiler/glsl/test_optpass.cpp @@ -63,7 +63,8 @@ do_optimization(struct exec_list *ir, const char *optimization, int int_4; if (sscanf(optimization, "do_common_optimization ( %d ) ", &int_0) == 1) { - return do_common_optimization(ir, int_0 != 0, false, options, true); + return do_common_optimization(ir, int_0 != 0, false, false, options, + true); } else if (strcmp(optimization, "do_algebraic") == 0) { return do_algebraic(ir, true, options); } else if (strcmp(optimization, "do_constant_folding") == 0) { @@ -79,7 +80,7 @@ do_optimization(struct exec_list *ir, const char *optimization, } else if (strcmp(optimization, "do_constant_propagation") == 0) { return do_constant_propagation(ir); } else if (strcmp(optimization, "do_dead_code") == 0) { - return do_dead_code(ir, false); + return do_dead_code(ir, false, false); } else if (strcmp(optimization, "do_dead_code_local") == 0) { return do_dead_code_local(ir); } else if (strcmp(optimization, "do_dead_code_unlinked") == 0) { diff --git a/src/mesa/drivers/dri/i965/brw_link.cpp b/src/mesa/drivers/dri/i965/brw_link.cpp index 92e0f38..cdd5a73 100644 --- a/src/mesa/drivers/dri/i965/brw_link.cpp +++ b/src/mesa/drivers/dri/i965/brw_link.cpp @@ -145,7 +145,7 @@ process_glsl_ir(struct brw_context *brw, brw_do_vector_splitting(shader->ir); } - progress = do_common_optimization(shader->ir, true, true, + progress = do_common_optimization(shader->ir, true, true, true, options, ctx->Const.NativeIntegers) || progress; } while (progress); diff --git a/src/mesa/main/ff_fragment_shader.cpp b/src/mesa/main/ff_fragment_shader.cpp index d9d5458..a4e4773 100644 --- a/src/mesa/main/ff_fragment_shader.cpp +++ b/src/mesa/main/ff_fragment_shader.cpp @@ -1252,7 +1252,7 @@ create_new_program(struct gl_context *ctx, struct state_key *key) const struct gl_shader_compiler_options *options = &ctx->Const.ShaderCompilerOptions[MESA_SHADER_FRAGMENT]; - while (do_common_optimization(p.shader->ir, false, false, options, + while (do_common_optimization(p.shader->ir, false, false, false, options, ctx->Const.NativeIntegers)) ; reparent_ir(p.shader->ir, p.shader->ir); diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp index ad08bbd..2c380a1 100644 --- a/src/mesa/program/ir_to_mesa.cpp +++ b/src/mesa/program/ir_to_mesa.cpp @@ -2981,7 +2981,7 @@ _mesa_ir_link_shader(struct gl_context *ctx, struct gl_shader_program *prog) progress = do_lower_jumps(ir, true, true, options->EmitNoMainReturn, options->EmitNoCont, options->EmitNoLoops) || progress; - progress = do_common_optimization(ir, true, true, + progress = do_common_optimization(ir, true, true, true, options, ctx->Const.NativeIntegers) || progress; diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp index 0ba83f4..d28f1cb 100644 --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp @@ -6871,7 +6871,7 @@ st_link_shader(struct gl_context *ctx, struct gl_shader_program *prog) progress = do_lower_jumps(ir, true, true, options->EmitNoMainReturn, options->EmitNoCont, options->EmitNoLoops) || progress; - progress = do_common_optimization(ir, true, true, options, + progress = do_common_optimization(ir, true, true, true, options, ctx->Const.NativeIntegers) || progress; -- 2.9.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev