44#include " nbl/video/utilities/renderdoc.h"
55#include " nbl/video/utilities/ngfx.h"
66
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+
710#if defined(_NBL_POSIX_API_)
811 #include < dlfcn.h>
912#endif
1013
1114namespace nbl ::video
1215{
1316
17+
1418std::span<IPhysicalDevice* const > IAPIConnection::getPhysicalDevices () const
1519{
1620 static_assert (sizeof (std::unique_ptr<IPhysicalDevice>) == sizeof (void *));
@@ -46,8 +50,79 @@ IAPIConnection::IAPIConnection(const SFeatures& enabledFeatures)
4650 #endif
4751
4852 // 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 ;
5087 }
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;
51126}
52127
53128}
0 commit comments