1 /* 2 * Copyright (c) 2024 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 API_RENDER_IRENDER_NODE_CONTEXT_MANAGER_H 17 #define API_RENDER_IRENDER_NODE_CONTEXT_MANAGER_H 18 19 #include <base/util/uid.h> 20 #include <core/json/json.h> 21 #include <core/plugin/intf_interface.h> 22 #include <render/namespace.h> 23 #include <render/render_data_structures.h> 24 25 RENDER_BEGIN_NAMESPACE() 26 class IRenderContext; 27 class INodeContextDescriptorSetManager; 28 class INodeContextPsoManager; 29 class IRenderNodeRenderDataStoreManager; 30 class IRenderNodeUtil; 31 class IRenderNodeShaderManager; 32 class IRenderNodeGpuResourceManager; 33 class IRenderNodeGraphShareManager; 34 class IRenderNodeParserUtil; 35 36 /** @ingroup group_render_irendernodecontextmanager */ 37 /** 38 * Provides access to render node managers and resources. 39 * In addition provides access to IRenderNodeInterface. 40 */ 41 class IRenderNodeContextManager : public CORE_NS::IInterface { 42 public: 43 static constexpr auto UID = BASE_NS::Uid("3079720c-e2bd-45df-959c-6becd637564a"); 44 45 /** Get render data store manager. Global render data store manager for accessing various render data stores. 46 */ 47 virtual const IRenderNodeRenderDataStoreManager& GetRenderDataStoreManager() const = 0; 48 49 /** Get render node specific shader manager interface. Uses global shader manager. 50 */ 51 virtual const IRenderNodeShaderManager& GetShaderManager() const = 0; 52 53 /** Get render node GPU manager. Global resources, automatic destruction for render node created resources. 54 */ 55 virtual IRenderNodeGpuResourceManager& GetGpuResourceManager() = 0; 56 57 /** Get render node context descriptor set manager. Per render node descriptor set manager. 58 */ 59 virtual INodeContextDescriptorSetManager& GetDescriptorSetManager() = 0; 60 61 /** Get render node context pso manager. Per render node PSO cache. 62 */ 63 virtual INodeContextPsoManager& GetPsoManager() = 0; 64 65 /** Get render node graph share manager. Share data within render nodes in render node graph. 66 */ 67 virtual IRenderNodeGraphShareManager& GetRenderNodeGraphShareManager() = 0; 68 69 /** Get render node util helper class. 70 */ 71 virtual const IRenderNodeUtil& GetRenderNodeUtil() const = 0; 72 73 /** Get render node graph data 74 */ 75 virtual const RenderNodeGraphData& GetRenderNodeGraphData() const = 0; 76 77 /** Get render node graph parser 78 */ 79 virtual const IRenderNodeParserUtil& GetRenderNodeParserUtil() const = 0; 80 81 /** Get render node full (context) name. 82 * Combined with render node graph name and should be unique. 83 * (One should add name to render node graph if the same render node graph can be used many times.) 84 */ 85 virtual BASE_NS::string_view GetName() const = 0; 86 87 /** Render node name given in render node graph. 88 * Is unique within the render node graph. (Do not use for naming global resources) 89 */ 90 virtual BASE_NS::string_view GetNodeName() const = 0; 91 92 /** Get render node specific json block. 93 */ 94 virtual CORE_NS::json::value GetNodeJson() const = 0; 95 96 /** Built-in render node graph inputs 97 * @return RenderNodeGraphInputs 98 */ 99 virtual const RenderNodeGraphInputs& GetRenderNodeGraphInputs() const = 0; 100 101 /** Get render context. 102 * @return render context. 103 */ 104 virtual IRenderContext& GetRenderContext() const = 0; 105 106 /** Get render node context specific render node interface by UID. 107 */ 108 virtual CORE_NS::IInterface* GetRenderNodeContextInterface(const BASE_NS::Uid& uid) const = 0; 109 110 /** Get render node context interfaces by UID with interface type cast 111 */ 112 template<typename InterfaceType> GetRenderNodeContextInterface()113 InterfaceType* GetRenderNodeContextInterface() 114 { 115 return static_cast<InterfaceType*>(GetRenderNodeContextInterface(InterfaceType::UID)); 116 } 117 118 protected: 119 IRenderNodeContextManager() = default; 120 virtual ~IRenderNodeContextManager() = default; 121 122 IRenderNodeContextManager(const IRenderNodeContextManager&) = delete; 123 IRenderNodeContextManager& operator=(const IRenderNodeContextManager&) = delete; 124 IRenderNodeContextManager(IRenderNodeContextManager&&) = delete; 125 IRenderNodeContextManager& operator=(IRenderNodeContextManager&&) = delete; 126 }; 127 RENDER_END_NAMESPACE() 128 129 #endif // API_RENDER_IRENDER_NODE_CONTEXT_MANAGER_H 130