@@ -174,6 +174,144 @@ extern "C" {
174
174
return Ok (n, alreadyLoggedOk);
175
175
}
176
176
177
+ NvAPI_Status __cdecl NvAPI_D3D12_CreateCubinComputeShaderExV2 (NVAPI_D3D12_CREATE_CUBIN_SHADER_PARAMS* pParams) {
178
+ static constexpr auto V1StructSize = offsetof (NVAPI_D3D12_CREATE_CUBIN_SHADER_PARAMS, hShader) + sizeof (NVAPI_D3D12_CREATE_CUBIN_SHADER_PARAMS::hShader);
179
+ // static_assert(V1StructSize == sizeof(NVAPI_D3D12_CREATE_CUBIN_SHADER_PARAMS));
180
+ constexpr auto n = __func__;
181
+ thread_local bool alreadyLoggedNoImplementation = false ;
182
+ thread_local bool alreadyLoggedError = false ;
183
+ thread_local bool alreadyLoggedOk = false ;
184
+
185
+ if (log ::tracing ())
186
+ log ::trace (n, log ::fmt::nvapi_d3d12_create_cubin_shader_params (pParams));
187
+
188
+ if (!pParams)
189
+ return InvalidPointer (n);
190
+
191
+ pParams->structSizeOut = V1StructSize;
192
+
193
+ if (pParams->structSizeIn < V1StructSize)
194
+ return IncompatibleStructVersion (n, pParams->structSizeIn );
195
+
196
+ if (!pParams->pDevice || !pParams->pShaderName )
197
+ return InvalidArgument (n);
198
+
199
+ auto device = NvapiD3d12Device::GetOrCreate (pParams->pDevice );
200
+ if (!device)
201
+ return NoImplementation (n, alreadyLoggedNoImplementation);
202
+
203
+ D3D12_CREATE_CUBIN_SHADER_PARAMS params;
204
+ params.pNext = nullptr ;
205
+ params.pCubin = pParams->pCubin ;
206
+ params.size = pParams->size ;
207
+ params.blockX = pParams->blockX ;
208
+ params.blockY = pParams->blockY ;
209
+ params.blockZ = pParams->blockZ ;
210
+ params.dynSharedMemBytes = pParams->dynSharedMemBytes ;
211
+ params.pShaderName = pParams->pShaderName ;
212
+ params.flags = pParams->flags ;
213
+
214
+ switch (device->CreateCubinComputeShaderExV2 (¶ms)) {
215
+ case S_OK:
216
+ pParams->hShader = reinterpret_cast <NVDX_ObjectHandle>(params.hShader );
217
+ return Ok (n, alreadyLoggedOk);
218
+ case E_INVALIDARG:
219
+ return InvalidArgument (n);
220
+ case E_NOTIMPL:
221
+ return NoImplementation (n, alreadyLoggedNoImplementation);
222
+ default :
223
+ return Error (n, alreadyLoggedError);
224
+ }
225
+ }
226
+
227
+ NvAPI_Status __cdecl NvAPI_D3D12_GetCudaMergedTextureSamplerObject (NVAPI_D3D12_GET_CUDA_MERGED_TEXTURE_SAMPLER_OBJECT_PARAMS* pParams) {
228
+ static constexpr auto V1StructSize = offsetof (NVAPI_D3D12_GET_CUDA_MERGED_TEXTURE_SAMPLER_OBJECT_PARAMS, textureHandle) + sizeof (NVAPI_D3D12_GET_CUDA_MERGED_TEXTURE_SAMPLER_OBJECT_PARAMS::textureHandle);
229
+ // static_assert(V1StructSize == sizeof(NVAPI_D3D12_GET_CUDA_MERGED_TEXTURE_SAMPLER_OBJECT_PARAMS));
230
+ constexpr auto n = __func__;
231
+ thread_local bool alreadyLoggedNoImplementation = false ;
232
+ thread_local bool alreadyLoggedError = false ;
233
+ thread_local bool alreadyLoggedOk = false ;
234
+
235
+ if (log ::tracing ())
236
+ log ::trace (n, log ::fmt::nvapi_d3d12_get_cuda_merged_texture_sampler_object_params (pParams));
237
+
238
+ if (!pParams)
239
+ return InvalidPointer (n);
240
+
241
+ pParams->structSizeOut = V1StructSize;
242
+
243
+ if (pParams->structSizeIn < V1StructSize)
244
+ return IncompatibleStructVersion (n, pParams->structSizeIn );
245
+
246
+ if (!pParams->pDevice || !pParams->texDesc .ptr )
247
+ return InvalidArgument (n);
248
+
249
+ auto device = NvapiD3d12Device::GetOrCreate (pParams->pDevice );
250
+ if (!device)
251
+ return NoImplementation (n, alreadyLoggedNoImplementation);
252
+
253
+ D3D12_GET_CUDA_MERGED_TEXTURE_SAMPLER_OBJECT_PARAMS params;
254
+ params.pNext = nullptr ;
255
+ params.texDesc = pParams->texDesc .ptr ;
256
+ params.smpDesc = pParams->smpDesc .ptr ;
257
+
258
+ switch (device->GetCudaMergedTextureSamplerObject (¶ms)) {
259
+ case S_OK:
260
+ pParams->textureHandle = params.textureHandle ;
261
+ return Ok (n, alreadyLoggedOk);
262
+ case E_INVALIDARG:
263
+ return InvalidArgument (n);
264
+ case E_NOTIMPL:
265
+ return NoImplementation (n, alreadyLoggedNoImplementation);
266
+ default :
267
+ return Error (n, alreadyLoggedError);
268
+ }
269
+ }
270
+
271
+ NvAPI_Status __cdecl NvAPI_D3D12_GetCudaIndependentDescriptorObject (NVAPI_D3D12_GET_CUDA_INDEPENDENT_DESCRIPTOR_OBJECT_PARAMS* pParams) {
272
+ static constexpr auto V1StructSize = offsetof (NVAPI_D3D12_GET_CUDA_INDEPENDENT_DESCRIPTOR_OBJECT_PARAMS, handle) + sizeof (NVAPI_D3D12_GET_CUDA_INDEPENDENT_DESCRIPTOR_OBJECT_PARAMS::handle);
273
+ // static_assert(V1StructSize == sizeof(NVAPI_D3D12_GET_CUDA_INDEPENDENT_DESCRIPTOR_OBJECT_PARAMS));
274
+ constexpr auto n = __func__;
275
+ thread_local bool alreadyLoggedNoImplementation = false ;
276
+ thread_local bool alreadyLoggedError = false ;
277
+ thread_local bool alreadyLoggedOk = false ;
278
+
279
+ if (log ::tracing ())
280
+ log ::trace (n, log ::fmt::nvapi_d3d12_get_cuda_independent_descriptor_object_params (pParams));
281
+
282
+ if (!pParams)
283
+ return InvalidPointer (n);
284
+
285
+ pParams->structSizeOut = V1StructSize;
286
+
287
+ if (pParams->structSizeIn < V1StructSize)
288
+ return IncompatibleStructVersion (n, pParams->structSizeIn );
289
+
290
+ if (!pParams->pDevice || !pParams->desc .ptr )
291
+ return InvalidArgument (n);
292
+
293
+ auto device = NvapiD3d12Device::GetOrCreate (pParams->pDevice );
294
+ if (!device)
295
+ return NoImplementation (n, alreadyLoggedNoImplementation);
296
+
297
+ D3D12_GET_CUDA_INDEPENDENT_DESCRIPTOR_OBJECT_PARAMS params;
298
+ params.pNext = nullptr ;
299
+ params.type = static_cast <D3D12_GET_CUDA_INDEPENDENT_DESCRIPTOR_OBJECT_TYPE>(pParams->type );
300
+ params.desc = pParams->desc .ptr ;
301
+
302
+ switch (device->GetCudaIndependentDescriptorObject (¶ms)) {
303
+ case S_OK:
304
+ pParams->handle = params.handle ;
305
+ return Ok (n, alreadyLoggedOk);
306
+ case E_INVALIDARG:
307
+ return InvalidArgument (n);
308
+ case E_NOTIMPL:
309
+ return NoImplementation (n, alreadyLoggedNoImplementation);
310
+ default :
311
+ return Error (n, alreadyLoggedError);
312
+ }
313
+ }
314
+
177
315
NvAPI_Status __cdecl NvAPI_D3D12_LaunchCubinShader (ID3D12GraphicsCommandList* pCmdList, NVDX_ObjectHandle pShader, NvU32 blockX, NvU32 blockY, NvU32 blockZ, const void * params, NvU32 paramSize) {
178
316
constexpr auto n = __func__;
179
317
thread_local bool alreadyLoggedNoImplementation = false ;
0 commit comments