diff --git a/.gitignore b/.gitignore index a3e375bd7..ec93011a7 100644 --- a/.gitignore +++ b/.gitignore @@ -44,6 +44,7 @@ core /quakeforge-config /quakeforge.lsm /test-driver +/tracy /ylwrap # /RPM/ diff --git a/Makefile.am b/Makefile.am index 0bd3baaeb..4a8067843 100644 --- a/Makefile.am +++ b/Makefile.am @@ -25,8 +25,9 @@ NOCONV_DIST= \ $(distdir)/include/win32/resources/icon1XP.ico BUILT_SOURCES = $(top_srcdir)/.version -#AM_CFLAGS= @PREFER_NON_PIC@ -AM_CPPFLAGS= -I$(top_srcdir)/include $(PTHREAD_CFLAGS) $(FNM_FLAGS) $(NCURSES_CFLAGS) $(FREETYPE_CFLAGS) $(HARFBUZZ_CFLAGS) $(VULKAN_CPPFLAGS) $(LIBCURL_CFLAGS) +AM_CFLAGS= $(TRACY_CFLAGS) -funwind-tables -include qftracy.h +AM_CXXFLAGS= $(TRACY_CFLAGS) -include qftracy.h +AM_CPPFLAGS= -I$(top_srcdir)/include $(UNWIND_CFLAGS) $(PTHREAD_CFLAGS) $(FNM_FLAGS) $(NCURSES_CFLAGS) $(FREETYPE_CFLAGS) $(HARFBUZZ_CFLAGS) $(VULKAN_CPPFLAGS) $(LIBCURL_CFLAGS) common_ldflags= -export-dynamic @STATIC@ @PTHREAD_LDFLAGS@ @@ -60,6 +61,12 @@ YFLAGS = -v -d -Wno-yacc -Werror PTHREAD_LDFLAGS=@PTHREAD_LDFLAGS@ PTHREAD_CFLAGS=@PTHREAD_CFLAGS@ +if HAVE_TRACY +tracy_src=tracy/public/TracyClient.cpp +else +tracy_src= +endif + lib_ldflags=-version-info $(QUAKE_LIBRARY_VERSION_INFO) \ -rpath $(libdir) -no-undefined plugin_ldflags= @plugin_ldflags@ -avoid-version -module -rpath $(plugindir) diff --git a/config.d/networking.m4 b/config.d/networking.m4 index 443f663f9..dbb329295 100644 --- a/config.d/networking.m4 +++ b/config.d/networking.m4 @@ -64,7 +64,7 @@ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include ]], [[ connect(0, NULL, 42); -]])],[NET_LIBS="$NET_LIBS -lwsock32 -lwinmm" +]])],[NET_LIBS="$NET_LIBS -lwsock32" ac_cv_func_connect=yes ac_cv_func_gethostbyname=yes HAVE_WSOCK=yes @@ -72,6 +72,21 @@ connect(0, NULL, 42); ]) LIBS="$SAVELIBS" +AC_MSG_CHECKING([for WSAPoll in -lws2_32]) +SAVELIBS="$LIBS" +LIBS="$LIBS -lws2_32" +AC_LINK_IFELSE([AC_LANG_PROGRAM([[ +#include +]], [[ +WSAPoll(NULL, 0, 42); +]])],[NET_LIBS="$NET_LIBS -lws2_32 -lwinmm" + ac_cv_func_connect=yes + ac_cv_func_gethostbyname=yes + HAVE_WS2=yes + AC_MSG_RESULT(yes)],[AC_MSG_RESULT(no) +]) +LIBS="$SAVELIBS" + AC_MSG_CHECKING(for UDP support) if test "x$ac_cv_func_connect" = "xyes" -a "x$ac_cv_func_gethostbyname" = "xyes"; then HAVE_UDP=yes diff --git a/config.d/programs.m4 b/config.d/programs.m4 index b3bada220..b182aa621 100644 --- a/config.d/programs.m4 +++ b/config.d/programs.m4 @@ -4,6 +4,7 @@ dnl ================================================================== AC_PROG_INSTALL AC_PROG_CC +AC_PROG_CXX AC_PROG_CPP AC_PROG_LN_S AC_PROG_RANLIB diff --git a/config.d/tracy.m4 b/config.d/tracy.m4 new file mode 100644 index 000000000..06a442ecd --- /dev/null +++ b/config.d/tracy.m4 @@ -0,0 +1,35 @@ +AC_ARG_ENABLE(tracy, + AS_HELP_STRING( + [--disable-tracy], + [disable use of tracy profiler] + ) +) +HAVE_TRACY=no +if test "x$enable_tracy" = "xyes"; then + tracy_dir=${srcdir}/tracy/public + if test -d ${tracy_dir}; then + TRACY_CFLAGS="-I ${tracy_dir} -DHAVE_TRACY" + HAVE_TRACY=yes + fi +fi +AC_SUBST(TRACY_CFLAGS) +AC_SUBST(TRACY_SRC) +AM_CONDITIONAL(HAVE_TRACY, test "x$HAVE_TRACY" = "xyes") + +if test "x$HAVE_TRACY" = "xyes"; then +AC_MSG_CHECKING([for SymFromAddr in -ldbghelp]) +SAVELIBS="$LIBS" +LIBS="$LIBS -ldbghelp" +AC_LINK_IFELSE([AC_LANG_PROGRAM([[ +#include +#include +]], [[ +SymFromAddr(NULL, 0, NULL, NULL); +]])],[NET_LIBS="$NET_LIBS -ldbghelp" + ac_cv_func_connect=yes + ac_cv_func_gethostbyname=yes + HAVE_WS2=yes + AC_MSG_RESULT(yes)],[AC_MSG_RESULT(no) +]) +LIBS="$SAVELIBS" +fi diff --git a/configure.ac b/configure.ac index 4ca20bc1a..ab92906cf 100644 --- a/configure.ac +++ b/configure.ac @@ -140,6 +140,7 @@ m4_include(config.d/paths.m4) m4_include(config.d/build_control.m4) m4_include(config.d/qfcc.m4) +m4_include(config.d/tracy.m4) AC_ARG_ENABLE(static-doc, AS_HELP_STRING([--enable-static-doc], diff --git a/include/qftracy.h b/include/qftracy.h new file mode 100644 index 000000000..3ea8b9b6b --- /dev/null +++ b/include/qftracy.h @@ -0,0 +1,50 @@ +// do not include this directly: it's meant for -include +#ifdef HAVE_TRACY +// tracy includes math.h but _GNU_SOURCE is needed for sincosf +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif + +// enable tracy +#define TRACY_ENABLE +#include "tracy/TracyC.h" + +inline void __qfZoneEnd (TracyCZoneCtx **ctxptr) +{ + TracyCZoneEnd (**ctxptr); +} + +#define qfConcatInternal(a,b) a##b +#define qfConcat(a,b) qfConcatInternal(a, b) + +#define qfFrameMark TracyCFrameMark +#define qfZoneNamed(varname, active) \ + TracyCZone (varname, active) \ + __attribute__((cleanup(__qfZoneEnd))) \ + TracyCZoneCtx *qfConcat(__qfZone, __COUNTER__) = &varname + +#define qfZoneEnd(varname) TracyCZoneEnd (varname) + +#define qfZoneName(ctx, name, size) TracyCZoneName (ctx, name, size) +#define qfZoneColor(ctx, color) TracyCZoneColor (ctx, color) +#define qfZoneValue(ctx, value) TracyCZoneValue (ctx, value) + +#define qfZoneNamedN(varname, name, active) \ + TracyCZoneN (varname, name, active) \ + __attribute__((cleanup(__qfZoneEnd))) \ + TracyCZoneCtx *qfConcat(__qfZone, __COUNTER__) = &varname + +#define qfMessageL(msg) TracyCMessageL(msg) + +#else + +#define qfFrameMark +#define qfZoneNamed(varname, active) +#define qfZoneEnd(varname) +#define qfZoneName(ctx, name, size) +#define qfZoneColor(ctx, color) +#define qfZoneValue(ctx, value) +#define qfZoneNamedN(varname, name, active) +#define qfMessageL(msg) + +#endif diff --git a/libs/client/cl_screen.c b/libs/client/cl_screen.c index 5ad0e7aa2..f7a027915 100644 --- a/libs/client/cl_screen.c +++ b/libs/client/cl_screen.c @@ -169,6 +169,7 @@ SCR_CShift (view_pos_t abs, view_pos_t len) static void scr_draw_views (void) { + qfZoneNamed (zone, true); if (scr_showturtle) { static int count; if (r_data->frametime < 0.1) { @@ -325,6 +326,7 @@ CL_Init_Screen (void) void CL_UpdateScreen (viewstate_t *vs) { + qfZoneNamedN (us_zone, "CL_UpdateScreen", true); _vs = vs; //FIXME not every time diff --git a/libs/client/cl_temp_entities.c b/libs/client/cl_temp_entities.c index 81dcfc82d..3c9c15659 100644 --- a/libs/client/cl_temp_entities.c +++ b/libs/client/cl_temp_entities.c @@ -666,6 +666,7 @@ CL_UpdateExplosions (double time, TEntContext_t *ctx) void CL_UpdateTEnts (double time, TEntContext_t *ctx) { + qfZoneNamedN (ut_zone, "CL_UpdateTEnts", true); free_stale_entities (); CL_UpdateBeams (time, ctx); CL_UpdateExplosions (time, ctx); diff --git a/libs/client/cl_view.c b/libs/client/cl_view.c index 5520f2e74..cf04f3fb3 100644 --- a/libs/client/cl_view.c +++ b/libs/client/cl_view.c @@ -632,6 +632,7 @@ V_DropCShift (cshift_t *cs, double time, float droprate) void V_PrepBlend (viewstate_t *vs) { + qfZoneNamed (zone, true); int i, j; if (cl_cshift_powerup @@ -931,6 +932,7 @@ DropPunchAngle (viewstate_t *vs) void V_RenderView (viewstate_t *vs) { + qfZoneNamed (zone, true); if (!vs->active) { if (Transform_Valid (vs->camera_transform)) { vec4f_t base = { 0, 0, 0, 1 }; diff --git a/libs/client/sbar.c b/libs/client/sbar.c index 4e90f6072..7a01b7025 100644 --- a/libs/client/sbar.c +++ b/libs/client/sbar.c @@ -1754,6 +1754,7 @@ Sbar_DrawCenterPrint (void) void Sbar_Update (double time) { + qfZoneNamedN (sbu_zone, "Sbar_Update", true); fps_count++; sbar_time = time; if (!sbar_active) { diff --git a/libs/console/client.c b/libs/console/client.c index 64510b40b..4f9694204 100644 --- a/libs/console/client.c +++ b/libs/console/client.c @@ -791,6 +791,7 @@ setup_console (void) static void C_DrawConsole (void) { + qfZoneNamed (zone, true); if (con_debug) { Con_Debug_Draw (); } diff --git a/libs/ui/canvas.c b/libs/ui/canvas.c index 46464578d..be34ec8b7 100644 --- a/libs/ui/canvas.c +++ b/libs/ui/canvas.c @@ -167,6 +167,7 @@ typedef void (*canvas_sysfunc_f) (canvas_system_t *canvas_sys, static void draw_update (canvas_system_t *canvas_sys, ecs_pool_t *pool, ecs_range_t range) { + qfZoneNamed (zone, true); ecs_system_t viewsys = { canvas_sys->reg, canvas_sys->view_base }; uint32_t count = range.end - range.start; uint32_t *ent = pool->dense + range.start; @@ -180,6 +181,7 @@ static void draw_tile_views (canvas_system_t *canvas_sys, ecs_pool_t *pool, ecs_range_t range) { + qfZoneNamed (zone, true); ecs_system_t viewsys = { canvas_sys->reg, canvas_sys->view_base }; uint32_t count = range.end - range.start; uint32_t *ent = pool->dense + range.start; @@ -197,6 +199,7 @@ static void draw_pic_views (canvas_system_t *canvas_sys, ecs_pool_t *pool, ecs_range_t range) { + qfZoneNamed (zone, true); ecs_system_t viewsys = { canvas_sys->reg, canvas_sys->view_base }; uint32_t count = range.end - range.start; uint32_t *ent = pool->dense + range.start; @@ -215,6 +218,7 @@ static void draw_fitpic_views (canvas_system_t *canvas_sys, ecs_pool_t *pool, ecs_range_t range) { + qfZoneNamed (zone, true); ecs_system_t viewsys = { canvas_sys->reg, canvas_sys->view_base }; uint32_t count = range.end - range.start; uint32_t *ent = pool->dense + range.start; @@ -234,6 +238,7 @@ static void draw_subpic_views (canvas_system_t *canvas_sys, ecs_pool_t *pool, ecs_range_t range) { + qfZoneNamed (zone, true); ecs_system_t viewsys = { canvas_sys->reg, canvas_sys->view_base }; uint32_t count = range.end - range.start; uint32_t *ent = pool->dense + range.start; @@ -253,6 +258,7 @@ static void draw_cachepic_views (canvas_system_t *canvas_sys, ecs_pool_t *pool, ecs_range_t range) { + qfZoneNamed (zone, true); ecs_system_t viewsys = { canvas_sys->reg, canvas_sys->view_base }; uint32_t count = range.end - range.start; uint32_t *ent = pool->dense + range.start; @@ -272,6 +278,7 @@ static void draw_fill_views (canvas_system_t *canvas_sys, ecs_pool_t *pool, ecs_range_t range) { + qfZoneNamed (zone, true); ecs_system_t viewsys = { canvas_sys->reg, canvas_sys->view_base }; uint32_t count = range.end - range.start; uint32_t *ent = pool->dense + range.start; @@ -291,6 +298,7 @@ static void draw_charbuff_views (canvas_system_t *canvas_sys, ecs_pool_t *pool, ecs_range_t range) { + qfZoneNamed (zone, true); ecs_system_t viewsys = { canvas_sys->reg, canvas_sys->view_base }; uint32_t count = range.end - range.start; uint32_t *ent = pool->dense + range.start; @@ -309,6 +317,7 @@ static void draw_func_views (canvas_system_t *canvas_sys, ecs_pool_t *pool, ecs_range_t range) { + qfZoneNamed (zone, true); ecs_system_t viewsys = { canvas_sys->reg, canvas_sys->view_base }; uint32_t count = range.end - range.start; uint32_t *ent = pool->dense + range.start; @@ -328,6 +337,7 @@ static void draw_outline_views (canvas_system_t *canvas_sys, ecs_pool_t *pool, ecs_range_t range) { + qfZoneNamed (zone, true); ecs_system_t viewsys = { canvas_sys->reg, canvas_sys->view_base }; uint32_t count = range.end - range.start; uint32_t *ent = pool->dense + range.start; @@ -378,6 +388,7 @@ draw_box (view_pos_t *abs, view_pos_t *len, uint32_t ind, int c) static void draw_glyphs (canvas_system_t *canvas_sys, ecs_pool_t *pool, ecs_range_t range) { + qfZoneNamed (zone, true); auto reg = canvas_sys->reg; uint32_t glyphs = canvas_sys->text_base + text_glyphs; uint32_t color = canvas_sys->text_base + text_color; @@ -402,6 +413,7 @@ static void draw_passage_glyphs (canvas_system_t *canvas_sys, ecs_pool_t *pool, ecs_range_t range) { + qfZoneNamed (zone, true); auto reg = canvas_sys->reg; uint32_t glyphs = canvas_sys->text_base + text_glyphs; uint32_t color = canvas_sys->text_base + text_color; @@ -440,6 +452,7 @@ draw_passage_glyphs (canvas_system_t *canvas_sys, ecs_pool_t *pool, void Canvas_Draw (canvas_system_t canvas_sys) { + qfZoneNamed (zone, true); static canvas_sysfunc_f draw_func[canvas_comp_count] = { [canvas_update] = draw_update, [canvas_updateonce] = draw_update, diff --git a/libs/video/renderer/r_screen.c b/libs/video/renderer/r_screen.c index efd51176b..14c64d948 100644 --- a/libs/video/renderer/r_screen.c +++ b/libs/video/renderer/r_screen.c @@ -288,6 +288,7 @@ SCR_UpdateScreen_legacy (SCR_Func *scr_funcs) void SCR_UpdateScreen (transform_t camera, double realtime, SCR_Func *scr_funcs) { + qfZoneNamed (zone, true); R_RunParticles (r_data->frametime); if (scr_skipupdate || !scr_initialized) { diff --git a/libs/video/renderer/vid_render_vulkan.c b/libs/video/renderer/vid_render_vulkan.c index 08954f046..71b541025 100644 --- a/libs/video/renderer/vid_render_vulkan.c +++ b/libs/video/renderer/vid_render_vulkan.c @@ -345,6 +345,7 @@ vulkan_set_2d (int scaled) static void vulkan_UpdateScreen (SCR_Func *scr_funcs) { + qfZoneNamed (zone, true); vulkan_set_2d (1);//FIXME Vulkan_SetScrFuncs (scr_funcs, vulkan_ctx); QFV_RunRenderJob (vulkan_ctx); diff --git a/libs/video/renderer/vulkan/capture.c b/libs/video/renderer/vulkan/capture.c index c7ae88220..ce87019f7 100644 --- a/libs/video/renderer/vulkan/capture.c +++ b/libs/video/renderer/vulkan/capture.c @@ -47,6 +47,7 @@ static void capture_initiate (const exprval_t **params, exprval_t *result, exprctx_t *ectx) { + qfZoneNamed (zone, true); auto taskctx = (qfv_taskctx_t *) ectx; auto ctx = taskctx->ctx; @@ -158,6 +159,7 @@ is_bgr (VkFormat format) static void capture_finalize (const exprval_t **params, exprval_t *result, exprctx_t *ectx) { + qfZoneNamed (zone, true); auto taskctx = (qfv_taskctx_t *) ectx; auto ctx = taskctx->ctx; diff --git a/libs/video/renderer/vulkan/mouse_pick.c b/libs/video/renderer/vulkan/mouse_pick.c index cfe3c3912..b11a3955e 100644 --- a/libs/video/renderer/vulkan/mouse_pick.c +++ b/libs/video/renderer/vulkan/mouse_pick.c @@ -46,6 +46,7 @@ static void mousepick_initiate (const exprval_t **params, exprval_t *result, exprctx_t *ectx) { + qfZoneNamed (zone, true); auto taskctx = (qfv_taskctx_t *) ectx; auto ctx = taskctx->ctx; @@ -86,6 +87,7 @@ static void mousepick_finalize (const exprval_t **params, exprval_t *result, exprctx_t *ectx) { + qfZoneNamed (zone, true); auto taskctx = (qfv_taskctx_t *) ectx; auto ctx = taskctx->ctx; diff --git a/libs/video/renderer/vulkan/render.c b/libs/video/renderer/vulkan/render.c index 6e918311d..af387b688 100644 --- a/libs/video/renderer/vulkan/render.c +++ b/libs/video/renderer/vulkan/render.c @@ -152,6 +152,9 @@ run_subpass (qfv_subpass_t *sp, qfv_taskctx_t *taskctx) static void run_renderpass (qfv_renderpass_t *rp, vulkan_ctx_t *ctx, void *data) { + qfZoneNamed (zone, true); + qfZoneName (zone, rp->label.name, rp->label.name_len); + qfZoneColor (zone, rp->label.color32); qfv_device_t *device = ctx->device; qfv_devfuncs_t *dfunc = device->funcs; __auto_type rctx = ctx->render_context; @@ -223,6 +226,9 @@ run_compute_pipeline (qfv_pipeline_t *pipeline, VkCommandBuffer cmd, static void run_compute (qfv_compute_t *comp, vulkan_ctx_t *ctx, qfv_step_t *step) { + qfZoneNamed (zone, true); + qfZoneName (zone, step->label.name, step->label.name_len); + qfZoneColor (zone, step->label.color32); qfv_device_t *device = ctx->device; qfv_devfuncs_t *dfunc = device->funcs; __auto_type rctx = ctx->render_context; @@ -251,6 +257,9 @@ run_compute (qfv_compute_t *comp, vulkan_ctx_t *ctx, qfv_step_t *step) static void run_process (qfv_process_t *proc, vulkan_ctx_t *ctx) { + qfZoneNamed (zone, true); + qfZoneName (zone, proc->label.name, proc->label.name_len); + qfZoneColor (zone, proc->label.color32); qfv_taskctx_t taskctx = { .ctx = ctx, }; @@ -261,6 +270,7 @@ void QFV_RunRenderPass (vulkan_ctx_t *ctx, qfv_renderpass_t *renderpass, uint32_t width, uint32_t height, void *data) { + qfZoneNamed (zone, true); qfv_output_t output = { .extent = { .width = width, @@ -274,6 +284,7 @@ QFV_RunRenderPass (vulkan_ctx_t *ctx, qfv_renderpass_t *renderpass, void QFV_RunRenderJob (vulkan_ctx_t *ctx) { + qfZoneNamed (zone, true); auto rctx = ctx->render_context; auto job = rctx->job; int64_t start = Sys_LongTime (); @@ -426,6 +437,7 @@ QFV_CreateFramebuffer (vulkan_ctx_t *ctx, qfv_renderpass_t *rp, static void wait_on_fence (const exprval_t **params, exprval_t *result, exprctx_t *ectx) { + qfZoneNamed (zone, true); auto taskctx = (qfv_taskctx_t *) ectx; auto ctx = taskctx->ctx; auto device = ctx->device; @@ -445,6 +457,7 @@ static void update_framebuffer (const exprval_t **params, exprval_t *result, exprctx_t *ectx) { + qfZoneNamed (zone, true); auto taskctx = (qfv_taskctx_t *) ectx; auto ctx = taskctx->ctx; auto job = ctx->render_context->job; diff --git a/libs/video/renderer/vulkan/staging.c b/libs/video/renderer/vulkan/staging.c index 8329dd9fa..f80afa560 100644 --- a/libs/video/renderer/vulkan/staging.c +++ b/libs/video/renderer/vulkan/staging.c @@ -227,6 +227,7 @@ acquire_space (qfv_packet_t *packet, size_t size) qfv_packet_t * QFV_PacketAcquire (qfv_stagebuf_t *stage) { + qfZoneNamed (zone, true); qfv_device_t *device = stage->device; qfv_devfuncs_t *dfunc = device->funcs; @@ -234,8 +235,10 @@ QFV_PacketAcquire (qfv_stagebuf_t *stage) if (!RB_SPACE_AVAILABLE (stage->packets)) { // need to wait for a packet to become available packet = RB_PEEK_DATA (stage->packets, 0); + qfMessageL ("waiting on fence"); dfunc->vkWaitForFences (device->dev, 1, &packet->fence, VK_TRUE, ~0ull); + qfMessageL ("got fence"); release_space (stage, packet->offset, packet->length); RB_RELEASE (stage->packets, 1); } diff --git a/libs/video/renderer/vulkan/vulkan_alias.c b/libs/video/renderer/vulkan/vulkan_alias.c index b6cfdbfa0..5fcff84b3 100644 --- a/libs/video/renderer/vulkan/vulkan_alias.c +++ b/libs/video/renderer/vulkan/vulkan_alias.c @@ -258,6 +258,7 @@ alias_draw_ent (qfv_taskctx_t *taskctx, entity_t ent, bool pass, static void alias_draw (const exprval_t **params, exprval_t *result, exprctx_t *ectx) { + qfZoneNamed (zone, true); auto taskctx = (qfv_taskctx_t *) ectx; auto pass = *(int *) params[0]->value; auto stage = *(int *) params[1]->value; diff --git a/libs/video/renderer/vulkan/vulkan_bsp.c b/libs/video/renderer/vulkan/vulkan_bsp.c index 1c1121b3a..47aa615ad 100644 --- a/libs/video/renderer/vulkan/vulkan_bsp.c +++ b/libs/video/renderer/vulkan/vulkan_bsp.c @@ -1177,6 +1177,7 @@ create_notexture (vulkan_ctx_t *ctx) static void bsp_reset_queues (const exprval_t **params, exprval_t *result, exprctx_t *ectx) { + qfZoneNamed (zone, true); auto taskctx = (qfv_taskctx_t *) ectx; auto ctx = taskctx->ctx; auto bctx = ctx->bsp_context; @@ -1191,6 +1192,7 @@ bsp_reset_queues (const exprval_t **params, exprval_t *result, exprctx_t *ectx) static void bsp_draw_queue (const exprval_t **params, exprval_t *result, exprctx_t *ectx) { + qfZoneNamed (zone, true); auto taskctx = (qfv_taskctx_t *) ectx; auto ctx = taskctx->ctx; auto device = ctx->device; @@ -1259,6 +1261,7 @@ bsp_draw_queue (const exprval_t **params, exprval_t *result, exprctx_t *ectx) static void bsp_visit_world (const exprval_t **params, exprval_t *result, exprctx_t *ectx) { + qfZoneNamed (zone, true); auto taskctx = (qfv_taskctx_t *) ectx; auto ctx = taskctx->ctx; auto bctx = ctx->bsp_context; diff --git a/libs/video/renderer/vulkan/vulkan_compose.c b/libs/video/renderer/vulkan/vulkan_compose.c index 9ba8b0d32..c1882f120 100644 --- a/libs/video/renderer/vulkan/vulkan_compose.c +++ b/libs/video/renderer/vulkan/vulkan_compose.c @@ -71,6 +71,7 @@ static VkWriteDescriptorSet base_image_write = { static void compose_draw (const exprval_t **params, exprval_t *result, exprctx_t *ectx) { + qfZoneNamed (zone, true); auto taskctx = (qfv_taskctx_t *) ectx; auto ctx = taskctx->ctx; auto device = ctx->device; diff --git a/libs/video/renderer/vulkan/vulkan_draw.c b/libs/video/renderer/vulkan/vulkan_draw.c index 80ce3d92a..71ce29c0d 100644 --- a/libs/video/renderer/vulkan/vulkan_draw.c +++ b/libs/video/renderer/vulkan/vulkan_draw.c @@ -524,6 +524,7 @@ static uint32_t create_quad (int x, int y, int w, int h, qpic_t *pic, uint32_t *vertex_index, VkBuffer buffer, vulkan_ctx_t *ctx) { + qfZoneNamed (zone, true); __auto_type pd = (picdata_t *) pic->data; float sl = 0, sr = 1, st = 0, sb = 1; @@ -566,6 +567,7 @@ make_static_quad (int w, int h, qpic_t *pic, vulkan_ctx_t *ctx) static int make_dyn_quad (int x, int y, int w, int h, qpic_t *pic, vulkan_ctx_t *ctx) { + qfZoneNamed (zone, true); drawctx_t *dctx = ctx->draw_context; drawframe_t *frame = &dctx->frames.a[ctx->curFrame]; @@ -916,6 +918,7 @@ draw_lines (qfv_taskctx_t *taskctx) static void flush_draw (const exprval_t **params, exprval_t *result, exprctx_t *ectx) { + qfZoneNamed (zone, true); auto taskctx = (qfv_taskctx_t *) ectx; auto ctx = taskctx->ctx; flush_draw_scrap (ctx); @@ -924,6 +927,7 @@ flush_draw (const exprval_t **params, exprval_t *result, exprctx_t *ectx) static void slice_draw (const exprval_t **params, exprval_t *result, exprctx_t *ectx) { + qfZoneNamed (zone, true); auto taskctx = (qfv_taskctx_t *) ectx; auto ctx = taskctx->ctx; auto device = ctx->device; @@ -959,6 +963,7 @@ slice_draw (const exprval_t **params, exprval_t *result, exprctx_t *ectx) static void line_draw (const exprval_t **params, exprval_t *result, exprctx_t *ectx) { + qfZoneNamed (zone, true); auto taskctx = (qfv_taskctx_t *) ectx; auto ctx = taskctx->ctx; auto device = ctx->device; @@ -990,6 +995,7 @@ line_draw (const exprval_t **params, exprval_t *result, exprctx_t *ectx) static void draw_scr_funcs (const exprval_t **params, exprval_t *result, exprctx_t *ectx) { + qfZoneNamed (zone, true); auto taskctx = (qfv_taskctx_t *) ectx; auto ctx = taskctx->ctx; auto dctx = ctx->draw_context; @@ -1425,6 +1431,7 @@ Vulkan_Draw_SubPic (int x, int y, qpic_t *pic, int srcx, int srcy, int width, int height, vulkan_ctx_t *ctx) { + qfZoneNamed (zone, true); drawctx_t *dctx = ctx->draw_context; drawframe_t *frame = &dctx->frames.a[ctx->curFrame]; diff --git a/libs/video/renderer/vulkan/vulkan_iqm.c b/libs/video/renderer/vulkan/vulkan_iqm.c index 9d40751f6..4a5cc239c 100644 --- a/libs/video/renderer/vulkan/vulkan_iqm.c +++ b/libs/video/renderer/vulkan/vulkan_iqm.c @@ -270,6 +270,7 @@ iqm_draw_ent (qfv_taskctx_t *taskctx, entity_t ent, bool pass) static void iqm_draw (const exprval_t **params, exprval_t *result, exprctx_t *ectx) { + qfZoneNamed (zone, true); auto taskctx = (qfv_taskctx_t *) ectx; int pass = *(int *) params[0]->value; diff --git a/libs/video/renderer/vulkan/vulkan_lighting.c b/libs/video/renderer/vulkan/vulkan_lighting.c index ad6d4fd9e..b2b64ae87 100644 --- a/libs/video/renderer/vulkan/vulkan_lighting.c +++ b/libs/video/renderer/vulkan/vulkan_lighting.c @@ -160,6 +160,7 @@ static void lighting_setup_shadow (const exprval_t **params, exprval_t *result, exprctx_t *ectx) { + qfZoneNamed (zone, true); auto taskctx = (qfv_taskctx_t *) ectx; auto ctx = taskctx->ctx; auto lctx = ctx->lighting_context; @@ -287,6 +288,7 @@ static void lighting_draw_shadow_maps (const exprval_t **params, exprval_t *result, exprctx_t *ectx) { + qfZoneNamed (zone, true); auto taskctx = (qfv_taskctx_t *) ectx; auto ctx = taskctx->ctx; auto lctx = ctx->lighting_context; @@ -457,6 +459,7 @@ static void lighting_update_lights (const exprval_t **params, exprval_t *result, exprctx_t *ectx) { + qfZoneNamed (zone, true); auto taskctx = (qfv_taskctx_t *) ectx; auto ctx = taskctx->ctx; auto lctx = ctx->lighting_context; @@ -619,6 +622,7 @@ static void lighting_update_descriptors (const exprval_t **params, exprval_t *result, exprctx_t *ectx) { + qfZoneNamed (zone, true); auto taskctx = (qfv_taskctx_t *) ectx; auto ctx = taskctx->ctx; auto device = ctx->device; @@ -676,6 +680,7 @@ static void lighting_bind_descriptors (const exprval_t **params, exprval_t *result, exprctx_t *ectx) { + qfZoneNamed (zone, true); auto taskctx = (qfv_taskctx_t *) ectx; auto ctx = taskctx->ctx; auto device = ctx->device; @@ -728,6 +733,7 @@ static void lighting_draw_splats (const exprval_t **params, exprval_t *result, exprctx_t *ectx) { + qfZoneNamed (zone, true); auto taskctx = (qfv_taskctx_t *) ectx; auto ctx = taskctx->ctx; auto device = ctx->device; @@ -751,6 +757,7 @@ static void lighting_draw_lights (const exprval_t **params, exprval_t *result, exprctx_t *ectx) { + qfZoneNamed (zone, true); auto taskctx = (qfv_taskctx_t *) ectx; auto ctx = taskctx->ctx; auto device = ctx->device; diff --git a/libs/video/renderer/vulkan/vulkan_matrices.c b/libs/video/renderer/vulkan/vulkan_matrices.c index 7150ad9c3..21b230af7 100644 --- a/libs/video/renderer/vulkan/vulkan_matrices.c +++ b/libs/video/renderer/vulkan/vulkan_matrices.c @@ -129,6 +129,7 @@ Vulkan_SetSkyMatrix (vulkan_ctx_t *ctx, mat4f_t sky) static void update_matrices (const exprval_t **params, exprval_t *result, exprctx_t *ectx) { + qfZoneNamed (zone, true); auto taskctx = (qfv_taskctx_t *) ectx; auto ctx = taskctx->ctx; auto device = ctx->device; diff --git a/libs/video/renderer/vulkan/vulkan_output.c b/libs/video/renderer/vulkan/vulkan_output.c index bd6873d39..80737b2d5 100644 --- a/libs/video/renderer/vulkan/vulkan_output.c +++ b/libs/video/renderer/vulkan/vulkan_output.c @@ -65,6 +65,7 @@ static void acquire_output (const exprval_t **params, exprval_t *result, exprctx_t *ectx) { + qfZoneNamed (zone, true); auto taskctx = (qfv_taskctx_t *) ectx; auto ctx = taskctx->ctx; auto device = ctx->device; @@ -135,6 +136,7 @@ acquire_output (const exprval_t **params, exprval_t *result, exprctx_t *ectx) static void update_input (const exprval_t **params, exprval_t *result, exprctx_t *ectx) { + qfZoneNamed (zone, true); auto taskctx = (qfv_taskctx_t *) ectx; auto ctx = taskctx->ctx; auto device = ctx->device; @@ -165,6 +167,7 @@ static void output_select_pipeline (const exprval_t **params, exprval_t *result, exprctx_t *ectx) { + qfZoneNamed (zone, true); auto taskctx = (qfv_taskctx_t *) ectx; auto ctx = taskctx->ctx; auto output = QFV_GetStep (params[0], ctx->render_context->job); @@ -192,6 +195,7 @@ static void output_select_renderpass (const exprval_t **params, exprval_t *result, exprctx_t *ectx) { + qfZoneNamed (zone, true); auto taskctx = (qfv_taskctx_t *) ectx; auto ctx = taskctx->ctx; auto main = QFV_GetStep (params[0], ctx->render_context->job); @@ -234,6 +238,7 @@ output_draw (qfv_taskctx_t *taskctx, static void output_draw_flat (const exprval_t **params, exprval_t *result, exprctx_t *ectx) { + qfZoneNamed (zone, true); auto taskctx = (qfv_taskctx_t *) ectx; output_draw (taskctx, 0, 0); } @@ -241,6 +246,7 @@ output_draw_flat (const exprval_t **params, exprval_t *result, exprctx_t *ectx) static void output_draw_waterwarp (const exprval_t **params, exprval_t *result, exprctx_t *ectx) { + qfZoneNamed (zone, true); auto taskctx = (qfv_taskctx_t *) ectx; float time = vr_data.realtime; qfv_push_constants_t push_constants[] = { @@ -252,6 +258,7 @@ output_draw_waterwarp (const exprval_t **params, exprval_t *result, exprctx_t *e static void output_draw_fisheye (const exprval_t **params, exprval_t *result, exprctx_t *ectx) { + qfZoneNamed (zone, true); auto taskctx = (qfv_taskctx_t *) ectx; float width = r_refdef.vrect.width; float height = r_refdef.vrect.height; diff --git a/libs/video/renderer/vulkan/vulkan_particles.c b/libs/video/renderer/vulkan/vulkan_particles.c index 90e002c61..60ea1ad22 100644 --- a/libs/video/renderer/vulkan/vulkan_particles.c +++ b/libs/video/renderer/vulkan/vulkan_particles.c @@ -163,6 +163,7 @@ create_buffers (vulkan_ctx_t *ctx) static void particles_draw (const exprval_t **params, exprval_t *result, exprctx_t *ectx) { + qfZoneNamed (zone, true); auto taskctx = (qfv_taskctx_t *) ectx; auto ctx = taskctx->ctx; auto device = ctx->device; @@ -198,6 +199,7 @@ particles_draw (const exprval_t **params, exprval_t *result, exprctx_t *ectx) static void update_particles (const exprval_t **p, exprval_t *result, exprctx_t *ectx) { + qfZoneNamed (zone, true); auto taskctx = (qfv_taskctx_t *) ectx; auto ctx = taskctx->ctx; auto device = ctx->device; @@ -332,6 +334,7 @@ wait_on_event (VkBuffer states, VkBuffer params, VkBuffer system, static void particle_physics (const exprval_t **params, exprval_t *result, exprctx_t *ectx) { + qfZoneNamed (zone, true); auto taskctx = (qfv_taskctx_t *) ectx; auto ctx = taskctx->ctx; auto device = ctx->device; @@ -373,6 +376,7 @@ static void particle_wait_physics (const exprval_t **params, exprval_t *result, exprctx_t *ectx) { + qfZoneNamed (zone, true); auto taskctx = (qfv_taskctx_t *) ectx; auto ctx = taskctx->ctx; auto device = ctx->device; diff --git a/libs/video/renderer/vulkan/vulkan_planes.c b/libs/video/renderer/vulkan/vulkan_planes.c index b41372d63..4022eb1ed 100644 --- a/libs/video/renderer/vulkan/vulkan_planes.c +++ b/libs/video/renderer/vulkan/vulkan_planes.c @@ -90,6 +90,7 @@ make_plane (vec4f_t s, vec4f_t t, vec4f_t scolor, vec4f_t tcolor) static void debug_planes_draw (const exprval_t **params, exprval_t *result, exprctx_t *ectx) { + qfZoneNamed (zone, true); auto taskctx = (qfv_taskctx_t *) ectx; auto ctx = taskctx->ctx; auto device = ctx->device; diff --git a/libs/video/renderer/vulkan/vulkan_scene.c b/libs/video/renderer/vulkan/vulkan_scene.c index 6067258e2..db068a886 100644 --- a/libs/video/renderer/vulkan/vulkan_scene.c +++ b/libs/video/renderer/vulkan/vulkan_scene.c @@ -145,6 +145,7 @@ static void scene_draw_viewmodel (const exprval_t **params, exprval_t *result, exprctx_t *ectx) { + qfZoneNamed (zone, true); entity_t ent = vr_data.view_model; if (!Entity_Valid (ent)) { return; diff --git a/libs/video/renderer/vulkan/vulkan_sprite.c b/libs/video/renderer/vulkan/vulkan_sprite.c index 964920044..ca513293d 100644 --- a/libs/video/renderer/vulkan/vulkan_sprite.c +++ b/libs/video/renderer/vulkan/vulkan_sprite.c @@ -182,6 +182,7 @@ sprite_draw_ent (qfv_taskctx_t *taskctx, entity_t ent) static void sprite_draw (const exprval_t **params, exprval_t *result, exprctx_t *ectx) { + qfZoneNamed (zone, true); auto taskctx = (qfv_taskctx_t *) ectx; auto ctx = taskctx->ctx; auto device = ctx->device; diff --git a/libs/video/renderer/vulkan/vulkan_translucent.c b/libs/video/renderer/vulkan/vulkan_translucent.c index aa1816212..4d9a7a0d7 100644 --- a/libs/video/renderer/vulkan/vulkan_translucent.c +++ b/libs/video/renderer/vulkan/vulkan_translucent.c @@ -131,6 +131,7 @@ trans_create_buffers (vulkan_ctx_t *ctx) static void clear_translucent (const exprval_t **params, exprval_t *result, exprctx_t *ectx) { + qfZoneNamed (zone, true); auto taskctx = (qfv_taskctx_t *) ectx; auto ctx = taskctx->ctx; auto device = ctx->device; diff --git a/nq/source/Makemodule.am b/nq/source/Makemodule.am index e63efa17f..3e1fdf885 100644 --- a/nq/source/Makemodule.am +++ b/nq/source/Makemodule.am @@ -91,7 +91,7 @@ nq_x11_libs= \ libs/models/libQFmodels.la \ libs/video/targets/libQFx11.la \ $(nq_client_LIBS) -nq_x11_SOURCES= nq/source/sys_unix.c +nq_x11_SOURCES= nq/source/sys_unix.c $(tracy_src) nq_x11_LDADD= $(nq_x11_libs) \ $(VIDMODE_LIBS) $(DGA_LIBS) ${XFIXES_LIBS} $(XI2_LIBS) $(X_LIBS) \ -lX11 $(X_EXTRA_LIBS) $(X_SHM_LIB) $(NET_LIBS) $(DL_LIBS) @@ -106,7 +106,7 @@ nq_win_libs= \ libs/models/libQFmodels.la \ libs/video/targets/libQFwin.la \ $(nq_client_LIBS) -nq_win_SOURCES= nq/source/sys_win.c +nq_win_SOURCES= nq/source/sys_win.c $(tracy_src) nq_win_LDADD= $(nq_win_libs) -lgdi32 -lcomctl32 -lwinmm $(NET_LIBS) nq_win_LDFLAGS= $(common_ldflags) nq_win_DEPENDENCIES= $(nq_win_libs) @@ -120,6 +120,6 @@ endif EXTRA_DIST += nq/source/sys_wind.c nq/source/sys_unixd.c nq/source/sv_ded.c nq_server_LDFLAGS= $(common_ldflags) -nq_server_SOURCES= $(ded_sources) -nq_server_LDADD= $(server_libs) $(nq_server_LIBS) +nq_server_SOURCES= $(ded_sources) $(tracy_src) +nq_server_LDADD= $(server_libs) $(nq_server_LIBS) $(UNWIND_LIBS) nq_server_DEPENDENCIES= $(server_libs) $(nq_server_LIB_DEPS) diff --git a/nq/source/cl_ents.c b/nq/source/cl_ents.c index b725e05cb..9ca0243be 100644 --- a/nq/source/cl_ents.c +++ b/nq/source/cl_ents.c @@ -164,6 +164,7 @@ set_entity_model (int ent_ind, int modelindex) void CL_RelinkEntities (void) { + qfZoneNamedN (re_zzone, "CL_RelinkEntities", true); entity_t ent; entity_state_t *new, *old; float bobjrotate, frac, f; diff --git a/nq/source/cl_main.c b/nq/source/cl_main.c index 65dc052ee..671518e9e 100644 --- a/nq/source/cl_main.c +++ b/nq/source/cl_main.c @@ -506,6 +506,7 @@ CL_PrintEntities_f (void) int CL_ReadFromServer (void) { + qfZoneNamedN (rfzzone, "CL_ReadFromServer", true); int ret; TEntContext_t tentCtx = { cl.viewstate.player_origin, @@ -635,6 +636,7 @@ write_capture (tex_t *tex, void *data) void CL_PreFrame (void) { + qfZoneNamedN (pfzone, "CL_PreFrame", true); IN_ProcessEvents (); GIB_Thread_Execute (); @@ -647,6 +649,7 @@ CL_PreFrame (void) void CL_Frame (void) { + qfZoneNamedN (fzone, "CL_Frame", true); static double time1 = 0, time2 = 0, time3 = 0; int pass1, pass2, pass3; diff --git a/nq/source/cl_parse.c b/nq/source/cl_parse.c index 54f850f10..a384505ed 100644 --- a/nq/source/cl_parse.c +++ b/nq/source/cl_parse.c @@ -718,6 +718,7 @@ CL_SetStat (int stat, int value) void CL_ParseServerMessage (void) { + qfZoneNamedN (psm_zone, "CL_ParseServerMessage", true); int cmd = 0, i, j; const char *str; static dstring_t *stuffbuf; diff --git a/nq/source/host.c b/nq/source/host.c index 1ddbc04b3..d6715abda 100644 --- a/nq/source/host.c +++ b/nq/source/host.c @@ -678,6 +678,7 @@ Host_FilterTime (float time) static void _Host_Frame (float time) { + qfZoneNamedN (hfzone, "_Host_Frame", true); static int first = 1; float sleeptime; diff --git a/nq/source/sys_unix.c b/nq/source/sys_unix.c index 9b73dd2d6..0b575a14e 100644 --- a/nq/source/sys_unix.c +++ b/nq/source/sys_unix.c @@ -88,6 +88,7 @@ main (int argc, const char **argv) oldtime = Sys_DoubleTime () - 0.1; while (1) { // Main message loop + qfFrameMark; // find time spent rendering last frame newtime = Sys_DoubleTime (); time = newtime - oldtime; diff --git a/qw/source/Makemodule.am b/qw/source/Makemodule.am index 8d95d845d..aef3cafea 100644 --- a/qw/source/Makemodule.am +++ b/qw/source/Makemodule.am @@ -117,7 +117,7 @@ qw_client_x11_libs= \ libs/models/libQFmodels.la \ libs/video/targets/libQFx11.la \ $(qw_client_LIBS) -qw_client_x11_SOURCES= qw/source/cl_sys_unix.c +qw_client_x11_SOURCES= qw/source/cl_sys_unix.c $(tracy_src) qw_client_x11_LDADD= $(qw_client_x11_libs) \ $(VIDMODE_LIBS) $(DGA_LIBS) ${XFIXES_LIBS} $(XI2_LIBS) $(X_LIBS) \ -lX11 $(X_EXTRA_LIBS) $(X_SHM_LIB) $(NET_LIBS) $(LIBCURL_LIBS) \ @@ -133,7 +133,7 @@ qw_client_win_libs= \ libs/models/libQFmodels.la \ libs/video/targets/libQFwin.la \ $(qw_client_LIBS) -qw_client_win_SOURCES= qw/source/cl_sys_win.c +qw_client_win_SOURCES= qw/source/cl_sys_win.c $(tracy_src) qw_client_win_LDADD= $(qw_client_win_libs) -lgdi32 -lwinmm $(NET_LIBS) $(LIBCURL_LIBS) qw_client_win_LDFLAGS= $(common_ldflags) qw_client_win_DEPENDENCIES= $(qw_client_win_libs) diff --git a/ruamoko/qwaq/Makemodule.am b/ruamoko/qwaq/Makemodule.am index 92ddedae3..e0b97e1de 100644 --- a/ruamoko/qwaq/Makemodule.am +++ b/ruamoko/qwaq/Makemodule.am @@ -120,7 +120,7 @@ qwaq_x11_libs= \ ruamoko_qwaq_qwaq_x11_SOURCES= \ ruamoko/qwaq/builtins/main.c \ ruamoko/qwaq/builtins/qwaq-graphics.c \ - ruamoko/qwaq/builtins/graphics.c + ruamoko/qwaq/builtins/graphics.c $(tracy_src) ruamoko_qwaq_qwaq_x11_LDADD= $(qwaq_x11_libs) $(QWAQ_LIBS) \ $(VIDMODE_LIBS) $(DGA_LIBS) ${XFIXES_LIBS} $(XI2_LIBS) $(X_LIBS) \ -lX11 $(X_EXTRA_LIBS) $(X_SHM_LIB) $(PTHREAD_LDFLAGS) $(DL_LIBS) diff --git a/ruamoko/qwaq/builtins/graphics.c b/ruamoko/qwaq/builtins/graphics.c index acd127716..c691a9922 100644 --- a/ruamoko/qwaq/builtins/graphics.c +++ b/ruamoko/qwaq/builtins/graphics.c @@ -114,6 +114,7 @@ bi_newscene (progs_t *pr, void *_res) static void bi_refresh (progs_t *pr, void *_res) { + qfFrameMark; con_realtime = Sys_DoubleTime () - basetime; con_frametime = con_realtime - old_conrealtime; old_conrealtime = con_realtime;