summaryrefslogtreecommitdiff
path: root/src/video_core/primitive_assembly.cpp
diff options
context:
space:
mode:
authorGravatar bunnei2017-09-07 23:02:59 -0400
committerGravatar GitHub2017-09-07 23:02:59 -0400
commit11baa40d75d8a479bd738a05e91bba6f09856fe5 (patch)
tree2a7affcefd22d5332970c7a28a04c139aa9a6654 /src/video_core/primitive_assembly.cpp
parentMerge pull request #2918 from jroweboy/remove-debug (diff)
parentpica/command_processor: build geometry pipeline and run geometry shader (diff)
downloadyuzu-11baa40d75d8a479bd738a05e91bba6f09856fe5.tar.gz
yuzu-11baa40d75d8a479bd738a05e91bba6f09856fe5.tar.xz
yuzu-11baa40d75d8a479bd738a05e91bba6f09856fe5.zip
Merge pull request #2865 from wwylele/gs++
PICA: implemented geometry shader
Diffstat (limited to 'src/video_core/primitive_assembly.cpp')
-rw-r--r--src/video_core/primitive_assembly.cpp15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/video_core/primitive_assembly.cpp b/src/video_core/primitive_assembly.cpp
index acd2ac5e2..9c3dd4cab 100644
--- a/src/video_core/primitive_assembly.cpp
+++ b/src/video_core/primitive_assembly.cpp
@@ -17,15 +17,18 @@ template <typename VertexType>
17void PrimitiveAssembler<VertexType>::SubmitVertex(const VertexType& vtx, 17void PrimitiveAssembler<VertexType>::SubmitVertex(const VertexType& vtx,
18 TriangleHandler triangle_handler) { 18 TriangleHandler triangle_handler) {
19 switch (topology) { 19 switch (topology) {
20 // TODO: Figure out what's different with TriangleTopology::Shader.
21 case PipelineRegs::TriangleTopology::List: 20 case PipelineRegs::TriangleTopology::List:
22 case PipelineRegs::TriangleTopology::Shader: 21 case PipelineRegs::TriangleTopology::Shader:
23 if (buffer_index < 2) { 22 if (buffer_index < 2) {
24 buffer[buffer_index++] = vtx; 23 buffer[buffer_index++] = vtx;
25 } else { 24 } else {
26 buffer_index = 0; 25 buffer_index = 0;
27 26 if (topology == PipelineRegs::TriangleTopology::Shader && winding) {
28 triangle_handler(buffer[0], buffer[1], vtx); 27 triangle_handler(buffer[1], buffer[0], vtx);
28 winding = false;
29 } else {
30 triangle_handler(buffer[0], buffer[1], vtx);
31 }
29 } 32 }
30 break; 33 break;
31 34
@@ -51,9 +54,15 @@ void PrimitiveAssembler<VertexType>::SubmitVertex(const VertexType& vtx,
51} 54}
52 55
53template <typename VertexType> 56template <typename VertexType>
57void PrimitiveAssembler<VertexType>::SetWinding() {
58 winding = true;
59}
60
61template <typename VertexType>
54void PrimitiveAssembler<VertexType>::Reset() { 62void PrimitiveAssembler<VertexType>::Reset() {
55 buffer_index = 0; 63 buffer_index = 0;
56 strip_ready = false; 64 strip_ready = false;
65 winding = false;
57} 66}
58 67
59template <typename VertexType> 68template <typename VertexType>