mirror of https://github.com/red-prig/fpPS4.git
This commit is contained in:
parent
78b7873484
commit
395558113a
|
@ -302,7 +302,11 @@ end;
|
|||
|
||||
procedure t_pm4_me.trigger;
|
||||
begin
|
||||
gc_wakeup_internal_ptr(@queue);
|
||||
if (gc_kqueue<>nil) then
|
||||
begin
|
||||
gc_wakeup_internal_ptr(@queue);
|
||||
end;
|
||||
|
||||
{
|
||||
if (event<>nil) then
|
||||
begin
|
||||
|
@ -325,7 +329,11 @@ begin
|
|||
t.tv_nsec:=1000000000 div 1000;
|
||||
|
||||
r:=0;
|
||||
kern_kevent2(gc_kqueue,nil,0,@kev,Length(kev),@t,@r);
|
||||
|
||||
if (gc_kqueue<>nil) then
|
||||
begin
|
||||
kern_kevent2(gc_kqueue,nil,0,@kev,Length(kev),@t,@r);
|
||||
end;
|
||||
|
||||
wmin_addr:=nil;
|
||||
|
||||
|
@ -1323,7 +1331,7 @@ begin
|
|||
iv:=ri.FetchView(ctx.Cmd,FView,iu_sampled);
|
||||
Assert(iv<>nil);
|
||||
|
||||
Writeln('BindImage:->'#13#10,
|
||||
Writeln('BindImage:->[',i,']'#13#10,
|
||||
' 0x',HexStr(ri.FHandle,16),':',ri.key.cformat,':',ri.FName,'->'#13#10,
|
||||
' 0x',HexStr(iv.FHandle,16),':',iv.key.cformat,':',iv.FName);
|
||||
|
||||
|
@ -1340,7 +1348,7 @@ begin
|
|||
iv:=ri.FetchView(ctx.Cmd,FView,iu_storage);
|
||||
Assert(iv<>nil);
|
||||
|
||||
Writeln('BindStorage:->'#13#10,
|
||||
Writeln('BindStorage:->[',i,']'#13#10,
|
||||
' 0x',HexStr(ri.FHandle,16),':',ri.key.cformat,':',ri.FName,'->'#13#10,
|
||||
' 0x',HexStr(iv.FHandle,16),':',iv.key.cformat,':',iv.FName);
|
||||
|
||||
|
@ -1903,7 +1911,7 @@ begin
|
|||
|
||||
ctx.Render.AddClearColor(ctx.rt_info^.RT_INFO[i].CLEAR_COLOR);
|
||||
|
||||
Writeln('BindFrame:->'#13#10,
|
||||
Writeln('BindFrame:->[',i,']'#13#10,
|
||||
' 0x',HexStr(ri.FHandle,16),':',ri.key.cformat,':',ri.FName,'->'#13#10,
|
||||
' 0x',HexStr(iv.FHandle,16),':',iv.key.cformat,':',iv.FName);
|
||||
|
||||
|
@ -2061,7 +2069,7 @@ begin
|
|||
Prepare_Uniforms(ctx,BP_GRAPHICS,FUniformBuilder);
|
||||
////////
|
||||
|
||||
//DumpShaderGroup(ctx.rt_info^.ShaderGroup);
|
||||
DumpShaderGroup(ctx.rt_info^.ShaderGroup);
|
||||
|
||||
if not ctx.Cmd.BeginRenderPass(@ctx.Render,GP) then
|
||||
begin
|
||||
|
|
|
@ -229,27 +229,9 @@ begin
|
|||
pctx^.stream[stGfxDcb].SubmitFlipEop(Body^.DATA,Body^.intSel);
|
||||
end;
|
||||
|
||||
procedure _FlushAndWaitMe(pctx:p_pfp_ctx);
|
||||
var
|
||||
event:PRTLEvent;
|
||||
begin
|
||||
if (pctx^.event=nil) then
|
||||
begin
|
||||
pctx^.event:=RTLEventCreate;
|
||||
end;
|
||||
|
||||
event:=pctx^.event;
|
||||
|
||||
pctx^.stream[stGfxDcb].PfpSyncMe(event);
|
||||
|
||||
pctx^.Flush_stream(stGfxDcb);
|
||||
|
||||
RTLEventWaitFor(event);
|
||||
end;
|
||||
|
||||
procedure onSwitchBuffer(pctx:p_pfp_ctx;Body:Pointer);
|
||||
begin
|
||||
_FlushAndWaitMe(pctx);
|
||||
//
|
||||
end;
|
||||
|
||||
function pm4_parse_gfx_ring(pctx:p_pfp_ctx;token:DWORD;buff:Pointer):Integer;
|
||||
|
@ -700,8 +682,6 @@ begin
|
|||
|
||||
//-> gc_imdone_tasklet
|
||||
|
||||
pm4_me_gfx.trigger; //update if wait
|
||||
|
||||
gc_imdone_tasklet;
|
||||
|
||||
pm4_me_gfx.imdone;
|
||||
|
@ -1430,16 +1410,19 @@ end;
|
|||
|
||||
function filterops_internal_event(kn:p_knote;hint:QWORD):Integer;
|
||||
begin
|
||||
Result:=0;
|
||||
if (hint=0) then
|
||||
begin
|
||||
Result:=ord(kn^.kn_kevent.data<>0);
|
||||
end else
|
||||
begin
|
||||
Result:=0;
|
||||
if (kn^.kn_kevent.ident=hint) then
|
||||
begin
|
||||
Result:=1;
|
||||
Result:=Integer(kn^.kn_kevent.data);
|
||||
end;
|
||||
end else
|
||||
begin
|
||||
if (kn^.kn_kevent.ident=hint) then
|
||||
begin
|
||||
kn^.kn_kevent.data:=1;
|
||||
Result:=1;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
|
|
@ -36,11 +36,6 @@ function kqueue_acquire (fp:p_file;kqp:pp_kqueue):Integer;
|
|||
procedure kqueue_release (kq:p_kqueue;locked:Integer);
|
||||
function kqueue_expand (kq:p_kqueue;fops:p_filterops;ident:ptruint):Integer;
|
||||
procedure kqueue_task (arg:Pointer;pending:Integer);
|
||||
function kqueue_scan (kq:p_kqueue;
|
||||
maxevents:Integer;
|
||||
k_ops:p_kevent_copyops;
|
||||
tsp:p_timespec;
|
||||
keva:p_kevent):Integer;
|
||||
procedure kqueue_wakeup (kq:p_kqueue);
|
||||
function kqueue_fo_find (filt:Integer):p_filterops;
|
||||
procedure kqueue_fo_release(filt:Integer);
|
||||
|
@ -1012,6 +1007,13 @@ begin
|
|||
Result:=0;
|
||||
end;
|
||||
|
||||
function kqueue_scan(td:p_kthread;
|
||||
kq:p_kqueue;
|
||||
maxevents:Integer;
|
||||
k_ops:p_kevent_copyops;
|
||||
tsp:p_timespec;
|
||||
keva:p_kevent):Integer; forward;
|
||||
|
||||
function _kern_kevent(td:p_kthread;
|
||||
kq:p_kqueue;
|
||||
nchanges:Integer;
|
||||
|
@ -1073,7 +1075,7 @@ begin
|
|||
Exit(0); //goto done;
|
||||
end;
|
||||
|
||||
Result:=kqueue_scan(kq, nevents, k_ops, timeout, keva);
|
||||
Result:=kqueue_scan(td, kq, nevents, k_ops, timeout, keva);
|
||||
end;
|
||||
|
||||
function kern_kevent(fd:Integer;
|
||||
|
@ -1801,18 +1803,18 @@ end;
|
|||
* Scan, update kn_data (if not ONESHOT), and copyout triggered events.
|
||||
* We treat KN_MARKER knotes as if they are INFLUX.
|
||||
}
|
||||
function kqueue_scan(kq:p_kqueue;
|
||||
function kqueue_scan(td:p_kthread;
|
||||
kq:p_kqueue;
|
||||
maxevents:Integer;
|
||||
k_ops:p_kevent_copyops;
|
||||
tsp:p_timespec;
|
||||
keva:p_kevent):Integer;
|
||||
keva:p_kevent):Integer; inline;
|
||||
label
|
||||
done,
|
||||
done_nl,
|
||||
retry,
|
||||
start;
|
||||
var
|
||||
td:p_kthread;
|
||||
kevp:p_kevent;
|
||||
atv,rtv,ttv:Int64;
|
||||
timeout:Int64;
|
||||
|
@ -1820,12 +1822,9 @@ var
|
|||
count,nkev,error,influx:Integer;
|
||||
haskqglobal,touch:Integer;
|
||||
begin
|
||||
td:=curkthread;
|
||||
if (td=nil) then Exit(-1);
|
||||
|
||||
count:=maxevents;
|
||||
nkev:=0;
|
||||
error:=0;
|
||||
count :=maxevents;
|
||||
nkev :=0;
|
||||
error :=0;
|
||||
haskqglobal:=0;
|
||||
|
||||
if (maxevents=0) then goto done_nl;
|
||||
|
@ -1849,12 +1848,14 @@ begin
|
|||
atv:=0;
|
||||
timeout:=0;
|
||||
end;
|
||||
|
||||
marker:=knote_alloc();
|
||||
if (marker=nil) then
|
||||
begin
|
||||
error:=ENOMEM;
|
||||
goto done_nl;
|
||||
end;
|
||||
|
||||
marker^.kn_status:=KN_MARKER;
|
||||
KQ_LOCK(kq);
|
||||
goto start;
|
||||
|
@ -1899,6 +1900,7 @@ start:
|
|||
|
||||
TAILQ_INSERT_TAIL(@kq^.kq_head,marker,@marker^.kn_tqe);
|
||||
influx:=0;
|
||||
|
||||
while (count<>0) do
|
||||
begin
|
||||
KQ_OWNED(kq);
|
||||
|
@ -2039,19 +2041,25 @@ start:
|
|||
KQ_LOCK(kq);
|
||||
if (error<>0) then break;
|
||||
end;
|
||||
end;
|
||||
|
||||
end; //while (count<>0) do
|
||||
|
||||
TAILQ_REMOVE(@kq^.kq_head,marker,@marker^.kn_tqe);
|
||||
|
||||
done:
|
||||
KQ_OWNED(kq);
|
||||
KQ_UNLOCK_FLUX(kq);
|
||||
knote_free(marker);
|
||||
|
||||
done_nl:
|
||||
KQ_NOTOWNED(kq);
|
||||
if (nkev<>0) then
|
||||
begin
|
||||
error:=k_ops^.k_copyout(k_ops^.arg, keva, nkev);
|
||||
end;
|
||||
|
||||
td^.td_retval[0]:=maxevents - count;
|
||||
|
||||
Exit(error);
|
||||
end;
|
||||
|
||||
|
|
Loading…
Reference in New Issue