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 #ifndef RENDER_DATA_STORE_RENDER_DATA_STORE_FULLSCREEN_SHADER_H 17 #define RENDER_DATA_STORE_RENDER_DATA_STORE_FULLSCREEN_SHADER_H 18 19 #include <cstdint> 20 #include <mutex> 21 22 #include <base/containers/string.h> 23 #include <base/containers/string_view.h> 24 #include <base/containers/unordered_map.h> 25 #include <base/util/uid.h> 26 #include <render/datastore/intf_render_data_store_shader_passes.h> 27 #include <render/namespace.h> 28 29 RENDER_BEGIN_NAMESPACE() 30 class IRenderContext; 31 /** 32 * RenderDataStoreFullscreenShader implementation. 33 */ 34 class RenderDataStoreShaderPasses final : public IRenderDataStoreShaderPasses { 35 public: 36 RenderDataStoreShaderPasses(const IRenderContext& renderContex, const BASE_NS::string_view name); 37 ~RenderDataStoreShaderPasses() override; 38 39 void AddRenderData(const BASE_NS::string_view name, const BASE_NS::array_view<const RenderPassData> data) override; 40 void AddComputeData( 41 const BASE_NS::string_view name, const BASE_NS::array_view<const ComputePassData> data) override; 42 43 BASE_NS::vector<RenderPassData> GetRenderData(const BASE_NS::string_view name) const override; 44 BASE_NS::vector<ComputePassData> GetComputeData(const BASE_NS::string_view name) const override; 45 BASE_NS::vector<RenderPassData> GetRenderData() const override; 46 BASE_NS::vector<ComputePassData> GetComputeData() const override; 47 48 PropertyBindingDataInfo GetRenderPropertyBindingInfo(BASE_NS::string_view name) const override; 49 PropertyBindingDataInfo GetComputePropertyBindingInfo(BASE_NS::string_view name) const override; 50 PropertyBindingDataInfo GetRenderPropertyBindingInfo() const override; 51 PropertyBindingDataInfo GetComputePropertyBindingInfo() const override; 52 CommitFrameData()53 void CommitFrameData() override {} PreRender()54 void PreRender() override {} 55 void PostRender() override; PreRenderBackend()56 void PreRenderBackend() override {} PostRenderBackend()57 void PostRenderBackend() override {} 58 void Clear() override; GetFlags()59 uint32_t GetFlags() const override 60 { 61 return 0U; 62 } 63 64 // for plugin / factory interface 65 static constexpr const char* const TYPE_NAME = "RenderDataStoreShaderPasses"; 66 67 static IRenderDataStore* Create(IRenderContext& renderContext, char const* name); 68 static void Destroy(IRenderDataStore* instance); 69 GetTypeName()70 BASE_NS::string_view GetTypeName() const override 71 { 72 return TYPE_NAME; 73 } 74 GetName()75 BASE_NS::string_view GetName() const override 76 { 77 return name_; 78 } 79 GetUid()80 const BASE_NS::Uid& GetUid() const override 81 { 82 return UID; 83 } 84 85 private: 86 const IRenderContext& renderContext_; 87 BASE_NS::string name_; 88 89 struct RenderPassDataInfo { 90 BASE_NS::vector<RenderPassData> rpData; 91 uint32_t alignedPropertyByteSize { 0U }; 92 }; 93 struct ComputePassDataInfo { 94 BASE_NS::vector<ComputePassData> cpData; 95 uint32_t alignedPropertyByteSize { 0U }; 96 }; 97 98 BASE_NS::unordered_map<BASE_NS::string, RenderPassDataInfo> nameToRenderObjects_; 99 BASE_NS::unordered_map<BASE_NS::string, ComputePassDataInfo> nameToComputeObjects_; 100 101 mutable std::mutex mutex_; 102 }; 103 RENDER_END_NAMESPACE() 104 105 #endif // RENDER_DATA_STORE_RENDER_DATA_STORE_FULLSCREEN_SHADER_H 106