parent
a86b4a9421
commit
c03320cfc2
|
@ -2866,3 +2866,29 @@ extern "C" EXPORT void device_unregister_loss_callbacks(gs_device_t *device,
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t gs_get_adapter_count(void)
|
||||
{
|
||||
uint32_t count = 0;
|
||||
|
||||
const IID factoryIID = (GetWinVer() >= 0x602) ? dxgiFactory2
|
||||
: __uuidof(IDXGIFactory1);
|
||||
ComPtr<IDXGIFactory1> factory;
|
||||
HRESULT hr = CreateDXGIFactory1(factoryIID, (void **)factory.Assign());
|
||||
if (SUCCEEDED(hr)) {
|
||||
ComPtr<IDXGIAdapter1> adapter;
|
||||
for (UINT i = 0;
|
||||
factory->EnumAdapters1(i, adapter.Assign()) == S_OK; ++i) {
|
||||
DXGI_ADAPTER_DESC desc;
|
||||
if (SUCCEEDED(adapter->GetDesc(&desc))) {
|
||||
/* ignore Microsoft's 'basic' renderer' */
|
||||
if (desc.VendorId != 0x1414 &&
|
||||
desc.DeviceId != 0x8c) {
|
||||
++count;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
|
|
@ -210,6 +210,7 @@ bool load_graphics_imports(struct gs_exports *exports, void *module,
|
|||
GRAPHICS_IMPORT_OPTIONAL(gs_duplicator_destroy);
|
||||
GRAPHICS_IMPORT_OPTIONAL(gs_duplicator_update_frame);
|
||||
GRAPHICS_IMPORT_OPTIONAL(gs_duplicator_get_texture);
|
||||
GRAPHICS_IMPORT_OPTIONAL(gs_get_adapter_count);
|
||||
GRAPHICS_IMPORT_OPTIONAL(device_texture_create_gdi);
|
||||
GRAPHICS_IMPORT_OPTIONAL(gs_texture_get_dc);
|
||||
GRAPHICS_IMPORT_OPTIONAL(gs_texture_release_dc);
|
||||
|
|
|
@ -297,6 +297,8 @@ struct gs_exports {
|
|||
bool (*gs_duplicator_update_frame)(gs_duplicator_t *duplicator);
|
||||
gs_texture_t *(*gs_duplicator_get_texture)(gs_duplicator_t *duplicator);
|
||||
|
||||
uint32_t (*gs_get_adapter_count)(void);
|
||||
|
||||
gs_texture_t *(*device_texture_create_gdi)(gs_device_t *device,
|
||||
uint32_t width,
|
||||
uint32_t height);
|
||||
|
|
|
@ -2913,6 +2913,16 @@ bool gs_duplicator_update_frame(gs_duplicator_t *duplicator)
|
|||
return thread_graphics->exports.gs_duplicator_update_frame(duplicator);
|
||||
}
|
||||
|
||||
uint32_t gs_get_adapter_count(void)
|
||||
{
|
||||
if (!gs_valid("gs_get_adapter_count"))
|
||||
return 0;
|
||||
if (!thread_graphics->exports.gs_get_adapter_count)
|
||||
return 0;
|
||||
|
||||
return thread_graphics->exports.gs_get_adapter_count();
|
||||
}
|
||||
|
||||
gs_texture_t *gs_duplicator_get_texture(gs_duplicator_t *duplicator)
|
||||
{
|
||||
if (!gs_valid_p("gs_duplicator_get_texture", duplicator))
|
||||
|
|
|
@ -874,6 +874,8 @@ EXPORT void gs_duplicator_destroy(gs_duplicator_t *duplicator);
|
|||
EXPORT bool gs_duplicator_update_frame(gs_duplicator_t *duplicator);
|
||||
EXPORT gs_texture_t *gs_duplicator_get_texture(gs_duplicator_t *duplicator);
|
||||
|
||||
EXPORT uint32_t gs_get_adapter_count(void);
|
||||
|
||||
/** creates a windows GDI-lockable texture */
|
||||
EXPORT gs_texture_t *gs_texture_create_gdi(uint32_t width, uint32_t height);
|
||||
|
||||
|
|
Loading…
Reference in New Issue