On Wednesday, 2017-11-01 18:12:18 +0000, Lionel Landwerlin wrote: > The motivation for building this UI is to help debug the intel > drivers. It can be tricky to figure what is going wrong in the > emission of commands (figuring out if there is an off by one error in > the sampler state pointers for example or if you accidently override > some bits of memory). Going through the text output of aubinator can > be quite tedious (time consuming and error prone), as you need to go > back and forth several pages of dumps to build a mental model of the > state of the GPU for a given draw call. This calls for a better way to > display/search an aubdump. > > This UI is mostly based off the original aubinator code. It's using > the ImGui toolkit [1]. Being an immediate mode UI toolkit, it makes > the code of the original aubinator pretty easy to reuse/port to > generate a UI. > > This also adds an interesting feature which collects the GPU state by > walking the instruction stream and "snapshotting" the last sets of > commands allowing to present what would be the state of the GPU at a > given point (right now it only snapshots on 3DPRIMITIVE commands). > > Some screenshots : > https://i.imgur.com/0JTLkTo.png > https://i.imgur.com/ABq31XD.png > > Although the UI toolkit isn't tied to any of the main toolkit (like > Gtk+, Qt, etc...), we still require a connection to the desktop > display. The ImGui backend currently used is built on Gtk+ & Cogl. The > choice of Gtk+ is mostly due to having UI scaling working properly on > wayland/x11 (on hidpi screens). Cogl mostly because it's more > convenient that raw GL. Of course this could be revisited. > > [1] : https://github.com/ocornut/imgui > > Signed-off-by: Lionel Landwerlin <lionel.g.landwer...@intel.com> > > For the autotools part: > Reviewed-by: Emil Velikov <emil.veli...@collabora.com> > --- > configure.ac | 16 + > meson.build | 7 + > meson_options.txt | 6 + > src/intel/Makefile.tools.am | 58 + > src/intel/tools/.gitignore | 2 + > src/intel/tools/aubinator_imgui_widgets.cpp | 183 + > src/intel/tools/aubinator_imgui_widgets.h | 12 + > src/intel/tools/aubinator_ui.cpp | 3174 +++++++ > src/intel/tools/imgui/LICENSE.txt | 21 + > src/intel/tools/imgui/imconfig.h | 57 + > src/intel/tools/imgui/imgui.cpp | 10725 > +++++++++++++++++++++++ > src/intel/tools/imgui/imgui.h | 1516 ++++ > src/intel/tools/imgui/imgui_demo.cpp | 2827 ++++++ > src/intel/tools/imgui/imgui_draw.cpp | 2673 ++++++ > src/intel/tools/imgui/imgui_impl_gtk3_cogl.cpp | 784 ++ > src/intel/tools/imgui/imgui_impl_gtk3_cogl.h | 27 + > src/intel/tools/imgui/imgui_internal.h | 864 ++ > src/intel/tools/imgui/stb_rect_pack.h | 583 ++ > src/intel/tools/imgui/stb_textedit.h | 1322 +++ > src/intel/tools/imgui/stb_truetype.h | 4018 +++++++++ > src/intel/tools/memory.c | 545 ++ > src/intel/tools/memory.h | 55 + > src/intel/tools/meson.build | 30 + > 23 files changed, 29505 insertions(+) > create mode 100644 src/intel/tools/aubinator_imgui_widgets.cpp > create mode 100644 src/intel/tools/aubinator_imgui_widgets.h > create mode 100644 src/intel/tools/aubinator_ui.cpp > create mode 100644 src/intel/tools/imgui/LICENSE.txt > create mode 100644 src/intel/tools/imgui/imconfig.h > create mode 100644 src/intel/tools/imgui/imgui.cpp > create mode 100644 src/intel/tools/imgui/imgui.h > create mode 100644 src/intel/tools/imgui/imgui_demo.cpp > create mode 100644 src/intel/tools/imgui/imgui_draw.cpp > create mode 100644 src/intel/tools/imgui/imgui_impl_gtk3_cogl.cpp > create mode 100644 src/intel/tools/imgui/imgui_impl_gtk3_cogl.h > create mode 100644 src/intel/tools/imgui/imgui_internal.h > create mode 100644 src/intel/tools/imgui/stb_rect_pack.h > create mode 100644 src/intel/tools/imgui/stb_textedit.h > create mode 100644 src/intel/tools/imgui/stb_truetype.h > create mode 100644 src/intel/tools/memory.c > create mode 100644 src/intel/tools/memory.h > [snip] > diff --git a/meson.build b/meson.build > index 6ad8c8bbf4b..86b1af3e4e3 100644 > --- a/meson.build > +++ b/meson.build > @@ -43,6 +43,7 @@ pre_args = [ > with_vulkan_icd_dir = get_option('vulkan-icd-dir') > with_tests = get_option('build-tests') > with_valgrind = get_option('valgrind') > +with_intel_tools = get_option('intel-tools') > with_libunwind = get_option('libunwind') > with_asm = get_option('asm') > with_llvm = get_option('llvm') > @@ -700,6 +701,12 @@ else > dep_valgrind = [] > endif > > +dep_aubinator_ui = [ > + dependency('gtk+-3.0', version: '>= 3.20.0'), > + dependency('cogl-2.0-experimental', version: '>= 1.18.0'), > +] > +with_intel_tools = get_option('intel-tools') and dep_aubinator_ui[0].found() > and dep_aubinator_ui[1].found() > + > # pthread stubs. Lets not and say we didn't > > prog_bison = find_program('bison', required : with_any_opengl) > diff --git a/meson_options.txt b/meson_options.txt > index d93dd6eab2a..9109cd9dfde 100644 > --- a/meson_options.txt > +++ b/meson_options.txt > @@ -182,3 +182,9 @@ option( > choices : ['8', '16', '32'], > description : 'Number of channel bits for OSMesa.' > ) > +option( > + 'intel-tools', > + type : 'boolean', > + value : true, > + description : 'Build intel tools if possible' > +) [snip] > diff --git a/src/intel/tools/meson.build b/src/intel/tools/meson.build > index 1996d5208f0..e62abce99b0 100644 > --- a/src/intel/tools/meson.build > +++ b/src/intel/tools/meson.build > @@ -28,6 +28,27 @@ aubinator = executable( > build_by_default : false, > ) > > +if with_intel_tools > + inc_imgui = include_directories('imgui') > + aubinator_ui = executable( > + 'aubinator_ui', > + files('aubinator_ui.cpp', > + 'aubinator_imgui_widgets.cpp', > + 'imgui/imgui.cpp', > + 'imgui/imgui_demo.cpp', > + 'imgui/imgui_draw.cpp', > + 'imgui/imgui_impl_gtk3_cogl.cpp', > + 'memory.c', > + 'disasm.c',), > + dependencies : [dep_aubinator_ui, dep_expat, dep_zlib, dep_dl, > dep_thread, dep_m], > + include_directories : [inc_common, inc_intel, inc_imgui], > + link_with : [libisl, libintel_common, libintel_compiler, libmesa_util], > + c_args : [c_vis_args, no_override_init_args], > + cpp_args : cpp_vis_args, > + build_by_default : false, > + ) > +endif > + > aubinator_error_decode = executable( > 'aubinator_error_decode', > files('aubinator_error_decode.c', 'disasm.c', 'gen_disasm.h'), > @@ -37,3 +58,12 @@ aubinator_error_decode = executable( > c_args : [c_vis_args, no_override_init_args], > build_by_default : false, > ) > + > +memory_tests = executable( > + 'memory_tests', > + files('memory.c'), > + include_directories : inc_common, > + link_with : libmesa_util, > + c_args : [c_vis_args, no_override_init_args, '-DBUILD_TESTS'], > + build_by_default : false, > +)
Did you want to make this a test maybe? test('memory', executable(...) ) Other than that, the meson bits look good to me: Reviewed-by: Eric Engestrom <eric.engest...@imgtec.com> > -- > 2.15.0 > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev