From e38e79e27eff53e84a2c88c284c6cbdec5f74762 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Sat, 18 Apr 2020 20:39:04 -0400 Subject: [PATCH 1/3] primitive_assembly: Make use of std::array where applicable Same behavior, minus any potential implicit array to pointer decay. --- src/video_core/primitive_assembly.cpp | 2 +- src/video_core/primitive_assembly.h | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/video_core/primitive_assembly.cpp b/src/video_core/primitive_assembly.cpp index cdc484d67..182a69772 100644 --- a/src/video_core/primitive_assembly.cpp +++ b/src/video_core/primitive_assembly.cpp @@ -11,7 +11,7 @@ namespace Pica { template PrimitiveAssembler::PrimitiveAssembler(PipelineRegs::TriangleTopology topology) - : topology(topology), buffer_index(0) {} + : topology(topology) {} template void PrimitiveAssembler::SubmitVertex(const VertexType& vtx, diff --git a/src/video_core/primitive_assembly.h b/src/video_core/primitive_assembly.h index 404bc5316..f453ac82e 100644 --- a/src/video_core/primitive_assembly.h +++ b/src/video_core/primitive_assembly.h @@ -4,6 +4,7 @@ #pragma once +#include #include #include #include "video_core/regs_pipeline.h" @@ -59,8 +60,8 @@ struct PrimitiveAssembler { private: PipelineRegs::TriangleTopology topology; - int buffer_index; - VertexType buffer[2]; + int buffer_index = 0; + std::array buffer; bool strip_ready = false; bool winding = false; From 59bb84b86c232844e9b945fd7ccf7a4416591766 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Sat, 18 Apr 2020 20:40:43 -0400 Subject: [PATCH 2/3] primitive_assembly: Take triangle_handler by reference Avoids copying the std::function when we don't need to. Particularly given the std::function isn't actually stored anywhere, so there's no need to move it. --- src/video_core/primitive_assembly.cpp | 2 +- src/video_core/primitive_assembly.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/video_core/primitive_assembly.cpp b/src/video_core/primitive_assembly.cpp index 182a69772..60b0af059 100644 --- a/src/video_core/primitive_assembly.cpp +++ b/src/video_core/primitive_assembly.cpp @@ -15,7 +15,7 @@ PrimitiveAssembler::PrimitiveAssembler(PipelineRegs::TriangleTopolog template void PrimitiveAssembler::SubmitVertex(const VertexType& vtx, - TriangleHandler triangle_handler) { + const TriangleHandler& triangle_handler) { switch (topology) { case PipelineRegs::TriangleTopology::List: case PipelineRegs::TriangleTopology::Shader: diff --git a/src/video_core/primitive_assembly.h b/src/video_core/primitive_assembly.h index f453ac82e..c650646db 100644 --- a/src/video_core/primitive_assembly.h +++ b/src/video_core/primitive_assembly.h @@ -29,7 +29,7 @@ struct PrimitiveAssembler { * NOTE: We could specify the triangle handler in the constructor, but this way we can * keep event and handler code next to each other. */ - void SubmitVertex(const VertexType& vtx, TriangleHandler triangle_handler); + void SubmitVertex(const VertexType& vtx, const TriangleHandler& triangle_handler); /** * Invert the vertex order of the next triangle. Called by geometry shader emitter. From 2cefd1685035023009dc3582290ed6d4dbb7189f Mon Sep 17 00:00:00 2001 From: Lioncash Date: Sat, 18 Apr 2020 20:42:37 -0400 Subject: [PATCH 3/3] primitive_assembly: Mark constructor explicit Prevents any implicit constructions from occurring, given the constructor isn't a converting constructor. --- src/video_core/primitive_assembly.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/video_core/primitive_assembly.h b/src/video_core/primitive_assembly.h index c650646db..1f4f25af2 100644 --- a/src/video_core/primitive_assembly.h +++ b/src/video_core/primitive_assembly.h @@ -20,7 +20,7 @@ struct PrimitiveAssembler { using TriangleHandler = std::function; - PrimitiveAssembler( + explicit PrimitiveAssembler( PipelineRegs::TriangleTopology topology = PipelineRegs::TriangleTopology::List); /*