mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-07 17:20:21 +01:00
In the C23 standard unreachable() is now a predefined function-like macro in <stddef.h> See https://android.googlesource.com/platform/bionic/+/HEAD/docs/c23.md#is-now-a-predefined-function_like-macro-in And this causes build errors when building for C23: ----------------------------------------------------------------------- In file included from ../src/util/log.h:30, from ../src/util/log.c:30: ../src/util/macros.h:123:9: warning: "unreachable" redefined 123 | #define unreachable(str) \ | ^~~~~~~~~~~ In file included from ../src/util/macros.h:31: /usr/lib/gcc/x86_64-linux-gnu/14/include/stddef.h:456:9: note: this is the location of the previous definition 456 | #define unreachable() (__builtin_unreachable ()) | ^~~~~~~~~~~ ----------------------------------------------------------------------- So don't redefine it with the same name, but use the name UNREACHABLE() to also signify it's a macro. Using a different name also makes sense because the behavior of the macro was extending the one of __builtin_unreachable() anyway, and it also had a different signature, accepting one argument, compared to the standard unreachable() with no arguments. This change improves the chances of building mesa with the C23 standard, which for instance is the default in recent AOSP versions. All the instances of the macro, including the definition, were updated with the following command line: git grep -l '[^_]unreachable(' -- "src/**" | sort | uniq | \ while read file; \ do \ sed -e 's/\([^_]\)unreachable(/\1UNREACHABLE(/g' -i "$file"; \ done && \ sed -e 's/#undef unreachable/#undef UNREACHABLE/g' -i src/intel/isl/isl_aux_info.c Reviewed-by: Erik Faye-Lund <erik.faye-lund@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36437> |
||
|---|---|---|
| .. | ||
| mesa-overlay-control.py | ||
| meson.build | ||
| overlay.cpp | ||
| overlay.frag | ||
| overlay.vert | ||
| overlay_params.c | ||
| overlay_params.h | ||
| README.rst | ||
| TODO | ||
| VkLayer_MESA_overlay.json.in | ||
A Vulkan layer to display information about the running application using an overlay. Building ======= The overlay layer will be built if :code:`overlay` is passed as a :code:`vulkan-layers` argument. For example: .. code-block:: sh meson -Dvulkan-layers=device-select,overlay builddir/ ninja -C builddir/ sudo ninja -C builddir/ install See `docs/install.rst <https://gitlab.freedesktop.org/mesa/mesa/-/blob/master/docs/install.rst>`__ for more information. Basic Usage ======= Turn on the layer: .. code-block:: sh VK_LOADER_LAYERS_ENABLE=VK_LAYER_MESA_overlay /path/to/my_vulkan_app List the available statistics: .. code-block:: sh VK_LOADER_LAYERS_ENABLE=VK_LAYER_MESA_overlay VK_LAYER_MESA_OVERLAY_CONFIG=help /path/to/my_vulkan_app Turn on some statistics: .. code-block:: sh VK_LOADER_LAYERS_ENABLE=VK_LAYER_MESA_overlay VK_LAYER_MESA_OVERLAY_CONFIG=submit,draw,pipeline_graphics /path/to/my_vulkan_app Position the overlay: .. code-block:: sh VK_LOADER_LAYERS_ENABLE=VK_LAYER_MESA_overlay VK_LAYER_MESA_OVERLAY_CONFIG=submit,draw,pipeline_graphics,position=top-right /path/to/my_vulkan_app Logging Statistics ======= Log statistics to a file: .. code-block:: sh VK_LOADER_LAYERS_ENABLE=VK_LAYER_MESA_overlay VK_LAYER_MESA_OVERLAY_CONFIG=output_file=/tmp/output.txt /path/to/my_vulkan_app Logging is enabled for the entire lifecycle of the process unless a control socket is specified (see below). **Note:** some statistics (e.g. :code:`frame_timing` and :code:`gpu_timing`) log values for the entire sample interval instead of per-frame. For these statistics, logging the :code:`frame` statistic allows one to compute per-frame statistics after capture. Log statistics to a file, controlling when such statistics will start to be captured: .. code-block:: sh VK_LOADER_LAYERS_ENABLE=VK_LAYER_MESA_overlay VK_LAYER_MESA_OVERLAY_CONFIG=output_file=/tmp/output.txt,control=mesa_overlay /path/to/my_vulkan_app The command above will open a Unix socket with the abstract path :code:`mesa_overlay`. When a control socket is specified, logging must be explicitly enabled through the control socket. :code:`mesa-overlay-control.py` provides a convenient CLI: .. code-block:: sh mesa-overlay-control.py start-capture .. code-block:: sh mesa-overlay-control.py stop-capture Direct Socket Control ------ The Unix socket may be used directly if needed. Once a client connects to the socket, the overlay layer will immediately send the following commands to the client: .. code-block:: sh :MesaOverlayControlVersion=1; :DeviceName=<device name>; :MesaVersion=<mesa version>; The client connected to the overlay layer can enable statistics capturing by sending the command: .. code-block:: sh :capture=1; And disable it by sending: .. code-block:: sh :capture=0; .. _docs/install.rst: ../../docs/install.rst