• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef RENDER_RENDER__NODE__RENDER_BLUR_H
17 #define RENDER_RENDER__NODE__RENDER_BLUR_H
18 
19 #include <base/containers/string.h>
20 #include <base/containers/vector.h>
21 #include <base/math/vector.h>
22 #include <render/datastore/render_data_store_render_pods.h>
23 #include <render/namespace.h>
24 #include <render/nodecontext/intf_pipeline_descriptor_set_binder.h>
25 #include <render/nodecontext/intf_render_node.h>
26 #include <render/render_data_structures.h>
27 #include <render/resource_handle.h>
28 
29 RENDER_BEGIN_NAMESPACE()
30 class IRenderCommandList;
31 
32 class RenderBlur final {
33 public:
34     RenderBlur() = default;
35     ~RenderBlur() = default;
36 
37     struct BlurInfo {
38         RenderHandle blurTarget;
39         RenderHandle globalUbo;
40         bool upScale { false };
41     };
42     void Init(IRenderNodeContextManager& renderNodeContextMgr, const BlurInfo& blurInfo);
43     void PreExecute(IRenderNodeContextManager& renderNodeContextMgr, const BlurInfo& blurInfo,
44         const PostProcessConfiguration& ppConfig);
45     void Execute(IRenderNodeContextManager& renderNodeContextMgr, IRenderCommandList& cmdList,
46         const PostProcessConfiguration& ppConfig);
47 
48     DescriptorCounts GetDescriptorCounts() const;
49 
50 private:
51     void RenderData(IRenderNodeContextManager& renderNodeContextMgr, IRenderCommandList& cmdList,
52         const RenderPass& renderPassBase, const PostProcessConfiguration& ppConfig);
53     void RenderGaussian(IRenderNodeContextManager& renderNodeContextMgr, IRenderCommandList& cmdList,
54         const RenderPass& renderPassBase, const PostProcessConfiguration& ppConfig);
55 
56     void UpdateGlobalSet(IRenderCommandList& cmdList);
57     void CreateTargets(IRenderNodeContextManager& renderNodeContextMgr, const BASE_NS::Math::UVec2 baseSize);
58 
59     struct ImageData {
60         RenderHandle mipImage;
61         uint32_t mipCount { 0 };
62         BASE_NS::Format format { BASE_NS::Format::BASE_FORMAT_UNDEFINED };
63         BASE_NS::Math::UVec2 size { 0u, 0u };
64     };
65     ImageData imageData_;
66     RenderHandle globalUbo_;
67 
68     // additional target
69     struct TemporaryTarget {
70         RenderHandleReference tex;
71         BASE_NS::Math::UVec2 texSize { 0, 0 };
72         BASE_NS::Format format { BASE_NS::Format::BASE_FORMAT_UNDEFINED };
73     };
74     TemporaryTarget tempTarget_;
75 
76     struct RenderDataHandles {
77         RenderHandle shader;
78         PipelineLayout pipelineLayout;
79         RenderHandle psoScale;
80         RenderHandle psoBlur;
81     };
82     RenderDataHandles renderData_;
83 
84     IDescriptorSetBinder::Ptr globalSet0_;
85     BASE_NS::vector<IDescriptorSetBinder::Ptr> binders_;
86     RenderHandle samplerHandle_;
87     BlurInfo blurInfo_;
88 };
89 RENDER_END_NAMESPACE()
90 
91 #endif // CORE__RENDER__NODE__RENDER_BLUR_H
92