Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
render_pass_vk.h
Go to the documentation of this file.
1// Copyright 2013 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef FLUTTER_IMPELLER_RENDERER_BACKEND_VULKAN_RENDER_PASS_VK_H_
6#define FLUTTER_IMPELLER_RENDERER_BACKEND_VULKAN_RENDER_PASS_VK_H_
7
15#include "vulkan/vulkan_handles.hpp"
16
17namespace impeller {
18
19class CommandBufferVK;
20class SamplerVK;
21
22class RenderPassVK final : public RenderPass {
23 public:
24 // |RenderPass|
25 ~RenderPassVK() override;
26
27 private:
28 friend class CommandBufferVK;
29
30 std::shared_ptr<CommandBufferVK> command_buffer_;
31 std::string debug_label_;
33 bool is_valid_ = false;
34
35 vk::CommandBuffer command_buffer_vk_;
36 std::shared_ptr<Texture> color_image_vk_;
37 std::shared_ptr<Texture> resolve_image_vk_;
38
39 // Per-command state.
40 std::array<vk::DescriptorImageInfo, kMaxBindings> image_workspace_;
41 std::array<vk::DescriptorBufferInfo, kMaxBindings> buffer_workspace_;
42 std::array<vk::WriteDescriptorSet, kMaxBindings + kMaxBindings>
43 write_workspace_;
44 size_t bound_image_offset_ = 0u;
45 size_t bound_buffer_offset_ = 0u;
46 size_t descriptor_write_offset_ = 0u;
47 size_t instance_count_ = 1u;
48 size_t base_vertex_ = 0u;
49 size_t vertex_count_ = 0u;
50 bool has_index_buffer_ = false;
51 bool has_label_ = false;
52 const Pipeline<PipelineDescriptor>* pipeline_;
53 bool pipeline_uses_input_attachments_ = false;
54 std::shared_ptr<SamplerVK> immutable_sampler_;
55
56 RenderPassVK(const std::shared_ptr<const Context>& context,
57 const RenderTarget& target,
58 std::shared_ptr<CommandBufferVK> command_buffer);
59
60 // |RenderPass|
61 void SetPipeline(
62 const std::shared_ptr<Pipeline<PipelineDescriptor>>& pipeline) override;
63
64 // |RenderPass|
65 void SetCommandLabel(std::string_view label) override;
66
67 // |RenderPass|
68 void SetStencilReference(uint32_t value) override;
69
70 // |RenderPass|
71 void SetBaseVertex(uint64_t value) override;
72
73 // |RenderPass|
74 void SetViewport(Viewport viewport) override;
75
76 // |RenderPass|
77 void SetScissor(IRect scissor) override;
78
79 // |RenderPass|
80 void SetInstanceCount(size_t count) override;
81
82 // |RenderPass|
83 bool SetVertexBuffer(VertexBuffer buffer) override;
84
85 // |RenderPass|
86 fml::Status Draw() override;
87
88 // |RenderPass|
89 void ReserveCommands(size_t command_count) override {}
90
91 // |ResourceBinder|
92 bool BindResource(ShaderStage stage,
94 const ShaderUniformSlot& slot,
95 const ShaderMetadata& metadata,
96 BufferView view) override;
97
98 // |RenderPass|
99 bool BindResource(ShaderStage stage,
101 const ShaderUniformSlot& slot,
102 const std::shared_ptr<const ShaderMetadata>& metadata,
103 BufferView view) override;
104
105 // |ResourceBinder|
106 bool BindResource(ShaderStage stage,
108 const SampledImageSlot& slot,
109 const ShaderMetadata& metadata,
110 std::shared_ptr<const Texture> texture,
111 const std::unique_ptr<const Sampler>& sampler) override;
112
113 bool BindResource(size_t binding,
115 const BufferView& view);
116
117 // |RenderPass|
118 bool IsValid() const override;
119
120 // |RenderPass|
121 void OnSetLabel(std::string label) override;
122
123 // |RenderPass|
124 bool OnEncodeCommands(const Context& context) const override;
125
126 SharedHandleVK<vk::RenderPass> CreateVKRenderPass(
127 const ContextVK& context,
128 const SharedHandleVK<vk::RenderPass>& recycled_renderpass,
129 const std::shared_ptr<CommandBufferVK>& command_buffer) const;
130
131 SharedHandleVK<vk::Framebuffer> CreateVKFramebuffer(
132 const ContextVK& context,
133 const vk::RenderPass& pass) const;
134
135 RenderPassVK(const RenderPassVK&) = delete;
136
137 RenderPassVK& operator=(const RenderPassVK&) = delete;
138};
139
140} // namespace impeller
141
142#endif // FLUTTER_IMPELLER_RENDERER_BACKEND_VULKAN_RENDER_PASS_VK_H_
int count
To do anything rendering related with Impeller, you need a context.
Definition context.h:46
Describes the fixed function and programmable aspects of rendering and compute operations performed b...
Definition pipeline.h:49
bool IsValid() const override
bool BindResource(ShaderStage stage, DescriptorType type, const ShaderUniformSlot &slot, const ShaderMetadata &metadata, BufferView view) override
void SetCommandLabel(std::string_view label) override
The debugging label to use for the command.
void ReserveCommands(size_t command_count) override
Reserve [command_count] commands in the HAL command buffer.
void SetViewport(Viewport viewport) override
void SetBaseVertex(uint64_t value) override
bool SetVertexBuffer(VertexBuffer buffer) override
Specify the vertex and index buffer to use for this command.
void SetScissor(IRect scissor) override
void SetPipeline(const std::shared_ptr< Pipeline< PipelineDescriptor > > &pipeline) override
The pipeline to use for this command.
void SetInstanceCount(size_t count) override
void OnSetLabel(std::string label) override
void SetStencilReference(uint32_t value) override
fml::Status Draw() override
Record the currently pending command.
bool OnEncodeCommands(const Context &context) const override
Render passes encode render commands directed as one specific render target into an underlying comman...
Definition render_pass.h:33
static const uint8_t buffer[]
uint32_t * target
FlTexture * texture
std::shared_ptr< SharedObjectVKT< T > > SharedHandleVK
Metadata required to bind a combined texture and sampler.
Metadata required to bind a buffer.