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)); } } }
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; }
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; }
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; }