• 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__RENDER_NODE_CONTEXT_MANAGER_H
17 #define RENDER_RENDER__RENDER_NODE_CONTEXT_MANAGER_H
18 
19 #include <cstdint>
20 
21 #include <base/containers/unique_ptr.h>
22 #include <base/containers/vector.h>
23 #include <render/namespace.h>
24 #include <render/nodecontext/intf_render_node_context_manager.h>
25 
26 #include "datastore/render_data_store_manager.h"
27 #include "nodecontext/render_node_util.h"
28 
29 RENDER_BEGIN_NAMESPACE()
30 class Device;
31 class INodeContextDescriptorSetManager;
32 class INodeContextPsoManager;
33 class IRenderNodeGraphShareManager;
34 class IRenderNodeUtil;
35 class NodeContextDescriptorSetManager;
36 class NodeContextPsoManager;
37 class RenderDataStoreManager;
38 class RenderNodeGraphShareManager;
39 class RenderNodeGraphShareDataManager;
40 class RenderNodeParserUtil;
41 
42 class ShaderManager;
43 class IRenderNodeGpuResourceManager;
44 class RenderNodeShaderManager;
45 class RenderNodeGpuResourceManager;
46 class RenderCommandList;
47 
48 /**
49 class RenderNodeContextManager.
50 */
51 class RenderNodeContextManager final : public IRenderNodeContextManager {
52 public:
53     struct CreateInfo {
54         IRenderContext& renderContext;
55         const RenderNodeGraphData& renderNodeGraphData;
56         const RenderNodeGraphInputs& renderNodeGraphInputs;
57         const BASE_NS::string_view& name;
58         const BASE_NS::string_view& nodeJson;
59         RenderNodeGpuResourceManager& gpuResourceMgr;
60         NodeContextDescriptorSetManager& descriptorSetMgr;
61         NodeContextPsoManager& psoMgr;
62         RenderCommandList& cmdList;
63         RenderNodeGraphShareDataManager& renderNodeGraphShareDataMgr;
64     };
65     struct PerFrameTimings {
66         uint64_t totalTimeUs { 0 };
67         uint64_t deltaTimeUs { 0 };
68         uint64_t frameIndex { 0 };
69     };
70 
71     explicit RenderNodeContextManager(const CreateInfo& createInfo);
72     ~RenderNodeContextManager() override;
73 
74     void BeginFrame(const uint32_t renderNodeIdx, const PerFrameTimings& frameTimings);
75 
76     const IRenderNodeRenderDataStoreManager& GetRenderDataStoreManager() const override;
77     const IRenderNodeShaderManager& GetShaderManager() const override;
78     IRenderNodeGpuResourceManager& GetGpuResourceManager() override;
79 
80     INodeContextDescriptorSetManager& GetDescriptorSetManager() override;
81     INodeContextPsoManager& GetPsoManager() override;
82     IRenderNodeGraphShareManager& GetRenderNodeGraphShareManager() override;
83 
84     const IRenderNodeUtil& GetRenderNodeUtil() const override;
85     const IRenderNodeParserUtil& GetRenderNodeParserUtil() const override;
86     const RenderNodeGraphData& GetRenderNodeGraphData() const override;
87     BASE_NS::string_view GetName() const override;
88     BASE_NS::string_view GetNodeName() const override;
89     CORE_NS::json::value GetNodeJson() const override;
90     const RenderNodeGraphInputs& GetRenderNodeGraphInputs() const override;
91 
92     IRenderContext& GetRenderContext() const override;
93 
94     IRenderNodeInterface* GetInterface(const BASE_NS::Uid& uid) const override;
95 
96     // for IRenderNodeInterface
GetTypeName()97     BASE_NS::string_view GetTypeName() const override
98     {
99         return "IRenderNodeContextManager";
100     }
GetUid()101     BASE_NS::Uid GetUid() const override
102     {
103         return IRenderNodeContextManager::UID;
104     }
105 
106 private:
107     IRenderContext& renderContext_;
108     RenderNodeGraphData renderNodeGraphData_;
109     const RenderNodeGraphInputs renderNodeGraphInputs_;
110     const BASE_NS::string fullName_;
111     const BASE_NS::string nodeName_;
112     const BASE_NS::string nodeJson_;
113 
114     RenderNodeGpuResourceManager& renderNodeGpuResourceMgr_;
115     RenderNodeGraphShareDataManager& renderNodeGraphShareDataMgr_;
116     NodeContextDescriptorSetManager& descriptorSetMgr_;
117     NodeContextPsoManager& psoMgr_;
118     RenderCommandList& renderCommandList_;
119 
120     struct ContextInterface {
121         BASE_NS::Uid uid {};
122         IRenderNodeInterface* contextInterface { nullptr };
123     };
124     BASE_NS::vector<ContextInterface> contextInterfaces_;
125 
126     BASE_NS::unique_ptr<RenderNodeShaderManager> renderNodeShaderMgr_;
127     BASE_NS::unique_ptr<RenderNodeRenderDataStoreManager> renderNodeRenderDataStoreMgr_;
128     BASE_NS::unique_ptr<RenderNodeUtil> renderNodeUtil_;
129     BASE_NS::unique_ptr<RenderNodeGraphShareManager> renderNodeGraphShareMgr_;
130     BASE_NS::unique_ptr<RenderNodeParserUtil> renderNodeParserUtil_;
131 
132     // index in render node graph
133     uint32_t renderNodeIdx_ { ~0u };
134 };
135 RENDER_END_NAMESPACE()
136 
137 #endif // CORE__RENDER__RENDER_NODE_CONTEXT_MANAGER_H
138