From 9a76a2d0611fc0c35b665fb886d437e8f4d5b4df Mon Sep 17 00:00:00 2001 From: Tony Wasserka Date: Sun, 27 Jul 2014 14:58:30 +0200 Subject: Pica: Add primitive assembly stage. --- src/video_core/primitive_assembly.cpp | 52 +++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/video_core/primitive_assembly.cpp (limited to 'src/video_core/primitive_assembly.cpp') diff --git a/src/video_core/primitive_assembly.cpp b/src/video_core/primitive_assembly.cpp new file mode 100644 index 000000000..b2196d13c --- /dev/null +++ b/src/video_core/primitive_assembly.cpp @@ -0,0 +1,52 @@ +// Copyright 2014 Citra Emulator Project +// Licensed under GPLv2 +// Refer to the license.txt file included. + +#include "pica.h" +#include "primitive_assembly.h" +#include "vertex_shader.h" + +namespace Pica { + +namespace PrimitiveAssembly { + +static OutputVertex buffer[2]; +static int buffer_index = 0; // TODO: reset this on emulation restart + +void SubmitVertex(OutputVertex& vtx) +{ + switch (registers.triangle_topology) { + case Regs::TriangleTopology::List: + case Regs::TriangleTopology::ListIndexed: + if (buffer_index < 2) { + buffer[buffer_index++] = vtx; + } else { + buffer_index = 0; + + // TODO + // Clipper::ProcessTriangle(buffer[0], buffer[1], vtx); + } + break; + + case Regs::TriangleTopology::Fan: + if (buffer_index == 2) { + buffer_index = 0; + + // TODO + // Clipper::ProcessTriangle(buffer[0], buffer[1], vtx); + + buffer[1] = vtx; + } else { + buffer[buffer_index++] = vtx; + } + break; + + default: + ERROR_LOG(GPU, "Unknown triangle mode %x:", (int)registers.triangle_topology.Value()); + break; + } +} + +} // namespace + +} // namespace -- cgit v1.2.3 From 94aa9da562457e1fed4911d1cda770c3e42bd419 Mon Sep 17 00:00:00 2001 From: Tony Wasserka Date: Sun, 27 Jul 2014 17:34:11 +0200 Subject: Pica: Add triangle clipper. --- src/video_core/primitive_assembly.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'src/video_core/primitive_assembly.cpp') diff --git a/src/video_core/primitive_assembly.cpp b/src/video_core/primitive_assembly.cpp index b2196d13c..2354ffb99 100644 --- a/src/video_core/primitive_assembly.cpp +++ b/src/video_core/primitive_assembly.cpp @@ -2,6 +2,7 @@ // Licensed under GPLv2 // Refer to the license.txt file included. +#include "clipper.h" #include "pica.h" #include "primitive_assembly.h" #include "vertex_shader.h" @@ -23,8 +24,7 @@ void SubmitVertex(OutputVertex& vtx) } else { buffer_index = 0; - // TODO - // Clipper::ProcessTriangle(buffer[0], buffer[1], vtx); + Clipper::ProcessTriangle(buffer[0], buffer[1], vtx); } break; @@ -32,8 +32,7 @@ void SubmitVertex(OutputVertex& vtx) if (buffer_index == 2) { buffer_index = 0; - // TODO - // Clipper::ProcessTriangle(buffer[0], buffer[1], vtx); + Clipper::ProcessTriangle(buffer[0], buffer[1], vtx); buffer[1] = vtx; } else { -- cgit v1.2.3