2
3
4
5
10#include "Render/FrameInfo.h"
12#include <NvPerfMiniTraceVulkan.h>
18#define RYML_SINGLE_HDR_DEFINE_NOW
19#include <ryml_all.hpp>
21#include <windows-desktop-x64/nvperf_host_impl.h>
36
37
46
47
48 NSPERF_CHECK(m_Sampler.Initialize(state.m_Instance, state.m_PhysicalDevice, state.m_Device))
51
52
53
57
58
59
60
61 uint32_t samplingIntervalInNs = 1000 * 1000 * 1000 / samplingFrequencyInHz;
62 uint32_t maxDecodeLatencyInNs = 1000 * 1000 * 1000 * 10;
63 size_t maxFrameLatency = MaxFrameInFlight + 1;
65 state.m_GraphicQueue ,
66 state.m_GraphicQueueFamily ,
67 samplingIntervalInNs ,
68 maxDecodeLatencyInNs ,
73
74
75 nv::perf::hud::HudPresets hudPresents;
76 auto deviceIdentifiers = m_Sampler.GetGpuDeviceIdentifiers();
77 NSPERF_CHECK(hudPresents.Initialize(deviceIdentifiers.pChipName))
78 NSPERF_CHECK(m_HudDataModel.Load(hudPresents.GetPreset(
"SpicesEngineDefault")))
81
82
83
84 double plotTimeWidthInSeconds = 4.0;
85 NSPERF_CHECK(m_HudDataModel.Initialize(1.0 / samplingFrequencyInHz, plotTimeWidthInSeconds))
88
89
90
91 NSPERF_CHECK(m_Sampler.SetConfig(&m_HudDataModel.GetCounterConfiguration()))
92 NSPERF_CHECK(m_HudDataModel.PrepareSampleProcessing(m_Sampler.GetCounterData()))
99 if (!m_NsightPerfGPUProfilerHUD)
101 m_NsightPerfGPUProfilerHUD = std::make_shared<NsightPerfGPUProfilerHUD>(state);
113
114
115
132 const bool decoded = m_Sampler.DecodeCounters();
133 const bool consumed = m_Sampler.ConsumeSamples([&](
134 const uint8_t* pCounterDataImage ,
135 size_t counterDataImageSize ,
136 uint32_t rangeIndex ,
140 return m_HudDataModel.AddSample(pCounterDataImage, counterDataImageSize, rangeIndex);
143 for (
const auto& frameDelimiter : m_Sampler.GetFrameDelimiters())
145 m_HudDataModel.AddFrameDelimiter(frameDelimiter.frameEndTime);
152 VkInstance instance ,
153 VkPhysicalDevice physicalDevice ,
154 std::vector<
const char*>& deviceExtensionNames
159 std::vector<
const char*> deviceExtensionNamesTemp;
161 nv::perf::VulkanAppendDeviceRequiredExtensions(
164 (
void*)vkGetInstanceProcAddr,
165 deviceExtensionNamesTemp
169
170
173 for (
const char* e : deviceExtensionNamesTemp)
175 deviceExtensionNames.push_back(e);
179 void NsightPerfGPUProfilerHUD::QueryInstanceExtensionRequirement(std::vector<
const char*>& instanceExtensionNames, uint32_t apiVersion)
186
187
188 const char* paths[] = {
"G:/NvPerf/lib"};
189 NVPW_SetLibraryLoadPaths_Params params{ NVPW_SetLibraryLoadPaths_Params_STRUCT_SIZE };
190 params.numPaths =
sizeof(paths) /
sizeof(paths[0]);
191 params.ppPaths = paths;
192 NVPW_SetLibraryLoadPaths(¶ms);
196 std::vector<
const char*> instanceExtensions;
198 NSPERF_CHECK(nv::perf::VulkanAppendInstanceRequiredExtensions(instanceExtensions, apiVersion))
200 for (
const char* e : instanceExtensions)
202 instanceExtensionNames.push_back(e);
212 m_Sampler.OnFrameEnd();
216
217
218 static bool lastInSession =
false;
221
222
223
235
236
256
257
264
265
266 const ImGuiIO& io = ImGui::GetIO();
267 if (io.Framerate >= 60.0f)
271 else if(io.Framerate >= 30.0f)
275 else if (io.Framerate >= 10.0f)
#define NSPERF_CHECK(val)
#define SPICES_PROFILE_ZONE
void Create(VulkanState &state)
Create this.
NsightPerfGPUProfilerHUD(VulkanState &state)
Constructor Function.
void RenderHUD()
Inform the sampler about the frame end, and use the HUD renderer to visualize the populated data mode...
void Reset()
Reset Sampler.
bool m_IsReachBufferBound
True if Decode and Consume failed.
void ConsumeSample()
Samples to be periodically fetched and processed by the sampler utility classes. Caveat: If this is n...
bool m_IsInSession
True if in a Session.
void EndFrame(VulkanState &state)
End Sampler Frame.
static std::shared_ptr< NsightPerfGPUProfilerHUD > m_NsightPerfGPUProfilerHUD
This Single Instance.
static void CreateInstance(VulkanState &state)
Create this Single Instance.
bool m_IsHUDInitialized
True id HUD is initialized.
uint32_t SelectSamplingFrequency() const
Select a SamplingFrequency (Hz) by ImGui::IO.
VulkanState & m_VulkanState
VulkanState.
void InitHUDRenderer()
Initialize ImGui, ImPlot and pass the data model into HUD Renderer.
Wrapper of Nvidia Nsight Performance HUD.
This struct contains all Vulkan object in used global.