1
0
Fork 0
forked from suyu/suyu

metal: configure pipeline before drawing

This commit is contained in:
Samuliak 2024-04-08 16:47:08 +02:00
parent 22ec7e72f0
commit 3fa495840a
No known key found for this signature in database
3 changed files with 11 additions and 33 deletions

View file

@ -53,22 +53,20 @@ GraphicsPipeline::GraphicsPipeline(const Device& device_, CommandRecorder& comma
return; return;
} }
MakePipeline(framebuffer->GetHandle()); MakePipeline(framebuffer->GetHandle());
// configure_func = ConfigureFunc(functions, stage_infos);
} }
template <typename Spec> void GraphicsPipeline::Configure(bool is_indexed) {
void GraphicsPipeline::ConfigureImpl(bool is_indexed) { buffer_cache.UpdateGraphicsBuffers(is_indexed);
// TODO: implement buffer_cache.BindHostGeometryBuffers(is_indexed);
}
void GraphicsPipeline::ConfigureDraw() { texture_cache.UpdateRenderTargets(true);
Framebuffer* framebuffer = texture_cache.GetFramebuffer(); const Framebuffer* const framebuffer = texture_cache.GetFramebuffer();
if (!framebuffer) { if (!framebuffer) {
return; return;
} }
// MTL::RenderPassDescriptor* render_pass = framebuffer->GetHandle(); command_recorder.BeginOrContinueRenderPass(framebuffer->GetHandle());
// TODO: bind resources command_recorder.GetRenderCommandEncoder()->setRenderPipelineState(pipeline_state);
} }
void GraphicsPipeline::MakePipeline(MTL::RenderPassDescriptor* render_pass) { void GraphicsPipeline::MakePipeline(MTL::RenderPassDescriptor* render_pass) {

View file

@ -80,9 +80,7 @@ public:
// TODO: implement // TODO: implement
void AddTransition(GraphicsPipeline* transition) {} void AddTransition(GraphicsPipeline* transition) {}
void Configure(bool is_indexed) { void Configure(bool is_indexed);
// configure_func(this, is_indexed);
}
[[nodiscard]] GraphicsPipeline* Next(const GraphicsPipelineCacheKey& current_key) noexcept { [[nodiscard]] GraphicsPipeline* Next(const GraphicsPipelineCacheKey& current_key) noexcept {
// TODO: implement // TODO: implement
@ -93,26 +91,12 @@ public:
return true; return true;
} }
template <typename Spec>
static auto MakeConfigureSpecFunc() {
return [](GraphicsPipeline* pl, bool is_indexed) { pl->ConfigureImpl<Spec>(is_indexed); };
}
void SetEngine(Tegra::Engines::Maxwell3D* maxwell3d_, Tegra::MemoryManager* gpu_memory_) { void SetEngine(Tegra::Engines::Maxwell3D* maxwell3d_, Tegra::MemoryManager* gpu_memory_) {
maxwell3d = maxwell3d_; maxwell3d = maxwell3d_;
gpu_memory = gpu_memory_; gpu_memory = gpu_memory_;
} }
MTL::RenderPipelineState* GetPipelineState() const noexcept {
return pipeline_state;
}
private: private:
template <typename Spec>
void ConfigureImpl(bool is_indexed);
void ConfigureDraw();
void MakePipeline(MTL::RenderPassDescriptor* render_pass); void MakePipeline(MTL::RenderPassDescriptor* render_pass);
void Validate(); void Validate();

View file

@ -48,12 +48,7 @@ void RasterizerMetal::Draw(bool is_indexed, u32 instance_count) {
if (!pipeline) { if (!pipeline) {
return; return;
} }
command_recorder.GetRenderCommandEncoder()->setRenderPipelineState( pipeline->Configure(is_indexed);
pipeline->GetPipelineState());
// HACK: test is buffers are being correctly created
buffer_cache.UpdateGraphicsBuffers(is_indexed);
buffer_cache.BindHostGeometryBuffers(is_indexed);
// HACK: dummy draw call // HACK: dummy draw call
command_recorder.GetRenderCommandEncoder()->drawPrimitives(MTL::PrimitiveTypeTriangle, command_recorder.GetRenderCommandEncoder()->drawPrimitives(MTL::PrimitiveTypeTriangle,
@ -95,7 +90,8 @@ void RasterizerMetal::Clear(u32 layer_count) {
return; return;
} }
// Begin render pass // TODO: track the textures used by render pass and only begin the render pass if their contents
// are needed Begin render pass
command_recorder.BeginOrContinueRenderPass(framebuffer->GetHandle()); command_recorder.BeginOrContinueRenderPass(framebuffer->GetHandle());
} }