summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSubv <subv2112@gmail.com>2015-08-22 22:09:00 -0500
committerSubv <subv2112@gmail.com>2015-08-30 15:46:22 -0500
commit12a11472f1cdc7a6071c1d161b09b56dab0bed51 (patch)
treed32924931af8a39c0c11f4fd485bfc386e7300d8
parentef7eb8bc4c2b761a5dc6623156694be057e7a416 (diff)
GPU: Implemented register 0x22A.
This is the equivalent of the "first" parameter in glDrawArrays, it tells the GPU the vertex index at which to start rendering. Register 0x22A doesn't affect indexed rendering.
-rw-r--r--src/video_core/command_processor.cpp3
-rw-r--r--src/video_core/pica.h7
2 files changed, 8 insertions, 2 deletions
diff --git a/src/video_core/command_processor.cpp b/src/video_core/command_processor.cpp
index d82e20f86..bfce080bb 100644
--- a/src/video_core/command_processor.cpp
+++ b/src/video_core/command_processor.cpp
@@ -231,7 +231,8 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) {
for (unsigned int index = 0; index < regs.num_vertices; ++index)
{
- unsigned int vertex = is_indexed ? (index_u16 ? index_address_16[index] : index_address_8[index]) : index;
+ // Indexed rendering doesn't use the start offset
+ unsigned int vertex = is_indexed ? (index_u16 ? index_address_16[index] : index_address_8[index]) : (index + regs.vertex_offset);
// -1 is a common special value used for primitive restart. Since it's unknown if
// the PICA supports it, and it would mess up the caching, guard against it here.
diff --git a/src/video_core/pica.h b/src/video_core/pica.h
index 58b924f9e..03a56afe6 100644
--- a/src/video_core/pica.h
+++ b/src/video_core/pica.h
@@ -757,7 +757,12 @@ struct Regs {
// Number of vertices to render
u32 num_vertices;
- INSERT_PADDING_WORDS(0x5);
+ INSERT_PADDING_WORDS(0x1);
+
+ // The index of the first vertex to render
+ u32 vertex_offset;
+
+ INSERT_PADDING_WORDS(0x3);
// These two trigger rendering of triangles
u32 trigger_draw;