aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/video_core/pica.h
diff options
context:
space:
mode:
authorGravatar Tony Wasserka <NeoBrainX@gmail.com>2014-07-26 16:19:11 +0200
committerGravatar Tony Wasserka <NeoBrainX@gmail.com>2014-08-12 13:47:31 +0200
commitd443f0a92183c94eaa0c33dddbb450eb8fe2fd07 (patch)
tree6d7f1d0a00d63ea1a60e0d77df0b8bd533e53cfd /src/video_core/pica.h
parent1a43f694777d356349c1e8a76eded883937efb87 (diff)
Pica: Implement vertex loading.
Diffstat (limited to 'src/video_core/pica.h')
-rw-r--r--src/video_core/pica.h29
1 files changed, 22 insertions, 7 deletions
diff --git a/src/video_core/pica.h b/src/video_core/pica.h
index 5bd7f416..faf124c3 100644
--- a/src/video_core/pica.h
+++ b/src/video_core/pica.h
@@ -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)