File: device-enum.c

package info (click to toggle)
obs-studio 30.2.3%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 47,852 kB
  • sloc: ansic: 202,137; cpp: 112,402; makefile: 868; python: 599; sh: 275; javascript: 19
file content (32 lines) | stat: -rw-r--r-- 684 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include "device-enum.h"
#include "../dstr.h"

#include <dxgi.h>

void enum_graphics_device_luids(device_luid_cb device_luid, void *param)
{
	IDXGIFactory1 *factory;
	IDXGIAdapter1 *adapter;
	HRESULT hr;

	hr = CreateDXGIFactory1(&IID_IDXGIFactory1, (void **)&factory);
	if (FAILED(hr))
		return;

	for (UINT i = 0;
	     factory->lpVtbl->EnumAdapters1(factory, i, &adapter) == S_OK;
	     i++) {
		DXGI_ADAPTER_DESC desc;

		hr = adapter->lpVtbl->GetDesc(adapter, &desc);
		adapter->lpVtbl->Release(adapter);
		if (FAILED(hr))
			continue;

		uint64_t luid64 = *(uint64_t *)&desc.AdapterLuid;
		if (!device_luid(param, i, luid64))
			break;
	}

	factory->lpVtbl->Release(factory);
}