146 kVsInterpolators = 2,
154 AddressingMode GetAddressingMode()
const {
return address_mode_; }
155 u32 GetAddress()
const {
return address_; }
156 u32 GetCount()
const {
return count_; }
166 bool IsYield()
const {
return is_yield_ == 1; }
173 [[maybe_unused]] u32 vc_hi_ : 4;
175 [[maybe_unused]] u32 vc_lo_ : 2;
177 u32 is_predicate_clean_ : 1;
182REX_STATIC_ASSERT_SIZE(ControlFlowExecInstruction,
sizeof(u32) * 2);
190 AddressingMode GetAddressingMode()
const {
return address_mode_; }
191 u32 GetAddress()
const {
return address_; }
192 u32 GetCount()
const {
return count_; }
195 u32 GetBoolAddress()
const {
return bool_address_; }
198 bool IsYield()
const {
return is_yield_ == 1; }
205 [[maybe_unused]] u32 vc_hi_ : 4;
207 [[maybe_unused]] u32 vc_lo_ : 2;
208 u32 bool_address_ : 8;
213REX_STATIC_ASSERT_SIZE(ControlFlowCondExecInstruction,
sizeof(u32) * 2);
218 AddressingMode GetAddressingMode()
const {
return address_mode_; }
219 u32 GetAddress()
const {
return address_; }
220 u32 GetCount()
const {
return count_; }
227 bool IsYield()
const {
return is_yield_ == 1; }
234 [[maybe_unused]] u32 vc_hi_ : 4;
236 [[maybe_unused]] u32 vc_lo_ : 2;
238 u32 is_predicate_clean_ : 1;
243REX_STATIC_ASSERT_SIZE(ControlFlowCondExecPredInstruction,
sizeof(u32) * 2);
248 AddressingMode GetAddressingMode()
const {
return address_mode_; }
267REX_STATIC_ASSERT_SIZE(ControlFlowLoopStartInstruction,
sizeof(u32) * 2);
272 AddressingMode GetAddressingMode()
const {
return address_mode_; }
286 u32 is_predicated_break_ : 1;
294REX_STATIC_ASSERT_SIZE(ControlFlowLoopEndInstruction,
sizeof(u32) * 2);
299 AddressingMode GetAddressingMode()
const {
return address_mode_; }
300 u32 GetAddress()
const {
return address_; }
301 bool IsUnconditional()
const {
return is_unconditional_; }
304 u32 GetBoolAddress()
const {
return bool_address_; }
310 u32 is_unconditional_ : 1;
311 u32 is_predicated_ : 1;
315 u32 bool_address_ : 8;
320REX_STATIC_ASSERT_SIZE(ControlFlowCondCallInstruction,
sizeof(u32) * 2);
325 AddressingMode GetAddressingMode()
const {
return address_mode_; }
339 AddressingMode GetAddressingMode()
const {
return address_mode_; }
340 u32 GetAddress()
const {
return address_; }
341 bool IsUnconditional()
const {
return is_unconditional_; }
344 u32 GetBoolAddress()
const {
return bool_address_; }
350 u32 is_unconditional_ : 1;
351 u32 is_predicated_ : 1;
355 [[maybe_unused]] u32 direction_ : 1;
356 u32 bool_address_ : 8;
361REX_STATIC_ASSERT_SIZE(ControlFlowCondJmpInstruction,
sizeof(u32) * 2);
366 u32 GetSize()
const {
return size_; }
367 AllocType GetAllocType()
const {
return alloc_type_; }
414 u32 dword_0 = dwords[0];
415 u32 dword_1 = dwords[1];
416 u32 dword_2 = dwords[2];
417 out_ab[0].dword_0 = dword_0;
418 out_ab[0].dword_1 = dword_1 & 0xFFFF;
419 out_ab[1].dword_0 = (dword_1 >> 16) | (dword_2 << 16);
420 out_ab[1].dword_1 = dword_2 >> 16;
513 FetchOpcode GetOpcode()
const {
return data_.opcode_value; }
515 bool IsPredicated()
const {
return data_.is_predicated; }
521 u32 GetDest()
const {
return data_.dst_reg; }
522 u32 GetDestSwizzle()
const {
return data_.dst_swiz; }
523 bool IsDestRelative()
const {
return data_.dst_reg_am; }
526 u32 GetSrcSwizzle()
const {
return data_.src_swiz; }
527 bool IsSrcRelative()
const {
return data_.src_reg_am; }
534 xenos::VertexFormat GetDataFormat()
const {
return data_.format; }
537 bool IsSigned()
const {
return data_.format_comp_all == 1; }
567 u32 is_index_rounded : 1;
568 xenos::VertexFormat format : 6;
572 u32 is_predicated : 1;
577 u32 pred_condition : 1;
586 FetchOpcode GetOpcode()
const {
return data_.opcode_value; }
588 bool IsPredicated()
const {
return data_.is_predicated; }
594 u32 GetDest()
const {
return data_.dst_reg; }
595 u32 GetDestSwizzle()
const {
return data_.dst_swiz; }
596 bool IsDestRelative()
const {
return data_.dst_reg_am; }
597 u32 GetSrcReg()
const {
return data_.src_reg; }
598 u32 GetSrcSwizzle()
const {
return data_.src_swiz; }
599 bool IsSrcRelative()
const {
return data_.src_reg_am; }
601 xenos::FetchOpDimension GetDimension()
const {
return data_.dimension; }
604 bool HasUnnormalizedCoordinates()
const {
return data_.tx_coord_denorm == 1; }
627 bool IsComputedLODUsed()
const {
return data_.use_comp_lod == 1; }
628 bool IsRegisterLODUsed()
const {
return data_.use_reg_lod == 1; }
629 bool HasRegisterGradients()
const {
return data_.use_reg_gradients == 1; }
630 xenos::SampleLocation GetSampleLocation()
const {
return data_.sample_location; }
631 f32 GetLODBias()
const {
return static_cast<f32
>(data_.lod_bias) * (1.0f / 16.0f); }
632 f32 GetOffsetX()
const {
return static_cast<f32
>(data_.offset_x) * 0.5f; }
633 f32 GetOffsetY()
const {
return static_cast<f32
>(data_.offset_y) * 0.5f; }
634 f32 GetOffsetZ()
const {
return static_cast<f32
>(data_.offset_z) * 0.5f; }
644 u32 fetch_valid_only : 1;
646 u32 tx_coord_denorm : 1;
658 u32 use_comp_lod : 1;
661 u32 is_predicated : 1;
664 u32 use_reg_gradients : 1;
665 xenos::SampleLocation sample_location : 1;
672 u32 pred_condition : 1;
682 FetchOpcode GetOpcode()
const {
return data_.opcode_value; }
684 bool IsPredicated()
const {
return data_.is_predicated; }
688 u32 GetDest()
const {
return data_.dst_reg; }
689 u32 GetDestSwizzle()
const {
return data_.dst_swiz; }
690 bool IsDestRelative()
const {
return data_.dst_reg_am; }
691 u32 GetSrcReg()
const {
return data_.src_reg; }
692 bool IsSrcRelative()
const {
return data_.src_reg_am; }
714 u32 is_predicated : 1;
718 u32 pred_condition : 1;
732 kAluOpChangedStateNone = 0,
1817extern const AluVectorOpcodeTraits kAluVectorOpcodeTraits[32];
1832 u32 used_result_components) {
1834 REX_ASSERT((used_result_components & ~
static_cast<u32
>(0b1111)) == 0);
1835 u32 components = used_result_components;
1836 switch (vector_opcode) {
1839 components = used_result_components ? 0b1111 : 0;
1842 components = used_result_components ? 0b0111 : 0;
1845 components = used_result_components ? (src_index == 3 ? 0b0001 : 0b0011) : 0;
1848 components = used_result_components ? 0b1111 : 0;
1854 components = used_result_components ? 0b1001 : 0b1000;
1860 components = 0b1111;
1863 if (src_index == 1) {
1864 components |= 0b1000;
1923 kExportAddress = 32,
1937 bool IsExport()
const {
return data_.export_data == 1; }
1939 bool IsPredicated()
const {
return data_.is_predicated; }
1958 u32 GetVectorDest()
const {
return data_.vector_dest; }
1959 bool IsVectorDestRelative()
const {
return data_.vector_dest_rel == 1; }
1960 bool IsVectorClamped()
const {
return data_.vector_clamp == 1; }
1962 AluScalarOpcode GetScalarOpcode()
const {
return data_.scalar_opc; }
1965 u32 GetScalarDest()
const {
return data_.scalar_dest; }
1966 bool IsScalarDestRelative()
const {
return data_.scalar_dest_rel == 1; }
1967 bool IsScalarClamped()
const {
return data_.scalar_clamp == 1; }
1996 return data_.src1_reg;
1998 return data_.src2_reg;
2000 return data_.src3_reg;
2014 return static_cast<bool>(data_.src1_sel);
2016 return static_cast<bool>(data_.src2_sel);
2018 return static_cast<bool>(data_.src3_sel);
2037 return static_cast<bool>(data_.const_0_rel_abs);
2039 return static_cast<bool>(
IsSrcTemp(1) ? data_.const_0_rel_abs : data_.const_1_rel_abs);
2042 : data_.const_1_rel_abs);
2056 return data_.src1_swiz;
2058 return data_.src2_swiz;
2060 return data_.src3_swiz;
2074 return data_.src1_reg_negate == 1;
2076 return data_.src2_reg_negate == 1;
2078 return data_.src3_reg_negate == 1;
2087 return (
static_cast<u32
>(data_.scalar_opc) & 1) | (data_.src3_sel << 1) |
2088 (data_.src3_swiz & 0x3C);
2093 return ((swizzle >> (2 * component_index)) + component_index) & 3;
2123 if (!
IsExport() || !IsScalarDestRelative()) {
2144 u32 vector_dest_rel : 1;
2145 u32 abs_constants : 1;
2146 u32 scalar_dest : 6;
2147 u32 scalar_dest_rel : 1;
2157 u32 vector_write_mask : 4;
2158 u32 scalar_write_mask : 4;
2159 u32 vector_clamp : 1;
2160 u32 scalar_clamp : 1;
2167 u32 src3_reg_negate : 1;
2168 u32 src2_reg_negate : 1;
2169 u32 src1_reg_negate : 1;
2170 u32 pred_condition : 1;
2171 u32 is_predicated : 1;
2174 u32 const_1_rel_abs : 1;
2175 u32 const_0_rel_abs : 1;
#define REX_UNHANDLED_CASE(var)
Definition assert.h:119
#define REX_ASSERT(cond,...)
Definition assert.h:84
Fetch constant layouts, texture sampling enums and limits.
AnisoFilter
Definition fetch.h:73
@ kUseFetchConst
Definition fetch.h:80
TextureFilter
Definition fetch.h:65
@ kUseFetchConst
Definition fetch.h:69
FetchOpDimension
Definition fetch.h:93
const AluVectorOpcodeTraits kAluVectorOpcodeTraits[32]
const AluVectorOpcodeTraits & GetAluVectorOpcodeTraits(AluVectorOpcode opcode)
Definition ucode.h:1820
AddressingMode
Definition ucode.h:134
@ kAbsolute
Definition ucode.h:138
@ kRelative
Definition ucode.h:136
const AluScalarOpcodeTraits & GetAluScalarOpcodeTraits(AluScalarOpcode opcode)
Definition ucode.h:1321
constexpr bool HasControlFlowCondExecCleanPredicate(ControlFlowOpcode opcode)
Definition ucode.h:127
ControlFlowOpcode
Definition ucode.h:57
@ kCondCall
Definition ucode.h:89
@ kLoopStart
Definition ucode.h:85
@ kMarkVSFetchDone
Definition ucode.h:103
@ kCondExec
Definition ucode.h:63
@ kCondExecPred
Definition ucode.h:76
@ kCondExecEnd
Definition ucode.h:69
@ kCondExecPredCleanEnd
Definition ucode.h:101
@ kExecEnd
Definition ucode.h:61
@ kCondExecPredClean
Definition ucode.h:99
@ kCondExecPredEnd
Definition ucode.h:83
@ kLoopEnd
Definition ucode.h:87
FetchOpcode
Definition ucode.h:424
@ kGetTextureGradients
Definition ucode.h:466
@ kGetTextureBorderColorFrac
Definition ucode.h:449
@ kGetTextureComputedLOD
Definition ucode.h:459
@ kTextureFetch
Definition ucode.h:442
@ kSetTextureLOD
Definition ucode.h:482
@ kSetTextureGradientsVert
Definition ucode.h:486
@ kGetTextureWeights
Definition ucode.h:479
@ kSetTextureGradientsHorz
Definition ucode.h:484
constexpr bool IsControlFlowOpcodeExec(ControlFlowOpcode opcode)
Definition ucode.h:107
AluScalarOpcode
Definition ucode.h:760
@ kMulsc0
Definition ucode.h:1265
@ kMulsPrev2
Definition ucode.h:811
@ kRsqf
Definition ucode.h:996
@ kTruncs
Definition ucode.h:891
@ kAddsc0
Definition ucode.h:1269
@ kSubsPrev
Definition ucode.h:1050
@ kKillsOne
Definition ucode.h:1252
@ kSetpRstr
Definition ucode.h:1177
@ kMuls
Definition ucode.h:789
@ kCos
Definition ucode.h:1295
@ kSubsc1
Definition ucode.h:1275
@ kSetpNe
Definition ucode.h:1082
@ kFrcs
Definition ucode.h:881
@ kSetpEq
Definition ucode.h:1066
@ kRcpf
Definition ucode.h:960
@ kSeqs
Definition ucode.h:841
@ kSetpGe
Definition ucode.h:1114
@ kSetpClr
Definition ucode.h:1161
@ kRcpc
Definition ucode.h:945
@ kMaxs
Definition ucode.h:821
@ kSges
Definition ucode.h:861
@ kMulsPrev
Definition ucode.h:799
@ kSnes
Definition ucode.h:871
@ kKillsGe
Definition ucode.h:1222
@ kKillsGt
Definition ucode.h:1207
@ kAdds
Definition ucode.h:769
@ kLogc
Definition ucode.h:922
@ kSetpGt
Definition ucode.h:1098
@ kSubsc0
Definition ucode.h:1273
@ kMaxAs
Definition ucode.h:1018
@ kSetpInv
Definition ucode.h:1134
@ kAddsc1
Definition ucode.h:1271
@ kAddsPrev
Definition ucode.h:779
@ kRcp
Definition ucode.h:970
@ kSgts
Definition ucode.h:851
@ kSqrt
Definition ucode.h:1262
@ kSubs
Definition ucode.h:1040
@ kMaxAsf
Definition ucode.h:1030
@ kFloors
Definition ucode.h:901
@ kMulsc1
Definition ucode.h:1267
@ kRsq
Definition ucode.h:1006
@ kKillsNe
Definition ucode.h:1237
@ kKillsEq
Definition ucode.h:1192
@ kExp
Definition ucode.h:911
@ kSetpPop
Definition ucode.h:1150
@ kMins
Definition ucode.h:831
@ kRsqc
Definition ucode.h:983
@ kLog
Definition ucode.h:932
@ kSin
Definition ucode.h:1285
@ kRetainPrev
Definition ucode.h:1304
constexpr FetchDestinationSwizzle GetFetchDestinationComponentSwizzle(u32 swizzle, u32 component)
Definition ucode.h:507
AluVectorOpcode
Definition ucode.h:1327
@ kDp3
Definition ucode.h:1542
@ kSetpGtPush
Definition ucode.h:1671
@ kKillEq
Definition ucode.h:1708
@ kSetpEqPush
Definition ucode.h:1633
@ kFloor
Definition ucode.h:1469
@ kFrc
Definition ucode.h:1443
@ kKillGt
Definition ucode.h:1726
@ kDst
Definition ucode.h:1774
@ kSeq
Definition ucode.h:1391
@ kMad
Definition ucode.h:1482
@ kSgt
Definition ucode.h:1404
@ kCndGe
Definition ucode.h:1508
@ kMul
Definition ucode.h:1352
@ kSne
Definition ucode.h:1430
@ kSge
Definition ucode.h:1417
@ kCndEq
Definition ucode.h:1495
@ kMax4
Definition ucode.h:1614
@ kKillNe
Definition ucode.h:1762
@ kTrunc
Definition ucode.h:1456
@ kMaxA
Definition ucode.h:1789
@ kKillGe
Definition ucode.h:1744
@ kDp4
Definition ucode.h:1532
@ kDp2Add
Definition ucode.h:1552
@ kSetpNePush
Definition ucode.h:1652
@ kCndGt
Definition ucode.h:1521
@ kSetpGePush
Definition ucode.h:1690
@ kCube
Definition ucode.h:1596
ExportRegister
Definition ucode.h:1878
@ kPSColor1
Definition ucode.h:1915
@ kVSInterpolator9
Definition ucode.h:1890
@ kVSInterpolator0
Definition ucode.h:1881
@ kVSInterpolator6
Definition ucode.h:1887
@ kVSInterpolator13
Definition ucode.h:1894
@ kVSInterpolator2
Definition ucode.h:1883
@ kVSInterpolator3
Definition ucode.h:1884
@ kVSPosition
Definition ucode.h:1900
@ kPSColor2
Definition ucode.h:1916
@ kVSInterpolator5
Definition ucode.h:1886
@ kVSInterpolator14
Definition ucode.h:1895
@ kVSInterpolator8
Definition ucode.h:1889
@ kPSColor0
Definition ucode.h:1914
@ kPSDepth
Definition ucode.h:1921
@ kVSInterpolator10
Definition ucode.h:1891
@ kVSInterpolator11
Definition ucode.h:1892
@ kVSInterpolator1
Definition ucode.h:1882
@ kVSPointSizeEdgeFlagKillVertex
Definition ucode.h:1910
@ kVSInterpolator4
Definition ucode.h:1885
@ kPSColor3
Definition ucode.h:1917
@ kVSInterpolator7
Definition ucode.h:1888
@ kVSInterpolator12
Definition ucode.h:1893
@ kVSInterpolator15
Definition ucode.h:1896
u32 GetAluVectorOpNeededSourceComponents(AluVectorOpcode vector_opcode, u32 src_index, u32 used_result_components)
Definition ucode.h:1831
FetchDestinationSwizzle
Definition ucode.h:490
void UnpackControlFlowInstructions(const u32 *dwords, ControlFlowInstruction *out_ab)
Definition ucode.h:413
constexpr u32 kMaxMemExportElementCount
Definition ucode.h:1875
AluOpChangedState
Definition ucode.h:731
@ kAluOpChangedStatePixelKill
Definition ucode.h:738
@ kAluOpChangedStateAddressRegister
Definition ucode.h:734
@ kAluOpChangedStatePredicate
Definition ucode.h:736
AllocType
Definition ucode.h:142
const AluScalarOpcodeTraits kAluScalarOpcodeTraits[64]
constexpr bool IsControlFlowOpcodeEnd(ControlFlowOpcode opcode)
Definition ucode.h:117
@ kAdd
Definition input_keys.h:155
Xenos pipeline state, shader and EDRAM enums.
ArbitraryFilter
Definition state.h:209
SignedRepeatingFractionMode
Definition state.h:202
u32 const_address_register_relative
u32 GetScalarConstRegOpSrcTempReg() const
Definition ucode.h:2086
static constexpr bool IsSrcTempValueAbsolute(u32 src_reg)
Definition ucode.h:1986
bool IsConst1Addressed() const
Definition ucode.h:1948
u32 GetScalarOpResultWriteMask() const
Definition ucode.h:2111
bool IsConstAddressRegisterRelative() const
Definition ucode.h:1953
u32 GetSrcSwizzle(size_t i) const
Definition ucode.h:2053
u32 GetConstant0WriteMask() const
Definition ucode.h:2122
static constexpr bool IsSrcTempRelative(u32 src_reg)
Definition ucode.h:1980
static constexpr u32 GetSwizzledComponentIndex(u32 swizzle, u32 component_index)
Definition ucode.h:2092
bool IsSrcTemp(size_t i) const
Definition ucode.h:2011
bool IsSrcNegated(size_t i) const
Definition ucode.h:2071
bool IsSrcConstAddressed(size_t i) const
Definition ucode.h:2034
bool HasAbsConstants() const
Definition ucode.h:1944
u32 GetSrcReg(size_t i) const
Definition ucode.h:1993
static constexpr u32 GetSrcTempReg(u32 src_reg)
Definition ucode.h:1974
bool IsExport() const
Definition ucode.h:1937
bool IsConst0Addressed() const
Definition ucode.h:1946
u32 GetConstant1WriteMask() const
Definition ucode.h:2132
u32 GetVectorOpResultWriteMask() const
Definition ucode.h:2100
u32 GetScalarWriteMask() const
Definition ucode.h:1964
bool GetPredicateCondition() const
Definition ucode.h:1941
u32 GetVectorWriteMask() const
Definition ucode.h:1957
AluOpChangedState changed_state
Definition ucode.h:1314
u32 operand_count
Definition ucode.h:1310
const char * name
Definition ucode.h:1308
bool single_operand_is_two_component
Definition ucode.h:1312
const char * name
Definition ucode.h:1793
u32 operand_components_used[3]
Definition ucode.h:1795
u32 GetOperandCount() const
Definition ucode.h:1802
AluOpChangedState changed_state
Definition ucode.h:1797
bool GetCondition() const
Definition ucode.h:306
bool IsPredicated() const
Definition ucode.h:303
bool GetCondition() const
Definition ucode.h:197
u32 GetSequence() const
Definition ucode.h:194
bool GetCondition() const
Definition ucode.h:226
bool IsPredicateClean() const
Definition ucode.h:224
u32 GetSequence() const
Definition ucode.h:222
bool GetCondition() const
Definition ucode.h:346
bool IsPredicated() const
Definition ucode.h:343
u32 GetSequence() const
Definition ucode.h:158
bool IsPredicateClean() const
Definition ucode.h:165
u32 GetAddress() const
Definition ucode.h:274
bool GetCondition() const
Definition ucode.h:280
u32 GetLoopID() const
Definition ucode.h:276
bool IsPredicatedBreak() const
Definition ucode.h:278
u32 GetAddress() const
Definition ucode.h:250
u32 GetLoopID() const
Definition ucode.h:254
bool IsRepeat() const
Definition ucode.h:252
u32 GetFetchConstantIndex() const
Definition ucode.h:592
bool HasMipFilter() const
Definition ucode.h:612
bool HasAnisoFilter() const
Definition ucode.h:615
bool HasMagFilter() const
Definition ucode.h:606
bool HasVolMinFilter() const
Definition ucode.h:623
bool GetPredicateCondition() const
Definition ucode.h:590
bool HasVolMagFilter() const
Definition ucode.h:618
bool HasMinFilter() const
Definition ucode.h:609
bool IsFetchValidOnly() const
Definition ucode.h:603
u32 GetFetchConstantIndex() const
Definition ucode.h:519
bool IsMiniFetch() const
Definition ucode.h:532
int GetExpAdjust() const
Definition ucode.h:536
u32 GetSrcReg() const
Definition ucode.h:525
u32 GetPrefetchCount() const
Definition ucode.h:530
bool IsIndexRounded() const
Definition ucode.h:542
u32 GetStride() const
Definition ucode.h:544
bool GetPredicateCondition() const
Definition ucode.h:517
bool IsNormalized() const
Definition ucode.h:539
i32 GetOffset() const
Definition ucode.h:546
Integer types, byte order wrappers and size literals.
ControlFlowLoopEndInstruction loop_end
Definition ucode.h:389
ControlFlowLoopStartInstruction loop_start
Definition ucode.h:388
ControlFlowCondExecInstruction cond_exec
Definition ucode.h:386
ControlFlowExecInstruction exec
Definition ucode.h:385
ControlFlowReturnInstruction ret
Definition ucode.h:391
ControlFlowCondCallInstruction cond_call
Definition ucode.h:390
ControlFlowCondJmpInstruction cond_jmp
Definition ucode.h:392
ControlFlowAllocInstruction alloc
Definition ucode.h:393
ControlFlowCondExecPredInstruction cond_exec_pred
Definition ucode.h:387
bool GetPredicateCondition() const
Definition ucode.h:686
const TextureFetchInstruction & GetTextureFetch() const
Definition ucode.h:697
const VertexFetchInstruction & GetVertexFetch() const
Definition ucode.h:695