Skip to content

Commit 6871c8b

Browse files
committed
GPU (Windows): fix Win7 compatibility
1 parent 61adc7c commit 6871c8b

1 file changed

Lines changed: 23 additions & 14 deletions

File tree

src/detection/gpu/gpu_windows.c

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#include "gpu.h"
2+
#include "common/library.h"
23
#include "detection/gpu/gpu_driver_specific.h"
34
#include "util/windows/unicode.h"
45
#include "util/windows/registry.h"
@@ -126,22 +127,30 @@ const char* ffDetectGPUImpl(FF_MAYBE_UNUSED const FFGPUOptions* options, FFlist*
126127

127128
if (adapterLuid > 0)
128129
{
129-
D3DKMT_OPENADAPTERFROMLUID openAdapterFromLuid = { .AdapterLuid = *(LUID*)&adapterLuid };
130-
if (NT_SUCCESS(D3DKMTOpenAdapterFromLuid(&openAdapterFromLuid)))
130+
HMODULE hgdi32 = GetModuleHandleW(L"gdi32.dll");
131+
if (hgdi32)
131132
{
132-
D3DKMT_ADAPTERTYPE adapterType = {};
133-
D3DKMT_QUERYADAPTERINFO queryAdapterInfo = {
134-
.hAdapter = openAdapterFromLuid.hAdapter,
135-
.Type = KMTQAITYPE_ADAPTERTYPE,
136-
.pPrivateDriverData = &adapterType,
137-
.PrivateDriverDataSize = sizeof(adapterType),
138-
};
139-
if (NT_SUCCESS(D3DKMTQueryAdapterInfo(&queryAdapterInfo)))
133+
FF_LIBRARY_LOAD_SYMBOL_LAZY(hgdi32, D3DKMTOpenAdapterFromLuid);
134+
if (ffD3DKMTOpenAdapterFromLuid) // Windows 8 and later
140135
{
141-
if (adapterType.HybridDiscrete)
142-
gpu->type = FF_GPU_TYPE_DISCRETE;
143-
else if (adapterType.HybridIntegrated)
144-
gpu->type = FF_GPU_TYPE_INTEGRATED;
136+
D3DKMT_OPENADAPTERFROMLUID openAdapterFromLuid = { .AdapterLuid = *(LUID*)&adapterLuid };
137+
if (NT_SUCCESS(ffD3DKMTOpenAdapterFromLuid(&openAdapterFromLuid)))
138+
{
139+
D3DKMT_ADAPTERTYPE adapterType = {};
140+
D3DKMT_QUERYADAPTERINFO queryAdapterInfo = {
141+
.hAdapter = openAdapterFromLuid.hAdapter,
142+
.Type = KMTQAITYPE_ADAPTERTYPE,
143+
.pPrivateDriverData = &adapterType,
144+
.PrivateDriverDataSize = sizeof(adapterType),
145+
};
146+
if (NT_SUCCESS(D3DKMTQueryAdapterInfo(&queryAdapterInfo))) // Vista and later
147+
{
148+
if (adapterType.HybridDiscrete)
149+
gpu->type = FF_GPU_TYPE_DISCRETE;
150+
else if (adapterType.HybridIntegrated)
151+
gpu->type = FF_GPU_TYPE_INTEGRATED;
152+
}
153+
}
145154
}
146155
}
147156
}

0 commit comments

Comments
 (0)