/*
* Copyright (c) 2024 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef RENDER_RENDER__NODE__RENDER_BLUR_H
#define RENDER_RENDER__NODE__RENDER_BLUR_H
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
RENDER_BEGIN_NAMESPACE()
class IRenderCommandList;
class RenderBlur final {
public:
RenderBlur() = default;
~RenderBlur() = default;
struct BlurInfo {
BindableImage blurTarget;
RenderHandle globalUbo;
bool upScale { false };
uint32_t scaleType { CORE_BLUR_TYPE_DOWNSCALE_RGBA };
uint32_t blurType { CORE_BLUR_TYPE_RGBA };
};
void Init(IRenderNodeContextManager& renderNodeContextMgr, const BlurInfo& blurInfo);
void PreExecute(IRenderNodeContextManager& renderNodeContextMgr, const BlurInfo& blurInfo,
const PostProcessConfiguration& ppConfig);
void Execute(IRenderNodeContextManager& renderNodeContextMgr, IRenderCommandList& cmdList,
const PostProcessConfiguration& ppConfig);
DescriptorCounts GetDescriptorCounts() const;
private:
void RenderData(IRenderNodeContextManager& renderNodeContextMgr, IRenderCommandList& cmdList,
const RenderPass& renderPassBase, const PostProcessConfiguration& ppConfig);
void RenderGaussian(IRenderNodeContextManager& renderNodeContextMgr, IRenderCommandList& cmdList,
const RenderPass& renderPassBase, const PostProcessConfiguration& ppConfig);
void UpdateGlobalSet(IRenderCommandList& cmdList);
void CreateTargets(IRenderNodeContextManager& renderNodeContextMgr, const BASE_NS::Math::UVec2 baseSize);
struct ImageData {
RenderHandle mipImage;
uint32_t mipCount { 0 };
BASE_NS::Format format { BASE_NS::Format::BASE_FORMAT_UNDEFINED };
BASE_NS::Math::UVec2 size { 0u, 0u };
};
ImageData imageData_;
RenderHandle globalUbo_;
// additional target
struct TemporaryTarget {
RenderHandleReference tex;
BASE_NS::Math::UVec2 texSize { 0, 0 };
BASE_NS::Format format { BASE_NS::Format::BASE_FORMAT_UNDEFINED };
};
TemporaryTarget tempTarget_;
struct RenderDataHandles {
RenderHandle shader;
PipelineLayout pipelineLayout;
RenderHandle psoScale;
RenderHandle psoBlur;
};
RenderDataHandles renderData_;
IDescriptorSetBinder::Ptr globalSet0_;
BASE_NS::vector binders_;
RenderHandle samplerHandle_;
BlurInfo blurInfo_;
};
RENDER_END_NAMESPACE()
#endif // CORE__RENDER__NODE__RENDER_BLUR_H