This commit is contained in:
Pavel 2024-08-08 11:10:43 +03:00
parent 3776950a22
commit e11e4ba7b5
2 changed files with 59 additions and 12 deletions

View File

@ -75,7 +75,7 @@ type
end; end;
// //
event:PRTLEvent; event:PRTLEvent;
//on_idle:TProcedure; on_idle:TProcedure;
on_submit_flip_eop:t_on_submit_flip_eop; on_submit_flip_eop:t_on_submit_flip_eop;
// //
started:Pointer; started:Pointer;
@ -162,7 +162,7 @@ type
// //
procedure switch_task; procedure switch_task;
procedure next_task; procedure next_task;
//procedure on_idle; procedure on_idle;
end; end;
var var
@ -673,7 +673,6 @@ begin
end; end;
end; end;
{
procedure t_me_render_context.on_idle; procedure t_me_render_context.on_idle;
begin begin
if (me^.on_idle<>nil) then if (me^.on_idle<>nil) then
@ -681,7 +680,6 @@ begin
me^.on_idle(); me^.on_idle();
end; end;
end; end;
}
// //
@ -1892,7 +1890,6 @@ begin
ctx.me^.knote_eventid($40,0,curr*NSEC_PER_UNIT,0); //(absolute time) (freq???) ctx.me^.knote_eventid($40,0,curr*NSEC_PER_UNIT,0); //(absolute time) (freq???)
end; end;
//ctx.on_idle;
end; end;
procedure pm4_SubmitFlipEop(var ctx:t_me_render_context;node:p_pm4_node_SubmitFlipEop); procedure pm4_SubmitFlipEop(var ctx:t_me_render_context;node:p_pm4_node_SubmitFlipEop);
@ -1922,7 +1919,6 @@ begin
ctx.me^.knote_eventid($40,0,curr*NSEC_PER_UNIT,0); //(absolute time) (freq???) ctx.me^.knote_eventid($40,0,curr*NSEC_PER_UNIT,0); //(absolute time) (freq???)
end; end;
//ctx.on_idle;
end; end;
function get_compute_pipe_id(buft:t_pm4_stream_type):Byte; inline; function get_compute_pipe_id(buft:t_pm4_stream_type):Byte; inline;
@ -2016,7 +2012,6 @@ begin
ctx.me^.knote_eventid(get_compute_pipe_id(ctx.stream^.buft),0,curr*NSEC_PER_UNIT,0); //(absolute time) (freq???) ctx.me^.knote_eventid(get_compute_pipe_id(ctx.stream^.buft),0,curr*NSEC_PER_UNIT,0); //(absolute time) (freq???)
end; end;
//ctx.on_idle;
end; end;
procedure pm4_EventWrite(var ctx:t_me_render_context;node:p_pm4_node_EventWrite); procedure pm4_EventWrite(var ctx:t_me_render_context;node:p_pm4_node_EventWrite);
@ -2104,7 +2099,6 @@ begin
Assert(false,'pm4_EventWriteEos'); Assert(false,'pm4_EventWriteEos');
end; end;
//ctx.on_idle;
end; end;
procedure pm4_WriteData(var ctx:t_me_render_context;node:p_pm4_node_WriteData); procedure pm4_WriteData(var ctx:t_me_render_context;node:p_pm4_node_WriteData);
@ -2299,7 +2293,7 @@ begin
begin begin
Inc(ctx.stream^.hint_loop); Inc(ctx.stream^.hint_loop);
// //
if (ctx.stream^.hint_loop>1000) then if (ctx.stream^.hint_loop>10000) then
begin begin
//loop detection //loop detection
Writeln(stderr,'WaitReg loop detected -> skip'); Writeln(stderr,'WaitReg loop detected -> skip');
@ -2472,8 +2466,9 @@ begin
me^.reset_sheduler; me^.reset_sheduler;
ctx.rel_time:=0; //reset time ctx.rel_time:=0; //reset time
// //
//ctx.on_idle; ctx.on_idle;
// //
RTLEventWaitFor(me^.event); RTLEventWaitFor(me^.event);

View File

@ -10,6 +10,9 @@ uses
procedure gc_initialize(); procedure gc_initialize();
var
sync_me_submit:Boolean=False; //forced wait for all tasks to complete on the GPU side after submit
implementation implementation
uses uses
@ -158,6 +161,9 @@ var
GC_SRI_event:PRTLEvent=nil; GC_SRI_event:PRTLEvent=nil;
GC_SRI_label:QWORD=0; GC_SRI_label:QWORD=0;
me_idle_event:PRTLEvent=nil;
me_idle_label:QWORD=0;
parse_gfx_started:Pointer=nil; parse_gfx_started:Pointer=nil;
parse_gfx_td:p_kthread; parse_gfx_td:p_kthread;
@ -431,7 +437,7 @@ begin
end; end;
end; end;
procedure gc_idle; {register;} procedure gc_idle;
begin begin
if (GC_SRI_event<>nil) then if (GC_SRI_event<>nil) then
begin begin
@ -445,6 +451,38 @@ begin
end; end;
end; end;
procedure me_idle; register;
begin
if (me_idle_event<>nil) then
begin
RTLEventSetEvent(me_idle_event);
end;
me_idle_label:=0;
end;
procedure wait_me_idle;
begin
if (me_idle_label=0) then Exit;
if (me_idle_event<>nil) then
begin
RTLEventWaitFor(me_idle_event);
end;
end;
procedure reset_me_idle;
begin
me_idle_label:=1;
if (me_idle_event=nil) then
begin
me_idle_event:=RTLEventCreate;
end else
begin
RTLEventResetEvent(me_idle_event);
end;
end;
procedure gc_imdone; procedure gc_imdone;
var var
prev:QWORD; prev:QWORD;
@ -798,6 +836,12 @@ begin
$C0108102: //submit $C0108102: //submit
begin begin
if sync_me_submit then
begin
reset_me_idle;
end;
//
start_gfx_ring; start_gfx_ring;
rw_wlock(ring_gfx_lock); rw_wlock(ring_gfx_lock);
@ -811,7 +855,15 @@ begin
if (Result=0) then if (Result=0) then
begin begin
retrigger_watchdog; retrigger_watchdog;
if sync_me_submit then
begin
//force wait GPU idle
wait_me_idle;
end; end;
//msleep_td(hz);
end;
end; end;
$C020810C: //submit eop $C020810C: //submit eop
@ -1142,7 +1194,7 @@ begin
gc_ring_create(@ring_gfx,GC_RING_SIZE); gc_ring_create(@ring_gfx,GC_RING_SIZE);
pm4_me_gfx.Init(@gc_knlist); pm4_me_gfx.Init(@gc_knlist);
//pm4_me_gfx.on_idle:=@gc_idle; pm4_me_gfx.on_idle:=@me_idle;
pm4_me_gfx.on_submit_flip_eop:=@dev_dce.TriggerFlipEop; pm4_me_gfx.on_submit_flip_eop:=@dev_dce.TriggerFlipEop;
end; end;