mirror of
https://github.com/dolphin-emu/fifoplayer.git
synced 2026-01-31 01:05:16 +01:00
Remove hacks, it finally makes sense.
This commit is contained in:
@@ -55,10 +55,25 @@ enum
|
||||
#pragma pack(4)
|
||||
union TVtxDesc
|
||||
{
|
||||
// TODO: Bit order?
|
||||
u64 Hex;
|
||||
struct
|
||||
struct
|
||||
{
|
||||
// Reversed
|
||||
#if BYTE_ORDER == BIG_ENDIAN
|
||||
u32 :31;
|
||||
u32 Tex7Coord : 2;
|
||||
u32 Tex6Coord : 2;
|
||||
u32 Tex5Coord : 2;
|
||||
u32 Tex4Coord : 2;
|
||||
u32 Tex3Coord : 2;
|
||||
u32 Tex2Coord : 2;
|
||||
u32 Tex1Coord : 2;
|
||||
u32 Tex0Coord : 2;
|
||||
u32 Color1 : 2;
|
||||
u32 Color0 : 2;
|
||||
u32 Normal : 2;
|
||||
u32 Position : 2;
|
||||
u32 Tex7MatIdx : 1;
|
||||
u32 Tex6MatIdx : 1;
|
||||
u32 Tex5MatIdx : 1;
|
||||
u32 Tex4MatIdx : 1;
|
||||
@@ -67,29 +82,7 @@ union TVtxDesc
|
||||
u32 Tex1MatIdx : 1;
|
||||
u32 Tex0MatIdx : 1;
|
||||
u32 PosMatIdx : 1;
|
||||
|
||||
u32 Color1 : 1; // TODO
|
||||
u32 Color0 : 2;
|
||||
u32 Normal : 2;
|
||||
u32 Position : 2;
|
||||
u32 Tex7MatIdx : 1;
|
||||
|
||||
u32 Tex3Coord : 1; // TODO
|
||||
u32 Tex2Coord : 2;
|
||||
u32 Tex1Coord : 2;
|
||||
u32 Tex0Coord : 2;
|
||||
u32 Color1b : 1;
|
||||
|
||||
u32 Tex7Coord : 1; // TODO
|
||||
u32 Tex6Coord : 2;
|
||||
u32 Tex5Coord : 2;
|
||||
u32 Tex4Coord : 2;
|
||||
u32 Tex3Coordb : 1;
|
||||
|
||||
u32 :31;
|
||||
u32 Tex7Coordb : 1;
|
||||
|
||||
#if 0
|
||||
#elif BYTE_ORDER == LITTLE_ENDIAN
|
||||
u32 PosMatIdx : 1;
|
||||
u32 Tex0MatIdx : 1;
|
||||
u32 Tex1MatIdx : 1;
|
||||
@@ -113,6 +106,8 @@ union TVtxDesc
|
||||
u32 Tex6Coord : 2;
|
||||
u32 Tex7Coord : 2;
|
||||
u32 :31;
|
||||
#else
|
||||
#error endianness not defined
|
||||
#endif
|
||||
};
|
||||
|
||||
@@ -126,7 +121,7 @@ union TVtxDesc
|
||||
union UVAT_group0
|
||||
{
|
||||
u32 Hex;
|
||||
struct
|
||||
struct
|
||||
{
|
||||
// TODO: Is it necessary to reverse the bitfield order? oO
|
||||
#if BYTE_ORDER == BIG_ENDIAN
|
||||
|
||||
@@ -91,40 +91,36 @@ void LoadCPReg(u32 subCmd, u32 value, CPMemory &cpMem)
|
||||
switch (subCmd & 0xF0)
|
||||
{
|
||||
case 0x50:
|
||||
// TODO: 0x50 and 0x60 still look wrong, they only have bitfields per byte reversed (not in the whole structure)
|
||||
cpMem.vtxDesc.Hex &= ~le64toh(0x1FFFF); // keep the Upper bits
|
||||
cpMem.vtxDesc.Hex |= le64toh(value);
|
||||
cpMem.vtxDesc.Hex &= ~0x1FFFF; // keep the Upper bits
|
||||
cpMem.vtxDesc.Hex |= value;
|
||||
break;
|
||||
|
||||
case 0x60:
|
||||
cpMem.vtxDesc.Hex &= le64toh(0x1FFFF); // keep the lower 17Bits
|
||||
cpMem.vtxDesc.Hex |= le64toh((u64)value * 131072);
|
||||
cpMem.vtxDesc.Hex &= 0x1FFFF; // keep the lower 17Bits
|
||||
cpMem.vtxDesc.Hex |= (u64)value * 131072;
|
||||
break;
|
||||
|
||||
case 0x70:
|
||||
// _assert_((subCmd & 0x0F) < 8);
|
||||
cpMem.vtxAttr[subCmd & 7].g0.Hex = /*le32toh(*/value/*)*/;
|
||||
cpMem.vtxAttr[subCmd & 7].g0.Hex = value;
|
||||
break;
|
||||
|
||||
case 0x80:
|
||||
// _assert_((subCmd & 0x0F) < 8);
|
||||
cpMem.vtxAttr[subCmd & 7].g1.Hex = /*le32toh(*/value/*)*/;
|
||||
cpMem.vtxAttr[subCmd & 7].g1.Hex = value;
|
||||
break;
|
||||
|
||||
case 0x90:
|
||||
// _assert_((subCmd & 0x0F) < 8);
|
||||
cpMem.vtxAttr[subCmd & 7].g2.Hex = /*le32toh(*/value/*)*/;
|
||||
cpMem.vtxAttr[subCmd & 7].g2.Hex = value;
|
||||
break;
|
||||
|
||||
case 0xA0:
|
||||
// TODO: Endianness?
|
||||
cpMem.arrayBases[subCmd & 0xF] = le32toh(value);
|
||||
cpMem.arrayBases[subCmd & 0xF] = value;
|
||||
break;
|
||||
|
||||
case 0xB0:
|
||||
// TODO: Endianness?
|
||||
cpMem.arrayStrides[subCmd & 0xF] = le32toh(value & 0xFF);
|
||||
printf("Be careful :p\n");
|
||||
cpMem.arrayStrides[subCmd & 0xF] = value & 0xFF;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -140,14 +136,14 @@ void CalculateVertexElementSizes(int sizes[], int vatIndex, const CPMemory &cpMe
|
||||
|
||||
const u32 tcElements[8] =
|
||||
{
|
||||
vtxAttr.g0.Tex0CoordElements, vtxAttr.g1.Tex1CoordElements, vtxAttr.g1.Tex2CoordElements,
|
||||
vtxAttr.g0.Tex0CoordElements, vtxAttr.g1.Tex1CoordElements, vtxAttr.g1.Tex2CoordElements,
|
||||
vtxAttr.g1.Tex3CoordElements, vtxAttr.g1.Tex4CoordElements, vtxAttr.g2.Tex5CoordElements,
|
||||
vtxAttr.g2.Tex6CoordElements, vtxAttr.g2.Tex7CoordElements
|
||||
};
|
||||
|
||||
const u32 tcFormat[8] =
|
||||
{
|
||||
vtxAttr.g0.Tex0CoordFormat, vtxAttr.g1.Tex1CoordFormat, vtxAttr.g1.Tex2CoordFormat,
|
||||
vtxAttr.g0.Tex0CoordFormat, vtxAttr.g1.Tex1CoordFormat, vtxAttr.g1.Tex2CoordFormat,
|
||||
vtxAttr.g1.Tex3CoordFormat, vtxAttr.g1.Tex4CoordFormat, vtxAttr.g2.Tex5CoordFormat,
|
||||
vtxAttr.g2.Tex6CoordFormat, vtxAttr.g2.Tex7CoordFormat
|
||||
};
|
||||
|
||||
1
source/data_3.h
Normal file
1
source/data_3.h
Normal file
File diff suppressed because one or more lines are too long
@@ -10,7 +10,7 @@ typedef uint64_t u64;
|
||||
typedef uint32_t u32;
|
||||
typedef uint8_t u8;
|
||||
|
||||
#include "data.h"
|
||||
#include "data_3.h"
|
||||
|
||||
std::map<u32, std::vector<u8> > memory_map; // map of memory chunks (indexed by starting address)
|
||||
|
||||
@@ -236,7 +236,7 @@ struct FifoFrameData
|
||||
std::vector<MemoryUpdate> memoryUpdates;
|
||||
};
|
||||
|
||||
#define ENABLE_CONSOLE 1
|
||||
#define ENABLE_CONSOLE 0
|
||||
struct FifoData
|
||||
{
|
||||
std::vector<FifoFrameData> frames;
|
||||
@@ -377,6 +377,8 @@ struct AnalyzedFrameInfo
|
||||
#include "BPMemory.h"
|
||||
#include "FifoAnalyzer.h"
|
||||
|
||||
#include <unistd.h>
|
||||
|
||||
class FifoDataAnalyzer
|
||||
{
|
||||
public:
|
||||
@@ -514,6 +516,7 @@ public:
|
||||
else
|
||||
{
|
||||
printf("Invalid fifo command 0x%x\n", cmd);
|
||||
sleep(1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -535,8 +538,6 @@ GXRModeObj *rmode;
|
||||
u32 fb = 0;
|
||||
u32 first_frame = 1;
|
||||
|
||||
#include <unistd.h>
|
||||
|
||||
void Init()
|
||||
{
|
||||
VIDEO_Init();
|
||||
|
||||
Reference in New Issue
Block a user