Ejemplo n.º 1
0
static void ddraw_enumerate_secondary_devices(struct wined3d *wined3d, LPDDENUMCALLBACKEXA callback,
                                              void *context)
{
    struct wined3d_adapter_identifier adapter_id;
    BOOL cont_enum = TRUE;
    HRESULT hr = S_OK;
    UINT adapter = 0;

    for (adapter = 0; SUCCEEDED(hr) && cont_enum; adapter++)
    {
        char DriverName[512] = "", DriverDescription[512] = "";

        /* The Battle.net System Checker expects the GetAdapterIdentifier DeviceName to match the
         * Driver Name, so obtain the DeviceName and GUID from D3D. */
        memset(&adapter_id, 0x0, sizeof(adapter_id));
        adapter_id.device_name = DriverName;
        adapter_id.device_name_size = sizeof(DriverName);
        adapter_id.description = DriverDescription;
        adapter_id.description_size = sizeof(DriverDescription);
        wined3d_mutex_lock();
        hr = wined3d_get_adapter_identifier(wined3d, adapter, 0x0, &adapter_id);
        wined3d_mutex_unlock();
        if (SUCCEEDED(hr))
        {
            TRACE("Interface %d: %s\n", adapter, wine_dbgstr_guid(&adapter_id.device_identifier));
            cont_enum = callback(&adapter_id.device_identifier, adapter_id.description,
                    adapter_id.device_name, context, wined3d_get_adapter_monitor(wined3d, adapter));
        }
    }
}
Ejemplo n.º 2
0
static HRESULT STDMETHODCALLTYPE dxgi_output_GetDesc(IDXGIOutput *iface, DXGI_OUTPUT_DESC *desc)
{
    struct dxgi_output *This = impl_from_IDXGIOutput(iface);
    struct wined3d *wined3d;
    MONITORINFOEXW monitor_info;

    FIXME("iface %p, desc %p semi-stub!\n", iface, desc);

    if (!desc)
        return DXGI_ERROR_INVALID_CALL;

    wined3d = This->adapter->parent->wined3d;

    EnterCriticalSection(&dxgi_cs);
    desc->Monitor = wined3d_get_adapter_monitor(wined3d, This->adapter->ordinal);
    LeaveCriticalSection(&dxgi_cs);

    if (!desc->Monitor)
        return DXGI_ERROR_INVALID_CALL;

    monitor_info.cbSize = sizeof(monitor_info);
    if (!GetMonitorInfoW(desc->Monitor, (MONITORINFO *)&monitor_info))
        return DXGI_ERROR_INVALID_CALL;

    memcpy(&desc->DeviceName, &monitor_info.szDevice, sizeof(desc->DeviceName));
    memcpy(&desc->DesktopCoordinates, &monitor_info.rcMonitor, sizeof(RECT));
    desc->AttachedToDesktop = TRUE;
    desc->Rotation = DXGI_MODE_ROTATION_IDENTITY;

    return S_OK;
}
Ejemplo n.º 3
0
static HMONITOR WINAPI d3d8_GetAdapterMonitor(IDirect3D8 *iface, UINT adapter)
{
    struct d3d8 *d3d8 = impl_from_IDirect3D8(iface);
    HMONITOR ret;

    TRACE("iface %p, adapter %u.\n", iface, adapter);

    wined3d_mutex_lock();
    ret = wined3d_get_adapter_monitor(d3d8->wined3d, adapter);
    wined3d_mutex_unlock();

    return ret;
}
Ejemplo n.º 4
0
static HMONITOR WINAPI  IDirect3D8Impl_GetAdapterMonitor(LPDIRECT3D8 iface, UINT Adapter)
{
    IDirect3D8Impl *This = impl_from_IDirect3D8(iface);
    HMONITOR ret;

    TRACE("iface %p, adapter %u.\n", iface, Adapter);

    wined3d_mutex_lock();
    ret = wined3d_get_adapter_monitor(This->WineD3D, Adapter);
    wined3d_mutex_unlock();

    return ret;
}