switch singular frame scopes to stack of frame scopes; always ensure scopes are closed before breaks in frames.

This commit is contained in:
Ryan Fleury
2025-05-22 09:28:13 -07:00
parent 895a965f70
commit d254d8edb4
2 changed files with 17 additions and 13 deletions
+4 -5
View File
@@ -1722,16 +1722,15 @@ ctrl_key_from_process_vaddr_range(CTRL_Handle process, Rng1U64 vaddr_range, B32
range_n->vaddr_range = vaddr_range; range_n->vaddr_range = vaddr_range;
range_n->zero_terminated = zero_terminated; range_n->zero_terminated = zero_terminated;
range_n->id = id; range_n->id = id;
ins_atomic_u64_inc_eval(&range_n->working_count);
node_needs_stream = 1; node_needs_stream = 1;
} }
else else
{ {
node_needs_stream = (range_n->mem_gen < mem_gen); node_needs_stream = (range_n->mem_gen < mem_gen);
if(node_needs_stream) }
{ if(node_needs_stream)
ins_atomic_u64_inc_eval(&range_n->working_count); {
} ins_atomic_u64_inc_eval(&range_n->working_count);
} }
node_working_count = &range_n->working_count; node_working_count = &range_n->working_count;
break; break;
+13 -8
View File
@@ -11262,15 +11262,12 @@ rd_frame(void)
} }
////////////////////////////// //////////////////////////////
//- rjf: open frame scopes //- rjf: push frame scopes
// //
if(rd_state->frame_depth == 1) DI_Scope *frame_di_scope_restore = rd_state->frame_di_scope;
{ CTRL_Scope *frame_ctrl_scope_restore = rd_state->frame_ctrl_scope;
if(rd_state->frame_di_scope) { di_scope_close(rd_state->frame_di_scope); } rd_state->frame_di_scope = di_scope_open();
if(rd_state->frame_ctrl_scope) { ctrl_scope_close(rd_state->frame_ctrl_scope); } rd_state->frame_ctrl_scope = ctrl_scope_open();
rd_state->frame_di_scope = di_scope_open();
rd_state->frame_ctrl_scope = ctrl_scope_open();
}
////////////////////////////// //////////////////////////////
//- rjf: calculate avg length in us of last many frames //- rjf: calculate avg length in us of last many frames
@@ -16749,6 +16746,14 @@ rd_frame(void)
rd_state->num_frames_requested -= 1; rd_state->num_frames_requested -= 1;
} }
//////////////////////////////
//- rjf: close frame scopes
//
di_scope_close(rd_state->frame_di_scope);
ctrl_scope_close(rd_state->frame_ctrl_scope);
rd_state->frame_di_scope = frame_di_scope_restore;
rd_state->frame_ctrl_scope = frame_ctrl_scope_restore;
////////////////////////////// //////////////////////////////
//- rjf: submit rendering to all windows //- rjf: submit rendering to all windows
// //