ReXGlue SDK
Loading...
Searching...
No Matches
packet.h
Go to the documentation of this file.
1
13
14#pragma once
15
16#include <rex/assert.h>
17#include <rex/memory/endian.h>
18#include <rex/types.h>
19
20namespace rex::xenos {
21
24
26enum Event : u8 {
27 VS_DEALLOC = 0,
28 PS_DEALLOC = 1,
29 VS_DONE_TS = 2,
30 PS_DONE_TS = 3,
31 CACHE_FLUSH_TS = 4,
32 CONTEXT_DONE = 5,
33 CACHE_FLUSH = 6,
34 VIZQUERY_START = 7,
35 VIZQUERY_END = 8,
36 SC_WAIT_WC = 9,
37 MPASS_PS_CP_REFETCH = 10,
38 MPASS_PS_RST_START = 11,
39 MPASS_PS_INCR_START = 12,
40 RST_PIX_CNT = 13,
41 RST_VTX_CNT = 14,
42 TILE_FLUSH = 15,
43 CACHE_FLUSH_AND_INV_TS_EVENT = 20,
44 ZPASS_DONE = 21,
45 CACHE_FLUSH_AND_INV_EVENT = 22,
46 PERFCOUNTER_START = 23,
47 PERFCOUNTER_STOP = 24,
48 SCREEN_EXT_INIT = 25,
49 SCREEN_EXT_RPT = 26,
50 VS_FETCH_DONE_TS = 27,
51};
52
53// clang-format off
55enum Type3Opcode : u8 {
56 PM4_ME_INIT = 0x48,
57 PM4_NOP = 0x10,
60 PM4_WAIT_FOR_IDLE = 0x26,
62 PM4_WAIT_REG_EQ = 0x52,
63 PM4_WAIT_REG_GTE = 0x53,
64 PM4_WAIT_UNTIL_READ = 0x5c,
66 PM4_REG_RMW = 0x21,
87 PM4_IM_LOAD = 0x27,
96 PM4_INTERRUPT = 0x54,
97 PM4_XE_SWAP = 0x64,
98 PM4_IM_STORE = 0x2c,
100 PM4_SET_BIN_MASK_HI = 0x61,
101 PM4_SET_BIN_SELECT_LO = 0x62,
102 PM4_SET_BIN_SELECT_HI = 0x63,
103};
104// clang-format on
105
115inline u32 BuildPacketType0(u16 index, u16 count, bool one_reg = false) {
116 REX_ASSERT(index <= 0x7FFF);
117 REX_ASSERT(count >= 1 && count <= 0x4000);
118 return (0u << 30) | (((count - 1) & 0x3FFF) << 16) | (one_reg ? 1u << 15 : 0u) | (index & 0x7FFF);
119}
120
129inline u32 BuildPacketType1(u16 index_1, u16 index_2) {
130 REX_ASSERT(index_1 <= 0x7FF);
131 REX_ASSERT(index_2 <= 0x7FF);
132 return (1u << 30) | ((index_2 & 0x7FF) << 11) | (index_1 & 0x7FF);
133}
134
136constexpr u32 BuildPacketType2() {
137 return (2u << 30);
138}
139
148inline u32 BuildPacketType3(Type3Opcode opcode, u16 count, bool predicate = false) {
149 REX_ASSERT(opcode <= 0x7F);
150 REX_ASSERT(count >= 1 && count <= 0x4000);
151 return (3u << 30) | (((count - 1) & 0x3FFF) << 16) | ((opcode & 0x7F) << 8) | (predicate ? 1 : 0);
152}
153
154} // namespace rex::xenos
#define REX_ASSERT(cond,...)
Definition assert.h:84
u32 FourCCT
Definition endian.h:264
constexpr FourCCT make_fourcc(char a, char b, char c, char d)
Definition endian.h:273
u32 BuildPacketType3(Type3Opcode opcode, u16 count, bool predicate=false)
Definition packet.h:148
constexpr u32 BuildPacketType2()
Definition packet.h:136
Type3Opcode
Definition packet.h:55
@ PM4_DRAW_INDX
Definition packet.h:77
@ PM4_INVALIDATE_STATE
Definition packet.h:90
@ PM4_DRAW_INDX_2
Definition packet.h:78
@ PM4_XE_SWAP
Definition packet.h:97
@ PM4_ME_INIT
Definition packet.h:56
@ PM4_CONTEXT_UPDATE
Definition packet.h:95
@ PM4_SET_SHADER_BASES
Definition packet.h:91
@ PM4_REG_TO_MEM
Definition packet.h:67
@ PM4_REG_RMW
Definition packet.h:66
@ PM4_SET_CONSTANT
Definition packet.h:83
@ PM4_NOP
Definition packet.h:57
@ PM4_SET_BIN_MASK
Definition packet.h:93
@ PM4_MEM_WRITE
Definition packet.h:68
@ PM4_EVENT_WRITE_SHD
Definition packet.h:73
@ PM4_LOAD_CONSTANT_CONTEXT
Definition packet.h:89
@ PM4_WAIT_REG_MEM
Definition packet.h:61
@ PM4_SET_BIN_MASK_LO
Definition packet.h:99
@ PM4_MEM_WRITE_CNTR
Definition packet.h:69
@ PM4_IM_LOAD_IMMEDIATE
Definition packet.h:88
@ PM4_SET_SHADER_CONSTANTS
Definition packet.h:85
@ PM4_EVENT_WRITE_EXT
Definition packet.h:75
@ PM4_COND_EXEC
Definition packet.h:70
@ PM4_DRAW_INDX_BIN
Definition packet.h:79
@ PM4_IM_STORE
Definition packet.h:98
@ PM4_SET_STATE
Definition packet.h:82
@ PM4_IM_LOAD
Definition packet.h:87
@ PM4_SET_BIN_SELECT
Definition packet.h:94
@ PM4_EVENT_WRITE_ZPD
Definition packet.h:76
@ PM4_DRAW_INDX_2_BIN
Definition packet.h:80
@ PM4_EVENT_WRITE
Definition packet.h:72
@ PM4_INDIRECT_BUFFER_PFD
Definition packet.h:59
@ PM4_VIZ_QUERY
Definition packet.h:81
@ PM4_SET_BIN_BASE_OFFSET
Definition packet.h:92
@ PM4_SET_CONSTANT2
Definition packet.h:84
@ PM4_EVENT_WRITE_CFL
Definition packet.h:74
@ PM4_LOAD_ALU_CONSTANT
Definition packet.h:86
@ PM4_COND_WRITE
Definition packet.h:71
@ PM4_INDIRECT_BUFFER
Definition packet.h:58
@ PM4_WAIT_IB_PFD_COMPLETE
Definition packet.h:65
Event
Definition packet.h:26
constexpr memory::FourCCT kSwapSignature
Definition packet.h:23
u32 BuildPacketType1(u16 index_1, u16 index_2)
Definition packet.h:129
u32 BuildPacketType0(u16 index, u16 count, bool one_reg=false)
Definition packet.h:115
Integer types, byte order wrappers and size literals.