Clean up about 12000 allocations

Some of them were actual leaks, but tracking memory should be a lot
easier now. However, there's a lot of room for optimization of
allocations (eg, recylcling of hierarchies. There is now 1 active
allocation (according to tracy) when nq exits: Qgetline's string buffer
(I think an api change is in order).
This commit is contained in:
Bill Currie 2024-01-04 14:10:57 +09:00
parent 929b1f0662
commit 860f48d541
108 changed files with 673 additions and 91 deletions

View file

@ -70,6 +70,7 @@ typedef struct gib_method_s {
struct gib_method_s *parent; struct gib_method_s *parent;
struct gib_class_s *class; struct gib_class_s *class;
void *data; void *data;
bool own;
} gib_method_t; } gib_method_t;
typedef int (*gib_message_handler) (gib_object_t *obj, gib_method_t *method, typedef int (*gib_message_handler) (gib_object_t *obj, gib_method_t *method,

View file

@ -106,7 +106,6 @@ void Mod_LoadAliasModel (model_t *mod, void *buffer,
void Mod_LoadSpriteModel (model_t *mod, void *buffer); void Mod_LoadSpriteModel (model_t *mod, void *buffer);
void Skin_Init (void); void Skin_Init (void);
void Skin_Shutdown (void);
void Skin_Free (skin_t *skin); void Skin_Free (skin_t *skin);
skin_t *Skin_SetColormap (skin_t *skin, int cmap); skin_t *Skin_SetColormap (skin_t *skin, int cmap);
skin_t *Skin_SetSkin (skin_t *skin, int cmap, const char *skinname); skin_t *Skin_SetSkin (skin_t *skin, int cmap, const char *skinname);

View file

@ -60,10 +60,8 @@ static inline void __qftVkZoneEnd (___tracy_vkctx_scope ***zone)
#define VA_CTX_COUNT 64 #define VA_CTX_COUNT 64
typedef struct qfv_renderpassset_s
DARRAY_TYPE (struct qfv_orenderpass_s *) qfv_renderpassset_t;
typedef struct vulkan_ctx_s { typedef struct vulkan_ctx_s {
void (*delete) (struct vulkan_ctx_s *ctx);
void (*load_vulkan) (struct vulkan_ctx_s *ctx); void (*load_vulkan) (struct vulkan_ctx_s *ctx);
void (*unload_vulkan) (struct vulkan_ctx_s *ctx); void (*unload_vulkan) (struct vulkan_ctx_s *ctx);
@ -108,8 +106,6 @@ typedef struct vulkan_ctx_s {
VkCommandPool cmdpool; VkCommandPool cmdpool;
struct qfv_stagebuf_s *staging; struct qfv_stagebuf_s *staging;
uint32_t curFrame; uint32_t curFrame;
qfv_renderpassset_t renderPasses;
struct qfv_tex_s *default_black; struct qfv_tex_s *default_black;
struct qfv_tex_s *default_white; struct qfv_tex_s *default_white;

View file

@ -101,6 +101,7 @@ CD_f (void)
VISIBLE int VISIBLE int
CDAudio_Init (void) CDAudio_Init (void)
{ {
qfZoneScoped (true);
Sys_RegisterShutdown (CDAudio_shutdown, 0); Sys_RegisterShutdown (CDAudio_shutdown, 0);
PI_RegisterPlugins (cd_plugin_list); PI_RegisterPlugins (cd_plugin_list);

View file

@ -245,6 +245,7 @@ CL_ModelEffects (entity_t ent, int glow_color, double time)
void void
CL_EntityEffects (entity_t ent, entity_state_t *state, double time) CL_EntityEffects (entity_t ent, entity_state_t *state, double time)
{ {
qfZoneScoped (true);
transform_t transform = Entity_Transform (ent); transform_t transform = Entity_Transform (ent);
vec4f_t position = Transform_GetWorldPosition (transform); vec4f_t position = Transform_GetWorldPosition (transform);
if (state->effects & EF_BRIGHTFIELD) if (state->effects & EF_BRIGHTFIELD)
@ -258,6 +259,7 @@ CL_EntityEffects (entity_t ent, entity_state_t *state, double time)
void void
CL_Effects_Init (void) CL_Effects_Init (void)
{ {
qfZoneScoped (true);
if (r_funcs->TrailSystem) { if (r_funcs->TrailSystem) {
cl_tsystem = r_funcs->TrailSystem (); cl_tsystem = r_funcs->TrailSystem ();
} }

View file

@ -490,6 +490,7 @@ cl_unbind_f (void)
static void static void
CL_Legacy_Init (void) CL_Legacy_Init (void)
{ {
qfZoneScoped (true);
OK_Init (); OK_Init ();
Cmd_AddCommand ("bind", cl_bind_f, "compatibility wrapper for in_bind"); Cmd_AddCommand ("bind", cl_bind_f, "compatibility wrapper for in_bind");
Cmd_AddCommand ("unbind", cl_unbind_f, "compatibility wrapper for in_bind"); Cmd_AddCommand ("unbind", cl_unbind_f, "compatibility wrapper for in_bind");
@ -605,6 +606,7 @@ cl_event_handler (const IE_event_t *ie_event, void *unused)
void void
CL_Input_Init (cbuf_t *cbuf) CL_Input_Init (cbuf_t *cbuf)
{ {
qfZoneScoped (true);
cl_event_id = IE_Add_Handler (cl_event_handler, 0); cl_event_id = IE_Add_Handler (cl_event_handler, 0);
for (int i = 0; cl_in_axes[i]; i++) { for (int i = 0; cl_in_axes[i]; i++) {

View file

@ -277,6 +277,7 @@ parse_light (light_t *light, int *style, const plitem_t *entity,
void void
CL_LoadLights (plitem_t *entities, scene_t *scene) CL_LoadLights (plitem_t *entities, scene_t *scene)
{ {
qfZoneScoped (true);
lightingdata_t *ldata = scene->lights; lightingdata_t *ldata = scene->lights;
model_t *model = scene->worldmodel; model_t *model = scene->worldmodel;

View file

@ -1287,6 +1287,7 @@ particles_style_f (void *data, const cvar_t *cvar)
void void
CL_Particles_Init (void) CL_Particles_Init (void)
{ {
qfZoneScoped (true);
mtwist_seed (&mt, 0xdeadbeef); mtwist_seed (&mt, 0xdeadbeef);
cl_psystem = r_funcs->ParticleSystem (); cl_psystem = r_funcs->ParticleSystem ();
Cvar_Register (&easter_eggs_cvar, easter_eggs_f, 0); Cvar_Register (&easter_eggs_cvar, easter_eggs_f, 0);

View file

@ -278,9 +278,20 @@ cl_create_views (void)
clscr_set_canvas_func (centerprint_view, cl_draw_centerprint); clscr_set_canvas_func (centerprint_view, cl_draw_centerprint);
} }
static void
CL_Shutdown_Screen (void *data)
{
ECS_DelRegistry (cl_canvas_sys.reg);
cl_canvas_sys.reg = 0;
}
void void
CL_Init_Screen (void) CL_Init_Screen (void)
{ {
qfZoneScoped (true);
Sys_RegisterShutdown (CL_Shutdown_Screen, 0);
Con_Load ("client");
__auto_type reg = ECS_NewRegistry ("cl screen"); __auto_type reg = ECS_NewRegistry ("cl screen");
Canvas_InitSys (&cl_canvas_sys, reg); Canvas_InitSys (&cl_canvas_sys, reg);
if (con_module) { if (con_module) {

View file

@ -110,6 +110,9 @@ static model_t *cl_spike;
static vec4f_t beam_rolls[360]; static vec4f_t beam_rolls[360];
typedef struct tempent_s DARRAY_TYPE (entity_t) tempent_t;
static tempent_t light_entities = DARRAY_STATIC_INIT (32);
void void
CL_TEnts_Precache (void) CL_TEnts_Precache (void)
{ {
@ -146,9 +149,17 @@ cl_tents_precache (int phase, void *data)
CL_TEnts_Precache (); CL_TEnts_Precache ();
} }
static void
cl_tents_shutdown (void *data)
{
free (light_entities.a);
}
void void
CL_TEnts_Init (void) CL_TEnts_Init (void)
{ {
qfZoneScoped (true);
Sys_RegisterShutdown (cl_tents_shutdown, 0);
QFS_GamedirCallback (cl_tents_precache, 0); QFS_GamedirCallback (cl_tents_precache, 0);
for (int i = 0; i < 360; i++) { for (int i = 0; i < 360; i++) {
float ang = i * M_PI / 360; float ang = i * M_PI / 360;
@ -159,6 +170,7 @@ CL_TEnts_Init (void)
void void
CL_Init_Entity (entity_t ent) CL_Init_Entity (entity_t ent)
{ {
qfZoneScoped (true);
renderer_t *renderer = Ent_GetComponent (ent.id, ent.base + scene_renderer, ent.reg); renderer_t *renderer = Ent_GetComponent (ent.id, ent.base + scene_renderer, ent.reg);
animation_t *animation = Ent_GetComponent (ent.id, ent.base + scene_animation, ent.reg); animation_t *animation = Ent_GetComponent (ent.id, ent.base + scene_animation, ent.reg);
byte *active = Ent_GetComponent (ent.id, ent.base + scene_active, ent.reg); byte *active = Ent_GetComponent (ent.id, ent.base + scene_active, ent.reg);
@ -328,9 +340,6 @@ CL_ParseBeam (qmsg_t *net_message, model_t *m, double time, TEntContext_t *ctx)
} }
} }
typedef struct tempent_s DARRAY_TYPE (entity_t) tempent_t;
static tempent_t light_entities = DARRAY_STATIC_INIT (32);
static void static void
free_stale_entities (void) free_stale_entities (void)
{ {
@ -779,6 +788,7 @@ void
CL_MuzzleFlash (entity_t ent, vec4f_t position, vec4f_t fv, float zoffset, CL_MuzzleFlash (entity_t ent, vec4f_t position, vec4f_t fv, float zoffset,
double time) double time)
{ {
qfZoneScoped (true);
// spawn a new entity so the light doesn't mess with the owner // spawn a new entity so the light doesn't mess with the owner
uint32_t light = nullent; uint32_t light = nullent;
if (has_muzzleflash (ent)) { if (has_muzzleflash (ent)) {

View file

@ -967,6 +967,7 @@ V_NewScene (viewstate_t *viewstate, scene_t *scene)
void void
V_Init (viewstate_t *viewstate) V_Init (viewstate_t *viewstate)
{ {
qfZoneScoped (true);
Cmd_AddDataCommand ("bf", V_BonusFlash_f, viewstate, Cmd_AddDataCommand ("bf", V_BonusFlash_f, viewstate,
"Background flash, used when you pick up an item"); "Background flash, used when you pick up an item");
Cmd_AddDataCommand ("centerview", V_StartPitchDrift_f, viewstate, Cmd_AddDataCommand ("centerview", V_StartPitchDrift_f, viewstate,

View file

@ -58,9 +58,28 @@ worldscene_t cl_world = {
.models = DARRAY_STATIC_INIT (32), .models = DARRAY_STATIC_INIT (32),
}; };
static void
CL_World_Shutdown (void *data)
{
qfZoneScoped (true);
if (cl_world.edicts) {
PL_Release (cl_world.edicts);
}
if (cl_world.scene) {
if (cl_world.scene->lights) {
Light_DestroyLightingData (cl_world.scene->lights);
}
Scene_DeleteScene (cl_world.scene);
}
free (cl_world.models.a);
free (cl_static_entities.a);
}
void void
CL_World_Init (void) CL_World_Init (void)
{ {
qfZoneScoped (true);
Sys_RegisterShutdown (CL_World_Shutdown, 0);
scene_system_t extra_systems[] = { scene_system_t extra_systems[] = {
{ .system = &effect_system, { .system = &effect_system,
.components = effect_components, .components = effect_components,
@ -136,6 +155,7 @@ CL_ParseStatic (qmsg_t *msg, int version)
static void static void
map_cfg (const char *mapname, int all) map_cfg (const char *mapname, int all)
{ {
qfZoneScoped (true);
char *name = malloc (strlen (mapname) + 4 + 1); char *name = malloc (strlen (mapname) + 4 + 1);
cbuf_t *cbuf = Cbuf_New (&id_interp); cbuf_t *cbuf = Cbuf_New (&id_interp);
QFile *f; QFile *f;
@ -216,6 +236,7 @@ CL_LoadSky (const char *name)
void void
CL_World_NewMap (const char *mapname, const char *skyname) CL_World_NewMap (const char *mapname, const char *skyname)
{ {
qfZoneScoped (true);
model_t *worldmodel = cl_world.models.a[1]; model_t *worldmodel = cl_world.models.a[1];
cl_world.scene->worldmodel = worldmodel; cl_world.scene->worldmodel = worldmodel;

View file

@ -261,6 +261,8 @@ static draw_charbuffer_t *pl_buff;
static draw_charbuffer_t *spec_buff[4];//0,1 no track, 2 lost track, 3 tracking static draw_charbuffer_t *spec_buff[4];//0,1 no track, 2 lost track, 3 tracking
static draw_charbuffer_t *miniammo[4];
static draw_charbuffer_t *solo_monsters; static draw_charbuffer_t *solo_monsters;
static draw_charbuffer_t *solo_secrets; static draw_charbuffer_t *solo_secrets;
static draw_charbuffer_t *solo_time; static draw_charbuffer_t *solo_time;
@ -271,6 +273,7 @@ static ecs_system_t sbar_viewsys;
static view_t static view_t
sbar_view (int x, int y, int w, int h, grav_t gravity, view_t parent) sbar_view (int x, int y, int w, int h, grav_t gravity, view_t parent)
{ {
qfZoneScoped (true);
view_t view = View_New (sbar_viewsys, parent); view_t view = View_New (sbar_viewsys, parent);
View_SetPos (view, x, y); View_SetPos (view, x, y);
View_SetLen (view, w, h); View_SetLen (view, w, h);
@ -2137,6 +2140,7 @@ hud_swap_f (void *data, const cvar_t *cvar)
static void static void
set_hud_sbar (void) set_hud_sbar (void)
{ {
qfZoneScoped (true);
view_t v; view_t v;
if (hud_sbar) { if (hud_sbar) {
@ -2349,6 +2353,7 @@ create_views (view_def_t *view_defs, view_t parent)
static void static void
init_sbar_views (void) init_sbar_views (void)
{ {
qfZoneScoped (true);
create_views (sbar_defs, nullview); create_views (sbar_defs, nullview);
view_pos_t slen = View_GetLen (hud_canvas_view); view_pos_t slen = View_GetLen (hud_canvas_view);
view_pos_t hlen = View_GetLen (hud_view); view_pos_t hlen = View_GetLen (hud_view);
@ -2357,9 +2362,9 @@ init_sbar_views (void)
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
view_t v = View_GetChild (sbar_miniammo, i); view_t v = View_GetChild (sbar_miniammo, i);
draw_charbuffer_t *buffer = Draw_CreateBuffer (3, 1); miniammo[i] = Draw_CreateBuffer (3, 1);
Draw_ClearBuffer (buffer); Draw_ClearBuffer (miniammo[i]);
sbar_setcomponent (v, canvas_charbuff, &buffer); sbar_setcomponent (v, canvas_charbuff, &miniammo[i]);
} }
if (r_data->vid->width > 320) { if (r_data->vid->width > 320) {
@ -2397,6 +2402,7 @@ init_sbar_views (void)
static void static void
init_views (void) init_views (void)
{ {
qfZoneScoped (true);
hud_stuff_view = sbar_view (0, 48, 152, 16, grav_southwest, hud_canvas_view); hud_stuff_view = sbar_view (0, 48, 152, 16, grav_southwest, hud_canvas_view);
hud_time_view = sbar_view (8, 0, 64, 8, grav_northwest, hud_stuff_view); hud_time_view = sbar_view (8, 0, 64, 8, grav_northwest, hud_stuff_view);
hud_fps_view = sbar_view (80, 0, 80, 8, grav_northwest, hud_stuff_view); hud_fps_view = sbar_view (80, 0, 80, 8, grav_northwest, hud_stuff_view);
@ -2449,6 +2455,7 @@ Sbar_GIB_Print_Center_f (void)
static void static void
load_pics (void) load_pics (void)
{ {
qfZoneScoped (true);
for (int i = 0; i < 10; i++) { for (int i = 0; i < 10; i++) {
sb_nums[0][i] = r_funcs->Draw_PicFromWad (va (0, "num_%i", i)); sb_nums[0][i] = r_funcs->Draw_PicFromWad (va (0, "num_%i", i));
sb_nums[1][i] = r_funcs->Draw_PicFromWad (va (0, "anum_%i", i)); sb_nums[1][i] = r_funcs->Draw_PicFromWad (va (0, "anum_%i", i));
@ -2702,9 +2709,48 @@ HUD_CreateCanvas (canvas_system_t canvas_sys)
View_SetVisible (hud_canvas_view, 1); View_SetVisible (hud_canvas_view, 1);
} }
static void
sbar_shutdown (void *data)
{
Draw_DestroyBuffer (time_buff);
Draw_DestroyBuffer (fps_buff);
Draw_DestroyBuffer (ping_buff);
Draw_DestroyBuffer (pl_buff);
for (int i = 0; i < MAX_PLAYERS; i++) {
Draw_DestroyBuffer (sb_fph[i]);
Draw_DestroyBuffer (sb_time[i]);
Draw_DestroyBuffer (sb_frags[i]);
Draw_DestroyBuffer (sb_ping[i]);
Draw_DestroyBuffer (sb_pl[i]);
Draw_DestroyBuffer (sb_uid[i]);
Draw_DestroyBuffer (sb_name[i]);
Draw_DestroyBuffer (sb_team[i]);
Draw_DestroyBuffer (sb_team_stats[i]);
Draw_DestroyBuffer (sb_team_frags[i]);
Draw_DestroyBuffer (sb_team_players[i]);
}
Draw_DestroyBuffer (sb_spectator);
for (int i = 0; i < 4; i++) {
Draw_DestroyBuffer (spec_buff[i]);
Draw_DestroyBuffer (miniammo[i]);
}
Draw_DestroyBuffer (solo_monsters);
Draw_DestroyBuffer (solo_secrets);
Draw_DestroyBuffer (solo_time);
Draw_DestroyBuffer (solo_name);
free (center_string.str);
}
void void
Sbar_Init (int *stats, float *item_gettime) Sbar_Init (int *stats, float *item_gettime)
{ {
qfZoneScoped (true);
Sys_RegisterShutdown (sbar_shutdown, 0);
sbar_stats = stats; sbar_stats = stats;
sbar_item_gettime = item_gettime; sbar_item_gettime = item_gettime;

View file

@ -176,13 +176,18 @@ ok_get_key (const void *_ok, void *unused)
return ok->old_name; return ok->old_name;
} }
static void
ok_shutdown (void *data)
{
Hash_DelTable (old_key_table);
}
void void
OK_Init (void) OK_Init (void)
{ {
old_keyname_t *ok; Sys_RegisterShutdown (ok_shutdown, 0);
old_key_table = Hash_NewTable (1021, ok_get_key, 0, 0, 0); old_key_table = Hash_NewTable (1021, ok_get_key, 0, 0, 0);
for (ok = old_keynames; ok->old_name; ok++) for (old_keyname_t *ok = old_keynames; ok->old_name; ok++)
Hash_Add (old_key_table, ok); Hash_Add (old_key_table, ok);
} }

View file

@ -280,6 +280,7 @@ static imui_style_t current_style;
void void
Con_Debug_Init (void) Con_Debug_Init (void)
{ {
qfZoneScoped (true);
for (int i = 0; deb_in_axes[i]; i++) { for (int i = 0; deb_in_axes[i]; i++) {
IN_RegisterAxis (deb_in_axes[i]); IN_RegisterAxis (deb_in_axes[i]);
} }
@ -300,9 +301,11 @@ Con_Debug_Init (void)
void void
Con_Debug_Shutdown (void) Con_Debug_Shutdown (void)
{ {
qfZoneScoped (true);
IE_Remove_Handler (debug_event_id); IE_Remove_Handler (debug_event_id);
Scene_DeleteScene (debug_scene); Scene_DeleteScene (debug_scene);
IMUI_DestroyContext (debug_imui);
} }
static void static void
@ -698,6 +701,7 @@ system_info (void)
void void
Con_Debug_Draw (void) Con_Debug_Draw (void)
{ {
qfZoneScoped (true);
if (debug_enable_time && Sys_LongTime () - debug_enable_time > 1000) { if (debug_enable_time && Sys_LongTime () - debug_enable_time > 1000) {
debug_saved_focus = IE_Get_Focus (); debug_saved_focus = IE_Get_Focus ();
IE_Set_Focus (debug_event_id); IE_Set_Focus (debug_event_id);

View file

@ -109,6 +109,7 @@ Con_shutdown (void *data)
VISIBLE void VISIBLE void
Con_Load (const char *plugin_name) Con_Load (const char *plugin_name)
{ {
qfZoneScoped (true);
Sys_RegisterShutdown (Con_shutdown, 0); Sys_RegisterShutdown (Con_shutdown, 0);
con_module = PI_LoadPlugin ("console", plugin_name); con_module = PI_LoadPlugin ("console", plugin_name);
@ -120,6 +121,7 @@ Con_Load (const char *plugin_name)
VISIBLE void VISIBLE void
Con_Init (void) Con_Init (void)
{ {
qfZoneScoped (true);
if (con_module) { if (con_module) {
__auto_type funcs = con_module->functions->console; __auto_type funcs = con_module->functions->console;
funcs->init (); funcs->init ();

View file

@ -118,12 +118,14 @@ static menu_func_t menu_functions[] = {
static void static void
run_menu_pre (void) run_menu_pre (void)
{ {
qfZoneScoped (true);
PR_ExecuteProgram (&menu_pr_state, menu_pre); PR_ExecuteProgram (&menu_pr_state, menu_pre);
} }
static void static void
run_menu_post (void) run_menu_post (void)
{ {
qfZoneScoped (true);
PR_ExecuteProgram (&menu_pr_state, menu_post); PR_ExecuteProgram (&menu_pr_state, menu_post);
} }
@ -225,6 +227,7 @@ menu_pic (int x, int y, const char *name,
static void static void
bi_Menu_Begin (progs_t *pr, void *data) bi_Menu_Begin (progs_t *pr, void *data)
{ {
qfZoneScoped (true);
int x = P_INT (pr, 0); int x = P_INT (pr, 0);
int y = P_INT (pr, 1); int y = P_INT (pr, 1);
const char *text = P_GSTRING (pr, 2); const char *text = P_GSTRING (pr, 2);
@ -243,30 +246,35 @@ bi_Menu_Begin (progs_t *pr, void *data)
static void static void
bi_Menu_FadeScreen (progs_t *pr, void *data) bi_Menu_FadeScreen (progs_t *pr, void *data)
{ {
qfZoneScoped (true);
menu->fadescreen = P_INT (pr, 0); menu->fadescreen = P_INT (pr, 0);
} }
static void static void
bi_Menu_Draw (progs_t *pr, void *data) bi_Menu_Draw (progs_t *pr, void *data)
{ {
qfZoneScoped (true);
menu->draw = P_FUNCTION (pr, 0); menu->draw = P_FUNCTION (pr, 0);
} }
static void static void
bi_Menu_EnterHook (progs_t *pr, void *data) bi_Menu_EnterHook (progs_t *pr, void *data)
{ {
qfZoneScoped (true);
menu->enter_hook = P_FUNCTION (pr, 0); menu->enter_hook = P_FUNCTION (pr, 0);
} }
static void static void
bi_Menu_LeaveHook (progs_t *pr, void *data) bi_Menu_LeaveHook (progs_t *pr, void *data)
{ {
qfZoneScoped (true);
menu->leave_hook = P_FUNCTION (pr, 0); menu->leave_hook = P_FUNCTION (pr, 0);
} }
static void static void
bi_Menu_Pic (progs_t *pr, void *data) bi_Menu_Pic (progs_t *pr, void *data)
{ {
qfZoneScoped (true);
int x = P_INT (pr, 0); int x = P_INT (pr, 0);
int y = P_INT (pr, 1); int y = P_INT (pr, 1);
const char *name = P_GSTRING (pr, 2); const char *name = P_GSTRING (pr, 2);
@ -277,6 +285,7 @@ bi_Menu_Pic (progs_t *pr, void *data)
static void static void
bi_Menu_SubPic (progs_t *pr, void *data) bi_Menu_SubPic (progs_t *pr, void *data)
{ {
qfZoneScoped (true);
int x = P_INT (pr, 0); int x = P_INT (pr, 0);
int y = P_INT (pr, 1); int y = P_INT (pr, 1);
const char *name = P_GSTRING (pr, 2); const char *name = P_GSTRING (pr, 2);
@ -291,6 +300,7 @@ bi_Menu_SubPic (progs_t *pr, void *data)
static void static void
bi_Menu_CenterPic (progs_t *pr, void *data) bi_Menu_CenterPic (progs_t *pr, void *data)
{ {
qfZoneScoped (true);
int x = P_INT (pr, 0); int x = P_INT (pr, 0);
int y = P_INT (pr, 1); int y = P_INT (pr, 1);
const char *name = P_GSTRING (pr, 2); const char *name = P_GSTRING (pr, 2);
@ -305,6 +315,7 @@ bi_Menu_CenterPic (progs_t *pr, void *data)
static void static void
bi_Menu_CenterSubPic (progs_t *pr, void *data) bi_Menu_CenterSubPic (progs_t *pr, void *data)
{ {
qfZoneScoped (true);
int x = P_INT (pr, 0); int x = P_INT (pr, 0);
int y = P_INT (pr, 1); int y = P_INT (pr, 1);
const char *name = P_GSTRING (pr, 2); const char *name = P_GSTRING (pr, 2);
@ -323,6 +334,7 @@ bi_Menu_CenterSubPic (progs_t *pr, void *data)
static void static void
bi_Menu_Item (progs_t *pr, void *data) bi_Menu_Item (progs_t *pr, void *data)
{ {
qfZoneScoped (true);
int x = P_INT (pr, 0); int x = P_INT (pr, 0);
int y = P_INT (pr, 1); int y = P_INT (pr, 1);
const char *text = P_GSTRING (pr, 2); const char *text = P_GSTRING (pr, 2);
@ -342,6 +354,7 @@ bi_Menu_Item (progs_t *pr, void *data)
static void static void
bi_Menu_Cursor (progs_t *pr, void *data) bi_Menu_Cursor (progs_t *pr, void *data)
{ {
qfZoneScoped (true);
pr_func_t func = P_FUNCTION (pr, 0); pr_func_t func = P_FUNCTION (pr, 0);
menu->cursor = func; menu->cursor = func;
@ -350,6 +363,7 @@ bi_Menu_Cursor (progs_t *pr, void *data)
static void static void
bi_Menu_KeyEvent (progs_t *pr, void *data) bi_Menu_KeyEvent (progs_t *pr, void *data)
{ {
qfZoneScoped (true);
pr_func_t func = P_FUNCTION (pr, 0); pr_func_t func = P_FUNCTION (pr, 0);
menu->keyevent = func; menu->keyevent = func;
@ -358,12 +372,14 @@ bi_Menu_KeyEvent (progs_t *pr, void *data)
static void static void
bi_Menu_End (progs_t *pr, void *data) bi_Menu_End (progs_t *pr, void *data)
{ {
qfZoneScoped (true);
menu = menu->parent; menu = menu->parent;
} }
static void static void
bi_Menu_TopMenu (progs_t *pr, void *data) bi_Menu_TopMenu (progs_t *pr, void *data)
{ {
qfZoneScoped (true);
const char *name = P_GSTRING (pr, 0); const char *name = P_GSTRING (pr, 0);
if (top_menu) if (top_menu)
@ -374,6 +390,7 @@ bi_Menu_TopMenu (progs_t *pr, void *data)
static void static void
bi_Menu_SelectMenu (progs_t *pr, void *data) bi_Menu_SelectMenu (progs_t *pr, void *data)
{ {
qfZoneScoped (true);
const char *name = P_GSTRING (pr, 0); const char *name = P_GSTRING (pr, 0);
menu = 0; menu = 0;
@ -396,6 +413,7 @@ bi_Menu_SelectMenu (progs_t *pr, void *data)
static void static void
bi_Menu_SetQuit (progs_t *pr, void *data) bi_Menu_SetQuit (progs_t *pr, void *data)
{ {
qfZoneScoped (true);
pr_func_t func = P_FUNCTION (pr, 0); pr_func_t func = P_FUNCTION (pr, 0);
menu_quit = func; menu_quit = func;
@ -404,6 +422,7 @@ bi_Menu_SetQuit (progs_t *pr, void *data)
static void static void
bi_Menu_Quit (progs_t *pr, void *data) bi_Menu_Quit (progs_t *pr, void *data)
{ {
qfZoneScoped (true);
if (con_data.quit) if (con_data.quit)
con_data.quit (); con_data.quit ();
Sys_Quit (); Sys_Quit ();
@ -412,6 +431,7 @@ bi_Menu_Quit (progs_t *pr, void *data)
static void static void
bi_Menu_GetIndex (progs_t *pr, void *data) bi_Menu_GetIndex (progs_t *pr, void *data)
{ {
qfZoneScoped (true);
if (menu) { if (menu) {
R_INT (pr) = menu->cur_item; R_INT (pr) = menu->cur_item;
} else { } else {
@ -422,6 +442,7 @@ bi_Menu_GetIndex (progs_t *pr, void *data)
static void static void
bi_Menu_Next (progs_t *pr, void *data) bi_Menu_Next (progs_t *pr, void *data)
{ {
qfZoneScoped (true);
menu->cur_item++; menu->cur_item++;
menu->cur_item %= menu->num_items; menu->cur_item %= menu->num_items;
} }
@ -429,6 +450,7 @@ bi_Menu_Next (progs_t *pr, void *data)
static void static void
bi_Menu_Prev (progs_t *pr, void *data) bi_Menu_Prev (progs_t *pr, void *data)
{ {
qfZoneScoped (true);
menu->cur_item += menu->num_items - 1; menu->cur_item += menu->num_items - 1;
menu->cur_item %= menu->num_items; menu->cur_item %= menu->num_items;
} }
@ -436,6 +458,7 @@ bi_Menu_Prev (progs_t *pr, void *data)
static void static void
bi_Menu_Enter (progs_t *pr, void *data) bi_Menu_Enter (progs_t *pr, void *data)
{ {
qfZoneScoped (true);
menu_item_t *item; menu_item_t *item;
if (!menu) if (!menu)
@ -466,6 +489,7 @@ bi_Menu_Enter (progs_t *pr, void *data)
static void static void
bi_Menu_Leave (progs_t *pr, void *data) bi_Menu_Leave (progs_t *pr, void *data)
{ {
qfZoneScoped (true);
if (menu) { if (menu) {
if (menu->leave_hook) { if (menu->leave_hook) {
run_menu_pre (); run_menu_pre ();
@ -644,6 +668,7 @@ Menu_Init (void)
void void
Menu_Load (void) Menu_Load (void)
{ {
qfZoneScoped (true);
int size; int size;
QFile *file; QFile *file;

View file

@ -2932,6 +2932,7 @@ exit_program:;
VISIBLE void VISIBLE void
PR_ExecuteProgram (progs_t *pr, pr_func_t fnum) PR_ExecuteProgram (progs_t *pr, pr_func_t fnum)
{ {
qfZoneScoped (true);
Sys_PushSignalHook (signal_hook, pr); Sys_PushSignalHook (signal_hook, pr);
Sys_PushErrorHandler (error_handler, pr); Sys_PushErrorHandler (error_handler, pr);

View file

@ -147,6 +147,7 @@ align_size (int size, int align)
VISIBLE void VISIBLE void
PR_LoadProgsFile (progs_t *pr, QFile *file, int size) PR_LoadProgsFile (progs_t *pr, QFile *file, int size)
{ {
qfZoneScoped (true);
size_t i; size_t i;
int mem_size; int mem_size;
int offset_tweak; int offset_tweak;
@ -466,6 +467,7 @@ run_load_funcs (progs_t *pr, int (**load_funcs)(progs_t *))
VISIBLE int VISIBLE int
PR_RunLoadFuncs (progs_t *pr) PR_RunLoadFuncs (progs_t *pr)
{ {
qfZoneScoped (true);
int i; int i;
memset (&pr->globals, 0, sizeof (pr->globals)); memset (&pr->globals, 0, sizeof (pr->globals));

View file

@ -1048,6 +1048,7 @@ gib_builtin_shutdown (void *data)
void void
GIB_Builtin_Init (bool sandbox) GIB_Builtin_Init (bool sandbox)
{ {
qfZoneScoped (true);
if (sandbox) if (sandbox)
GIB_File_Transform_Path = GIB_File_Transform_Path_Secure; GIB_File_Transform_Path = GIB_File_Transform_Path_Secure;

View file

@ -707,6 +707,7 @@ GIB_Classes_Build_Scripted (const char *name, const char *parentname,
void void
GIB_Classes_Init (void) GIB_Classes_Init (void)
{ {
qfZoneScoped (true);
GIB_Class_Create (&Object_class); GIB_Class_Create (&Object_class);
GIB_Class_Create (&Thread_class); GIB_Class_Create (&Thread_class);
GIB_Class_Create (&ObjectHash_class); GIB_Class_Create (&ObjectHash_class);

View file

@ -33,6 +33,7 @@
#include "QF/cbuf.h" #include "QF/cbuf.h"
#include "QF/gib.h" #include "QF/gib.h"
#include "QF/sys.h"
#include "gib_handle.h" #include "gib_handle.h"
@ -83,9 +84,17 @@ GIB_Handle_Get (unsigned long int num)
return gib_handles[num]->data; return gib_handles[num]->data;
} }
static void
gib_handle_shutdown (void *data)
{
free (gib_handles);
}
void void
GIB_Handle_Init (void) GIB_Handle_Init (void)
{ {
qfZoneScoped (true);
Sys_RegisterShutdown (gib_handle_shutdown, 0);
gib_handles_size = 256; gib_handles_size = 256;
gib_handles = calloc (gib_handles_size, sizeof (gib_handle_t *)); gib_handles = calloc (gib_handles_size, sizeof (gib_handle_t *));
gib_next_handle = 1; gib_next_handle = 1;

View file

@ -102,6 +102,7 @@ GIB_Exec_Override_f (void)
VISIBLE void VISIBLE void
GIB_Init (bool sandbox) GIB_Init (bool sandbox)
{ {
qfZoneScoped (true);
// Override the exec command with a GIB-aware one // Override the exec command with a GIB-aware one
if (Cmd_Exists ("exec")) { if (Cmd_Exists ("exec")) {
Cmd_RemoveCommand ("exec"); Cmd_RemoveCommand ("exec");

View file

@ -76,5 +76,6 @@ Key_GIB_Bind_Get_f (void)
void void
GIB_Key_Init (void) GIB_Key_Init (void)
{ {
qfZoneScoped (true);
GIB_Builtin_Add ("bind::get", Key_GIB_Bind_Get_f); GIB_Builtin_Add ("bind::get", Key_GIB_Bind_Get_f);
} }

View file

@ -60,12 +60,18 @@ GIB_Class_Get_Key (const void *ele, void *ptr)
return ((gib_class_t *) ele)->name; return ((gib_class_t *) ele)->name;
} }
static void GIB_Object_Finish_Destroy (int argc, const char **argv, void *data);
static void static void
GIB_Class_Free (void *ele, void *ptr) GIB_Class_Free (void *ele, void *ptr)
{ {
gib_class_t *b; qfZoneScoped (true);
gib_class_t *b = ele;
b = (gib_class_t *) ele; const char *dispose = "dispose";
GIB_Object_Finish_Destroy (1, &dispose, b->classobj);
Hash_DelTable (b->class_methods);
Hash_DelTable (b->methods);
llist_delete (b->children);
free ((void *)b->name); free ((void *)b->name);
free (b); free (b);
} }
@ -79,7 +85,11 @@ GIB_Method_Get_Key (const void *ele, void *ptr)
static void static void
GIB_Method_Free (void *ele, void *ptr) GIB_Method_Free (void *ele, void *ptr)
{ {
// FIXME: Do something here gib_method_t *m = ele;
if (m->own) {
free ((void *) m->name);
}
free (m);
} }
static const char * static const char *
@ -125,6 +135,7 @@ static hashtab_t *
GIB_Method_Build_Hash (gib_class_t *class, hashtab_t *inherited, GIB_Method_Build_Hash (gib_class_t *class, hashtab_t *inherited,
gib_methodtab_t *methods) gib_methodtab_t *methods)
{ {
qfZoneScoped (true);
gib_methodtab_t *m; gib_methodtab_t *m;
gib_method_t *method; gib_method_t *method;
hashtab_t *new = Hash_NewTable (1024, GIB_Method_Get_Key, hashtab_t *new = Hash_NewTable (1024, GIB_Method_Get_Key,
@ -137,6 +148,7 @@ GIB_Method_Build_Hash (gib_class_t *class, hashtab_t *inherited,
method->func = m->func; method->func = m->func;
method->data = m->data; method->data = m->data;
method->class = class; method->class = class;
method->own = true;
Hash_Add (new, method); Hash_Add (new, method);
} }
@ -144,8 +156,12 @@ GIB_Method_Build_Hash (gib_class_t *class, hashtab_t *inherited,
void **list, **l; void **list, **l;
for (l = list = Hash_GetList (inherited); *l; l++) for (l = list = Hash_GetList (inherited); *l; l++)
if (!Hash_Find (new, GIB_Method_Get_Key (*l, NULL))) if (!Hash_Find (new, GIB_Method_Get_Key (*l, NULL))) {
Hash_Add (new, *l); method = malloc (sizeof (gib_method_t));
*method = *(gib_method_t *) *l;
method->own = false;
Hash_Add (new, method);
}
free (list); free (list);
} }
@ -155,6 +171,7 @@ GIB_Method_Build_Hash (gib_class_t *class, hashtab_t *inherited,
void void
GIB_Class_Create (gib_classdesc_t *desc) GIB_Class_Create (gib_classdesc_t *desc)
{ {
qfZoneScoped (true);
static const char *init = "init"; static const char *init = "init";
gib_class_t *parent = NULL, *class = calloc (1, sizeof (gib_class_t)); gib_class_t *parent = NULL, *class = calloc (1, sizeof (gib_class_t));
@ -195,6 +212,7 @@ GIB_Class_Create (gib_classdesc_t *desc)
gib_object_t * gib_object_t *
GIB_Object_Create (const char *classname, bool classobj) GIB_Object_Create (const char *classname, bool classobj)
{ {
qfZoneScoped (true);
gib_class_t *temp, *class = Hash_Find (gib_classes, classname); gib_class_t *temp, *class = Hash_Find (gib_classes, classname);
gib_object_t *obj; gib_object_t *obj;
int i; int i;
@ -204,7 +222,7 @@ GIB_Object_Create (const char *classname, bool classobj)
obj = calloc (1, sizeof (gib_object_t)); obj = calloc (1, sizeof (gib_object_t));
obj->class = class; obj->class = class;
obj->data = malloc (sizeof (void *) * (class->depth+1)); obj->data = calloc (sizeof (void *), (class->depth+1));
obj->methods = classobj ? class->class_methods : class->methods; obj->methods = classobj ? class->class_methods : class->methods;
obj->handle = classobj ? 0 : GIB_Handle_New (obj); obj->handle = classobj ? 0 : GIB_Handle_New (obj);
obj->handstr = strdup (va (0, "%lu", obj->handle)); obj->handstr = strdup (va (0, "%lu", obj->handle));
@ -234,7 +252,7 @@ GIB_Object_Finish_Destroy (int argc, const char **argv, void *data)
gib_class_t *temp; gib_class_t *temp;
for (temp = obj->class, i = obj->class->depth; temp; temp = temp->parent, i--) for (temp = obj->class, i = obj->class->depth; temp; temp = temp->parent, i--)
if (temp->destruct) if (temp->destruct && obj->data[i])
temp->destruct (obj->data[i]); temp->destruct (obj->data[i]);
free (obj->data); free (obj->data);
GIB_Handle_Free (obj->handle); GIB_Handle_Free (obj->handle);
@ -392,9 +410,20 @@ GIB_Object_Signal_Emit (gib_object_t *sender, int argc, const char **argv)
*argv = old; *argv = old;
} }
static void
gib_object_shutdown (void *data)
{
if (gib_classes) {
Hash_DelTable (gib_classes);
gib_classes = 0;
}
}
void void
GIB_Object_Init (void) GIB_Object_Init (void)
{ {
qfZoneScoped (true);
Sys_RegisterShutdown (gib_object_shutdown, 0);
gib_classes = Hash_NewTable (1024, GIB_Class_Get_Key, gib_classes = Hash_NewTable (1024, GIB_Class_Get_Key,
GIB_Class_Free, 0, 0); GIB_Class_Free, 0, 0);

View file

@ -37,11 +37,13 @@
#include <ctype.h> #include <ctype.h>
#include <sys/types.h> #include <sys/types.h>
#include "regex.h"
#include "QF/dstring.h" #include "QF/dstring.h"
#include "QF/hash.h" #include "QF/hash.h"
#include "gib_regex.h"
#include "QF/qtypes.h" #include "QF/qtypes.h"
#include "QF/sys.h"
#include "regex.h"
#include "gib_regex.h"
hashtab_t *gib_regexs; hashtab_t *gib_regexs;
static char errstr[1024]; static char errstr[1024];
@ -60,9 +62,17 @@ GIB_Regex_Free (void *ele, void *ptr)
free (ele); free (ele);
} }
static void
gib_regex_shutdown (void *data)
{
Hash_DelTable (gib_regexs);
}
void void
GIB_Regex_Init (void) GIB_Regex_Init (void)
{ {
qfZoneScoped (true);
Sys_RegisterShutdown (gib_regex_shutdown, 0);
gib_regexs = Hash_NewTable (512, GIB_Regex_Get_Key, GIB_Regex_Free, 0, 0); gib_regexs = Hash_NewTable (512, GIB_Regex_Get_Key, GIB_Regex_Free, 0, 0);
} }

View file

@ -98,9 +98,17 @@ GIB_Thread_Execute (void)
llist_iterate (gib_threads, LLIST_ICAST (te_iterator)); llist_iterate (gib_threads, LLIST_ICAST (te_iterator));
} }
static void
gib_thread_shutdown (void *data)
{
llist_delete (gib_threads);
}
void void
GIB_Thread_Init (void) GIB_Thread_Init (void)
{ {
qfZoneScoped (true);
Sys_RegisterShutdown (gib_thread_shutdown, 0);
gib_threads = llist_new (GIB_Thread_Free, NULL, NULL); gib_threads = llist_new (GIB_Thread_Free, NULL, NULL);
} }
@ -168,8 +176,16 @@ GIB_Event_Callback (gib_event_t * event, unsigned int argc, ...)
Cbuf_ArgsDelete (args); Cbuf_ArgsDelete (args);
} }
static void
gib_event_shutdown (void *data)
{
Hash_DelTable (gib_events);
}
void void
GIB_Event_Init (void) GIB_Event_Init (void)
{ {
qfZoneScoped (true);
Sys_RegisterShutdown (gib_event_shutdown, 0);
gib_events = Hash_NewTable (1024, GIB_Event_Get_Key, GIB_Event_Free, 0, 0); gib_events = Hash_NewTable (1024, GIB_Event_Get_Key, GIB_Event_Free, 0, 0);
} }

View file

@ -39,6 +39,7 @@
#include "QF/va.h" #include "QF/va.h"
#include "QF/hash.h" #include "QF/hash.h"
#include "QF/cvar.h" #include "QF/cvar.h"
#include "QF/sys.h"
#include "gib_parse.h" #include "gib_parse.h"
#include "gib_vars.h" #include "gib_vars.h"
@ -310,9 +311,18 @@ GIB_Var_Hash_New (void)
return Hash_NewTable (1024, GIB_Var_Get_Key, GIB_Var_Free, 0, 0); return Hash_NewTable (1024, GIB_Var_Get_Key, GIB_Var_Free, 0, 0);
} }
static void
gib_var_shutdown (void *data)
{
Hash_DelTable (gib_domains);
Hash_DelTable (gib_globals);
}
void void
GIB_Var_Init (void) GIB_Var_Init (void)
{ {
qfZoneScoped (true);
Sys_RegisterShutdown (gib_var_shutdown, 0);
gib_globals = Hash_NewTable (1024, GIB_Var_Get_Key, GIB_Var_Free, 0, 0); gib_globals = Hash_NewTable (1024, GIB_Var_Get_Key, GIB_Var_Free, 0, 0);
gib_domains = Hash_NewTable (1024, GIB_Domain_Get_Key, gib_domains = Hash_NewTable (1024, GIB_Domain_Get_Key,
GIB_Domain_Free, 0, 0); GIB_Domain_Free, 0, 0);

View file

@ -60,6 +60,7 @@ axis_free (void *a, void *data)
VISIBLE int VISIBLE int
IN_RegisterAxis (in_axis_t *axis) IN_RegisterAxis (in_axis_t *axis)
{ {
qfZoneScoped (true);
const char *name = axis->name; const char *name = axis->name;
if (Hash_Find (axis_tab, name)) { if (Hash_Find (axis_tab, name)) {
return 0; return 0;

View file

@ -177,6 +177,7 @@ button_release_cmd (void *_b)
VISIBLE int VISIBLE int
IN_RegisterButton (in_button_t *button) IN_RegisterButton (in_button_t *button)
{ {
qfZoneScoped (true);
const char *name = button->name; const char *name = button->name;
if (Hash_Find (button_tab, name)) { if (Hash_Find (button_tab, name)) {
return 0; return 0;

View file

@ -518,6 +518,7 @@ IN_SaveConfig (plitem_t *config)
void void
IN_LoadConfig (plitem_t *config) IN_LoadConfig (plitem_t *config)
{ {
qfZoneScoped (true);
plitem_t *input_config = PL_ObjectForKey (config, "input"); plitem_t *input_config = PL_ObjectForKey (config, "input");
if (input_config) { if (input_config) {
@ -545,6 +546,7 @@ IN_shutdown (void *data)
void void
IN_Init (void) IN_Init (void)
{ {
qfZoneScoped (true);
Sys_RegisterShutdown (IN_shutdown, 0); Sys_RegisterShutdown (IN_shutdown, 0);
IN_Event_Init (); IN_Event_Init ();
IN_ButtonInit (); IN_ButtonInit ();

View file

@ -80,6 +80,7 @@ IE_Send_Event (const IE_event_t *event)
int int
IE_Add_Handler (ie_handler_t *event_handler, void *data) IE_Add_Handler (ie_handler_t *event_handler, void *data)
{ {
qfZoneScoped (true);
size_t handle; size_t handle;
ie_reghandler_t reg = { event_handler, data }; ie_reghandler_t reg = { event_handler, data };

View file

@ -233,6 +233,7 @@ IMT_GetButtonBlock (int num_buttons)
int int
IMT_CreateContext (const char *name) IMT_CreateContext (const char *name)
{ {
qfZoneScoped (true);
in_context_t *ctx = DARRAY_OPEN_AT (&in_contexts, in_contexts.size, 1); in_context_t *ctx = DARRAY_OPEN_AT (&in_contexts, in_contexts.size, 1);
memset (ctx, 0, sizeof (*ctx)); memset (ctx, 0, sizeof (*ctx));
ctx->imt_tail = &ctx->imts; ctx->imt_tail = &ctx->imts;

View file

@ -103,6 +103,7 @@ static void Mod_CallbackLoad (void *object, cache_allocator_t allocator);
static void static void
mod_shutdown (void *data) mod_shutdown (void *data)
{ {
qfZoneScoped (true);
Mod_ClearAll (); Mod_ClearAll ();
for (size_t i = 0; i < mod_blocks.size; i++) { for (size_t i = 0; i < mod_blocks.size; i++) {
free (mod_blocks.a[i]); free (mod_blocks.a[i]);
@ -114,6 +115,7 @@ mod_shutdown (void *data)
VISIBLE void VISIBLE void
Mod_Init (void) Mod_Init (void)
{ {
qfZoneScoped (true);
byte *dest; byte *dest;
int m, x, y; int m, x, y;
int mip0size = 16*16, mip1size = 8*8, mip2size = 4*4, mip3size = 2*2; int mip0size = 16*16, mip1size = 8*8, mip2size = 4*4, mip3size = 2*2;
@ -146,6 +148,7 @@ Mod_Init (void)
VISIBLE void VISIBLE void
Mod_Init_Cvars (void) Mod_Init_Cvars (void)
{ {
qfZoneScoped (true);
Cvar_Register (&gl_subdivide_size_cvar, 0, 0); Cvar_Register (&gl_subdivide_size_cvar, 0, 0);
Cvar_Register (&gl_mesh_cache_cvar, 0, 0); Cvar_Register (&gl_mesh_cache_cvar, 0, 0);
Cvar_Register (&gl_alias_render_tri_cvar, 0, 0); Cvar_Register (&gl_alias_render_tri_cvar, 0, 0);
@ -155,6 +158,7 @@ Mod_Init_Cvars (void)
static void static void
mod_unload_model (size_t ind) mod_unload_model (size_t ind)
{ {
qfZoneScoped (true);
model_t *mod = mod_known.a[ind]; model_t *mod = mod_known.a[ind];
//FIXME this seems to be correct but need to double check the behavior //FIXME this seems to be correct but need to double check the behavior
@ -186,6 +190,7 @@ Mod_ClearAll (void)
model_t * model_t *
Mod_FindName (const char *name) Mod_FindName (const char *name)
{ {
qfZoneScoped (true);
size_t i; size_t i;
model_t **mod; model_t **mod;
@ -219,6 +224,7 @@ Mod_FindName (const char *name)
static model_t * static model_t *
Mod_RealLoadModel (model_t *mod, bool crash, cache_allocator_t allocator) Mod_RealLoadModel (model_t *mod, bool crash, cache_allocator_t allocator)
{ {
qfZoneScoped (true);
uint32_t *buf; uint32_t *buf;
// load the file // load the file
@ -296,6 +302,7 @@ Mod_RealLoadModel (model_t *mod, bool crash, cache_allocator_t allocator)
static model_t * static model_t *
Mod_LoadModel (model_t *mod, bool crash) Mod_LoadModel (model_t *mod, bool crash)
{ {
qfZoneScoped (true);
if (!mod->needload) { if (!mod->needload) {
if (mod->type == mod_alias && !mod->aliashdr) { if (mod->type == mod_alias && !mod->aliashdr) {
if (Cache_Check (&mod->cache)) if (Cache_Check (&mod->cache))
@ -314,6 +321,7 @@ Mod_LoadModel (model_t *mod, bool crash)
static void static void
Mod_CallbackLoad (void *object, cache_allocator_t allocator) Mod_CallbackLoad (void *object, cache_allocator_t allocator)
{ {
qfZoneScoped (true);
if (((model_t *)object)->type != mod_alias) if (((model_t *)object)->type != mod_alias)
Sys_Error ("Mod_CallbackLoad for non-alias model? FIXME!"); Sys_Error ("Mod_CallbackLoad for non-alias model? FIXME!");
// FIXME: do we want crash set to true? // FIXME: do we want crash set to true?
@ -328,6 +336,7 @@ Mod_CallbackLoad (void *object, cache_allocator_t allocator)
VISIBLE model_t * VISIBLE model_t *
Mod_ForName (const char *name, bool crash) Mod_ForName (const char *name, bool crash)
{ {
qfZoneScoped (true);
model_t *mod; model_t *mod;
mod = Mod_FindName (name); mod = Mod_FindName (name);
@ -353,6 +362,7 @@ Mod_TouchModel (const char *name)
VISIBLE void VISIBLE void
Mod_UnloadModel (model_t *model) Mod_UnloadModel (model_t *model)
{ {
qfZoneScoped (true);
for (size_t i = 0; i < mod_numknown; i++) { for (size_t i = 0; i < mod_numknown; i++) {
if (mod_known.a[i] == model) { if (mod_known.a[i] == model) {
mod_unload_model (i); mod_unload_model (i);
@ -363,6 +373,7 @@ Mod_UnloadModel (model_t *model)
VISIBLE void VISIBLE void
Mod_Print (void) Mod_Print (void)
{ {
qfZoneScoped (true);
size_t i; size_t i;
model_t **mod; model_t **mod;
@ -375,6 +386,7 @@ Mod_Print (void)
float float
RadiusFromBounds (const vec3_t mins, const vec3_t maxs) RadiusFromBounds (const vec3_t mins, const vec3_t maxs)
{ {
qfZoneScoped (true);
int i; int i;
vec3_t corner; vec3_t corner;

View file

@ -248,17 +248,19 @@ skin_free (void *_sb, void *unused)
free (sb); free (sb);
} }
void static void
Skin_Init (void) skin_shutdown (void *data)
{ {
skin_cache = Hash_NewTable (127, skin_getkey, skin_free, 0, 0); Hash_DelTable (skin_cache);
m_funcs->Skin_InitTranslations ();
} }
void void
Skin_Shutdown (void) Skin_Init (void)
{ {
Hash_DelTable (skin_cache); qfZoneScoped (true);
Sys_RegisterShutdown (skin_shutdown, 0);
skin_cache = Hash_NewTable (127, skin_getkey, skin_free, 0, 0);
m_funcs->Skin_InitTranslations ();
} }
VISIBLE int VISIBLE int

View file

@ -817,6 +817,7 @@ NET_shutdown (void *data)
void void
NET_Init (cbuf_t *cbuf) NET_Init (cbuf_t *cbuf)
{ {
qfZoneScoped (true);
int i; int i;
int controlSocket; int controlSocket;
qsocket_t *s; qsocket_t *s;

View file

@ -521,6 +521,7 @@ NET_Stats_f (void)
int int
Datagram_Init (void) Datagram_Init (void)
{ {
qfZoneScoped (true);
int i; int i;
int csock; int csock;

View file

@ -44,6 +44,7 @@ qsocket_t *loop_server = NULL;
__attribute__((pure)) int __attribute__((pure)) int
Loop_Init (void) Loop_Init (void)
{ {
qfZoneScoped (true);
if (net_is_dedicated) if (net_is_dedicated)
return -1; return -1;
return 0; return 0;

View file

@ -160,6 +160,7 @@ NetadrToSockadr (netadr_t *a, AF_address_t *s)
static void static void
SockadrToNetadr (AF_address_t *s, netadr_t *a) SockadrToNetadr (AF_address_t *s, netadr_t *a)
{ {
qfZoneScoped (true);
memcpy (&a->ip, &s->s4.sin_addr, ADDR_SIZE); memcpy (&a->ip, &s->s4.sin_addr, ADDR_SIZE);
a->port = s->s4.sin_port; a->port = s->s4.sin_port;
a->family = s->s4.sin_family; a->family = s->s4.sin_family;
@ -181,6 +182,7 @@ uint32_t *last_iface;
static int static int
get_iface_list (int sock) get_iface_list (int sock)
{ {
qfZoneScoped (true);
#ifdef HAVE_GETIFADDRS #ifdef HAVE_GETIFADDRS
struct ifaddrs *ifa_head; struct ifaddrs *ifa_head;
struct ifaddrs *ifa; struct ifaddrs *ifa;
@ -227,6 +229,7 @@ no_ifaddrs:
int int
UDP_Init (void) UDP_Init (void)
{ {
qfZoneScoped (true);
struct hostent *local = 0; struct hostent *local = 0;
char buff[MAXHOSTNAMELEN]; char buff[MAXHOSTNAMELEN];
netadr_t addr; netadr_t addr;
@ -286,9 +289,11 @@ UDP_Init (void)
void void
UDP_Shutdown (void) UDP_Shutdown (void)
{ {
qfZoneScoped (true);
UDP_Listen (false); UDP_Listen (false);
UDP_CloseSocket (net_controlsocket); UDP_CloseSocket (net_controlsocket);
free (ifaces);
} }
void void
@ -312,6 +317,7 @@ UDP_Listen (bool state)
int int
UDP_OpenSocket (int port) UDP_OpenSocket (int port)
{ {
qfZoneScoped (true);
int newsocket; int newsocket;
struct sockaddr_in address; struct sockaddr_in address;
#ifdef _WIN32 #ifdef _WIN32
@ -606,20 +612,16 @@ UDP_Write (int socket, byte *buf, int len, netadr_t *to)
const char * const char *
UDP_AddrToString (netadr_t *addr) UDP_AddrToString (netadr_t *addr)
{ {
static dstring_t *buffer; //FIXME this is used very badly (strcpy)
return va (0, "%d.%d.%d.%d:%d", addr->ip[0],
if (!buffer) addr->ip[1], addr->ip[2], addr->ip[3],
buffer = dstring_new (); ntohs (addr->port));
dsprintf (buffer, "%d.%d.%d.%d:%d", addr->ip[0],
addr->ip[1], addr->ip[2], addr->ip[3],
ntohs (addr->port));
return buffer->str;
} }
int int
UDP_GetSocketAddr (int socket, netadr_t *na) UDP_GetSocketAddr (int socket, netadr_t *na)
{ {
qfZoneScoped (true);
unsigned int a; unsigned int a;
socklen_t addrlen = sizeof (AF_address_t); socklen_t addrlen = sizeof (AF_address_t);
AF_address_t addr; AF_address_t addr;

View file

@ -51,6 +51,7 @@ static struct {
int int
VCR_Init (void) VCR_Init (void)
{ {
qfZoneScoped (true);
net_drivers[0].Init = VCR_Init; net_drivers[0].Init = VCR_Init;
net_drivers[0].SearchForHosts = VCR_SearchForHosts; net_drivers[0].SearchForHosts = VCR_SearchForHosts;

View file

@ -188,6 +188,7 @@ WINS_GetLocalAddress (void)
int int
WINS_Init (void) WINS_Init (void)
{ {
qfZoneScoped (true);
int i; int i;
char buff[MAXHOSTNAMELEN]; char buff[MAXHOSTNAMELEN];
char *p; char *p;

View file

@ -37,6 +37,12 @@ Light_CreateLightingData (scene_t *scene)
void void
Light_DestroyLightingData (lightingdata_t *ldata) Light_DestroyLightingData (lightingdata_t *ldata)
{ {
if (ldata->sun_pvs) {
set_delete (ldata->sun_pvs);
}
if (ldata->pvs) {
set_delete (ldata->pvs);
}
free (ldata); free (ldata);
} }

View file

@ -70,6 +70,7 @@ Font_shutdown (void *data)
VISIBLE void VISIBLE void
Font_Init (void) Font_Init (void)
{ {
qfZoneScoped (true);
if (FT_Init_FreeType (&ft)) { if (FT_Init_FreeType (&ft)) {
Sys_Error ("Could not init FreeType library"); Sys_Error ("Could not init FreeType library");
} }

View file

@ -252,6 +252,7 @@ imui_state_getkey (const void *obj, void *data)
imui_ctx_t * imui_ctx_t *
IMUI_NewContext (canvas_system_t canvas_sys, const char *font, float fontsize) IMUI_NewContext (canvas_system_t canvas_sys, const char *font, float fontsize)
{ {
qfZoneScoped (true);
imui_ctx_t *ctx = malloc (sizeof (imui_ctx_t)); imui_ctx_t *ctx = malloc (sizeof (imui_ctx_t));
uint32_t canvas = Canvas_New (canvas_sys); uint32_t canvas = Canvas_New (canvas_sys);
*ctx = (imui_ctx_t) { *ctx = (imui_ctx_t) {

View file

@ -99,6 +99,7 @@ add_entity (uint32_t hent, uint32_t parent, ecs_registry_t *reg)
(hierref_t) { nullent, nullindex }, (hierref_t) { nullent, nullindex },
reg); reg);
h->ent[ref.index] = ECS_NewEntity (reg); h->ent[ref.index] = ECS_NewEntity (reg);
h->own[ref.index] = true;
Ent_SetComponent (h->ent[ref.index], h->href_comp, reg, &ref); Ent_SetComponent (h->ent[ref.index], h->href_comp, reg, &ref);
} }

View file

@ -92,6 +92,7 @@ Cbuf_ArgsAdd (cbuf_args_t *args, const char *arg)
VISIBLE cbuf_t * VISIBLE cbuf_t *
Cbuf_New (cbuf_interpreter_t *interp) Cbuf_New (cbuf_interpreter_t *interp)
{ {
qfZoneScoped (true);
cbuf_t *cbuf = calloc (1, sizeof (cbuf_t)); cbuf_t *cbuf = calloc (1, sizeof (cbuf_t));
cbuf->args = Cbuf_ArgsNew (); cbuf->args = Cbuf_ArgsNew ();
@ -115,6 +116,7 @@ Cbuf_Delete (cbuf_t *cbuf)
VISIBLE void VISIBLE void
Cbuf_DeleteStack (cbuf_t *stack) Cbuf_DeleteStack (cbuf_t *stack)
{ {
qfZoneScoped (true);
cbuf_t *next; cbuf_t *next;
for (; stack; stack = next) { for (; stack; stack = next) {
@ -175,6 +177,7 @@ Cbuf_AddText (cbuf_t *cbuf, const char *text)
VISIBLE void VISIBLE void
Cbuf_InsertText (cbuf_t *cbuf, const char *text) Cbuf_InsertText (cbuf_t *cbuf, const char *text)
{ {
qfZoneScoped (true);
if (cbuf->state == CBUF_STATE_JUNK) if (cbuf->state == CBUF_STATE_JUNK)
cbuf->state = CBUF_STATE_NORMAL; cbuf->state = CBUF_STATE_NORMAL;
cbuf->interpreter->insert (cbuf, text); cbuf->interpreter->insert (cbuf, text);

View file

@ -161,9 +161,11 @@ cexpr_init_symtab (exprtab_t *symtab, exprctx_t *ctx)
{ {
exprsym_t *sym; exprsym_t *sym;
symtab->tab = Hash_NewTable (61, expr_getkey, 0, 0, ctx->hashctx); if (!symtab->tab) {
for (sym = symtab->symbols; sym->name; sym++) { symtab->tab = Hash_NewTable (61, expr_getkey, 0, 0, ctx->hashctx);
Hash_Add (symtab->tab, sym); for (sym = symtab->symbols; sym->name; sym++) {
Hash_Add (symtab->tab, sym);
}
} }
} }

View file

@ -516,6 +516,7 @@ Cmd_Help_f (void)
static void static void
Cmd_Exec_f (void) Cmd_Exec_f (void)
{ {
qfZoneScoped (true);
char *f; char *f;
size_t mark; size_t mark;
@ -574,6 +575,7 @@ Cmd_Sleep_f (void)
VISIBLE void VISIBLE void
Cmd_StuffCmds (cbuf_t *cbuf) Cmd_StuffCmds (cbuf_t *cbuf)
{ {
qfZoneScoped (true);
int i, j; int i, j;
dstring_t *build; dstring_t *build;

View file

@ -71,7 +71,9 @@ llist_flush (llist_t *list)
for (node = list->start; node; node = next) { for (node = list->start; node; node = next) {
next = node->next; next = node->next;
list->freedata (node->data, list->userdata); if (list->freedata) {
list->freedata (node->data, list->userdata);
}
free (node); free (node);
} }
list->start = list->end = 0; list->start = list->end = 0;

View file

@ -259,6 +259,7 @@ PI_Shutdown (void *data)
VISIBLE void VISIBLE void
PI_Init (void) PI_Init (void)
{ {
qfZoneScoped (true);
Sys_RegisterShutdown (PI_Shutdown, 0); Sys_RegisterShutdown (PI_Shutdown, 0);
PI_InitCvars (); PI_InitCvars ();
@ -420,6 +421,7 @@ PI_UnloadPlugin (plugin_t *plugin)
VISIBLE void VISIBLE void
PI_RegisterPlugins (plugin_list_t *plugins) PI_RegisterPlugins (plugin_list_t *plugins)
{ {
qfZoneScoped (true);
while (plugins->name) while (plugins->name)
Hash_Add (registered_plugins, plugins++); Hash_Add (registered_plugins, plugins++);
} }

View file

@ -171,6 +171,7 @@ COM_AddParm (const char *parm)
void void
COM_ParseConfig (cbuf_t *cbuf) COM_ParseConfig (cbuf_t *cbuf)
{ {
qfZoneScoped (true);
// execute +set as early as possible // execute +set as early as possible
Cmd_StuffCmds (cbuf); Cmd_StuffCmds (cbuf);
Cbuf_Execute_Sets (cbuf); Cbuf_Execute_Sets (cbuf);

View file

@ -577,6 +577,7 @@ Qeof (QFile *file)
Qgetline Qgetline
Dynamic length version of Qgets. Do NOT free the buffer. Dynamic length version of Qgets. Do NOT free the buffer.
FIXME memory leak (on shutdown)
*/ */
VISIBLE const char * VISIBLE const char *
Qgetline (QFile *file) Qgetline (QFile *file)

View file

@ -625,6 +625,7 @@ Sys_Error (const char *error, ...)
VISIBLE void VISIBLE void
Sys_RegisterShutdown (void (*func) (void *), void *data) Sys_RegisterShutdown (void (*func) (void *), void *data)
{ {
qfZoneScoped (true);
shutdown_list_t *p; shutdown_list_t *p;
if (!func) if (!func)
return; return;
@ -1125,6 +1126,7 @@ hook_signals (void)
VISIBLE void VISIBLE void
Sys_Init (void) Sys_Init (void)
{ {
qfZoneScoped (true);
hook_signals (); hook_signals ();
Cvar_Init_Hash (); Cvar_Init_Hash ();

View file

@ -68,6 +68,13 @@ va_create_context (int buffers)
VISIBLE void VISIBLE void
va_destroy_context (va_ctx_t *ctx) va_destroy_context (va_ctx_t *ctx)
{ {
if (!ctx) {
ctx = default_va_ctx;
default_va_ctx = 0;
if (!ctx) {
return;
}
}
for (int i = 0; i < ctx->num_strings; i++) { for (int i = 0; i < ctx->num_strings; i++) {
dstring_delete (ctx->strings[i]); dstring_delete (ctx->strings[i]);
} }

View file

@ -195,8 +195,6 @@ glsl_R_Init (void)
void void
glsl_R_Shutdown (void) glsl_R_Shutdown (void)
{ {
Skin_Shutdown();
glsl_R_ShutdownParticles (); glsl_R_ShutdownParticles ();
glsl_Lightmap_Shutdown (); glsl_Lightmap_Shutdown ();
glsl_R_ShutdownBsp (); glsl_R_ShutdownBsp ();

View file

@ -38,6 +38,7 @@
VISIBLE draw_charbuffer_t * VISIBLE draw_charbuffer_t *
Draw_CreateBuffer (int width, int height) Draw_CreateBuffer (int width, int height)
{ {
qfZoneScoped (true);
size_t size = width * height; size_t size = width * height;
draw_charbuffer_t *buffer = malloc (sizeof (draw_charbuffer_t) + size); draw_charbuffer_t *buffer = malloc (sizeof (draw_charbuffer_t) + size);
buffer->width = width; buffer->width = width;

View file

@ -83,6 +83,7 @@ R_shutdown (void *data)
VISIBLE void VISIBLE void
R_LoadModule (vid_internal_t *vid_internal) R_LoadModule (vid_internal_t *vid_internal)
{ {
qfZoneScoped (true);
PI_RegisterPlugins (vidrend_plugin_list); PI_RegisterPlugins (vidrend_plugin_list);
Cvar_Register (&vidrend_plugin_cvar, 0, 0); Cvar_Register (&vidrend_plugin_cvar, 0, 0);
vidrendmodule = PI_LoadPlugin ("vid_render", vidrend_plugin); vidrendmodule = PI_LoadPlugin ("vid_render", vidrend_plugin);
@ -102,6 +103,7 @@ R_LoadModule (vid_internal_t *vid_internal)
VISIBLE void VISIBLE void
R_Init (void) R_Init (void)
{ {
qfZoneScoped (true);
r_funcs->R_Init (); r_funcs->R_Init ();
R_ClearEfrags (); //FIXME force link of r_efrag.o for qwaq R_ClearEfrags (); //FIXME force link of r_efrag.o for qwaq
Fog_Init (); Fog_Init ();

View file

@ -50,6 +50,7 @@
float float
R_IQMGetLerpedFrames (animation_t *animation, iqm_t *iqm) R_IQMGetLerpedFrames (animation_t *animation, iqm_t *iqm)
{ {
qfZoneScoped (true);
int frame = animation->frame; int frame = animation->frame;
float time, fullinterval; float time, fullinterval;
iqmanim *anim; iqmanim *anim;
@ -73,6 +74,7 @@ iqmframe_t *
R_IQMBlendFrames (const iqm_t *iqm, int frame1, int frame2, float blend, R_IQMBlendFrames (const iqm_t *iqm, int frame1, int frame2, float blend,
int extra) int extra)
{ {
qfZoneScoped (true);
iqmframe_t *frame; iqmframe_t *frame;
int i; int i;

View file

@ -161,7 +161,6 @@ vulkan_R_LoadSkys (const char *skyname)
static void static void
vulkan_R_NewScene (scene_t *scene) vulkan_R_NewScene (scene_t *scene)
{ {
qfZoneScoped (true);
Vulkan_NewScene (scene, vulkan_ctx); Vulkan_NewScene (scene, vulkan_ctx);
} }
@ -478,6 +477,7 @@ set_palette (void *data, const byte *palette)
static void static void
vulkan_vid_render_choose_visual (void *data) vulkan_vid_render_choose_visual (void *data)
{ {
qfZoneScoped (true);
Vulkan_CreateDevice (vulkan_ctx); Vulkan_CreateDevice (vulkan_ctx);
if (!vulkan_ctx->device) { if (!vulkan_ctx->device) {
Sys_Error ("Unable to create Vulkan device.%s", Sys_Error ("Unable to create Vulkan device.%s",
@ -497,6 +497,7 @@ vulkan_vid_render_choose_visual (void *data)
static void static void
vulkan_vid_render_create_context (void *data) vulkan_vid_render_create_context (void *data)
{ {
qfZoneScoped (true);
vulkan_ctx->create_window (vulkan_ctx); vulkan_ctx->create_window (vulkan_ctx);
vulkan_ctx->surface = vulkan_ctx->create_surface (vulkan_ctx); vulkan_ctx->surface = vulkan_ctx->create_surface (vulkan_ctx);
Sys_MaskPrintf (SYS_vulkan, "vk create context: surface:%#zx\n", Sys_MaskPrintf (SYS_vulkan, "vk create context: surface:%#zx\n",
@ -534,6 +535,7 @@ static vid_model_funcs_t model_funcs = {
static void static void
vulkan_vid_render_init (void) vulkan_vid_render_init (void)
{ {
qfZoneScoped (true);
if (!vr_data.vid->vid_internal->vulkan_context) { if (!vr_data.vid->vid_internal->vulkan_context) {
Sys_Error ("Sorry, Vulkan not supported by this program."); Sys_Error ("Sorry, Vulkan not supported by this program.");
} }
@ -591,6 +593,9 @@ vulkan_vid_render_shutdown (void)
df->vkDestroyCommandPool (dev, vulkan_ctx->cmdpool, 0); df->vkDestroyCommandPool (dev, vulkan_ctx->cmdpool, 0);
Vulkan_Shutdown_Common (vulkan_ctx); Vulkan_Shutdown_Common (vulkan_ctx);
vulkan_ctx->delete (vulkan_ctx);
vulkan_ctx = 0;
} }
vid_render_funcs_t vulkan_vid_render_funcs = { vid_render_funcs_t vulkan_vid_render_funcs = {

View file

@ -233,6 +233,7 @@ static exprsym_t capture_task_syms[] = {
void void
QFV_Capture_Init (vulkan_ctx_t *ctx) QFV_Capture_Init (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
QFV_Render_AddTasks (ctx, capture_task_syms); QFV_Render_AddTasks (ctx, capture_task_syms);
qfvPushDebug (ctx, "capture init"); qfvPushDebug (ctx, "capture init");

View file

@ -54,6 +54,7 @@ static int
find_queue_family (qfv_instance_t *instance, VkPhysicalDevice dev, find_queue_family (qfv_instance_t *instance, VkPhysicalDevice dev,
uint32_t flags) uint32_t flags)
{ {
qfZoneScoped (true);
qfv_instfuncs_t *funcs = instance->funcs; qfv_instfuncs_t *funcs = instance->funcs;
uint32_t numFamilies; uint32_t numFamilies;
VkQueueFamilyProperties *queueFamilies; VkQueueFamilyProperties *queueFamilies;
@ -115,6 +116,7 @@ device_extension_enabled (qfv_device_t *device, const char *ext)
qfv_device_t * qfv_device_t *
QFV_CreateDevice (vulkan_ctx_t *ctx, const char **extensions) QFV_CreateDevice (vulkan_ctx_t *ctx, const char **extensions)
{ {
qfZoneScoped (true);
uint32_t nlay = 1; // ensure alloca doesn't see 0 and terminated uint32_t nlay = 1; // ensure alloca doesn't see 0 and terminated
uint32_t next = count_strings (extensions) + 1; // ensure terminated uint32_t next = count_strings (extensions) + 1; // ensure terminated
const char **lay = alloca (nlay * sizeof (const char *)); const char **lay = alloca (nlay * sizeof (const char *));
@ -204,6 +206,7 @@ QFV_CreateDevice (vulkan_ctx_t *ctx, const char **extensions)
void void
QFV_DestroyDevice (qfv_device_t *device) QFV_DestroyDevice (qfv_device_t *device)
{ {
qfZoneScoped (true);
device->funcs->vkDestroyDevice (device->dev, 0); device->funcs->vkDestroyDevice (device->dev, 0);
del_strset (device->enabled_extensions); del_strset (device->enabled_extensions);
free (device); free (device);

View file

@ -60,6 +60,7 @@ static const char * const debugExtensions[] = {
static void static void
get_instance_layers_and_extensions (vulkan_ctx_t *ctx) get_instance_layers_and_extensions (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
uint32_t i; uint32_t i;
VkLayerProperties *layers; VkLayerProperties *layers;
VkExtensionProperties *extensions; VkExtensionProperties *extensions;
@ -158,6 +159,7 @@ debug_callback (VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
static void static void
setup_debug_callback (qfv_instance_t *instance) setup_debug_callback (qfv_instance_t *instance)
{ {
qfZoneScoped (true);
VkDebugUtilsMessengerEXT debug_handle; VkDebugUtilsMessengerEXT debug_handle;
VkDebugUtilsMessengerCreateInfoEXT createInfo = { VkDebugUtilsMessengerCreateInfoEXT createInfo = {
.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT, .sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT,
@ -204,6 +206,7 @@ QFV_CreateInstance (vulkan_ctx_t *ctx,
const char *appName, uint32_t appVersion, const char *appName, uint32_t appVersion,
const char **layers, const char **extensions) const char **layers, const char **extensions)
{ {
qfZoneScoped (true);
VkApplicationInfo appInfo = { VkApplicationInfo appInfo = {
.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO, .sType = VK_STRUCTURE_TYPE_APPLICATION_INFO,
.pApplicationName = appName, .pApplicationName = appName,
@ -324,6 +327,11 @@ QFV_DestroyInstance (qfv_instance_t *instance)
del_strset (instance->enabled_extensions); del_strset (instance->enabled_extensions);
free (instance->devices); free (instance->devices);
free (instance); free (instance);
free (instanceLayerProperties);
free (instanceLayers);
free (instanceExtensionProperties);
free (instanceExtensions);
} }
VkSampleCountFlagBits VkSampleCountFlagBits

View file

@ -157,6 +157,7 @@ static exprsym_t mousepick_task_syms[] = {
void void
QFV_MousePick_Init (vulkan_ctx_t *ctx) QFV_MousePick_Init (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
QFV_Render_AddTasks (ctx, mousepick_task_syms); QFV_Render_AddTasks (ctx, mousepick_task_syms);
qfvPushDebug (ctx, "mouse pick init"); qfvPushDebug (ctx, "mouse pick init");

View file

@ -560,6 +560,7 @@ static exprsym_t render_task_syms[] = {
void void
QFV_Render_Init (vulkan_ctx_t *ctx) QFV_Render_Init (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
qfv_renderctx_t *rctx = calloc (1, sizeof (*rctx)); qfv_renderctx_t *rctx = calloc (1, sizeof (*rctx));
ctx->render_context = rctx; ctx->render_context = rctx;
rctx->size_time = -1000*1000*1000; rctx->size_time = -1000*1000*1000;
@ -600,6 +601,21 @@ QFV_Render_Init (vulkan_ctx_t *ctx)
} }
} }
static void
tf_free_syms (void *_sym, void *data)
{
exprsym_t *sym = _sym;
for (exprfunc_t *f = sym->value; f->func; f++) {
for (int i = 0; i < f->num_params; i++) {
exprenum_t *e = f->param_types[i]->data;
if (e && e->symtab->tab) {
Hash_DelTable (e->symtab->tab);
e->symtab->tab = 0;
}
}
}
}
void void
QFV_Render_Shutdown (vulkan_ctx_t *ctx) QFV_Render_Shutdown (vulkan_ctx_t *ctx)
{ {
@ -662,6 +678,7 @@ QFV_Render_Shutdown (vulkan_ctx_t *ctx)
delete_memsuper (jinfo->memsuper); delete_memsuper (jinfo->memsuper);
} }
if (rctx->task_functions.tab) { if (rctx->task_functions.tab) {
Hash_ForEach (rctx->task_functions.tab, tf_free_syms, 0);
Hash_DelTable (rctx->task_functions.tab); Hash_DelTable (rctx->task_functions.tab);
} }
DARRAY_CLEAR (&rctx->external_attachments); DARRAY_CLEAR (&rctx->external_attachments);
@ -683,6 +700,7 @@ QFV_Render_Shutdown (vulkan_ctx_t *ctx)
void void
QFV_Render_AddTasks (vulkan_ctx_t *ctx, exprsym_t *task_syms) QFV_Render_AddTasks (vulkan_ctx_t *ctx, exprsym_t *task_syms)
{ {
qfZoneScoped (true);
__auto_type rctx = ctx->render_context; __auto_type rctx = ctx->render_context;
exprctx_t ectx = { .hashctx = &rctx->hashctx }; exprctx_t ectx = { .hashctx = &rctx->hashctx };
for (exprsym_t *sym = task_syms; sym->name; sym++) { for (exprsym_t *sym = task_syms; sym->name; sym++) {
@ -760,6 +778,7 @@ QFV_GetStep (const exprval_t *param, qfv_job_t *job)
qfv_dsmanager_t * qfv_dsmanager_t *
QFV_Render_DSManager (vulkan_ctx_t *ctx, const char *setName) QFV_Render_DSManager (vulkan_ctx_t *ctx, const char *setName)
{ {
qfZoneScoped (true);
auto job = ctx->render_context->job; auto job = ctx->render_context->job;
for (uint32_t i = 0; i < job->num_dsmanagers; i++) { for (uint32_t i = 0; i < job->num_dsmanagers; i++) {
auto ds = job->dsmanager[i]; auto ds = job->dsmanager[i];
@ -802,6 +821,7 @@ create_sampler (vulkan_ctx_t *ctx, qfv_samplercreateinfo_t *sampler)
VkSampler VkSampler
QFV_Render_Sampler (vulkan_ctx_t *ctx, const char *name) QFV_Render_Sampler (vulkan_ctx_t *ctx, const char *name)
{ {
qfZoneScoped (true);
auto si = ctx->render_context->samplerinfo; auto si = ctx->render_context->samplerinfo;
if (!si) { if (!si) {
return 0; return 0;

View file

@ -56,6 +56,7 @@
static qfv_output_t static qfv_output_t
get_output (vulkan_ctx_t *ctx, plitem_t *item) get_output (vulkan_ctx_t *ctx, plitem_t *item)
{ {
qfZoneScoped (true);
qfv_output_t output = {}; qfv_output_t output = {};
Vulkan_ConfigOutput (ctx, &output); Vulkan_ConfigOutput (ctx, &output);
@ -74,6 +75,7 @@ get_output (vulkan_ctx_t *ctx, plitem_t *item)
void void
QFV_LoadRenderInfo (vulkan_ctx_t *ctx, const char *name) QFV_LoadRenderInfo (vulkan_ctx_t *ctx, const char *name)
{ {
qfZoneScoped (true);
auto rctx = ctx->render_context; auto rctx = ctx->render_context;
auto item = Vulkan_GetConfig (ctx, name); auto item = Vulkan_GetConfig (ctx, name);
auto output = get_output (ctx, item); auto output = get_output (ctx, item);
@ -87,6 +89,7 @@ QFV_LoadRenderInfo (vulkan_ctx_t *ctx, const char *name)
void void
QFV_LoadSamplerInfo (vulkan_ctx_t *ctx, const char *name) QFV_LoadSamplerInfo (vulkan_ctx_t *ctx, const char *name)
{ {
qfZoneScoped (true);
auto rctx = ctx->render_context; auto rctx = ctx->render_context;
auto item = Vulkan_GetConfig (ctx, name); auto item = Vulkan_GetConfig (ctx, name);
rctx->samplerinfo = QFV_ParseSamplerInfo (ctx, item, rctx); rctx->samplerinfo = QFV_ParseSamplerInfo (ctx, item, rctx);
@ -1118,9 +1121,18 @@ create_step_process_objects (uint32_t index, const qfv_stepinfo_t *step,
// nothing to create at this stage // nothing to create at this stage
} }
static void
del_objstate (void *_state)
{
objstate_t *state = _state;
Hash_DelTable (state->symtab->tab);
free (state->symtab);
}
static void static void
create_objects (vulkan_ctx_t *ctx, objcount_t *counts) create_objects (vulkan_ctx_t *ctx, objcount_t *counts)
{ {
qfZoneScoped (true);
__auto_type rctx = ctx->render_context; __auto_type rctx = ctx->render_context;
__auto_type jinfo = rctx->jobinfo; __auto_type jinfo = rctx->jobinfo;
@ -1146,7 +1158,7 @@ create_objects (vulkan_ctx_t *ctx, objcount_t *counts)
uint32_t pl_counts[counts->num_renderpasses]; uint32_t pl_counts[counts->num_renderpasses];
exprctx_t ectx = { .hashctx = &ctx->script_context->hashctx }; exprctx_t ectx = { .hashctx = &ctx->script_context->hashctx };
objstate_t s = { __attribute__((cleanup (del_objstate))) objstate_t s = {
.ptr = { .ptr = {
.rpCreate = rpCreate, .rpCreate = rpCreate,
.attach = attach, .attach = attach,
@ -1229,6 +1241,7 @@ create_objects (vulkan_ctx_t *ctx, objcount_t *counts)
void void
QFV_BuildRender (vulkan_ctx_t *ctx) QFV_BuildRender (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
__auto_type rctx = ctx->render_context; __auto_type rctx = ctx->render_context;
objcount_t counts = {}; objcount_t counts = {};

View file

@ -64,6 +64,7 @@ scrap_t *
QFV_CreateScrap (qfv_device_t *device, const char *name, int size, QFV_CreateScrap (qfv_device_t *device, const char *name, int size,
QFFormat format, qfv_stagebuf_t *stage) QFFormat format, qfv_stagebuf_t *stage)
{ {
qfZoneScoped (true);
qfv_devfuncs_t *dfunc = device->funcs; qfv_devfuncs_t *dfunc = device->funcs;
int bpp = 0; int bpp = 0;
VkFormat fmt = VK_FORMAT_UNDEFINED; VkFormat fmt = VK_FORMAT_UNDEFINED;

View file

@ -12,6 +12,7 @@
-(void) writeForward; -(void) writeForward;
-(void) writeTable; -(void) writeTable;
-(void) writeSymtabInit; -(void) writeSymtabInit;
-(void) writeSymtabShutdown;
-(void) writeSymtabEntry; -(void) writeSymtabEntry;
@end @end

View file

@ -191,10 +191,18 @@ skip_value(string name)
-(void) writeSymtabInit -(void) writeSymtabInit
{ {
fprintf (output_file, "\tqfMessageL (\"%s_symtab\");\n", [self name]);
fprintf (output_file, "\tcexpr_init_symtab (&%s_symtab, context);\n", fprintf (output_file, "\tcexpr_init_symtab (&%s_symtab, context);\n",
[self name]); [self name]);
} }
-(void) writeSymtabShutdown
{
fprintf (output_file, "\tHash_DelTable (%s_symtab.tab);\n",
[self name]);
fprintf (output_file, "\t%s_symtab.tab = 0;\n", [self name]);
}
-(void) writeSymtabEntry -(void) writeSymtabEntry
{ {
fprintf (output_file, "\tHash_Add (enum_symtab, &%s_enum);\n", fprintf (output_file, "\tHash_Add (enum_symtab, &%s_enum);\n",

View file

@ -14,6 +14,7 @@
-(void) writeForward; -(void) writeForward;
-(void) writeTable; -(void) writeTable;
-(void) writeSymtabInit; -(void) writeSymtabInit;
-(void) writeSymtabShutdown;
-(void) writeSymtabEntry; -(void) writeSymtabEntry;
@end @end

View file

@ -72,6 +72,10 @@
{ {
} }
-(void) writeSymtabShutdown
{
}
-(void) writeSymtabEntry -(void) writeSymtabEntry
{ {
} }

View file

@ -254,6 +254,7 @@ main(int argc, string *argv)
fprintf (output_file, "static void\n"); fprintf (output_file, "static void\n");
fprintf (output_file, "vkgen_init_symtabs (exprctx_t *context)\n"); fprintf (output_file, "vkgen_init_symtabs (exprctx_t *context)\n");
fprintf (output_file, "{\n"); fprintf (output_file, "{\n");
fprintf (output_file, "\tqfZoneScoped (true);\n");
for (int i = [output_types count]; i-- > 0; ) { for (int i = [output_types count]; i-- > 0; ) {
id obj = [output_types objectAtIndex:i]; id obj = [output_types objectAtIndex:i];
if ([obj name] == "VkStructureType") { if ([obj name] == "VkStructureType") {
@ -265,6 +266,22 @@ main(int argc, string *argv)
arp_end (); arp_end ();
} }
fprintf (output_file, "}\n"); fprintf (output_file, "}\n");
fprintf (output_file, "static void\n");
fprintf (output_file, "vkgen_shutdown_symtabs (exprctx_t *context)\n");
fprintf (output_file, "{\n");
fprintf (output_file, "\tqfZoneScoped (true);\n");
for (int i = [output_types count]; i-- > 0; ) {
id obj = [output_types objectAtIndex:i];
if ([obj name] == "VkStructureType") {
continue;
}
arp_start ();
[obj writeSymtabShutdown];
arp_end ();
}
fprintf (output_file, "}\n");
Qclose (output_file); Qclose (output_file);
Qclose (header_file); Qclose (header_file);
Hash_DelTable (available_types); Hash_DelTable (available_types);

View file

@ -517,10 +517,24 @@ write_table (Struct *self, PLItem *field_dict, Array *field_defs,
return; return;
} }
fprintf (output_file, "\tqfMessageL (\"%s_symtab\");\n", [self outname]);
fprintf (output_file, "\tcexpr_init_symtab (&%s_symtab, context);\n", fprintf (output_file, "\tcexpr_init_symtab (&%s_symtab, context);\n",
[self outname]); [self outname]);
} }
-(void) writeSymtabShutdown
{
PLItem *field_dict = [parse getObjectForKey:[self outname]];
if ([parse string] == "skip") {
return;
}
fprintf (output_file, "\tHash_DelTable (%s_symtab.tab);\n",
[self outname]);
fprintf (output_file, "\t%s_symtab.tab = 0;\n", [self outname]);
}
-(void) writeSymtabEntry -(void) writeSymtabEntry
{ {
if (!write_symtab || [parse string] == "skip") { if (!write_symtab || [parse string] == "skip") {

View file

@ -1172,6 +1172,7 @@ vulkan_frame_count_f (void *data, const cvar_t *cvar)
void void
Vulkan_Init_Cvars (void) Vulkan_Init_Cvars (void)
{ {
qfZoneScoped (true);
int num_syms = 0; int num_syms = 0;
for (exprsym_t *sym = VkDebugUtilsMessageSeverityFlagBitsEXT_symbols; for (exprsym_t *sym = VkDebugUtilsMessageSeverityFlagBitsEXT_symbols;
sym->name; sym++, num_syms++) { sym->name; sym++, num_syms++) {
@ -1216,6 +1217,7 @@ static exprtab_t builtin_configs = { .symbols = builtin_plist_syms };
static void static void
build_configs (scriptctx_t *sctx) build_configs (scriptctx_t *sctx)
{ {
qfZoneScoped (true);
int num_plists = 0; int num_plists = 0;
for (exprsym_t *sym = builtin_plist_syms; sym->name; sym++) { for (exprsym_t *sym = builtin_plist_syms; sym->name; sym++) {
num_plists++; num_plists++;
@ -1246,11 +1248,13 @@ delete_configs (void)
num_plists++; num_plists++;
} }
free (builtin_plists); free (builtin_plists);
Hash_DelTable (builtin_configs.tab);
} }
plitem_t * plitem_t *
Vulkan_GetConfig (vulkan_ctx_t *ctx, const char *name) Vulkan_GetConfig (vulkan_ctx_t *ctx, const char *name)
{ {
qfZoneScoped (true);
scriptctx_t *sctx = ctx->script_context; scriptctx_t *sctx = ctx->script_context;
if (!builtin_configs.tab) { if (!builtin_configs.tab) {
build_configs (sctx); build_configs (sctx);
@ -1283,6 +1287,7 @@ Vulkan_GetConfig (vulkan_ctx_t *ctx, const char *name)
void Vulkan_Script_Init (vulkan_ctx_t *ctx) void Vulkan_Script_Init (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
scriptctx_t *sctx = calloc (1, sizeof (scriptctx_t)); scriptctx_t *sctx = calloc (1, sizeof (scriptctx_t));
sctx->vctx = ctx; sctx->vctx = ctx;
ctx->script_context = sctx; ctx->script_context = sctx;
@ -1295,7 +1300,6 @@ void Vulkan_Script_Init (vulkan_ctx_t *ctx)
//create a symtabs shutdown (for thread safety), but this works for now. //create a symtabs shutdown (for thread safety), but this works for now.
ectx.hashctx = 0;//&sctx->hashctx; ectx.hashctx = 0;//&sctx->hashctx;
vkgen_init_symtabs (&ectx); vkgen_init_symtabs (&ectx);
cexpr_init_symtab (&qfv_output_t_symtab, &ectx);
cexpr_init_symtab (&qfv_renderframeset_t_symtab, &ectx); cexpr_init_symtab (&qfv_renderframeset_t_symtab, &ectx);
cexpr_init_symtab (&data_array_symtab, &ectx); cexpr_init_symtab (&data_array_symtab, &ectx);
@ -1328,9 +1332,23 @@ void Vulkan_Script_Shutdown (vulkan_ctx_t *ctx)
clear_table (&sctx->shaderModules); clear_table (&sctx->shaderModules);
clear_table (&sctx->descriptorPools); clear_table (&sctx->descriptorPools);
clear_table (&sctx->samplers); clear_table (&sctx->samplers);
clear_table (&sctx->images);
clear_table (&sctx->imageViews);
clear_table (&sctx->renderpasses);
delete_configs (); delete_configs ();
exprctx_t ectx = {};
vkgen_shutdown_symtabs (&ectx);
Hash_DelTable (qfv_renderframeset_t_symtab.tab);
Hash_DelTable (data_array_symtab.tab);
free (validation_symtab.symbols);
Hash_DelTable (enum_symtab);
Hash_DelTable (parser_table);
Hash_DelContext (sctx->hashctx); Hash_DelContext (sctx->hashctx);
free (sctx); free (sctx);
@ -1347,6 +1365,7 @@ QFV_CreateSymtab (plitem_t *dict, const char *properties,
const char **extra_items, exprsym_t *extra_syms, const char **extra_items, exprsym_t *extra_syms,
exprctx_t *ectx) exprctx_t *ectx)
{ {
qfZoneScoped (true);
plitem_t *props = PL_ObjectForKey (dict, properties); plitem_t *props = PL_ObjectForKey (dict, properties);
int num_keys = PL_D_NumKeys (props); int num_keys = PL_D_NumKeys (props);
int num_extra = 0; int num_extra = 0;
@ -1412,6 +1431,7 @@ QFV_DestroySymtab (exprtab_t *tab)
struct qfv_jobinfo_s * struct qfv_jobinfo_s *
QFV_ParseJobInfo (vulkan_ctx_t *ctx, plitem_t *item, qfv_renderctx_t *rctx) QFV_ParseJobInfo (vulkan_ctx_t *ctx, plitem_t *item, qfv_renderctx_t *rctx)
{ {
qfZoneScoped (true);
memsuper_t *memsuper = new_memsuper (); memsuper_t *memsuper = new_memsuper ();
qfv_jobinfo_t *ji = cmemalloc (memsuper, sizeof (qfv_jobinfo_t)); qfv_jobinfo_t *ji = cmemalloc (memsuper, sizeof (qfv_jobinfo_t));
*ji = (qfv_jobinfo_t) { .memsuper = memsuper }; *ji = (qfv_jobinfo_t) { .memsuper = memsuper };

View file

@ -333,6 +333,7 @@ static exprsym_t alias_task_syms[] = {
void void
Vulkan_Alias_Init (vulkan_ctx_t *ctx) Vulkan_Alias_Init (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
qfvPushDebug (ctx, "alias init"); qfvPushDebug (ctx, "alias init");
QFV_Render_AddTasks (ctx, alias_task_syms); QFV_Render_AddTasks (ctx, alias_task_syms);
@ -345,6 +346,7 @@ Vulkan_Alias_Init (vulkan_ctx_t *ctx)
void void
Vulkan_Alias_Setup (vulkan_ctx_t *ctx) Vulkan_Alias_Setup (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
auto actx = ctx->alias_context; auto actx = ctx->alias_context;
actx->sampler = QFV_Render_Sampler (ctx, "alias_sampler"); actx->sampler = QFV_Render_Sampler (ctx, "alias_sampler");
} }

View file

@ -85,6 +85,7 @@ typedef struct bsp_push_constants_s {
static void static void
add_texture (texture_t *tx, vulkan_ctx_t *ctx) add_texture (texture_t *tx, vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
bspctx_t *bctx = ctx->bsp_context; bspctx_t *bctx = ctx->bsp_context;
vulktex_t *tex = tx->render; vulktex_t *tex = tx->render;
@ -99,6 +100,7 @@ add_texture (texture_t *tx, vulkan_ctx_t *ctx)
static inline void static inline void
chain_surface (const bsp_face_t *face, bsp_pass_t *pass, const bspctx_t *bctx) chain_surface (const bsp_face_t *face, bsp_pass_t *pass, const bspctx_t *bctx)
{ {
qfZoneScoped (true);
int ent_frame = pass->ent_frame; int ent_frame = pass->ent_frame;
// if the texture has no alt animations, anim_alt holds the sama data // if the texture has no alt animations, anim_alt holds the sama data
// as anim_main // as anim_main
@ -113,6 +115,7 @@ chain_surface (const bsp_face_t *face, bsp_pass_t *pass, const bspctx_t *bctx)
static void static void
register_textures (mod_brush_t *brush, vulkan_ctx_t *ctx) register_textures (mod_brush_t *brush, vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
texture_t *tex; texture_t *tex;
for (unsigned i = 0; i < brush->numtextures; i++) { for (unsigned i = 0; i < brush->numtextures; i++) {
@ -126,6 +129,7 @@ register_textures (mod_brush_t *brush, vulkan_ctx_t *ctx)
static void static void
init_visstate (bspctx_t *bctx) init_visstate (bspctx_t *bctx)
{ {
qfZoneScoped (true);
mod_brush_t *brush = &r_refdef.worldmodel->brush; mod_brush_t *brush = &r_refdef.worldmodel->brush;
int count = brush->numnodes + brush->modleafs int count = brush->numnodes + brush->modleafs
+ brush->numsurfaces; + brush->numsurfaces;
@ -166,6 +170,7 @@ clear_pass_face_queues (bsp_pass_t *pass, const bspctx_t *bctx)
static void static void
shutdown_pass_draw_queues (bsp_pass_t *pass) shutdown_pass_draw_queues (bsp_pass_t *pass)
{ {
EntQueue_Delete (pass->entqueue);
for (int i = 0; i < pass->num_queues; i++) { for (int i = 0; i < pass->num_queues; i++) {
DARRAY_CLEAR (&pass->draw_queues[i]); DARRAY_CLEAR (&pass->draw_queues[i]);
} }
@ -203,6 +208,7 @@ setup_pass_draw_queues (bsp_pass_t *pass)
static void static void
setup_pass_face_queues (bsp_pass_t *pass, int num_tex, bspctx_t *bctx) setup_pass_face_queues (bsp_pass_t *pass, int num_tex, bspctx_t *bctx)
{ {
qfZoneScoped (true);
pass->face_queue = malloc (sizeof (bsp_instfaceset_t[num_tex])); pass->face_queue = malloc (sizeof (bsp_instfaceset_t[num_tex]));
for (int i = 0; i < num_tex; i++) { for (int i = 0; i < num_tex; i++) {
pass->face_queue[i] = (bsp_instfaceset_t) DARRAY_STATIC_INIT (128); pass->face_queue[i] = (bsp_instfaceset_t) DARRAY_STATIC_INIT (128);
@ -212,6 +218,7 @@ setup_pass_face_queues (bsp_pass_t *pass, int num_tex, bspctx_t *bctx)
static void static void
clear_textures (vulkan_ctx_t *ctx) clear_textures (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
bspctx_t *bctx = ctx->bsp_context; bspctx_t *bctx = ctx->bsp_context;
clear_pass_face_queues (&bctx->main_pass, bctx); clear_pass_face_queues (&bctx->main_pass, bctx);
@ -224,6 +231,7 @@ clear_textures (vulkan_ctx_t *ctx)
void void
Vulkan_RegisterTextures (model_t **models, int num_models, vulkan_ctx_t *ctx) Vulkan_RegisterTextures (model_t **models, int num_models, vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
clear_textures (ctx); clear_textures (ctx);
add_texture (r_notexture_mip, ctx); add_texture (r_notexture_mip, ctx);
{ {
@ -424,6 +432,7 @@ build_surf_displist (const faceref_t *faceref, buildctx_t *build)
void void
Vulkan_BuildDisplayLists (model_t **models, int num_models, vulkan_ctx_t *ctx) Vulkan_BuildDisplayLists (model_t **models, int num_models, vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
qfv_device_t *device = ctx->device; qfv_device_t *device = ctx->device;
qfv_devfuncs_t *dfunc = device->funcs; qfv_devfuncs_t *dfunc = device->funcs;
bspctx_t *bctx = ctx->bsp_context; bspctx_t *bctx = ctx->bsp_context;
@ -649,6 +658,7 @@ Vulkan_BuildDisplayLists (model_t **models, int num_models, vulkan_ctx_t *ctx)
static int static int
R_DrawBrushModel (entity_t ent, bsp_pass_t *pass, vulkan_ctx_t *ctx) R_DrawBrushModel (entity_t ent, bsp_pass_t *pass, vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
renderer_t *renderer = Ent_GetComponent (ent.id, ent.base + scene_renderer, ent.reg); renderer_t *renderer = Ent_GetComponent (ent.id, ent.base + scene_renderer, ent.reg);
model_t *model = renderer->model; model_t *model = renderer->model;
bspctx_t *bctx = ctx->bsp_context; bspctx_t *bctx = ctx->bsp_context;
@ -678,6 +688,7 @@ R_DrawBrushModel (entity_t ent, bsp_pass_t *pass, vulkan_ctx_t *ctx)
static inline void static inline void
visit_leaf (bsp_pass_t *pass, mleaf_t *leaf) visit_leaf (bsp_pass_t *pass, mleaf_t *leaf)
{ {
qfZoneScoped (true);
// since this leaf will be rendered, any entities in the leaf also need // since this leaf will be rendered, any entities in the leaf also need
// to be rendered (the bsp tree doubles as an entity cull structure) // to be rendered (the bsp tree doubles as an entity cull structure)
for (auto efrag = leaf->efrags; efrag; efrag = efrag->leafnext) { for (auto efrag = leaf->efrags; efrag; efrag = efrag->leafnext) {
@ -698,6 +709,7 @@ get_side (const bsp_pass_t *pass, const mnode_t *node)
static inline void static inline void
visit_node_bfcull (bsp_pass_t *pass, const mnode_t *node, int side) visit_node_bfcull (bsp_pass_t *pass, const mnode_t *node, int side)
{ {
qfZoneScoped (true);
bspctx_t *bctx = pass->bsp_context; bspctx_t *bctx = pass->bsp_context;
int c; int c;
@ -728,6 +740,7 @@ visit_node_bfcull (bsp_pass_t *pass, const mnode_t *node, int side)
static inline void static inline void
visit_node_no_bfcull (bsp_pass_t *pass, const mnode_t *node, int side) visit_node_no_bfcull (bsp_pass_t *pass, const mnode_t *node, int side)
{ {
qfZoneScoped (true);
bspctx_t *bctx = pass->bsp_context; bspctx_t *bctx = pass->bsp_context;
int c; int c;
@ -760,6 +773,7 @@ static void
R_VisitWorldNodes (bsp_pass_t *pass, vulkan_ctx_t *ctx, R_VisitWorldNodes (bsp_pass_t *pass, vulkan_ctx_t *ctx,
void (*visit_node) (bsp_pass_t *, const mnode_t *, int)) void (*visit_node) (bsp_pass_t *, const mnode_t *, int))
{ {
qfZoneScoped (true);
const mod_brush_t *brush = pass->brush; const mod_brush_t *brush = pass->brush;
typedef struct { typedef struct {
int node_id; int node_id;
@ -873,6 +887,7 @@ push_shadowconst (uint32_t matrix_base, VkPipelineLayout layout,
static void static void
clear_queues (bspctx_t *bctx, bsp_pass_t *pass) clear_queues (bspctx_t *bctx, bsp_pass_t *pass)
{ {
qfZoneScoped (true);
for (size_t i = 0; i < bctx->registered_textures.size; i++) { for (size_t i = 0; i < bctx->registered_textures.size; i++) {
DARRAY_RESIZE (&pass->face_queue[i], 0); DARRAY_RESIZE (&pass->face_queue[i], 0);
} }
@ -889,6 +904,7 @@ clear_queues (bspctx_t *bctx, bsp_pass_t *pass)
static void static void
queue_faces (bsp_pass_t *pass, const bspctx_t *bctx, bspframe_t *bframe) queue_faces (bsp_pass_t *pass, const bspctx_t *bctx, bspframe_t *bframe)
{ {
qfZoneScoped (true);
uint32_t base = bframe->index_count; uint32_t base = bframe->index_count;
pass->indices = bframe->index_data + bframe->index_count; pass->indices = bframe->index_data + bframe->index_count;
for (size_t i = 0; i < bctx->registered_textures.size; i++) { for (size_t i = 0; i < bctx->registered_textures.size; i++) {
@ -971,6 +987,7 @@ draw_queue (bsp_pass_t *pass, QFV_BspQueue queue, VkPipelineLayout layout,
static void static void
bsp_flush (vulkan_ctx_t *ctx) bsp_flush (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
qfv_device_t *device = ctx->device; qfv_device_t *device = ctx->device;
qfv_devfuncs_t *dfunc = device->funcs; qfv_devfuncs_t *dfunc = device->funcs;
bspctx_t *bctx = ctx->bsp_context; bspctx_t *bctx = ctx->bsp_context;
@ -1004,6 +1021,7 @@ bsp_flush (vulkan_ctx_t *ctx)
static void static void
create_default_skys (vulkan_ctx_t *ctx) create_default_skys (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
qfv_device_t *device = ctx->device; qfv_device_t *device = ctx->device;
qfv_devfuncs_t *dfunc = device->funcs; qfv_devfuncs_t *dfunc = device->funcs;
bspctx_t *bctx = ctx->bsp_context; bspctx_t *bctx = ctx->bsp_context;
@ -1111,6 +1129,7 @@ create_default_skys (vulkan_ctx_t *ctx)
static void static void
create_notexture (vulkan_ctx_t *ctx) create_notexture (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
const char *missing = "Missing"; const char *missing = "Missing";
byte data[2][64 * 64 * 4]; // 2 * 64x64 rgba (8x8 chars) byte data[2][64 * 64 * 4]; // 2 * 64x64 rgba (8x8 chars)
tex_t tex[2] = { tex_t tex[2] = {
@ -1176,7 +1195,7 @@ create_notexture (vulkan_ctx_t *ctx)
static void static void
bsp_reset_queues (const exprval_t **params, exprval_t *result, exprctx_t *ectx) bsp_reset_queues (const exprval_t **params, exprval_t *result, exprctx_t *ectx)
{ {
qfZoneNamed (zone, true); qfZoneScoped (true);
auto taskctx = (qfv_taskctx_t *) ectx; auto taskctx = (qfv_taskctx_t *) ectx;
auto ctx = taskctx->ctx; auto ctx = taskctx->ctx;
auto bctx = ctx->bsp_context; auto bctx = ctx->bsp_context;
@ -1191,7 +1210,7 @@ bsp_reset_queues (const exprval_t **params, exprval_t *result, exprctx_t *ectx)
static void static void
bsp_draw_queue (const exprval_t **params, exprval_t *result, exprctx_t *ectx) bsp_draw_queue (const exprval_t **params, exprval_t *result, exprctx_t *ectx)
{ {
qfZoneNamed (zone, true); qfZoneScoped (true);
auto taskctx = (qfv_taskctx_t *) ectx; auto taskctx = (qfv_taskctx_t *) ectx;
auto ctx = taskctx->ctx; auto ctx = taskctx->ctx;
auto device = ctx->device; auto device = ctx->device;
@ -1260,7 +1279,7 @@ bsp_draw_queue (const exprval_t **params, exprval_t *result, exprctx_t *ectx)
static void static void
bsp_visit_world (const exprval_t **params, exprval_t *result, exprctx_t *ectx) bsp_visit_world (const exprval_t **params, exprval_t *result, exprctx_t *ectx)
{ {
qfZoneNamed (zone, true); qfZoneScoped (true);
auto taskctx = (qfv_taskctx_t *) ectx; auto taskctx = (qfv_taskctx_t *) ectx;
auto ctx = taskctx->ctx; auto ctx = taskctx->ctx;
auto bctx = ctx->bsp_context; auto bctx = ctx->bsp_context;
@ -1409,6 +1428,7 @@ static exprsym_t bsp_task_syms[] = {
void void
Vulkan_Bsp_Init (vulkan_ctx_t *ctx) Vulkan_Bsp_Init (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
QFV_Render_AddTasks (ctx, bsp_task_syms); QFV_Render_AddTasks (ctx, bsp_task_syms);
bspctx_t *bctx = calloc (1, sizeof (bspctx_t)); bspctx_t *bctx = calloc (1, sizeof (bspctx_t));
@ -1424,6 +1444,7 @@ Vulkan_Bsp_Init (vulkan_ctx_t *ctx)
void void
Vulkan_Bsp_Setup (vulkan_ctx_t *ctx) Vulkan_Bsp_Setup (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
qfvPushDebug (ctx, "bsp init"); qfvPushDebug (ctx, "bsp init");
auto device = ctx->device; auto device = ctx->device;
@ -1504,20 +1525,23 @@ Vulkan_Bsp_Shutdown (struct vulkan_ctx_s *ctx)
qfv_devfuncs_t *dfunc = device->funcs; qfv_devfuncs_t *dfunc = device->funcs;
bspctx_t *bctx = ctx->bsp_context; bspctx_t *bctx = ctx->bsp_context;
bctx->main_pass.entqueue = 0; // owned by r_ent_queue
shutdown_pass_draw_queues (&bctx->main_pass); shutdown_pass_draw_queues (&bctx->main_pass);
shutdown_pass_draw_queues (&bctx->shadow_pass); shutdown_pass_draw_queues (&bctx->shadow_pass);
shutdown_pass_draw_queues (&bctx->debug_pass); shutdown_pass_draw_queues (&bctx->debug_pass);
clear_textures (ctx);
DARRAY_CLEAR (&bctx->registered_textures); DARRAY_CLEAR (&bctx->registered_textures);
free (bctx->faces); free (bctx->faces);
free (bctx->poly_indices);
free (bctx->models); free (bctx->models);
shutdown_pass_instances (&bctx->main_pass, bctx); shutdown_pass_instances (&bctx->main_pass, bctx);
shutdown_pass_instances (&bctx->shadow_pass, bctx); shutdown_pass_instances (&bctx->shadow_pass, bctx);
shutdown_pass_instances (&bctx->debug_pass, bctx); shutdown_pass_instances (&bctx->debug_pass, bctx);
DARRAY_CLEAR (&bctx->frames); free (bctx->frames.a);
QFV_DestroyStagingBuffer (bctx->light_stage); QFV_DestroyStagingBuffer (bctx->light_stage);
QFV_DestroyScrap (bctx->light_scrap); QFV_DestroyScrap (bctx->light_scrap);
@ -1546,6 +1570,7 @@ Vulkan_Bsp_Shutdown (struct vulkan_ctx_s *ctx)
dfunc->vkDestroyImage (device->dev, bctx->default_skybox->image, 0); dfunc->vkDestroyImage (device->dev, bctx->default_skybox->image, 0);
dfunc->vkFreeMemory (device->dev, bctx->default_skybox->memory, 0); dfunc->vkFreeMemory (device->dev, bctx->default_skybox->memory, 0);
free (bctx->default_skybox); free (bctx->default_skybox);
free (bctx);
} }
void void

View file

@ -110,6 +110,7 @@ static exprsym_t compose_task_syms[] = {
void void
Vulkan_Compose_Init (vulkan_ctx_t *ctx) Vulkan_Compose_Init (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
QFV_Render_AddTasks (ctx, compose_task_syms); QFV_Render_AddTasks (ctx, compose_task_syms);
composectx_t *cctx = calloc (1, sizeof (composectx_t)); composectx_t *cctx = calloc (1, sizeof (composectx_t));
@ -119,6 +120,7 @@ Vulkan_Compose_Init (vulkan_ctx_t *ctx)
void void
Vulkan_Compose_Setup (vulkan_ctx_t *ctx) Vulkan_Compose_Setup (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
qfvPushDebug (ctx, "compose init"); qfvPushDebug (ctx, "compose init");
auto device = ctx->device; auto device = ctx->device;

View file

@ -473,6 +473,7 @@ pic_free (drawctx_t *dctx, qpic_t *pic)
static cachepic_t * static cachepic_t *
new_cachepic (drawctx_t *dctx, const char *name, qpic_t *pic) new_cachepic (drawctx_t *dctx, const char *name, qpic_t *pic)
{ {
qfZoneScoped (true);
cachepic_t *cp; cachepic_t *cp;
size_t size = strlen (name) + 1; size_t size = strlen (name) + 1;
@ -685,6 +686,7 @@ Vulkan_Draw_PicFromWad (const char *name, vulkan_ctx_t *ctx)
static qpic_t * static qpic_t *
load_lmp (const char *path, vulkan_ctx_t *ctx) load_lmp (const char *path, vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
qpic_t *p; qpic_t *p;
if (strlen (path) < 4 || strcmp (path + strlen (path) - 4, ".lmp") if (strlen (path) < 4 || strcmp (path + strlen (path) - 4, ".lmp")
|| !(p = (qpic_t *) QFS_LoadFile (QFS_FOpenFile (path), 0))) { || !(p = (qpic_t *) QFS_LoadFile (QFS_FOpenFile (path), 0))) {
@ -797,6 +799,7 @@ load_lmp (const char *path, vulkan_ctx_t *ctx)
qpic_t * qpic_t *
Vulkan_Draw_CachePic (const char *path, bool alpha, vulkan_ctx_t *ctx) Vulkan_Draw_CachePic (const char *path, bool alpha, vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
cachepic_t *cpic; cachepic_t *cpic;
drawctx_t *dctx = ctx->draw_context; drawctx_t *dctx = ctx->draw_context;
@ -824,23 +827,36 @@ Vulkan_Draw_Shutdown (vulkan_ctx_t *ctx)
QFV_DestroyResource (device, &dctx->draw_resource[0]); QFV_DestroyResource (device, &dctx->draw_resource[0]);
QFV_DestroyResource (device, &dctx->draw_resource[1]); QFV_DestroyResource (device, &dctx->draw_resource[1]);
free (dctx->draw_resource);
for (size_t i = 0; i < dctx->fonts.size; i++) { for (size_t i = 0; i < dctx->fonts.size; i++) {
if (dctx->fonts.a[i].resource) { if (dctx->fonts.a[i].resource) {
QFV_DestroyResource (device, &dctx->fonts.a[i].resource->resource); QFV_DestroyResource (device, &dctx->fonts.a[i].resource->resource);
free (dctx->fonts.a[i].resource); free (dctx->fonts.a[i].resource);
} }
} }
DARRAY_CLEAR (&dctx->fonts);
for (size_t i = 0; i < dctx->frames.size; i++) {
auto dframe = &dctx->frames.a[i];
DARRAY_CLEAR (&dframe->quad_batch);
DARRAY_CLEAR (&dframe->clip_range);
}
free (dctx->frames.a);
Hash_DelTable (dctx->pic_cache); Hash_DelTable (dctx->pic_cache);
delete_memsuper (dctx->pic_memsuper); delete_memsuper (dctx->pic_memsuper);
delete_memsuper (dctx->string_memsuper); delete_memsuper (dctx->string_memsuper);
QFV_DestroyScrap (dctx->scrap); QFV_DestroyScrap (dctx->scrap);
QFV_DestroyStagingBuffer (dctx->stage); QFV_DestroyStagingBuffer (dctx->stage);
free (dctx->conchar_inds);
free (dctx->crosshair_inds);
free (dctx);
} }
static void static void
load_conchars (vulkan_ctx_t *ctx) load_conchars (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
drawctx_t *dctx = ctx->draw_context; drawctx_t *dctx = ctx->draw_context;
draw_chars = W_GetLumpName ("conchars"); draw_chars = W_GetLumpName ("conchars");
@ -869,6 +885,7 @@ load_conchars (vulkan_ctx_t *ctx)
static void static void
load_crosshairs (vulkan_ctx_t *ctx) load_crosshairs (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
drawctx_t *dctx = ctx->draw_context; drawctx_t *dctx = ctx->draw_context;
qpic_t *hairpic = Draw_CrosshairPic (); qpic_t *hairpic = Draw_CrosshairPic ();
dctx->crosshair = pic_data ("crosshair", hairpic->width, dctx->crosshair = pic_data ("crosshair", hairpic->width,
@ -890,6 +907,7 @@ load_crosshairs (vulkan_ctx_t *ctx)
static void static void
load_white_pic (vulkan_ctx_t *ctx) load_white_pic (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
drawctx_t *dctx = ctx->draw_context; drawctx_t *dctx = ctx->draw_context;
byte white_block = 0xfe; byte white_block = 0xfe;
@ -1109,6 +1127,7 @@ static exprsym_t draw_task_syms[] = {
void void
Vulkan_Draw_Init (vulkan_ctx_t *ctx) Vulkan_Draw_Init (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
QFV_Render_AddTasks (ctx, draw_task_syms); QFV_Render_AddTasks (ctx, draw_task_syms);
drawctx_t *dctx = calloc (1, sizeof (drawctx_t)); drawctx_t *dctx = calloc (1, sizeof (drawctx_t));
@ -1118,6 +1137,7 @@ Vulkan_Draw_Init (vulkan_ctx_t *ctx)
void void
Vulkan_Draw_Setup (vulkan_ctx_t *ctx) Vulkan_Draw_Setup (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
qfvPushDebug (ctx, "draw init"); qfvPushDebug (ctx, "draw init");
auto device = ctx->device; auto device = ctx->device;

View file

@ -308,6 +308,7 @@ static exprsym_t iqm_task_syms[] = {
void void
Vulkan_IQM_Init (vulkan_ctx_t *ctx) Vulkan_IQM_Init (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
qfvPushDebug (ctx, "iqm init"); qfvPushDebug (ctx, "iqm init");
QFV_Render_AddTasks (ctx, iqm_task_syms); QFV_Render_AddTasks (ctx, iqm_task_syms);
@ -326,6 +327,7 @@ Vulkan_IQM_Init (vulkan_ctx_t *ctx)
void void
Vulkan_IQM_Setup (vulkan_ctx_t *ctx) Vulkan_IQM_Setup (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
auto ictx = ctx->iqm_context; auto ictx = ctx->iqm_context;
ictx->sampler = QFV_Render_Sampler (ctx, "alias_sampler"); ictx->sampler = QFV_Render_Sampler (ctx, "alias_sampler");
} }

View file

@ -1464,6 +1464,7 @@ dynlight_size_listener (void *data, const cvar_t *cvar)
void void
Vulkan_Lighting_Init (vulkan_ctx_t *ctx) Vulkan_Lighting_Init (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
lightingctx_t *lctx = calloc (1, sizeof (lightingctx_t)); lightingctx_t *lctx = calloc (1, sizeof (lightingctx_t));
ctx->lighting_context = lctx; ctx->lighting_context = lctx;
@ -1491,6 +1492,7 @@ Vulkan_Lighting_Init (vulkan_ctx_t *ctx)
static void static void
make_default_map (int size, VkImage default_map, vulkan_ctx_t *ctx) make_default_map (int size, VkImage default_map, vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
auto device = ctx->device; auto device = ctx->device;
auto dfunc = device->funcs; auto dfunc = device->funcs;
@ -1586,6 +1588,7 @@ write_inds (qfv_packet_t *packet)
void void
Vulkan_Lighting_Setup (vulkan_ctx_t *ctx) Vulkan_Lighting_Setup (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
qfvPushDebug (ctx, "lighting init"); qfvPushDebug (ctx, "lighting init");
auto device = ctx->device; auto device = ctx->device;
@ -2001,6 +2004,8 @@ Vulkan_Lighting_Shutdown (vulkan_ctx_t *ctx)
qftCVkContextDestroy (lframe->qftVkCtx); qftCVkContextDestroy (lframe->qftVkCtx);
} }
free (lctx->frames.a[0].stage_targets); free (lctx->frames.a[0].stage_targets);
free (lctx->frames.a[0].id_radius);
free (lctx->frames.a[0].positions);
DARRAY_CLEAR (&lctx->light_mats); DARRAY_CLEAR (&lctx->light_mats);
DARRAY_CLEAR (&lctx->light_control); DARRAY_CLEAR (&lctx->light_control);
free (lctx->map_images); free (lctx->map_images);

View file

@ -182,6 +182,7 @@ static exprsym_t matrix_task_syms[] = {
void void
Vulkan_Matrix_Init (vulkan_ctx_t *ctx) Vulkan_Matrix_Init (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
QFV_Render_AddTasks (ctx, matrix_task_syms); QFV_Render_AddTasks (ctx, matrix_task_syms);
matrixctx_t *mctx = calloc (1, sizeof (matrixctx_t)); matrixctx_t *mctx = calloc (1, sizeof (matrixctx_t));
@ -191,6 +192,7 @@ Vulkan_Matrix_Init (vulkan_ctx_t *ctx)
void void
Vulkan_Matrix_Setup (vulkan_ctx_t *ctx) Vulkan_Matrix_Setup (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
qfvPushDebug (ctx, "matrix init"); qfvPushDebug (ctx, "matrix init");
qfv_device_t *device = ctx->device; qfv_device_t *device = ctx->device;
qfv_devfuncs_t *dfunc = device->funcs; qfv_devfuncs_t *dfunc = device->funcs;
@ -268,12 +270,16 @@ Vulkan_Matrix_Setup (vulkan_ctx_t *ctx)
void void
Vulkan_Matrix_Shutdown (vulkan_ctx_t *ctx) Vulkan_Matrix_Shutdown (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
qfvPushDebug (ctx, "matrix shutdown"); qfvPushDebug (ctx, "matrix shutdown");
auto device = ctx->device; auto device = ctx->device;
auto mctx = ctx->matrix_context; auto mctx = ctx->matrix_context;
QFV_DestroyStagingBuffer (mctx->stage); QFV_DestroyStagingBuffer (mctx->stage);
QFV_DestroyResource (device, mctx->resource); QFV_DestroyResource (device, mctx->resource);
free (mctx->resource);
free (mctx->frames.a);
free (mctx);
qfvPopDebug (ctx); qfvPopDebug (ctx);
} }

View file

@ -320,6 +320,7 @@ static exprsym_t output_task_syms[] = {
void void
Vulkan_Output_Init (vulkan_ctx_t *ctx) Vulkan_Output_Init (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
outputctx_t *octx = calloc (1, sizeof (outputctx_t)); outputctx_t *octx = calloc (1, sizeof (outputctx_t));
ctx->output_context = octx; ctx->output_context = octx;
@ -345,6 +346,7 @@ Vulkan_Output_Init (vulkan_ctx_t *ctx)
void void
Vulkan_Output_Setup (vulkan_ctx_t *ctx) Vulkan_Output_Setup (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
qfvPushDebug (ctx, "output init"); qfvPushDebug (ctx, "output init");
auto octx = ctx->output_context; auto octx = ctx->output_context;

View file

@ -65,6 +65,7 @@ Vulkan_Palette_Update (vulkan_ctx_t *ctx, const byte *palette)
void void
Vulkan_Palette_Init (vulkan_ctx_t *ctx, const byte *palette) Vulkan_Palette_Init (vulkan_ctx_t *ctx, const byte *palette)
{ {
qfZoneScoped (true);
qfvPushDebug (ctx, "palette init"); qfvPushDebug (ctx, "palette init");
palettectx_t *pctx = calloc (1, sizeof (palettectx_t)); palettectx_t *pctx = calloc (1, sizeof (palettectx_t));

View file

@ -427,6 +427,7 @@ static exprsym_t particles_task_syms[] = {
void void
Vulkan_Particles_Init (vulkan_ctx_t *ctx) Vulkan_Particles_Init (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
QFV_Render_AddTasks (ctx, particles_task_syms); QFV_Render_AddTasks (ctx, particles_task_syms);
particlectx_t *pctx = calloc (1, sizeof (particlectx_t)); particlectx_t *pctx = calloc (1, sizeof (particlectx_t));
@ -437,6 +438,7 @@ Vulkan_Particles_Init (vulkan_ctx_t *ctx)
void void
Vulkan_Particles_Setup (vulkan_ctx_t *ctx) Vulkan_Particles_Setup (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
qfvPushDebug (ctx, "particles init"); qfvPushDebug (ctx, "particles init");
auto device = ctx->device; auto device = ctx->device;

View file

@ -143,6 +143,7 @@ static exprsym_t debug_planes_task_syms[] = {
void void
Vulkan_Planes_Init (vulkan_ctx_t *ctx) Vulkan_Planes_Init (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
qfvPushDebug (ctx, "debug planes init"); qfvPushDebug (ctx, "debug planes init");
QFV_Render_AddTasks (ctx, debug_planes_task_syms); QFV_Render_AddTasks (ctx, debug_planes_task_syms);
@ -155,6 +156,7 @@ Vulkan_Planes_Init (vulkan_ctx_t *ctx)
void void
Vulkan_Planes_Setup (vulkan_ctx_t *ctx) Vulkan_Planes_Setup (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
auto device = ctx->device; auto device = ctx->device;
auto dfunc = device->funcs; auto dfunc = device->funcs;
auto pctx = ctx->planes_context; auto pctx = ctx->planes_context;
@ -247,6 +249,7 @@ Vulkan_Planes_Shutdown (vulkan_ctx_t *ctx)
auto pctx = ctx->planes_context; auto pctx = ctx->planes_context;
QFV_DestroyResource (device, pctx->resources); QFV_DestroyResource (device, pctx->resources);
free (pctx->resources);
free (pctx->frames.a); free (pctx->frames.a);
free (pctx); free (pctx);

View file

@ -174,6 +174,7 @@ static exprsym_t scene_task_syms[] = {
void void
Vulkan_Scene_Init (vulkan_ctx_t *ctx) Vulkan_Scene_Init (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
QFV_Render_AddTasks (ctx, scene_task_syms); QFV_Render_AddTasks (ctx, scene_task_syms);
scenectx_t *sctx = calloc (1, sizeof (scenectx_t) scenectx_t *sctx = calloc (1, sizeof (scenectx_t)
@ -186,6 +187,7 @@ Vulkan_Scene_Init (vulkan_ctx_t *ctx)
void void
Vulkan_Scene_Setup (vulkan_ctx_t *ctx) Vulkan_Scene_Setup (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
qfvPushDebug (ctx, "scene init"); qfvPushDebug (ctx, "scene init");
auto device = ctx->device; auto device = ctx->device;
@ -263,7 +265,6 @@ Vulkan_Scene_Shutdown (vulkan_ctx_t *ctx)
dfunc->vkUnmapMemory (device->dev, sctx->entities->memory); dfunc->vkUnmapMemory (device->dev, sctx->entities->memory);
QFV_DestroyResource (device, sctx->entities); QFV_DestroyResource (device, sctx->entities);
free (sctx->frames.a); free (sctx->frames.a);
free (sctx); free (sctx);
qfvPopDebug (ctx); qfvPopDebug (ctx);
@ -272,6 +273,7 @@ Vulkan_Scene_Shutdown (vulkan_ctx_t *ctx)
void void
Vulkan_NewScene (scene_t *scene, vulkan_ctx_t *ctx) Vulkan_NewScene (scene_t *scene, vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
auto sctx = ctx->scene_context; auto sctx = ctx->scene_context;
sctx->scene = scene; sctx->scene = scene;

View file

@ -214,6 +214,7 @@ static exprsym_t sprite_task_syms[] = {
void void
Vulkan_Sprite_Init (vulkan_ctx_t *ctx) Vulkan_Sprite_Init (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
qfvPushDebug (ctx, "sprite init"); qfvPushDebug (ctx, "sprite init");
QFV_Render_AddTasks (ctx, sprite_task_syms); QFV_Render_AddTasks (ctx, sprite_task_syms);
@ -226,6 +227,7 @@ Vulkan_Sprite_Init (vulkan_ctx_t *ctx)
void void
Vulkan_Sprite_Setup (vulkan_ctx_t *ctx) Vulkan_Sprite_Setup (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
auto sctx = ctx->sprite_context; auto sctx = ctx->sprite_context;
sctx->sampler = QFV_Render_Sampler (ctx, "sprite_sampler"); sctx->sampler = QFV_Render_Sampler (ctx, "sprite_sampler");
} }

View file

@ -509,6 +509,7 @@ static tex_t default_magenta_tex = {
void void
Vulkan_Texture_Init (vulkan_ctx_t *ctx) Vulkan_Texture_Init (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
texturectx_t *tctx = calloc (1, sizeof (texturectx_t)); texturectx_t *tctx = calloc (1, sizeof (texturectx_t));
ctx->texture_context = tctx; ctx->texture_context = tctx;
} }
@ -516,6 +517,7 @@ Vulkan_Texture_Init (vulkan_ctx_t *ctx)
void void
Vulkan_Texture_Setup (vulkan_ctx_t *ctx) Vulkan_Texture_Setup (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
qfvPushDebug (ctx, "texture init"); qfvPushDebug (ctx, "texture init");
auto tctx = ctx->texture_context; auto tctx = ctx->texture_context;
@ -548,6 +550,7 @@ Vulkan_Texture_Shutdown (vulkan_ctx_t *ctx)
Vulkan_UnloadTex (ctx, ctx->default_white); Vulkan_UnloadTex (ctx, ctx->default_white);
Vulkan_UnloadTex (ctx, ctx->default_magenta); Vulkan_UnloadTex (ctx, ctx->default_magenta);
Vulkan_UnloadTex (ctx, ctx->default_magenta_array); Vulkan_UnloadTex (ctx, ctx->default_magenta_array);
free (ctx->texture_context);
} }
static VkDescriptorImageInfo base_image_info = { static VkDescriptorImageInfo base_image_info = {

View file

@ -206,6 +206,7 @@ static exprsym_t translucent_task_syms[] = {
void void
Vulkan_Translucent_Init (vulkan_ctx_t *ctx) Vulkan_Translucent_Init (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
QFV_Render_AddTasks (ctx, translucent_task_syms); QFV_Render_AddTasks (ctx, translucent_task_syms);
translucentctx_t *tctx = calloc (1, sizeof (translucentctx_t)); translucentctx_t *tctx = calloc (1, sizeof (translucentctx_t));
@ -309,6 +310,7 @@ trans_create_resources (vulkan_ctx_t *ctx)
void void
Vulkan_Translucent_Setup (vulkan_ctx_t *ctx) Vulkan_Translucent_Setup (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
qfvPushDebug (ctx, "translucent init"); qfvPushDebug (ctx, "translucent init");
auto tctx = ctx->translucent_context; auto tctx = ctx->translucent_context;

View file

@ -106,6 +106,7 @@ static const char *device_extensions[] = {
void void
Vulkan_Init_Common (vulkan_ctx_t *ctx) Vulkan_Init_Common (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
Sys_MaskPrintf (SYS_vulkan, "Vulkan_Init_Common\n"); Sys_MaskPrintf (SYS_vulkan, "Vulkan_Init_Common\n");
Cvar_Register (&vulkan_frame_width_cvar, 0, 0); Cvar_Register (&vulkan_frame_width_cvar, 0, 0);
@ -116,7 +117,6 @@ Vulkan_Init_Common (vulkan_ctx_t *ctx)
Vulkan_Script_Init (ctx); Vulkan_Script_Init (ctx);
ctx->instance = QFV_CreateInstance (ctx, PACKAGE_STRING, 0x000702ff, 0, ctx->instance = QFV_CreateInstance (ctx, PACKAGE_STRING, 0x000702ff, 0,
instance_extensions);//FIXME version instance_extensions);//FIXME version
DARRAY_INIT (&ctx->renderPasses, 4);
} }
void void
@ -141,6 +141,7 @@ Vulkan_Shutdown_Common (vulkan_ctx_t *ctx)
void void
Vulkan_CreateDevice (vulkan_ctx_t *ctx) Vulkan_CreateDevice (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
ctx->device = QFV_CreateDevice (ctx, device_extensions); ctx->device = QFV_CreateDevice (ctx, device_extensions);
//FIXME msaa and deferred rendering... //FIXME msaa and deferred rendering...
@ -156,6 +157,7 @@ Vulkan_CreateDevice (vulkan_ctx_t *ctx)
void void
Vulkan_CreateStagingBuffers (vulkan_ctx_t *ctx) Vulkan_CreateStagingBuffers (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
// FIXME configurable? // FIXME configurable?
ctx->staging = QFV_CreateStagingBuffer (ctx->device, "vulkan_ctx", ctx->staging = QFV_CreateStagingBuffer (ctx->device, "vulkan_ctx",
32*1024*1024, ctx->cmdpool); 32*1024*1024, ctx->cmdpool);
@ -164,6 +166,7 @@ Vulkan_CreateStagingBuffers (vulkan_ctx_t *ctx)
void void
Vulkan_CreateSwapchain (vulkan_ctx_t *ctx) Vulkan_CreateSwapchain (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
VkSwapchainKHR old_swapchain = 0; VkSwapchainKHR old_swapchain = 0;
if (ctx->swapchain) { if (ctx->swapchain) {
//FIXME this shouldn't be here //FIXME this shouldn't be here
@ -184,6 +187,7 @@ Vulkan_CreateSwapchain (vulkan_ctx_t *ctx)
void void
Vulkan_BeginEntityLabel (vulkan_ctx_t *ctx, VkCommandBuffer cmd, entity_t ent) Vulkan_BeginEntityLabel (vulkan_ctx_t *ctx, VkCommandBuffer cmd, entity_t ent)
{ {
qfZoneScoped (true);
qfv_device_t *device = ctx->device; qfv_device_t *device = ctx->device;
uint32_t entgen = Ent_Generation (ent.id); uint32_t entgen = Ent_Generation (ent.id);
uint32_t entind = Ent_Index (ent.id); uint32_t entind = Ent_Index (ent.id);

View file

@ -65,7 +65,7 @@ libs_video_targets_libQFwin_la_DEPENDENCIES= $(win_libs)
# X11 software rendering # X11 software rendering
# #
x11_libs=libs/video/targets/libvid_common.la libs/video/targets/libvid_x11.la x11_libs=libs/video/targets/libvid_common.la libs/video/targets/libvid_x11.la
libs_video_targets_libQFx11_la_CFLAGS= @PREFER_NON_PIC@ $(X_CFLAGS) libs_video_targets_libQFx11_la_CFLAGS= $(AM_CFLAGS) @PREFER_NON_PIC@ $(X_CFLAGS)
libs_video_targets_libQFx11_la_SOURCES= libs/video/targets/vid_x11.c libs_video_targets_libQFx11_la_SOURCES= libs/video/targets/vid_x11.c
libs_video_targets_libQFx11_la_LDFLAGS= @STATIC@ libs_video_targets_libQFx11_la_LDFLAGS= @STATIC@
libs_video_targets_libQFx11_la_LIBADD= $(x11_libs) libs_video_targets_libQFx11_la_LIBADD= $(x11_libs)

View file

@ -272,6 +272,7 @@ X11_RestoreScreenSaver (void)
void void
X11_OpenDisplay (void) X11_OpenDisplay (void)
{ {
qfZoneScoped (true);
if (!x_disp) { if (!x_disp) {
x_disp = XOpenDisplay (NULL); x_disp = XOpenDisplay (NULL);
if (!x_disp) { if (!x_disp) {
@ -322,6 +323,7 @@ X11_CloseDisplay (void)
void void
X11_CreateNullCursor (void) X11_CreateNullCursor (void)
{ {
qfZoneScoped (true);
Pixmap cursormask; Pixmap cursormask;
XGCValues xgc = { }; XGCValues xgc = { };
GC gc; GC gc;
@ -372,6 +374,7 @@ X11_GetGamma (void)
void void
X11_SetVidMode (int width, int height) X11_SetVidMode (int width, int height)
{ {
qfZoneScoped (true);
const char *str = getenv ("MESA_GLX_FX"); const char *str = getenv ("MESA_GLX_FX");
if (vidmode_active) if (vidmode_active)
@ -504,6 +507,7 @@ X11_Init_Cvars (void)
void void
X11_CreateWindow (int width, int height) X11_CreateWindow (int width, int height)
{ {
qfZoneScoped (true);
char *resname; char *resname;
unsigned long mask; unsigned long mask;
XSetWindowAttributes attr; XSetWindowAttributes attr;

View file

@ -106,6 +106,7 @@ static cvar_t vid_fullscreen_cvar = {
void void
VID_GetWindowSize (int def_w, int def_h) VID_GetWindowSize (int def_w, int def_h)
{ {
qfZoneScoped (true);
int pnum; int pnum;
vid_width_cvar.default_value = nva ("%d", def_w); vid_width_cvar.default_value = nva ("%d", def_w);
@ -363,6 +364,7 @@ VID_shutdown (void *data)
VISIBLE void VISIBLE void
VID_Init (byte *palette, byte *colormap) VID_Init (byte *palette, byte *colormap)
{ {
qfZoneScoped (true);
Sys_RegisterShutdown (VID_shutdown, 0); Sys_RegisterShutdown (VID_shutdown, 0);
vid_system.init (palette, colormap); vid_system.init (palette, colormap);
} }

View file

@ -173,19 +173,27 @@ win_vulkan_create_surface (vulkan_ctx_t *ctx)
return surface; return surface;
} }
static void
delete_vulkan_context (vulkan_ctx_t *ctx)
{
va_destroy_context (ctx->va_ctx);
}
vulkan_ctx_t * vulkan_ctx_t *
Win_Vulkan_Context (vid_internal_t *vi) Win_Vulkan_Context (vid_internal_t *vi)
{ {
vulkan_ctx_t *ctx = calloc (1, sizeof (vulkan_ctx_t)); vulkan_ctx_t *ctx = calloc (1, sizeof (vulkan_ctx_t));
ctx->load_vulkan = load_vulkan_library; *ctx = (vulkan_ctx_t) {
ctx->unload_vulkan = unload_vulkan_library; .load_vulkan = load_vulkan_library,
ctx->get_presentation_support = win_vulkan_get_presentation_support; .unload_vulkan = unload_vulkan_library,
ctx->choose_visual = win_vulkan_choose_visual; .get_presentation_support = win_vulkan_get_presentation_support,
ctx->create_window = win_vulkan_create_window; .choose_visual = win_vulkan_choose_visual,
ctx->create_surface = win_vulkan_create_surface; .create_window = win_vulkan_create_window,
ctx->required_extensions = required_extensions; .create_surface = win_vulkan_create_surface,
ctx->va_ctx = va_create_context (VA_CTX_COUNT); .required_extensions = required_extensions,
ctx->twod_scale = 1; .va_ctx = va_create_context (VA_CTX_COUNT),
.twod_scale = 1,
};
vi->ctx = ctx; vi->ctx = ctx;
return ctx; return ctx;

View file

@ -82,6 +82,7 @@ X11_VID_Shutdown (void)
static void static void
X11_VID_SetPalette (byte *palette, byte *colormap) X11_VID_SetPalette (byte *palette, byte *colormap)
{ {
qfZoneScoped (true);
viddef.colormap8 = colormap; viddef.colormap8 = colormap;
viddef.fullbright = 256 - viddef.colormap8[256 * VID_GRADES]; viddef.fullbright = 256 - viddef.colormap8[256 * VID_GRADES];
if (vid_internal.set_colormap) { if (vid_internal.set_colormap) {
@ -106,6 +107,7 @@ X11_VID_SetCursor (bool visible)
static void static void
X11_VID_Init (byte *palette, byte *colormap) X11_VID_Init (byte *palette, byte *colormap)
{ {
qfZoneScoped (true);
vid_internal.gl_context = X11_GL_Context; vid_internal.gl_context = X11_GL_Context;
vid_internal.sw_context = X11_SW_Context; vid_internal.sw_context = X11_SW_Context;
#ifdef HAVE_VULKAN #ifdef HAVE_VULKAN

View file

@ -168,6 +168,7 @@ QFGL_ProcAddress (const char *name, bool crit)
static void static void
glx_choose_visual (gl_ctx_t *ctx) glx_choose_visual (gl_ctx_t *ctx)
{ {
qfZoneScoped (true);
int attrib[] = { int attrib[] = {
GLX_X_RENDERABLE, True, GLX_X_RENDERABLE, True,
GLX_DRAWABLE_TYPE, GLX_WINDOW_BIT, GLX_DRAWABLE_TYPE, GLX_WINDOW_BIT,

View file

@ -466,6 +466,7 @@ x11_sw32_update (sw_ctx_t *ctx, vrect_t *rects)
static void static void
x11_choose_visual (sw_ctx_t *ctx) x11_choose_visual (sw_ctx_t *ctx)
{ {
qfZoneScoped (true);
int pnum, i; int pnum, i;
XVisualInfo template; XVisualInfo template;
int num_visuals; int num_visuals;

View file

@ -124,6 +124,7 @@ unload_vulkan_library (vulkan_ctx_t *ctx)
static void static void
x11_vulkan_init_presentation (vulkan_ctx_t *ctx) x11_vulkan_init_presentation (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
ctx->presentation = calloc (1, sizeof (vulkan_presentation_t)); ctx->presentation = calloc (1, sizeof (vulkan_presentation_t));
vulkan_presentation_t *pres = ctx->presentation; vulkan_presentation_t *pres = ctx->presentation;
qfv_instance_t *instance = ctx->instance; qfv_instance_t *instance = ctx->instance;
@ -153,6 +154,7 @@ x11_vulkan_get_presentation_support (vulkan_ctx_t *ctx,
VkPhysicalDevice physicalDevice, VkPhysicalDevice physicalDevice,
uint32_t queueFamilyIndex) uint32_t queueFamilyIndex)
{ {
qfZoneScoped (true);
if (!ctx->presentation) { if (!ctx->presentation) {
x11_vulkan_init_presentation (ctx); x11_vulkan_init_presentation (ctx);
} }
@ -173,6 +175,7 @@ x11_vulkan_get_presentation_support (vulkan_ctx_t *ctx,
static void static void
x11_vulkan_choose_visual (vulkan_ctx_t *ctx) x11_vulkan_choose_visual (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
vulkan_presentation_t *pres = ctx->presentation; vulkan_presentation_t *pres = ctx->presentation;
set_iter_t *first = set_first (pres->usable_visuals); set_iter_t *first = set_first (pres->usable_visuals);
if (first) { if (first) {
@ -185,6 +188,7 @@ x11_vulkan_choose_visual (vulkan_ctx_t *ctx)
static void static void
x11_vulkan_create_window (vulkan_ctx_t *ctx) x11_vulkan_create_window (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
vulkan_presentation_t *pres = ctx->presentation; vulkan_presentation_t *pres = ctx->presentation;
pres->window = x_win; pres->window = x_win;
} }
@ -192,6 +196,7 @@ x11_vulkan_create_window (vulkan_ctx_t *ctx)
static VkSurfaceKHR static VkSurfaceKHR
x11_vulkan_create_surface (vulkan_ctx_t *ctx) x11_vulkan_create_surface (vulkan_ctx_t *ctx)
{ {
qfZoneScoped (true);
vulkan_presentation_t *pres = ctx->presentation; vulkan_presentation_t *pres = ctx->presentation;
VkInstance inst = ctx->instance->instance; VkInstance inst = ctx->instance->instance;
VkSurfaceKHR surface; VkSurfaceKHR surface;
@ -212,19 +217,33 @@ x11_vulkan_create_surface (vulkan_ctx_t *ctx)
return surface; return surface;
} }
static void
delete_vulkan_context (vulkan_ctx_t *ctx)
{
if (ctx->presentation) {
set_delete (ctx->presentation->usable_visuals);
free (ctx->presentation);
}
va_destroy_context (ctx->va_ctx);
free (ctx);
}
vulkan_ctx_t * vulkan_ctx_t *
X11_Vulkan_Context (vid_internal_t *vi) X11_Vulkan_Context (vid_internal_t *vi)
{ {
vulkan_ctx_t *ctx = calloc (1, sizeof (vulkan_ctx_t)); vulkan_ctx_t *ctx = malloc (sizeof (vulkan_ctx_t));
ctx->load_vulkan = load_vulkan_library; *ctx = (vulkan_ctx_t) {
ctx->unload_vulkan = unload_vulkan_library; .delete = delete_vulkan_context,
ctx->get_presentation_support = x11_vulkan_get_presentation_support; .load_vulkan = load_vulkan_library,
ctx->choose_visual = x11_vulkan_choose_visual; .unload_vulkan = unload_vulkan_library,
ctx->create_window = x11_vulkan_create_window; .get_presentation_support = x11_vulkan_get_presentation_support,
ctx->create_surface = x11_vulkan_create_surface; .choose_visual = x11_vulkan_choose_visual,
ctx->required_extensions = required_extensions; .create_window = x11_vulkan_create_window,
ctx->va_ctx = va_create_context (VA_CTX_COUNT); .create_surface = x11_vulkan_create_surface,
ctx->twod_scale = 1; .required_extensions = required_extensions,
.va_ctx = va_create_context (VA_CTX_COUNT),
.twod_scale = 1,
};
vi->ctx = ctx; vi->ctx = ctx;
return ctx; return ctx;

View file

@ -104,6 +104,7 @@ typedef struct {
} client_static_t; } client_static_t;
extern client_static_t cls; extern client_static_t cls;
extern struct dstring_s *cl_stuffbuff;
#define FPD_NO_MACROS 0x0001 // Many clients ignore this, and it isn't used, but let's honor it #define FPD_NO_MACROS 0x0001 // Many clients ignore this, and it isn't used, but let's honor it
#define FPD_NO_TIMERS 0x0002 // We never allow timers anyway #define FPD_NO_TIMERS 0x0002 // We never allow timers anyway

View file

@ -699,9 +699,17 @@ CL_TimeDemo_f (void)
timedemo_data = calloc (timedemo_runs, sizeof (td_stats_t)); timedemo_data = calloc (timedemo_runs, sizeof (td_stats_t));
} }
static void
CL_Demo_Shutdown (void *data)
{
dstring_delete (demoname);
}
void void
CL_Demo_Init (void) CL_Demo_Init (void)
{ {
qfZoneScoped (true);
Sys_RegisterShutdown (CL_Demo_Shutdown, 0);
demoname = dstring_newstr (); demoname = dstring_newstr ();
demo_timeframes_isactive = 0; demo_timeframes_isactive = 0;
demo_timeframes_index = 0; demo_timeframes_index = 0;

View file

@ -140,6 +140,7 @@ CL_SendMove (usercmd_t *cmd)
void void
CL_Init_Input (cbuf_t *cbuf) CL_Init_Input (cbuf_t *cbuf)
{ {
qfZoneScoped (true);
CL_Input_Init (cbuf); CL_Input_Init (cbuf);
Cmd_AddDataCommand ("impulse", IN_Impulse, 0, Cmd_AddDataCommand ("impulse", IN_Impulse, 0,
"Call a game function or QuakeC function."); "Call a game function or QuakeC function.");

Some files were not shown because too many files have changed in this diff Show more