4
4
#include " nbl/video/utilities/renderdoc.h"
5
5
#include " nbl/video/utilities/ngfx.h"
6
6
7
+ // TODO: temporary hopefully
8
+ #include " C:\Program Files\NVIDIA Corporation\Nsight Graphics 2024.1.0\SDKs\NsightGraphicsSDK\0.8.0\include\NGFX_Injection.h"
9
+
7
10
#if defined(_NBL_POSIX_API_)
8
11
#include < dlfcn.h>
9
12
#endif
10
13
11
14
namespace nbl ::video
12
15
{
13
16
17
+
14
18
std::span<IPhysicalDevice* const > IAPIConnection::getPhysicalDevices () const
15
19
{
16
20
static_assert (sizeof (std::unique_ptr<IPhysicalDevice>) == sizeof (void *));
@@ -46,8 +50,79 @@ IAPIConnection::IAPIConnection(const SFeatures& enabledFeatures)
46
50
#endif
47
51
48
52
// probably is platform agnostic, for now
49
- injectNGFXToProcess (m_ngfx_api);
53
+ m_ngfx_api.injectNGFXToProcess ();
54
+
55
+ m_debuggerType = m_ngfx_api.useNGFX ? EDT_NGFX : // ngfx takes priority?
56
+ m_rdoc_api ? EDT_RENDERDOC : EDT_NONE;
57
+ }
58
+ }
59
+
60
+ bool IAPIConnection::SNGFXIntegration::injectNGFXToProcess ()
61
+ {
62
+ uint32_t numInstallations = 0 ;
63
+ auto result = NGFX_Injection_EnumerateInstallations (&numInstallations, nullptr );
64
+ if (numInstallations == 0 || NGFX_INJECTION_RESULT_OK != result)
65
+ {
66
+ useNGFX = false ;
67
+ return false ;
68
+ }
69
+
70
+ std::vector<NGFX_Injection_InstallationInfo> installations (numInstallations);
71
+ result = NGFX_Injection_EnumerateInstallations (&numInstallations, installations.data ());
72
+ if (numInstallations == 0 || NGFX_INJECTION_RESULT_OK != result)
73
+ {
74
+ useNGFX = false ;
75
+ return false ;
76
+ }
77
+
78
+ // get latest installation
79
+ NGFX_Injection_InstallationInfo versionInfo = installations.back ();
80
+
81
+ uint32_t numActivities = 0 ;
82
+ result = NGFX_Injection_EnumerateActivities (&versionInfo, &numActivities, nullptr );
83
+ if (numActivities == 0 || NGFX_INJECTION_RESULT_OK != result)
84
+ {
85
+ useNGFX = false ;
86
+ return false ;
50
87
}
88
+
89
+ std::vector<NGFX_Injection_Activity> activities (numActivities);
90
+ result = NGFX_Injection_EnumerateActivities (&versionInfo, &numActivities, activities.data ());
91
+ if (NGFX_INJECTION_RESULT_OK != result)
92
+ {
93
+ useNGFX = false ;
94
+ return false ;
95
+ }
96
+
97
+ const NGFX_Injection_Activity* pActivityToInject = nullptr ;
98
+ for (const NGFX_Injection_Activity& activity : activities)
99
+ {
100
+ if (activity.type == NGFX_INJECTION_ACTIVITY_FRAME_DEBUGGER) // only want frame debugger
101
+ {
102
+ pActivityToInject = &activity;
103
+ break ;
104
+ }
105
+ }
106
+
107
+ if (!pActivityToInject) {
108
+ useNGFX = false ;
109
+ return false ;
110
+ }
111
+
112
+ result = NGFX_Injection_InjectToProcess (&versionInfo, pActivityToInject);
113
+ if (NGFX_INJECTION_RESULT_OK != result)
114
+ {
115
+ useNGFX = false ;
116
+ return false ;
117
+ }
118
+
119
+ useNGFX = true ;
120
+ return true ;
121
+ }
122
+
123
+ bool IAPIConnection::SNGFXIntegration::executeNGFXCommand ()
124
+ {
125
+ return NGFX_Injection_ExecuteActivityCommand () == NGFX_INJECTION_RESULT_OK;
51
126
}
52
127
53
128
}
0 commit comments