mirror of https://github.com/red-prig/fpPS4.git
This commit is contained in:
parent
3776950a22
commit
e11e4ba7b5
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue