-
Notifications
You must be signed in to change notification settings - Fork 63
/
Copy pathNrdIntegration.h
70 lines (57 loc) · 2 KB
/
NrdIntegration.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/***************************************************************************
# Copyright (c) 2020-2023, NVIDIA CORPORATION. All rights reserved.
#
# NVIDIA CORPORATION and its licensors retain all intellectual property
# and proprietary rights in and to this software, related documentation
# and any modifications thereto. Any use, reproduction, disclosure or
# distribution of this software and related documentation without an express
# license agreement from NVIDIA CORPORATION is strictly prohibited.
**************************************************************************/
#pragma once
#if WITH_NRD
#include <NRD.h>
#include <nvrhi/nvrhi.h>
#include <unordered_map>
#include <donut/engine/BindingCache.h>
#include <donut/core/math/math.h>
class RenderTargets;
namespace donut::engine
{
class PlanarView;
}
class NrdIntegration
{
public:
NrdIntegration(nvrhi::IDevice* device, nrd::Denoiser denoiser);
bool Initialize(uint32_t width, uint32_t height);
bool IsAvailable() const;
void RunDenoiserPasses(
nvrhi::ICommandList* commandList,
const RenderTargets& renderTargets,
const donut::engine::PlanarView& view,
const donut::engine::PlanarView& viewPrev,
uint32_t frameIndex,
bool enableConfidenceInputs,
const void* denoiserSettings,
float debug);
const nrd::Denoiser GetDenoiser() const;
private:
nvrhi::DeviceHandle m_device;
bool m_initialized;
nrd::Instance* m_instance;
nrd::Denoiser m_denoiser;
struct NrdPipeline
{
nvrhi::ShaderHandle Shader;
nvrhi::BindingLayoutHandle BindingLayout;
nvrhi::ComputePipelineHandle Pipeline;
};
nvrhi::BufferHandle m_constantBuffer;
std::vector<NrdPipeline> m_pipelines;
std::vector<nvrhi::SamplerHandle> m_samplers;
std::vector<nvrhi::TextureHandle> m_permanentTextures;
std::vector<nvrhi::TextureHandle> m_transientTextures;
donut::engine::BindingCache m_bindingCache;
dm::float2 m_pixelOffsetPrev;
};
#endif