diff --git a/.pick_status.json b/.pick_status.json index 67637e10d41..3e691a23171 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -824,7 +824,7 @@ "description": "zink: Lock around screen_debug_marker_{begin,end}", "nominated": true, "nomination_type": 2, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "015eda4a4186c75538a0aa915e380c5ce5863319", "notes": null diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c index d3301da0074..0f74896e079 100644 --- a/src/gallium/drivers/zink/zink_screen.c +++ b/src/gallium/drivers/zink/zink_screen.c @@ -3778,7 +3778,9 @@ zink_internal_create_screen(const struct pipe_screen_config *config, int64_t dev zink_tracing = screen->instance_info->have_EXT_debug_utils && (u_trace_is_enabled(U_TRACE_TYPE_PERFETTO) || u_trace_is_enabled(U_TRACE_TYPE_MARKERS)); + simple_mtx_lock(screen->queue_lock); screen->frame_marker_emitted = zink_screen_debug_marker_begin(screen, "frame"); + simple_mtx_unlock(screen->queue_lock); return screen; @@ -3874,6 +3876,8 @@ void VKAPI_PTR zink_stub_function_not_loaded() bool zink_screen_debug_marker_begin(struct zink_screen *screen, const char *fmt, ...) { + simple_mtx_assert_locked(screen->queue_lock); + if (!zink_tracing) return false; @@ -3899,6 +3903,8 @@ zink_screen_debug_marker_begin(struct zink_screen *screen, const char *fmt, ...) void zink_screen_debug_marker_end(struct zink_screen *screen, bool emitted) { + simple_mtx_assert_locked(screen->queue_lock); + if (emitted) VKSCR(QueueEndDebugUtilsLabelEXT)(screen->queue); } diff --git a/src/gallium/drivers/zink/zink_screen.h b/src/gallium/drivers/zink/zink_screen.h index a8e03ebc972..7e6ce005030 100644 --- a/src/gallium/drivers/zink/zink_screen.h +++ b/src/gallium/drivers/zink/zink_screen.h @@ -203,8 +203,11 @@ zink_screen_get_pipeline_cache(struct zink_screen *screen, struct zink_program * void VKAPI_PTR zink_stub_function_not_loaded(void); +/** Requires queue_lock to be held */ bool zink_screen_debug_marker_begin(struct zink_screen *screen, const char *fmt, ...); + +/** Requires queue_lock to be held */ void zink_screen_debug_marker_end(struct zink_screen *screen, bool emitted);