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