This commit is contained in:
Pavel 2025-04-04 14:52:18 +03:00
parent 78b7873484
commit 395558113a
3 changed files with 47 additions and 48 deletions

View File

@ -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

View File

@ -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;

View File

@ -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;