|
1 | 1 | #include "gpu.h" |
| 2 | +#include "common/library.h" |
2 | 3 | #include "detection/gpu/gpu_driver_specific.h" |
3 | 4 | #include "util/windows/unicode.h" |
4 | 5 | #include "util/windows/registry.h" |
@@ -126,22 +127,30 @@ const char* ffDetectGPUImpl(FF_MAYBE_UNUSED const FFGPUOptions* options, FFlist* |
126 | 127 |
|
127 | 128 | if (adapterLuid > 0) |
128 | 129 | { |
129 | | - D3DKMT_OPENADAPTERFROMLUID openAdapterFromLuid = { .AdapterLuid = *(LUID*)&adapterLuid }; |
130 | | - if (NT_SUCCESS(D3DKMTOpenAdapterFromLuid(&openAdapterFromLuid))) |
| 130 | + HMODULE hgdi32 = GetModuleHandleW(L"gdi32.dll"); |
| 131 | + if (hgdi32) |
131 | 132 | { |
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 |
140 | 135 | { |
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 | + } |
145 | 154 | } |
146 | 155 | } |
147 | 156 | } |
|
0 commit comments