1
- #pragma once
1
+ #pragma once
2
2
#include " XeSSFeature.h"
3
3
4
4
#include < pch.h>
10
10
11
11
inline void XeSSLogCallback (const char * Message, xess_logging_level_t Level)
12
12
{
13
- spdlog::log ((spdlog::level::level_enum) ((int ) Level + 1 ), " XeSSFeature::LogCallback XeSS Runtime ({0})" , Message);
13
+ spdlog::log ((spdlog::level::level_enum)((int ) Level + 1 ), " XeSSFeature::LogCallback XeSS Runtime ({0})" , Message);
14
14
}
15
15
16
16
bool XeSSFeature::InitXeSS (ID3D12Device* device, const NVSDK_NGX_Parameter* InParameters)
17
+ {
18
+
19
+ return true ;
20
+ }
21
+
22
+ XeSSFeature::XeSSFeature (unsigned int handleId, NVSDK_NGX_Parameter* InParameters) : IFeature(handleId, InParameters)
23
+ {
24
+ _initParameters = SetInitParameters (InParameters);
25
+ }
26
+
27
+ bool XeSSFeature::Init (ApiContext* context, const NVSDK_NGX_Parameter* InParameters)
17
28
{
18
29
LOG_FUNC ();
30
+ if (IsInited ())
31
+ return true ;
19
32
20
33
if (!_moduleLoaded)
21
34
{
22
35
LOG_ERROR (" libxess.dll not loaded!" );
23
36
return false ;
24
37
}
25
38
26
- if (IsInited ())
27
- return true ;
28
-
29
- if (device == nullptr )
39
+ if (!CheckInitializationContext (context))
30
40
{
31
- LOG_ERROR (" D3D12Device is null !" );
41
+ LOG_ERROR (" XeSSFeature::Init context is not valid !" );
32
42
return false ;
33
43
}
34
44
35
45
State::Instance ().skipSpoofing = true ;
36
46
37
- auto ret = XeSSProxy::D3D12CreateContext ()(device , &_xessContext);
47
+ auto ret = CreateXessContext (context , &_xessContext);
38
48
39
49
if (ret != XESS_RESULT_SUCCESS)
40
50
{
@@ -48,88 +58,9 @@ bool XeSSFeature::InitXeSS(ID3D12Device* device, const NVSDK_NGX_Parameter* InPa
48
58
ret = XeSSProxy::SetLoggingCallback ()(_xessContext, XESS_LOGGING_LEVEL_DEBUG, XeSSLogCallback);
49
59
LOG_DEBUG (" xessSetLoggingCallback : {0}" , ResultToString (ret));
50
60
51
- xess_d3d12_init_params_t xessParams{};
52
-
53
- xessParams.initFlags = XESS_INIT_FLAG_NONE;
54
-
55
- if (DepthInverted ())
56
- xessParams.initFlags |= XESS_INIT_FLAG_INVERTED_DEPTH;
57
-
58
- if (AutoExposure ())
59
- xessParams.initFlags |= XESS_INIT_FLAG_ENABLE_AUTOEXPOSURE;
60
- else
61
- xessParams.initFlags |= XESS_INIT_FLAG_EXPOSURE_SCALE_TEXTURE;
62
-
63
- if (!IsHdr ())
64
- xessParams.initFlags |= XESS_INIT_FLAG_LDR_INPUT_COLOR;
65
-
66
- if (JitteredMV ())
67
- xessParams.initFlags |= XESS_INIT_FLAG_JITTERED_MV;
68
-
69
- if (!LowResMV ())
70
- xessParams.initFlags |= XESS_INIT_FLAG_HIGH_RES_MV;
71
-
72
- if (!Config::Instance ()->DisableReactiveMask .value_or (true ))
73
- {
74
- xessParams.initFlags |= XESS_INIT_FLAG_RESPONSIVE_PIXEL_MASK;
75
- LOG_DEBUG (" xessParams.initFlags (ReactiveMaskActive) {0:b}" , xessParams.initFlags );
76
- }
77
-
78
- switch (PerfQualityValue ())
79
- {
80
- case NVSDK_NGX_PerfQuality_Value_UltraPerformance:
81
- if (Version ().major >= 1 && Version ().minor >= 3 )
82
- xessParams.qualitySetting = XESS_QUALITY_SETTING_ULTRA_PERFORMANCE;
83
- else
84
- xessParams.qualitySetting = XESS_QUALITY_SETTING_PERFORMANCE;
85
-
86
- break ;
87
-
88
- case NVSDK_NGX_PerfQuality_Value_MaxPerf:
89
- if (Version ().major >= 1 && Version ().minor >= 3 )
90
- xessParams.qualitySetting = XESS_QUALITY_SETTING_BALANCED;
91
- else
92
- xessParams.qualitySetting = XESS_QUALITY_SETTING_PERFORMANCE;
93
-
94
- break ;
95
-
96
- case NVSDK_NGX_PerfQuality_Value_Balanced:
97
- if (Version ().major >= 1 && Version ().minor >= 3 )
98
- xessParams.qualitySetting = XESS_QUALITY_SETTING_QUALITY;
99
- else
100
- xessParams.qualitySetting = XESS_QUALITY_SETTING_BALANCED;
101
-
102
- break ;
103
-
104
- case NVSDK_NGX_PerfQuality_Value_MaxQuality:
105
- if (Version ().major >= 1 && Version ().minor >= 3 )
106
- xessParams.qualitySetting = XESS_QUALITY_SETTING_ULTRA_QUALITY;
107
- else
108
- xessParams.qualitySetting = XESS_QUALITY_SETTING_QUALITY;
109
-
110
- break ;
61
+ uint32_t initFlags = GetInitFlags ();
111
62
112
- case NVSDK_NGX_PerfQuality_Value_UltraQuality:
113
- if (Version ().major >= 1 && Version ().minor >= 3 )
114
- xessParams.qualitySetting = XESS_QUALITY_SETTING_ULTRA_QUALITY_PLUS;
115
- else
116
- xessParams.qualitySetting = XESS_QUALITY_SETTING_ULTRA_QUALITY;
117
-
118
- break ;
119
-
120
- case NVSDK_NGX_PerfQuality_Value_DLAA:
121
- if (Version ().major >= 1 && Version ().minor >= 3 )
122
- xessParams.qualitySetting = XESS_QUALITY_SETTING_AA;
123
- else
124
- xessParams.qualitySetting = XESS_QUALITY_SETTING_ULTRA_QUALITY;
125
-
126
- break ;
127
-
128
- default :
129
- xessParams.qualitySetting =
130
- XESS_QUALITY_SETTING_BALANCED; // Set out-of-range value for non-existing XESS_QUALITY_SETTING_BALANCED mode
131
- break ;
132
- }
63
+ xess_quality_settings_t qualitySetting = GetQualitySetting ();
133
64
134
65
if (Config::Instance ()->OutputScalingEnabled .value_or (false ) && LowResMV ())
135
66
{
@@ -168,114 +99,9 @@ bool XeSSFeature::InitXeSS(ID3D12Device* device, const NVSDK_NGX_Parameter* InPa
168
99
}
169
100
}
170
101
171
- xessParams.outputResolution .x = TargetWidth ();
172
- xessParams.outputResolution .y = TargetHeight ();
173
-
174
- // create heaps to prevent create heap errors of xess
175
- if (Config::Instance ()->CreateHeaps .value_or (true ))
176
- {
177
- HRESULT hr;
178
- xess_properties_t xessProps{};
179
- ret = XeSSProxy::GetProperties ()(_xessContext, &xessParams.outputResolution , &xessProps);
180
-
181
- if (ret == XESS_RESULT_SUCCESS)
182
- {
183
- CD3DX12_HEAP_DESC bufferHeapDesc (xessProps.tempBufferHeapSize , D3D12_HEAP_TYPE_DEFAULT);
184
- State::Instance ().skipHeapCapture = true ;
185
- hr = device->CreateHeap (&bufferHeapDesc, IID_PPV_ARGS (&_localBufferHeap));
186
- State::Instance ().skipHeapCapture = false ;
187
-
188
- if (SUCCEEDED (hr))
189
- {
190
- D3D12_HEAP_DESC textureHeapDesc{
191
- xessProps.tempTextureHeapSize ,
192
- {D3D12_HEAP_TYPE_DEFAULT, D3D12_CPU_PAGE_PROPERTY_UNKNOWN, D3D12_MEMORY_POOL_UNKNOWN, 0 , 0 },
193
- 0 ,
194
- D3D12_HEAP_FLAG_ALLOW_ONLY_NON_RT_DS_TEXTURES};
195
-
196
- State::Instance ().skipHeapCapture = true ;
197
- hr = device->CreateHeap (&textureHeapDesc, IID_PPV_ARGS (&_localTextureHeap));
198
- State::Instance ().skipHeapCapture = false ;
199
-
200
- if (SUCCEEDED (hr))
201
- {
202
- Config::Instance ()->CreateHeaps = true ;
203
-
204
- LOG_DEBUG (" using _localBufferHeap & _localTextureHeap!" );
205
-
206
- xessParams.bufferHeapOffset = 0 ;
207
- xessParams.textureHeapOffset = 0 ;
208
- xessParams.pTempBufferHeap = _localBufferHeap;
209
- xessParams.pTempTextureHeap = _localTextureHeap;
210
- }
211
- else
212
- {
213
- _localBufferHeap->Release ();
214
- LOG_ERROR (" CreateHeap textureHeapDesc failed {0:x}!" , (UINT) hr);
215
- }
216
- }
217
- else
218
- {
219
- LOG_ERROR (" CreateHeap bufferHeapDesc failed {0:x}!" , (UINT) hr);
220
- }
221
- }
222
- else
223
- {
224
- LOG_ERROR (" xessGetProperties failed {0}!" , ResultToString (ret));
225
- }
226
- }
227
-
228
- // try to build pipelines with local pipeline object
229
- if (Config::Instance ()->BuildPipelines .value_or (true ))
230
- {
231
- LOG_DEBUG (" xessD3D12BuildPipelines!" );
232
- State::Instance ().skipHeapCapture = true ;
102
+ xess_2d_t outputResolution = {TargetWidth (), TargetHeight ()};
233
103
234
- ID3D12Device1* device1;
235
- if (FAILED (device->QueryInterface (IID_PPV_ARGS (&device1))))
236
- {
237
- LOG_ERROR (" QueryInterface device1 failed!" );
238
- ret = XeSSProxy::D3D12BuildPipelines ()(_xessContext, NULL , false , xessParams.initFlags );
239
- }
240
- else
241
- {
242
- HRESULT hr = device1->CreatePipelineLibrary (nullptr , 0 , IID_PPV_ARGS (&_localPipeline));
243
-
244
- if (FAILED (hr) || !_localPipeline)
245
- {
246
- LOG_ERROR (" CreatePipelineLibrary failed {0:x}!" , (UINT) hr);
247
- ret = XeSSProxy::D3D12BuildPipelines ()(_xessContext, NULL , false , xessParams.initFlags );
248
- }
249
- else
250
- {
251
- ret = XeSSProxy::D3D12BuildPipelines ()(_xessContext, _localPipeline, false , xessParams.initFlags );
252
-
253
- if (ret != XESS_RESULT_SUCCESS)
254
- {
255
- LOG_ERROR (" xessD3D12BuildPipelines error with _localPipeline: {0}" , ResultToString (ret));
256
- ret = XeSSProxy::D3D12BuildPipelines ()(_xessContext, NULL , false , xessParams.initFlags );
257
- }
258
- else
259
- {
260
- LOG_DEBUG (" using _localPipelines!" );
261
- xessParams.pPipelineLibrary = _localPipeline;
262
- }
263
- }
264
- }
265
-
266
- if (device1 != nullptr )
267
- device1->Release ();
268
-
269
- State::Instance ().skipHeapCapture = false ;
270
-
271
- if (ret != XESS_RESULT_SUCCESS)
272
- {
273
- LOG_ERROR (" xessD3D12BuildPipelines error: {0}" , ResultToString (ret));
274
- return false ;
275
- }
276
- }
277
-
278
- LOG_DEBUG (" xessD3D12Init!" );
104
+ XessInitParams xessParams = CreateInitParams (outputResolution, qualitySetting, initFlags);
279
105
280
106
if (Config::Instance ()->NetworkModel .has_value () && Config::Instance ()->NetworkModel .value () >= 0 &&
281
107
Config::Instance ()->NetworkModel .value () <= 5 )
@@ -285,9 +111,7 @@ bool XeSSFeature::InitXeSS(ID3D12Device* device, const NVSDK_NGX_Parameter* InPa
285
111
LOG_ERROR (" xessSelectNetworkModel result: {0}" , ResultToString (ret));
286
112
}
287
113
288
- State::Instance ().skipHeapCapture = true ;
289
- ret = XeSSProxy::D3D12Init ()(_xessContext, &xessParams);
290
- State::Instance ().skipHeapCapture = false ;
114
+ ret = ApiInit (context, &xessParams);
291
115
292
116
State::Instance ().skipSpoofing = false ;
293
117
@@ -299,40 +123,98 @@ bool XeSSFeature::InitXeSS(ID3D12Device* device, const NVSDK_NGX_Parameter* InPa
299
123
300
124
SetInit (true );
301
125
126
+ InitMenuAndOutput (context);
127
+
302
128
return true ;
303
129
}
304
130
305
- XeSSFeature::XeSSFeature (unsigned int handleId, NVSDK_NGX_Parameter* InParameters) : IFeature(handleId, InParameters)
131
+ bool XeSSFeature::Evaluate (EvalContext* context, const NVSDK_NGX_Parameter* InParameters,
132
+ const NVSDK_NGX_Parameter* OutParameters)
306
133
{
307
- _initParameters = SetInitParameters (InParameters) ;
134
+ return false ;
308
135
}
309
136
310
- XeSSFeature::~XeSSFeature ()
137
+ uint32_t XeSSFeature::GetInitFlags ()
311
138
{
312
- if (State::Instance ().isShuttingDown || _xessContext == nullptr )
313
- return ;
139
+ uint32_t initFlags = XESS_INIT_FLAG_NONE;
140
+ if (DepthInverted ())
141
+ initFlags |= XESS_INIT_FLAG_INVERTED_DEPTH;
314
142
315
- if (_xessContext)
316
- {
317
- XeSSProxy::DestroyContext ()(_xessContext);
318
- _xessContext = nullptr ;
319
- }
143
+ if (AutoExposure ())
144
+ initFlags |= XESS_INIT_FLAG_ENABLE_AUTOEXPOSURE;
145
+ else
146
+ initFlags |= XESS_INIT_FLAG_EXPOSURE_SCALE_TEXTURE;
147
+
148
+ if (!IsHdr ())
149
+ initFlags |= XESS_INIT_FLAG_LDR_INPUT_COLOR;
150
+
151
+ if (JitteredMV ())
152
+ initFlags |= XESS_INIT_FLAG_JITTERED_MV;
153
+
154
+ if (!LowResMV ())
155
+ initFlags |= XESS_INIT_FLAG_HIGH_RES_MV;
320
156
321
- if (_localPipeline != nullptr )
157
+ if (! Config::Instance ()-> DisableReactiveMask . value_or ( true ) )
322
158
{
323
- _localPipeline-> Release () ;
324
- _localPipeline = nullptr ;
159
+ initFlags |= XESS_INIT_FLAG_RESPONSIVE_PIXEL_MASK ;
160
+ LOG_DEBUG ( " xessParams.initFlags (ReactiveMaskActive) {0:b} " , initFlags) ;
325
161
}
162
+ return initFlags;
163
+ }
326
164
327
- if (_localBufferHeap != nullptr )
165
+ xess_quality_settings_t XeSSFeature::GetQualitySetting ()
166
+ {
167
+ switch (PerfQualityValue ())
328
168
{
329
- _localBufferHeap->Release ();
330
- _localBufferHeap = nullptr ;
169
+ case NVSDK_NGX_PerfQuality_Value_UltraPerformance:
170
+ if (Version ().major >= 1 && Version ().minor >= 3 )
171
+ return XESS_QUALITY_SETTING_ULTRA_PERFORMANCE;
172
+ else
173
+ return XESS_QUALITY_SETTING_PERFORMANCE;
174
+ break ;
175
+ case NVSDK_NGX_PerfQuality_Value_MaxPerf:
176
+ if (Version ().major >= 1 && Version ().minor >= 3 )
177
+ return XESS_QUALITY_SETTING_BALANCED;
178
+ else
179
+ return XESS_QUALITY_SETTING_PERFORMANCE;
180
+ break ;
181
+ case NVSDK_NGX_PerfQuality_Value_Balanced:
182
+ if (Version ().major >= 1 && Version ().minor >= 3 )
183
+ return XESS_QUALITY_SETTING_QUALITY;
184
+ else
185
+ return XESS_QUALITY_SETTING_BALANCED;
186
+ break ;
187
+ case NVSDK_NGX_PerfQuality_Value_MaxQuality:
188
+ if (Version ().major >= 1 && Version ().minor >= 3 )
189
+ return XESS_QUALITY_SETTING_ULTRA_QUALITY;
190
+ else
191
+ return XESS_QUALITY_SETTING_QUALITY;
192
+ break ;
193
+ case NVSDK_NGX_PerfQuality_Value_UltraQuality:
194
+ if (Version ().major >= 1 && Version ().minor >= 3 )
195
+ return XESS_QUALITY_SETTING_ULTRA_QUALITY_PLUS;
196
+ else
197
+ return XESS_QUALITY_SETTING_ULTRA_QUALITY;
198
+ break ;
199
+
200
+ case NVSDK_NGX_PerfQuality_Value_DLAA:
201
+ if (Version ().major >= 1 && Version ().minor >= 3 )
202
+ return XESS_QUALITY_SETTING_AA;
203
+ else
204
+ return XESS_QUALITY_SETTING_ULTRA_QUALITY;
205
+ break ;
331
206
}
207
+ return XESS_QUALITY_SETTING_BALANCED;
208
+ }
332
209
333
- if (_localTextureHeap != nullptr )
210
+ XeSSFeature::~XeSSFeature ()
211
+ {
212
+ if (State::Instance ().isShuttingDown || _xessContext == nullptr )
213
+ return ;
214
+
215
+ if (_xessContext)
334
216
{
335
- _localTextureHeap-> Release ( );
336
- _localTextureHeap = nullptr ;
217
+ XeSSProxy::DestroyContext ()(_xessContext );
218
+ _xessContext = nullptr ;
337
219
}
338
220
}
0 commit comments