This commit is contained in:
Pavel 2024-03-24 21:37:09 +03:00
parent c3be810f9b
commit 3f4179b071
3 changed files with 110 additions and 11 deletions

View File

@ -10209,15 +10209,15 @@ type
TCP_DRAW_WINDOW_MASK_HI=bit32;
TCP_ECC_FIRSTOCCURRENCE=bitpacked record
INTERFACE:bit2;
RESERVED0:bit2;
CLIENT :bit4;
ME :bit2;
PIPE :bit2;
QUEUE :bit3;
RESERVED1:bit1;
VMID :bit4;
RESERVED2:bit12;
_INTERFACE:bit2;
RESERVED0 :bit2;
CLIENT :bit4;
ME :bit2;
PIPE :bit2;
QUEUE :bit3;
RESERVED1 :bit1;
VMID :bit4;
RESERVED2 :bit12;
end;
TCP_EOP_DONE_EVENT_CNTL=bitpacked record

View File

@ -30,6 +30,7 @@ uses
kern_thread,
md_sleep,
pm4_ring,
pm4defs,
subr_backtrace;
var
@ -111,6 +112,103 @@ begin
Result:=((token shr 14) and $FFFC) + 8;
end;
procedure parse_gfx_buffer(buf:PPM4CMDINDIRECTBUFFER);
var
addr:Pointer;
size:QWORD;
i,token,len:DWORD;
begin
case buf^.header of
$c0023300:Writeln('INDIRECT_BUFFER_CNST');
$c0023f00:Writeln('COND_INDIRECT_BUFFER');
else;
end;
i:=buf^.ibSize*sizeof(DWORD);
addr:=nil;
size:=0;
if get_dmem_ptr(Pointer(buf^.ibBase),@addr,@size) then
begin
if (i>size) then
begin
Assert(false,'addr:0x'+HexStr(buf^.ibBase+size,16)+' not in dmem!');
end;
Writeln(' addr:0x'+HexStr(buf^.ibBase,16)+' '+HexStr(i,16));
end else
begin
Assert(false,'addr:0x'+HexStr(buf^.ibBase,16)+' not in dmem!');
end;
while (i<>0) do
begin
token:=PDWORD(addr)^;
len:=PM4_LENGTH(token);
if (len>i) then Exit;
case PM4_TYPE(token) of
0:begin //PM4_TYPE_0
Writeln('PM4_TYPE_0');
//onPm40(PM4_TYPE_0_HEADER(token),@PDWORD(P)[1]);
end;
2:begin //PM4_TYPE_2
Writeln('PM4_TYPE_2');
//onPm42(PM4_TYPE_2_HEADER(token));
//no body
len:=sizeof(DWORD);
end;
3:begin //PM4_TYPE_3
case PM4_TYPE_3_HEADER(token).opcode of
IT_NOP :Writeln('IT_NOP ');
IT_EVENT_WRITE_EOP :Writeln('IT_EVENT_WRITE_EOP ');
IT_EVENT_WRITE_EOS :Writeln('IT_EVENT_WRITE_EOS ');
IT_DMA_DATA :Writeln('IT_DMA_DATA ');
IT_ACQUIRE_MEM :Writeln('IT_ACQUIRE_MEM ');
IT_CONTEXT_CONTROL :Writeln('IT_CONTEXT_CONTROL ');
IT_CLEAR_STATE :Writeln('IT_CLEAR_STATE ');
IT_SET_CONTEXT_REG :Writeln('IT_SET_CONTEXT_REG ');
IT_SET_SH_REG :Writeln('IT_SET_SH_REG ');
IT_SET_UCONFIG_REG :Writeln('IT_SET_UCONFIG_REG ');
IT_SET_CONFIG_REG :Writeln('IT_SET_CONFIG_REG ');
IT_INDEX_BUFFER_SIZE :Writeln('IT_INDEX_BUFFER_SIZE ');
IT_INDEX_TYPE :Writeln('IT_INDEX_TYPE ');
IT_DRAW_INDEX_2 :Writeln('IT_DRAW_INDEX_2 ');
IT_DRAW_INDEX_AUTO :Writeln('IT_DRAW_INDEX_AUTO ');
IT_INDEX_BASE :Writeln('IT_INDEX_BASE ');
IT_DRAW_INDEX_OFFSET_2:Writeln('IT_DRAW_INDEX_OFFSET_2');
IT_DISPATCH_DIRECT :Writeln('IT_DISPATCH_DIRECT ');
IT_NUM_INSTANCES :Writeln('IT_NUM_INSTANCES ');
IT_WAIT_REG_MEM :Writeln('IT_WAIT_REG_MEM ');
IT_WRITE_DATA :Writeln('IT_WRITE_DATA ');
IT_EVENT_WRITE :Writeln('IT_EVENT_WRITE ');
IT_PFP_SYNC_ME :Writeln('IT_PFP_SYNC_ME ');
IT_SET_BASE :Writeln('IT_SET_BASE ');
IT_DRAW_PREAMBLE :Writeln('IT_DRAW_PREAMBLE ');
IT_SET_PREDICATION :Writeln('IT_SET_PREDICATION ');
IT_LOAD_CONST_RAM :Writeln('IT_LOAD_CONST_RAM ');
else
Writeln('PM4_TYPE_3.opcode:0x',HexStr(PM4_TYPE_3_HEADER(token).opcode,2));
end;
end;
else
begin
Writeln('PM4_TYPE_',PM4_TYPE(token));
Assert(False);
end;
end;
Inc(addr,len);
Dec(i,len);
end;
end;
procedure parse_gfx_ring(parameter:pointer); SysV_ABI_CDecl;
var
buff:Pointer;
@ -131,8 +229,8 @@ begin
if (len>i) then Exit;
case op of
$c0023300:Writeln('INDIRECT_BUFFER_CNST');
$c0023f00:Writeln('COND_INDIRECT_BUFFER');
$c0023300:parse_gfx_buffer(buff);
$c0023f00:parse_gfx_buffer(buff);
$c0008b00:Writeln('SWITCH_BUFFER');
else;
end;

View File

@ -553,6 +553,7 @@ begin
CutEnd(Name,'__VI');
CutEnd(Name,'__SI');
Case name of
'INTERFACE',
'OVERRIDE',
'TYPE':name:='_'+name;
end;