mesa/src/util
Jason Ekstrand 1b8a43a0ba util: Remove util_cpu_detect
util_cpu_detect is an anti-pattern: it relies on callers high up in the call
chain initializing a local implementation detail. As a real example, I added:

...a Mali compiler unit test
...that called bi_imm_f16() to construct an FP16 immediate
...that calls _mesa_float_to_half internally
...that calls util_get_cpu_caps internally, but only on x86_64!
...that relies on util_cpu_detect having been called before.

As a consequence, this unit test:

...crashes on x86_64 with USE_X86_64_ASM set
...passes on every other architecture
...works on my local arm64 workstation and on my test board
...failed CI which runs on x86_64
...needed to have a random util_cpu_detect() call sprinkled in.

This is a bad design decision. It pollutes the tree with magic, it causes
mysterious CI failures especially for non-x86_64 developers, and it is not
justified by a micro-optimization.

Instead, let's call util_cpu_detect directly from util_get_cpu_caps, avoiding
the footgun where it fails to be called.  This cleans up Mesa's design,
simplifies the tree, and avoids a class of a (possibly platform-specific)
failures. To mitigate the added overhead, wrap it all in a (fast) atomic
load check and declare the whole thing as ATTRIBUTE_CONST so the
compiler will CSE calls to util_cpu_detect.

