ReXGlue SDK
Toggle main menu visibility
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
20
namespace
rex::xenos {
21
23
constexpr
memory::FourCCT
kSwapSignature
=
memory::make_fourcc
(
"SWAP"
);
24
26
enum
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
55
enum
Type3Opcode
: u8 {
56
PM4_ME_INIT
= 0x48,
57
PM4_NOP
= 0x10,
58
PM4_INDIRECT_BUFFER
= 0x3f,
59
PM4_INDIRECT_BUFFER_PFD
= 0x37,
60
PM4_WAIT_FOR_IDLE = 0x26,
61
PM4_WAIT_REG_MEM
= 0x3c,
62
PM4_WAIT_REG_EQ = 0x52,
63
PM4_WAIT_REG_GTE = 0x53,
64
PM4_WAIT_UNTIL_READ = 0x5c,
65
PM4_WAIT_IB_PFD_COMPLETE
= 0x5d,
66
PM4_REG_RMW
= 0x21,
67
PM4_REG_TO_MEM
= 0x3e,
68
PM4_MEM_WRITE
= 0x3d,
69
PM4_MEM_WRITE_CNTR
= 0x4f,
70
PM4_COND_EXEC
= 0x44,
71
PM4_COND_WRITE
= 0x45,
72
PM4_EVENT_WRITE
= 0x46,
73
PM4_EVENT_WRITE_SHD
= 0x58,
74
PM4_EVENT_WRITE_CFL
= 0x59,
75
PM4_EVENT_WRITE_EXT
= 0x5a,
76
PM4_EVENT_WRITE_ZPD
= 0x5b,
77
PM4_DRAW_INDX
= 0x22,
78
PM4_DRAW_INDX_2
= 0x36,
79
PM4_DRAW_INDX_BIN
= 0x34,
80
PM4_DRAW_INDX_2_BIN
= 0x35,
81
PM4_VIZ_QUERY
= 0x23,
82
PM4_SET_STATE
= 0x25,
83
PM4_SET_CONSTANT
= 0x2d,
84
PM4_SET_CONSTANT2
= 0x55,
85
PM4_SET_SHADER_CONSTANTS
= 0x56,
86
PM4_LOAD_ALU_CONSTANT
= 0x2f,
87
PM4_IM_LOAD
= 0x27,
88
PM4_IM_LOAD_IMMEDIATE
= 0x2b,
89
PM4_LOAD_CONSTANT_CONTEXT
= 0x2e,
90
PM4_INVALIDATE_STATE
= 0x3b,
91
PM4_SET_SHADER_BASES
= 0x4A,
92
PM4_SET_BIN_BASE_OFFSET
= 0x4B,
93
PM4_SET_BIN_MASK
= 0x50,
94
PM4_SET_BIN_SELECT
= 0x51,
95
PM4_CONTEXT_UPDATE
= 0x5e,
96
PM4_INTERRUPT = 0x54,
97
PM4_XE_SWAP
= 0x64,
98
PM4_IM_STORE
= 0x2c,
99
PM4_SET_BIN_MASK_LO
= 0x60,
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
115
inline
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
129
inline
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
136
constexpr
u32
BuildPacketType2
() {
137
return
(2u << 30);
138
}
139
148
inline
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
assert.h
REX_ASSERT
#define REX_ASSERT(cond,...)
Definition
assert.h:84
endian.h
rex::memory::FourCCT
u32 FourCCT
Definition
endian.h:264
rex::memory::make_fourcc
constexpr FourCCT make_fourcc(char a, char b, char c, char d)
Definition
endian.h:273
rex::xenos::BuildPacketType3
u32 BuildPacketType3(Type3Opcode opcode, u16 count, bool predicate=false)
Definition
packet.h:148
rex::xenos::BuildPacketType2
constexpr u32 BuildPacketType2()
Definition
packet.h:136
rex::xenos::Type3Opcode
Type3Opcode
Definition
packet.h:55
rex::xenos::PM4_DRAW_INDX
@ PM4_DRAW_INDX
Definition
packet.h:77
rex::xenos::PM4_INVALIDATE_STATE
@ PM4_INVALIDATE_STATE
Definition
packet.h:90
rex::xenos::PM4_DRAW_INDX_2
@ PM4_DRAW_INDX_2
Definition
packet.h:78
rex::xenos::PM4_XE_SWAP
@ PM4_XE_SWAP
Definition
packet.h:97
rex::xenos::PM4_ME_INIT
@ PM4_ME_INIT
Definition
packet.h:56
rex::xenos::PM4_CONTEXT_UPDATE
@ PM4_CONTEXT_UPDATE
Definition
packet.h:95
rex::xenos::PM4_SET_SHADER_BASES
@ PM4_SET_SHADER_BASES
Definition
packet.h:91
rex::xenos::PM4_REG_TO_MEM
@ PM4_REG_TO_MEM
Definition
packet.h:67
rex::xenos::PM4_REG_RMW
@ PM4_REG_RMW
Definition
packet.h:66
rex::xenos::PM4_SET_CONSTANT
@ PM4_SET_CONSTANT
Definition
packet.h:83
rex::xenos::PM4_NOP
@ PM4_NOP
Definition
packet.h:57
rex::xenos::PM4_SET_BIN_MASK
@ PM4_SET_BIN_MASK
Definition
packet.h:93
rex::xenos::PM4_MEM_WRITE
@ PM4_MEM_WRITE
Definition
packet.h:68
rex::xenos::PM4_EVENT_WRITE_SHD
@ PM4_EVENT_WRITE_SHD
Definition
packet.h:73
rex::xenos::PM4_LOAD_CONSTANT_CONTEXT
@ PM4_LOAD_CONSTANT_CONTEXT
Definition
packet.h:89
rex::xenos::PM4_WAIT_REG_MEM
@ PM4_WAIT_REG_MEM
Definition
packet.h:61
rex::xenos::PM4_SET_BIN_MASK_LO
@ PM4_SET_BIN_MASK_LO
Definition
packet.h:99
rex::xenos::PM4_MEM_WRITE_CNTR
@ PM4_MEM_WRITE_CNTR
Definition
packet.h:69
rex::xenos::PM4_IM_LOAD_IMMEDIATE
@ PM4_IM_LOAD_IMMEDIATE
Definition
packet.h:88
rex::xenos::PM4_SET_SHADER_CONSTANTS
@ PM4_SET_SHADER_CONSTANTS
Definition
packet.h:85
rex::xenos::PM4_EVENT_WRITE_EXT
@ PM4_EVENT_WRITE_EXT
Definition
packet.h:75
rex::xenos::PM4_COND_EXEC
@ PM4_COND_EXEC
Definition
packet.h:70
rex::xenos::PM4_DRAW_INDX_BIN
@ PM4_DRAW_INDX_BIN
Definition
packet.h:79
rex::xenos::PM4_IM_STORE
@ PM4_IM_STORE
Definition
packet.h:98
rex::xenos::PM4_SET_STATE
@ PM4_SET_STATE
Definition
packet.h:82
rex::xenos::PM4_IM_LOAD
@ PM4_IM_LOAD
Definition
packet.h:87
rex::xenos::PM4_SET_BIN_SELECT
@ PM4_SET_BIN_SELECT
Definition
packet.h:94
rex::xenos::PM4_EVENT_WRITE_ZPD
@ PM4_EVENT_WRITE_ZPD
Definition
packet.h:76
rex::xenos::PM4_DRAW_INDX_2_BIN
@ PM4_DRAW_INDX_2_BIN
Definition
packet.h:80
rex::xenos::PM4_EVENT_WRITE
@ PM4_EVENT_WRITE
Definition
packet.h:72
rex::xenos::PM4_INDIRECT_BUFFER_PFD
@ PM4_INDIRECT_BUFFER_PFD
Definition
packet.h:59
rex::xenos::PM4_VIZ_QUERY
@ PM4_VIZ_QUERY
Definition
packet.h:81
rex::xenos::PM4_SET_BIN_BASE_OFFSET
@ PM4_SET_BIN_BASE_OFFSET
Definition
packet.h:92
rex::xenos::PM4_SET_CONSTANT2
@ PM4_SET_CONSTANT2
Definition
packet.h:84
rex::xenos::PM4_EVENT_WRITE_CFL
@ PM4_EVENT_WRITE_CFL
Definition
packet.h:74
rex::xenos::PM4_LOAD_ALU_CONSTANT
@ PM4_LOAD_ALU_CONSTANT
Definition
packet.h:86
rex::xenos::PM4_COND_WRITE
@ PM4_COND_WRITE
Definition
packet.h:71
rex::xenos::PM4_INDIRECT_BUFFER
@ PM4_INDIRECT_BUFFER
Definition
packet.h:58
rex::xenos::PM4_WAIT_IB_PFD_COMPLETE
@ PM4_WAIT_IB_PFD_COMPLETE
Definition
packet.h:65
rex::xenos::Event
Event
Definition
packet.h:26
rex::xenos::kSwapSignature
constexpr memory::FourCCT kSwapSignature
Definition
packet.h:23
rex::xenos::BuildPacketType1
u32 BuildPacketType1(u16 index_1, u16 index_2)
Definition
packet.h:129
rex::xenos::BuildPacketType0
u32 BuildPacketType0(u16 index, u16 count, bool one_reg=false)
Definition
packet.h:115
types.h
Integer types, byte order wrappers and size literals.
rex
xenos
packet.h
Generated by
1.18.0