static HRESULT WINAPI IDirectDraw3Impl_GetAvailableVidMem(LPDIRECTDRAW3 This, LPDDSCAPS pCaps, LPDWORD pdwTotal, LPDWORD pdwFree) { DDSCAPS2 Caps2; DDRAW_Convert_DDSCAPS_1_To_2(pCaps, &Caps2); return IDirectDraw7_GetAvailableVidMem((IDirectDraw7 *)ddraw_from_ddraw3(This), &Caps2, pdwTotal, pdwFree); }
static HRESULT WINAPI IDirectDraw4Impl_GetAvailableVidMem(LPDIRECTDRAW4 This, LPDDSCAPS2 pCaps, LPDWORD pdwTotal, LPDWORD pdwFree) { return IDirectDraw7_GetAvailableVidMem((IDirectDraw7 *)ddraw_from_ddraw4(This), pCaps, pdwTotal, pdwFree); }
static HRESULT DXDiag_InitDXDiagDisplayContainer(IDxDiagContainer* pSubCont) { static const WCHAR szDescription[] = {'s','z','D','e','s','c','r','i','p','t','i','o','n',0}; static const WCHAR szDeviceName[] = {'s','z','D','e','v','i','c','e','N','a','m','e',0}; static const WCHAR szKeyDeviceID[] = {'s','z','K','e','y','D','e','v','i','c','e','I','D',0}; static const WCHAR szKeyDeviceKey[] = {'s','z','K','e','y','D','e','v','i','c','e','K','e','y',0}; static const WCHAR szVendorId[] = {'s','z','V','e','n','d','o','r','I','d',0}; static const WCHAR szDeviceId[] = {'s','z','D','e','v','i','c','e','I','d',0}; static const WCHAR szDeviceIdentifier[] = {'s','z','D','e','v','i','c','e','I','d','e','n','t','i','f','i','e','r',0}; static const WCHAR dwWidth[] = {'d','w','W','i','d','t','h',0}; static const WCHAR dwHeight[] = {'d','w','H','e','i','g','h','t',0}; static const WCHAR dwBpp[] = {'d','w','B','p','p',0}; static const WCHAR szDisplayMemoryLocalized[] = {'s','z','D','i','s','p','l','a','y','M','e','m','o','r','y','L','o','c','a','l','i','z','e','d',0}; static const WCHAR szDisplayMemoryEnglish[] = {'s','z','D','i','s','p','l','a','y','M','e','m','o','r','y','E','n','g','l','i','s','h',0}; static const WCHAR szAdapterID[] = {'0',0}; static const WCHAR szEmpty[] = {0}; HRESULT hr; IDxDiagContainer *pDisplayAdapterSubCont = NULL; IDirectDraw7 *pDirectDraw; DDSCAPS2 dd_caps; DISPLAY_DEVICEW disp_dev; DDSURFACEDESC2 surface_descr; DWORD tmp; WCHAR buffer[256]; hr = DXDiag_CreateDXDiagContainer( &IID_IDxDiagContainer, (void**) &pDisplayAdapterSubCont ); if (FAILED( hr )) return hr; hr = IDxDiagContainerImpl_AddChildContainer( pSubCont, szAdapterID, pDisplayAdapterSubCont ); if (FAILED( hr )) return hr; if (EnumDisplayDevicesW( NULL, 0, &disp_dev, 0 )) { add_prop_str( pDisplayAdapterSubCont, szDeviceName, disp_dev.DeviceName ); add_prop_str( pDisplayAdapterSubCont, szDescription, disp_dev.DeviceString ); } hr = DirectDrawCreateEx( NULL, (LPVOID *)&pDirectDraw, &IID_IDirectDraw7, NULL); if (FAILED( hr )) return hr; dd_caps.dwCaps = DDSCAPS_LOCALVIDMEM | DDSCAPS_VIDEOMEMORY; dd_caps.dwCaps2 = dd_caps.dwCaps3 = dd_caps.dwCaps4 = 0; hr = IDirectDraw7_GetAvailableVidMem( pDirectDraw, &dd_caps, &tmp, NULL ); if (SUCCEEDED(hr)) { static const WCHAR mem_fmt[] = {'%','.','1','f',' ','M','B',0}; snprintfW( buffer, sizeof(buffer)/sizeof(buffer[0]), mem_fmt, ((float)tmp) / 1000000.0 ); add_prop_str( pDisplayAdapterSubCont, szDisplayMemoryLocalized, buffer ); add_prop_str( pDisplayAdapterSubCont, szDisplayMemoryEnglish, buffer ); } surface_descr.dwSize = sizeof(surface_descr); hr = IDirectDraw7_GetDisplayMode( pDirectDraw, &surface_descr ); if (SUCCEEDED(hr)) { if (surface_descr.dwFlags & DDSD_WIDTH) add_prop_ui4( pDisplayAdapterSubCont, dwWidth, surface_descr.dwWidth ); if (surface_descr.dwFlags & DDSD_HEIGHT) add_prop_ui4( pDisplayAdapterSubCont, dwHeight, surface_descr.dwHeight ); if (surface_descr.dwFlags & DDSD_PIXELFORMAT) add_prop_ui4( pDisplayAdapterSubCont, dwBpp, surface_descr.u4.ddpfPixelFormat.u1.dwRGBBitCount ); } get_display_device_id( buffer ); add_prop_str( pDisplayAdapterSubCont, szDeviceIdentifier, buffer ); add_prop_str( pDisplayAdapterSubCont, szVendorId, szEmpty ); add_prop_str( pDisplayAdapterSubCont, szDeviceId, szEmpty ); add_prop_str( pDisplayAdapterSubCont, szKeyDeviceKey, szEmpty ); add_prop_str( pDisplayAdapterSubCont, szKeyDeviceID, szEmpty ); IUnknown_Release( pDirectDraw ); return hr; }