Skip to content

Commit aceec2b

Browse files
committed
GPU (Windows): restores Win8.1 support
1 parent 14cd933 commit aceec2b

2 files changed

Lines changed: 18 additions & 4 deletions

File tree

src/detection/gpu/d3dkmthk.h

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ typedef int32_t NTSTATUS; // 0 for success, -1 for failure
4343
#endif
4444

4545
#define D3DKMT_ALIGN64 __attribute__((aligned(8)))
46-
#define MAX_ENUM_ADAPTERS 16
46+
#define _In_range_(a, b)
4747

4848
typedef struct D3DKMT_HANDLE {
4949
union {
@@ -68,6 +68,13 @@ typedef struct _D3DKMT_ADAPTERINFO {
6868
BOOL bPrecisePresentRegionsPreferred;
6969
} D3DKMT_ADAPTERINFO;
7070

71+
#define MAX_ENUM_ADAPTERS 16
72+
typedef struct _D3DKMT_ENUMADAPTERS
73+
{
74+
_In_range_(0, MAX_ENUM_ADAPTERS) ULONG NumAdapters;
75+
D3DKMT_ADAPTERINFO Adapters[MAX_ENUM_ADAPTERS];
76+
} D3DKMT_ENUMADAPTERS;
77+
7178
typedef struct _D3DKMT_ENUMADAPTERS2 {
7279
ULONG NumAdapters; // in/out: On input, the count of the pAdapters array buffer. On output, the number of adapters enumerated.
7380
D3DKMT_ADAPTERINFO* pAdapters; // out: Array of enumerated adapters containing NumAdapters elements
@@ -319,7 +326,8 @@ static_assert(sizeof(D3DKMT_NODEMETADATA) == 0x4E, "D3DKMT_NODEMETADATA structur
319326
EXTERN_C _Check_return_ NTSTATUS APIENTRY D3DKMTOpenAdapterFromLuid(_Inout_ CONST D3DKMT_OPENADAPTERFROMLUID*);
320327
EXTERN_C _Check_return_ NTSTATUS APIENTRY D3DKMTQueryAdapterInfo(_Inout_ CONST D3DKMT_QUERYADAPTERINFO*);
321328
EXTERN_C _Check_return_ NTSTATUS APIENTRY D3DKMTCloseAdapter(_In_ CONST D3DKMT_CLOSEADAPTER*);
322-
EXTERN_C _Check_return_ NTSTATUS APIENTRY D3DKMTEnumAdapters2(_Inout_ D3DKMT_ENUMADAPTERS2*);
329+
EXTERN_C _Check_return_ NTSTATUS APIENTRY D3DKMTEnumAdapters(_Inout_ CONST D3DKMT_ENUMADAPTERS*);
330+
EXTERN_C _Check_return_ NTSTATUS APIENTRY D3DKMTEnumAdapters2(_Inout_ CONST D3DKMT_ENUMADAPTERS2*);
323331
EXTERN_C _Check_return_ NTSTATUS APIENTRY D3DKMTQueryStatistics(_In_ CONST D3DKMT_QUERYSTATISTICS*);
324332

325333
#else

src/detection/gpu/gpu_windows.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,18 +74,24 @@ ffGPUDetectWsl2
7474
}
7575
#endif
7676

77+
#if FF_WIN81_COMPAT
78+
D3DKMT_ENUMADAPTERS enumAdapters = {};
79+
D3DKMT_ADAPTERINFO* const adapters = enumAdapters.Adapters;
80+
NTSTATUS status = D3DKMTEnumAdapters(&enumAdapters);
81+
#else
7782
D3DKMT_ADAPTERINFO adapters[64];
7883
D3DKMT_ENUMADAPTERS2 enumAdapters = {
7984
.NumAdapters = ARRAY_SIZE(adapters),
8085
.pAdapters = adapters,
8186
};
8287
NTSTATUS status = D3DKMTEnumAdapters2(&enumAdapters);
88+
#endif
8389
if (!NT_SUCCESS(status)) {
84-
FF_DEBUG("D3DKMTEnumAdapters2 failed: %s", ffDebugNtStatus(status));
90+
FF_DEBUG("D3DKMTEnumAdapters(2) failed: %s", ffDebugNtStatus(status));
8591
return "Failed to enumerate adapters with D3DKMTEnumAdapters2";
8692
}
8793

88-
FF_DEBUG("D3DKMTEnumAdapters2 succeeded, adapter count: %" PRIu32, (uint32_t) enumAdapters.NumAdapters);
94+
FF_DEBUG("D3DKMTEnumAdapters(2) succeeded, adapter count: %" PRIu32, (uint32_t) enumAdapters.NumAdapters);
8995

9096
for (uint32_t i = 0; i < enumAdapters.NumAdapters; i++) {
9197
const D3DKMT_ADAPTERINFO* adapter = &adapters[i];

0 commit comments

Comments
 (0)