diff options
| author | bunnei <bunneidev@gmail.com> | 2017-09-07 23:02:59 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-09-07 23:02:59 -0400 |
| commit | 11baa40d75d8a479bd738a05e91bba6f09856fe5 (patch) | |
| tree | 2a7affcefd22d5332970c7a28a04c139aa9a6654 /src/video_core/geometry_pipeline.h | |
| parent | 4af793c5919c2ce7dd26cc0b1d670135cb8a5246 (diff) | |
| parent | 0f35755572fe63534813528de9a0710193f2e335 (diff) | |
Merge pull request #2865 from wwylele/gs++
PICA: implemented geometry shader
Diffstat (limited to 'src/video_core/geometry_pipeline.h')
| -rw-r--r-- | src/video_core/geometry_pipeline.h | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/video_core/geometry_pipeline.h b/src/video_core/geometry_pipeline.h new file mode 100644 index 000000000..91fdd3192 --- /dev/null +++ b/src/video_core/geometry_pipeline.h @@ -0,0 +1,49 @@ +// Copyright 2017 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include <memory> +#include "video_core/shader/shader.h" + +namespace Pica { + +struct State; + +class GeometryPipelineBackend; + +/// A pipeline receiving from vertex shader and sending to geometry shader and primitive assembler +class GeometryPipeline { +public: + explicit GeometryPipeline(State& state); + ~GeometryPipeline(); + + /// Sets the handler for receiving vertex outputs from vertex shader + void SetVertexHandler(Shader::VertexHandler vertex_handler); + + /** + * Setup the geometry shader unit if it is in use + * @param shader_engine the shader engine for the geometry shader to run + */ + void Setup(Shader::ShaderEngine* shader_engine); + + /// Reconfigures the pipeline according to current register settings + void Reconfigure(); + + /// Checks if the pipeline needs a direct input from index buffer + bool NeedIndexInput() const; + + /// Submits an index from index buffer. Call this only when NeedIndexInput returns true + void SubmitIndex(unsigned int val); + + /// Submits vertex attributes output from vertex shader + void SubmitVertex(const Shader::AttributeBuffer& input); + +private: + Shader::VertexHandler vertex_handler; + Shader::ShaderEngine* shader_engine; + std::unique_ptr<GeometryPipelineBackend> backend; + State& state; +}; +} // namespace Pica |
