|
|
|
@ -64,7 +64,7 @@ struct Regs {
|
|
|
|
|
|
|
|
|
|
inline u32 GetBaseAddress() const {
|
|
|
|
|
// TODO: Ugly, should fix PhysicalToVirtualAddress instead
|
|
|
|
|
return (base_address * 8) - Memory::FCRAM_PADDR + Memory::HEAP_GSP_VADDR;
|
|
|
|
|
return DecodeAddressRegister(base_address) - Memory::FCRAM_PADDR + Memory::HEAP_GSP_VADDR;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Descriptor for internal vertex attributes
|
|
|
|
@ -110,12 +110,12 @@ struct Regs {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
inline int GetNumElements(int n) const {
|
|
|
|
|
int sizes[] = {
|
|
|
|
|
u64 sizes[] = {
|
|
|
|
|
size0, size1, size2, size3,
|
|
|
|
|
size4, size5, size6, size7,
|
|
|
|
|
size8, size9, size10, size11
|
|
|
|
|
};
|
|
|
|
|
return sizes[n]+1;
|
|
|
|
|
return (int)sizes[n]+1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
inline int GetElementSizeInBytes(int n) const {
|
|
|
|
@ -128,7 +128,7 @@ struct Regs {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
inline int GetNumTotalAttributes() const {
|
|
|
|
|
return num_extra_attributes+1;
|
|
|
|
|
return (int)num_extra_attributes+1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Attribute loaders map the source vertex data to input attributes
|
|
|
|
@ -158,12 +158,12 @@ struct Regs {
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
inline int GetComponent(int n) const {
|
|
|
|
|
int components[] = {
|
|
|
|
|
u64 components[] = {
|
|
|
|
|
comp0, comp1, comp2, comp3,
|
|
|
|
|
comp4, comp5, comp6, comp7,
|
|
|
|
|
comp8, comp9, comp10, comp11
|
|
|
|
|
};
|
|
|
|
|
return components[n];
|
|
|
|
|
return (int)components[n];
|
|
|
|
|
}
|
|
|
|
|
} attribute_loaders[12];
|
|
|
|
|
} vertex_attributes;
|
|
|
|
@ -180,7 +180,16 @@ struct Regs {
|
|
|
|
|
};
|
|
|
|
|
} index_array;
|
|
|
|
|
|
|
|
|
|
INSERT_PADDING_WORDS(0xd8);
|
|
|
|
|
// Number of vertices to render
|
|
|
|
|
u32 num_vertices;
|
|
|
|
|
|
|
|
|
|
INSERT_PADDING_WORDS(0x5);
|
|
|
|
|
|
|
|
|
|
// These two trigger rendering of triangles
|
|
|
|
|
u32 trigger_draw;
|
|
|
|
|
u32 trigger_draw_indexed;
|
|
|
|
|
|
|
|
|
|
INSERT_PADDING_WORDS(0xd0);
|
|
|
|
|
|
|
|
|
|
#undef INSERT_PADDING_WORDS_HELPER1
|
|
|
|
|
#undef INSERT_PADDING_WORDS_HELPER2
|
|
|
|
@ -207,6 +216,9 @@ struct Regs {
|
|
|
|
|
ADD_FIELD(viewport_size_y);
|
|
|
|
|
ADD_FIELD(vertex_attributes);
|
|
|
|
|
ADD_FIELD(index_array);
|
|
|
|
|
ADD_FIELD(num_vertices);
|
|
|
|
|
ADD_FIELD(trigger_draw);
|
|
|
|
|
ADD_FIELD(trigger_draw_indexed);
|
|
|
|
|
|
|
|
|
|
#undef ADD_FIELD
|
|
|
|
|
#endif // _MSC_VER
|
|
|
|
@ -249,6 +261,9 @@ ASSERT_REG_POSITION(viewport_size_x, 0x41);
|
|
|
|
|
ASSERT_REG_POSITION(viewport_size_y, 0x43);
|
|
|
|
|
ASSERT_REG_POSITION(vertex_attributes, 0x200);
|
|
|
|
|
ASSERT_REG_POSITION(index_array, 0x227);
|
|
|
|
|
ASSERT_REG_POSITION(num_vertices, 0x228);
|
|
|
|
|
ASSERT_REG_POSITION(trigger_draw, 0x22e);
|
|
|
|
|
ASSERT_REG_POSITION(trigger_draw_indexed, 0x22f);
|
|
|
|
|
|
|
|
|
|
#undef ASSERT_REG_POSITION
|
|
|
|
|
#endif // !defined(_MSC_VER)
|
|
|
|
|