On Tue, Apr 26, 2016 at 12:27 PM, Jason Ekstrand <ja...@jlekstrand.net> wrote:
> Status update: > > I've rebased on master, applied my own review comments and couple of bugs > and pushed it here: > > > https://cgit.freedesktop.org/~jekstrand/mesa/log/?h=wip/nir-foreach-block-v3 > > Changes over what Connor sent: > 1) Minor cosmetic changes to the iteration helper functions > 2) Fixed a bug in the nir_cf_node_cf_tree_last where it would grab the > first node in a loop instead of the last > 3) Reversed the parameters to nir_foreach_block to use the x in Y > convention common to Java and other languages. > 4) Fixed a bug in inline_functions where it needed to use > foreach_block_safe but wasn't > 5) Added patches to update the three passes in the Vulkan driver to use > the new functions > > I kicked it off to the CI system and it passes the Vulkan CTS 100%. I'm > still waiting back for the GL CTS/dEQP/piglit results but I expect them to > be green as well. > > I haven't had a chance to go through all of the little refactor patches. > I'm going to try and do that today. That said, I think it would be good to > get one more set of eyes on so if one other person would be willing to at > least skim it that would make me feel more comfortable. > One more update: I just force-pushed again with a few trivial costmetic cleanups and two bug fixes. The two bug fixes were that lower_gs_intrinsics and lower_indirect_derefs should both be using nir_foreach_block_safe. > On Tue, Apr 12, 2016 at 9:34 PM, Connor Abbott <cwabbo...@gmail.com> > wrote: > >> This is a series based on an idea I had a while ago. It gets one >> instance of an awful callback-based interface for iterating over things. >> The other instance, nir_foreach_source(), would be harder to fix since >> iterating over the sources actually needs state (in order to handle >> indirect sources). Now, instead of doing: >> >> struct my_small_state { >> nir_builder b; >> bool progress; >> }; >> >> ... >> >> bool my_trivial_function(nir_block *b, void *void_state) >> { >> struct my_small_state *state = void_state; >> ... >> } >> >> ... >> >> struct my_small_state state; >> nir_builder_init(&state.b, impl); >> state.progress = false; >> >> nir_foreach_block(impl, my_trivial_function, &state); >> >> you can just do: >> >> bool progress = false; >> nir_builder b; >> nir_builder_init(&b, impl); >> >> nir_foreach_block(impl, block) { >> ... >> } >> >> It's a lot of churn, but it results in a much nicer API, as you can see >> from the diffstat: almost 200 lines of code are deleted, despite the >> impl of the new nir_foreach_block() taking more code. I took the liberty >> of refactoring the code I touched to take advantage of the newer API, in >> order to see just how much nicer we can make things. When the callback >> function was just a simple walk across instructions, I inlined it, and >> most of the time the little state structures passed around became >> unnecessary given that we're now free to pass whatever parameters we >> want. Someone might want to bikeshed some of my choices, though. >> >> Right now, it's split into a number of patches to help >> reviewability/rebasability, but obviously the entire thing needs to be >> squashed before pushing. The patches aren't in any particular order, >> since none of them are really related to each other, and the order will >> be lost when squashing anyways. Nobody should hold off pushing other >> things until this is done, but I'd like to get it in as soon as possible >> to avoid rebase hell. >> >> Piglit tested on i965, but only compile tested on vc4 and freedreno. >> >> Finally, the series is also available at: >> >> git://people.freedesktop.org/~cwabbott0/mesa nir-foreach-block-rewrite >> >> Connor Abbott (47): >> nir: rewrite nir_foreach_block and friends >> nir/dominance: update to new foreach_block >> nir/from_ssa: fixup for new foreach_block() >> nir/inline_functions: fixup for new foreach_block() >> nir/liveness: adapt to new foreach_block() >> nir/lower_alu_to_scalar: fixup for new foreach_block() >> nir/lower_clip: fixup for new foreach_block() >> nir/nir: fixup for new foreach_block() >> nir/lower_gs_intrinsics: fixup for new foreach_block() >> nir/lower_locals_to_regs: fixup for new foreach_block >> nir/lower_load_const: fixup for new foreach_block() >> nir/lower_atomics: fixup for new foreach_block( >> nir/nir_lower_global_vars: fixup for new foreach_block() >> nir/lower_indirect_derefs: fixup for new foreach_block() >> nir/lower_phis_to_scalar: fixup for new foreach_block() >> nir/lower_system_values: fixup for new foreach_block() >> nir/lower_io: adapt to new foreach_block() >> nir/lower_to_source_mods: fixup for new foreeach_block() >> nir/lower_outputs_to_temporaries: fixup for new foreach_block() >> nir/lower_tex: fixup for new foreach_block() >> nir/lower_idiv: fixup for new foreach_block() >> nir/lower_vec_to_movs: fixup for new foreach_block() >> nir/lower_vars_to_ssa: fixup for new foreach_block() >> nir/move_vec_src_uses_to_dest: fixup for new foreach_block() >> nir/lower_two_sided_color: fixup for new foreach_block() >> nir/lower_var_copies: fixup for new foreach_block() >> nir/normalize_cubemap_coords: fixup for new foreach_block() >> nir/lower_samplers: fixup for new foreach_block() >> nir/opt_constant_folding: fixup for new foreach_block() >> nir/opt_gcm: fixup for new foreach_block() >> nir/opt_dce: fixup for new foreach_block() >> nir/opt_dead_cf: fixup for new foreach_block() >> nir/opt_undef: fixup for new foreach_block() >> nir/opt_remove_phis: fixup for new foreach_block() >> nir/opt_cp: use nir_block_get_following_if() >> nir/opt_cp: fixup for new foreach_block() >> nir/phi_builder: fixup for new foreach_block() >> nir/opt_peephole_select: fixup for new foreach_block() >> nir/repair_ssa: fixup for new foreach_block() >> nir/split_var_copies: fixup for new foreach_block() >> nir/remove_dead_variables: fixup for new foreach_block() >> nir/nir_worklist: fixup for new foreach_block() >> nir/validate: fixup for new foreach_block() >> nir/algebraic: fixup for new foreach_block() >> i965/nir: fixup for new foreach_block() >> ir3: fixup for new nir_foreach_block() >> vc4: fixup for new nir_foreach_block() >> >> src/compiler/nir/nir.c | 228 >> +++++++++++---------- >> src/compiler/nir/nir.h | 57 +++++- >> src/compiler/nir/nir_algebraic.py | 34 ++- >> src/compiler/nir/nir_dominance.c | 160 ++++++--------- >> src/compiler/nir/nir_from_ssa.c | 57 +++--- >> src/compiler/nir/nir_inline_functions.c | 53 +++-- >> src/compiler/nir/nir_liveness.c | 24 +-- >> src/compiler/nir/nir_lower_alu_to_scalar.c | 18 +- >> src/compiler/nir/nir_lower_atomics.c | 36 +--- >> src/compiler/nir/nir_lower_clip.c | 50 ++--- >> src/compiler/nir/nir_lower_global_vars_to_local.c | 38 ++-- >> src/compiler/nir/nir_lower_gs_intrinsics.c | 8 +- >> src/compiler/nir/nir_lower_idiv.c | 21 +- >> src/compiler/nir/nir_lower_indirect_derefs.c | 39 ++-- >> src/compiler/nir/nir_lower_io.c | 9 +- >> src/compiler/nir/nir_lower_load_const_to_scalar.c | 18 +- >> src/compiler/nir/nir_lower_locals_to_regs.c | 9 +- >> .../nir/nir_lower_outputs_to_temporaries.c | 28 ++- >> src/compiler/nir/nir_lower_phis_to_scalar.c | 9 +- >> src/compiler/nir/nir_lower_samplers.c | 40 +--- >> src/compiler/nir/nir_lower_system_values.c | 27 +-- >> src/compiler/nir/nir_lower_tex.c | 58 +++--- >> src/compiler/nir/nir_lower_to_source_mods.c | 15 +- >> src/compiler/nir/nir_lower_two_sided_color.c | 8 +- >> src/compiler/nir/nir_lower_var_copies.c | 34 ++- >> src/compiler/nir/nir_lower_vars_to_ssa.c | 14 +- >> src/compiler/nir/nir_lower_vec_to_movs.c | 24 +-- >> src/compiler/nir/nir_move_vec_src_uses_to_dest.c | 7 +- >> src/compiler/nir/nir_normalize_cubemap_coords.c | 26 +-- >> src/compiler/nir/nir_opt_constant_folding.c | 29 ++- >> src/compiler/nir/nir_opt_copy_propagate.c | 32 +-- >> src/compiler/nir/nir_opt_dce.c | 33 ++- >> src/compiler/nir/nir_opt_dead_cf.c | 43 ++-- >> src/compiler/nir/nir_opt_gcm.c | 9 +- >> src/compiler/nir/nir_opt_peephole_select.c | 37 ++-- >> src/compiler/nir/nir_opt_remove_phis.c | 12 +- >> src/compiler/nir/nir_opt_undef.c | 23 +-- >> src/compiler/nir/nir_phi_builder.c | 12 +- >> src/compiler/nir/nir_remove_dead_variables.c | 48 ++--- >> src/compiler/nir/nir_repair_ssa.c | 16 +- >> src/compiler/nir/nir_split_var_copies.c | 8 +- >> src/compiler/nir/nir_validate.c | 14 +- >> src/compiler/nir/nir_worklist.c | 12 +- >> .../drivers/freedreno/ir3/ir3_nir_lower_if_else.c | 51 ++--- >> src/gallium/drivers/vc4/vc4_nir_lower_blend.c | 9 +- >> src/gallium/drivers/vc4/vc4_nir_lower_io.c | 20 +- >> src/gallium/drivers/vc4/vc4_nir_lower_txf_ms.c | 24 +-- >> src/gallium/drivers/vc4/vc4_program.c | 15 +- >> src/mesa/drivers/dri/i965/brw_fs_nir.cpp | 7 +- >> src/mesa/drivers/dri/i965/brw_nir.c | 90 ++++---- >> .../dri/i965/brw_nir_analyze_boolean_resolves.c | 6 +- >> .../dri/i965/brw_nir_attribute_workarounds.c | 7 +- >> .../drivers/dri/i965/brw_nir_opt_peephole_ffma.c | 29 ++- >> src/mesa/drivers/dri/i965/brw_vec4_nir.cpp | 8 +- >> 54 files changed, 776 insertions(+), 967 deletions(-) >> >> -- >> 2.5.0 >> >> _______________________________________________ >> mesa-dev mailing list >> mesa-dev@lists.freedesktop.org >> https://lists.freedesktop.org/mailman/listinfo/mesa-dev >> > >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev