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