123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277 |
- #pragma once
- #include "Common/BitSet.h"
- #include "Common/CommonTypes.h"
- enum
- {
- ARRAY_POSITION = 0,
- ARRAY_NORMAL = 1,
- ARRAY_COLOR = 2,
- ARRAY_COLOR2 = 3,
- ARRAY_TEXCOORD0 = 4,
- };
- enum
- {
- NOT_PRESENT = 0,
- DIRECT = 1,
- INDEX8 = 2,
- INDEX16 = 3,
- MASK_INDEXED = 2,
- };
- enum
- {
- FORMAT_UBYTE = 0,
- FORMAT_BYTE = 1,
- FORMAT_USHORT = 2,
- FORMAT_SHORT = 3,
- FORMAT_FLOAT = 4,
- };
- enum
- {
- FORMAT_16B_565 = 0,
- FORMAT_24B_888 = 1,
- FORMAT_32B_888x = 2,
- FORMAT_16B_4444 = 3,
- FORMAT_24B_6666 = 4,
- FORMAT_32B_8888 = 5,
- };
- #pragma pack(4)
- union TVtxDesc
- {
- u64 Hex;
- struct
- {
-
-
- u64 PosMatIdx : 1;
- u64 Tex0MatIdx : 1;
- u64 Tex1MatIdx : 1;
- u64 Tex2MatIdx : 1;
- u64 Tex3MatIdx : 1;
- u64 Tex4MatIdx : 1;
- u64 Tex5MatIdx : 1;
- u64 Tex6MatIdx : 1;
- u64 Tex7MatIdx : 1;
-
-
-
-
- u64 Position : 2;
- u64 Normal : 2;
- u64 Color0 : 2;
- u64 Color1 : 2;
- u64 Tex0Coord : 2;
- u64 Tex1Coord : 2;
- u64 Tex2Coord : 2;
- u64 Tex3Coord : 2;
- u64 Tex4Coord : 2;
- u64 Tex5Coord : 2;
- u64 Tex6Coord : 2;
- u64 Tex7Coord : 2;
- u64 :31;
- };
- struct
- {
- u32 Hex0, Hex1;
- };
-
- u32 GetVertexArrayStatus(int idx)
- {
- return (Hex >> (9 + idx * 2)) & 0x3;
- }
- };
- union UVAT_group0
- {
- u32 Hex;
- struct
- {
-
- u32 PosElements : 1;
- u32 PosFormat : 3;
- u32 PosFrac : 5;
-
- u32 NormalElements : 1;
- u32 NormalFormat : 3;
-
- u32 Color0Elements : 1;
- u32 Color0Comp : 3;
-
- u32 Color1Elements : 1;
- u32 Color1Comp : 3;
-
- u32 Tex0CoordElements : 1;
- u32 Tex0CoordFormat : 3;
- u32 Tex0Frac : 5;
-
- u32 ByteDequant : 1;
- u32 NormalIndex3 : 1;
- };
- };
- union UVAT_group1
- {
- u32 Hex;
- struct
- {
-
- u32 Tex1CoordElements : 1;
- u32 Tex1CoordFormat : 3;
- u32 Tex1Frac : 5;
-
- u32 Tex2CoordElements : 1;
- u32 Tex2CoordFormat : 3;
- u32 Tex2Frac : 5;
-
- u32 Tex3CoordElements : 1;
- u32 Tex3CoordFormat : 3;
- u32 Tex3Frac : 5;
-
- u32 Tex4CoordElements : 1;
- u32 Tex4CoordFormat : 3;
-
- u32 : 1;
- };
- };
- union UVAT_group2
- {
- u32 Hex;
- struct
- {
-
- u32 Tex4Frac : 5;
-
- u32 Tex5CoordElements : 1;
- u32 Tex5CoordFormat : 3;
- u32 Tex5Frac : 5;
-
- u32 Tex6CoordElements : 1;
- u32 Tex6CoordFormat : 3;
- u32 Tex6Frac : 5;
-
- u32 Tex7CoordElements : 1;
- u32 Tex7CoordFormat : 3;
- u32 Tex7Frac : 5;
- };
- };
- struct ColorAttr
- {
- u8 Elements;
- u8 Comp;
- };
- struct TexAttr
- {
- u8 Elements;
- u8 Format;
- u8 Frac;
- };
- struct TVtxAttr
- {
- u8 PosElements;
- u8 PosFormat;
- u8 PosFrac;
- u8 NormalElements;
- u8 NormalFormat;
- ColorAttr color[2];
- TexAttr texCoord[8];
- bool ByteDequant;
- u8 NormalIndex3;
- };
- union TMatrixIndexA
- {
- struct
- {
- u32 PosNormalMtxIdx : 6;
- u32 Tex0MtxIdx : 6;
- u32 Tex1MtxIdx : 6;
- u32 Tex2MtxIdx : 6;
- u32 Tex3MtxIdx : 6;
- };
- struct
- {
- u32 Hex : 30;
- u32 unused : 2;
- };
- };
- union TMatrixIndexB
- {
- struct
- {
- u32 Tex4MtxIdx : 6;
- u32 Tex5MtxIdx : 6;
- u32 Tex6MtxIdx : 6;
- u32 Tex7MtxIdx : 6;
- };
- struct
- {
- u32 Hex : 24;
- u32 unused : 8;
- };
- };
- #pragma pack()
- struct VAT
- {
- UVAT_group0 g0;
- UVAT_group1 g1;
- UVAT_group2 g2;
- };
- class VertexLoaderBase;
- struct CPState final
- {
- u32 array_bases[16];
- u32 array_strides[16];
- TMatrixIndexA matrix_index_a;
- TMatrixIndexB matrix_index_b;
- TVtxDesc vtx_desc;
-
- VAT vtx_attr[8];
-
- BitSet32 attr_dirty;
- bool bases_dirty;
- VertexLoaderBase* vertex_loaders[8];
- };
- class PointerWrap;
- extern void DoCPState(PointerWrap& p);
- extern void CopyPreprocessCPStateFromMain();
- extern CPState g_main_cp_state;
- extern CPState g_preprocess_cp_state;
- void LoadCPReg(u32 SubCmd, u32 Value, bool is_preprocess = false);
- void FillCPMemoryArray(u32 *memory);
|