Skip to content

Commit dd0021c

Browse files
committed
GPU (Windows): adds kernel version check before D3DKMT syscall
1 parent f5b70dd commit dd0021c

1 file changed

Lines changed: 9 additions & 9 deletions

File tree

src/detection/gpu/gpu_windows.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -352,11 +352,11 @@ const char* ffDetectGPUImpl(FF_MAYBE_UNUSED const FFGPUOptions* options, FFlist*
352352
D3DKMT_ADAPTERTYPE adapterType = {};
353353
D3DKMT_QUERYADAPTERINFO queryAdapterInfo = {
354354
.hAdapter = openAdapterFromLuid.hAdapter,
355-
.Type = KMTQAITYPE_ADAPTERTYPE,
355+
.Type = KMTQAITYPE_ADAPTERTYPE, // Windows 8 and later
356356
.pPrivateDriverData = &adapterType,
357357
.PrivateDriverDataSize = sizeof(adapterType),
358358
};
359-
if (NT_SUCCESS(D3DKMTQueryAdapterInfo(&queryAdapterInfo))) // Vista and later
359+
if (NT_SUCCESS(D3DKMTQueryAdapterInfo(&queryAdapterInfo)))
360360
{
361361
FF_DEBUG("Queried adapter type - HybridDiscrete: %d, HybridIntegrated: %d", adapterType.HybridDiscrete, adapterType.HybridIntegrated);
362362
if (adapterType.HybridDiscrete)
@@ -369,7 +369,7 @@ const char* ffDetectGPUImpl(FF_MAYBE_UNUSED const FFGPUOptions* options, FFlist*
369369
FF_DEBUG("Failed to query adapter type");
370370
}
371371

372-
if (gpu->frequency == FF_GPU_FREQUENCY_UNSET)
372+
if (gpu->frequency == FF_GPU_FREQUENCY_UNSET && ffIsWindows11OrGreater())
373373
{
374374
FF_DEBUG("Trying to get GPU frequency information");
375375
for (ULONG nodeIdx = 0; ; nodeIdx++)
@@ -379,14 +379,14 @@ const char* ffDetectGPUImpl(FF_MAYBE_UNUSED const FFGPUOptions* options, FFlist*
379379
};
380380
queryAdapterInfo = (D3DKMT_QUERYADAPTERINFO) {
381381
.hAdapter = openAdapterFromLuid.hAdapter,
382-
.Type = KMTQAITYPE_NODEMETADATA,
382+
.Type = KMTQAITYPE_NODEMETADATA, // Windows 10 and later
383383
.pPrivateDriverData = &nodeMetadata,
384384
.PrivateDriverDataSize = sizeof(nodeMetadata),
385385
};
386386
if (!NT_SUCCESS(D3DKMTQueryAdapterInfo(&queryAdapterInfo)))
387387
{
388388
FF_DEBUG("No more nodes to query (index %lu)", nodeIdx);
389-
break; // Windows 10 and later
389+
break;
390390
}
391391
if (nodeMetadata.NodeData.EngineType != DXGK_ENGINE_TYPE_3D)
392392
{
@@ -395,11 +395,11 @@ const char* ffDetectGPUImpl(FF_MAYBE_UNUSED const FFGPUOptions* options, FFlist*
395395
}
396396

397397
D3DKMT_QUERYSTATISTICS queryStatistics = {
398-
.Type = D3DKMT_QUERYSTATISTICS_NODE2,
398+
.Type = D3DKMT_QUERYSTATISTICS_NODE2, // Windows 11 (22H2) and later
399399
.AdapterLuid = *(LUID*)&adapterLuid,
400400
.QueryNode2 = { .PhysicalAdapterIndex = 0, .NodeOrdinal = (UINT16) nodeIdx },
401401
};
402-
if (NT_SUCCESS(D3DKMTQueryStatistics(&queryStatistics))) // Windows 11 (22H2) and later
402+
if (NT_SUCCESS(D3DKMTQueryStatistics(&queryStatistics)))
403403
{
404404
gpu->frequency = (uint32_t) (queryStatistics.QueryResult.NodeInformation.NodePerfData.MaxFrequency / 1000 / 1000);
405405
FF_DEBUG("Found GPU frequency: %u MHz", gpu->frequency);
@@ -422,11 +422,11 @@ const char* ffDetectGPUImpl(FF_MAYBE_UNUSED const FFGPUOptions* options, FFlist*
422422
FF_DEBUG("Failed to open adapter from LUID");
423423
}
424424

425-
if (options->temp && gpu->temperature == FF_GPU_TEMP_UNSET)
425+
if (options->temp && gpu->temperature == FF_GPU_TEMP_UNSET && ffIsWindows10OrGreater())
426426
{
427427
FF_DEBUG("Trying to get GPU temperature");
428428
D3DKMT_QUERYSTATISTICS queryStatistics = {
429-
.Type = D3DKMT_QUERYSTATISTICS_PHYSICAL_ADAPTER,
429+
.Type = D3DKMT_QUERYSTATISTICS_PHYSICAL_ADAPTER, // Windows 10 (1803) and later
430430
.AdapterLuid = *(LUID*)&adapterLuid,
431431
.QueryPhysAdapter = { .PhysicalAdapterIndex = 0 },
432432
};

0 commit comments

Comments
 (0)