Co-authored-by: Alyssa Rosenzweig <alyssa@collabora.com>
Reviewed-by: Marek Olšák <maraeo@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15580>
2022-04-20 18:44:35 +00:00
..
format util/format: add new z24/s8 packing helper to pack z32/s8. 2022-03-26 01:22:15 +00:00
indices util: trim trailing space for files src/util/**/* 2022-03-21 17:57:15 +00:00
perf util/utrace: make generated code a tiny bit nicer to look at 2022-02-01 09:28:30 +00:00
sha1 util: trim trailing space for files src/util/**/* 2022-03-21 17:57:15 +00:00
tests util: Remove util_cpu_detect 2022-04-20 18:44:35 +00:00
00-mesa-defaults.conf driconf: add SD Gundam G Generation Cross Rays 2022-04-17 18:36:14 +00:00
anon_file.c util: use anonymous file for memory fd creation 2021-10-27 15:26:52 +00:00
anon_file.h
bigmath.h
bitscan.c
bitscan.h util: Add util_widen_mask function. 2021-12-03 18:29:13 +00:00
bitset.h util/bitset: Fix off-by-one in __bitset_set_range 2022-03-10 17:15:29 +00:00
blob.c util: stop including files from mesa/main 2020-03-27 21:00:09 +00:00
blob.h util/blob: Clarify rules on blob::data 2022-02-19 01:25:46 +00:00
build_id.c
build_id.h util: add missing extern C 2020-09-25 20:09:08 +00:00
cnd_monotonic.h c11/threads: Re-align return values for timed waits 2021-11-16 10:02:08 -06:00
compiler.h util: Add support for clang::fallthrough. 2021-11-09 20:51:14 +00:00
compress.c meson, util: Make zlib optional again 2021-03-19 19:33:59 +00:00
compress.h meson, util: Make zlib optional again 2021-03-19 19:33:59 +00:00
crc32.c util: trim trailing space for files src/util/**/* 2022-03-21 17:57:15 +00:00
crc32.h util: trim trailing space for files src/util/**/* 2022-03-21 17:57:15 +00:00
dag.c util/dag: Add dag_add_edge_max_data 2021-11-17 13:41:47 +00:00
dag.h util/dag: Add dag_add_edge_max_data 2021-11-17 13:41:47 +00:00
debug.c util: stop including files from mesa/main 2020-03-27 21:00:09 +00:00
debug.h Revert "util: Add helpers for various one-time-init patters" 2020-11-25 09:44:11 +00:00
detect_os.h
disk_cache.c util/disk_cache: rename MESA_GLSL_CACHE envvar 2022-03-17 11:15:53 +01:00
disk_cache.h util/disk_cache: add nocopy variant of disk cache store function 2021-06-11 03:09:22 +00:00
disk_cache_os.c util/disk_cache: rename MESA_GLSL_CACHE envvar 2022-03-17 11:15:53 +01:00
disk_cache_os.h util/disk_cache: make MESA_DISK_CACHE_READ_ONLY_FOZ_DBS a relative path 2021-03-04 04:07:46 +00:00
double.c
double.h
driconf.h util: trim trailing space for files src/util/**/* 2022-03-21 17:57:15 +00:00
driconf_static.py driconf: Fix unhandled tags in static conf 2022-01-14 22:09:50 +00:00
enum_operators.h util: tune signatures of generated enum operators 2021-05-14 11:00:52 +00:00
fast_idiv_by_const.c util: Add and use functions to calculate min and max int for a size 2021-08-03 12:55:02 -07:00
fast_idiv_by_const.h
fast_urem_by_const.h
format_r11g11b10f.h
format_rgb9e5.h
format_srgb.h
format_srgb.py python: drop python2 support 2021-08-14 21:44:32 +00:00
fossilize_db.c util/fossilize_db: Fix double free in error handling. 2022-01-24 01:09:21 +00:00
fossilize_db.h util/fossilize_db: Add extra flock mutex. 2021-08-08 13:34:42 +02:00
futex.h util: futex fixes for OpenBSD 2020-08-31 09:14:57 +00:00
half_float.c gallium/util: remove empty file u_half.h 2020-10-06 21:07:11 -04:00
half_float.h util: Add accessor for util_cpu_caps 2021-02-26 18:31:19 +00:00
hash_table.c util/hash_table: Clear special 0/1 entries for u64 hash table too 2021-11-02 11:02:18 -07:00
hash_table.h util/hash_table: Remove Unicode byte order mark 2022-04-10 23:28:47 +00:00
libsync.h egl+libsync: Add helper to complain about invalid fence fd's 2022-03-04 22:16:20 +00:00
list.h util/list.h: Add docstrings for list_add and list_addtail 2022-03-17 18:25:55 +00:00
log.c util/log: Don't print an extra \n if the format string had one. 2022-04-05 21:37:46 +00:00
log.h util/log: Add support for logging once. 2022-04-06 00:04:14 +00:00
macros.h util: Getting u_debug.h not depends on pipe/* 2022-04-01 01:52:43 +00:00
memstream.c util: Disable memstream for Apple builds 2021-01-08 09:37:14 +00:00
memstream.h includes: add windows lean and mean guard. 2022-01-19 21:54:58 +00:00
mesa-sha1.c util: add SHA1 printing and comparison functions 2021-11-26 11:58:27 +00:00
mesa-sha1.h util: add SHA1 printing and comparison functions 2021-11-26 11:58:27 +00:00
meson.build util: Convert util/u_printf.cpp to util/u_printf.c 2022-04-11 03:31:40 +00:00
os_file.c util: replaced ENODATA with ENOATTR for non-Linux systems 2021-06-28 21:12:24 +03:00
os_file.h util: Make os_read_file use O_BINARY on Windows 2021-03-11 23:43:47 +00:00
os_memory.h Fix VMware capitalization. 2020-10-27 15:33:40 -07:00
os_memory_aligned.h util: trim trailing space for files src/util/**/* 2022-03-21 17:57:15 +00:00
os_memory_debug.h util: trim trailing space for files src/util/**/* 2022-03-21 17:57:15 +00:00
os_memory_fd.c util: trim trailing space for files src/util/**/* 2022-03-21 17:57:15 +00:00
os_memory_fd.h util: trim trailing space for files src/util/**/* 2022-03-21 17:57:15 +00:00
os_memory_stdc.h util: trim trailing space for files src/util/**/* 2022-03-21 17:57:15 +00:00
os_misc.c util: Remove unused Android options_tbl_lock 2021-04-15 16:01:21 +00:00
os_misc.h util: Add os_get_page_size query 2020-12-02 10:12:27 -08:00
os_socket.c util: fix possible fd leaks in os_socket_listen_abstract 2020-07-30 10:41:00 +00:00
os_socket.h util/os_socket: fix header unavailable on windows 2020-02-04 17:33:49 +00:00
os_time.c util: trim trailing space for files src/util/**/* 2022-03-21 17:57:15 +00:00
os_time.h util: trim trailing space for files src/util/**/* 2022-03-21 17:57:15 +00:00
ptralloc.h util: trim trailing space for files src/util/**/* 2022-03-21 17:57:15 +00:00
ralloc.c vulkan: Add vk_asprintf and vk_vasprintf helpers 2021-09-23 21:14:32 +00:00
ralloc.h
rand_xor.c util/rand_xor: extend the urandom path to all non-Windows platforms 2020-05-16 12:05:37 +00:00
rand_xor.h util/rand_xor: make it clear that {,s_}rand_xorshift128plus take *exactly 2* uint64_t 2020-05-16 12:05:37 +00:00
rb_tree.c
rb_tree.h util: Convert rb_tree_test to gtest 2021-10-20 21:40:31 -07:00
register_allocate.c util/ra: Fix numeric overflow during bitset allocation 2021-12-19 13:10:26 -08:00
register_allocate.h ra: Add fast-path support for register classes of contiguous regs. 2021-06-04 19:08:57 +00:00
register_allocate_internal.h util/ra: use adjacency matrix for undirected graph 2021-12-14 09:19:01 +00:00
rgtc.c util: trim trailing space for files src/util/**/* 2022-03-21 17:57:15 +00:00
rgtc.h
rounding.h util: When building 'ARM64EC', don't use x64 intrinsics which need to be emulated 2021-01-22 17:56:08 +00:00
rwlock.h util: Fix rwlock Windows include for MinGW 2020-10-20 08:33:42 +00:00
set.c util/set: add macro for destructively iterating set entries 2021-04-07 22:57:27 +00:00
set.h util/set: add macro for destructively iterating set entries 2021-04-07 22:57:27 +00:00
simple_list.h util: trim trailing space for files src/util/**/* 2022-03-21 17:57:15 +00:00
simple_mtx.h util: Add helgrind support for simple_mtx 2020-11-24 21:03:34 +00:00
slab.c util/slab: add slab_zalloc 2022-03-09 08:48:59 +00:00
slab.h util/slab: add slab_zalloc 2022-03-09 08:48:59 +00:00
softfloat.c softfloat: Silence a warning at -Og 2021-02-18 20:59:43 +00:00
softfloat.h util: implement F16C using inline assembly on x86_64 2020-10-06 21:07:03 -04:00
sparse_array.c util/sparse_free_list: manipulate node pointers using atomic primitives 2020-04-18 12:18:03 +00:00
sparse_array.h util/sparse_array: Stash the node level in the node pointer 2020-03-20 15:31:10 -05:00
string_buffer.c
string_buffer.h
strndup.h
strtod.c
strtod.h
texcompress_rgtc_tmp.h util: trim trailing space for files src/util/**/* 2022-03-21 17:57:15 +00:00
timespec.h util/timespec: Return overflow from timespec_add_[mn]sec() 2022-04-06 00:38:22 +00:00
u_atomic.c util/u_atomic: fix build on clang archs without 64-bit atomics 2022-02-28 14:28:23 +00:00
u_atomic.h util: trim trailing space for files src/util/**/* 2022-03-21 17:57:15 +00:00
u_cpu_detect.c util: Remove util_cpu_detect 2022-04-20 18:44:35 +00:00
u_cpu_detect.h util: Remove util_cpu_detect 2022-04-20 18:44:35 +00:00
u_debug.c util: limit error-dialogs to win32 2022-04-08 13:15:12 +00:00
u_debug.h util: limit error-dialogs to win32 2022-04-08 13:15:12 +00:00
u_debug_describe.c util: import u_debug_refcnt, u_hash_table, u_debug_describe from gallium 2021-10-01 14:51:23 +00:00
u_debug_describe.h util: import u_debug_refcnt, u_hash_table, u_debug_describe from gallium 2021-10-01 14:51:23 +00:00
u_debug_memory.c util: move debug_memory_{begin,end} to os_memory_debug.h 2020-02-24 23:07:57 +00:00
u_debug_refcnt.c util: import u_debug_refcnt, u_hash_table, u_debug_describe from gallium 2021-10-01 14:51:23 +00:00
u_debug_refcnt.h util: import u_debug_refcnt, u_hash_table, u_debug_describe from gallium 2021-10-01 14:51:23 +00:00
u_debug_stack.c util: trim trailing space for files src/util/**/* 2022-03-21 17:57:15 +00:00
u_debug_stack.h util: trim trailing space for files src/util/**/* 2022-03-21 17:57:15 +00:00
u_debug_stack_android.cpp gallium/android: Rewrite backtrace helper for android 2020-08-05 18:08:06 +00:00
u_debug_symbol.c util: trim trailing space for files src/util/**/* 2022-03-21 17:57:15 +00:00
u_debug_symbol.h util: trim trailing space for files src/util/**/* 2022-03-21 17:57:15 +00:00
u_drm.h
u_dynarray.h replace 0 with NULL for NULL pointers 2022-01-10 22:53:32 +00:00
u_endian.h util: trim trailing space for files src/util/**/* 2022-03-21 17:57:15 +00:00
u_fifo.h util/u_trace: make u_trace usable for other than gallium drivers 2021-09-10 14:58:28 +03:00
u_hash_table.c util: import u_debug_refcnt, u_hash_table, u_debug_describe from gallium 2021-10-01 14:51:23 +00:00
u_hash_table.h util: import u_debug_refcnt, u_hash_table, u_debug_describe from gallium 2021-10-01 14:51:23 +00:00
u_idalloc.c util/idalloc: add util_idalloc_alloc_range 2021-07-09 10:05:46 +00:00
u_idalloc.h util/idalloc: add util_idalloc_alloc_range 2021-07-09 10:05:46 +00:00
u_math.c util: trim trailing space for files src/util/**/* 2022-03-21 17:57:15 +00:00
u_math.h util: trim trailing space for files src/util/**/* 2022-03-21 17:57:15 +00:00
u_memory.h util: trim trailing space for files src/util/**/* 2022-03-21 17:57:15 +00:00
u_memset.h util: add optimised memset64 2021-02-22 00:30:46 +00:00
u_mm.c util: trim trailing space for files src/util/**/* 2022-03-21 17:57:15 +00:00
u_mm.h util: trim trailing space for files src/util/**/* 2022-03-21 17:57:15 +00:00
u_perfetto.cc util/perfetto: Add one-time init 2021-05-10 15:34:07 +00:00
u_perfetto.h util/perfetto: Add one-time init 2021-05-10 15:34:07 +00:00
u_printf.c util: Convert util/u_printf.cpp to util/u_printf.c 2022-04-11 03:31:40 +00:00
u_printf.h util: Convert util/u_printf.cpp to util/u_printf.c 2022-04-11 03:31:40 +00:00
u_process.c util: make util_get_process_exec_path work on FreeBSD w/o procfs 2021-10-29 06:06:05 +00:00
u_process.h util/u_process: protect entrypoints for c++ 2022-01-14 20:17:44 +00:00
u_qsort.cpp util: trim trailing space for files src/util/**/* 2022-03-21 17:57:15 +00:00
u_qsort.h util: Add qsort_r/s args adapter for MSVC and BSD/macOS 2021-06-24 20:05:12 +00:00
u_queue.c util: Remove util_cpu_detect 2022-04-20 18:44:35 +00:00
u_queue.h util/queue: use simple_mtx_t for finish_lock 2021-10-05 23:46:14 +00:00
u_string.h util: fix gcc vsnprintf overflow 2021-02-19 11:05:38 +00:00
u_thread.h util: Should not use ASSERTED in util_thread_get_time_nano 2022-03-29 23:33:21 +00:00
u_vector.c util/vector: make util_vector_init harder to misuse 2021-10-08 00:15:11 +00:00
u_vector.h util: trim trailing space for files src/util/**/* 2022-03-21 17:57:15 +00:00
vl_rbsp.h util/vl: move gallium vl_vlc.h and vl_rbsp.h to shared code. 2021-11-15 21:57:28 +00:00
vl_vlc.h util/vl: move gallium vl_vlc.h and vl_rbsp.h to shared code. 2021-11-15 21:57:28 +00:00
vma.c util/vma: Add a debug print helper 2020-05-13 23:36:44 +00:00
vma.h util/vma: Add a debug print helper 2020-05-13 23:36:44 +00:00
xmlconfig.c util: trim trailing space for files src/util/**/* 2022-03-21 17:57:15 +00:00
xmlconfig.h util: trim trailing space for files src/util/**/* 2022-03-21 17:57:15 +00:00
xxd.py python: drop python2 support 2021-08-14 21:44:32 +00:00
xxhash.h xxhash: update fallthrough comments 2020-12-01 10:04:41 +01:00