mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-09-13 10:24:58 +02:00
GPU (Windows): restores Win8.1 support
This commit is contained in:
@@ -40,10 +40,10 @@ typedef union {
|
||||
} LARGE_INTEGER;
|
||||
typedef int32_t NTSTATUS; // 0 for success, -1 for failure
|
||||
# define NT_SUCCESS(Status) ((NTSTATUS) (Status) >= 0)
|
||||
# define _In_range_(low, hi)
|
||||
#endif
|
||||
|
||||
#define D3DKMT_ALIGN64 __attribute__((aligned(8)))
|
||||
#define MAX_ENUM_ADAPTERS 16
|
||||
|
||||
typedef struct D3DKMT_HANDLE {
|
||||
union {
|
||||
@@ -68,6 +68,12 @@ typedef struct _D3DKMT_ADAPTERINFO {
|
||||
BOOL bPrecisePresentRegionsPreferred;
|
||||
} D3DKMT_ADAPTERINFO;
|
||||
|
||||
#define MAX_ENUM_ADAPTERS 16
|
||||
typedef struct _D3DKMT_ENUMADAPTERS {
|
||||
_In_range_(0, MAX_ENUM_ADAPTERS) ULONG NumAdapters;
|
||||
D3DKMT_ADAPTERINFO Adapters[MAX_ENUM_ADAPTERS];
|
||||
} D3DKMT_ENUMADAPTERS;
|
||||
|
||||
typedef struct _D3DKMT_ENUMADAPTERS2 {
|
||||
ULONG NumAdapters; // in/out: On input, the count of the pAdapters array buffer. On output, the number of adapters enumerated.
|
||||
D3DKMT_ADAPTERINFO* pAdapters; // out: Array of enumerated adapters containing NumAdapters elements
|
||||
@@ -319,7 +325,8 @@ static_assert(sizeof(D3DKMT_NODEMETADATA) == 0x4E, "D3DKMT_NODEMETADATA structur
|
||||
EXTERN_C _Check_return_ NTSTATUS APIENTRY D3DKMTOpenAdapterFromLuid(_Inout_ CONST D3DKMT_OPENADAPTERFROMLUID*);
|
||||
EXTERN_C _Check_return_ NTSTATUS APIENTRY D3DKMTQueryAdapterInfo(_Inout_ CONST D3DKMT_QUERYADAPTERINFO*);
|
||||
EXTERN_C _Check_return_ NTSTATUS APIENTRY D3DKMTCloseAdapter(_In_ CONST D3DKMT_CLOSEADAPTER*);
|
||||
EXTERN_C _Check_return_ NTSTATUS APIENTRY D3DKMTEnumAdapters2(_Inout_ D3DKMT_ENUMADAPTERS2*);
|
||||
EXTERN_C _Check_return_ NTSTATUS APIENTRY D3DKMTEnumAdapters(_Inout_ CONST D3DKMT_ENUMADAPTERS*);
|
||||
EXTERN_C _Check_return_ NTSTATUS APIENTRY D3DKMTEnumAdapters2(_Inout_ CONST D3DKMT_ENUMADAPTERS2*);
|
||||
EXTERN_C _Check_return_ NTSTATUS APIENTRY D3DKMTQueryStatistics(_In_ CONST D3DKMT_QUERYSTATISTICS*);
|
||||
|
||||
#else
|
||||
|
||||
@@ -74,18 +74,24 @@ ffGPUDetectWsl2
|
||||
}
|
||||
#endif
|
||||
|
||||
#if FF_WIN81_COMPAT
|
||||
D3DKMT_ENUMADAPTERS enumAdapters = {};
|
||||
D3DKMT_ADAPTERINFO* const adapters = enumAdapters.Adapters;
|
||||
NTSTATUS status = D3DKMTEnumAdapters(&enumAdapters);
|
||||
#else
|
||||
D3DKMT_ADAPTERINFO adapters[64];
|
||||
D3DKMT_ENUMADAPTERS2 enumAdapters = {
|
||||
.NumAdapters = ARRAY_SIZE(adapters),
|
||||
.pAdapters = adapters,
|
||||
};
|
||||
NTSTATUS status = D3DKMTEnumAdapters2(&enumAdapters);
|
||||
#endif
|
||||
if (!NT_SUCCESS(status)) {
|
||||
FF_DEBUG("D3DKMTEnumAdapters2 failed: %s", ffDebugNtStatus(status));
|
||||
FF_DEBUG("D3DKMTEnumAdapters(2) failed: %s", ffDebugNtStatus(status));
|
||||
return "Failed to enumerate adapters with D3DKMTEnumAdapters2";
|
||||
}
|
||||
|
||||
FF_DEBUG("D3DKMTEnumAdapters2 succeeded, adapter count: %" PRIu32, (uint32_t) enumAdapters.NumAdapters);
|
||||
FF_DEBUG("D3DKMTEnumAdapters(2) succeeded, adapter count: %" PRIu32, (uint32_t) enumAdapters.NumAdapters);
|
||||
|
||||
for (uint32_t i = 0; i < enumAdapters.NumAdapters; i++) {
|
||||
const D3DKMT_ADAPTERINFO* adapter = &adapters[i];
|
||||
|
||||
Reference in New Issue
Block a user