• 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 #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 #include "device/gpu_resource_manager.h"
25 
26 RENDER_BEGIN_NAMESPACE()
27 using namespace BASE_NS;
28 
RenderUtil(const IRenderContext & renderContext)29 RenderUtil::RenderUtil(const IRenderContext& renderContext) : renderContext_(renderContext) {}
30 
GetRenderHandleDesc(const RenderHandleReference & handle) const31 RenderHandleDesc RenderUtil::GetRenderHandleDesc(const RenderHandleReference& handle) const
32 {
33     RenderHandleDesc desc;
34     if (handle) {
35         const RenderHandleType handleType = handle.GetHandleType();
36         desc.type = handleType;
37         desc.refCount = handle.GetRefCount();
38         if ((handleType >= RenderHandleType::GPU_BUFFER) && (handleType <= RenderHandleType::GPU_SAMPLER)) {
39             const IGpuResourceManager& mgr = renderContext_.GetDevice().GetGpuResourceManager();
40             desc.name = mgr.GetName(handle);
41             desc.refCount -= 1; // one count in mgr
42         } else if ((handleType >= RenderHandleType::SHADER_STATE_OBJECT) &&
43                    (handleType <= RenderHandleType::GRAPHICS_STATE)) {
44             const IShaderManager& mgr = renderContext_.GetDevice().GetShaderManager();
45             IShaderManager::IdDesc info = mgr.GetIdDesc(handle);
46             desc.name = info.path;
47             desc.additionalName = info.variant;
48         } else if (handleType == RenderHandleType::RENDER_NODE_GRAPH) {
49             const IRenderNodeGraphManager& mgr = renderContext_.GetRenderNodeGraphManager();
50             const RenderNodeGraphDescInfo info = mgr.GetInfo(handle);
51             desc.name = info.renderNodeGraphUri;
52             desc.additionalName = info.renderNodeGraphName;
53             desc.refCount -= 1; // one count in mgr
54         }
55     }
56     return desc;
57 }
58 
GetRenderHandle(const RenderHandleDesc & desc) const59 RenderHandleReference RenderUtil::GetRenderHandle(const RenderHandleDesc& desc) const
60 {
61     RenderHandleReference rhr;
62     if (desc.type != RenderHandleType::UNDEFINED) {
63         if ((desc.type >= RenderHandleType::GPU_BUFFER) && (desc.type <= RenderHandleType::GPU_SAMPLER)) {
64             const IGpuResourceManager& mgr = renderContext_.GetDevice().GetGpuResourceManager();
65             if (desc.type == RenderHandleType::GPU_BUFFER) {
66                 rhr = mgr.GetBufferHandle(desc.name);
67             } else if (desc.type == RenderHandleType::GPU_IMAGE) {
68                 rhr = mgr.GetImageHandle(desc.name);
69             } else if (desc.type == RenderHandleType::GPU_SAMPLER) {
70                 rhr = mgr.GetSamplerHandle(desc.name);
71             }
72         } else if ((desc.type >= RenderHandleType::SHADER_STATE_OBJECT) &&
73                    (desc.type <= RenderHandleType::GRAPHICS_STATE)) {
74             const IShaderManager& mgr = renderContext_.GetDevice().GetShaderManager();
75             if ((desc.type == RenderHandleType::SHADER_STATE_OBJECT) ||
76                 (desc.type == RenderHandleType::COMPUTE_SHADER_STATE_OBJECT)) {
77                 rhr = mgr.GetShaderHandle(desc.name, desc.additionalName);
78             } else if (desc.type == RenderHandleType::GRAPHICS_STATE) {
79                 rhr = mgr.GetGraphicsStateHandle(desc.name, desc.additionalName);
80             } else if (desc.type == RenderHandleType::PIPELINE_LAYOUT) {
81                 rhr = mgr.GetPipelineLayoutHandle(desc.name);
82             } else if (desc.type == RenderHandleType::VERTEX_INPUT_DECLARATION) {
83                 rhr = mgr.GetVertexInputDeclarationHandle(desc.name);
84             }
85         } else if (desc.type == RenderHandleType::RENDER_NODE_GRAPH) {
86         }
87     }
88     return rhr;
89 }
90 
SetRenderTimings(const RenderTimings::Times & times)91 void RenderUtil::SetRenderTimings(const RenderTimings::Times& times)
92 {
93     renderTimings_.prevFrame = renderTimings_.frame;
94     renderTimings_.frame = times;
95 }
96 
GetRenderTimings() const97 RenderTimings RenderUtil::GetRenderTimings() const
98 {
99     return renderTimings_;
100 }
101 
102 RENDER_END_NAMESPACE()
103