This commit is contained in:
Pavel 2025-05-29 23:45:18 +03:00
parent b6bf97c51a
commit a9c65e098c
2 changed files with 41 additions and 33 deletions

View File

@ -8,8 +8,6 @@ interface
uses
sysutils,
mqueue,
bittype,
pm4_ring,
pm4defs,
pm4_stream,
time,
@ -1518,18 +1516,17 @@ begin
end;
procedure onSetPredication(pctx:p_pfp_ctx;Body:PPM4CMDSETPREDICATION);
var
addr:QWORD;
const
c_pred_b:array[0..1] of PChar=('DrawIfNotVisible','DrawIfVisible');
c_hint_v:array[0..1] of PChar=('Wait','Draw');
begin
Assert(pctx^.stream_type=stGfxDcb);
addr:=QWORD(Body^.startAddress);
if (addr<>0) then
if p_print_gpu_ops then
if (Body^.predOp<>0) then
begin
Writeln(' startAddress=0x',HexStr(addr,16));
Writeln(' pred =',Body^.predicationBoolean);
Writeln(' hint =',Body^.hint);
Writeln(' startAddress=0x',HexStr(Body^.startAddress,10));
Writeln(' pred =',c_pred_b[Body^.predicationBoolean]);
Writeln(' hint =',c_hint_v[Body^.hint]);
Writeln(' predOp =',Body^.predOp);
Writeln(' continueBit =',Body^.continueBit);
end;

View File

@ -373,12 +373,15 @@ type
TPM4CMDSETPREDICATION=bitpacked record
header :PM4_TYPE_3_HEADER;
startAddress :bit40; // < start address
predicationBoolean:bit1; // < predication boolean
//8
predicationBoolean:bit1; // < predication boolean (DrawIfNotVisible=0,DrawIfVisible=1)
reserved1 :bit3;
hint :bit1; // < hint
//12
hint :bit1; // < hint (Wait = 0,Draw = 1)
// < (only valid for Zpass/Occlusion Predicate)
reserved2 :bit3;
predOp :bit3; // < predicate operation
//16
predOp :bit3; // < predicate operation (SET_PRED_ZPASS)
reserved3 :bit12;
continueBit :bit1; // < continue set predication
end;
@ -526,27 +529,35 @@ const
EVENT_WRITE_INDEX_CACHE_FLUSH_EVENT = 7;
type
PTPM4CMDEVENTWRITE=^TPM4CMDEVENTWRITE;
TPM4CMDEVENTWRITE=bitpacked record
PTPM4CMDEVENTWRITE=^PM4CMDEVENTWRITE;
PM4CMDEVENTWRITE=bitpacked record
header :PM4_TYPE_3_HEADER;
eventType :bit6; ///< event type written to VGT_EVENT_INITIATOR
reserved1 :bit2; ///< reserved
eventIndex :bit4; ///< event index
///< 0000: Any non-Time Stamp/non-Fence/non-Trap EVENT_TYPE not listed.
///< 0001: ZPASS_DONE
///< 0010: SAMPLE_PIPELINESTATS
///< 0011: SAMPLE_STREAMOUTSTAT[S|S1|S2|S3]
///< 0100: [CS|VS|PS]_PARTIAL_FLUSH
///< 0101: Reserved for EVENT_WRITE_EOP time stamp/fence event types
///< 0110: Reserved for EVENT_WRITE_EOS packet
///< 0111: CACHE_FLUSH, CACHE_FLUSH_AND_INV_EVENT
///< 1000 - 1111: Reserved for future use.
reserved2 :bit8; ///< reserved
invalidateL2 :bit1; ///< Send WBINVL2 op to the TC L2 cache when eventIndex = 0111.
reserved3 :bit3;
ATC :bit1; ///< needed by Sample_PipelineStats (compute engine)
reserved4 :bit6; ///< reserved
offload_enable :bit1; ///< Offload queue until EOP queue goes empty, only works for MEC. ///< Setting this bit on graphics/ME will do nothing/be masked out.
eventType :bit6; // event type written to VGT_EVENT_INITIATOR
reserved1 :bit2; // reserved
eventIndex :bit4; // event index
// 0000: Any non-Time Stamp/non-Fence/non-Trap EVENT_TYPE not listed.
// 0001: ZPASS_DONE
// 0010: SAMPLE_PIPELINESTATS
// 0011: SAMPLE_STREAMOUTSTAT[S|S1|S2|S3]
// 0100: [CS|VS|PS]_PARTIAL_FLUSH
// 0101: Reserved for EVENT_WRITE_EOP time stamp/fence event types
// 0110: Reserved for EVENT_WRITE_EOS packet
// 0111: CACHE_FLUSH, CACHE_FLUSH_AND_INV_EVENT
// 1000 - 1111: Reserved for future use.
reserved2 :bit20; // reserved
u:bitpacked record
case Byte of
//PIXEL_PIPE_STAT_DUMP
0:(address:QWORD); // 8 byte aligned (40bit)
//PIXEL_PIPE_STAT_CONTROL
1:(
reserved2 :bit3;
counter_id :bit6;
stride :bit2;
instance_enable:bit16;
reserved3 :bit5;
);
end;
end;
const