mesa/src/util
Ryan Neph 48062f91c7 virgl: add debug flag to force synchronous GL shader compilation
This does two things:
1. Flush the command buffer and associate a fence with each
   glLinkProgram().
2. Force the application calling glLinkProgram() to wait on the
   associated fence, matching the semantics of native drivers.

This important for some workloads and some environments. For example, on
ChromeOS devices supporting VM-based android (ARCVM), an app's HWUI thread
may be configured to use skiagl, while the app may create its own GLES
context for custom rendering. Virgl+virtio_gpu supports a single fencing
timeline, so all guest GL/GLES contexts are serialized by submission
order to the guest kernel.

If the app's submits multiple heavy shaders for compliation+linking
(glCompileShader + glLinkProgram()), these are batched into a single
virtgpu execbuffer (with one fence). Then rendering performed by the
HWUI thread is blocked until the unrelated heavy host-side work is
finished. To the user, the app appears completely frozen until finished.

With this change, the app is throttled in its calls to glLinkProgram(),
and the HWUI work can fill in the gaps between each while hitting most
display update deadlines. To the user, the UI may render at reduced
framerate, but remains mostly responsive to interaction.

Signed-off-by: Ryan Neph <ryanneph@google.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22341>
2023-04-19 06:35:35 +00:00
..
format util/format: add planar3 r8_g8_b8_unorm pipe format 2023-04-14 22:30:44 +00:00
perf tu/perfetto: Use tu_CmdBeginDebugUtilsLabelEXT as a stage event in perfetto. 2023-04-16 15:50:49 +00:00
sha1 util: trim trailing space for files src/util/**/* 2022-03-21 17:57:15 +00:00
tests util: Update some copyright tags 2023-03-26 00:16:26 +00:00
tools util/tools: add the tool that generates perfect hash functions for GLenums 2022-12-18 14:35:59 -05:00
00-mesa-defaults.conf driconf: rework glthread enablement 2023-04-14 10:16:49 +00:00
00-radv-defaults.conf radv: add a layer for fixing rendering issues with RAGE2 2023-01-27 15:28:45 +00:00
anon_file.c util: Add os_create_anonymous_file support on win32 2022-08-12 16:34:32 +00:00
anon_file.h util: Add os_create_anonymous_file support on win32 2022-08-12 16:34:32 +00:00
bigmath.h
bitpack_helpers.h util: Add util_bitpack_[su]fixed_clamp helpers 2022-08-30 04:28:34 +00:00
bitscan.c
bitscan.h util: remove needless c99_compat.h includes 2022-06-02 13:09:16 +00:00
bitset.h util: Remove EXPLICIT_CONVERSION macro and use c++11 explicit directly 2022-11-22 15:42:15 +08:00
blob.c util/blob: use memcpy in read functions 2022-07-07 12:25:05 +00:00
blob.h util/blob: Add align helpers 2022-04-22 19:38:52 +00:00
build_id.c
build_id.h
cnd_monotonic.h c11/threads: Re-align return values for timed waits 2021-11-16 10:02:08 -06:00
compiler.h util: Fixes -Wundef in util/compiler.h 2022-11-24 04:33:07 +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 a validation function. 2022-09-29 23:40:18 +00:00
dag.h util/dag: Add a validation function. 2022-09-29 23:40:18 +00:00
detect.h util: Rename src/gallium/include/pipe/p_config.h to src/util/detect_arch.h 2022-11-15 20:35:55 +00:00
detect_arch.h util: Remove the unused PIPE_(ARCH|OS|CC) macro defines from src/util/detect_arch.h and src/util/detect_cc.h 2022-11-15 20:35:55 +00:00
detect_cc.h util: Remove the unused PIPE_(ARCH|OS|CC) macro defines from src/util/detect_arch.h and src/util/detect_cc.h 2022-11-15 20:35:55 +00:00
detect_os.h
disk_cache.c util/disk_cache: Move blob_put_cb to the async queue 2023-04-05 20:25:04 +00:00
disk_cache.h util: Call mesa_bytes_to_hex directly instead of disk_cache_format_hex_id. 2023-04-19 04:19:51 +00:00
disk_cache_os.c util/disk_cache: use posix_fallocate() for index files 2023-03-30 01:09:10 +00:00
disk_cache_os.h util/disk_cache: Align atomic size. 2023-04-11 12:57:15 +00:00
double.c
double.h
driconf.h virgl: add debug flag to force synchronous GL shader compilation 2023-04-19 06:35:35 +00:00
driconf_static.py driconf: add support for multiple input files in the static script 2022-12-01 16:55:31 +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: Use util_sign_extend in fast_idiv_by_const 2022-07-06 11:23:18 +00:00
fast_idiv_by_const.h
fast_urem_by_const.h
format_r11g11b10f.h
format_rgb9e5.h include: drop c99_math.h 2022-06-02 13:09:16 +00:00
format_srgb.h util: remove needless c99_compat.h includes 2022-06-02 13:09:16 +00:00
format_srgb.py python: drop python2 support 2021-08-14 21:44:32 +00:00
fossilize_db.c util/fossilize_db: add ifdef for inotify header 2023-01-26 13:06:27 +00:00
fossilize_db.h util/fossilize_db: fix macOS inotify build error 2023-01-23 18:31:48 +00:00
futex.c futex: Change INT_MAX to INT32_MAX. 2023-01-19 03:25:55 +00:00
futex.h util: Move the implementation of futex_wake and futex_wait from futex.h to futex.c 2022-10-18 23:20:25 +00:00
glheader.h util: include gles header instead of hand crafted macros 2022-11-04 19:28:19 +00:00
glsl2spirv.py util/glsl2spirv: add support for include directive 2023-03-03 11:30:54 +00:00
half_float.c util: remove unused half_to_unorm8 2022-11-04 23:20:02 +00:00
half_float.h util: remove unused half_to_unorm8 2022-11-04 23:20:02 +00:00
hash_table.c util: rzalloc and free hash_table_u64 2023-02-28 08:35:32 +00:00
hash_table.h util: remove needless c99_compat.h includes 2022-06-02 13:09:16 +00:00
hex.h util: Add dedicated hex conversion functions and use it. 2023-04-19 04:19:50 +00:00
libdrm.h util: Add a simple no-op libdrm shim 2023-03-05 16:31:51 +00:00
libsync.h replace sys/poll.h with poll.h 2022-11-14 20:13:20 +00:00
list.h util/list: rename LIST_ENTRY() to list_entry() 2022-07-28 10:10:44 +00:00
log.c util/log: add logger_windbg 2023-02-22 17:55:40 +00:00
log.h util/log: add support for MESA_LOG_FILE 2023-02-22 17:55:40 +00:00
macros.h util: enforce unreachable()'s argument being a literal string 2023-04-18 13:59:55 +00:00
memstream.c util: Add #ifdefs for Xbox GDK support. 2023-01-19 03:25:55 +00:00
memstream.h util: Remove include of windows.h in memstream.h 2022-10-20 03:04:56 +00:00
mesa-sha1.c util: Add dedicated hex conversion functions and use it. 2023-04-19 04:19:50 +00:00
mesa-sha1.h util: remove needless c99_compat.h includes 2022-06-02 13:09:16 +00:00
mesa_cache_db.c util/mesa-db: Introduce multipart mesa-db cache 2023-02-01 02:47:30 +00:00
mesa_cache_db.h util: Fixes error: no previous prototype for 'mesa_cache_db_entry_remove' 2023-02-09 04:05:39 +00:00
mesa_cache_db_multipart.c util/mesa-db: Introduce multipart mesa-db cache 2023-02-01 02:47:30 +00:00
mesa_cache_db_multipart.h util/mesa-db: Introduce multipart mesa-db cache 2023-02-01 02:47:30 +00:00
meson.build util: Add dedicated hex conversion functions and use it. 2023-04-19 04:19:50 +00:00
os_file.c util: avoid calling kcmp on Android 2023-02-12 17:11:16 +00:00
os_file.h misc: replace #ifdef\s\s__cplusplus with #ifdef\s__cplusplus 2022-04-21 14:43:39 +00:00
os_memory.h gallium/util: Remove the EMBEDDED_DEVICE macro because nobody use it 2022-11-08 02:37:20 +00: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: Replace all usage of __FUNCTION__ with __func__ in src/util/* 2022-11-11 06:15:42 +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: Add #ifdefs for Xbox GDK support. 2023-01-19 03:25:55 +00:00
os_misc.h util: Add function debug_get_option_cached os_get_option_cached 2022-12-16 19:30:19 +00:00
os_mman.h util: Move src/gallium/auxiliary/os/os_mman.h to src/util/os_mman.h 2022-11-15 19:55:01 +00:00
os_socket.c
os_socket.h
os_time.c util: trim trailing space for files src/util/**/* 2022-03-21 17:57:15 +00:00
os_time.h glthread: add a heuristic to stop locking global mutexes with multiple contexts 2023-02-18 13:40:56 +00:00
ptralloc.h util: remove needless c99_compat.h includes 2022-06-02 13:09:16 +00:00
ralloc.c util: add freelist allocator with mark/sweep 2022-08-30 18:21:44 +00:00
ralloc.h util: add freelist allocator with mark/sweep 2022-08-30 18:21:44 +00:00
rand_xor.c
rand_xor.h
rb_tree.c util: Update some copyright tags 2023-03-26 00:16:26 +00:00
rb_tree.h util: Update some copyright tags 2023-03-26 00:16:26 +00:00
reallocarray.h util/reallocarray: add errno.h include. 2022-07-29 06:47:28 +10: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 include: drop c99_math.h 2022-06-02 13:09:16 +00:00
rwlock.c util: Remove include of windows.h in rwlock.h 2022-10-20 03:04:56 +00:00
rwlock.h util: Remove include of windows.h in rwlock.h 2022-10-20 03:04:56 +00:00
set.c util: remove unused set_random_entry 2022-11-04 23:20:02 +00:00
set.h util: remove unused set_random_entry 2022-11-04 23:20:02 +00:00
simple_mtx.c util: Add util_call_once for optimize call to util_call_once_with_context out for hot path 2022-09-22 04:16:29 +00:00
simple_mtx.h util: #include "c11/threads.h" when necessary in simple_mtx.h 2022-10-20 03:04:56 +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 util: Keep quiet NaNs quiet when converting to half float. 2022-05-02 23:36:50 +00:00
softfloat.h
sparse_array.c
sparse_array.h util: use c11 alignas instead of rolling our own 2022-06-14 15:08:37 +00:00
streaming-load-memcpy.c util: Use util_get_cpu_caps instead cpu_has_sse4_1 macro 2022-11-15 19:06:07 +00:00
streaming-load-memcpy.h streaming-memcpy: move to src/util/ and compile unconditionally 2022-06-07 03:33:20 +00: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: Remove unused function timespec_passed 2022-06-09 17:23:34 +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: Add aligned int64_t types for x86(non 64). 2023-04-11 12:57:15 +00:00
u_call_once.c util: Add util_call_once for optimize call to util_call_once_with_context out for hot path 2022-09-22 04:16:29 +00:00
u_call_once.h util: Add util_call_once for optimize call to util_call_once_with_context out for hot path 2022-09-22 04:16:29 +00:00
u_cpu_detect.c util/cpu: add big.LITTLE cpu detection 2023-04-14 10:16:49 +00:00
u_cpu_detect.h util/cpu: add big.LITTLE cpu detection 2023-04-14 10:16:49 +00:00
u_debug.c util: Add #ifdefs for Xbox GDK support. 2023-01-19 03:25:55 +00:00
u_debug.h util: Fixes thread safety of DEBUG_GET_ONCE_*_OPTION macros 2022-12-16 19:30:19 +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: Rename src/gallium/include/pipe/p_config.h to src/util/detect_arch.h 2022-11-15 20:35:55 +00:00
u_debug_refcnt.c tree-wide: Convert all usage of defined(PIPE_(OS|ARCH|CC)_*) to DETECT_(OS|ARCH|CC)_* by use grep 2022-11-15 20:35:55 +00:00
u_debug_refcnt.h util: Rename src/gallium/include/pipe/p_config.h to src/util/detect_arch.h 2022-11-15 20:35:55 +00:00
u_debug_stack.c tree-wide: Convert all usage of PIPE_(OS|ARCH|CC)_* to DETECT_(OS|ARCH|CC)_* by use grep 2022-11-15 20:35:55 +00:00
u_debug_stack.h util: Include the needed util/detect*.h headers in multiple files 2022-11-15 20:35:55 +00:00
u_debug_stack_android.cpp android: Make libbacktrace optional again 2023-01-25 08:58:25 -03:00
u_debug_symbol.c util: Add #ifdefs for Xbox GDK support. 2023-01-19 03:25:55 +00:00
u_debug_symbol.h misc: Replace #ifdef\t__cplusplus with #ifdef\s\s__cplusplus 2022-04-21 14:43:39 +00:00
u_dl.c gallium/util: Move u_dl and u_pointer to src/util 2022-07-01 21:15:07 +00:00
u_dl.h gallium/util: Move u_dl and u_pointer to src/util 2022-07-01 21:15:07 +00:00
u_drm.h
u_dynarray.h util/dynarray: allow an initial stack allocation to be used 2023-03-22 09:24:18 +00:00
u_endian.h util: trim trailing space for files src/util/**/* 2022-03-21 17:57:15 +00:00
u_hash_table.c util: Remove the usage of enum pipe_error in u_hash_table.* 2022-11-19 01:37:46 +00:00
u_hash_table.h util: Remove the usage of enum pipe_error in u_hash_table.* 2022-11-19 01:37:46 +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 tree-wide: Convert all usage of defined(PIPE_(OS|ARCH|CC)_*) to DETECT_(OS|ARCH|CC)_* by use grep 2022-11-15 20:35:55 +00:00
u_math.h util: allow align64() to do alignments >= 4Gb 2023-03-08 23:32:37 +00:00
u_memory.h util: Delete Offset() macro from u_memory.h 2023-04-15 00:54:16 +00:00
u_memset.h tree-wide: Convert all usage of defined(PIPE_(OS|ARCH|CC)_*) to DETECT_(OS|ARCH|CC)_* by use grep 2022-11-15 20:35:55 +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_pointer.h gallium/util: Move u_dl and u_pointer to src/util 2022-07-01 21:15:07 +00:00
u_printf.c util: Remove va_copy fixup because of c11 is required 2022-11-11 06:15:42 +00:00
u_printf.h printf: extract clovers printf impl 2022-08-04 23:53:49 +00:00
u_process.c util/u_process: implement util_get_command_line for BSDs 2023-02-20 21:26:49 +00:00
u_process.h util/u_process: remove util_get_process_name_may_override() 2023-01-31 22:02:58 +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: Fixes -Wundef in u_qsort.h 2022-11-24 04:33:07 +00:00
u_queue.c util: Call function mtx_init on exit_mutex to replace the usage of _MTX_INITIALIZER_NP in u_queue.c 2022-10-20 01:32:47 +00:00
u_queue.h glthread,hud: draw per-frame values and expose the number of batches per frame 2022-09-26 22:58:16 +00:00
u_string.h util: add a return value to util_sprintf 2023-01-12 16:52:19 +01:00
u_thread.c util: Move the function implementation from u_thread.h to u_thread.c 2022-10-20 03:04:56 +00:00
u_thread.h util: Move pipe_semaphore to u_thread.h and rename it to util_semaphore 2022-11-08 05:21:42 +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
u_worklist.c util,mesa,panfrost: Drop some author tags 2023-03-26 00:16:25 +00:00
u_worklist.h util,mesa,panfrost: Drop some author tags 2023-03-26 00:16:25 +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_vlc: Support compiling in C++ 2022-05-17 21:02:24 +00:00
vma.c util/vma: Add "nospan" 2022-12-17 19:14:12 +00:00
vma.h util/vma: Add "nospan" 2022-12-17 19:14:12 +00:00
xmlconfig.c util/xmlconfig: add MESA_DRICONF_EXECUTABLE_OVERRIDE 2023-01-31 22:02:58 +00:00
xmlconfig.h anv: work around for per-prim attributes corruption 2023-03-29 18:35:55 +00:00
xxd.py python: drop python2 support 2021-08-14 21:44:32 +00:00
xxhash.h