• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 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 #include "util/render_util.h"
17 
18 #include <render/device/intf_device.h>
19 #include <render/device/intf_gpu_resource_manager.h>
20 #include <render/device/intf_shader_manager.h>
21 #include <render/intf_render_context.h>
22 #include <render/nodecontext/intf_render_node_graph_manager.h>
23 
24 RENDER_BEGIN_NAMESPACE()
25 using namespace BASE_NS;
26 
RenderUtil(const IRenderContext & renderContext)27 RenderUtil::RenderUtil(const IRenderContext& renderContext) : renderContext_(renderContext)
28 {
29     renderFrameUtil_ = make_unique<RenderFrameUtil>(renderContext);
30 }
31 
BeginFrame()32 void RenderUtil::BeginFrame()
33 {
34     renderFrameUtil_->BeginFrame();
35 }
36 
EndFrame()37 void RenderUtil::EndFrame()
38 {
39     renderFrameUtil_->EndFrame();
40 }
41 
GetRenderHandleDesc(const RenderHandleReference & handle) const42 RenderHandleDesc RenderUtil::GetRenderHandleDesc(const RenderHandleReference& handle) const
43 {
44     RenderHandleDesc desc;
45     if (handle) {
46         const RenderHandleType handleType = handle.GetHandleType();
47         desc.type = handleType;
48         desc.refCount = handle.GetRefCount();
49         if ((handleType >= RenderHandleType::GPU_BUFFER) && (handleType <= RenderHandleType::GPU_SAMPLER)) {
50             const IGpuResourceManager& mgr = renderContext_.GetDevice().GetGpuResourceManager();
51             desc.name = mgr.GetName(handle);
52             desc.refCount -= 1; // one count in mgr
53         } else if ((handleType >= RenderHandleType::SHADER_STATE_OBJECT) &&
54                    (handleType <= RenderHandleType::GRAPHICS_STATE)) {
55             const IShaderManager& mgr = renderContext_.GetDevice().GetShaderManager();
56             IShaderManager::IdDesc info = mgr.GetIdDesc(handle);
57             desc.name = info.path;
58             desc.additionalName = info.variant;
59         } else if (handleType == RenderHandleType::RENDER_NODE_GRAPH) {
60             const IRenderNodeGraphManager& mgr = renderContext_.GetRenderNodeGraphManager();
61             const RenderNodeGraphDescInfo info = mgr.GetInfo(handle);
62             desc.name = info.renderNodeGraphUri;
63             desc.additionalName = info.renderNodeGraphName;
64             desc.refCount -= 1; // one count in mgr
65         }
66     }
67     return desc;
68 }
69 
GetRenderHandle(const RenderHandleDesc & desc) const70 RenderHandleReference RenderUtil::GetRenderHandle(const RenderHandleDesc& desc) const
71 {
72     RenderHandleReference rhr;
73     if (desc.type != RenderHandleType::UNDEFINED) {
74         if ((desc.type >= RenderHandleType::GPU_BUFFER) && (desc.type <= RenderHandleType::GPU_SAMPLER)) {
75             const IGpuResourceManager& mgr = renderContext_.GetDevice().GetGpuResourceManager();
76             if (desc.type == RenderHandleType::GPU_BUFFER) {
77                 rhr = mgr.GetBufferHandle(desc.name);
78             } else if (desc.type == RenderHandleType::GPU_IMAGE) {
79                 rhr = mgr.GetImageHandle(desc.name);
80             } else if (desc.type == RenderHandleType::GPU_SAMPLER) {
81                 rhr = mgr.GetSamplerHandle(desc.name);
82             }
83         } else if ((desc.type >= RenderHandleType::SHADER_STATE_OBJECT) &&
84                    (desc.type <= RenderHandleType::GRAPHICS_STATE)) {
85             const IShaderManager& mgr = renderContext_.GetDevice().GetShaderManager();
86             if ((desc.type == RenderHandleType::SHADER_STATE_OBJECT) ||
87                 (desc.type == RenderHandleType::COMPUTE_SHADER_STATE_OBJECT)) {
88                 rhr = mgr.GetShaderHandle(desc.name, desc.additionalName);
89             } else if (desc.type == RenderHandleType::GRAPHICS_STATE) {
90                 rhr = mgr.GetGraphicsStateHandle(desc.name, desc.additionalName);
91             } else if (desc.type == RenderHandleType::PIPELINE_LAYOUT) {
92                 rhr = mgr.GetPipelineLayoutHandle(desc.name);
93             } else if (desc.type == RenderHandleType::VERTEX_INPUT_DECLARATION) {
94                 rhr = mgr.GetVertexInputDeclarationHandle(desc.name);
95             }
96         } else if (desc.type == RenderHandleType::RENDER_NODE_GRAPH) {
97         }
98     }
99     return rhr;
100 }
101 
SetRenderTimings(const RenderTimings::Times & times)102 void RenderUtil::SetRenderTimings(const RenderTimings::Times& times)
103 {
104     renderTimings_.prevFrame = renderTimings_.frame;
105     renderTimings_.frame = times;
106 }
107 
GetRenderTimings() const108 RenderTimings RenderUtil::GetRenderTimings() const
109 {
110     return renderTimings_;
111 }
112 
GetRenderFrameUtil() const113 IRenderFrameUtil& RenderUtil::GetRenderFrameUtil() const
114 {
115     return *renderFrameUtil_;
116 }
117 
118 RENDER_END_NAMESPACE()
119