summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_opengl/gl_graphics_pipeline.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/video_core/renderer_opengl/gl_graphics_pipeline.h18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/video_core/renderer_opengl/gl_graphics_pipeline.h b/src/video_core/renderer_opengl/gl_graphics_pipeline.h
index 58deafd3c..a3546daa8 100644
--- a/src/video_core/renderer_opengl/gl_graphics_pipeline.h
+++ b/src/video_core/renderer_opengl/gl_graphics_pipeline.h
@@ -75,7 +75,9 @@ public:
const std::array<const Shader::Info*, 5>& infos,
const VideoCommon::TransformFeedbackState* xfb_state);
- void Configure(bool is_indexed);
+ void Configure(bool is_indexed) {
+ configure_func(this, is_indexed);
+ }
void ConfigureTransformFeedback() const {
if (num_xfb_attribs != 0) {
@@ -91,11 +93,21 @@ public:
return is_built.load(std::memory_order::relaxed);
}
+ template <typename Spec>
+ static auto MakeConfigureSpecFunc() {
+ return [](GraphicsPipeline* pipeline, bool is_indexed) {
+ pipeline->ConfigureImpl<Spec>(is_indexed);
+ };
+ }
+
private:
- void GenerateTransformFeedbackState(const VideoCommon::TransformFeedbackState& xfb_state);
+ template <typename Spec>
+ void ConfigureImpl(bool is_indexed);
void ConfigureTransformFeedbackImpl() const;
+ void GenerateTransformFeedbackState(const VideoCommon::TransformFeedbackState& xfb_state);
+
TextureCache& texture_cache;
BufferCache& buffer_cache;
Tegra::MemoryManager& gpu_memory;
@@ -103,6 +115,8 @@ private:
ProgramManager& program_manager;
StateTracker& state_tracker;
+ void (*configure_func)(GraphicsPipeline*, bool){};
+
OGLProgram program;
std::array<OGLAssemblyProgram, 5> assembly_programs;
u32 enabled_stages_mask{};