summaryrefslogtreecommitdiff
path: root/src/video_core/primitive_assembly.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/video_core/primitive_assembly.cpp')
-rw-r--r--src/video_core/primitive_assembly.cpp63
1 files changed, 31 insertions, 32 deletions
diff --git a/src/video_core/primitive_assembly.cpp b/src/video_core/primitive_assembly.cpp
index 68ea3c08a..343edb191 100644
--- a/src/video_core/primitive_assembly.cpp
+++ b/src/video_core/primitive_assembly.cpp
@@ -10,62 +10,61 @@
10 10
11namespace Pica { 11namespace Pica {
12 12
13template<typename VertexType> 13template <typename VertexType>
14PrimitiveAssembler<VertexType>::PrimitiveAssembler(Regs::TriangleTopology topology) 14PrimitiveAssembler<VertexType>::PrimitiveAssembler(Regs::TriangleTopology topology)
15 : topology(topology), buffer_index(0) { 15 : topology(topology), buffer_index(0) {
16} 16}
17 17
18template<typename VertexType> 18template <typename VertexType>
19void PrimitiveAssembler<VertexType>::SubmitVertex(VertexType& vtx, TriangleHandler triangle_handler) 19void PrimitiveAssembler<VertexType>::SubmitVertex(VertexType& vtx,
20{ 20 TriangleHandler triangle_handler) {
21 switch (topology) { 21 switch (topology) {
22 // TODO: Figure out what's different with TriangleTopology::Shader. 22 // TODO: Figure out what's different with TriangleTopology::Shader.
23 case Regs::TriangleTopology::List: 23 case Regs::TriangleTopology::List:
24 case Regs::TriangleTopology::Shader: 24 case Regs::TriangleTopology::Shader:
25 if (buffer_index < 2) { 25 if (buffer_index < 2) {
26 buffer[buffer_index++] = vtx; 26 buffer[buffer_index++] = vtx;
27 } else { 27 } else {
28 buffer_index = 0; 28 buffer_index = 0;
29 29
30 triangle_handler(buffer[0], buffer[1], vtx); 30 triangle_handler(buffer[0], buffer[1], vtx);
31 } 31 }
32 break; 32 break;
33 33
34 case Regs::TriangleTopology::Strip: 34 case Regs::TriangleTopology::Strip:
35 case Regs::TriangleTopology::Fan: 35 case Regs::TriangleTopology::Fan:
36 if (strip_ready) 36 if (strip_ready)
37 triangle_handler(buffer[0], buffer[1], vtx); 37 triangle_handler(buffer[0], buffer[1], vtx);
38 38
39 buffer[buffer_index] = vtx; 39 buffer[buffer_index] = vtx;
40 40
41 strip_ready |= (buffer_index == 1); 41 strip_ready |= (buffer_index == 1);
42 42
43 if (topology == Regs::TriangleTopology::Strip) 43 if (topology == Regs::TriangleTopology::Strip)
44 buffer_index = !buffer_index; 44 buffer_index = !buffer_index;
45 else if (topology == Regs::TriangleTopology::Fan) 45 else if (topology == Regs::TriangleTopology::Fan)
46 buffer_index = 1; 46 buffer_index = 1;
47 break; 47 break;
48 48
49 default: 49 default:
50 LOG_ERROR(HW_GPU, "Unknown triangle topology %x:", (int)topology); 50 LOG_ERROR(HW_GPU, "Unknown triangle topology %x:", (int)topology);
51 break; 51 break;
52 } 52 }
53} 53}
54 54
55template<typename VertexType> 55template <typename VertexType>
56void PrimitiveAssembler<VertexType>::Reset() { 56void PrimitiveAssembler<VertexType>::Reset() {
57 buffer_index = 0; 57 buffer_index = 0;
58 strip_ready = false; 58 strip_ready = false;
59} 59}
60 60
61template<typename VertexType> 61template <typename VertexType>
62void PrimitiveAssembler<VertexType>::Reconfigure(Regs::TriangleTopology topology) { 62void PrimitiveAssembler<VertexType>::Reconfigure(Regs::TriangleTopology topology) {
63 Reset(); 63 Reset();
64 this->topology = topology; 64 this->topology = topology;
65} 65}
66 66
67// explicitly instantiate use cases 67// explicitly instantiate use cases
68template 68template struct PrimitiveAssembler<Shader::OutputVertex>;
69struct PrimitiveAssembler<Shader::OutputVertex>;
70 69
71} // namespace 70} // namespace