From ec86a91b51a082e75983d0c0f35c592e74330a8e Mon Sep 17 00:00:00 2001 From: Pavel <68122101+red-prig@users.noreply.github.com> Date: Wed, 28 May 2025 17:51:04 +0300 Subject: [PATCH] + --- chip/pm4_me.pas | 47 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/chip/pm4_me.pas b/chip/pm4_me.pas index 2e178fb7..12187dd2 100644 --- a/chip/pm4_me.pas +++ b/chip/pm4_me.pas @@ -2964,11 +2964,21 @@ begin //GPU byteSize:=node^.num_dw*SizeOf(DWORD); + if p_print_gpu_ops then + begin + Writeln('[1]WriteData:0x',HexStr(QWORD(node^.src),10),'->',HexStr(QWORD(node^.dst),10),':size=0x',HexStr(byteSize,5)); + end; + ctx.Cmd.dmaData1(node^.src,node^.dst,byteSize,node^.wrConfirm); end else begin //soft + if p_print_gpu_ops then + begin + Writeln('[2]WriteData:0x',HexStr(QWORD(node^.src),10),'->',HexStr(QWORD(node^.dst),10),':size=0x',HexStr(byteSize,5)); + end; + src_dmem:=get_dmem_ptr(node^.src); dst_dmem:=get_dmem_ptr(node^.dst); @@ -3241,6 +3251,8 @@ var __end:DWORD; size :DWORD; begin + //if not ctx.WaitConfirmOrSwitch then Exit; + addr_dmem:=get_dmem_ptr(node^.addr); start:=node^.offset; @@ -3258,6 +3270,11 @@ begin size:=(__end-start); + if p_print_gpu_ops then + begin + Writeln('LoadConstRam:0x',HexStr(QWORD(addr_dmem),10),'->[0x',HexStr(start,4),']:size=0x',HexStr(size,6)); + end; + Move(addr_dmem^,ctx.me^.CONST_RAM[start],size); end; @@ -3269,6 +3286,8 @@ var __end:DWORD; size :DWORD; begin + //if not ctx.WaitConfirmOrSwitch then Exit; + addr_dmem:=get_dmem_ptr(node^.addr); start:=node^.offset; @@ -3286,6 +3305,11 @@ begin size:=(__end-start); + if p_print_gpu_ops then + begin + Writeln('DumpConstRam:[0x',HexStr(start,4),']->0x',HexStr(QWORD(addr_dmem),10),':size=0x',HexStr(size,6)); + end; + Move(ctx.me^.CONST_RAM[start],addr_dmem^,size); ctx.BeginCmdBuffer; @@ -3308,7 +3332,17 @@ procedure pm4_WaitOnCECounter(var ctx:t_me_render_context;node:p_pm4_node); begin if (ctx.me^.CE_COUNT <= ctx.me^.DE_COUNT) then begin + if p_print_gpu_ops then + begin + Writeln('WaitOnCECounter:(',ctx.me^.CE_COUNT,' <= ',ctx.me^.DE_COUNT,')'); + end; ctx.switch_task; + end else + begin + if p_print_gpu_ops then + begin + Writeln('WaitOnCECounter:(',ctx.me^.CE_COUNT,' > ',ctx.me^.DE_COUNT,')'); + end; end; end; @@ -3317,9 +3351,20 @@ var diff:DWORD; begin diff:=node^.diff; - if ((ctx.me^.DE_COUNT - ctx.me^.CE_COUNT) >= diff) then + //force unsigned compare + if (DWORD(ctx.me^.DE_COUNT - ctx.me^.CE_COUNT) >= diff) then begin + if p_print_gpu_ops then + begin + Writeln('WaitOnDECounterDiff:(',ctx.me^.DE_COUNT,' - ',ctx.me^.CE_COUNT,') >= ',diff); + end; ctx.switch_task; + end else + begin + if p_print_gpu_ops then + begin + Writeln('WaitOnDECounterDiff:(',ctx.me^.DE_COUNT,' - ',ctx.me^.CE_COUNT,') < ',diff); + end; end; end;