ReactOS 0.4.17-dev-966-gf06eace
ddraw.c File Reference
#include "ddraw_private.h"
#include "ddrawi.h"
#include "d3dhal.h"
#include "wine/exception.h"
Include dependency graph for ddraw.c:

Go to the source code of this file.

Classes

struct  enum_device_entry
 
struct  displaymodescallback_context
 
struct  surfacescallback2_context
 
struct  surfacescallback_context
 
struct  enum_surface_mode_params
 

Macros

#define CMP(FLAG, FIELD)
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (ddraw)
 
static void STDMETHODCALLTYPE ddraw_null_wined3d_object_destroyed (void *parent)
 
static void CDECL ddraw_swapchain_windowed_state_changed (struct wined3d_swapchain_state_parent *parent, BOOL windowed)
 
static struct ddraw * impl_from_IDirectDraw (IDirectDraw *iface)
 
static struct ddraw * impl_from_IDirectDraw2 (IDirectDraw2 *iface)
 
static struct ddraw * impl_from_IDirectDraw4 (IDirectDraw4 *iface)
 
static struct ddraw * impl_from_IDirectDraw7 (IDirectDraw7 *iface)
 
static struct ddraw * impl_from_IDirect3D (IDirect3D *iface)
 
static struct ddraw * impl_from_IDirect3D2 (IDirect3D2 *iface)
 
static struct ddraw * impl_from_IDirect3D3 (IDirect3D3 *iface)
 
static struct ddraw * impl_from_IDirect3D7 (IDirect3D7 *iface)
 
static HRESULT WINAPI ddraw7_QueryInterface (IDirectDraw7 *iface, REFIID riid, void **out)
 
static HRESULT WINAPI ddraw4_QueryInterface (IDirectDraw4 *iface, REFIID riid, void **object)
 
static HRESULT WINAPI ddraw2_QueryInterface (IDirectDraw2 *iface, REFIID riid, void **object)
 
static HRESULT WINAPI ddraw1_QueryInterface (IDirectDraw *iface, REFIID riid, void **object)
 
static HRESULT WINAPI d3d7_QueryInterface (IDirect3D7 *iface, REFIID riid, void **object)
 
static HRESULT WINAPI d3d3_QueryInterface (IDirect3D3 *iface, REFIID riid, void **object)
 
static HRESULT WINAPI d3d2_QueryInterface (IDirect3D2 *iface, REFIID riid, void **object)
 
static HRESULT WINAPI d3d1_QueryInterface (IDirect3D *iface, REFIID riid, void **object)
 
static ULONG WINAPI ddraw7_AddRef (IDirectDraw7 *iface)
 
static ULONG WINAPI ddraw4_AddRef (IDirectDraw4 *iface)
 
static ULONG WINAPI ddraw2_AddRef (IDirectDraw2 *iface)
 
static ULONG WINAPI ddraw1_AddRef (IDirectDraw *iface)
 
static ULONG WINAPI d3d7_AddRef (IDirect3D7 *iface)
 
static ULONG WINAPI d3d3_AddRef (IDirect3D3 *iface)
 
static ULONG WINAPI d3d2_AddRef (IDirect3D2 *iface)
 
static ULONG WINAPI d3d1_AddRef (IDirect3D *iface)
 
static void ddraw_destroy_swapchain (struct ddraw *ddraw)
 
static void ddraw_destroy (struct ddraw *This)
 
static ULONG WINAPI ddraw7_Release (IDirectDraw7 *iface)
 
static ULONG WINAPI ddraw4_Release (IDirectDraw4 *iface)
 
static ULONG WINAPI ddraw2_Release (IDirectDraw2 *iface)
 
static ULONG WINAPI ddraw1_Release (IDirectDraw *iface)
 
static ULONG WINAPI d3d7_Release (IDirect3D7 *iface)
 
static ULONG WINAPI d3d3_Release (IDirect3D3 *iface)
 
static ULONG WINAPI d3d2_Release (IDirect3D2 *iface)
 
static ULONG WINAPI d3d1_Release (IDirect3D *iface)
 
static HRESULT ddraw_set_focus_window (struct ddraw *ddraw, HWND window)
 
static HRESULT ddraw_attach_d3d_device (struct ddraw *ddraw, HWND window, DWORD cooplevel, struct wined3d_swapchain **wined3d_swapchain)
 
static HRESULT ddraw_create_swapchain (struct ddraw *ddraw, HWND window, DWORD cooplevel)
 
static HRESULT WINAPI ddraw7_RestoreDisplayMode (IDirectDraw7 *iface)
 
static HRESULT WINAPI ddraw4_RestoreDisplayMode (IDirectDraw4 *iface)
 
static HRESULT WINAPI ddraw2_RestoreDisplayMode (IDirectDraw2 *iface)
 
static HRESULT WINAPI ddraw1_RestoreDisplayMode (IDirectDraw *iface)
 
static HRESULT ddraw_set_cooperative_level (struct ddraw *ddraw, HWND window, DWORD cooplevel, BOOL restore_mode_on_normal)
 
static HRESULT WINAPI ddraw7_SetCooperativeLevel (IDirectDraw7 *iface, HWND window, DWORD flags)
 
static HRESULT WINAPI ddraw4_SetCooperativeLevel (IDirectDraw4 *iface, HWND window, DWORD flags)
 
static HRESULT WINAPI ddraw2_SetCooperativeLevel (IDirectDraw2 *iface, HWND window, DWORD flags)
 
static HRESULT WINAPI ddraw1_SetCooperativeLevel (IDirectDraw *iface, HWND window, DWORD flags)
 
static HRESULT WINAPI ddraw7_SetDisplayMode (IDirectDraw7 *iface, DWORD width, DWORD height, DWORD bpp, DWORD refresh_rate, DWORD flags)
 
static HRESULT WINAPI ddraw4_SetDisplayMode (IDirectDraw4 *iface, DWORD width, DWORD height, DWORD bpp, DWORD refresh_rate, DWORD flags)
 
static HRESULT WINAPI ddraw2_SetDisplayMode (IDirectDraw2 *iface, DWORD width, DWORD height, DWORD bpp, DWORD refresh_rate, DWORD flags)
 
static HRESULT WINAPI ddraw1_SetDisplayMode (IDirectDraw *iface, DWORD width, DWORD height, DWORD bpp)
 
void ddraw_d3dcaps1_from_7 (D3DDEVICEDESC *caps1, D3DDEVICEDESC7 *caps7)
 
HRESULT ddraw_get_d3dcaps (const struct ddraw *ddraw, D3DDEVICEDESC7 *caps)
 
static HRESULT WINAPI ddraw7_GetCaps (IDirectDraw7 *iface, DDCAPS *DriverCaps, DDCAPS *HELCaps)
 
static HRESULT WINAPI ddraw4_GetCaps (IDirectDraw4 *iface, DDCAPS *driver_caps, DDCAPS *hel_caps)
 
static HRESULT WINAPI ddraw2_GetCaps (IDirectDraw2 *iface, DDCAPS *driver_caps, DDCAPS *hel_caps)
 
static HRESULT WINAPI ddraw1_GetCaps (IDirectDraw *iface, DDCAPS *driver_caps, DDCAPS *hel_caps)
 
static HRESULT WINAPI ddraw7_Compact (IDirectDraw7 *iface)
 
static HRESULT WINAPI ddraw4_Compact (IDirectDraw4 *iface)
 
static HRESULT WINAPI ddraw2_Compact (IDirectDraw2 *iface)
 
static HRESULT WINAPI ddraw1_Compact (IDirectDraw *iface)
 
static HRESULT WINAPI ddraw7_GetDisplayMode (IDirectDraw7 *iface, DDSURFACEDESC2 *DDSD)
 
static HRESULT WINAPI ddraw4_GetDisplayMode (IDirectDraw4 *iface, DDSURFACEDESC2 *surface_desc)
 
static HRESULT WINAPI ddraw2_GetDisplayMode (IDirectDraw2 *iface, DDSURFACEDESC *surface_desc)
 
static HRESULT WINAPI ddraw1_GetDisplayMode (IDirectDraw *iface, DDSURFACEDESC *surface_desc)
 
static HRESULT WINAPI ddraw7_GetFourCCCodes (IDirectDraw7 *iface, DWORD *NumCodes, DWORD *Codes)
 
static HRESULT WINAPI ddraw4_GetFourCCCodes (IDirectDraw4 *iface, DWORD *codes_count, DWORD *codes)
 
static HRESULT WINAPI ddraw2_GetFourCCCodes (IDirectDraw2 *iface, DWORD *codes_count, DWORD *codes)
 
static HRESULT WINAPI ddraw1_GetFourCCCodes (IDirectDraw *iface, DWORD *codes_count, DWORD *codes)
 
static HRESULT WINAPI ddraw7_GetMonitorFrequency (IDirectDraw7 *iface, DWORD *frequency)
 
static HRESULT WINAPI ddraw4_GetMonitorFrequency (IDirectDraw4 *iface, DWORD *frequency)
 
static HRESULT WINAPI ddraw2_GetMonitorFrequency (IDirectDraw2 *iface, DWORD *frequency)
 
static HRESULT WINAPI ddraw1_GetMonitorFrequency (IDirectDraw *iface, DWORD *frequency)
 
static HRESULT WINAPI ddraw7_GetVerticalBlankStatus (IDirectDraw7 *iface, BOOL *status)
 
static HRESULT WINAPI ddraw4_GetVerticalBlankStatus (IDirectDraw4 *iface, BOOL *status)
 
static HRESULT WINAPI ddraw2_GetVerticalBlankStatus (IDirectDraw2 *iface, BOOL *status)
 
static HRESULT WINAPI ddraw1_GetVerticalBlankStatus (IDirectDraw *iface, BOOL *status)
 
static HRESULT WINAPI ddraw7_GetAvailableVidMem (IDirectDraw7 *iface, DDSCAPS2 *caps, DWORD *total, DWORD *free)
 
static HRESULT WINAPI ddraw4_GetAvailableVidMem (IDirectDraw4 *iface, DDSCAPS2 *caps, DWORD *total, DWORD *free)
 
static HRESULT WINAPI ddraw2_GetAvailableVidMem (IDirectDraw2 *iface, DDSCAPS *caps, DWORD *total, DWORD *free)
 
static HRESULT WINAPI ddraw7_Initialize (IDirectDraw7 *iface, GUID *guid)
 
static HRESULT WINAPI ddraw4_Initialize (IDirectDraw4 *iface, GUID *guid)
 
static HRESULT WINAPI ddraw2_Initialize (IDirectDraw2 *iface, GUID *guid)
 
static HRESULT WINAPI ddraw1_Initialize (IDirectDraw *iface, GUID *guid)
 
static HRESULT WINAPI d3d1_Initialize (IDirect3D *iface, REFIID riid)
 
static HRESULT WINAPI ddraw7_FlipToGDISurface (IDirectDraw7 *iface)
 
static HRESULT WINAPI ddraw4_FlipToGDISurface (IDirectDraw4 *iface)
 
static HRESULT WINAPI ddraw2_FlipToGDISurface (IDirectDraw2 *iface)
 
static HRESULT WINAPI ddraw1_FlipToGDISurface (IDirectDraw *iface)
 
static HRESULT WINAPI ddraw7_WaitForVerticalBlank (IDirectDraw7 *iface, DWORD Flags, HANDLE event)
 
static HRESULT WINAPI ddraw4_WaitForVerticalBlank (IDirectDraw4 *iface, DWORD flags, HANDLE event)
 
static HRESULT WINAPI ddraw2_WaitForVerticalBlank (IDirectDraw2 *iface, DWORD flags, HANDLE event)
 
static HRESULT WINAPI ddraw1_WaitForVerticalBlank (IDirectDraw *iface, DWORD flags, HANDLE event)
 
static HRESULT WINAPI ddraw7_GetScanLine (IDirectDraw7 *iface, DWORD *Scanline)
 
static HRESULT WINAPI ddraw4_GetScanLine (IDirectDraw4 *iface, DWORD *line)
 
static HRESULT WINAPI ddraw2_GetScanLine (IDirectDraw2 *iface, DWORD *line)
 
static HRESULT WINAPI ddraw1_GetScanLine (IDirectDraw *iface, DWORD *line)
 
static HRESULT WINAPI ddraw7_TestCooperativeLevel (IDirectDraw7 *iface)
 
static HRESULT WINAPI ddraw4_TestCooperativeLevel (IDirectDraw4 *iface)
 
static HRESULT WINAPI ddraw7_GetGDISurface (IDirectDraw7 *iface, IDirectDrawSurface7 **surface)
 
static HRESULT WINAPI ddraw4_GetGDISurface (IDirectDraw4 *iface, IDirectDrawSurface4 **surface)
 
static HRESULT WINAPI ddraw2_GetGDISurface (IDirectDraw2 *iface, IDirectDrawSurface **surface)
 
static HRESULT WINAPI ddraw1_GetGDISurface (IDirectDraw *iface, IDirectDrawSurface **surface)
 
static HRESULT CALLBACK EnumDisplayModesCallbackThunk (DDSURFACEDESC2 *surface_desc, void *context)
 
static HRESULT WINAPI ddraw7_EnumDisplayModes (IDirectDraw7 *iface, DWORD Flags, DDSURFACEDESC2 *DDSD, void *Context, LPDDENUMMODESCALLBACK2 cb)
 
static HRESULT WINAPI ddraw4_EnumDisplayModes (IDirectDraw4 *iface, DWORD flags, DDSURFACEDESC2 *surface_desc, void *context, LPDDENUMMODESCALLBACK2 callback)
 
static HRESULT WINAPI ddraw2_EnumDisplayModes (IDirectDraw2 *iface, DWORD flags, DDSURFACEDESC *surface_desc, void *context, LPDDENUMMODESCALLBACK callback)
 
static HRESULT WINAPI ddraw1_EnumDisplayModes (IDirectDraw *iface, DWORD flags, DDSURFACEDESC *surface_desc, void *context, LPDDENUMMODESCALLBACK callback)
 
static HRESULT WINAPI ddraw7_EvaluateMode (IDirectDraw7 *iface, DWORD Flags, DWORD *Timeout)
 
static HRESULT WINAPI ddraw7_GetDeviceIdentifier (IDirectDraw7 *iface, DDDEVICEIDENTIFIER2 *DDDI, DWORD Flags)
 
static HRESULT WINAPI ddraw4_GetDeviceIdentifier (IDirectDraw4 *iface, DDDEVICEIDENTIFIER *identifier, DWORD flags)
 
static HRESULT WINAPI ddraw7_GetSurfaceFromDC (IDirectDraw7 *iface, HDC dc, IDirectDrawSurface7 **surface)
 
static HRESULT WINAPI ddraw4_GetSurfaceFromDC (IDirectDraw4 *iface, HDC dc, IDirectDrawSurface4 **surface)
 
static HRESULT CALLBACK restore_callback (IDirectDrawSurface7 *surface, DDSURFACEDESC2 *desc, void *context)
 
static HRESULT WINAPI ddraw7_RestoreAllSurfaces (IDirectDraw7 *iface)
 
static HRESULT WINAPI ddraw4_RestoreAllSurfaces (IDirectDraw4 *iface)
 
static HRESULT WINAPI ddraw7_StartModeTest (IDirectDraw7 *iface, SIZE *Modes, DWORD NumModes, DWORD Flags)
 
static HRESULT WINAPI ddraw7_CreateSurface (IDirectDraw7 *iface, DDSURFACEDESC2 *surface_desc, IDirectDrawSurface7 **surface, IUnknown *outer_unknown)
 
static HRESULT WINAPI ddraw4_CreateSurface (IDirectDraw4 *iface, DDSURFACEDESC2 *surface_desc, IDirectDrawSurface4 **surface, IUnknown *outer_unknown)
 
static HRESULT WINAPI ddraw2_CreateSurface (IDirectDraw2 *iface, DDSURFACEDESC *surface_desc, IDirectDrawSurface **surface, IUnknown *outer_unknown)
 
static HRESULT WINAPI ddraw1_CreateSurface (IDirectDraw *iface, DDSURFACEDESC *surface_desc, IDirectDrawSurface **surface, IUnknown *outer_unknown)
 
static BOOL Main_DirectDraw_DDPIXELFORMAT_Match (const DDPIXELFORMAT *requested, const DDPIXELFORMAT *provided)
 
static BOOL ddraw_match_surface_desc (const DDSURFACEDESC2 *requested, const DDSURFACEDESC2 *provided)
 
static HRESULT CALLBACK EnumSurfacesCallback2Thunk (IDirectDrawSurface7 *surface, DDSURFACEDESC2 *surface_desc, void *context)
 
static HRESULT CALLBACK EnumSurfacesCallbackThunk (IDirectDrawSurface7 *surface, DDSURFACEDESC2 *surface_desc, void *context)
 
static HRESULT CALLBACK enum_surface_mode_callback (DDSURFACEDESC2 *surface_desc, void *context)
 
static HRESULT WINAPI ddraw7_EnumSurfaces (IDirectDraw7 *iface, DWORD flags, DDSURFACEDESC2 *surface_desc, void *context, LPDDENUMSURFACESCALLBACK7 callback)
 
static HRESULT WINAPI ddraw4_EnumSurfaces (IDirectDraw4 *iface, DWORD flags, DDSURFACEDESC2 *surface_desc, void *context, LPDDENUMSURFACESCALLBACK2 callback)
 
static HRESULT WINAPI ddraw2_EnumSurfaces (IDirectDraw2 *iface, DWORD flags, DDSURFACEDESC *surface_desc, void *context, LPDDENUMSURFACESCALLBACK callback)
 
static HRESULT WINAPI ddraw1_EnumSurfaces (IDirectDraw *iface, DWORD flags, DDSURFACEDESC *surface_desc, void *context, LPDDENUMSURFACESCALLBACK callback)
 
HRESULT WINAPI DirectDrawCreateClipper (DWORD flags, IDirectDrawClipper **clipper, IUnknown *outer_unknown)
 
static HRESULT WINAPI ddraw7_CreateClipper (IDirectDraw7 *iface, DWORD Flags, IDirectDrawClipper **Clipper, IUnknown *UnkOuter)
 
static HRESULT WINAPI ddraw4_CreateClipper (IDirectDraw4 *iface, DWORD flags, IDirectDrawClipper **clipper, IUnknown *outer_unknown)
 
static HRESULT WINAPI ddraw2_CreateClipper (IDirectDraw2 *iface, DWORD flags, IDirectDrawClipper **clipper, IUnknown *outer_unknown)
 
static HRESULT WINAPI ddraw1_CreateClipper (IDirectDraw *iface, DWORD flags, IDirectDrawClipper **clipper, IUnknown *outer_unknown)
 
static HRESULT WINAPI ddraw7_CreatePalette (IDirectDraw7 *iface, DWORD Flags, PALETTEENTRY *ColorTable, IDirectDrawPalette **Palette, IUnknown *pUnkOuter)
 
static HRESULT WINAPI ddraw4_CreatePalette (IDirectDraw4 *iface, DWORD flags, PALETTEENTRY *entries, IDirectDrawPalette **palette, IUnknown *outer_unknown)
 
static HRESULT WINAPI ddraw2_CreatePalette (IDirectDraw2 *iface, DWORD flags, PALETTEENTRY *entries, IDirectDrawPalette **palette, IUnknown *outer_unknown)
 
static HRESULT WINAPI ddraw1_CreatePalette (IDirectDraw *iface, DWORD flags, PALETTEENTRY *entries, IDirectDrawPalette **palette, IUnknown *outer_unknown)
 
static HRESULT WINAPI ddraw7_DuplicateSurface (IDirectDraw7 *iface, IDirectDrawSurface7 *Src, IDirectDrawSurface7 **Dest)
 
static HRESULT WINAPI ddraw4_DuplicateSurface (IDirectDraw4 *iface, IDirectDrawSurface4 *src, IDirectDrawSurface4 **dst)
 
static HRESULT WINAPI ddraw2_DuplicateSurface (IDirectDraw2 *iface, IDirectDrawSurface *src, IDirectDrawSurface **dst)
 
static HRESULT WINAPI ddraw1_DuplicateSurface (IDirectDraw *iface, IDirectDrawSurface *src, IDirectDrawSurface **dst)
 
static HRESULT WINAPI d3d7_EnumDevices (IDirect3D7 *iface, LPD3DENUMDEVICESCALLBACK7 callback, void *context)
 
static HRESULT WINAPI d3d3_EnumDevices (IDirect3D3 *iface, LPD3DENUMDEVICESCALLBACK callback, void *context)
 
static HRESULT WINAPI d3d2_EnumDevices (IDirect3D2 *iface, LPD3DENUMDEVICESCALLBACK callback, void *context)
 
static HRESULT WINAPI d3d1_EnumDevices (IDirect3D *iface, LPD3DENUMDEVICESCALLBACK callback, void *context)
 
static HRESULT WINAPI d3d3_CreateLight (IDirect3D3 *iface, IDirect3DLight **light, IUnknown *outer_unknown)
 
static HRESULT WINAPI d3d2_CreateLight (IDirect3D2 *iface, IDirect3DLight **light, IUnknown *outer_unknown)
 
static HRESULT WINAPI d3d1_CreateLight (IDirect3D *iface, IDirect3DLight **light, IUnknown *outer_unknown)
 
static HRESULT WINAPI d3d3_CreateMaterial (IDirect3D3 *iface, IDirect3DMaterial3 **material, IUnknown *outer_unknown)
 
static HRESULT WINAPI d3d2_CreateMaterial (IDirect3D2 *iface, IDirect3DMaterial2 **material, IUnknown *outer_unknown)
 
static HRESULT WINAPI d3d1_CreateMaterial (IDirect3D *iface, IDirect3DMaterial **material, IUnknown *outer_unknown)
 
static HRESULT WINAPI d3d3_CreateViewport (IDirect3D3 *iface, IDirect3DViewport3 **viewport, IUnknown *outer_unknown)
 
static HRESULT WINAPI d3d2_CreateViewport (IDirect3D2 *iface, IDirect3DViewport2 **viewport, IUnknown *outer_unknown)
 
static HRESULT WINAPI d3d1_CreateViewport (IDirect3D *iface, IDirect3DViewport **viewport, IUnknown *outer_unknown)
 
static HRESULT ddraw_find_device (struct ddraw *ddraw, const D3DFINDDEVICESEARCH *fds, D3DFINDDEVICERESULT *fdr, unsigned int guid_count, const GUID *const *guids, DWORD device_desc_size)
 
static HRESULT WINAPI d3d3_FindDevice (IDirect3D3 *iface, D3DFINDDEVICESEARCH *fds, D3DFINDDEVICERESULT *fdr)
 
static HRESULT WINAPI d3d2_FindDevice (IDirect3D2 *iface, D3DFINDDEVICESEARCH *fds, D3DFINDDEVICERESULT *fdr)
 
static HRESULT WINAPI d3d1_FindDevice (IDirect3D *iface, D3DFINDDEVICESEARCH *fds, D3DFINDDEVICERESULT *fdr)
 
static HRESULT WINAPI d3d7_CreateDevice (IDirect3D7 *iface, REFCLSID riid, IDirectDrawSurface7 *surface, IDirect3DDevice7 **device)
 
static HRESULT WINAPI d3d3_CreateDevice (IDirect3D3 *iface, REFCLSID riid, IDirectDrawSurface4 *surface, IDirect3DDevice3 **device, IUnknown *outer_unknown)
 
static HRESULT WINAPI d3d2_CreateDevice (IDirect3D2 *iface, REFCLSID riid, IDirectDrawSurface *surface, IDirect3DDevice2 **device)
 
static HRESULT WINAPI d3d7_CreateVertexBuffer (IDirect3D7 *iface, D3DVERTEXBUFFERDESC *desc, IDirect3DVertexBuffer7 **vertex_buffer, DWORD flags)
 
static HRESULT WINAPI d3d3_CreateVertexBuffer (IDirect3D3 *iface, D3DVERTEXBUFFERDESC *desc, IDirect3DVertexBuffer **vertex_buffer, DWORD flags, IUnknown *outer_unknown)
 
static HRESULT WINAPI d3d7_EnumZBufferFormats (IDirect3D7 *iface, REFCLSID device_iid, LPD3DENUMPIXELFORMATSCALLBACK callback, void *context)
 
static HRESULT WINAPI d3d3_EnumZBufferFormats (IDirect3D3 *iface, REFCLSID device_iid, LPD3DENUMPIXELFORMATSCALLBACK callback, void *context)
 
static HRESULT WINAPI d3d7_EvictManagedTextures (IDirect3D7 *iface)
 
static HRESULT WINAPI d3d3_EvictManagedTextures (IDirect3D3 *iface)
 
struct wined3d_vertex_declaration * ddraw_find_decl (struct ddraw *This, DWORD fvf)
 
static struct ddraw * ddraw_from_device_parent (struct wined3d_device_parent *device_parent)
 
static void CDECL device_parent_wined3d_device_created (struct wined3d_device_parent *device_parent, struct wined3d_device *device)
 
static void CDECL device_parent_mode_changed (struct wined3d_device_parent *device_parent)
 
static void CDECL device_parent_activate (struct wined3d_device_parent *device_parent, BOOL activate)
 
void ddraw_update_lost_surfaces (struct ddraw *ddraw)
 
static HRESULT CDECL device_parent_texture_sub_resource_created (struct wined3d_device_parent *device_parent, enum wined3d_resource_type type, struct wined3d_texture *wined3d_texture, unsigned int sub_resource_idx, void **parent, const struct wined3d_parent_ops **parent_ops)
 
HRESULT ddraw_init (struct ddraw *ddraw, DWORD flags, enum wined3d_device_type device_type)
 

Variables

static const struct ddraw * exclusive_ddraw
 
static HWND exclusive_window
 
static const DDDEVICEIDENTIFIER2 deviceidentifier
 
static struct enum_device_entry device_list7 []
 
const struct wined3d_parent_ops ddraw_null_wined3d_parent_ops
 
static const struct wined3d_swapchain_state_parent_ops ddraw_swapchain_state_parent_ops
 
static const struct IDirectDraw7Vtbl ddraw7_vtbl
 
static const struct IDirectDraw4Vtbl ddraw4_vtbl
 
static const struct IDirectDraw2Vtbl ddraw2_vtbl
 
static struct IDirectDrawVtbl ddraw1_vtbl
 
static const struct IDirect3D7Vtbl d3d7_vtbl
 
static const struct IDirect3D3Vtbl d3d3_vtbl
 
static const struct IDirect3D2Vtbl d3d2_vtbl
 
static const struct IDirect3DVtbl d3d1_vtbl
 
static const struct wined3d_device_parent_ops ddraw_wined3d_device_parent_ops
 

Macro Definition Documentation

◆ CMP

#define CMP (   FLAG,
  FIELD 
)
Value:
{ DDSD_##FLAG, offsetof(DDSURFACEDESC2, FIELD), \
sizeof(((DDSURFACEDESC2 *)(NULL))->FIELD) }
#define FLAG
Definition: main.h:130
#define NULL
Definition: types.h:112
#define offsetof(TYPE, MEMBER)

Function Documentation

◆ d3d1_AddRef()

static ULONG WINAPI d3d1_AddRef ( IDirect3D *  iface)
static

Definition at line 369 of file ddraw.c.

370{
371 struct ddraw *This = impl_from_IDirect3D(iface);
372
373 TRACE("iface %p.\n", iface);
374
375 return ddraw1_AddRef(&This->IDirectDraw_iface);
376}
static struct ddraw * impl_from_IDirect3D(IDirect3D *iface)
Definition: ddraw.c:118
static ULONG WINAPI ddraw1_AddRef(IDirectDraw *iface)
Definition: ddraw.c:330
#define TRACE(s)
Definition: solgame.cpp:4

◆ d3d1_CreateLight()

static HRESULT WINAPI d3d1_CreateLight ( IDirect3D *  iface,
IDirect3DLight **  light,
IUnknown *  outer_unknown 
)
static

Definition at line 4030 of file ddraw.c.

4031{
4032 struct ddraw *ddraw = impl_from_IDirect3D(iface);
4033
4034 TRACE("iface %p, light %p, outer_unknown %p.\n", iface, light, outer_unknown);
4035
4036 return d3d3_CreateLight(&ddraw->IDirect3D3_iface, light, outer_unknown);
4037}
static HRESULT WINAPI d3d3_CreateLight(IDirect3D3 *iface, IDirect3DLight **light, IUnknown *outer_unknown)
Definition: ddraw.c:3996
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum light
Definition: glfuncs.h:170
IDirect3D3 IDirect3D3_iface
Definition: ddraw_private.h:88

◆ d3d1_CreateMaterial()

static HRESULT WINAPI d3d1_CreateMaterial ( IDirect3D *  iface,
IDirect3DMaterial **  material,
IUnknown *  outer_unknown 
)
static

Definition at line 4103 of file ddraw.c.

4105{
4106 struct ddraw *ddraw = impl_from_IDirect3D(iface);
4107 struct d3d_material *object;
4108
4109 TRACE("iface %p, material %p, outer_unknown %p.\n", iface, material, outer_unknown);
4110
4111 object = d3d_material_create(ddraw);
4112 if (!object)
4113 {
4114 ERR("Failed to allocate material memory.\n");
4115 return DDERR_OUTOFMEMORY;
4116 }
4117
4118 TRACE("Created material %p.\n", object);
4119 *material = &object->IDirect3DMaterial_iface;
4120
4121 return D3D_OK;
4122}
#define ERR(fmt,...)
Definition: precomp.h:57
#define D3D_OK
Definition: d3d.h:106
struct d3d_material * d3d_material_create(struct ddraw *ddraw)
Definition: material.c:498
#define DDERR_OUTOFMEMORY
Definition: ddraw.h:113

◆ d3d1_CreateViewport()

static HRESULT WINAPI d3d1_CreateViewport ( IDirect3D *  iface,
IDirect3DViewport **  viewport,
IUnknown *  outer_unknown 
)
static

Definition at line 4178 of file ddraw.c.

4179{
4180 struct ddraw *ddraw = impl_from_IDirect3D(iface);
4181
4182 TRACE("iface %p, viewport %p, outer_unknown %p.\n", iface, viewport, outer_unknown);
4183
4184 return d3d3_CreateViewport(&ddraw->IDirect3D3_iface, (IDirect3DViewport3 **)viewport,
4185 outer_unknown);
4186}
static HRESULT WINAPI d3d3_CreateViewport(IDirect3D3 *iface, IDirect3DViewport3 **viewport, IUnknown *outer_unknown)
Definition: ddraw.c:4144

◆ d3d1_EnumDevices()

static HRESULT WINAPI d3d1_EnumDevices ( IDirect3D *  iface,
LPD3DENUMDEVICESCALLBACK  callback,
void *  context 
)
static

Definition at line 3966 of file ddraw.c.

3967{
3968 struct ddraw *ddraw = impl_from_IDirect3D(iface);
3969
3970 TRACE("iface %p, callback %p, context %p.\n", iface, callback, context);
3971
3973}
static HRESULT WINAPI d3d3_EnumDevices(IDirect3D3 *iface, LPD3DENUMDEVICESCALLBACK callback, void *context)
Definition: ddraw.c:3844
static IPrintDialogCallback callback
Definition: printdlg.c:325
Definition: http.c:7252

◆ d3d1_FindDevice()

static HRESULT WINAPI d3d1_FindDevice ( IDirect3D *  iface,
D3DFINDDEVICESEARCH *  fds,
D3DFINDDEVICERESULT *  fdr 
)
static

Definition at line 4331 of file ddraw.c.

4332{
4333 struct ddraw *ddraw = impl_from_IDirect3D(iface);
4334 static const GUID * const guids[] =
4335 {
4337 &IID_IDirect3DHALDevice,
4338 &IID_IDirect3DRGBDevice,
4339 &IID_IDirect3DRampDevice,
4340 };
4341
4342 TRACE("iface %p, fds %p, fdr %p.\n", iface, fds, fdr);
4343
4344 return ddraw_find_device(ddraw, fds, fdr, ARRAY_SIZE(guids), guids, sizeof(D3DDEVICEDESC_V1));
4345}
#define ARRAY_SIZE(A)
Definition: main.h:20
const GUID IID_D3DDEVICE_WineD3D
Definition: device.c:36
static HRESULT ddraw_find_device(struct ddraw *ddraw, const D3DFINDDEVICESEARCH *fds, D3DFINDDEVICERESULT *fdr, unsigned int guid_count, const GUID *const *guids, DWORD device_desc_size)
Definition: ddraw.c:4188
const struct sortguid * guids
Definition: locale.c:422

◆ d3d1_Initialize()

static HRESULT WINAPI d3d1_Initialize ( IDirect3D *  iface,
REFIID  riid 
)
static

Definition at line 2092 of file ddraw.c.

2093{
2094 TRACE("iface %p, riid %s.\n", iface, debugstr_guid(riid));
2095
2097}
REFIID riid
Definition: atlbase.h:39
#define debugstr_guid
Definition: kernel32.h:35
#define DDERR_ALREADYINITIALIZED
Definition: ddraw.h:69

◆ d3d1_QueryInterface()

static HRESULT WINAPI d3d1_QueryInterface ( IDirect3D *  iface,
REFIID  riid,
void **  object 
)
static

Definition at line 267 of file ddraw.c.

268{
269 struct ddraw *ddraw = impl_from_IDirect3D(iface);
270
271 TRACE("iface %p, riid %s, object %p.\n", iface, debugstr_guid(riid), object);
272
274}
static HRESULT WINAPI ddraw7_QueryInterface(IDirectDraw7 *iface, REFIID riid, void **out)
Definition: ddraw.c:138
IDirectDraw7 IDirectDraw7_iface
Definition: ddraw_private.h:83

◆ d3d1_Release()

static ULONG WINAPI d3d1_Release ( IDirect3D *  iface)
static

Definition at line 539 of file ddraw.c.

540{
541 struct ddraw *This = impl_from_IDirect3D(iface);
542
543 TRACE("iface %p.\n", iface);
544
545 return ddraw1_Release(&This->IDirectDraw_iface);
546}
static ULONG WINAPI ddraw1_Release(IDirectDraw *iface)
Definition: ddraw.c:499

◆ d3d2_AddRef()

static ULONG WINAPI d3d2_AddRef ( IDirect3D2 *  iface)
static

Definition at line 360 of file ddraw.c.

361{
362 struct ddraw *This = impl_from_IDirect3D2(iface);
363
364 TRACE("iface %p.\n", iface);
365
366 return ddraw1_AddRef(&This->IDirectDraw_iface);
367}
static struct ddraw * impl_from_IDirect3D2(IDirect3D2 *iface)
Definition: ddraw.c:123

◆ d3d2_CreateDevice()

static HRESULT WINAPI d3d2_CreateDevice ( IDirect3D2 *  iface,
REFCLSID  riid,
IDirectDrawSurface *  surface,
IDirect3DDevice2 **  device 
)
static

Definition at line 4422 of file ddraw.c.

4424{
4425 struct ddraw_surface *surface_impl = unsafe_impl_from_IDirectDrawSurface(surface);
4426 struct ddraw *ddraw = impl_from_IDirect3D2(iface);
4427 struct d3d_device *device_impl;
4428 HRESULT hr;
4429
4430 TRACE("iface %p, riid %s, surface %p, device %p.\n",
4431 iface, debugstr_guid(riid), surface, device);
4432
4434 if (SUCCEEDED(hr = d3d_device_create(ddraw, riid, surface_impl, (IUnknown *)surface, 2, &device_impl, NULL)))
4435 {
4436 *device = &device_impl->IDirect3DDevice2_iface;
4437 }
4438 else
4439 {
4440 WARN("Failed to create device, hr %#lx.\n", hr);
4441 *device = NULL;
4442 }
4444
4445 return hr;
4446}
#define WARN(fmt,...)
Definition: precomp.h:61
struct ddraw_surface * unsafe_impl_from_IDirectDrawSurface(IDirectDrawSurface *iface)
Definition: surface.c:6014
HRESULT d3d_device_create(struct ddraw *ddraw, const GUID *guid, struct ddraw_surface *target, IUnknown *rt_iface, UINT version, struct d3d_device **device, IUnknown *outer_unknown)
Definition: device.c:6959
HRESULT hr
Definition: delayimp.cpp:582
#define SUCCEEDED(hr)
Definition: intsafe.h:50
IDirect3DDevice2 IDirect3DDevice2_iface
Definition: devices.h:37
void WINAPI wined3d_mutex_unlock(void)
Definition: wined3d_main.c:544
void WINAPI wined3d_mutex_lock(void)
Definition: wined3d_main.c:539

◆ d3d2_CreateLight()

static HRESULT WINAPI d3d2_CreateLight ( IDirect3D2 *  iface,
IDirect3DLight **  light,
IUnknown *  outer_unknown 
)
static

Definition at line 4021 of file ddraw.c.

4022{
4023 struct ddraw *ddraw = impl_from_IDirect3D2(iface);
4024
4025 TRACE("iface %p, light %p, outer_unknown %p.\n", iface, light, outer_unknown);
4026
4027 return d3d3_CreateLight(&ddraw->IDirect3D3_iface, light, outer_unknown);
4028}

◆ d3d2_CreateMaterial()

static HRESULT WINAPI d3d2_CreateMaterial ( IDirect3D2 *  iface,
IDirect3DMaterial2 **  material,
IUnknown *  outer_unknown 
)
static

Definition at line 4082 of file ddraw.c.

4084{
4085 struct ddraw *ddraw = impl_from_IDirect3D2(iface);
4086 struct d3d_material *object;
4087
4088 TRACE("iface %p, material %p, outer_unknown %p.\n", iface, material, outer_unknown);
4089
4090 object = d3d_material_create(ddraw);
4091 if (!object)
4092 {
4093 ERR("Failed to allocate material memory.\n");
4094 return DDERR_OUTOFMEMORY;
4095 }
4096
4097 TRACE("Created material %p.\n", object);
4098 *material = &object->IDirect3DMaterial2_iface;
4099
4100 return D3D_OK;
4101}

◆ d3d2_CreateViewport()

static HRESULT WINAPI d3d2_CreateViewport ( IDirect3D2 *  iface,
IDirect3DViewport2 **  viewport,
IUnknown *  outer_unknown 
)
static

Definition at line 4168 of file ddraw.c.

4169{
4170 struct ddraw *ddraw = impl_from_IDirect3D2(iface);
4171
4172 TRACE("iface %p, viewport %p, outer_unknown %p.\n", iface, viewport, outer_unknown);
4173
4174 return d3d3_CreateViewport(&ddraw->IDirect3D3_iface, (IDirect3DViewport3 **)viewport,
4175 outer_unknown);
4176}

◆ d3d2_EnumDevices()

static HRESULT WINAPI d3d2_EnumDevices ( IDirect3D2 *  iface,
LPD3DENUMDEVICESCALLBACK  callback,
void *  context 
)
static

Definition at line 3957 of file ddraw.c.

3958{
3959 struct ddraw *ddraw = impl_from_IDirect3D2(iface);
3960
3961 TRACE("iface %p, callback %p, context %p.\n", iface, callback, context);
3962
3964}

◆ d3d2_FindDevice()

static HRESULT WINAPI d3d2_FindDevice ( IDirect3D2 *  iface,
D3DFINDDEVICESEARCH *  fds,
D3DFINDDEVICERESULT *  fdr 
)
static

Definition at line 4314 of file ddraw.c.

4315{
4316 struct ddraw *ddraw = impl_from_IDirect3D2(iface);
4317 static const GUID * const guids[] =
4318 {
4320 &IID_IDirect3DHALDevice,
4321 &IID_IDirect3DMMXDevice,
4322 &IID_IDirect3DRGBDevice,
4323 &IID_IDirect3DRampDevice,
4324 };
4325
4326 TRACE("iface %p, fds %p, fdr %p.\n", iface, fds, fdr);
4327
4328 return ddraw_find_device(ddraw, fds, fdr, ARRAY_SIZE(guids), guids, sizeof(D3DDEVICEDESC_V2));
4329}

◆ d3d2_QueryInterface()

static HRESULT WINAPI d3d2_QueryInterface ( IDirect3D2 *  iface,
REFIID  riid,
void **  object 
)
static

Definition at line 258 of file ddraw.c.

259{
260 struct ddraw *ddraw = impl_from_IDirect3D2(iface);
261
262 TRACE("iface %p, riid %s, object %p.\n", iface, debugstr_guid(riid), object);
263
265}

◆ d3d2_Release()

static ULONG WINAPI d3d2_Release ( IDirect3D2 *  iface)
static

Definition at line 530 of file ddraw.c.

531{
532 struct ddraw *This = impl_from_IDirect3D2(iface);
533
534 TRACE("iface %p.\n", iface);
535
536 return ddraw1_Release(&This->IDirectDraw_iface);
537}

◆ d3d3_AddRef()

static ULONG WINAPI d3d3_AddRef ( IDirect3D3 *  iface)
static

Definition at line 351 of file ddraw.c.

352{
353 struct ddraw *This = impl_from_IDirect3D3(iface);
354
355 TRACE("iface %p.\n", iface);
356
357 return ddraw1_AddRef(&This->IDirectDraw_iface);
358}
static struct ddraw * impl_from_IDirect3D3(IDirect3D3 *iface)
Definition: ddraw.c:128

◆ d3d3_CreateDevice()

static HRESULT WINAPI d3d3_CreateDevice ( IDirect3D3 *  iface,
REFCLSID  riid,
IDirectDrawSurface4 *  surface,
IDirect3DDevice3 **  device,
IUnknown *  outer_unknown 
)
static

Definition at line 4393 of file ddraw.c.

4395{
4396 struct ddraw_surface *surface_impl = unsafe_impl_from_IDirectDrawSurface4(surface);
4397 struct ddraw *ddraw = impl_from_IDirect3D3(iface);
4398 struct d3d_device *device_impl;
4399 HRESULT hr;
4400
4401 TRACE("iface %p, riid %s, surface %p, device %p, outer_unknown %p.\n",
4402 iface, debugstr_guid(riid), surface, device, outer_unknown);
4403
4404 if (outer_unknown)
4405 return CLASS_E_NOAGGREGATION;
4406
4408 if (SUCCEEDED(hr = d3d_device_create(ddraw, riid, surface_impl, (IUnknown *)surface, 3, &device_impl, NULL)))
4409 {
4410 *device = &device_impl->IDirect3DDevice3_iface;
4411 }
4412 else
4413 {
4414 WARN("Failed to create device, hr %#lx.\n", hr);
4415 *device = NULL;
4416 }
4418
4419 return hr;
4420}
struct ddraw_surface * unsafe_impl_from_IDirectDrawSurface4(IDirectDrawSurface4 *iface)
Definition: surface.c:5966
IUnknown * outer_unknown
IDirect3DDevice3 IDirect3DDevice3_iface
#define CLASS_E_NOAGGREGATION
Definition: winerror.h:3771

◆ d3d3_CreateLight()

static HRESULT WINAPI d3d3_CreateLight ( IDirect3D3 *  iface,
IDirect3DLight **  light,
IUnknown *  outer_unknown 
)
static

Definition at line 3996 of file ddraw.c.

3998{
3999 struct ddraw *ddraw = impl_from_IDirect3D3(iface);
4000 struct d3d_light *object;
4001
4002 TRACE("iface %p, light %p, outer_unknown %p.\n", iface, light, outer_unknown);
4003
4004 if (outer_unknown)
4005 return CLASS_E_NOAGGREGATION;
4006
4007 if (!(object = calloc(1, sizeof(*object))))
4008 {
4009 ERR("Failed to allocate light memory.\n");
4010 return DDERR_OUTOFMEMORY;
4011 }
4012
4013 d3d_light_init(object, ddraw);
4014
4015 TRACE("Created light %p.\n", object);
4016 *light = &object->IDirect3DLight_iface;
4017
4018 return D3D_OK;
4019}
void d3d_light_init(struct d3d_light *light, struct ddraw *ddraw)
Definition: light.c:250
#define calloc
Definition: rosglue.h:14

Referenced by d3d1_CreateLight(), and d3d2_CreateLight().

◆ d3d3_CreateMaterial()

static HRESULT WINAPI d3d3_CreateMaterial ( IDirect3D3 *  iface,
IDirect3DMaterial3 **  material,
IUnknown *  outer_unknown 
)
static

Definition at line 4059 of file ddraw.c.

4061{
4062 struct ddraw *ddraw = impl_from_IDirect3D3(iface);
4063 struct d3d_material *object;
4064
4065 TRACE("iface %p, material %p, outer_unknown %p.\n", iface, material, outer_unknown);
4066
4067 if (outer_unknown) return CLASS_E_NOAGGREGATION;
4068
4069 object = d3d_material_create(ddraw);
4070 if (!object)
4071 {
4072 ERR("Failed to allocate material memory.\n");
4073 return DDERR_OUTOFMEMORY;
4074 }
4075
4076 TRACE("Created material %p.\n", object);
4077 *material = &object->IDirect3DMaterial3_iface;
4078
4079 return D3D_OK;
4080}

◆ d3d3_CreateVertexBuffer()

static HRESULT WINAPI d3d3_CreateVertexBuffer ( IDirect3D3 *  iface,
D3DVERTEXBUFFERDESC *  desc,
IDirect3DVertexBuffer **  vertex_buffer,
DWORD  flags,
IUnknown *  outer_unknown 
)
static

Definition at line 4491 of file ddraw.c.

4493{
4494 struct ddraw *ddraw = impl_from_IDirect3D3(iface);
4495 struct d3d_vertex_buffer *object;
4496 HRESULT hr;
4497
4498 TRACE("iface %p, desc %p, vertex_buffer %p, flags %#lx, outer_unknown %p.\n",
4499 iface, desc, vertex_buffer, flags, outer_unknown);
4500
4501 if (outer_unknown)
4502 return CLASS_E_NOAGGREGATION;
4503 if (!vertex_buffer || !desc)
4504 return DDERR_INVALIDPARAMS;
4505
4507 if (hr == D3D_OK)
4508 {
4509 TRACE("Created vertex buffer %p.\n", object);
4510 *vertex_buffer = (IDirect3DVertexBuffer *)&object->IDirect3DVertexBuffer7_iface;
4511 }
4512 else
4513 WARN("Failed to create vertex buffer, hr %#lx.\n", hr);
4514
4515 return hr;
4516}
HRESULT d3d_vertex_buffer_create(struct d3d_vertex_buffer **buffer, struct ddraw *ddraw, D3DVERTEXBUFFERDESC *desc)
Definition: vertexbuffer.c:443
GLbitfield flags
Definition: glext.h:7161
D3D11_SHADER_VARIABLE_DESC desc
Definition: reflection.c:1683
#define DDERR_INVALIDPARAMS
Definition: ddraw.h:81

◆ d3d3_CreateViewport()

static HRESULT WINAPI d3d3_CreateViewport ( IDirect3D3 *  iface,
IDirect3DViewport3 **  viewport,
IUnknown *  outer_unknown 
)
static

Definition at line 4144 of file ddraw.c.

4146{
4147 struct ddraw *ddraw = impl_from_IDirect3D3(iface);
4148 struct d3d_viewport *object;
4149
4150 TRACE("iface %p, viewport %p, outer_unknown %p.\n", iface, viewport, outer_unknown);
4151
4152 if (outer_unknown) return CLASS_E_NOAGGREGATION;
4153
4154 if (!(object = calloc(1, sizeof(*object))))
4155 {
4156 ERR("Failed to allocate viewport memory.\n");
4157 return DDERR_OUTOFMEMORY;
4158 }
4159
4160 d3d_viewport_init(object, ddraw);
4161
4162 TRACE("Created viewport %p.\n", object);
4163 *viewport = &object->IDirect3DViewport3_iface;
4164
4165 return D3D_OK;
4166}
void d3d_viewport_init(struct d3d_viewport *viewport, struct ddraw *ddraw)
Definition: viewport.c:1232

Referenced by d3d1_CreateViewport(), and d3d2_CreateViewport().

◆ d3d3_EnumDevices()

static HRESULT WINAPI d3d3_EnumDevices ( IDirect3D3 *  iface,
LPD3DENUMDEVICESCALLBACK  callback,
void *  context 
)
static

Definition at line 3844 of file ddraw.c.

3845{
3846 static CHAR wined3d_description[] = "Wine D3DDevice using WineD3D and OpenGL";
3847
3848 struct ddraw *ddraw = impl_from_IDirect3D3(iface);
3849 D3DDEVICEDESC device_desc1, hal_desc, hel_desc;
3850 D3DDEVICEDESC7 device_desc7;
3851 HRESULT hr;
3852
3853 /* Some games (Motoracer 2 demo) have the bad idea to modify the device
3854 * name string. Let's put the string in a sufficiently sized array in
3855 * writable memory. */
3856 char device_name[50];
3857 strcpy(device_name,"Direct3D HEL");
3858
3859 TRACE("iface %p, callback %p, context %p.\n", iface, callback, context);
3860
3861 if (!callback)
3862 return DDERR_INVALIDPARAMS;
3863
3865
3866 if (FAILED(hr = ddraw_get_d3dcaps(ddraw, &device_desc7)))
3867 {
3869 return hr;
3870 }
3871 ddraw_d3dcaps1_from_7(&device_desc1, &device_desc7);
3872
3873 /* Do I have to enumerate the reference id? Note from old d3d7:
3874 * "It seems that enumerating the reference IID on Direct3D 1 games
3875 * (AvP / Motoracer2) breaks them". So do not enumerate this iid in V1
3876 *
3877 * There's a registry key HKLM\Software\Microsoft\Direct3D\Drivers,
3878 * EnumReference which enables / disables enumerating the reference
3879 * rasterizer. It's a DWORD, 0 means disabled, 2 means enabled. The
3880 * enablerefrast.reg and disablerefrast.reg files in the DirectX 7.0 sdk
3881 * demo directory suggest this.
3882 *
3883 * Some games(GTA 2) seem to use the second enumerated device, so I have
3884 * to enumerate at least 2 devices. So enumerate the reference device to
3885 * have 2 devices.
3886 *
3887 * Other games (Rollcage) tell emulation and hal device apart by certain
3888 * flags. Rollcage expects D3DPTEXTURECAPS_POW2 to be set (yeah, it is a
3889 * limitation flag), and it refuses all devices that have the perspective
3890 * flag set. This way it refuses the emulation device, and HAL devices
3891 * never have POW2 unset in d3d7 on windows. */
3892 if (ddraw->d3dversion != 1)
3893 {
3894 /* Tomb Raider 3 overwrites the reference device description buffer
3895 * with its own custom string. Reserve some extra space in the array
3896 * to avoid a buffer overrun. */
3897 static CHAR reference_description[64] = "RGB Direct3D emulation";
3898
3899 TRACE("Enumerating WineD3D D3DDevice interface.\n");
3900 hal_desc = device_desc1;
3901 hel_desc = device_desc1;
3902 /* The rgb device has the pow2 flag set in the hel caps, but not in the hal caps. */
3907 /* RGB, RAMP and MMX devices have a HAL dcmColorModel of 0 */
3908 hal_desc.dcmColorModel = 0;
3909 /* RGB, RAMP and MMX devices cannot report HAL hardware flags */
3910 hal_desc.dwFlags = 0;
3911 /* RGB, REF, RAMP and MMX devices don't report hardware transform and lighting capability */
3914
3915 hr = callback((GUID *)&IID_IDirect3DRGBDevice, reference_description,
3916 device_name, &hal_desc, &hel_desc, context);
3917 if (hr != D3DENUMRET_OK)
3918 {
3919 TRACE("Application cancelled the enumeration.\n");
3921 return D3D_OK;
3922 }
3923 }
3924
3925 strcpy(device_name,"Direct3D HAL");
3926
3927 TRACE("Enumerating HAL Direct3D device.\n");
3928 hal_desc = device_desc1;
3929 hel_desc = device_desc1;
3930
3931 /* The hal device does not have the pow2 flag set in hel, but in hal. */
3936 /* HAL devices have a HEL dcmColorModel of 0 */
3937 hel_desc.dcmColorModel = 0;
3938 /* HAL devices report hardware transform and lighting capability, but not in hel */
3940
3941 hr = callback((GUID *)&IID_IDirect3DHALDevice, wined3d_description,
3942 device_name, &hal_desc, &hel_desc, context);
3943 if (hr != D3DENUMRET_OK)
3944 {
3945 TRACE("Application cancelled the enumeration.\n");
3947 return D3D_OK;
3948 }
3949
3950 TRACE("End of enumeration.\n");
3951
3953
3954 return D3D_OK;
3955}
#define D3DENUMRET_OK
Definition: d3dtypes.h:81
HRESULT ddraw_get_d3dcaps(const struct ddraw *ddraw, D3DDEVICEDESC7 *caps)
Definition: ddraw.c:1287
void ddraw_d3dcaps1_from_7(D3DDEVICEDESC *caps1, D3DDEVICEDESC7 *caps7)
Definition: ddraw.c:1203
static const WCHAR device_name[]
Definition: btrfs.c:60
#define D3DDEVCAPS_HWTRANSFORMANDLIGHT
Definition: d3d8caps.h:48
#define D3DDEVCAPS_DRAWPRIMITIVES2EX
Definition: d3d8caps.h:47
#define D3DPTEXTURECAPS_NONPOW2CONDITIONAL
Definition: d3d8caps.h:119
#define D3DPTEXTURECAPS_PERSPECTIVE
Definition: d3d8caps.h:113
#define D3DDEVCAPS_HWRASTERIZATION
Definition: d3d8caps.h:50
#define D3DPTEXTURECAPS_POW2
Definition: d3d8caps.h:114
#define FAILED(hr)
Definition: intsafe.h:51
char CHAR
Definition: pedump.c:57
strcpy
Definition: string.h:131
D3DPRIMCAPS dpcTriCaps
Definition: d3dcaps.h:326
DWORD dwFlags
Definition: d3dcaps.h:319
DWORD dwDevCaps
Definition: d3dcaps.h:321
D3DPRIMCAPS dpcLineCaps
Definition: d3dcaps.h:325
D3DCOLORMODEL dcmColorModel
Definition: d3dcaps.h:320
DWORD dwTextureCaps
Definition: d3dcaps.h:60
int d3dversion

Referenced by d3d1_EnumDevices(), and d3d2_EnumDevices().

◆ d3d3_EnumZBufferFormats()

static HRESULT WINAPI d3d3_EnumZBufferFormats ( IDirect3D3 *  iface,
REFCLSID  device_iid,
LPD3DENUMPIXELFORMATSCALLBACK  callback,
void *  context 
)
static

Definition at line 4649 of file ddraw.c.

4651{
4652 struct ddraw *ddraw = impl_from_IDirect3D3(iface);
4653
4654 TRACE("iface %p, device_iid %s, callback %p, context %p.\n",
4655 iface, debugstr_guid(device_iid), callback, context);
4656
4658}
static HRESULT WINAPI d3d7_EnumZBufferFormats(IDirect3D7 *iface, REFCLSID device_iid, LPD3DENUMPIXELFORMATSCALLBACK callback, void *context)
Definition: ddraw.c:4535
IDirect3D7 IDirect3D7_iface
Definition: ddraw_private.h:87

◆ d3d3_EvictManagedTextures()

static HRESULT WINAPI d3d3_EvictManagedTextures ( IDirect3D3 *  iface)
static

Definition at line 4686 of file ddraw.c.

4687{
4688 struct ddraw *ddraw = impl_from_IDirect3D3(iface);
4689
4690 TRACE("iface %p.\n", iface);
4691
4693}
static HRESULT WINAPI d3d7_EvictManagedTextures(IDirect3D7 *iface)
Definition: ddraw.c:4672

◆ d3d3_FindDevice()

static HRESULT WINAPI d3d3_FindDevice ( IDirect3D3 *  iface,
D3DFINDDEVICESEARCH *  fds,
D3DFINDDEVICERESULT *  fdr 
)
static

Definition at line 4299 of file ddraw.c.

4300{
4301 struct ddraw *ddraw = impl_from_IDirect3D3(iface);
4302 static const GUID * const guids[] =
4303 {
4305 &IID_IDirect3DHALDevice,
4306 &IID_IDirect3DRGBDevice,
4307 };
4308
4309 TRACE("iface %p, fds %p, fdr %p.\n", iface, fds, fdr);
4310
4311 return ddraw_find_device(ddraw, fds, fdr, ARRAY_SIZE(guids), guids, sizeof(D3DDEVICEDESC_V3));
4312}

◆ d3d3_QueryInterface()

static HRESULT WINAPI d3d3_QueryInterface ( IDirect3D3 *  iface,
REFIID  riid,
void **  object 
)
static

Definition at line 249 of file ddraw.c.

250{
251 struct ddraw *ddraw = impl_from_IDirect3D3(iface);
252
253 TRACE("iface %p, riid %s, object %p.\n", iface, debugstr_guid(riid), object);
254
256}

◆ d3d3_Release()

static ULONG WINAPI d3d3_Release ( IDirect3D3 *  iface)
static

Definition at line 521 of file ddraw.c.

522{
523 struct ddraw *This = impl_from_IDirect3D3(iface);
524
525 TRACE("iface %p.\n", iface);
526
527 return ddraw1_Release(&This->IDirectDraw_iface);
528}

◆ d3d7_AddRef()

static ULONG WINAPI d3d7_AddRef ( IDirect3D7 *  iface)
static

Definition at line 342 of file ddraw.c.

343{
344 struct ddraw *This = impl_from_IDirect3D7(iface);
345
346 TRACE("iface %p.\n", iface);
347
348 return ddraw7_AddRef(&This->IDirectDraw7_iface);
349}
static struct ddraw * impl_from_IDirect3D7(IDirect3D7 *iface)
Definition: ddraw.c:133
static ULONG WINAPI ddraw7_AddRef(IDirectDraw7 *iface)
Definition: ddraw.c:294

◆ d3d7_CreateDevice()

static HRESULT WINAPI d3d7_CreateDevice ( IDirect3D7 *  iface,
REFCLSID  riid,
IDirectDrawSurface7 *  surface,
IDirect3DDevice7 **  device 
)
static

Definition at line 4368 of file ddraw.c.

4370{
4372 struct ddraw *ddraw = impl_from_IDirect3D7(iface);
4373 struct d3d_device *object;
4374 HRESULT hr;
4375
4376 TRACE("iface %p, riid %s, surface %p, device %p.\n", iface, debugstr_guid(riid), surface, device);
4377
4379 if (SUCCEEDED(hr = d3d_device_create(ddraw, riid, target, (IUnknown *)surface, 7, &object, NULL)))
4380 {
4381 *device = &object->IDirect3DDevice7_iface;
4382 }
4383 else
4384 {
4385 WARN("Failed to create device, hr %#lx.\n", hr);
4386 *device = NULL;
4387 }
4389
4390 return hr;
4391}
struct ddraw_surface * unsafe_impl_from_IDirectDrawSurface7(IDirectDrawSurface7 *iface)
Definition: surface.c:5950
Definition: tools.h:99

◆ d3d7_CreateVertexBuffer()

static HRESULT WINAPI d3d7_CreateVertexBuffer ( IDirect3D7 *  iface,
D3DVERTEXBUFFERDESC *  desc,
IDirect3DVertexBuffer7 **  vertex_buffer,
DWORD  flags 
)
static

Definition at line 4467 of file ddraw.c.

4469{
4470 struct ddraw *ddraw = impl_from_IDirect3D7(iface);
4471 struct d3d_vertex_buffer *object;
4472 HRESULT hr;
4473
4474 TRACE("iface %p, desc %p, vertex_buffer %p, flags %#lx.\n",
4475 iface, desc, vertex_buffer, flags);
4476
4477 if (!vertex_buffer || !desc) return DDERR_INVALIDPARAMS;
4478
4480 if (hr == D3D_OK)
4481 {
4482 TRACE("Created vertex buffer %p.\n", object);
4483 *vertex_buffer = &object->IDirect3DVertexBuffer7_iface;
4484 }
4485 else
4486 WARN("Failed to create vertex buffer, hr %#lx.\n", hr);
4487
4488 return hr;
4489}

◆ d3d7_EnumDevices()

static HRESULT WINAPI d3d7_EnumDevices ( IDirect3D7 *  iface,
LPD3DENUMDEVICESCALLBACK7  callback,
void *  context 
)
static

Definition at line 3783 of file ddraw.c.

3784{
3785 struct ddraw *ddraw = impl_from_IDirect3D7(iface);
3786 D3DDEVICEDESC7 device_desc7;
3787 DWORD dev_caps;
3788 HRESULT hr;
3789 size_t i;
3790
3791 TRACE("iface %p, callback %p, context %p.\n", iface, callback, context);
3792
3793 if (!callback)
3794 return DDERR_INVALIDPARAMS;
3795
3797
3798 if (FAILED(hr = ddraw_get_d3dcaps(ddraw, &device_desc7)))
3799 {
3801 return hr;
3802 }
3803 dev_caps = device_desc7.dwDevCaps;
3804
3805 for (i = 0; i < ARRAY_SIZE(device_list7); i++)
3806 {
3807 HRESULT ret;
3808
3809 device_desc7.deviceGUID = *device_list7[i].device_guid;
3810 device_desc7.dwDevCaps = dev_caps & ~device_list7[i].unsupported_caps;
3811 ret = callback(device_list7[i].interface_name, device_list7[i].device_name, &device_desc7, context);
3812 if (ret != DDENUMRET_OK)
3813 {
3814 TRACE("Application cancelled the enumeration.\n");
3816 return D3D_OK;
3817 }
3818 }
3819
3820 TRACE("End of enumeration.\n");
3821
3823
3824 return D3D_OK;
3825}
static struct enum_device_entry device_list7[]
return ret
Definition: mutex.c:147
unsigned long DWORD
Definition: ntddk_ex.h:95
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define DDENUMRET_OK
Definition: ddraw.h:191
GUID deviceGUID
Definition: d3dcaps.h:382
DWORD dwDevCaps
Definition: d3dcaps.h:358

◆ d3d7_EnumZBufferFormats()

static HRESULT WINAPI d3d7_EnumZBufferFormats ( IDirect3D7 *  iface,
REFCLSID  device_iid,
LPD3DENUMPIXELFORMATSCALLBACK  callback,
void *  context 
)
static

Definition at line 4535 of file ddraw.c.

4537{
4538 struct ddraw *ddraw = impl_from_IDirect3D7(iface);
4541 unsigned int i;
4542 HRESULT hr;
4543
4544 /* Order matters. Specifically, BattleZone II (full version) expects the
4545 * 16-bit depth formats to be listed before the 24 and 32 ones. */
4546 static const enum wined3d_format_id formats[] =
4547 {
4554 };
4555
4556 TRACE("iface %p, device_iid %s, callback %p, context %p.\n",
4557 iface, debugstr_guid(device_iid), callback, context);
4558
4559 if (!callback) return DDERR_INVALIDPARAMS;
4560
4561 if (IsEqualGUID(device_iid, &IID_IDirect3DHALDevice)
4562 || IsEqualGUID(device_iid, &IID_IDirect3DTnLHalDevice)
4563 || IsEqualGUID(device_iid, &IID_D3DDEVICE_WineD3D))
4564 {
4565 TRACE("Asked for HAL device.\n");
4567 }
4568 else if (IsEqualGUID(device_iid, &IID_IDirect3DRGBDevice)
4569 || IsEqualGUID(device_iid, &IID_IDirect3DMMXDevice))
4570 {
4571 TRACE("Asked for SW device.\n");
4573 }
4574 else if (IsEqualGUID(device_iid, &IID_IDirect3DRefDevice))
4575 {
4576 TRACE("Asked for REF device.\n");
4578 }
4579 else if (IsEqualGUID(device_iid, &IID_IDirect3DNullDevice))
4580 {
4581 TRACE("Asked for NULLREF device.\n");
4583 }
4584 else
4585 {
4586 FIXME("Unexpected device GUID %s.\n", debugstr_guid(device_iid));
4588 }
4589
4591 /* We need an adapter format from somewhere to please wined3d and WGL.
4592 * Use the current display mode. So far all cards offer the same depth
4593 * stencil format for all modes, but if some do not and applications do
4594 * not like that we'll have to find some workaround, like iterating over
4595 * all imaginable formats and collecting all the depth stencil formats we
4596 * can get. */
4598 {
4599 ERR("Failed to get display mode, hr %#lx.\n", hr);
4601 return hr;
4602 }
4603
4604 for (i = 0; i < ARRAY_SIZE(formats); ++i)
4605 {
4608 {
4609 DDPIXELFORMAT pformat;
4610
4611 memset(&pformat, 0, sizeof(pformat));
4612 pformat.dwSize = sizeof(pformat);
4614
4615 TRACE("Enumerating wined3d format %#x.\n", formats[i]);
4616 hr = callback(&pformat, context);
4617 if (hr != DDENUMRET_OK)
4618 {
4619 TRACE("Format enumeration cancelled by application.\n");
4621 return D3D_OK;
4622 }
4623 }
4624 }
4625
4626 /* Historically some windows drivers used dwZBufferBitDepth=24 for WINED3DFMT_X8D24_UNORM,
4627 * while others used dwZBufferBitDepth=32. In either case the pitch matches a 32 bits per
4628 * pixel format, so we use dwZBufferBitDepth=32. Some games expect 24. Windows Vista and
4629 * newer enumerate both versions, so we do the same(bug 22434) */
4632 {
4633 DDPIXELFORMAT x8d24 =
4634 {
4635 sizeof(x8d24), DDPF_ZBUFFER, 0,
4636 {24}, {0x00000000}, {0x00ffffff}, {0x00000000}
4637 };
4638 TRACE("Enumerating WINED3DFMT_X8D24_UNORM, dwZBufferBitDepth=24 version\n");
4639 callback(&x8d24, context);
4640 }
4641
4642 TRACE("End of enumeration.\n");
4643
4645
4646 return D3D_OK;
4647}
#define FIXME(fmt,...)
Definition: precomp.h:53
void ddrawformat_from_wined3dformat(DDPIXELFORMAT *ddraw_format, enum wined3d_format_id wined3d_format)
Definition: utils.c:30
static const struct pixel_format_desc formats[]
Definition: util.c:31
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLenum mode
Definition: glext.h:6217
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define DDPF_ZBUFFER
Definition: ddraw.h:513
#define memset(x, y, z)
Definition: compat.h:39
DWORD dwSize
Definition: ddraw.h:1072
struct wined3d_output * wined3d_output
Definition: ddraw_private.h:98
struct wined3d * wined3d
Definition: ddraw_private.h:96
struct wined3d_adapter * wined3d_adapter
Definition: ddraw_private.h:97
HRESULT CDECL wined3d_check_device_format(const struct wined3d *wined3d, const struct wined3d_adapter *adapter, enum wined3d_device_type device_type, enum wined3d_format_id adapter_format_id, uint32_t usage, unsigned int bind_flags, enum wined3d_resource_type resource_type, enum wined3d_format_id check_format_id)
Definition: directx.c:1972
HRESULT CDECL wined3d_output_get_display_mode(const struct wined3d_output *output, struct wined3d_display_mode *mode, enum wined3d_display_rotation *rotation)
Definition: directx.c:1515
@ WINED3D_RTYPE_TEXTURE_2D
Definition: wined3d.h:720
wined3d_format_id
Definition: wined3d.h:126
@ WINED3DFMT_X8D24_UNORM
Definition: wined3d.h:151
@ WINED3DFMT_S1_UINT_D15_UNORM
Definition: wined3d.h:150
@ WINED3DFMT_D16_UNORM
Definition: wined3d.h:212
@ WINED3DFMT_D32_UNORM
Definition: wined3d.h:149
@ WINED3DFMT_S4X4_UINT_D24_UNORM
Definition: wined3d.h:152
@ WINED3DFMT_D24_UNORM_S8_UINT
Definition: wined3d.h:202
#define WINED3D_BIND_DEPTH_STENCIL
Definition: wined3d.h:915
wined3d_device_type
Definition: wined3d.h:90
@ WINED3D_DEVICE_TYPE_NULLREF
Definition: wined3d.h:94
@ WINED3D_DEVICE_TYPE_SW
Definition: wined3d.h:93
@ WINED3D_DEVICE_TYPE_HAL
Definition: wined3d.h:91
@ WINED3D_DEVICE_TYPE_REF
Definition: wined3d.h:92

Referenced by d3d3_EnumZBufferFormats().

◆ d3d7_EvictManagedTextures()

static HRESULT WINAPI d3d7_EvictManagedTextures ( IDirect3D7 *  iface)
static

Definition at line 4672 of file ddraw.c.

4673{
4674 struct ddraw *ddraw = impl_from_IDirect3D7(iface);
4675
4676 TRACE("iface %p!\n", iface);
4677
4682
4683 return D3D_OK;
4684}
#define DDRAW_D3D_INITIALIZED
Definition: ddraw_private.h:54
void CDECL wined3d_device_evict_managed_resources(struct wined3d_device *device)
Definition: device.c:4923
DWORD flags
struct wined3d_device * wined3d_device
Definition: ddraw_private.h:99

Referenced by d3d3_EvictManagedTextures().

◆ d3d7_QueryInterface()

static HRESULT WINAPI d3d7_QueryInterface ( IDirect3D7 *  iface,
REFIID  riid,
void **  object 
)
static

Definition at line 240 of file ddraw.c.

241{
242 struct ddraw *ddraw = impl_from_IDirect3D7(iface);
243
244 TRACE("iface %p, riid %s, object %p.\n", iface, debugstr_guid(riid), object);
245
247}

◆ d3d7_Release()

static ULONG WINAPI d3d7_Release ( IDirect3D7 *  iface)
static

Definition at line 512 of file ddraw.c.

513{
514 struct ddraw *This = impl_from_IDirect3D7(iface);
515
516 TRACE("iface %p.\n", iface);
517
518 return ddraw7_Release(&This->IDirectDraw7_iface);
519}
static ULONG WINAPI ddraw7_Release(IDirectDraw7 *iface)
Definition: ddraw.c:460

◆ ddraw1_AddRef()

static ULONG WINAPI ddraw1_AddRef ( IDirectDraw *  iface)
static

Definition at line 330 of file ddraw.c.

331{
332 struct ddraw *This = impl_from_IDirectDraw(iface);
334
335 TRACE("%p increasing refcount to %lu.\n", This, ref);
336
337 if (ref == 1) InterlockedIncrement(&This->numIfaces);
338
339 return ref;
340}
#define InterlockedIncrement
Definition: armddk.h:53
static struct ddraw * impl_from_IDirectDraw(IDirectDraw *iface)
Definition: ddraw.c:98
Definition: send.c:48
uint32_t ULONG
Definition: typedefs.h:59

Referenced by d3d1_AddRef(), d3d2_AddRef(), and d3d3_AddRef().

◆ ddraw1_Compact()

static HRESULT WINAPI ddraw1_Compact ( IDirectDraw *  iface)
static

Definition at line 1652 of file ddraw.c.

1653{
1654 struct ddraw *ddraw = impl_from_IDirectDraw(iface);
1655
1656 TRACE("iface %p.\n", iface);
1657
1659}
static HRESULT WINAPI ddraw7_Compact(IDirectDraw7 *iface)
Definition: ddraw.c:1627

◆ ddraw1_CreateClipper()

static HRESULT WINAPI ddraw1_CreateClipper ( IDirectDraw *  iface,
DWORD  flags,
IDirectDrawClipper **  clipper,
IUnknown *  outer_unknown 
)
static

Definition at line 3535 of file ddraw.c.

3537{
3538 struct ddraw *ddraw = impl_from_IDirectDraw(iface);
3539
3540 TRACE("iface %p, flags %#lx, clipper %p, outer_unknown %p.\n",
3541 iface, flags, clipper, outer_unknown);
3542
3543 return ddraw7_CreateClipper(&ddraw->IDirectDraw7_iface, flags, clipper, outer_unknown);
3544}
static HRESULT WINAPI ddraw7_CreateClipper(IDirectDraw7 *iface, DWORD Flags, IDirectDrawClipper **Clipper, IUnknown *UnkOuter)
Definition: ddraw.c:3504

◆ ddraw1_CreatePalette()

static HRESULT WINAPI ddraw1_CreatePalette ( IDirectDraw *  iface,
DWORD  flags,
PALETTEENTRY *  entries,
IDirectDrawPalette **  palette,
IUnknown *  outer_unknown 
)
static

Definition at line 3649 of file ddraw.c.

3651{
3652 struct ddraw *ddraw = impl_from_IDirectDraw(iface);
3653 HRESULT hr;
3654
3655 TRACE("iface %p, flags %#lx, entries %p, palette %p, outer_unknown %p.\n",
3656 iface, flags, entries, palette, outer_unknown);
3657
3658 hr = ddraw7_CreatePalette(&ddraw->IDirectDraw7_iface, flags, entries, palette, outer_unknown);
3659 if (SUCCEEDED(hr) && *palette)
3660 {
3662 IDirectDraw7_Release(&ddraw->IDirectDraw7_iface);
3663 impl->ifaceToRelease = NULL;
3664 }
3665
3666 return hr;
3667}
static struct ddraw_palette * impl_from_IDirectDrawPalette(IDirectDrawPalette *iface)
static HRESULT WINAPI ddraw7_CreatePalette(IDirectDraw7 *iface, DWORD Flags, PALETTEENTRY *ColorTable, IDirectDrawPalette **Palette, IUnknown *pUnkOuter)
Definition: ddraw.c:3563
static HPALETTE palette
Definition: clipboard.c:1457
IUnknown * ifaceToRelease

◆ ddraw1_CreateSurface()

static HRESULT WINAPI ddraw1_CreateSurface ( IDirectDraw *  iface,
DDSURFACEDESC *  surface_desc,
IDirectDrawSurface **  surface,
IUnknown *  outer_unknown 
)
static

Definition at line 3040 of file ddraw.c.

3042{
3043 struct ddraw *ddraw = impl_from_IDirectDraw(iface);
3044 struct ddraw_surface *impl;
3045 HRESULT hr;
3046 DDSURFACEDESC2 surface_desc2;
3047
3048 TRACE("iface %p, surface_desc %p, surface %p, outer_unknown %p.\n",
3049 iface, surface_desc, surface, outer_unknown);
3050
3052
3054 {
3055 WARN("Cooperative level not set.\n");
3058 }
3059
3060 if(surface_desc == NULL || surface_desc->dwSize != sizeof(DDSURFACEDESC))
3061 {
3062 WARN("Application supplied invalid surface descriptor\n");
3064 return DDERR_INVALIDPARAMS;
3065 }
3066
3067 __TRY
3068 {
3069 *surface = NULL;
3070 }
3072 {
3073 WARN("Surface pointer %p is invalid.\n", surface);
3075 return DDERR_INVALIDPARAMS;
3076 }
3077 __ENDTRY;
3078
3083 {
3084 WARN("Application tried to create an explicit front or back buffer.\n");
3086 return DDERR_INVALIDCAPS;
3087 }
3088
3089 DDSD_to_DDSD2(surface_desc, &surface_desc2);
3090 hr = ddraw_surface_create(ddraw, &surface_desc2, &impl, outer_unknown, 1);
3092 if (FAILED(hr))
3093 return hr;
3094
3095 *surface = &impl->IDirectDrawSurface_iface;
3096 impl->ifaceToRelease = NULL;
3097
3098 return hr;
3099}
void DDSD_to_DDSD2(const DDSURFACEDESC *in, DDSURFACEDESC2 *out)
Definition: utils.c:1198
HRESULT ddraw_surface_create(struct ddraw *ddraw, const DDSURFACEDESC2 *surface_desc, struct ddraw_surface **surface, IUnknown *outer_unknown, unsigned int version)
Definition: surface.c:6535
#define __TRY
Definition: compat.h:80
#define __ENDTRY
Definition: compat.h:82
#define __EXCEPT_PAGE_FAULT
Definition: compat.h:81
#define DDSCAPS_FRONTBUFFER
Definition: ddraw.h:256
#define DDSCL_NORMAL
Definition: ddraw.h:537
#define DDSCAPS_PRIMARYSURFACE
Definition: ddraw.h:260
#define DDERR_INVALIDCAPS
Definition: ddraw.h:77
#define DDSCL_EXCLUSIVE
Definition: ddraw.h:538
#define DDERR_NOCOOPERATIVELEVELSET
Definition: ddraw.h:91
#define DDSCAPS_FLIP
Definition: ddraw.h:255
#define DDSCAPS_BACKBUFFER
Definition: ddraw.h:253
DWORD dwCaps
Definition: ddraw.h:734
DDSCAPS2 ddsCaps
Definition: ddraw.h:1190
DWORD dwSize
Definition: ddraw.h:1154
IDirectDrawSurface IDirectDrawSurface_iface
DDSURFACEDESC2 surface_desc
IUnknown * ifaceToRelease
DWORD cooperative_level

◆ ddraw1_DuplicateSurface()

static HRESULT WINAPI ddraw1_DuplicateSurface ( IDirectDraw *  iface,
IDirectDrawSurface *  src,
IDirectDrawSurface **  dst 
)
static

Definition at line 3746 of file ddraw.c.

3748{
3750 struct ddraw *ddraw = impl_from_IDirectDraw(iface);
3751 struct ddraw_surface *dst_impl;
3752 IDirectDrawSurface7 *dst7;
3753 HRESULT hr;
3754
3755 TRACE("iface %p, src %p, dst %p.\n", iface, src, dst);
3756
3758 src_impl ? &src_impl->IDirectDrawSurface7_iface : NULL, &dst7);
3759 if (FAILED(hr))
3760 return hr;
3761 dst_impl = impl_from_IDirectDrawSurface7(dst7);
3762 *dst = &dst_impl->IDirectDrawSurface_iface;
3763 IDirectDrawSurface_AddRef(*dst);
3764 IDirectDrawSurface7_Release(dst7);
3765
3766 return hr;
3767}
static struct ddraw_surface * impl_from_IDirectDrawSurface7(IDirectDrawSurface7 *iface)
static HRESULT WINAPI ddraw7_DuplicateSurface(IDirectDraw7 *iface, IDirectDrawSurface7 *Src, IDirectDrawSurface7 **Dest)
Definition: ddraw.c:3686
GLenum src
Definition: glext.h:6340
GLenum GLenum dst
Definition: glext.h:6340
DWORD IDirectDrawSurface7
Definition: vmrender.idl:20
IDirectDrawSurface7 IDirectDrawSurface7_iface

◆ ddraw1_EnumDisplayModes()

static HRESULT WINAPI ddraw1_EnumDisplayModes ( IDirectDraw *  iface,
DWORD  flags,
DDSURFACEDESC *  surface_desc,
void *  context,
LPDDENUMMODESCALLBACK  callback 
)
static

Definition at line 2591 of file ddraw.c.

2593{
2594 struct ddraw *ddraw = impl_from_IDirectDraw(iface);
2595 struct displaymodescallback_context cbcontext;
2596 DDSURFACEDESC2 surface_desc2;
2597
2598 TRACE("iface %p, flags %#lx, surface_desc %p, context %p, callback %p.\n",
2599 iface, flags, surface_desc, context, callback);
2600
2601 cbcontext.func = callback;
2602 cbcontext.context = context;
2603
2604 if (surface_desc) DDSD_to_DDSD2(surface_desc, &surface_desc2);
2606 surface_desc ? &surface_desc2 : NULL, &cbcontext, EnumDisplayModesCallbackThunk);
2607}
static HRESULT CALLBACK EnumDisplayModesCallbackThunk(DDSURFACEDESC2 *surface_desc, void *context)
Definition: ddraw.c:2416
static HRESULT WINAPI ddraw7_EnumDisplayModes(IDirectDraw7 *iface, DWORD Flags, DDSURFACEDESC2 *DDSD, void *Context, LPDDENUMMODESCALLBACK2 cb)
Definition: ddraw.c:2443

◆ ddraw1_EnumSurfaces()

static HRESULT WINAPI ddraw1_EnumSurfaces ( IDirectDraw *  iface,
DWORD  flags,
DDSURFACEDESC *  surface_desc,
void *  context,
LPDDENUMSURFACESCALLBACK  callback 
)
static

Definition at line 3430 of file ddraw.c.

3432{
3433 struct ddraw *ddraw = impl_from_IDirectDraw(iface);
3434 struct surfacescallback_context cbcontext;
3435 DDSURFACEDESC2 surface_desc2;
3436
3437 TRACE("iface %p, flags %#lx, surface_desc %p, context %p, callback %p.\n",
3438 iface, flags, surface_desc, context, callback);
3439
3440 cbcontext.func = callback;
3441 cbcontext.context = context;
3442
3443 if (surface_desc) DDSD_to_DDSD2(surface_desc, &surface_desc2);
3445 surface_desc ? &surface_desc2 : NULL, &cbcontext, EnumSurfacesCallbackThunk);
3446}
static HRESULT WINAPI ddraw7_EnumSurfaces(IDirectDraw7 *iface, DWORD flags, DDSURFACEDESC2 *surface_desc, void *context, LPDDENUMSURFACESCALLBACK7 callback)
Definition: ddraw.c:3298
static HRESULT CALLBACK EnumSurfacesCallbackThunk(IDirectDrawSurface7 *surface, DDSURFACEDESC2 *surface_desc, void *context)
Definition: ddraw.c:3235

◆ ddraw1_FlipToGDISurface()

static HRESULT WINAPI ddraw1_FlipToGDISurface ( IDirectDraw *  iface)
static

Definition at line 2160 of file ddraw.c.

2161{
2162 struct ddraw *ddraw = impl_from_IDirectDraw(iface);
2163
2164 TRACE("iface %p.\n", iface);
2165
2167}
static HRESULT WINAPI ddraw7_FlipToGDISurface(IDirectDraw7 *iface)
Definition: ddraw.c:2112

◆ ddraw1_GetCaps()

static HRESULT WINAPI ddraw1_GetCaps ( IDirectDraw *  iface,
DDCAPS *  driver_caps,
DDCAPS *  hel_caps 
)
static

Definition at line 1609 of file ddraw.c.

1610{
1611 struct ddraw *ddraw = impl_from_IDirectDraw(iface);
1612
1613 TRACE("iface %p, driver_caps %p, hel_caps %p.\n", iface, driver_caps, hel_caps);
1614
1615 return ddraw7_GetCaps(&ddraw->IDirectDraw7_iface, driver_caps, hel_caps);
1616}
static HRESULT WINAPI ddraw7_GetCaps(IDirectDraw7 *iface, DDCAPS *DriverCaps, DDCAPS *HELCaps)
Definition: ddraw.c:1501

◆ ddraw1_GetDisplayMode()

static HRESULT WINAPI ddraw1_GetDisplayMode ( IDirectDraw *  iface,
DDSURFACEDESC *  surface_desc 
)
static

Definition at line 1738 of file ddraw.c.

1739{
1740 struct ddraw *ddraw = impl_from_IDirectDraw(iface);
1741 HRESULT hr;
1742
1743 TRACE("iface %p, surface_desc %p.\n", iface, surface_desc);
1744
1746 if (SUCCEEDED(hr)) surface_desc->dwSize = sizeof(*surface_desc);
1747 return hr;
1748}
static HRESULT WINAPI ddraw7_GetDisplayMode(IDirectDraw7 *iface, DDSURFACEDESC2 *DDSD)
Definition: ddraw.c:1675

◆ ddraw1_GetFourCCCodes()

static HRESULT WINAPI ddraw1_GetFourCCCodes ( IDirectDraw *  iface,
DWORD *  codes_count,
DWORD *  codes 
)
static

Definition at line 1826 of file ddraw.c.

1827{
1828 struct ddraw *ddraw = impl_from_IDirectDraw(iface);
1829
1830 TRACE("iface %p, codes_count %p, codes %p.\n", iface, codes_count, codes);
1831
1832 return ddraw7_GetFourCCCodes(&ddraw->IDirectDraw7_iface, codes_count, codes);
1833}
static HRESULT WINAPI ddraw7_GetFourCCCodes(IDirectDraw7 *iface, DWORD *NumCodes, DWORD *Codes)
Definition: ddraw.c:1767

◆ ddraw1_GetGDISurface()

static HRESULT WINAPI ddraw1_GetGDISurface ( IDirectDraw *  iface,
IDirectDrawSurface **  surface 
)
static

Definition at line 2387 of file ddraw.c.

2388{
2389 struct ddraw *ddraw = impl_from_IDirectDraw(iface);
2390 struct ddraw_surface *surface_impl;
2391 IDirectDrawSurface7 *surface7;
2392 HRESULT hr;
2393
2394 TRACE("iface %p, surface %p.\n", iface, surface);
2395
2397 if (FAILED(hr))
2398 {
2399 *surface = NULL;
2400 return hr;
2401 }
2402 surface_impl = impl_from_IDirectDrawSurface7(surface7);
2403 *surface = &surface_impl->IDirectDrawSurface_iface;
2404 IDirectDrawSurface_AddRef(*surface);
2405 IDirectDrawSurface7_Release(surface7);
2406
2407 return hr;
2408}
static HRESULT WINAPI ddraw7_GetGDISurface(IDirectDraw7 *iface, IDirectDrawSurface7 **surface)
Definition: ddraw.c:2317

◆ ddraw1_GetMonitorFrequency()

static HRESULT WINAPI ddraw1_GetMonitorFrequency ( IDirectDraw *  iface,
DWORD *  frequency 
)
static

Definition at line 1875 of file ddraw.c.

1876{
1877 struct ddraw *ddraw = impl_from_IDirectDraw(iface);
1878
1879 TRACE("iface %p, frequency %p.\n", iface, frequency);
1880
1882}
static HRESULT WINAPI ddraw7_GetMonitorFrequency(IDirectDraw7 *iface, DWORD *frequency)
Definition: ddraw.c:1835
static LARGE_INTEGER * frequency
Definition: time.c:38

◆ ddraw1_GetScanLine()

static HRESULT WINAPI ddraw1_GetScanLine ( IDirectDraw *  iface,
DWORD *  line 
)
static

Definition at line 2276 of file ddraw.c.

2277{
2278 struct ddraw *ddraw = impl_from_IDirectDraw(iface);
2279
2280 TRACE("iface %p, line %p.\n", iface, line);
2281
2283}
static HRESULT WINAPI ddraw7_GetScanLine(IDirectDraw7 *iface, DWORD *Scanline)
Definition: ddraw.c:2233
Definition: parser.c:49

◆ ddraw1_GetVerticalBlankStatus()

static HRESULT WINAPI ddraw1_GetVerticalBlankStatus ( IDirectDraw *  iface,
BOOL *  status 
)
static

Definition at line 1927 of file ddraw.c.

1928{
1929 struct ddraw *ddraw = impl_from_IDirectDraw(iface);
1930
1931 TRACE("iface %p, status %p.\n", iface, status);
1932
1934}
static HRESULT WINAPI ddraw7_GetVerticalBlankStatus(IDirectDraw7 *iface, BOOL *status)
Definition: ddraw.c:1884
Definition: ps.c:97

◆ ddraw1_Initialize()

static HRESULT WINAPI ddraw1_Initialize ( IDirectDraw *  iface,
GUID *  guid 
)
static

Definition at line 2083 of file ddraw.c.

2084{
2085 struct ddraw *ddraw = impl_from_IDirectDraw(iface);
2086
2087 TRACE("iface %p, guid %s.\n", iface, debugstr_guid(guid));
2088
2090}
static HRESULT WINAPI ddraw7_Initialize(IDirectDraw7 *iface, GUID *guid)
Definition: ddraw.c:2047
GUID guid
Definition: version.c:147

◆ ddraw1_QueryInterface()

static HRESULT WINAPI ddraw1_QueryInterface ( IDirectDraw *  iface,
REFIID  riid,
void **  object 
)
static

Definition at line 231 of file ddraw.c.

232{
233 struct ddraw *ddraw = impl_from_IDirectDraw(iface);
234
235 TRACE("iface %p, riid %s, object %p.\n", iface, debugstr_guid(riid), object);
236
238}

◆ ddraw1_Release()

static ULONG WINAPI ddraw1_Release ( IDirectDraw *  iface)
static

Definition at line 499 of file ddraw.c.

500{
501 struct ddraw *This = impl_from_IDirectDraw(iface);
503
504 TRACE("%p decreasing refcount to %lu.\n", This, ref);
505
506 if (!ref && !InterlockedDecrement(&This->numIfaces))
508
509 return ref;
510}
#define InterlockedDecrement
Definition: armddk.h:52
static void ddraw_destroy(struct ddraw *This)
Definition: ddraw.c:421

Referenced by d3d1_Release(), d3d2_Release(), and d3d3_Release().

◆ ddraw1_RestoreDisplayMode()

static HRESULT WINAPI ddraw1_RestoreDisplayMode ( IDirectDraw *  iface)
static

Definition at line 745 of file ddraw.c.

746{
747 struct ddraw *ddraw = impl_from_IDirectDraw(iface);
748
749 TRACE("iface %p.\n", iface);
750
752}
static HRESULT WINAPI ddraw7_RestoreDisplayMode(IDirectDraw7 *iface)
Definition: ddraw.c:686

◆ ddraw1_SetCooperativeLevel()

static HRESULT WINAPI ddraw1_SetCooperativeLevel ( IDirectDraw *  iface,
HWND  window,
DWORD  flags 
)
static

Definition at line 1057 of file ddraw.c.

1058{
1059 struct ddraw *ddraw = impl_from_IDirectDraw(iface);
1060 HRESULT hr;
1061
1062 TRACE("iface %p, window %p, flags %#lx.\n", iface, window, flags);
1063
1065 if (SUCCEEDED(hr))
1067 return hr;
1068}
#define DDRAW_SCL_DDRAW1
Definition: ddraw_private.h:57
#define FALSE
Definition: types.h:117
static HRESULT ddraw_set_cooperative_level(struct ddraw *ddraw, HWND window, DWORD cooplevel, BOOL restore_mode_on_normal)
Definition: ddraw.c:796
static IHTMLWindow2 * window
Definition: events.c:77

◆ ddraw1_SetDisplayMode()

static HRESULT WINAPI ddraw1_SetDisplayMode ( IDirectDraw *  iface,
DWORD  width,
DWORD  height,
DWORD  bpp 
)
static

Definition at line 1194 of file ddraw.c.

1195{
1196 struct ddraw *ddraw = impl_from_IDirectDraw(iface);
1197
1198 TRACE("iface %p, width %lu, height %lu, bpp %lu.\n", iface, width, height, bpp);
1199
1201}
static HRESULT WINAPI ddraw7_SetDisplayMode(IDirectDraw7 *iface, DWORD width, DWORD height, DWORD bpp, DWORD refresh_rate, DWORD flags)
Definition: ddraw.c:1092
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
GLint GLint GLsizei width
Definition: gl.h:1546
ULONG bpp[]
Definition: xlate.c:19

◆ ddraw1_WaitForVerticalBlank()

static HRESULT WINAPI ddraw1_WaitForVerticalBlank ( IDirectDraw *  iface,
DWORD  flags,
HANDLE  event 
)
static

Definition at line 2224 of file ddraw.c.

2225{
2226 struct ddraw *ddraw = impl_from_IDirectDraw(iface);
2227
2228 TRACE("iface %p, flags %#lx, event %p.\n", iface, flags, event);
2229
2231}
static HRESULT WINAPI ddraw7_WaitForVerticalBlank(IDirectDraw7 *iface, DWORD Flags, HANDLE event)
Definition: ddraw.c:2186
Definition: filter.c:185

◆ ddraw2_AddRef()

static ULONG WINAPI ddraw2_AddRef ( IDirectDraw2 *  iface)
static

Definition at line 318 of file ddraw.c.

319{
320 struct ddraw *This = impl_from_IDirectDraw2(iface);
322
323 TRACE("%p increasing refcount to %lu.\n", This, ref);
324
325 if (ref == 1) InterlockedIncrement(&This->numIfaces);
326
327 return ref;
328}
static struct ddraw * impl_from_IDirectDraw2(IDirectDraw2 *iface)
Definition: ddraw.c:103

◆ ddraw2_Compact()

static HRESULT WINAPI ddraw2_Compact ( IDirectDraw2 *  iface)
static

Definition at line 1643 of file ddraw.c.

1644{
1645 struct ddraw *ddraw = impl_from_IDirectDraw2(iface);
1646
1647 TRACE("iface %p.\n", iface);
1648
1650}

◆ ddraw2_CreateClipper()

static HRESULT WINAPI ddraw2_CreateClipper ( IDirectDraw2 *  iface,
DWORD  flags,
IDirectDrawClipper **  clipper,
IUnknown *  outer_unknown 
)
static

Definition at line 3524 of file ddraw.c.

3526{
3527 struct ddraw *ddraw = impl_from_IDirectDraw2(iface);
3528
3529 TRACE("iface %p, flags %#lx, clipper %p, outer_unknown %p.\n",
3530 iface, flags, clipper, outer_unknown);
3531
3532 return ddraw7_CreateClipper(&ddraw->IDirectDraw7_iface, flags, clipper, outer_unknown);
3533}

◆ ddraw2_CreatePalette()

static HRESULT WINAPI ddraw2_CreatePalette ( IDirectDraw2 *  iface,
DWORD  flags,
PALETTEENTRY *  entries,
IDirectDrawPalette **  palette,
IUnknown *  outer_unknown 
)
static

Definition at line 3629 of file ddraw.c.

3631{
3632 struct ddraw *ddraw = impl_from_IDirectDraw2(iface);
3633 HRESULT hr;
3634
3635 TRACE("iface %p, flags %#lx, entries %p, palette %p, outer_unknown %p.\n",
3636 iface, flags, entries, palette, outer_unknown);
3637
3638 hr = ddraw7_CreatePalette(&ddraw->IDirectDraw7_iface, flags, entries, palette, outer_unknown);
3639 if (SUCCEEDED(hr) && *palette)
3640 {
3642 IDirectDraw7_Release(&ddraw->IDirectDraw7_iface);
3643 impl->ifaceToRelease = NULL;
3644 }
3645
3646 return hr;
3647}

◆ ddraw2_CreateSurface()

static HRESULT WINAPI ddraw2_CreateSurface ( IDirectDraw2 *  iface,
DDSURFACEDESC *  surface_desc,
IDirectDrawSurface **  surface,
IUnknown *  outer_unknown 
)
static

Definition at line 2976 of file ddraw.c.

2978{
2979 struct ddraw *ddraw = impl_from_IDirectDraw2(iface);
2980 struct ddraw_surface *impl;
2981 HRESULT hr;
2982 DDSURFACEDESC2 surface_desc2;
2983
2984 TRACE("iface %p, surface_desc %p, surface %p, outer_unknown %p.\n",
2985 iface, surface_desc, surface, outer_unknown);
2986
2988
2990 {
2991 WARN("Cooperative level not set.\n");
2994 }
2995
2996 if(surface_desc == NULL || surface_desc->dwSize != sizeof(DDSURFACEDESC))
2997 {
2998 WARN("Application supplied invalid surface descriptor\n");
3000 return DDERR_INVALIDPARAMS;
3001 }
3002
3003 __TRY
3004 {
3005 *surface = NULL;
3006 }
3008 {
3009 WARN("Surface pointer %p is invalid.\n", surface);
3011 return DDERR_INVALIDPARAMS;
3012 }
3013 __ENDTRY;
3014
3015 DDSD_to_DDSD2(surface_desc, &surface_desc2);
3017 {
3018 if (TRACE_ON(ddraw))
3019 {
3020 TRACE(" (%p) Requesting surface desc :\n", iface);
3022 }
3023
3024 WARN("Application tried to create an explicit front or back buffer\n");
3026 return DDERR_INVALIDCAPS;
3027 }
3028
3029 hr = ddraw_surface_create(ddraw, &surface_desc2, &impl, outer_unknown, 2);
3031 if (FAILED(hr))
3032 return hr;
3033
3034 *surface = &impl->IDirectDrawSurface_iface;
3035 impl->ifaceToRelease = NULL;
3036
3037 return hr;
3038}
void DDRAW_dump_surface_desc(const DDSURFACEDESC2 *lpddsd)
Definition: utils.c:857
#define TRACE_ON(x)
Definition: compat.h:75

◆ ddraw2_DuplicateSurface()

static HRESULT WINAPI ddraw2_DuplicateSurface ( IDirectDraw2 *  iface,
IDirectDrawSurface *  src,
IDirectDrawSurface **  dst 
)
static

Definition at line 3723 of file ddraw.c.

3725{
3727 struct ddraw *ddraw = impl_from_IDirectDraw2(iface);
3728 struct ddraw_surface *dst_impl;
3729 IDirectDrawSurface7 *dst7;
3730 HRESULT hr;
3731
3732 TRACE("iface %p, src %p, dst %p.\n", iface, src, dst);
3733
3735 src_impl ? &src_impl->IDirectDrawSurface7_iface : NULL, &dst7);
3736 if (FAILED(hr))
3737 return hr;
3738 dst_impl = impl_from_IDirectDrawSurface7(dst7);
3739 *dst = &dst_impl->IDirectDrawSurface_iface;
3740 IDirectDrawSurface_AddRef(*dst);
3741 IDirectDrawSurface7_Release(dst7);
3742
3743 return hr;
3744}

◆ ddraw2_EnumDisplayModes()

static HRESULT WINAPI ddraw2_EnumDisplayModes ( IDirectDraw2 *  iface,
DWORD  flags,
DDSURFACEDESC *  surface_desc,
void *  context,
LPDDENUMMODESCALLBACK  callback 
)
static

Definition at line 2573 of file ddraw.c.

2575{
2576 struct ddraw *ddraw = impl_from_IDirectDraw2(iface);
2577 struct displaymodescallback_context cbcontext;
2578 DDSURFACEDESC2 surface_desc2;
2579
2580 TRACE("iface %p, flags %#lx, surface_desc %p, context %p, callback %p.\n",
2581 iface, flags, surface_desc, context, callback);
2582
2583 cbcontext.func = callback;
2584 cbcontext.context = context;
2585
2586 if (surface_desc) DDSD_to_DDSD2(surface_desc, &surface_desc2);
2588 surface_desc ? &surface_desc2 : NULL, &cbcontext, EnumDisplayModesCallbackThunk);
2589}

◆ ddraw2_EnumSurfaces()

static HRESULT WINAPI ddraw2_EnumSurfaces ( IDirectDraw2 *  iface,
DWORD  flags,
DDSURFACEDESC *  surface_desc,
void *  context,
LPDDENUMSURFACESCALLBACK  callback 
)
static

Definition at line 3412 of file ddraw.c.

3414{
3415 struct ddraw *ddraw = impl_from_IDirectDraw2(iface);
3416 struct surfacescallback_context cbcontext;
3417 DDSURFACEDESC2 surface_desc2;
3418
3419 TRACE("iface %p, flags %#lx, surface_desc %p, context %p, callback %p.\n",
3420 iface, flags, surface_desc, context, callback);
3421
3422 cbcontext.func = callback;
3423 cbcontext.context = context;
3424
3425 if (surface_desc) DDSD_to_DDSD2(surface_desc, &surface_desc2);
3427 surface_desc ? &surface_desc2 : NULL, &cbcontext, EnumSurfacesCallbackThunk);
3428}

◆ ddraw2_FlipToGDISurface()

static HRESULT WINAPI ddraw2_FlipToGDISurface ( IDirectDraw2 *  iface)
static

Definition at line 2151 of file ddraw.c.

2152{
2153 struct ddraw *ddraw = impl_from_IDirectDraw2(iface);
2154
2155 TRACE("iface %p.\n", iface);
2156
2158}

◆ ddraw2_GetAvailableVidMem()

static HRESULT WINAPI ddraw2_GetAvailableVidMem ( IDirectDraw2 *  iface,
DDSCAPS *  caps,
DWORD *  total,
DWORD *  free 
)
static

Definition at line 2021 of file ddraw.c.

2023{
2024 struct ddraw *ddraw = impl_from_IDirectDraw2(iface);
2025 DDSCAPS2 caps2;
2026
2027 TRACE("iface %p, caps %p, total %p, free %p.\n", iface, caps, total, free);
2028
2029 DDRAW_Convert_DDSCAPS_1_To_2(caps, &caps2);
2031}
void DDRAW_Convert_DDSCAPS_1_To_2(const DDSCAPS *pIn, DDSCAPS2 *pOut)
Definition: utils.c:943
#define free
Definition: debug_ros.c:5
static HRESULT WINAPI ddraw7_GetAvailableVidMem(IDirectDraw7 *iface, DDSCAPS2 *caps, DWORD *total, DWORD *free)
Definition: ddraw.c:1951
size_t total

◆ ddraw2_GetCaps()

static HRESULT WINAPI ddraw2_GetCaps ( IDirectDraw2 *  iface,
DDCAPS *  driver_caps,
DDCAPS *  hel_caps 
)
static

Definition at line 1600 of file ddraw.c.

1601{
1602 struct ddraw *ddraw = impl_from_IDirectDraw2(iface);
1603
1604 TRACE("iface %p, driver_caps %p, hel_caps %p.\n", iface, driver_caps, hel_caps);
1605
1606 return ddraw7_GetCaps(&ddraw->IDirectDraw7_iface, driver_caps, hel_caps);
1607}

◆ ddraw2_GetDisplayMode()

static HRESULT WINAPI ddraw2_GetDisplayMode ( IDirectDraw2 *  iface,
DDSURFACEDESC *  surface_desc 
)
static

Definition at line 1726 of file ddraw.c.

1727{
1728 struct ddraw *ddraw = impl_from_IDirectDraw2(iface);
1729 HRESULT hr;
1730
1731 TRACE("iface %p, surface_desc %p.\n", iface, surface_desc);
1732
1734 if (SUCCEEDED(hr)) surface_desc->dwSize = sizeof(*surface_desc);
1735 return hr;
1736}

◆ ddraw2_GetFourCCCodes()

static HRESULT WINAPI ddraw2_GetFourCCCodes ( IDirectDraw2 *  iface,
DWORD *  codes_count,
DWORD *  codes 
)
static

Definition at line 1817 of file ddraw.c.

1818{
1819 struct ddraw *ddraw = impl_from_IDirectDraw2(iface);
1820
1821 TRACE("iface %p, codes_count %p, codes %p.\n", iface, codes_count, codes);
1822
1823 return ddraw7_GetFourCCCodes(&ddraw->IDirectDraw7_iface, codes_count, codes);
1824}

◆ ddraw2_GetGDISurface()

static HRESULT WINAPI ddraw2_GetGDISurface ( IDirectDraw2 *  iface,
IDirectDrawSurface **  surface 
)
static

Definition at line 2364 of file ddraw.c.

2365{
2366 struct ddraw *ddraw = impl_from_IDirectDraw2(iface);
2367 struct ddraw_surface *surface_impl;
2368 IDirectDrawSurface7 *surface7;
2369 HRESULT hr;
2370
2371 TRACE("iface %p, surface %p.\n", iface, surface);
2372
2374 if (FAILED(hr))
2375 {
2376 *surface = NULL;
2377 return hr;
2378 }
2379 surface_impl = impl_from_IDirectDrawSurface7(surface7);
2380 *surface = &surface_impl->IDirectDrawSurface_iface;
2381 IDirectDrawSurface_AddRef(*surface);
2382 IDirectDrawSurface7_Release(surface7);
2383
2384 return hr;
2385}

◆ ddraw2_GetMonitorFrequency()

static HRESULT WINAPI ddraw2_GetMonitorFrequency ( IDirectDraw2 *  iface,
DWORD *  frequency 
)
static

Definition at line 1866 of file ddraw.c.

1867{
1868 struct ddraw *ddraw = impl_from_IDirectDraw2(iface);
1869
1870 TRACE("iface %p, frequency %p.\n", iface, frequency);
1871
1873}

◆ ddraw2_GetScanLine()

static HRESULT WINAPI ddraw2_GetScanLine ( IDirectDraw2 *  iface,
DWORD *  line 
)
static

Definition at line 2267 of file ddraw.c.

2268{
2269 struct ddraw *ddraw = impl_from_IDirectDraw2(iface);
2270
2271 TRACE("iface %p, line %p.\n", iface, line);
2272
2274}

◆ ddraw2_GetVerticalBlankStatus()

static HRESULT WINAPI ddraw2_GetVerticalBlankStatus ( IDirectDraw2 *  iface,
BOOL *  status 
)
static

Definition at line 1918 of file ddraw.c.

1919{
1920 struct ddraw *ddraw = impl_from_IDirectDraw2(iface);
1921
1922 TRACE("iface %p, status %p.\n", iface, status);
1923
1925}

◆ ddraw2_Initialize()

static HRESULT WINAPI ddraw2_Initialize ( IDirectDraw2 *  iface,
GUID *  guid 
)
static

Definition at line 2074 of file ddraw.c.

2075{
2076 struct ddraw *ddraw = impl_from_IDirectDraw2(iface);
2077
2078 TRACE("iface %p, guid %s.\n", iface, debugstr_guid(guid));
2079
2081}

◆ ddraw2_QueryInterface()

static HRESULT WINAPI ddraw2_QueryInterface ( IDirectDraw2 *  iface,
REFIID  riid,
void **  object 
)
static

Definition at line 222 of file ddraw.c.

223{
224 struct ddraw *ddraw = impl_from_IDirectDraw2(iface);
225
226 TRACE("iface %p, riid %s, object %p.\n", iface, debugstr_guid(riid), object);
227
229}

◆ ddraw2_Release()

static ULONG WINAPI ddraw2_Release ( IDirectDraw2 *  iface)
static

Definition at line 486 of file ddraw.c.

487{
488 struct ddraw *This = impl_from_IDirectDraw2(iface);
490
491 TRACE("%p decreasing refcount to %lu.\n", This, ref);
492
493 if (!ref && !InterlockedDecrement(&This->numIfaces))
495
496 return ref;
497}

◆ ddraw2_RestoreDisplayMode()

static HRESULT WINAPI ddraw2_RestoreDisplayMode ( IDirectDraw2 *  iface)
static

Definition at line 736 of file ddraw.c.

737{
738 struct ddraw *ddraw = impl_from_IDirectDraw2(iface);
739
740 TRACE("iface %p.\n", iface);
741
743}

◆ ddraw2_SetCooperativeLevel()

static HRESULT WINAPI ddraw2_SetCooperativeLevel ( IDirectDraw2 *  iface,
HWND  window,
DWORD  flags 
)
static

Definition at line 1048 of file ddraw.c.

1049{
1050 struct ddraw *ddraw = impl_from_IDirectDraw2(iface);
1051
1052 TRACE("iface %p, window %p, flags %#lx.\n", iface, window, flags);
1053
1055}

◆ ddraw2_SetDisplayMode()

static HRESULT WINAPI ddraw2_SetDisplayMode ( IDirectDraw2 *  iface,
DWORD  width,
DWORD  height,
DWORD  bpp,
DWORD  refresh_rate,
DWORD  flags 
)
static

Definition at line 1183 of file ddraw.c.

1185{
1186 struct ddraw *ddraw = impl_from_IDirectDraw2(iface);
1187
1188 TRACE("iface %p, width %lu, height %lu, bpp %lu, refresh_rate %lu, flags %#lx.\n",
1189 iface, width, height, bpp, refresh_rate, flags);
1190
1192}

◆ ddraw2_WaitForVerticalBlank()

static HRESULT WINAPI ddraw2_WaitForVerticalBlank ( IDirectDraw2 *  iface,
DWORD  flags,
HANDLE  event 
)
static

Definition at line 2215 of file ddraw.c.

2216{
2217 struct ddraw *ddraw = impl_from_IDirectDraw2(iface);
2218
2219 TRACE("iface %p, flags %#lx, event %p.\n", iface, flags, event);
2220
2222}

◆ ddraw4_AddRef()

static ULONG WINAPI ddraw4_AddRef ( IDirectDraw4 *  iface)
static

Definition at line 306 of file ddraw.c.

307{
308 struct ddraw *This = impl_from_IDirectDraw4(iface);
310
311 TRACE("%p increasing refcount to %lu.\n", This, ref);
312
313 if (ref == 1) InterlockedIncrement(&This->numIfaces);
314
315 return ref;
316}
static struct ddraw * impl_from_IDirectDraw4(IDirectDraw4 *iface)
Definition: ddraw.c:108

◆ ddraw4_Compact()

static HRESULT WINAPI ddraw4_Compact ( IDirectDraw4 *  iface)
static

Definition at line 1634 of file ddraw.c.

1635{
1636 struct ddraw *ddraw = impl_from_IDirectDraw4(iface);
1637
1638 TRACE("iface %p.\n", iface);
1639
1641}

◆ ddraw4_CreateClipper()

static HRESULT WINAPI ddraw4_CreateClipper ( IDirectDraw4 *  iface,
DWORD  flags,
IDirectDrawClipper **  clipper,
IUnknown *  outer_unknown 
)
static

Definition at line 3513 of file ddraw.c.

3515{
3516 struct ddraw *ddraw = impl_from_IDirectDraw4(iface);
3517
3518 TRACE("iface %p, flags %#lx, clipper %p, outer_unknown %p.\n",
3519 iface, flags, clipper, outer_unknown);
3520
3521 return ddraw7_CreateClipper(&ddraw->IDirectDraw7_iface, flags, clipper, outer_unknown);
3522}

◆ ddraw4_CreatePalette()

static HRESULT WINAPI ddraw4_CreatePalette ( IDirectDraw4 *  iface,
DWORD  flags,
PALETTEENTRY *  entries,
IDirectDrawPalette **  palette,
IUnknown *  outer_unknown 
)
static

Definition at line 3609 of file ddraw.c.

3611{
3612 struct ddraw *ddraw = impl_from_IDirectDraw4(iface);
3613 HRESULT hr;
3614
3615 TRACE("iface %p, flags %#lx, entries %p, palette %p, outer_unknown %p.\n",
3616 iface, flags, entries, palette, outer_unknown);
3617
3618 hr = ddraw7_CreatePalette(&ddraw->IDirectDraw7_iface, flags, entries, palette, outer_unknown);
3619 if (SUCCEEDED(hr) && *palette)
3620 {
3622 IDirectDraw7_Release(&ddraw->IDirectDraw7_iface);
3623 IDirectDraw4_AddRef(iface);
3624 impl->ifaceToRelease = (IUnknown *)iface;
3625 }
3626 return hr;
3627}

◆ ddraw4_CreateSurface()

static HRESULT WINAPI ddraw4_CreateSurface ( IDirectDraw4 *  iface,
DDSURFACEDESC2 *  surface_desc,
IDirectDrawSurface4 **  surface,
IUnknown *  outer_unknown 
)
static

Definition at line 2913 of file ddraw.c.

2915{
2916 struct ddraw *ddraw = impl_from_IDirectDraw4(iface);
2917 struct ddraw_surface *impl;
2918 HRESULT hr;
2919
2920 TRACE("iface %p, surface_desc %p, surface %p, outer_unknown %p.\n",
2921 iface, surface_desc, surface, outer_unknown);
2922
2924
2926 {
2927 WARN("Cooperative level not set.\n");
2930 }
2931
2932 if(surface_desc == NULL || surface_desc->dwSize != sizeof(DDSURFACEDESC2))
2933 {
2934 WARN("Application supplied invalid surface descriptor\n");
2936 return DDERR_INVALIDPARAMS;
2937 }
2938
2939 __TRY
2940 {
2941 *surface = NULL;
2942 }
2944 {
2945 WARN("Surface pointer %p is invalid.\n", surface);
2947 return DDERR_INVALIDPARAMS;
2948 }
2949 __ENDTRY;
2950
2952 {
2953 if (TRACE_ON(ddraw))
2954 {
2955 TRACE(" (%p) Requesting surface desc :\n", iface);
2957 }
2958
2959 WARN("Application tried to create an explicit front or back buffer\n");
2961 return DDERR_INVALIDCAPS;
2962 }
2963
2964 hr = ddraw_surface_create(ddraw, surface_desc, &impl, outer_unknown, 4);
2966 if (FAILED(hr))
2967 return hr;
2968
2969 *surface = &impl->IDirectDrawSurface4_iface;
2970 IDirectDraw4_AddRef(iface);
2971 impl->ifaceToRelease = (IUnknown *)iface;
2972
2973 return hr;
2974}
IDirectDrawSurface4 IDirectDrawSurface4_iface

◆ ddraw4_DuplicateSurface()

static HRESULT WINAPI ddraw4_DuplicateSurface ( IDirectDraw4 *  iface,
IDirectDrawSurface4 *  src,
IDirectDrawSurface4 **  dst 
)
static

Definition at line 3697 of file ddraw.c.

3699{
3701 struct ddraw *ddraw = impl_from_IDirectDraw4(iface);
3702 struct ddraw_surface *dst_impl;
3703 IDirectDrawSurface7 *dst7;
3704 HRESULT hr;
3705
3706 TRACE("iface %p, src %p, dst %p.\n", iface, src, dst);
3707
3709 src_impl ? &src_impl->IDirectDrawSurface7_iface : NULL, &dst7);
3710 if (FAILED(hr))
3711 {
3712 *dst = NULL;
3713 return hr;
3714 }
3715 dst_impl = impl_from_IDirectDrawSurface7(dst7);
3716 *dst = &dst_impl->IDirectDrawSurface4_iface;
3717 IDirectDrawSurface4_AddRef(*dst);
3718 IDirectDrawSurface7_Release(dst7);
3719
3720 return hr;
3721}

◆ ddraw4_EnumDisplayModes()

static HRESULT WINAPI ddraw4_EnumDisplayModes ( IDirectDraw4 *  iface,
DWORD  flags,
DDSURFACEDESC2 *  surface_desc,
void *  context,
LPDDENUMMODESCALLBACK2  callback 
)
static

Definition at line 2562 of file ddraw.c.

2564{
2565 struct ddraw *ddraw = impl_from_IDirectDraw4(iface);
2566
2567 TRACE("iface %p, flags %#lx, surface_desc %p, context %p, callback %p.\n",
2568 iface, flags, surface_desc, context, callback);
2569
2571}

◆ ddraw4_EnumSurfaces()

static HRESULT WINAPI ddraw4_EnumSurfaces ( IDirectDraw4 *  iface,
DWORD  flags,
DDSURFACEDESC2 *  surface_desc,
void *  context,
LPDDENUMSURFACESCALLBACK2  callback 
)
static

Definition at line 3396 of file ddraw.c.

3398{
3399 struct ddraw *ddraw = impl_from_IDirectDraw4(iface);
3400 struct surfacescallback2_context cbcontext;
3401
3402 TRACE("iface %p, flags %#lx, surface_desc %p, context %p, callback %p.\n",
3403 iface, flags, surface_desc, context, callback);
3404
3405 cbcontext.func = callback;
3406 cbcontext.context = context;
3407
3408 return ddraw7_EnumSurfaces(&ddraw->IDirectDraw7_iface, flags, surface_desc,
3409 &cbcontext, EnumSurfacesCallback2Thunk);
3410}
static HRESULT CALLBACK EnumSurfacesCallback2Thunk(IDirectDrawSurface7 *surface, DDSURFACEDESC2 *surface_desc, void *context)
Definition: ddraw.c:3219

◆ ddraw4_FlipToGDISurface()

static HRESULT WINAPI ddraw4_FlipToGDISurface ( IDirectDraw4 *  iface)
static

Definition at line 2142 of file ddraw.c.

2143{
2144 struct ddraw *ddraw = impl_from_IDirectDraw4(iface);
2145
2146 TRACE("iface %p.\n", iface);
2147
2149}

◆ ddraw4_GetAvailableVidMem()

static HRESULT WINAPI ddraw4_GetAvailableVidMem ( IDirectDraw4 *  iface,
DDSCAPS2 *  caps,
DWORD *  total,
DWORD *  free 
)
static

Definition at line 2011 of file ddraw.c.

2013{
2014 struct ddraw *ddraw = impl_from_IDirectDraw4(iface);
2015
2016 TRACE("iface %p, caps %p, total %p, free %p.\n", iface, caps, total, free);
2017
2019}

◆ ddraw4_GetCaps()

static HRESULT WINAPI ddraw4_GetCaps ( IDirectDraw4 *  iface,
DDCAPS *  driver_caps,
DDCAPS *  hel_caps 
)
static

Definition at line 1591 of file ddraw.c.

1592{
1593 struct ddraw *ddraw = impl_from_IDirectDraw4(iface);
1594
1595 TRACE("iface %p, driver_caps %p, hel_caps %p.\n", iface, driver_caps, hel_caps);
1596
1597 return ddraw7_GetCaps(&ddraw->IDirectDraw7_iface, driver_caps, hel_caps);
1598}

◆ ddraw4_GetDeviceIdentifier()

static HRESULT WINAPI ddraw4_GetDeviceIdentifier ( IDirectDraw4 *  iface,
DDDEVICEIDENTIFIER *  identifier,
DWORD  flags 
)
static

Definition at line 2694 of file ddraw.c.

2696{
2697 struct ddraw *ddraw = impl_from_IDirectDraw4(iface);
2698 DDDEVICEIDENTIFIER2 identifier2;
2699 HRESULT hr;
2700
2701 TRACE("iface %p, identifier %p, flags %#lx.\n", iface, identifier, flags);
2702
2704 DDRAW_Convert_DDDEVICEIDENTIFIER_2_To_1(&identifier2, identifier);
2705
2706 return hr;
2707}
void DDRAW_Convert_DDDEVICEIDENTIFIER_2_To_1(const DDDEVICEIDENTIFIER2 *pIn, DDDEVICEIDENTIFIER *pOut)
Definition: utils.c:953
static HRESULT WINAPI ddraw7_GetDeviceIdentifier(IDirectDraw7 *iface, DDDEVICEIDENTIFIER2 *DDDI, DWORD Flags)
Definition: ddraw.c:2649

◆ ddraw4_GetDisplayMode()

static HRESULT WINAPI ddraw4_GetDisplayMode ( IDirectDraw4 *  iface,
DDSURFACEDESC2 *  surface_desc 
)
static

Definition at line 1717 of file ddraw.c.

1718{
1719 struct ddraw *ddraw = impl_from_IDirectDraw4(iface);
1720
1721 TRACE("iface %p, surface_desc %p.\n", iface, surface_desc);
1722
1723 return ddraw7_GetDisplayMode(&ddraw->IDirectDraw7_iface, surface_desc);
1724}

◆ ddraw4_GetFourCCCodes()

static HRESULT WINAPI ddraw4_GetFourCCCodes ( IDirectDraw4 *  iface,
DWORD *  codes_count,
DWORD *  codes 
)
static

Definition at line 1808 of file ddraw.c.

1809{
1810 struct ddraw *ddraw = impl_from_IDirectDraw4(iface);
1811
1812 TRACE("iface %p, codes_count %p, codes %p.\n", iface, codes_count, codes);
1813
1814 return ddraw7_GetFourCCCodes(&ddraw->IDirectDraw7_iface, codes_count, codes);
1815}

◆ ddraw4_GetGDISurface()

static HRESULT WINAPI ddraw4_GetGDISurface ( IDirectDraw4 *  iface,
IDirectDrawSurface4 **  surface 
)
static

Definition at line 2341 of file ddraw.c.

2342{
2343 struct ddraw *ddraw = impl_from_IDirectDraw4(iface);
2344 struct ddraw_surface *surface_impl;
2345 IDirectDrawSurface7 *surface7;
2346 HRESULT hr;
2347
2348 TRACE("iface %p, surface %p.\n", iface, surface);
2349
2351 if (FAILED(hr))
2352 {
2353 *surface = NULL;
2354 return hr;
2355 }
2356 surface_impl = impl_from_IDirectDrawSurface7(surface7);
2357 *surface = &surface_impl->IDirectDrawSurface4_iface;
2358 IDirectDrawSurface4_AddRef(*surface);
2359 IDirectDrawSurface7_Release(surface7);
2360
2361 return hr;
2362}

◆ ddraw4_GetMonitorFrequency()

static HRESULT WINAPI ddraw4_GetMonitorFrequency ( IDirectDraw4 *  iface,
DWORD *  frequency 
)
static

Definition at line 1857 of file ddraw.c.

1858{
1859 struct ddraw *ddraw = impl_from_IDirectDraw4(iface);
1860
1861 TRACE("iface %p, frequency %p.\n", iface, frequency);
1862
1864}

◆ ddraw4_GetScanLine()

static HRESULT WINAPI ddraw4_GetScanLine ( IDirectDraw4 *  iface,
DWORD *  line 
)
static

Definition at line 2258 of file ddraw.c.

2259{
2260 struct ddraw *ddraw = impl_from_IDirectDraw4(iface);
2261
2262 TRACE("iface %p, line %p.\n", iface, line);
2263
2265}

◆ ddraw4_GetSurfaceFromDC()

static HRESULT WINAPI ddraw4_GetSurfaceFromDC ( IDirectDraw4 *  iface,
HDC  dc,
IDirectDrawSurface4 **  surface 
)
static

Definition at line 2757 of file ddraw.c.

2759{
2760 struct ddraw *ddraw = impl_from_IDirectDraw4(iface);
2761 struct ddraw_surface *surface_impl;
2762 IDirectDrawSurface7 *surface7;
2763 HRESULT hr;
2764
2765 TRACE("iface %p, dc %p, surface %p.\n", iface, dc, surface);
2766
2767 if (!surface) return E_INVALIDARG;
2768
2770 if (FAILED(hr))
2771 {
2772 *surface = NULL;
2773 return hr;
2774 }
2775 surface_impl = impl_from_IDirectDrawSurface7(surface7);
2776 /* Tests say this is true */
2777 *surface = (IDirectDrawSurface4 *)&surface_impl->IDirectDrawSurface_iface;
2778 IDirectDrawSurface_AddRef(&surface_impl->IDirectDrawSurface_iface);
2779 IDirectDrawSurface7_Release(surface7);
2780
2781 return hr;
2782}
HDC dc
Definition: cylfrac.c:34
#define E_INVALIDARG
Definition: ddrawi.h:101
static HRESULT WINAPI ddraw7_GetSurfaceFromDC(IDirectDraw7 *iface, HDC dc, IDirectDrawSurface7 **surface)
Definition: ddraw.c:2723

◆ ddraw4_GetVerticalBlankStatus()

static HRESULT WINAPI ddraw4_GetVerticalBlankStatus ( IDirectDraw4 *  iface,
BOOL *  status 
)
static

Definition at line 1909 of file ddraw.c.

1910{
1911 struct ddraw *ddraw = impl_from_IDirectDraw4(iface);
1912
1913 TRACE("iface %p, status %p.\n", iface, status);
1914
1916}

◆ ddraw4_Initialize()

static HRESULT WINAPI ddraw4_Initialize ( IDirectDraw4 *  iface,
GUID *  guid 
)
static

Definition at line 2065 of file ddraw.c.

2066{
2067 struct ddraw *ddraw = impl_from_IDirectDraw4(iface);
2068
2069 TRACE("iface %p, guid %s.\n", iface, debugstr_guid(guid));
2070
2072}

◆ ddraw4_QueryInterface()

static HRESULT WINAPI ddraw4_QueryInterface ( IDirectDraw4 *  iface,
REFIID  riid,
void **  object 
)
static

Definition at line 213 of file ddraw.c.

214{
215 struct ddraw *ddraw = impl_from_IDirectDraw4(iface);
216
217 TRACE("iface %p, riid %s, object %p.\n", iface, debugstr_guid(riid), object);
218
220}

◆ ddraw4_Release()

static ULONG WINAPI ddraw4_Release ( IDirectDraw4 *  iface)
static

Definition at line 473 of file ddraw.c.

474{
475 struct ddraw *This = impl_from_IDirectDraw4(iface);
477
478 TRACE("%p decreasing refcount to %lu.\n", This, ref);
479
480 if (!ref && !InterlockedDecrement(&This->numIfaces))
482
483 return ref;
484}

◆ ddraw4_RestoreAllSurfaces()

static HRESULT WINAPI ddraw4_RestoreAllSurfaces ( IDirectDraw4 *  iface)
static

Definition at line 2800 of file ddraw.c.

2801{
2802 struct ddraw *ddraw = impl_from_IDirectDraw4(iface);
2803
2804 TRACE("iface %p.\n", iface);
2805
2807}
static HRESULT WINAPI ddraw7_RestoreAllSurfaces(IDirectDraw7 *iface)
Definition: ddraw.c:2792

◆ ddraw4_RestoreDisplayMode()

static HRESULT WINAPI ddraw4_RestoreDisplayMode ( IDirectDraw4 *  iface)
static

Definition at line 727 of file ddraw.c.

728{
729 struct ddraw *ddraw = impl_from_IDirectDraw4(iface);
730
731 TRACE("iface %p.\n", iface);
732
734}

◆ ddraw4_SetCooperativeLevel()

static HRESULT WINAPI ddraw4_SetCooperativeLevel ( IDirectDraw4 *  iface,
HWND  window,
DWORD  flags 
)
static

Definition at line 1039 of file ddraw.c.

1040{
1041 struct ddraw *ddraw = impl_from_IDirectDraw4(iface);
1042
1043 TRACE("iface %p, window %p, flags %#lx.\n", iface, window, flags);
1044
1046}

◆ ddraw4_SetDisplayMode()

static HRESULT WINAPI ddraw4_SetDisplayMode ( IDirectDraw4 *  iface,
DWORD  width,
DWORD  height,
DWORD  bpp,
DWORD  refresh_rate,
DWORD  flags 
)
static

Definition at line 1172 of file ddraw.c.

1174{
1175 struct ddraw *ddraw = impl_from_IDirectDraw4(iface);
1176
1177 TRACE("iface %p, width %lu, height %lu, bpp %lu, refresh_rate %lu, flags %#lx.\n",
1178 iface, width, height, bpp, refresh_rate, flags);
1179
1181}

◆ ddraw4_TestCooperativeLevel()

static HRESULT WINAPI ddraw4_TestCooperativeLevel ( IDirectDraw4 *  iface)
static

Definition at line 2294 of file ddraw.c.

2295{
2296 struct ddraw *ddraw = impl_from_IDirectDraw4(iface);
2297
2298 TRACE("iface %p.\n", iface);
2299
2301}
static HRESULT WINAPI ddraw7_TestCooperativeLevel(IDirectDraw7 *iface)
Definition: ddraw.c:2285

◆ ddraw4_WaitForVerticalBlank()

static HRESULT WINAPI ddraw4_WaitForVerticalBlank ( IDirectDraw4 *  iface,
DWORD  flags,
HANDLE  event 
)
static

Definition at line 2206 of file ddraw.c.

2207{
2208 struct ddraw *ddraw = impl_from_IDirectDraw4(iface);
2209
2210 TRACE("iface %p, flags %#lx, event %p.\n", iface, flags, event);
2211
2213}

◆ ddraw7_AddRef()

static ULONG WINAPI ddraw7_AddRef ( IDirectDraw7 *  iface)
static

Definition at line 294 of file ddraw.c.

295{
296 struct ddraw *This = impl_from_IDirectDraw7(iface);
298
299 TRACE("%p increasing refcount to %lu.\n", This, ref);
300
301 if(ref == 1) InterlockedIncrement(&This->numIfaces);
302
303 return ref;
304}
static struct ddraw * impl_from_IDirectDraw7(IDirectDraw7 *iface)
Definition: ddraw.c:113

Referenced by d3d7_AddRef().

◆ ddraw7_Compact()

static HRESULT WINAPI ddraw7_Compact ( IDirectDraw7 *  iface)
static

Definition at line 1627 of file ddraw.c.

1628{
1629 TRACE("iface %p.\n", iface);
1630
1631 return DD_OK;
1632}
#define DD_OK
Definition: ddraw.h:188

Referenced by ddraw1_Compact(), ddraw2_Compact(), and ddraw4_Compact().

◆ ddraw7_CreateClipper()

static HRESULT WINAPI ddraw7_CreateClipper ( IDirectDraw7 *  iface,
DWORD  Flags,
IDirectDrawClipper **  Clipper,
IUnknown *  UnkOuter 
)
static

Definition at line 3504 of file ddraw.c.

3506{
3507 TRACE("iface %p, flags %#lx, clipper %p, outer_unknown %p.\n",
3508 iface, Flags, Clipper, UnkOuter);
3509
3510 return DirectDrawCreateClipper(Flags, Clipper, UnkOuter);
3511}
_In_ D3DDDI_VIDEO_PRESENT_TARGET_ID _In_ ULONG _In_ ULONG Flags
Definition: dispmprt.h:245
HRESULT WINAPI DirectDrawCreateClipper(DWORD flags, IDirectDrawClipper **clipper, IUnknown *outer_unknown)
Definition: ddraw.c:3463

Referenced by ddraw1_CreateClipper(), ddraw2_CreateClipper(), and ddraw4_CreateClipper().

◆ ddraw7_CreatePalette()

static HRESULT WINAPI ddraw7_CreatePalette ( IDirectDraw7 *  iface,
DWORD  Flags,
PALETTEENTRY *  ColorTable,
IDirectDrawPalette **  Palette,
IUnknown *  pUnkOuter 
)
static

Definition at line 3563 of file ddraw.c.

3565{
3566 struct ddraw *ddraw = impl_from_IDirectDraw7(iface);
3567 struct ddraw_palette *object;
3568 HRESULT hr;
3569
3570 TRACE("iface %p, flags %#lx, color_table %p, palette %p, outer_unknown %p.\n",
3571 iface, Flags, ColorTable, Palette, pUnkOuter);
3572
3573 if (pUnkOuter)
3574 return CLASS_E_NOAGGREGATION;
3575
3577
3578 /* The refcount test shows that a cooplevel is required for this */
3580 {
3581 WARN("No cooperative level set, returning DDERR_NOCOOPERATIVELEVELSET\n");
3584 }
3585
3586 if (!(object = malloc(sizeof(*object))))
3587 {
3588 ERR("Out of memory when allocating memory for a palette implementation\n");
3590 return E_OUTOFMEMORY;
3591 }
3592
3593 hr = ddraw_palette_init(object, ddraw, Flags, ColorTable);
3594 if (FAILED(hr))
3595 {
3596 WARN("Failed to initialize palette, hr %#lx.\n", hr);
3597 free(object);
3599 return hr;
3600 }
3601
3602 TRACE("Created palette %p.\n", object);
3603 *Palette = &object->IDirectDrawPalette_iface;
3605
3606 return DD_OK;
3607}
HRESULT ddraw_palette_init(struct ddraw_palette *palette, struct ddraw *ddraw, DWORD flags, PALETTEENTRY *entries)
Definition: palette.c:256
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define malloc
Definition: debug_ros.c:4

Referenced by ddraw1_CreatePalette(), ddraw2_CreatePalette(), and ddraw4_CreatePalette().

◆ ddraw7_CreateSurface()

static HRESULT WINAPI ddraw7_CreateSurface ( IDirectDraw7 *  iface,
DDSURFACEDESC2 *  surface_desc,
IDirectDrawSurface7 **  surface,
IUnknown *  outer_unknown 
)
static

Definition at line 2850 of file ddraw.c.

2852{
2853 struct ddraw *ddraw = impl_from_IDirectDraw7(iface);
2854 struct ddraw_surface *impl;
2855 HRESULT hr;
2856
2857 TRACE("iface %p, surface_desc %p, surface %p, outer_unknown %p.\n",
2858 iface, surface_desc, surface, outer_unknown);
2859
2861
2863 {
2864 WARN("Cooperative level not set.\n");
2867 }
2868
2869 if(surface_desc == NULL || surface_desc->dwSize != sizeof(DDSURFACEDESC2))
2870 {
2871 WARN("Application supplied invalid surface descriptor\n");
2873 return DDERR_INVALIDPARAMS;
2874 }
2875
2876 __TRY
2877 {
2878 *surface = NULL;
2879 }
2881 {
2882 WARN("Surface pointer %p is invalid.\n", surface);
2884 return DDERR_INVALIDPARAMS;
2885 }
2886 __ENDTRY;
2887
2889 {
2890 if (TRACE_ON(ddraw))
2891 {
2892 TRACE(" (%p) Requesting surface desc :\n", iface);
2894 }
2895
2896 WARN("Application tried to create an explicit front or back buffer\n");
2898 return DDERR_INVALIDCAPS;
2899 }
2900
2901 hr = ddraw_surface_create(ddraw, surface_desc, &impl, outer_unknown, 7);
2903 if (FAILED(hr))
2904 return hr;
2905
2906 *surface = &impl->IDirectDrawSurface7_iface;
2907 IDirectDraw7_AddRef(iface);
2908 impl->ifaceToRelease = (IUnknown *)iface;
2909
2910 return hr;
2911}

Referenced by ddraw7_EnumSurfaces(), and enum_surface_mode_callback().

◆ ddraw7_DuplicateSurface()

static HRESULT WINAPI ddraw7_DuplicateSurface ( IDirectDraw7 *  iface,
IDirectDrawSurface7 *  Src,
IDirectDrawSurface7 **  Dest 
)
static

Definition at line 3686 of file ddraw.c.

3688{
3689 struct ddraw_surface *src_surface = unsafe_impl_from_IDirectDrawSurface7(Src);
3690
3691 FIXME("iface %p, src %p, dst %p partial stub!\n", iface, Src, Dest);
3692
3693 /* For now, simply create a new, independent surface */
3694 return IDirectDraw7_CreateSurface(iface, &src_surface->surface_desc, Dest, NULL);
3695}

Referenced by ddraw1_DuplicateSurface(), ddraw2_DuplicateSurface(), and ddraw4_DuplicateSurface().

◆ ddraw7_EnumDisplayModes()

static HRESULT WINAPI ddraw7_EnumDisplayModes ( IDirectDraw7 *  iface,
DWORD  Flags,
DDSURFACEDESC2 *  DDSD,
void *  Context,
LPDDENUMMODESCALLBACK2  cb 
)
static

Definition at line 2443 of file ddraw.c.

2445{
2446 struct ddraw *ddraw = impl_from_IDirectDraw7(iface);
2447 struct wined3d_display_mode *enum_modes = NULL;
2449 unsigned int modenum, fmt;
2450 DDSURFACEDESC2 callback_sd;
2451 unsigned enum_mode_count = 0, enum_mode_array_size = 16;
2453
2454 static const enum wined3d_format_id checkFormatList[] =
2455 {
2459 };
2460
2461 TRACE("iface %p, flags %#lx, surface_desc %p, context %p, callback %p.\n",
2462 iface, Flags, DDSD, Context, cb);
2463
2464 if (!cb)
2465 return DDERR_INVALIDPARAMS;
2466
2467 if (!(enum_modes = malloc(enum_mode_array_size * sizeof(*enum_modes))))
2468 return DDERR_OUTOFMEMORY;
2469
2471
2472 pixelformat.dwSize = sizeof(pixelformat);
2473 for(fmt = 0; fmt < ARRAY_SIZE(checkFormatList); fmt++)
2474 {
2475 modenum = 0;
2476 while (wined3d_output_get_mode(ddraw->wined3d_output, checkFormatList[fmt],
2477 WINED3D_SCANLINE_ORDERING_UNKNOWN, modenum++, &mode, false) == WINED3D_OK)
2478 {
2479 BOOL found = FALSE;
2480 unsigned i;
2481
2483 if (DDSD)
2484 {
2485 if (DDSD->dwFlags & DDSD_WIDTH && mode.width != DDSD->dwWidth)
2486 continue;
2487 if (DDSD->dwFlags & DDSD_HEIGHT && mode.height != DDSD->dwHeight)
2488 continue;
2489 if (DDSD->dwFlags & DDSD_REFRESHRATE && mode.refresh_rate != DDSD->dwRefreshRate)
2490 continue;
2491 if (DDSD->dwFlags & DDSD_PIXELFORMAT
2492 && pixelformat.dwRGBBitCount != DDSD->ddpfPixelFormat.dwRGBBitCount)
2493 continue;
2494 }
2495
2496 /* DX docs state EnumDisplayMode should return only unique modes */
2497 for (i = 0; i < enum_mode_count; i++)
2498 {
2499 if (enum_modes[i].width == mode.width && enum_modes[i].height == mode.height
2500 && enum_modes[i].format_id == mode.format_id
2501 && (enum_modes[i].refresh_rate == mode.refresh_rate || !(Flags & DDEDM_REFRESHRATES)))
2502 {
2503 found = TRUE;
2504 break;
2505 }
2506 }
2507 if(found) continue;
2508
2509 memset(&callback_sd, 0, sizeof(callback_sd));
2510 callback_sd.dwSize = sizeof(callback_sd);
2511 callback_sd.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
2512
2515 callback_sd.dwRefreshRate = mode.refresh_rate;
2516
2517 callback_sd.dwWidth = mode.width;
2518 callback_sd.dwHeight = mode.height;
2519
2520 callback_sd.ddpfPixelFormat=pixelformat;
2521
2522 /* Calc pitch and DWORD align like MSDN says */
2523 callback_sd.lPitch = (callback_sd.ddpfPixelFormat.dwRGBBitCount / 8) * mode.width;
2524 callback_sd.lPitch = (callback_sd.lPitch + 3) & ~3;
2525
2526 TRACE("Enumerating %lux%lux%lu @%lu\n", callback_sd.dwWidth, callback_sd.dwHeight, callback_sd.ddpfPixelFormat.dwRGBBitCount,
2527 callback_sd.dwRefreshRate);
2528
2529 if(cb(&callback_sd, Context) == DDENUMRET_CANCEL)
2530 {
2531 TRACE("Application asked to terminate the enumeration\n");
2532 free(enum_modes);
2534 return DD_OK;
2535 }
2536
2537 if (enum_mode_count == enum_mode_array_size)
2538 {
2539 struct wined3d_display_mode *new_enum_modes;
2540
2541 enum_mode_array_size *= 2;
2542 if (!(new_enum_modes = realloc(enum_modes, enum_mode_array_size * sizeof(*new_enum_modes))))
2543 {
2544 free(enum_modes);
2546 return DDERR_OUTOFMEMORY;
2547 }
2548
2549 enum_modes = new_enum_modes;
2550 }
2551 enum_modes[enum_mode_count++] = mode;
2552 }
2553 }
2554
2555 TRACE("End of enumeration\n");
2556 free(enum_modes);
2558
2559 return DD_OK;
2560}
#define realloc
Definition: debug_ros.c:6
#define TRUE
Definition: types.h:120
static MonoProfilerRuntimeShutdownBeginCallback cb
Definition: metahost.c:118
pixelformat
Definition: converter.c:37
unsigned int BOOL
Definition: ntddk_ex.h:94
#define DDSD_WIDTH
Definition: ddraw.h:212
#define DDSD_PIXELFORMAT
Definition: ddraw.h:218
#define DDSD_PITCH
Definition: ddraw.h:213
#define DDEDM_REFRESHRATES
Definition: ddraw.h:531
#define DDSD_REFRESHRATE
Definition: ddraw.h:224
#define DDSD_HEIGHT
Definition: ddraw.h:211
struct _DDPIXELFORMAT DDPIXELFORMAT
#define DDENUMRET_CANCEL
Definition: ddraw.h:190
_In_ PVOID Context
Definition: storport.h:2269
DWORD dwRGBBitCount
Definition: ddraw.h:1077
DWORD dwWidth
Definition: ddraw.h:1157
DWORD dwHeight
Definition: ddraw.h:1156
DWORD dwRefreshRate
Definition: ddraw.h:1171
DDPIXELFORMAT ddpfPixelFormat
Definition: ddraw.h:1187
DWORD dwFlags
Definition: ddraw.h:1155
Definition: dsound.c:943
HRESULT CDECL wined3d_output_get_mode(struct wined3d_output *output, enum wined3d_format_id format_id, enum wined3d_scanline_ordering scanline_ordering, unsigned int mode_idx, struct wined3d_display_mode *mode, bool cached)
Definition: directx.c:1369
#define WINED3D_OK
Definition: wined3d.h:33
@ WINED3DFMT_B8G8R8X8_UNORM
Definition: wined3d.h:245
@ WINED3DFMT_B5G6R5_UNORM
Definition: wined3d.h:242
@ WINED3DFMT_P8_UINT
Definition: wined3d.h:137
@ WINED3D_SCANLINE_ORDERING_UNKNOWN
Definition: wined3d.h:825

Referenced by ddraw1_EnumDisplayModes(), ddraw2_EnumDisplayModes(), ddraw4_EnumDisplayModes(), and ddraw7_EnumSurfaces().

◆ ddraw7_EnumSurfaces()

static HRESULT WINAPI ddraw7_EnumSurfaces ( IDirectDraw7 *  iface,
DWORD  flags,
DDSURFACEDESC2 *  surface_desc,
void *  context,
LPDDENUMSURFACESCALLBACK7  callback 
)
static

Definition at line 3298 of file ddraw.c.

3300{
3301 struct ddraw *ddraw = impl_from_IDirectDraw7(iface);
3302 HRESULT hr = DD_OK;
3303
3304 TRACE("iface %p, flags %#lx, surface_desc %p, context %p, callback %p.\n",
3305 iface, flags, surface_desc, context, callback);
3306
3307 if (!callback)
3308 return DDERR_INVALIDPARAMS;
3309
3311 {
3312 IDirectDrawSurface7 *surface;
3313
3315 return DDERR_INVALIDPARAMS;
3316
3318
3319 if (surface_desc->dwFlags & (DDSD_WIDTH | DDSD_HEIGHT))
3320 {
3321 if (SUCCEEDED(ddraw7_CreateSurface(iface, surface_desc, &surface, NULL)))
3322 {
3323 struct ddraw_surface *surface_impl = impl_from_IDirectDrawSurface7(surface);
3324 callback(NULL, &surface_impl->surface_desc, context);
3325 IDirectDrawSurface7_Release(surface);
3326 }
3327 }
3328 else
3329 {
3331 {
3332 .dwSize = sizeof(desc),
3335 };
3337 {
3338 .ddraw = iface,
3339 .desc = surface_desc,
3340 .callback = callback,
3341 .context = context,
3342 };
3344
3346 {
3347 ERR("Failed to get display mode, hr %#lx.\n", hr);
3349 return hr_ddraw_from_wined3d(hr);
3350 }
3351
3352 ddrawformat_from_wined3dformat(&desc.ddpfPixelFormat, mode.format_id);
3354 }
3355
3357 }
3359 {
3360 struct ddraw_surface *surface, *cursor;
3361 BOOL nomatch = !!(flags & DDENUMSURFACES_NOMATCH);
3362
3364
3365 /* Use the safe enumeration, as the callback may destroy surfaces. */
3367 {
3368 if (!surface->iface_count)
3369 {
3370 WARN("Not enumerating surface %p because it doesn't have any references.\n", surface);
3371 continue;
3372 }
3373
3375 || nomatch != ddraw_match_surface_desc(surface_desc, &surface->surface_desc))
3376 {
3377 DDSURFACEDESC2 desc = surface->surface_desc;
3378
3379 TRACE("Enumerating surface %p.\n", surface);
3380 IDirectDrawSurface7_AddRef(&surface->IDirectDrawSurface7_iface);
3382 break;
3383 }
3384 }
3385
3387 }
3388 else
3389 {
3390 return DDERR_INVALIDPARAMS;
3391 }
3392
3393 return hr;
3394}
HRESULT hr_ddraw_from_wined3d(HRESULT hr)
Definition: utils.c:1183
static BOOL ddraw_match_surface_desc(const DDSURFACEDESC2 *requested, const DDSURFACEDESC2 *provided)
Definition: ddraw.c:3147
static HRESULT WINAPI ddraw7_CreateSurface(IDirectDraw7 *iface, DDSURFACEDESC2 *surface_desc, IDirectDrawSurface7 **surface, IUnknown *outer_unknown)
Definition: ddraw.c:2850
static HRESULT CALLBACK enum_surface_mode_callback(DDSURFACEDESC2 *surface_desc, void *context)
Definition: ddraw.c:3259
GLenum const GLfloat * params
Definition: glext.h:5645
const char cursor[]
Definition: icontest.c:13
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
#define DDENUMSURFACES_CANBECREATED
Definition: ddraw.h:526
DDPIXELFORMAT ddpfPixelFormat
Definition: ddraw.h:0
#define DDENUMSURFACES_ALL
Definition: ddraw.h:523
#define DDENUMSURFACES_NOMATCH
Definition: ddraw.h:525
#define DDENUMSURFACES_MATCH
Definition: ddraw.h:524
#define DDENUMSURFACES_DOESEXIST
Definition: ddraw.h:527
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
Definition: list.h:242
struct list surface_list_entry
struct list surface_list
IDirectDraw7 * ddraw
Definition: ddraw.c:3253

Referenced by ddraw1_EnumSurfaces(), ddraw2_EnumSurfaces(), and ddraw4_EnumSurfaces().

◆ ddraw7_EvaluateMode()

static HRESULT WINAPI ddraw7_EvaluateMode ( IDirectDraw7 *  iface,
DWORD  Flags,
DWORD *  Timeout 
)
static

Definition at line 2625 of file ddraw.c.

2626{
2627 FIXME("iface %p, flags %#lx, timeout %p stub!\n", iface, Flags, Timeout);
2628
2629 /* When implementing this, implement it in WineD3D */
2630
2631 return DD_OK;
2632}
static ULONG Timeout
Definition: ping.c:61

◆ ddraw7_FlipToGDISurface()

static HRESULT WINAPI ddraw7_FlipToGDISurface ( IDirectDraw7 *  iface)
static

Definition at line 2112 of file ddraw.c.

2113{
2114 struct ddraw *ddraw = impl_from_IDirectDraw7(iface);
2116 struct ddraw_surface *gdi_impl;
2117 HRESULT hr;
2118
2119 TRACE("iface %p.\n", iface);
2120
2122
2123 if (FAILED(hr = IDirectDraw7_GetGDISurface(iface, &gdi_surface)))
2124 {
2125 WARN("Failed to retrieve GDI surface, hr %#lx.\n", hr);
2127 return hr;
2128 }
2129
2130 gdi_impl = impl_from_IDirectDrawSurface7(gdi_surface);
2132 hr = DD_OK;
2133 else
2134 hr = IDirectDrawSurface7_Flip(&ddraw->primary->IDirectDrawSurface7_iface, gdi_surface, DDFLIP_WAIT);
2135 IDirectDrawSurface7_Release(gdi_surface);
2136
2138
2139 return hr;
2140}
#define DDFLIP_WAIT
Definition: ddraw.h:585
struct wined3d_texture * gdi_surface
struct ddraw_surface * primary

Referenced by ddraw1_FlipToGDISurface(), ddraw2_FlipToGDISurface(), and ddraw4_FlipToGDISurface().

◆ ddraw7_GetAvailableVidMem()

static HRESULT WINAPI ddraw7_GetAvailableVidMem ( IDirectDraw7 *  iface,
DDSCAPS2 *  caps,
DWORD *  total,
DWORD *  free 
)
static

Definition at line 1951 of file ddraw.c.

1953{
1954 unsigned int framebuffer_size, total_vidmem, free_vidmem;
1955 struct ddraw *ddraw = impl_from_IDirectDraw7(iface);
1957 HRESULT hr = DD_OK;
1958
1959 TRACE("iface %p, caps %p, total %p, free %p.\n", iface, caps, total, free);
1960
1961 if (!total && !free)
1962 return DDERR_INVALIDPARAMS;
1963
1964 if (TRACE_ON(ddraw))
1965 {
1966 TRACE("Asked for memory with description: ");
1967 DDRAW_dump_DDSCAPS2(caps);
1968 }
1970
1971 /* Todo: System memory vs local video memory vs non-local video memory
1972 * The MSDN also mentions differences between texture memory and other
1973 * resources, but that's not important
1974 */
1975
1976 /* Some applications (e.g. 3DMark 2000) assume that the reported amount of
1977 * video memory doesn't include the memory used by the default framebuffer.
1978 */
1980 {
1981 WARN("Failed to get display mode, hr %#lx.\n", hr);
1983 return hr;
1984 }
1986 mode.format_id, mode.width);
1987 framebuffer_size *= mode.height;
1988
1989 if (free)
1990 {
1992 *free = framebuffer_size > free_vidmem ? 0 : free_vidmem - framebuffer_size;
1993 TRACE("Free video memory %#lx.\n", *free);
1994 }
1995
1996 if (total)
1997 {
1998 struct wined3d_adapter_identifier desc = {0};
1999
2001 total_vidmem = min(UINT_MAX, desc.video_memory);
2002 *total = framebuffer_size > total_vidmem ? 0 : total_vidmem - framebuffer_size;
2003 TRACE("Total video memory %#lx.\n", *total);
2004 }
2005
2007
2008 return hr;
2009}
void DDRAW_dump_DDSCAPS2(const DDSCAPS2 *in)
Definition: utils.c:710
UINT CDECL wined3d_device_get_available_texture_mem(const struct wined3d_device *device)
Definition: device.c:1754
#define UINT_MAX
Definition: limits.h:27
#define min(a, b)
Definition: monoChain.cc:55
HRESULT CDECL wined3d_adapter_get_identifier(const struct wined3d_adapter *adapter, uint32_t flags, struct wined3d_adapter_identifier *identifier)
Definition: directx.c:1785
unsigned int CDECL wined3d_calculate_format_pitch(const struct wined3d_adapter *adapter, enum wined3d_format_id format_id, unsigned int width)
Definition: directx.c:2197

Referenced by ddraw2_GetAvailableVidMem(), and ddraw4_GetAvailableVidMem().

◆ ddraw7_GetCaps()

static HRESULT WINAPI ddraw7_GetCaps ( IDirectDraw7 *  iface,
DDCAPS *  DriverCaps,
DDCAPS *  HELCaps 
)
static

Definition at line 1501 of file ddraw.c.

1502{
1503 struct ddraw *ddraw = impl_from_IDirectDraw7(iface);
1504 DDSCAPS2 ddscaps = {0, 0, 0, {0}};
1505 struct wined3d_caps winecaps;
1506 DDCAPS caps;
1507 HRESULT hr;
1508
1509 TRACE("iface %p, driver_caps %p, hel_caps %p.\n", iface, DriverCaps, HELCaps);
1510
1511 /* One structure must be != NULL */
1512 if (!DriverCaps && !HELCaps)
1513 {
1514 WARN("Invalid parameters.\n");
1515 return DDERR_INVALIDPARAMS;
1516 }
1517
1518 memset(&caps, 0, sizeof(caps));
1519 memset(&winecaps, 0, sizeof(winecaps));
1520 caps.dwSize = sizeof(caps);
1521
1524 if (FAILED(hr))
1525 {
1526 WARN("Failed to get device caps, %#lx.\n", hr);
1528 return hr;
1529 }
1530
1531 hr = IDirectDraw7_GetAvailableVidMem(iface, &ddscaps, &caps.dwVidMemTotal, &caps.dwVidMemFree);
1532 if (FAILED(hr))
1533 {
1534 WARN("IDirectDraw7::GetAvailableVidMem failed\n");
1536 return hr;
1537 }
1538
1539 hr = IDirectDraw7_GetFourCCCodes(iface, &caps.dwNumFourCCCodes, NULL);
1541 if (FAILED(hr))
1542 {
1543 WARN("IDirectDraw7::GetFourCCCodes failed\n");
1544 return hr;
1545 }
1546
1547 caps.dwCaps = winecaps.ddraw_caps.caps;
1548 caps.dwCaps2 = winecaps.ddraw_caps.caps2;
1549 caps.dwCKeyCaps = winecaps.ddraw_caps.color_key_caps;
1550 caps.dwFXCaps = winecaps.ddraw_caps.fx_caps;
1551 caps.dwPalCaps = DDPCAPS_8BIT | DDPCAPS_PRIMARYSURFACE;
1552 caps.ddsCaps.dwCaps = winecaps.ddraw_caps.dds_caps;
1553 caps.dwSVBCaps = winecaps.ddraw_caps.svb_caps;
1554 caps.dwSVBCKeyCaps = winecaps.ddraw_caps.svb_color_key_caps;
1555 caps.dwSVBFXCaps = winecaps.ddraw_caps.svb_fx_caps;
1556 caps.dwVSBCaps = winecaps.ddraw_caps.vsb_caps;
1557 caps.dwVSBCKeyCaps = winecaps.ddraw_caps.vsb_color_key_caps;
1558 caps.dwVSBFXCaps = winecaps.ddraw_caps.vsb_fx_caps;
1559 caps.dwSSBCaps = winecaps.ddraw_caps.ssb_caps;
1560 caps.dwSSBCKeyCaps = winecaps.ddraw_caps.ssb_color_key_caps;
1561 caps.dwSSBFXCaps = winecaps.ddraw_caps.ssb_fx_caps;
1562
1563 caps.dwCaps |= DDCAPS_ALIGNSTRIDE;
1564 caps.dwAlignStrideAlign = DDRAW_STRIDE_ALIGNMENT;
1565
1566 caps.ddsOldCaps.dwCaps = caps.ddsCaps.dwCaps;
1567
1568 if(DriverCaps)
1569 {
1570 DD_STRUCT_COPY_BYSIZE(DriverCaps, &caps);
1571 if (TRACE_ON(ddraw))
1572 {
1573 TRACE("Driver Caps :\n");
1574 DDRAW_dump_DDCAPS(DriverCaps);
1575 }
1576
1577 }
1578 if(HELCaps)
1579 {
1580 DD_STRUCT_COPY_BYSIZE(HELCaps, &caps);
1581 if (TRACE_ON(ddraw))
1582 {
1583 TRACE("HEL Caps :\n");
1584 DDRAW_dump_DDCAPS(HELCaps);
1585 }
1586 }
1587
1588 return DD_OK;
1589}
#define DDRAW_STRIDE_ALIGNMENT
Definition: ddraw_private.h:61
#define DD_STRUCT_COPY_BYSIZE(to, from)
void DDRAW_dump_DDCAPS(const DDCAPS *lpcaps)
Definition: utils.c:982
HRESULT CDECL wined3d_device_get_device_caps(const struct wined3d_device *device, struct wined3d_caps *caps)
Definition: device.c:3679
#define DDPCAPS_PRIMARYSURFACE
Definition: ddraw.h:458
#define DDCAPS_ALIGNSTRIDE
Definition: ddraw.h:336
#define DDPCAPS_8BIT
Definition: ddraw.h:457

Referenced by ddraw1_GetCaps(), ddraw2_GetCaps(), and ddraw4_GetCaps().

◆ ddraw7_GetDeviceIdentifier()

static HRESULT WINAPI ddraw7_GetDeviceIdentifier ( IDirectDraw7 *  iface,
DDDEVICEIDENTIFIER2 *  DDDI,
DWORD  Flags 
)
static

Definition at line 2649 of file ddraw.c.

2651{
2652 struct ddraw *ddraw = impl_from_IDirectDraw7(iface);
2653 struct wined3d_adapter_identifier adapter_id;
2654 HRESULT hr = S_OK;
2655
2656 TRACE("iface %p, device_identifier %p, flags %#lx.\n", iface, DDDI, Flags);
2657
2658 if (!DDDI)
2659 return DDERR_INVALIDPARAMS;
2660
2662 {
2663 /* The DDGDI_GETHOSTIDENTIFIER returns the information about the 2D
2664 * host adapter, if there's a secondary 3D adapter. This doesn't apply
2665 * to any modern hardware, nor is it interesting for Wine, so ignore it.
2666 * Size of DDDEVICEIDENTIFIER2 may be aligned to 8 bytes and thus 4
2667 * bytes too long. So only copy the relevant part of the structure
2668 */
2669
2670 memcpy(DDDI, &deviceidentifier, FIELD_OFFSET(DDDEVICEIDENTIFIER2, dwWHQLLevel) + sizeof(DWORD));
2671 return DD_OK;
2672 }
2673
2674 /* Drakan: Order of the Flame expects accurate D3D device information from ddraw */
2675 adapter_id.driver = DDDI->szDriver;
2676 adapter_id.driver_size = sizeof(DDDI->szDriver);
2677 adapter_id.description = DDDI->szDescription;
2678 adapter_id.description_size = sizeof(DDDI->szDescription);
2682 if (FAILED(hr)) return hr;
2683
2684 DDDI->liDriverVersion = adapter_id.driver_version;
2685 DDDI->dwVendorId = adapter_id.vendor_id;
2686 DDDI->dwDeviceId = adapter_id.device_id;
2687 DDDI->dwSubSysId = adapter_id.subsystem_id;
2688 DDDI->dwRevision = adapter_id.revision;
2689 DDDI->guidDeviceIdentifier = adapter_id.device_identifier;
2690 DDDI->dwWHQLLevel = adapter_id.whql_level;
2691 return DD_OK;
2692}
static const DDDEVICEIDENTIFIER2 deviceidentifier
Definition: ddraw.c:36
#define S_OK
Definition: intsafe.h:52
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define DDGDI_GETHOSTIDENTIFIER
Definition: ddraw.h:204
char szDescription[MAX_DDDEVICEID_STRING]
Definition: ddraw.h:1348
char szDriver[MAX_DDDEVICEID_STRING]
Definition: ddraw.h:1347
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255
#define WINED3DENUM_WHQL_LEVEL
Definition: wined3d.h:872

Referenced by ddraw4_GetDeviceIdentifier().

◆ ddraw7_GetDisplayMode()

static HRESULT WINAPI ddraw7_GetDisplayMode ( IDirectDraw7 *  iface,
DDSURFACEDESC2 *  DDSD 
)
static

Definition at line 1675 of file ddraw.c.

1676{
1677 struct ddraw *ddraw = impl_from_IDirectDraw7(iface);
1679 HRESULT hr;
1680
1681 TRACE("iface %p, surface_desc %p.\n", iface, DDSD);
1682
1683 /* This seems sane */
1684 if (!DDSD || (DDSD->dwSize != sizeof(DDSURFACEDESC) && DDSD->dwSize != sizeof(DDSURFACEDESC2)))
1685 return DDERR_INVALIDPARAMS;
1686
1688
1690 {
1691 ERR("Failed to get display mode, hr %#lx.\n", hr);
1693 return hr;
1694 }
1695
1696 memset(DDSD, 0, DDSD->dwSize);
1697 DDSD->dwSize = sizeof(*DDSD);
1699 DDSD->dwWidth = mode.width;
1700 DDSD->dwHeight = mode.height;
1701 DDSD->dwRefreshRate = mode.refresh_rate;
1702 DDSD->ddpfPixelFormat.dwSize = sizeof(DDSD->ddpfPixelFormat);
1704 DDSD->lPitch = mode.width * DDSD->ddpfPixelFormat.dwRGBBitCount / 8;
1705
1706 if(TRACE_ON(ddraw))
1707 {
1708 TRACE("Returning surface desc :\n");
1710 }
1711
1713
1714 return DD_OK;
1715}

Referenced by ddraw1_GetDisplayMode(), ddraw2_GetDisplayMode(), and ddraw4_GetDisplayMode().

◆ ddraw7_GetFourCCCodes()

static HRESULT WINAPI ddraw7_GetFourCCCodes ( IDirectDraw7 *  iface,
DWORD *  NumCodes,
DWORD *  Codes 
)
static

Definition at line 1767 of file ddraw.c.

1768{
1769 struct ddraw *ddraw = impl_from_IDirectDraw7(iface);
1770 static const enum wined3d_format_id formats[] =
1771 {
1775 };
1777 DWORD count = 0, i, outsize;
1778 HRESULT hr;
1779
1780 TRACE("iface %p, codes_count %p, codes %p.\n", iface, NumCodes, Codes);
1781
1783 {
1784 ERR("Failed to get display mode, hr %#lx.\n", hr);
1785 return hr;
1786 }
1787
1788 outsize = NumCodes && Codes ? *NumCodes : 0;
1789
1790 for (i = 0; i < ARRAY_SIZE(formats); ++i)
1791 {
1793 mode.format_id, 0, 0, WINED3D_RTYPE_TEXTURE_2D, formats[i])))
1794 {
1795 if (count < outsize)
1796 Codes[count] = formats[i];
1797 ++count;
1798 }
1799 }
1800 if(NumCodes) {
1801 TRACE("Returning %lu FourCC codes\n", count);
1802 *NumCodes = count;
1803 }
1804
1805 return DD_OK;
1806}
GLuint GLuint GLsizei count
Definition: gl.h:1545
unsigned char size_t * outsize
Definition: jpeglib.h:983
@ WINED3DFMT_DXT2
Definition: wined3d.h:261
@ WINED3DFMT_NVHS
Definition: wined3d.h:273
@ WINED3DFMT_DXT1
Definition: wined3d.h:260
@ WINED3DFMT_DXT3
Definition: wined3d.h:262
@ WINED3DFMT_DXT4
Definition: wined3d.h:263
@ WINED3DFMT_NVHU
Definition: wined3d.h:272
@ WINED3DFMT_YV12
Definition: wined3d.h:259
@ WINED3DFMT_DXT5
Definition: wined3d.h:264
@ WINED3DFMT_YUY2
Definition: wined3d.h:258
@ WINED3DFMT_UYVY
Definition: wined3d.h:257
@ WINED3DFMT_ATI2N
Definition: wined3d.h:269

Referenced by ddraw1_GetFourCCCodes(), ddraw2_GetFourCCCodes(), and ddraw4_GetFourCCCodes().

◆ ddraw7_GetGDISurface()

static HRESULT WINAPI ddraw7_GetGDISurface ( IDirectDraw7 *  iface,
IDirectDrawSurface7 **  surface 
)
static

Definition at line 2317 of file ddraw.c.

2318{
2319 struct ddraw *ddraw = impl_from_IDirectDraw7(iface);
2321
2322 TRACE("iface %p, surface %p.\n", iface, surface);
2323
2325
2327 {
2328 WARN("GDI surface not available.\n");
2329 *surface = NULL;
2331 return DDERR_NOTFOUND;
2332 }
2334 IDirectDrawSurface7_AddRef(*surface);
2335
2337
2338 return DD_OK;
2339}
void *CDECL wined3d_texture_get_sub_resource_parent(struct wined3d_texture *texture, unsigned int sub_resource_idx)
Definition: texture.c:4033
#define DDERR_NOTFOUND
Definition: ddraw.h:99

Referenced by ddraw1_GetGDISurface(), ddraw2_GetGDISurface(), and ddraw4_GetGDISurface().

◆ ddraw7_GetMonitorFrequency()

static HRESULT WINAPI ddraw7_GetMonitorFrequency ( IDirectDraw7 *  iface,
DWORD *  frequency 
)
static

Definition at line 1835 of file ddraw.c.

1836{
1837 struct ddraw *ddraw = impl_from_IDirectDraw7(iface);
1839 HRESULT hr;
1840
1841 TRACE("iface %p, frequency %p.\n", iface, frequency);
1842
1846 if (FAILED(hr))
1847 {
1848 WARN("Failed to get display mode, hr %#lx.\n", hr);
1849 return hr;
1850 }
1851
1852 *frequency = mode.refresh_rate;
1853
1854 return DD_OK;
1855}

Referenced by ddraw1_GetMonitorFrequency(), ddraw2_GetMonitorFrequency(), and ddraw4_GetMonitorFrequency().

◆ ddraw7_GetScanLine()

static HRESULT WINAPI ddraw7_GetScanLine ( IDirectDraw7 *  iface,
DWORD *  Scanline 
)
static

Definition at line 2233 of file ddraw.c.

2234{
2235 struct ddraw *ddraw = impl_from_IDirectDraw7(iface);
2236 struct wined3d_raster_status raster_status;
2237 HRESULT hr;
2238
2239 TRACE("iface %p, line %p.\n", iface, Scanline);
2240
2244 if (FAILED(hr))
2245 {
2246 WARN("Failed to get raster status, hr %#lx.\n", hr);
2247 return hr;
2248 }
2249
2250 *Scanline = raster_status.scan_line;
2251
2252 if (raster_status.in_vblank)
2254
2255 return DD_OK;
2256}
#define DDERR_VERTICALBLANKINPROGRESS
Definition: ddraw.h:133
HRESULT CDECL wined3d_output_get_raster_status(const struct wined3d_output *output, struct wined3d_raster_status *raster_status)
Definition: directx.c:1814

Referenced by ddraw1_GetScanLine(), ddraw2_GetScanLine(), and ddraw4_GetScanLine().

◆ ddraw7_GetSurfaceFromDC()

static HRESULT WINAPI ddraw7_GetSurfaceFromDC ( IDirectDraw7 *  iface,
HDC  dc,
IDirectDrawSurface7 **  surface 
)
static

Definition at line 2723 of file ddraw.c.

2725{
2726 struct ddraw *ddraw = impl_from_IDirectDraw7(iface);
2727 struct ddraw_surface *surface_impl;
2728
2729 TRACE("iface %p, dc %p, surface %p.\n", iface, dc, surface);
2730
2731 if (!surface)
2732 return E_INVALIDARG;
2733
2734 if (!dc)
2735 goto done;
2736
2739 {
2740 if (surface_impl->dc != dc)
2741 continue;
2742
2743 TRACE("Found surface %p for dc %p.\n", surface_impl, dc);
2744 *surface = &surface_impl->IDirectDrawSurface7_iface;
2745 IDirectDrawSurface7_AddRef(*surface);
2747 return DD_OK;
2748 }
2750
2751done:
2752 TRACE("No surface found for dc %p.\n", dc);
2753 *surface = NULL;
2754 return DDERR_NOTFOUND;
2755}
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
Definition: list.h:236

Referenced by ddraw4_GetSurfaceFromDC().

◆ ddraw7_GetVerticalBlankStatus()

static HRESULT WINAPI ddraw7_GetVerticalBlankStatus ( IDirectDraw7 *  iface,
BOOL *  status 
)
static

Definition at line 1884 of file ddraw.c.

1885{
1886 struct ddraw *ddraw = impl_from_IDirectDraw7(iface);
1887 struct wined3d_raster_status raster_status;
1888 HRESULT hr;
1889
1890 TRACE("iface %p, status %p.\n", iface, status);
1891
1892 if(!status)
1893 return DDERR_INVALIDPARAMS;
1894
1898 if (FAILED(hr))
1899 {
1900 WARN("Failed to get raster status, hr %#lx.\n", hr);
1901 return hr;
1902 }
1903
1904 *status = raster_status.in_vblank;
1905
1906 return DD_OK;
1907}

Referenced by ddraw1_GetVerticalBlankStatus(), ddraw2_GetVerticalBlankStatus(), and ddraw4_GetVerticalBlankStatus().

◆ ddraw7_Initialize()

static HRESULT WINAPI ddraw7_Initialize ( IDirectDraw7 *  iface,
GUID *  guid 
)
static

Definition at line 2047 of file ddraw.c.

2048{
2049 struct ddraw *ddraw = impl_from_IDirectDraw7(iface);
2050
2051 TRACE("iface %p, guid %s.\n", iface, debugstr_guid(guid));
2052
2055
2056 /* FIXME: To properly take the GUID into account we should call
2057 * ddraw_init() here instead of in DDRAW_Create(). */
2058 if (guid)
2059 FIXME("Ignoring guid %s.\n", debugstr_guid(guid));
2060
2062 return DD_OK;
2063}
#define DDRAW_INITIALIZED
Definition: ddraw_private.h:53

Referenced by ddraw1_Initialize(), ddraw2_Initialize(), and ddraw4_Initialize().

◆ ddraw7_QueryInterface()

static HRESULT WINAPI ddraw7_QueryInterface ( IDirectDraw7 *  iface,
REFIID  riid,
void **  out 
)
static

Definition at line 138 of file ddraw.c.

139{
140 struct ddraw *ddraw = impl_from_IDirectDraw7(iface);
141
142 TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out);
143
144 if (!riid)
145 {
146 *out = NULL;
147 return DDERR_INVALIDPARAMS;
148 }
149
150 /* The refcount unit test revealed that an IDirect3D7 interface can only
151 * be queried from a DirectDraw object that was created as an IDirectDraw7
152 * interface. The older interfaces can query any IDirect3D version except
153 * 7, because they are all initially created as IDirectDraw. This isn't
154 * really crucial behavior, and messy to implement with the common
155 * creation function, so it has been left out here. */
156 if (IsEqualGUID(&IID_IDirectDraw7, riid)
158 {
160 TRACE("Returning IDirectDraw7 interface %p.\n", *out);
161 }
162 else if (IsEqualGUID(&IID_IDirectDraw4, riid))
163 {
165 TRACE("Returning IDirectDraw4 interface %p.\n", *out);
166 }
167 else if (IsEqualGUID(&IID_IDirectDraw2, riid))
168 {
170 TRACE("Returning IDirectDraw2 interface %p.\n", *out);
171 }
172 else if (IsEqualGUID(&IID_IDirectDraw, riid))
173 {
175 TRACE("Returning IDirectDraw interface %p.\n", *out);
176 }
177 else if (IsEqualGUID(&IID_IDirect3D7, riid))
178 {
179 ddraw->d3dversion = 7;
181 TRACE("Returning Direct3D7 interface %p.\n", *out);
182 }
183 else if (IsEqualGUID(&IID_IDirect3D3, riid))
184 {
185 ddraw->d3dversion = 3;
187 TRACE("Returning Direct3D3 interface %p.\n", *out);
188 }
189 else if (IsEqualGUID(&IID_IDirect3D2, riid))
190 {
191 ddraw->d3dversion = 2;
193 TRACE("Returning Direct3D2 interface %p.\n", *out);
194 }
195 else if (IsEqualGUID(&IID_IDirect3D, riid))
196 {
197 ddraw->d3dversion = 1;
199 TRACE("Returning Direct3D interface %p.\n", *out);
200 }
201 /* Unknown interface */
202 else
203 {
204 WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid));
205 *out = NULL;
206 return E_NOINTERFACE;
207 }
208
209 IUnknown_AddRef((IUnknown *)*out);
210 return S_OK;
211}
const GUID IID_IUnknown
IDirectDraw2 IDirectDraw2_iface
Definition: ddraw_private.h:85
IDirect3D IDirect3D_iface
Definition: ddraw_private.h:90
IDirectDraw4 IDirectDraw4_iface
Definition: ddraw_private.h:84
IDirect3D2 IDirect3D2_iface
Definition: ddraw_private.h:89
IDirectDraw IDirectDraw_iface
Definition: ddraw_private.h:86
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383
#define E_NOINTERFACE
Definition: winerror.h:3479

Referenced by d3d1_QueryInterface(), d3d2_QueryInterface(), d3d3_QueryInterface(), d3d7_QueryInterface(), ddraw1_QueryInterface(), ddraw2_QueryInterface(), and ddraw4_QueryInterface().

◆ ddraw7_Release()

static ULONG WINAPI ddraw7_Release ( IDirectDraw7 *  iface)
static

Definition at line 460 of file ddraw.c.

461{
462 struct ddraw *This = impl_from_IDirectDraw7(iface);
464
465 TRACE("%p decreasing refcount to %lu.\n", This, ref);
466
467 if (!ref && !InterlockedDecrement(&This->numIfaces))
469
470 return ref;
471}

Referenced by d3d7_Release().

◆ ddraw7_RestoreAllSurfaces()

static HRESULT WINAPI ddraw7_RestoreAllSurfaces ( IDirectDraw7 *  iface)
static

Definition at line 2792 of file ddraw.c.

2793{
2794 TRACE("iface %p.\n", iface);
2795
2796 return IDirectDraw7_EnumSurfaces(iface, DDENUMSURFACES_ALL | DDENUMSURFACES_DOESEXIST,
2798}
static HRESULT CALLBACK restore_callback(IDirectDrawSurface7 *surface, DDSURFACEDESC2 *desc, void *context)
Definition: ddraw.c:2784

Referenced by ddraw4_RestoreAllSurfaces().

◆ ddraw7_RestoreDisplayMode()

static HRESULT WINAPI ddraw7_RestoreDisplayMode ( IDirectDraw7 *  iface)
static

Definition at line 686 of file ddraw.c.

687{
688 struct ddraw *ddraw = impl_from_IDirectDraw7(iface);
690 RECT clip_rect;
691 HRESULT hr;
692
693 TRACE("iface %p.\n", iface);
694
696
698 {
700 return DD_OK;
701 }
702
704 {
707 }
708
710 {
711 ddraw->flags &= ~DDRAW_RESTORE_MODE;
714 {
715 SetRect(&clip_rect, 0, 0, mode.width, mode.height);
716 ClipCursor(&clip_rect);
717 }
718 }
719
721
723
724 return hr;
725}
@ DDRAW_DEVICE_STATE_NOT_RESTORED
Definition: ddraw_private.h:77
@ DDRAW_DEVICE_STATE_OK
Definition: ddraw_private.h:75
#define DDRAW_RESTORE_MODE
Definition: ddraw_private.h:55
static const struct ddraw * exclusive_ddraw
Definition: ddraw.c:32
#define InterlockedCompareExchange
Definition: interlocked.h:119
BOOL WINAPI ClipCursor(_In_opt_ LPCRECT)
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)
#define DDERR_NOEXCLUSIVEMODE
Definition: ddraw.h:95
Definition: dcommon.idl:28
LONG device_state
HRESULT CDECL wined3d_restore_display_modes(struct wined3d *wined3d)
Definition: directx.c:1618

Referenced by ddraw1_RestoreDisplayMode(), ddraw2_RestoreDisplayMode(), ddraw4_RestoreDisplayMode(), and ddraw_set_cooperative_level().

◆ ddraw7_SetCooperativeLevel()

static HRESULT WINAPI ddraw7_SetCooperativeLevel ( IDirectDraw7 *  iface,
HWND  window,
DWORD  flags 
)
static

Definition at line 1030 of file ddraw.c.

1031{
1032 struct ddraw *ddraw = impl_from_IDirectDraw7(iface);
1033
1034 TRACE("iface %p, window %p, flags %#lx.\n", iface, window, flags);
1035
1037}

◆ ddraw7_SetDisplayMode()

static HRESULT WINAPI ddraw7_SetDisplayMode ( IDirectDraw7 *  iface,
DWORD  width,
DWORD  height,
DWORD  bpp,
DWORD  refresh_rate,
DWORD  flags 
)
static

Definition at line 1092 of file ddraw.c.

1094{
1095 struct ddraw *ddraw = impl_from_IDirectDraw7(iface);
1098 RECT clip_rect;
1099 HRESULT hr;
1100
1101 TRACE("iface %p, width %lu, height %lu, bpp %lu, refresh_rate %lu, flags %#lx.\n",
1102 iface, width, height, bpp, refresh_rate, flags);
1103
1104 if (force_refresh_rate != 0)
1105 {
1106 TRACE("ForceRefreshRate overriding passed-in refresh rate (%lu Hz) to %lu Hz\n",
1109 }
1110
1112
1114 {
1116 return DDERR_NOEXCLUSIVEMODE;
1117 }
1118
1119 if (!width || !height)
1120 {
1121 /* It looks like Need for Speed Porsche Unleashed expects DD_OK here. */
1123 return DD_OK;
1124 }
1125
1126 switch (bpp)
1127 {
1128 case 8: format = WINED3DFMT_P8_UINT; break;
1129 case 15: format = WINED3DFMT_B5G5R5X1_UNORM; break;
1130 case 16: format = WINED3DFMT_B5G6R5_UNORM; break;
1131 case 24: format = WINED3DFMT_B8G8R8_UNORM; break;
1132 case 32: format = WINED3DFMT_B8G8R8X8_UNORM; break;
1133 default: format = WINED3DFMT_UNKNOWN; break;
1134 }
1135
1136 mode.width = width;
1137 mode.height = height;
1138 mode.refresh_rate = refresh_rate;
1139 mode.format_id = format;
1140 mode.scanline_ordering = WINED3D_SCANLINE_ORDERING_UNKNOWN;
1141
1142 /* TODO: The possible return values from msdn suggest that the screen mode
1143 * can't be changed if a surface is locked or some drawing is in progress. */
1145 {
1146 if (ddraw->primary)
1147 {
1148 DDSURFACEDESC2 *surface_desc = &ddraw->primary->surface_desc;
1149
1151 surface_desc->dwWidth, surface_desc->dwHeight, mode.format_id, WINED3D_MULTISAMPLE_NONE, 0)))
1152 ERR("Failed to resize buffers, hr %#lx.\n", hr);
1153 else
1154 ddrawformat_from_wined3dformat(&ddraw->primary->surface_desc.ddpfPixelFormat, mode.format_id);
1155 }
1157
1159 {
1160 SetRect(&clip_rect, 0, 0, width, height);
1161 ClipCursor(&clip_rect);
1162 }
1163 }
1164
1166
1168
1169 return hr_ddraw_from_wined3d(hr);
1170}
DWORD force_refresh_rate
Definition: main.c:38
struct wined3d_swapchain * wined3d_swapchain
HRESULT CDECL wined3d_output_set_display_mode(struct wined3d_output *output, const struct wined3d_display_mode *mode)
Definition: directx.c:1693
HRESULT CDECL wined3d_swapchain_resize_buffers(struct wined3d_swapchain *swapchain, unsigned int buffer_count, unsigned int width, unsigned int height, enum wined3d_format_id format_id, enum wined3d_multisample_type multisample_type, unsigned int multisample_quality)
Definition: swapchain.c:1923
@ WINED3D_MULTISAMPLE_NONE
Definition: wined3d.h:573
@ WINED3DFMT_B5G5R5X1_UNORM
Definition: wined3d.h:129
@ WINED3DFMT_UNKNOWN
Definition: wined3d.h:127
@ WINED3DFMT_B8G8R8_UNORM
Definition: wined3d.h:128

Referenced by ddraw1_SetDisplayMode(), ddraw2_SetDisplayMode(), and ddraw4_SetDisplayMode().

◆ ddraw7_StartModeTest()

static HRESULT WINAPI ddraw7_StartModeTest ( IDirectDraw7 *  iface,
SIZE *  Modes,
DWORD  NumModes,
DWORD  Flags 
)
static

Definition at line 2831 of file ddraw.c.

2832{
2833 FIXME("iface %p, modes %p, mode_count %lu, flags %#lx partial stub!\n",
2834 iface, Modes, NumModes, Flags);
2835
2836 /* This looks sane */
2837 if( (!Modes) || (NumModes == 0) ) return DDERR_INVALIDPARAMS;
2838
2839 /* DDSMT_ISTESTREQUIRED asks if a mode test is necessary.
2840 * As it is not, DDERR_TESTFINISHED is returned
2841 * (hopefully that's correct
2842 *
2843 if(Flags & DDSMT_ISTESTREQUIRED) return DDERR_TESTFINISHED;
2844 * well, that value doesn't (yet) exist in the wine headers, so ignore it
2845 */
2846
2847 return DD_OK;
2848}
static const VBE_MODE Modes[VBE_MODE_COUNT]
Definition: vbe.c:189

◆ ddraw7_TestCooperativeLevel()

static HRESULT WINAPI ddraw7_TestCooperativeLevel ( IDirectDraw7 *  iface)
static

Definition at line 2285 of file ddraw.c.

2286{
2287 struct ddraw *ddraw = impl_from_IDirectDraw7(iface);
2288
2289 TRACE("iface %p.\n", iface);
2290
2292}
@ DDRAW_DEVICE_STATE_LOST
Definition: ddraw_private.h:76

Referenced by ddraw4_TestCooperativeLevel().

◆ ddraw7_WaitForVerticalBlank()

static HRESULT WINAPI ddraw7_WaitForVerticalBlank ( IDirectDraw7 *  iface,
DWORD  Flags,
HANDLE  event 
)
static

Definition at line 2186 of file ddraw.c.

2187{
2188 static BOOL hide;
2189
2190 TRACE("iface %p, flags %#lx, event %p.\n", iface, Flags, event);
2191
2192 /* This function is called often, so print the fixme only once */
2193 if(!hide)
2194 {
2195 FIXME("iface %p, flags %#lx, event %p stub!\n", iface, Flags, event);
2196 hide = TRUE;
2197 }
2198
2199 /* MSDN says DDWAITVB_BLOCKBEGINEVENT is not supported */
2201 return DDERR_UNSUPPORTED; /* unchecked */
2202
2203 return DD_OK;
2204}
#define DDWAITVB_BLOCKBEGINEVENT
Definition: ddraw.h:652
#define DDERR_UNSUPPORTED
Definition: ddraw.h:129

Referenced by ddraw1_WaitForVerticalBlank(), ddraw2_WaitForVerticalBlank(), and ddraw4_WaitForVerticalBlank().

◆ ddraw_attach_d3d_device()

static HRESULT ddraw_attach_d3d_device ( struct ddraw *  ddraw,
HWND  window,
DWORD  cooplevel,
struct wined3d_swapchain **  wined3d_swapchain 
)
static

Definition at line 567 of file ddraw.c.

569{
570 struct wined3d_swapchain_desc swapchain_desc;
572 HRESULT hr;
573
574 TRACE("ddraw %p.\n", ddraw);
575
577 {
578 ERR("Failed to get display mode.\n");
579 return hr;
580 }
581
582 memset(&swapchain_desc, 0, sizeof(swapchain_desc));
583 swapchain_desc.output = ddraw->wined3d_output;
584 swapchain_desc.backbuffer_width = mode.width;
585 swapchain_desc.backbuffer_height = mode.height;
586 swapchain_desc.backbuffer_format = mode.format_id;
587 swapchain_desc.backbuffer_bind_flags = 0;
588 swapchain_desc.backbuffer_count = 1;
589 swapchain_desc.swap_effect = WINED3D_SWAP_EFFECT_DISCARD;
590 swapchain_desc.device_window = window;
591 swapchain_desc.windowed = !(cooplevel & DDSCL_FULLSCREEN);
592 swapchain_desc.flags = DDRAW_WINED3D_SWAPCHAIN_FLAGS;
593
594 if ((cooplevel & DDSCL_NOWINDOWCHANGES) || window != GetForegroundWindow())
595 swapchain_desc.flags |= WINED3D_SWAPCHAIN_NO_WINDOW_CHANGES;
596
598 return wined3d_swapchain_create(ddraw->wined3d_device, &swapchain_desc,
600
601 if (!window || window == GetDesktopWindow())
602 {
603 window = CreateWindowExA(0, DDRAW_WINDOW_CLASS_NAME, "Hidden D3D Window",
605 NULL, NULL, NULL, NULL);
606 if (!window)
607 {
608 ERR("Failed to create window, last error %#lx.\n", GetLastError());
609 return E_FAIL;
610 }
611
612 ShowWindow(window, SW_HIDE); /* Just to be sure */
613 WARN("No window for the Direct3DDevice, created hidden window %p.\n", window);
614
615 swapchain_desc.device_window = window;
616 }
617 else
618 {
619 TRACE("Using existing window %p for Direct3D rendering.\n", window);
620 }
622
623 /* Set this NOW, otherwise creating the depth stencil surface will cause a
624 * recursive loop until ram or emulated video memory is full. */
626 if (FAILED(hr = wined3d_swapchain_create(ddraw->wined3d_device, &swapchain_desc,
628 {
629 ddraw->flags &= ~DDRAW_D3D_INITIALIZED;
632 return hr;
633 }
634
635 ddraw->declArraySize = 2;
636 if (!(ddraw->decls = calloc(ddraw->declArraySize, sizeof(*ddraw->decls))))
637 {
638 ERR("Error allocating an array for the converted vertex decls.\n");
639 ddraw->declArraySize = 0;
643 return E_OUTOFMEMORY;
644 }
645
646 TRACE("Successfully initialized 3D.\n");
647
648 return DD_OK;
649}
#define DDRAW_NO3D
Definition: ddraw_private.h:56
#define DDRAW_WINDOW_CLASS_NAME
#define DDRAW_WINED3D_SWAPCHAIN_FLAGS
Definition: ddraw_private.h:67
#define E_FAIL
Definition: ddrawi.h:102
const struct wined3d_parent_ops ddraw_null_wined3d_parent_ops
Definition: ddraw.c:82
if(dx< 0)
Definition: linetemp.h:194
#define WS_DISABLED
Definition: pedump.c:621
#define SW_HIDE
Definition: winuser.h:779
HWND WINAPI CreateWindowExA(_In_ DWORD dwExStyle, _In_opt_ LPCSTR lpClassName, _In_opt_ LPCSTR lpWindowName, _In_ DWORD dwStyle, _In_ int X, _In_ int Y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam)
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
#define SM_CYSCREEN
Definition: winuser.h:971
HWND WINAPI GetForegroundWindow(void)
Definition: ntwrapper.h:392
HWND WINAPI GetDesktopWindow(void)
Definition: window.c:628
#define SM_CXSCREEN
Definition: winuser.h:970
BOOL WINAPI DestroyWindow(_In_ HWND)
int WINAPI GetSystemMetrics(_In_ int)
#define DDSCL_NOWINDOWCHANGES
Definition: ddraw.h:536
#define DDSCL_FULLSCREEN
Definition: ddraw.h:534
struct wined3d_swapchain_state_parent state_parent
HWND d3d_window
struct FvfToDecl * decls
UINT declArraySize
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
ULONG CDECL wined3d_swapchain_decref(struct wined3d_swapchain *swapchain)
Definition: swapchain.c:144
HRESULT CDECL wined3d_swapchain_create(struct wined3d_device *device, const struct wined3d_swapchain_desc *desc, struct wined3d_swapchain_state_parent *state_parent, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_swapchain **swapchain)
Definition: swapchain.c:1732
@ WINED3D_SWAP_EFFECT_DISCARD
Definition: wined3d.h:534
#define WINED3D_SWAPCHAIN_NO_WINDOW_CHANGES
Definition: wined3d.h:903

Referenced by ddraw_create_swapchain().

◆ ddraw_create_swapchain()

static HRESULT ddraw_create_swapchain ( struct ddraw *  ddraw,
HWND  window,
DWORD  cooplevel 
)
static

Definition at line 651 of file ddraw.c.

652{
653 HRESULT hr;
654
656 {
657 ERR("Swapchain already created.\n");
658 return E_FAIL;
659 }
660
662 {
663 ERR("Failed to create swapchain, hr %#lx.\n", hr);
664 return hr;
665 }
667
669
670 if (ddraw->primary && ddraw->primary->palette)
672
673 return DD_OK;
674}
static void ddraw_set_swapchain_window(struct ddraw *ddraw, HWND window)
static HRESULT ddraw_attach_d3d_device(struct ddraw *ddraw, HWND window, DWORD cooplevel, struct wined3d_swapchain **wined3d_swapchain)
Definition: ddraw.c:567
void CDECL wined3d_swapchain_set_palette(struct wined3d_swapchain *swapchain, struct wined3d_palette *palette)
Definition: swapchain.c:372
ULONG CDECL wined3d_swapchain_incref(struct wined3d_swapchain *swapchain)
Definition: swapchain.c:135

Referenced by ddraw_set_cooperative_level().

◆ ddraw_d3dcaps1_from_7()

void ddraw_d3dcaps1_from_7 ( D3DDEVICEDESC *  caps1,
D3DDEVICEDESC7 *  caps7 
)

Definition at line 1203 of file ddraw.c.

1204{
1205 memset(caps1, 0, sizeof(*caps1));
1206 caps1->dwSize = sizeof(*caps1);
1207 caps1->dwFlags = D3DDD_COLORMODEL
1218 caps1->dcmColorModel = D3DCOLOR_RGB;
1219 caps1->dwDevCaps = caps7->dwDevCaps;
1220 caps1->dtcTransformCaps.dwSize = sizeof(caps1->dtcTransformCaps);
1222 caps1->bClipping = TRUE;
1223 caps1->dlcLightingCaps.dwSize = sizeof(caps1->dlcLightingCaps);
1230 caps1->dpcLineCaps = caps7->dpcLineCaps;
1231 caps1->dpcTriCaps = caps7->dpcTriCaps;
1234
1235 /* This value is zero on all Windows drivers we have seen so far. */
1236 caps1->dwMaxBufferSize = 0;
1237
1238 /* AMD GPUs on Windows XP and newer report 1024 for HAL devices.
1239 * Nvidia GPUs report 65534. On Windows 9x we have seen 2048 on
1240 * AMD cards and 32768 on Nvidia. The API defined limit is 65536
1241 * because ddraw only supports 16 bit indices.
1242 *
1243 * Some games, for example Prince of Persia 3D (bug 44863), create a
1244 * vertex buffer to hold as many vertices as we report here. The
1245 * game requests a video memory buffer, maps it, writes a handful
1246 * of vertices and draws. Because IDirect3DVertexBuffer::Lock does
1247 * not allow passing a range, and prior to d3d7 doesn't support
1248 * NOOVERWRITE/DISCARD, the upload becomes slow if the buffer is too
1249 * large. So we don't want to report a value that's too high here.
1250 *
1251 * Why 2048? Windows 9x was the contemporaneous system when d3d 1-4
1252 * titles were written.
1253 *
1254 * Regardless of this value, we put ddraw4 vertex buffers into
1255 * system memory because games are using them poorly. This mitigates
1256 * negative effects of a large vertex count.
1257 *
1258 * Windows doesn't enforce this limit. A larger vertex buffer can
1259 * be created and used in draws. More vertices than dwMaxVertexCount
1260 * can be rendered in one draw call. SetExecuteData with a vertex
1261 * count exceeding dwMaxVertexCount succeeds too. */
1262 caps1->dwMaxVertexCount = 2048;
1263
1264 caps1->dwMinTextureWidth = caps7->dwMinTextureWidth;
1265 caps1->dwMinTextureHeight = caps7->dwMinTextureHeight;
1266 caps1->dwMaxTextureWidth = caps7->dwMaxTextureWidth;
1267 caps1->dwMaxTextureHeight = caps7->dwMaxTextureHeight;
1268 caps1->dwMinStippleWidth = 1;
1269 caps1->dwMinStippleHeight = 1;
1270 caps1->dwMaxStippleWidth = 32;
1271 caps1->dwMaxStippleHeight = 32;
1272 caps1->dwMaxTextureRepeat = caps7->dwMaxTextureRepeat;
1274 caps1->dwMaxAnisotropy = caps7->dwMaxAnisotropy;
1275 caps1->dvGuardBandLeft = caps7->dvGuardBandLeft;
1276 caps1->dvGuardBandTop = caps7->dvGuardBandTop;
1277 caps1->dvGuardBandRight = caps7->dvGuardBandRight;
1278 caps1->dvGuardBandBottom = caps7->dvGuardBandBottom;
1279 caps1->dvExtentsAdjust = caps7->dvExtentsAdjust;
1280 caps1->dwStencilCaps = caps7->dwStencilCaps;
1281 caps1->dwFVFCaps = caps7->dwFVFCaps;
1282 caps1->dwTextureOpCaps = caps7->dwTextureOpCaps;
1285}
#define D3DCOLOR_RGB
Definition: d3dtypes.h:627
#define D3DDD_LIGHTINGCAPS
Definition: d3dcaps.h:108
#define D3DDD_MAXBUFFERSIZE
Definition: d3dcaps.h:114
#define D3DDD_LINECAPS
Definition: d3dcaps.h:110
#define D3DDD_DEVICEZBUFFERBITDEPTH
Definition: d3dcaps.h:113
#define D3DLIGHTCAPS_DIRECTIONAL
Definition: d3dcaps.h:20
#define D3DDD_COLORMODEL
Definition: d3dcaps.h:105
#define D3DLIGHTCAPS_POINT
Definition: d3dcaps.h:18
#define D3DDD_DEVICERENDERBITDEPTH
Definition: d3dcaps.h:112
#define D3DLIGHTCAPS_SPOT
Definition: d3dcaps.h:19
#define D3DDD_TRANSFORMCAPS
Definition: d3dcaps.h:107
#define D3DDD_TRICAPS
Definition: d3dcaps.h:111
#define D3DDD_DEVCAPS
Definition: d3dcaps.h:106
#define D3DDD_BCLIPPING
Definition: d3dcaps.h:109
#define D3DTRANSFORMCAPS_CLIP
Definition: d3dcaps.h:15
#define D3DDD_MAXVERTEXCOUNT
Definition: d3dcaps.h:115
#define D3DLIGHTINGMODEL_RGB
Definition: d3dcaps.h:16
#define D3DLIGHTCAPS_PARALLELPOINT
Definition: dump.c:16
D3DPRIMCAPS dpcTriCaps
Definition: d3dcaps.h:360
WORD wMaxSimultaneousTextures
Definition: d3dcaps.h:379
DWORD dwMaxTextureAspectRatio
Definition: d3dcaps.h:368
DWORD dwMaxTextureHeight
Definition: d3dcaps.h:366
DWORD dwFVFCaps
Definition: d3dcaps.h:376
D3DPRIMCAPS dpcLineCaps
Definition: d3dcaps.h:359
DWORD dwMinTextureHeight
Definition: d3dcaps.h:364
DWORD dwMaxAnisotropy
Definition: d3dcaps.h:369
DWORD dwDeviceRenderBitDepth
Definition: d3dcaps.h:361
DWORD dwStencilCaps
Definition: d3dcaps.h:375
DWORD dwMaxActiveLights
Definition: d3dcaps.h:380
DWORD dwMaxTextureRepeat
Definition: d3dcaps.h:367
DWORD dwDeviceZBufferBitDepth
Definition: d3dcaps.h:362
DWORD dwTextureOpCaps
Definition: d3dcaps.h:377
D3DVALUE dvGuardBandRight
Definition: d3dcaps.h:372
D3DVALUE dvGuardBandBottom
Definition: d3dcaps.h:373
WORD wMaxTextureBlendStages
Definition: d3dcaps.h:378
D3DVALUE dvGuardBandTop
Definition: d3dcaps.h:371
DWORD dwMinTextureWidth
Definition: d3dcaps.h:363
D3DVALUE dvExtentsAdjust
Definition: d3dcaps.h:374
DWORD dwMaxTextureWidth
Definition: d3dcaps.h:365
D3DVALUE dvGuardBandLeft
Definition: d3dcaps.h:370
DWORD dwMaxStippleWidth
Definition: d3dcaps.h:334
D3DVALUE dvGuardBandTop
Definition: d3dcaps.h:343
DWORD dwDeviceZBufferBitDepth
Definition: d3dcaps.h:328
DWORD dwSize
Definition: d3dcaps.h:318
DWORD dwMaxTextureWidth
Definition: d3dcaps.h:333
D3DTRANSFORMCAPS dtcTransformCaps
Definition: d3dcaps.h:322
DWORD dwStencilCaps
Definition: d3dcaps.h:347
BOOL bClipping
Definition: d3dcaps.h:323
D3DVALUE dvGuardBandRight
Definition: d3dcaps.h:344
DWORD dwMaxTextureAspectRatio
Definition: d3dcaps.h:340
DWORD dwMaxTextureRepeat
Definition: d3dcaps.h:339
DWORD dwDeviceRenderBitDepth
Definition: d3dcaps.h:327
DWORD dwMaxBufferSize
Definition: d3dcaps.h:329
DWORD dwMaxVertexCount
Definition: d3dcaps.h:330
DWORD dwMaxStippleHeight
Definition: d3dcaps.h:335
DWORD dwMaxTextureHeight
Definition: d3dcaps.h:333
WORD wMaxTextureBlendStages
Definition: d3dcaps.h:350
D3DVALUE dvExtentsAdjust
Definition: d3dcaps.h:346
DWORD dwMaxAnisotropy
Definition: d3dcaps.h:341
DWORD dwMinStippleWidth
Definition: d3dcaps.h:334
DWORD dwMinStippleHeight
Definition: d3dcaps.h:335
DWORD dwTextureOpCaps
Definition: d3dcaps.h:349
DWORD dwMinTextureWidth
Definition: d3dcaps.h:332
D3DVALUE dvGuardBandBottom
Definition: d3dcaps.h:345
D3DVALUE dvGuardBandLeft
Definition: d3dcaps.h:342
DWORD dwMinTextureHeight
Definition: d3dcaps.h:332
WORD wMaxSimultaneousTextures
Definition: d3dcaps.h:351
DWORD dwFVFCaps
Definition: d3dcaps.h:348
D3DLIGHTINGCAPS dlcLightingCaps
Definition: d3dcaps.h:324
DWORD dwNumLights
Definition: d3dcaps.h:259
DWORD dwLightingModel
Definition: d3dcaps.h:258

Referenced by d3d3_EnumDevices(), d3d_device3_GetCaps(), and ddraw_find_device().

◆ ddraw_destroy()

static void ddraw_destroy ( struct ddraw *  This)
static

Definition at line 421 of file ddraw.c.

422{
423 struct d3d_device *device;
424 IDirectDraw7_SetCooperativeLevel(&This->IDirectDraw7_iface, NULL, DDSCL_NORMAL);
425 IDirectDraw7_RestoreDisplayMode(&This->IDirectDraw7_iface);
426
427 /* Destroy the device window if we created one */
428 if(This->devicewindow != 0)
429 {
430 TRACE(" (%p) Destroying the device window %p\n", This, This->devicewindow);
431 DestroyWindow(This->devicewindow);
432 This->devicewindow = 0;
433 }
434
436 list_remove(&This->ddraw_list_entry);
438
439 if (This->wined3d_swapchain)
441 wined3d_device_decref(This->wined3d_device);
442 wined3d_decref(This->wined3d);
443
444 LIST_FOR_EACH_ENTRY(device, &This->d3ddevice_list, struct d3d_device, ddraw_entry)
445 {
446 device->ddraw = NULL;
447 }
448
449 /* Now free the object */
450 free(This);
451}
static void list_remove(struct list_entry *entry)
Definition: list.h:90
static void ddraw_destroy_swapchain(struct ddraw *ddraw)
Definition: ddraw.c:378
ULONG CDECL wined3d_device_decref(struct wined3d_device *device)
Definition: device.c:251
struct list ddraw_entry
ULONG CDECL wined3d_decref(struct wined3d *wined3d)
Definition: directx.c:198

Referenced by ddraw1_Release(), ddraw2_Release(), ddraw4_Release(), and ddraw7_Release().

◆ ddraw_destroy_swapchain()

static void ddraw_destroy_swapchain ( struct ddraw *  ddraw)
static

Definition at line 378 of file ddraw.c.

379{
380 unsigned int i;
381
382 TRACE("Destroying the swapchain.\n");
383
385
386 for (i = 0; i < ddraw->numConvertedDecls; ++i)
387 {
389 }
390 free(ddraw->decls);
392
395
396 /* Free the d3d window if one was created. */
398 {
399 TRACE("Destroying the hidden render window %p.\n", ddraw->d3d_window);
401 ddraw->d3d_window = 0;
402 }
403
404 ddraw->flags &= ~DDRAW_D3D_INITIALIZED;
405
407
408 TRACE("Swapchain destroyed.\n");
409}
HWND dest_window
UINT numConvertedDecls
ULONG CDECL wined3d_vertex_declaration_decref(struct wined3d_vertex_declaration *declaration)

Referenced by ddraw_destroy(), and ddraw_set_cooperative_level().

◆ ddraw_find_decl()

struct wined3d_vertex_declaration * ddraw_find_decl ( struct ddraw *  This,
DWORD  fvf 
)

Definition at line 4917 of file ddraw.c.

4918{
4919 struct wined3d_vertex_declaration *pDecl = NULL;
4920 HRESULT hr;
4921 int p, low, high; /* deliberately signed */
4922 struct FvfToDecl *convertedDecls = This->decls;
4923
4924 TRACE("Searching for declaration for fvf %08lx... ", fvf);
4925
4926 low = 0;
4927 high = This->numConvertedDecls - 1;
4928 while(low <= high) {
4929 p = (low + high) >> 1;
4930 TRACE("%d ", p);
4931 if(convertedDecls[p].fvf == fvf) {
4932 TRACE("found %p\n", convertedDecls[p].decl);
4933 return convertedDecls[p].decl;
4934 } else if(convertedDecls[p].fvf < fvf) {
4935 low = p + 1;
4936 } else {
4937 high = p - 1;
4938 }
4939 }
4940 TRACE("not found. Creating and inserting at position %d.\n", low);
4941
4944 if (hr != S_OK) return NULL;
4945
4946 if (This->declArraySize == This->numConvertedDecls)
4947 {
4948 unsigned int grow = max(This->declArraySize / 2, 8);
4949
4950 if (!(convertedDecls = realloc(convertedDecls,
4951 (This->numConvertedDecls + grow) * sizeof(*convertedDecls))))
4952 {
4954 return NULL;
4955 }
4956 This->decls = convertedDecls;
4957 This->declArraySize += grow;
4958 }
4959
4960 memmove(convertedDecls + low + 1, convertedDecls + low, sizeof(convertedDecls[0]) * (This->numConvertedDecls - low));
4961 convertedDecls[low].decl = pDecl;
4962 convertedDecls[low].fvf = fvf;
4963 This->numConvertedDecls++;
4964
4965 TRACE("Returning %p. %d decls in array\n", pDecl, This->numConvertedDecls);
4966 return pDecl;
4967}
GLfloat GLfloat p
Definition: glext.h:8902
#define memmove(s1, s2, n)
Definition: mkisofs.h:881
struct wined3d_vertex_declaration * decl
Definition: ddraw_private.h:50
DWORD fvf
Definition: d3d8_private.h:96
#define max(a, b)
Definition: svc.c:63
HRESULT CDECL wined3d_vertex_declaration_create_from_fvf(struct wined3d_device *device, uint32_t fvf, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_vertex_declaration **declaration)

Referenced by d3d_device7_DrawIndexedPrimitive(), d3d_device7_DrawIndexedPrimitiveStrided(), d3d_device7_DrawPrimitive(), d3d_device7_DrawPrimitiveStrided(), and d3d_vertex_buffer_create().

◆ ddraw_find_device()

static HRESULT ddraw_find_device ( struct ddraw *  ddraw,
const D3DFINDDEVICESEARCH *  fds,
D3DFINDDEVICERESULT *  fdr,
unsigned int  guid_count,
const GUID *const *  guids,
DWORD  device_desc_size 
)
static

Definition at line 4188 of file ddraw.c.

4190{
4191 struct ddraw_find_device_result_v1
4192 {
4193 DWORD size;
4194 GUID guid;
4195 D3DDEVICEDESC_V1 hw_desc;
4196 D3DDEVICEDESC_V1 sw_desc;
4197 } *fdr1;
4198 struct ddraw_find_device_result_v2
4199 {
4200 DWORD size;
4201 GUID guid;
4202 D3DDEVICEDESC_V2 hw_desc;
4203 D3DDEVICEDESC_V2 sw_desc;
4204 } *fdr2;
4205 D3DDEVICEDESC7 desc7;
4206 D3DDEVICEDESC desc1;
4207 unsigned int i;
4208 HRESULT hr;
4209
4210 TRACE("ddraw %p, fds %p, fdr %p, guid_count %u, guids %p, device_desc_size %lu.\n",
4211 ddraw, fds, fdr, guid_count, guids, device_desc_size);
4212
4213 if (!fds || !fdr)
4214 return DDERR_INVALIDPARAMS;
4215
4216 if (fds->dwSize != sizeof(*fds))
4217 {
4218 WARN("Got invalid search structure size %lu.\n", fds->dwSize);
4219 return DDERR_INVALIDPARAMS;
4220 }
4221
4222 if (fdr->dwSize != sizeof(*fdr) && fdr->dwSize != sizeof(*fdr2) && fdr->dwSize != sizeof(*fdr1))
4223 {
4224 WARN("Got invalid result structure size %lu.\n", fdr->dwSize);
4225 return DDERR_INVALIDPARAMS;
4226 }
4227
4228 if (fds->dwFlags & D3DFDS_COLORMODEL)
4229 WARN("Ignoring colour model %#lx.\n", fds->dcmColorModel);
4230
4231 if (fds->dwFlags & D3DFDS_GUID)
4232 {
4233 BOOL found = FALSE;
4234
4235 TRACE("Trying to match GUID %s.\n", debugstr_guid(&fds->guid));
4236
4237 if ((ddraw->flags & DDRAW_NO3D) && IsEqualGUID(&fds->guid, &IID_IDirect3DHALDevice))
4238 {
4239 WARN("HAL device not available without 3D support.\n");
4240 return DDERR_NOTFOUND;
4241 }
4242
4243 for (i = 0; i < guid_count; ++i)
4244 {
4245 if (IsEqualGUID(guids[i], &fds->guid))
4246 {
4247 found = TRUE;
4248 break;
4249 }
4250 }
4251
4252 if (!found)
4253 {
4254 WARN("Failed to match GUID %s.\n", debugstr_guid(&fds->guid));
4255 return DDERR_NOTFOUND;
4256 }
4257 }
4258
4259 /* Get the caps */
4260 if (FAILED(hr = ddraw_get_d3dcaps(ddraw, &desc7)))
4261 return hr;
4262
4263 /* Now return our own GUID */
4264 ddraw_d3dcaps1_from_7(&desc1, &desc7);
4266
4267 /* Note that "device_desc_size" doesn't necessarily have any relation to
4268 * the actual structure size. However, this matches the behaviour of
4269 * Windows since at least Windows 2000. */
4270 if (fdr->dwSize == sizeof(*fdr1))
4271 {
4272 fdr1 = (struct ddraw_find_device_result_v1 *)fdr;
4273 memcpy(&fdr1->hw_desc, &desc1, sizeof(fdr1->hw_desc));
4274 fdr1->hw_desc.dwSize = device_desc_size;
4275 memcpy(&fdr1->sw_desc, &desc1, sizeof(fdr1->sw_desc));
4276 fdr1->sw_desc.dwSize = device_desc_size;
4277 }
4278 else if (fdr->dwSize == sizeof(*fdr2))
4279 {
4280 fdr2 = (struct ddraw_find_device_result_v2 *)fdr;
4281 memcpy(&fdr2->hw_desc, &desc1, sizeof(fdr2->hw_desc));
4282 fdr2->hw_desc.dwSize = device_desc_size;
4283 memcpy(&fdr2->sw_desc, &desc1, sizeof(fdr2->sw_desc));
4284 fdr2->sw_desc.dwSize = device_desc_size;
4285 }
4286 else
4287 {
4288 fdr->ddHwDesc = desc1;
4289 fdr->ddHwDesc.dwSize = device_desc_size;
4290 fdr->ddSwDesc = desc1;
4291 fdr->ddSwDesc.dwSize = device_desc_size;
4292 }
4293
4294 TRACE("Returning Wine's wined3d device with (undumped) capabilities.\n");
4295
4296 return D3D_OK;
4297}
UINT guid_count
Definition: locale.c:415
#define D3DFDS_COLORMODEL
Definition: d3dcaps.h:126
#define D3DFDS_GUID
Definition: d3dcaps.h:127
GLsizeiptr size
Definition: glext.h:5919
D3DDEVICEDESC ddSwDesc
Definition: d3dcaps.h:423
D3DDEVICEDESC ddHwDesc
Definition: d3dcaps.h:422
D3DCOLORMODEL dcmColorModel
Definition: d3dcaps.h:398

Referenced by d3d1_FindDevice(), d3d2_FindDevice(), and d3d3_FindDevice().

◆ ddraw_from_device_parent()

static struct ddraw * ddraw_from_device_parent ( struct wined3d_device_parent *  device_parent)
inlinestatic

Definition at line 4969 of file ddraw.c.

4970{
4971 return CONTAINING_RECORD(device_parent, struct ddraw, device_parent);
4972}
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260

Referenced by device_parent_activate(), and device_parent_mode_changed().

◆ ddraw_get_d3dcaps()

HRESULT ddraw_get_d3dcaps ( const struct ddraw *  ddraw,
D3DDEVICEDESC7 *  caps 
)

Definition at line 1287 of file ddraw.c.

1288{
1290 HRESULT hr;
1291
1292 TRACE("ddraw %p, caps %p.\n", ddraw, caps);
1293
1294 memset(&wined3d_caps, 0, sizeof(wined3d_caps));
1295
1299 if (FAILED(hr))
1300 {
1301 WARN("Failed to get device caps, hr %#lx.\n", hr);
1302 return hr;
1303 }
1304
1316
1319
1324
1329
1332
1335
1338
1339 /* Remove all non-d3d7 caps */
1340 caps->dwDevCaps &= (
1348
1349 caps->dwStencilCaps &= (
1353
1354 /* FVF caps ?*/
1355
1356 caps->dwTextureOpCaps &= (
1365
1366 caps->dwVertexProcessingCaps &= (
1369
1370 caps->dpcLineCaps.dwMiscCaps &= (
1374
1375 caps->dpcLineCaps.dwRasterCaps &= (
1389
1390 caps->dpcLineCaps.dwZCmpCaps &= (
1394
1395 caps->dpcLineCaps.dwSrcBlendCaps &= (
1401
1402 caps->dpcLineCaps.dwDestBlendCaps &= (
1408
1409 caps->dpcLineCaps.dwAlphaCmpCaps &= (
1413
1414 caps->dpcLineCaps.dwShadeCaps &= (
1422
1423 caps->dpcLineCaps.dwTextureCaps &= (
1428
1436
1440
1442 {
1443 /* DirectX7 always has the np2 flag set, no matter what the card
1444 * supports. Some old games (Rollcage) check the caps incorrectly.
1445 * If wined3d supports nonpow2 textures it also has np2 conditional
1446 * support. */
1448 }
1449
1450 /* Fill the missing members, and do some fixup */
1451 caps->dpcLineCaps.dwSize = sizeof(caps->dpcLineCaps);
1460 caps->dpcLineCaps.dwStippleWidth = 32;
1461 caps->dpcLineCaps.dwStippleHeight = 32;
1462 /* Use the same for the TriCaps */
1463 caps->dpcTriCaps = caps->dpcLineCaps;
1464
1467 caps->dwMinTextureWidth = 1;
1468 caps->dwMinTextureHeight = 1;
1469
1470 /* Convert DWORDs safely to WORDs */
1475
1476 caps->deviceGUID = IID_IDirect3DTnLHalDevice;
1477
1478 caps->dwReserved1 = 0;
1479 caps->dwReserved2 = 0;
1480 caps->dwReserved3 = 0;
1481 caps->dwReserved4 = 0;
1482
1483 return DD_OK;
1484}
#define D3DMAXUSERCLIPPLANES
Definition: d3d8types.h:75
#define D3DPCMPCAPS_EQUAL
Definition: d3d8caps.h:90
#define D3DPRASTERCAPS_ANTIALIASEDGES
Definition: d3d8caps.h:77
#define D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR
Definition: d3d8caps.h:171
#define D3DDEVCAPS_EXECUTESYSTEMMEMORY
Definition: d3d8caps.h:36
#define D3DTEXOPCAPS_MODULATE2X
Definition: d3d8caps.h:156
#define D3DTEXOPCAPS_ADDSIGNED2X
Definition: d3d8caps.h:160
#define D3DPTADDRESSCAPS_MIRROR
Definition: d3d8caps.h:139
#define D3DPBLENDCAPS_SRCCOLOR
Definition: d3d8caps.h:98
#define D3DDEVCAPS_CANRENDERAFTERFLIP
Definition: d3d8caps.h:43
#define D3DTEXOPCAPS_SELECTARG1
Definition: d3d8caps.h:153
#define D3DVTXPCAPS_LOCALVIEWER
Definition: d3d8caps.h:185
#define D3DPTEXTURECAPS_PROJECTED
Definition: d3d8caps.h:120
#define D3DTEXOPCAPS_BLENDCURRENTALPHA
Definition: d3d8caps.h:167
#define D3DPRASTERCAPS_WBUFFER
Definition: d3d8caps.h:83
#define D3DPBLENDCAPS_DESTCOLOR
Definition: d3d8caps.h:104
#define D3DTEXOPCAPS_ADDSMOOTH
Definition: d3d8caps.h:162
#define D3DPTADDRESSCAPS_WRAP
Definition: d3d8caps.h:138
#define D3DPCMPCAPS_LESS
Definition: d3d8caps.h:89
#define D3DPMISCCAPS_CULLNONE
Definition: d3d8caps.h:58
#define D3DPTFILTERCAPS_MAGFAFLATCUBIC
Definition: d3d8caps.h:136
#define D3DPTFILTERCAPS_MIPFLINEAR
Definition: d3d8caps.h:132
#define D3DPMISCCAPS_CULLCW
Definition: d3d8caps.h:59
#define D3DDEVCAPS_TEXTUREVIDEOMEMORY
Definition: d3d8caps.h:41
#define D3DTEXOPCAPS_ADDSIGNED
Definition: d3d8caps.h:159
#define D3DDEVCAPS_DRAWPRIMITIVES2
Definition: d3d8caps.h:45
#define D3DPBLENDCAPS_INVSRCCOLOR
Definition: d3d8caps.h:99
#define D3DPBLENDCAPS_ZERO
Definition: d3d8caps.h:96
#define D3DSTENCILCAPS_DECR
Definition: d3d8caps.h:151
#define D3DTEXOPCAPS_BLENDTEXTUREALPHAPM
Definition: d3d8caps.h:166
#define D3DDEVCAPS_TEXTURESYSTEMMEMORY
Definition: d3d8caps.h:40
#define D3DPTFILTERCAPS_MINFANISOTROPIC
Definition: d3d8caps.h:130
#define D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE
Definition: d3d8caps.h:117
#define D3DPBLENDCAPS_INVDESTCOLOR
Definition: d3d8caps.h:105
#define D3DTEXOPCAPS_SUBTRACT
Definition: d3d8caps.h:161
#define D3DPBLENDCAPS_INVDESTALPHA
Definition: d3d8caps.h:103
#define D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA
Definition: d3d8caps.h:170
#define D3DSTENCILCAPS_INVERT
Definition: d3d8caps.h:149
#define D3DVTXPCAPS_MATERIALSOURCE7
Definition: d3d8caps.h:182
#define D3DPTFILTERCAPS_MINFLINEAR
Definition: d3d8caps.h:129
#define D3DPTEXTURECAPS_SQUAREONLY
Definition: d3d8caps.h:116
#define D3DPTFILTERCAPS_MAGFANISOTROPIC
Definition: d3d8caps.h:135
#define D3DPTEXTURECAPS_ALPHAPALETTE
Definition: d3d8caps.h:118
#define D3DPSHADECAPS_COLORGOURAUDRGB
Definition: d3d8caps.h:109
#define D3DPRASTERCAPS_ZBUFFERLESSHSR
Definition: d3d8caps.h:80
#define D3DPBLENDCAPS_SRCALPHASAT
Definition: d3d8caps.h:106
#define D3DPBLENDCAPS_BOTHSRCALPHA
Definition: d3d8caps.h:107
#define D3DDEVCAPS_EXECUTEVIDEOMEMORY
Definition: d3d8caps.h:37
#define D3DTEXOPCAPS_BUMPENVMAPLUMINANCE
Definition: d3d8caps.h:174
#define D3DPRASTERCAPS_WFOG
Definition: d3d8caps.h:84
#define D3DPTADDRESSCAPS_BORDER
Definition: d3d8caps.h:141
#define D3DPTADDRESSCAPS_INDEPENDENTUV
Definition: d3d8caps.h:142
#define D3DPSHADECAPS_FOGGOURAUD
Definition: d3d8caps.h:112
#define D3DPTEXTURECAPS_ALPHA
Definition: d3d8caps.h:115
#define D3DDEVCAPS_SEPARATETEXTUREMEMORIES
Definition: d3d8caps.h:46
#define D3DTEXOPCAPS_DISABLE
Definition: d3d8caps.h:152
#define D3DPSHADECAPS_SPECULARGOURAUDRGB
Definition: d3d8caps.h:110
#define D3DPMISCCAPS_CULLCCW
Definition: d3d8caps.h:60
#define D3DTEXOPCAPS_SELECTARG2
Definition: d3d8caps.h:154
#define D3DPMISCCAPS_LINEPATTERNREP
Definition: d3d8caps.h:57
#define D3DPCMPCAPS_NOTEQUAL
Definition: d3d8caps.h:93
#define D3DSTENCILCAPS_DECRSAT
Definition: d3d8caps.h:148
#define D3DDEVCAPS_DRAWPRIMTLVERTEX
Definition: d3d8caps.h:42
#define D3DPRASTERCAPS_ANISOTROPY
Definition: d3d8caps.h:82
#define D3DVTXPCAPS_DIRECTIONALLIGHTS
Definition: d3d8caps.h:183
#define D3DDEVCAPS_TLVERTEXSYSTEMMEMORY
Definition: d3d8caps.h:38
#define D3DPBLENDCAPS_INVSRCALPHA
Definition: d3d8caps.h:101
#define D3DSTENCILCAPS_ZERO
Definition: d3d8caps.h:145
#define D3DPRASTERCAPS_ZFOG
Definition: d3d8caps.h:85
#define D3DPCMPCAPS_GREATER
Definition: d3d8caps.h:92
#define D3DPBLENDCAPS_DESTALPHA
Definition: d3d8caps.h:102
#define D3DTEXOPCAPS_BLENDTEXTUREALPHA
Definition: d3d8caps.h:164
#define D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC
Definition: d3d8caps.h:137
#define D3DSTENCILCAPS_INCR
Definition: d3d8caps.h:150
#define D3DTEXOPCAPS_MODULATE
Definition: d3d8caps.h:155
#define D3DPRASTERCAPS_PAT
Definition: d3d8caps.h:73
#define D3DTEXOPCAPS_BUMPENVMAP
Definition: d3d8caps.h:173
#define D3DPCMPCAPS_ALWAYS
Definition: d3d8caps.h:95
#define D3DPRASTERCAPS_FOGRANGE
Definition: d3d8caps.h:81
#define D3DPSHADECAPS_ALPHAGOURAUDBLEND
Definition: d3d8caps.h:111
#define D3DPBLENDCAPS_SRCALPHA
Definition: d3d8caps.h:100
#define D3DPBLENDCAPS_ONE
Definition: d3d8caps.h:97
#define D3DTEXOPCAPS_PREMODULATE
Definition: d3d8caps.h:168
#define D3DPRASTERCAPS_FOGVERTEX
Definition: d3d8caps.h:75
#define D3DTEXOPCAPS_BLENDFACTORALPHA
Definition: d3d8caps.h:165
#define D3DSTENCILCAPS_INCRSAT
Definition: d3d8caps.h:147
#define D3DPCMPCAPS_LESSEQUAL
Definition: d3d8caps.h:91
#define D3DPTFILTERCAPS_MAGFLINEAR
Definition: d3d8caps.h:134
#define D3DPTADDRESSCAPS_CLAMP
Definition: d3d8caps.h:140
#define D3DPTFILTERCAPS_MINFPOINT
Definition: d3d8caps.h:128
#define D3DPTEXTURECAPS_CUBEMAP
Definition: d3d8caps.h:121
#define D3DDEVCAPS_TEXTURENONLOCALVIDMEM
Definition: d3d8caps.h:44
#define D3DVTXPCAPS_TEXGEN
Definition: d3d8caps.h:181
#define D3DTEXOPCAPS_DOTPRODUCT3
Definition: d3d8caps.h:175
#define D3DPBLENDCAPS_BOTHINVSRCALPHA
Definition: d3d8caps.h:108
#define D3DPCMPCAPS_NEVER
Definition: d3d8caps.h:88
#define D3DDEVCAPS_CANBLTSYSTONONLOCAL
Definition: d3d8caps.h:49
#define D3DPRASTERCAPS_FOGTABLE
Definition: d3d8caps.h:76
#define D3DSTENCILCAPS_KEEP
Definition: d3d8caps.h:144
#define D3DPTFILTERCAPS_MIPFPOINT
Definition: d3d8caps.h:131
#define D3DDEVCAPS_TLVERTEXVIDEOMEMORY
Definition: d3d8caps.h:39
#define D3DPMISCCAPS_MASKZ
Definition: d3d8caps.h:56
#define D3DPCMPCAPS_GREATEREQUAL
Definition: d3d8caps.h:94
#define D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR
Definition: d3d8caps.h:169
#define D3DPRASTERCAPS_ZTEST
Definition: d3d8caps.h:74
#define D3DVTXPCAPS_POSITIONALLIGHTS
Definition: d3d8caps.h:184
#define D3DPRASTERCAPS_ZBIAS
Definition: d3d8caps.h:79
#define D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA
Definition: d3d8caps.h:172
#define D3DTEXOPCAPS_ADD
Definition: d3d8caps.h:158
#define D3DSTENCILCAPS_REPLACE
Definition: d3d8caps.h:146
#define D3DPTFILTERCAPS_MAGFPOINT
Definition: d3d8caps.h:133
#define D3DPRASTERCAPS_MIPMAPLODBIAS
Definition: d3d8caps.h:78
#define D3DTEXOPCAPS_MODULATE4X
Definition: d3d8caps.h:157
#define D3DPRASTERCAPS_DITHER
Definition: d3d8caps.h:72
#define D3DPTBLENDCAPS_COPY
Definition: d3dcaps.h:99
#define D3DPTBLENDCAPS_MODULATEALPHA
Definition: d3dcaps.h:96
#define D3DPRASTERCAPS_ROP2
Definition: d3dcaps.h:30
#define D3DPTFILTERCAPS_LINEAR
Definition: d3dcaps.h:88
#define D3DPSHADECAPS_SPECULARFLATMONO
Definition: d3dcaps.h:66
#define D3DPTFILTERCAPS_LINEARMIPNEAREST
Definition: d3dcaps.h:91
#define D3DPTBLENDCAPS_MODULATEMASK
Definition: d3dcaps.h:98
#define D3DDEVCAPS_FLOATTLVERTEX
Definition: d3dcaps.h:116
#define D3DPTBLENDCAPS_MODULATE
Definition: d3dcaps.h:94
#define D3DPRASTERCAPS_ANTIALIASSORTDEPENDENT
Definition: d3dcaps.h:159
#define D3DPRASTERCAPS_STIPPLE
Definition: d3dcaps.h:38
#define D3DPTEXTURECAPS_BORDER
Definition: d3dcaps.h:85
#define D3DPTFILTERCAPS_NEAREST
Definition: d3dcaps.h:87
#define D3DPSHADECAPS_ALPHAGOURAUDSTIPPLED
Definition: d3dcaps.h:75
#define D3DPTBLENDCAPS_DECALMASK
Definition: d3dcaps.h:97
#define D3DDEVCAPS_SORTDECREASINGZ
Definition: d3dcaps.h:118
#define D3DPTEXTURECAPS_TRANSPARENCY
Definition: d3dcaps.h:84
#define D3DPSHADECAPS_SPECULARGOURAUDMONO
Definition: d3dcaps.h:68
#define D3DPSHADECAPS_ALPHAPHONGBLEND
Definition: d3dcaps.h:76
#define D3DPSHADECAPS_COLORPHONGRGB
Definition: d3dcaps.h:65
#define D3DPSHADECAPS_ALPHAPHONGSTIPPLED
Definition: d3dcaps.h:77
#define D3DPMISCCAPS_CONFORMANT
Definition: d3dcaps.h:25
#define D3DPRASTERCAPS_ANTIALIASSORTINDEPENDENT
Definition: d3dcaps.h:160
#define D3DPTFILTERCAPS_LINEARMIPLINEAR
Definition: d3dcaps.h:92
#define D3DDEVCAPS_SORTEXACT
Definition: d3dcaps.h:119
#define D3DPTFILTERCAPS_MIPNEAREST
Definition: d3dcaps.h:89
#define D3DPSHADECAPS_SPECULARFLATRGB
Definition: d3dcaps.h:67
#define D3DVTXPCAPS_VERTEXFOG
Definition: d3dcaps.h:242
#define D3DPTEXTURECAPS_COLORKEYBLEND
Definition: d3dcaps.h:236
#define D3DPTBLENDCAPS_ADD
Definition: d3dcaps.h:167
#define D3DPRASTERCAPS_TRANSLUCENTSORTINDEPENDENT
Definition: d3dcaps.h:177
#define D3DPSHADECAPS_COLORFLATMONO
Definition: d3dcaps.h:60
#define D3DPRASTERCAPS_SUBPIXELX
Definition: d3dcaps.h:35
#define D3DPSHADECAPS_ALPHAFLATBLEND
Definition: d3dcaps.h:72
#define D3DPTBLENDCAPS_DECALALPHA
Definition: d3dcaps.h:95
#define D3DPRASTERCAPS_XOR
Definition: d3dcaps.h:31
#define D3DPSHADECAPS_ALPHAFLATSTIPPLED
Definition: d3dcaps.h:73
#define D3DPMISCCAPS_MASKPLANES
Definition: d3dcaps.h:22
#define D3DPRASTERCAPS_SUBPIXEL
Definition: d3dcaps.h:34
#define D3DPSHADECAPS_FOGFLAT
Definition: d3dcaps.h:78
#define D3DPSHADECAPS_FOGPHONG
Definition: d3dcaps.h:80
#define D3DPSHADECAPS_COLORPHONGMONO
Definition: d3dcaps.h:64
#define D3DPSHADECAPS_COLORGOURAUDMONO
Definition: d3dcaps.h:62
#define D3DPSHADECAPS_SPECULARPHONGMONO
Definition: d3dcaps.h:70
#define D3DPSHADECAPS_SPECULARPHONGRGB
Definition: d3dcaps.h:71
#define D3DPSHADECAPS_COLORFLATRGB
Definition: d3dcaps.h:61
#define D3DPTBLENDCAPS_DECAL
Definition: d3dcaps.h:93
#define D3DDEVCAPS_SORTINCREASINGZ
Definition: d3dcaps.h:117
#define D3DPTFILTERCAPS_MIPLINEAR
Definition: d3dcaps.h:90
#define DDBD_24
Definition: ddraw.h:474
#define DDBD_32
Definition: ddraw.h:475
#define DDBD_16
Definition: ddraw.h:473
WORD wMaxUserClipPlanes
Definition: d3dcaps.h:383
DWORD dwReserved2
Definition: d3dcaps.h:387
DWORD dwVertexProcessingCaps
Definition: d3dcaps.h:385
DWORD dwReserved4
Definition: d3dcaps.h:389
DWORD dwReserved1
Definition: d3dcaps.h:386
WORD wMaxVertexBlendMatrices
Definition: d3dcaps.h:384
DWORD dwReserved3
Definition: d3dcaps.h:388
D3DVALUE dvMaxVertexW
Definition: d3dcaps.h:381
DWORD dwAlphaCmpCaps
Definition: d3dcaps.h:58
DWORD dwZCmpCaps
Definition: d3dcaps.h:55
DWORD dwShadeCaps
Definition: d3dcaps.h:59
DWORD dwStippleWidth
Definition: d3dcaps.h:64
DWORD dwRasterCaps
Definition: d3dcaps.h:54
DWORD dwSrcBlendCaps
Definition: d3dcaps.h:56
DWORD dwTextureBlendCaps
Definition: d3dcaps.h:62
DWORD dwTextureFilterCaps
Definition: d3dcaps.h:61
DWORD dwSize
Definition: d3dcaps.h:52
DWORD dwStippleHeight
Definition: d3dcaps.h:65
DWORD dwTextureAddressCaps
Definition: d3dcaps.h:63
DWORD dwMiscCaps
Definition: d3dcaps.h:53
DWORD dwDestBlendCaps
Definition: d3dcaps.h:57
DWORD MaxVertexBlendMatrices
Definition: wined3d.h:1967
DWORD MaxTextureBlendStages
Definition: wined3d.h:1961
float GuardBandTop
Definition: wined3d.h:1952
DWORD FVFCaps
Definition: wined3d.h:1959
DWORD PrimitiveMiscCaps
Definition: wined3d.h:1928
DWORD VertexProcessingCaps
Definition: wined3d.h:1964
DWORD TextureAddressCaps
Definition: wined3d.h:1939
DWORD TextureCaps
Definition: wined3d.h:1935
DWORD ShadeCaps
Definition: wined3d.h:1934
DWORD TextureOpCaps
Definition: wined3d.h:1960
DWORD MaxTextureRepeat
Definition: wined3d.h:1946
DWORD MaxAnisotropy
Definition: wined3d.h:1948
float ExtentsAdjust
Definition: wined3d.h:1956
float GuardBandLeft
Definition: wined3d.h:1951
DWORD DevCaps
Definition: wined3d.h:1927
DWORD ZCmpCaps
Definition: wined3d.h:1930
DWORD MaxTextureHeight
Definition: wined3d.h:1944
DWORD AlphaCmpCaps
Definition: wined3d.h:1933
DWORD DestBlendCaps
Definition: wined3d.h:1932
DWORD RasterCaps
Definition: wined3d.h:1929
float MaxVertexW
Definition: wined3d.h:1949
DWORD MaxTextureWidth
Definition: wined3d.h:1943
DWORD LineCaps
Definition: wined3d.h:1941
DWORD MaxUserClipPlanes
Definition: wined3d.h:1966
float GuardBandBottom
Definition: wined3d.h:1954
float GuardBandRight
Definition: wined3d.h:1953
DWORD MaxTextureAspectRatio
Definition: wined3d.h:1947
DWORD MaxSimultaneousTextures
Definition: wined3d.h:1962
DWORD MaxActiveLights
Definition: wined3d.h:1965
DWORD StencilCaps
Definition: wined3d.h:1957
DWORD SrcBlendCaps
Definition: wined3d.h:1931
DWORD TextureFilterCaps
Definition: wined3d.h:1936
HRESULT CDECL wined3d_get_device_caps(const struct wined3d_adapter *adapter, enum wined3d_device_type device_type, struct wined3d_caps *caps)
Definition: directx.c:2366
#define WINED3DLINECAPS_ANTIALIAS
Definition: wined3d.h:1073
#define WINED3DPRASTERCAPS_DEPTHBIAS
Definition: wined3d.h:1222

Referenced by d3d3_EnumDevices(), d3d7_EnumDevices(), d3d_device3_GetCaps(), d3d_device7_GetCaps(), and ddraw_find_device().

◆ ddraw_init()

HRESULT ddraw_init ( struct ddraw *  ddraw,
DWORD  flags,
enum wined3d_device_type  device_type 
)

Definition at line 5079 of file ddraw.c.

5080{
5081 struct wined3d_caps caps;
5082 HRESULT hr;
5083
5084 static const enum wined3d_feature_level feature_levels[] =
5085 {
5089 };
5090
5095 ddraw->IDirect3D_iface.lpVtbl = &d3d1_vtbl;
5096 ddraw->IDirect3D2_iface.lpVtbl = &d3d2_vtbl;
5097 ddraw->IDirect3D3_iface.lpVtbl = &d3d3_vtbl;
5098 ddraw->IDirect3D7_iface.lpVtbl = &d3d7_vtbl;
5101 ddraw->numIfaces = 1;
5102 ddraw->ref7 = 1;
5103
5105 if (!(ddraw->wined3d = wined3d_create(flags)))
5106 {
5108 if (!(ddraw->wined3d = wined3d_create(flags)))
5109 {
5110 WARN("Failed to create a wined3d object.\n");
5111 return E_FAIL;
5112 }
5113 }
5114
5116 {
5117 WARN("Failed to get the default wined3d adapter.\n");
5119 return E_FAIL;
5120 }
5121
5123 {
5124 WARN("Failed to get the default wined3d output.\n");
5126 return E_FAIL;
5127 }
5128
5130 {
5131 ERR("Failed to get device caps, hr %#lx.\n", hr);
5133 return E_FAIL;
5134 }
5135
5136 if (!(caps.ddraw_caps.caps & WINEDDCAPS_3D))
5137 {
5138 WARN("Created a wined3d object without 3D support.\n");
5140 }
5141
5145 {
5146 WARN("Failed to create a wined3d device, hr %#lx.\n", hr);
5148 return hr;
5149 }
5151
5154 return DD_OK;
5155}
static void list_init(struct list_entry *head)
Definition: list.h:51
#define DDRAW_WINED3D_FLAGS
Definition: ddraw_private.h:63
device_type
static const struct IDirect3D3Vtbl d3d3_vtbl
Definition: ddraw.c:4850
static const struct wined3d_swapchain_state_parent_ops ddraw_swapchain_state_parent_ops
Definition: ddraw.c:93
static const struct IDirect3D7Vtbl d3d7_vtbl
Definition: ddraw.c:4836
static const struct IDirect3D2Vtbl d3d2_vtbl
Definition: ddraw.c:4868
static const struct IDirectDraw2Vtbl ddraw2_vtbl
Definition: ddraw.c:4775
static const struct IDirectDraw7Vtbl ddraw7_vtbl
Definition: ddraw.c:4698
static const struct IDirect3DVtbl d3d1_vtbl
Definition: ddraw.c:4883
static const struct wined3d_device_parent_ops ddraw_wined3d_device_parent_ops
Definition: ddraw.c:5071
static const struct IDirectDraw4Vtbl ddraw4_vtbl
Definition: ddraw.c:4738
static struct IDirectDrawVtbl ddraw1_vtbl
Definition: ddraw.c:4807
struct wined3d_device_context *CDECL wined3d_device_get_immediate_context(struct wined3d_device *device)
Definition: device.c:1969
static D3D_DRIVER_TYPE HMODULE UINT const D3D_FEATURE_LEVEL * feature_levels
Definition: hlsl_d3d11.c:28
struct wined3d_device_context * immediate_context
LONG ref7
Definition: ddraw_private.h:94
struct list d3ddevice_list
LONG numIfaces
Definition: ddraw_private.h:94
struct wined3d_device_parent device_parent
Definition: ddraw_private.h:91
HRESULT CDECL wined3d_device_create(struct wined3d *wined3d, struct wined3d_adapter *adapter, enum wined3d_device_type device_type, HWND focus_window, uint32_t flags, BYTE surface_alignment, const enum wined3d_feature_level *feature_levels, unsigned int feature_level_count, struct wined3d_device_parent *device_parent, struct wined3d_device **device)
Definition: directx.c:2777
struct wined3d_adapter *CDECL wined3d_get_adapter(const struct wined3d *wined3d, unsigned int idx)
Definition: directx.c:1009
struct wined3d_output *CDECL wined3d_adapter_get_output(const struct wined3d_adapter *adapter, unsigned int idx)
Definition: directx.c:1027
#define WINED3D_NO3D
Definition: wined3d.h:1323
#define WINED3DADAPTER_DEFAULT
Definition: wined3d.h:871
#define WINEDDCAPS_3D
Definition: wined3d.h:1500
wined3d_feature_level
Definition: wined3d.h:98
@ WINED3D_FEATURE_LEVEL_7
Definition: wined3d.h:102
@ WINED3D_FEATURE_LEVEL_6
Definition: wined3d.h:101
@ WINED3D_FEATURE_LEVEL_5
Definition: wined3d.h:100
struct wined3d *CDECL wined3d_create(uint32_t flags)
Definition: wined3d_main.c:142

Referenced by DDRAW_Create().

◆ ddraw_match_surface_desc()

static BOOL ddraw_match_surface_desc ( const DDSURFACEDESC2 *  requested,
const DDSURFACEDESC2 *  provided 
)
static

Definition at line 3147 of file ddraw.c.

3148{
3149 struct compare_info
3150 {
3151 DWORD flag;
3153 size_t size;
3154 };
3155
3156#define CMP(FLAG, FIELD) \
3157 { DDSD_##FLAG, offsetof(DDSURFACEDESC2, FIELD), \
3158 sizeof(((DDSURFACEDESC2 *)(NULL))->FIELD) }
3159
3160 static const struct compare_info compare[] =
3161 {
3162 CMP(ALPHABITDEPTH, dwAlphaBitDepth),
3163 CMP(BACKBUFFERCOUNT, dwBackBufferCount),
3164 CMP(CAPS, ddsCaps),
3165 CMP(CKDESTBLT, ddckCKDestBlt),
3166 CMP(CKDESTOVERLAY, ddckCKDestOverlay),
3167 CMP(CKSRCBLT, ddckCKSrcBlt),
3168 CMP(CKSRCOVERLAY, ddckCKSrcOverlay),
3169 CMP(HEIGHT, dwHeight),
3170 CMP(LINEARSIZE, dwLinearSize),
3171 CMP(LPSURFACE, lpSurface),
3172 CMP(MIPMAPCOUNT, dwMipMapCount),
3173 CMP(PITCH, lPitch),
3174 /* PIXELFORMAT: manual */
3175 CMP(REFRESHRATE, dwRefreshRate),
3176 CMP(TEXTURESTAGE, dwTextureStage),
3177 CMP(WIDTH, dwWidth),
3178 /* ZBUFFERBITDEPTH: "obsolete" */
3179 };
3180
3181#undef CMP
3182
3183 unsigned int i;
3184
3185 if ((requested->dwFlags & provided->dwFlags) != requested->dwFlags)
3186 return FALSE;
3187
3188 for (i=0; i < ARRAY_SIZE(compare); i++)
3189 {
3190 if (requested->dwFlags & compare[i].flag
3191 && memcmp((const char *)provided + compare[i].offset,
3192 (const char *)requested + compare[i].offset,
3193 compare[i].size) != 0)
3194 return FALSE;
3195 }
3196
3197 if (requested->dwFlags & DDSD_PIXELFORMAT)
3198 {
3200 &provided->ddpfPixelFormat))
3201 return FALSE;
3202 }
3203
3204 return TRUE;
3205}
#define WIDTH
Definition: d3dtest.c:13
#define HEIGHT
Definition: d3dtest.c:14
static BOOL Main_DirectDraw_DDPIXELFORMAT_Match(const DDPIXELFORMAT *requested, const DDPIXELFORMAT *provided)
Definition: ddraw.c:3102
#define CMP(FLAG, FIELD)
int ptrdiff_t
Definition: corecrt.h:194
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
Definition: string.c:2807
static int compare_info(WCHAR *name, DWORD flags, WCHAR *buff, const WCHAR *cmp, BOOL exact)
Definition: locale.c:255
GLintptr offset
Definition: glext.h:5920
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean flag
Definition: glfuncs.h:52
#define CAPS
Definition: kerberos.c:274
DWORD dwAlphaBitDepth
Definition: ddraw.h:3
DWORD dwRefreshRate
Definition: ddraw.h:2
LONG lPitch
Definition: ddraw.h:0
DDCOLORKEY ddckCKDestOverlay
Definition: ddraw.h:0
DWORD dwBackBufferCount
Definition: ddraw.h:0
DWORD dwMipMapCount
Definition: ddraw.h:0
DWORD dwLinearSize
Definition: ddraw.h:1
Definition: bug.cpp:8

Referenced by ddraw7_EnumSurfaces().

◆ ddraw_null_wined3d_object_destroyed()

static void STDMETHODCALLTYPE ddraw_null_wined3d_object_destroyed ( void *  parent)
static

Definition at line 80 of file ddraw.c.

80{}

◆ ddraw_set_cooperative_level()

static HRESULT ddraw_set_cooperative_level ( struct ddraw *  ddraw,
HWND  window,
DWORD  cooplevel,
BOOL  restore_mode_on_normal 
)
static

Definition at line 796 of file ddraw.c.

798{
799 BOOL restore_state = FALSE;
800 struct d3d_device *device;
801 RECT clip_rect;
802 HRESULT hr;
803
804 TRACE("ddraw %p, window %p, flags %#lx, restore_mode_on_normal %x.\n", ddraw, window, cooplevel,
805 restore_mode_on_normal);
807
809
811 {
812 WARN("Recursive call, returning DD_OK.\n");
813 hr = DD_OK;
814 goto done;
815 }
817
818 /* Tests suggest that we need one of them: */
819 if(!(cooplevel & (DDSCL_SETFOCUSWINDOW |
822 {
823 TRACE("Incorrect cooplevel flags, returning DDERR_INVALIDPARAMS\n");
825 goto done;
826 }
827
828 if ((cooplevel & DDSCL_CREATEDEVICEWINDOW) && !(cooplevel & DDSCL_EXCLUSIVE))
829 {
830 WARN("DDSCL_CREATEDEVICEWINDOW requires DDSCL_EXCLUSIVE.\n");
832 goto done;
833 }
834
835 /* Handle those levels first which set various hwnds */
836 if ((cooplevel & DDSCL_SETFOCUSWINDOW) && !(cooplevel & DDSCL_CREATEDEVICEWINDOW))
837 {
838 /* This isn't compatible with a lot of flags */
839 if (cooplevel & (DDSCL_MULTITHREADED
848 {
849 WARN("Called with incompatible flags, returning DDERR_INVALIDPARAMS.\n");
851 goto done;
852 }
853
855 goto done;
856 }
857
858 if (cooplevel & DDSCL_EXCLUSIVE)
859 {
860 if (!(cooplevel & DDSCL_FULLSCREEN) || !(window || (cooplevel & DDSCL_CREATEDEVICEWINDOW)))
861 {
862 WARN("DDSCL_EXCLUSIVE requires DDSCL_FULLSCREEN and a window.\n");
864 goto done;
865 }
866
867 if (cooplevel & DDSCL_CREATEDEVICEWINDOW)
868 {
869 HWND device_window;
870
871 if (!ddraw->focuswindow && !(cooplevel & DDSCL_SETFOCUSWINDOW))
872 {
873 WARN("No focus window set.\n");
875 goto done;
876 }
877
878 device_window = CreateWindowExA(0, DDRAW_WINDOW_CLASS_NAME, "DirectDrawDeviceWnd",
880 NULL, NULL, NULL, NULL);
881 if (!device_window)
882 {
883 ERR("Failed to create window, last error %#lx.\n", GetLastError());
884 hr = E_FAIL;
885 goto done;
886 }
887
888 ShowWindow(device_window, SW_SHOW);
889 TRACE("Created a device window %p.\n", device_window);
890
891 /* Native apparently leaks the created device window if setting the
892 * focus window below fails. */
894 ddraw->devicewindow = device_window;
895
896 if (cooplevel & DDSCL_SETFOCUSWINDOW)
897 {
898 if (!window)
899 {
901 goto done;
902 }
903
905 goto done;
906 }
907
908 window = device_window;
909 }
910 }
911 else
912 {
917 }
918
919 if ((cooplevel & DDSCL_EXCLUSIVE) && exclusive_window != window)
920 {
923 }
924
927
929 {
930 if (!(ddraw->flags & DDRAW_NO3D))
931 {
932 restore_state = TRUE;
933
935 {
937 device->state, WINED3D_SBT_ALL, &device->saved_state)))
938 {
939 struct list *entry;
940
941 ERR("Failed to create stateblock, hr %#lx.\n", hr);
942 entry = &device->ddraw_entry;
944 {
945 device = LIST_ENTRY(entry, struct d3d_device, ddraw_entry);
946 wined3d_stateblock_decref(device->saved_state);
947 device->saved_state = NULL;
948 }
949 goto done;
950 }
951 }
952 }
953
955 }
956
957 if (FAILED(hr = ddraw_create_swapchain(ddraw, window, cooplevel)))
958 ERR("Failed to create swapchain, hr %#lx.\n", hr);
959
960 if (restore_state)
961 {
963 {
964 wined3d_stateblock_apply(device->saved_state, device->state);
965 wined3d_stateblock_decref(device->saved_state);
966 device->saved_state = NULL;
967 }
968 }
969
970 if (!(cooplevel & DDSCL_EXCLUSIVE) && (ddraw->cooperative_level & DDSCL_EXCLUSIVE))
971 {
972 /* When going from exclusive mode to normal, ddraw removes the
973 topmost bit unless the DDSCL_NOWINDOWCHANGES flag is set in
974 this call that sets it to normal, not in the old coop level. */
975 if (!(cooplevel & DDSCL_NOWINDOWCHANGES))
977
978 if (restore_mode_on_normal && FAILED(ddraw7_RestoreDisplayMode(&ddraw->IDirectDraw7_iface)))
979 ERR("RestoreDisplayMode failed\n");
981 }
982
984 && (window != ddraw->dest_window || !(cooplevel & DDSCL_EXCLUSIVE)))
986
987 if ((cooplevel & DDSCL_EXCLUSIVE)
989 {
991 if (FAILED(hr))
992 {
993 ERR("Failed to acquire focus window, hr %#lx.\n", hr);
994 goto done;
995 }
996 }
997
998 if (cooplevel & DDSCL_EXCLUSIVE)
999 {
1001 ClipCursor(&clip_rect);
1002 }
1003
1004 /* Unhandled flags */
1005 if (cooplevel & DDSCL_ALLOWREBOOT)
1006 WARN("Unhandled flag DDSCL_ALLOWREBOOT, harmless\n");
1007 if (cooplevel & DDSCL_ALLOWMODEX)
1008 WARN("Unhandled flag DDSCL_ALLOWMODEX, harmless\n");
1009 if (cooplevel & DDSCL_FPUSETUP)
1010 WARN("Unhandled flag DDSCL_FPUSETUP, harmless\n");
1011
1012 if (cooplevel & DDSCL_EXCLUSIVE)
1014 else if (exclusive_ddraw == ddraw)
1016
1017 /* Store the cooperative_level */
1018 ddraw->cooperative_level = cooplevel;
1020
1021 TRACE("SetCooperativeLevel returning DD_OK\n");
1022 hr = DD_OK;
1023done:
1024 ddraw->flags &= ~DDRAW_SCL_RECURSIVE;
1026
1027 return hr;
1028}
Definition: list.h:39
#define DDRAW_SCL_RECURSIVE
Definition: ddraw_private.h:58
void DDRAW_dump_cooperativelevel(DWORD cooplevel)
Definition: utils.c:960
static HWND exclusive_window
Definition: ddraw.c:33
static HRESULT ddraw_create_swapchain(struct ddraw *ddraw, HWND window, DWORD cooplevel)
Definition: ddraw.c:651
static HRESULT ddraw_set_focus_window(struct ddraw *ddraw, HWND window)
Definition: ddraw.c:552
HRESULT CDECL wined3d_device_acquire_focus_window(struct wined3d_device *device, HWND window)
Definition: device.c:1133
void CDECL wined3d_device_set_multithreaded(struct wined3d_device *device)
Definition: device.c:1746
void CDECL wined3d_device_release_focus_window(struct wined3d_device *device)
Definition: device.c:1154
uint32_t entry
Definition: isohybrid.c:63
#define WS_POPUP
Definition: pedump.c:616
#define SWP_NOACTIVATE
Definition: winuser.h:1253
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
#define SWP_NOMOVE
Definition: winuser.h:1255
#define SWP_NOSIZE
Definition: winuser.h:1256
#define SW_SHOW
Definition: winuser.h:786
#define HWND_NOTOPMOST
Definition: winuser.h:1217
#define DDSCL_SETDEVICEWINDOW
Definition: ddraw.h:541
#define DDSCL_SETFOCUSWINDOW
Definition: ddraw.h:540
#define DDSCL_FPUPRESERVE
Definition: ddraw.h:545
#define DDSCL_MULTITHREADED
Definition: ddraw.h:543
#define DDERR_NOHWND
Definition: ddraw.h:145
#define DDSCL_ALLOWREBOOT
Definition: ddraw.h:535
#define DDERR_NOFOCUSWINDOW
Definition: ddraw.h:171
#define DDSCL_CREATEDEVICEWINDOW
Definition: ddraw.h:542
#define DDSCL_FPUSETUP
Definition: ddraw.h:544
#define DDSCL_ALLOWMODEX
Definition: ddraw.h:539
__WINE_SERVER_LIST_INLINE struct list * list_prev(const struct list *list, const struct list *elem)
Definition: list.h:125
HWND devicewindow
HWND focuswindow
#define LIST_ENTRY(type)
Definition: queue.h:175
HRESULT CDECL wined3d_stateblock_create(struct wined3d_device *device, const struct wined3d_stateblock *device_state, enum wined3d_stateblock_type type, struct wined3d_stateblock **stateblock)
Definition: stateblock.c:2508
ULONG CDECL wined3d_stateblock_decref(struct wined3d_stateblock *stateblock)
Definition: stateblock.c:670
void CDECL wined3d_stateblock_apply(const struct wined3d_stateblock *stateblock, struct wined3d_stateblock *device_state)
Definition: stateblock.c:1156
@ WINED3D_SBT_ALL
Definition: wined3d.h:787

Referenced by ddraw1_SetCooperativeLevel(), ddraw2_SetCooperativeLevel(), ddraw4_SetCooperativeLevel(), and ddraw7_SetCooperativeLevel().

◆ ddraw_set_focus_window()

static HRESULT ddraw_set_focus_window ( struct ddraw *  ddraw,
HWND  window 
)
static

Definition at line 552 of file ddraw.c.

553{
554 /* FIXME: This looks wrong, exclusive mode should imply a destination
555 * window. */
557 {
558 TRACE("Setting DDSCL_SETFOCUSWINDOW with an already set window, returning DDERR_HWNDALREADYSET.\n");
560 }
561
563
564 return DD_OK;
565}
#define DDERR_HWNDALREADYSET
Definition: ddraw.h:147

Referenced by ddraw_set_cooperative_level().

◆ ddraw_swapchain_windowed_state_changed()

static void CDECL ddraw_swapchain_windowed_state_changed ( struct wined3d_swapchain_state_parent *  parent,
BOOL  windowed 
)
static

Definition at line 87 of file ddraw.c.

89{
90 TRACE("parent %p, windowed %d.\n", parent, windowed);
91}
r parent
Definition: btrfs.c:3010

◆ ddraw_update_lost_surfaces()

void ddraw_update_lost_surfaces ( struct ddraw *  ddraw)

Definition at line 5031 of file ddraw.c.

5032{
5033 struct ddraw_surface *surface;
5034
5035 /* Railroad Tycoon 2 tries to restore surfaces from within a
5036 * WM_QUERYNEWPALETTE message handler and expects it to succeed. We
5037 * haven't received the WM_ACTIVATEAPP message by that point, so the
5038 * device state is still DDRAW_DEVICE_STATE_LOST, even though we are in
5039 * the foreground. */
5041 {
5043
5044 if (window && GetForegroundWindow() == window)
5046 }
5047
5049 return;
5050
5052 {
5053 surface->is_lost = ddraw_surface_can_be_lost(surface);
5054 }
5056}
static BOOL ddraw_surface_can_be_lost(const struct ddraw_surface *surface)
unsigned int is_lost

Referenced by ddraw_surface7_Restore(), and ddraw_texture_init().

◆ device_parent_activate()

static void CDECL device_parent_activate ( struct wined3d_device_parent *  device_parent,
BOOL  activate 
)
static

Definition at line 5014 of file ddraw.c.

5015{
5017
5018 TRACE("device_parent %p, activate %#x.\n", device_parent, activate);
5019
5020 if (!activate)
5021 {
5024 }
5025 else
5026 {
5028 }
5029}
static struct ddraw * ddraw_from_device_parent(struct wined3d_device_parent *device_parent)
Definition: ddraw.c:4969

◆ device_parent_mode_changed()

static void CDECL device_parent_mode_changed ( struct wined3d_device_parent *  device_parent)
static

Definition at line 4984 of file ddraw.c.

4985{
4987 struct wined3d_output_desc output_desc;
4988 RECT *r;
4989
4990 TRACE("device_parent %p.\n", device_parent);
4991
4993 {
4994 TRACE("Nothing to resize.\n");
4995 return;
4996 }
4997
4999 {
5000 ERR("Failed to get output description.\n");
5001 return;
5002 }
5003
5004 r = &output_desc.desktop_rect;
5005 TRACE("Resizing window %p to %s.\n", ddraw->swapchain_window, wine_dbgstr_rect(r));
5006
5007 if (!SetWindowPos(ddraw->swapchain_window, HWND_TOP, r->left, r->top,
5008 r->right - r->left, r->bottom - r->top, SWP_SHOWWINDOW | SWP_NOACTIVATE))
5009 ERR("Failed to resize window.\n");
5010
5012}
static const char * wine_dbgstr_rect(const RECT *prc)
Definition: atltest.h:160
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
#define HWND_TOP
Definition: winuser.h:1218
#define SWP_SHOWWINDOW
Definition: winuser.h:1259
HWND swapchain_window
HRESULT CDECL wined3d_output_get_desc(const struct wined3d_output *output, struct wined3d_output_desc *desc)
Definition: directx.c:1256

◆ device_parent_texture_sub_resource_created()

static HRESULT CDECL device_parent_texture_sub_resource_created ( struct wined3d_device_parent *  device_parent,
enum wined3d_resource_type  type,
struct wined3d_texture *  wined3d_texture,
unsigned int  sub_resource_idx,
void **  parent,
const struct wined3d_parent_ops **  parent_ops 
)
static

Definition at line 5058 of file ddraw.c.

5061{
5062 TRACE("device_parent %p, type %#x, wined3d_texture %p, sub_resource_idx %u, parent %p, parent_ops %p.\n",
5063 device_parent, type, wined3d_texture, sub_resource_idx, parent, parent_ops);
5064
5065 *parent = NULL;
5066 *parent_ops = &ddraw_null_wined3d_parent_ops;
5067
5068 return DD_OK;
5069}

◆ device_parent_wined3d_device_created()

static void CDECL device_parent_wined3d_device_created ( struct wined3d_device_parent *  device_parent,
struct wined3d_device *  device 
)
static

Definition at line 4974 of file ddraw.c.

4976{
4977 TRACE("device_parent %p, device %p.\n", device_parent, device);
4978}

◆ DirectDrawCreateClipper()

HRESULT WINAPI DirectDrawCreateClipper ( DWORD  flags,
IDirectDrawClipper **  clipper,
IUnknown *  outer_unknown 
)

Definition at line 3463 of file ddraw.c.

3464{
3465 struct ddraw_clipper *object;
3466 HRESULT hr;
3467
3468 TRACE("flags %#lx, clipper %p, outer_unknown %p.\n",
3469 flags, clipper, outer_unknown);
3470
3471 if (outer_unknown)
3472 return CLASS_E_NOAGGREGATION;
3473
3475
3476 if (!(object = calloc(1, sizeof(*object))))
3477 {
3479 return E_OUTOFMEMORY;
3480 }
3481
3482 hr = ddraw_clipper_init(object);
3483 if (FAILED(hr))
3484 {
3485 WARN("Failed to initialize clipper, hr %#lx.\n", hr);
3486 free(object);
3488 return hr;
3489 }
3490
3491 TRACE("Created clipper %p.\n", object);
3492 *clipper = &object->IDirectDrawClipper_iface;
3494
3495 return DD_OK;
3496}
HRESULT ddraw_clipper_init(struct ddraw_clipper *clipper)
Definition: clipper.c:381

Referenced by ddraw7_CreateClipper().

◆ enum_surface_mode_callback()

static HRESULT CALLBACK enum_surface_mode_callback ( DDSURFACEDESC2 *  surface_desc,
void *  context 
)
static

Definition at line 3259 of file ddraw.c.

3260{
3261 const struct enum_surface_mode_params *params = context;
3262 DDSURFACEDESC2 desc = *params->desc;
3263 IDirectDrawSurface7 *surface;
3264
3266 desc.dwWidth = surface_desc->dwWidth;
3267 desc.dwHeight = surface_desc->dwHeight;
3268 desc.lPitch = surface_desc->lPitch;
3269 desc.ddpfPixelFormat = surface_desc->ddpfPixelFormat;
3270
3271 if (SUCCEEDED(ddraw7_CreateSurface(params->ddraw, &desc, &surface, NULL)))
3272 {
3273 IDirectDrawSurface7_Release(surface);
3274 return params->callback(NULL, &desc, params->context);
3275 }
3276 return DDENUMRET_OK;
3277}

Referenced by ddraw7_EnumSurfaces().

◆ EnumDisplayModesCallbackThunk()

static HRESULT CALLBACK EnumDisplayModesCallbackThunk ( DDSURFACEDESC2 *  surface_desc,
void *  context 
)
static

Definition at line 2416 of file ddraw.c.

2417{
2418 struct displaymodescallback_context *cbcontext = context;
2420
2421 DDSD2_to_DDSD(surface_desc, &desc);
2422 return cbcontext->func(&desc, cbcontext->context);
2423}
void DDSD2_to_DDSD(const DDSURFACEDESC2 *in, DDSURFACEDESC *out)
Definition: utils.c:1242
LPDDENUMMODESCALLBACK func
Definition: ddraw.c:2412

Referenced by ddraw1_EnumDisplayModes(), and ddraw2_EnumDisplayModes().

◆ EnumSurfacesCallback2Thunk()

static HRESULT CALLBACK EnumSurfacesCallback2Thunk ( IDirectDrawSurface7 *  surface,
DDSURFACEDESC2 *  surface_desc,
void *  context 
)
static

Definition at line 3219 of file ddraw.c.

3221{
3222 struct ddraw_surface *surface_impl = impl_from_IDirectDrawSurface7(surface);
3223 struct surfacescallback2_context *cbcontext = context;
3224
3225 if (!surface)
3226 return cbcontext->func(NULL, surface_desc, cbcontext->context);
3227
3228 IDirectDrawSurface4_AddRef(&surface_impl->IDirectDrawSurface4_iface);
3229 IDirectDrawSurface7_Release(surface);
3230
3231 return cbcontext->func(&surface_impl->IDirectDrawSurface4_iface,
3232 surface_desc, cbcontext->context);
3233}
LPDDENUMSURFACESCALLBACK2 func
Definition: ddraw.c:3209

Referenced by ddraw4_EnumSurfaces().

◆ EnumSurfacesCallbackThunk()

static HRESULT CALLBACK EnumSurfacesCallbackThunk ( IDirectDrawSurface7 *  surface,
DDSURFACEDESC2 *  surface_desc,
void *  context 
)
static

Definition at line 3235 of file ddraw.c.

3237{
3238 struct ddraw_surface *surface_impl = impl_from_IDirectDrawSurface7(surface);
3239 struct surfacescallback_context *cbcontext = context;
3240
3241 if (!surface)
3242 return cbcontext->func(NULL, (DDSURFACEDESC *)surface_desc, cbcontext->context);
3243
3244 IDirectDrawSurface_AddRef(&surface_impl->IDirectDrawSurface_iface);
3245 IDirectDrawSurface7_Release(surface);
3246
3247 return cbcontext->func(&surface_impl->IDirectDrawSurface_iface,
3248 (DDSURFACEDESC *)surface_desc, cbcontext->context);
3249}
LPDDENUMSURFACESCALLBACK func
Definition: ddraw.c:3215

Referenced by ddraw1_EnumSurfaces(), and ddraw2_EnumSurfaces().

◆ impl_from_IDirect3D()

static struct ddraw * impl_from_IDirect3D ( IDirect3D *  iface)
inlinestatic

Definition at line 118 of file ddraw.c.

119{
120 return CONTAINING_RECORD(iface, struct ddraw, IDirect3D_iface);
121}

Referenced by d3d1_AddRef(), d3d1_CreateLight(), d3d1_CreateMaterial(), d3d1_CreateViewport(), d3d1_EnumDevices(), d3d1_FindDevice(), d3d1_QueryInterface(), and d3d1_Release().

◆ impl_from_IDirect3D2()

static struct ddraw * impl_from_IDirect3D2 ( IDirect3D2 *  iface)
inlinestatic

◆ impl_from_IDirect3D3()

static struct ddraw * impl_from_IDirect3D3 ( IDirect3D3 *  iface)
inlinestatic

◆ impl_from_IDirect3D7()

static struct ddraw * impl_from_IDirect3D7 ( IDirect3D7 *  iface)
inlinestatic

◆ impl_from_IDirectDraw()

◆ impl_from_IDirectDraw2()

◆ impl_from_IDirectDraw4()

static struct ddraw * impl_from_IDirectDraw4 ( IDirectDraw4 *  iface)
inlinestatic

Definition at line 108 of file ddraw.c.

109{
110 return CONTAINING_RECORD(iface, struct ddraw, IDirectDraw4_iface);
111}

Referenced by dd_get_inner(), ddraw4_AddRef(), ddraw4_Compact(), ddraw4_CreateClipper(), ddraw4_CreatePalette(), ddraw4_CreateSurface(), ddraw4_DuplicateSurface(), ddraw4_EnumDisplayModes(), ddraw4_EnumSurfaces(), ddraw4_FlipToGDISurface(), ddraw4_GetAvailableVidMem(), ddraw4_GetCaps(), ddraw4_GetDeviceIdentifier(), ddraw4_GetDisplayMode(), ddraw4_GetFourCCCodes(), ddraw4_GetGDISurface(), ddraw4_GetMonitorFrequency(), ddraw4_GetScanLine(), ddraw4_GetSurfaceFromDC(), ddraw4_GetVerticalBlankStatus(), ddraw4_Initialize(), ddraw4_QueryInterface(), ddraw4_Release(), ddraw4_RestoreAllSurfaces(), ddraw4_RestoreDisplayMode(), ddraw4_SetCooperativeLevel(), ddraw4_SetDisplayMode(), ddraw4_TestCooperativeLevel(), ddraw4_WaitForVerticalBlank(), ddrawex4_AddRef(), ddrawex4_Compact(), ddrawex4_CreateClipper(), ddrawex4_CreatePalette(), ddrawex4_CreateSurface(), ddrawex4_DuplicateSurface(), ddrawex4_EnumDisplayModes(), ddrawex4_EnumSurfaces(), ddrawex4_FlipToGDISurface(), ddrawex4_GetAvailableVidMem(), ddrawex4_GetCaps(), ddrawex4_GetDeviceIdentifier(), ddrawex4_GetDisplayMode(), ddrawex4_GetFourCCCodes(), ddrawex4_GetGDISurface(), ddrawex4_GetMonitorFrequency(), ddrawex4_GetScanLine(), ddrawex4_GetSurfaceFromDC(), ddrawex4_GetVerticalBlankStatus(), ddrawex4_Initialize(), ddrawex4_QueryInterface(), ddrawex4_Release(), ddrawex4_RestoreAllSurfaces(), ddrawex4_RestoreDisplayMode(), ddrawex4_SetCooperativeLevel(), ddrawex4_SetDisplayMode(), ddrawex4_TestCooperativeLevel(), and ddrawex4_WaitForVerticalBlank().

◆ impl_from_IDirectDraw7()

◆ Main_DirectDraw_DDPIXELFORMAT_Match()

static BOOL Main_DirectDraw_DDPIXELFORMAT_Match ( const DDPIXELFORMAT *  requested,
const DDPIXELFORMAT *  provided 
)
static

Definition at line 3102 of file ddraw.c.

3104{
3105 /* Some flags must be present in both or neither for a match. */
3106 static const DWORD must_match = DDPF_PALETTEINDEXED1 | DDPF_PALETTEINDEXED2
3109
3110 if ((requested->dwFlags & provided->dwFlags) != requested->dwFlags)
3111 return FALSE;
3112
3113 if ((requested->dwFlags & must_match) != (provided->dwFlags & must_match))
3114 return FALSE;
3115
3116 if (requested->dwFlags & DDPF_FOURCC)
3117 if (requested->dwFourCC != provided->dwFourCC)
3118 return FALSE;
3119
3122 if (requested->dwRGBBitCount != provided->dwRGBBitCount)
3123 return FALSE;
3124
3127 if (requested->dwRBitMask != provided->dwRBitMask)
3128 return FALSE;
3129
3131 if (requested->dwGBitMask != provided->dwGBitMask)
3132 return FALSE;
3133
3134 /* I could be wrong about the bumpmapping. MSDN docs are vague. */
3136 |DDPF_BUMPDUDV))
3137 if (requested->dwBBitMask != provided->dwBBitMask)
3138 return FALSE;
3139
3140 if (requested->dwFlags & (DDPF_ALPHAPIXELS|DDPF_ZPIXELS))
3141 if (requested->dwRGBAlphaBitMask != provided->dwRGBAlphaBitMask)
3142 return FALSE;
3143
3144 return TRUE;
3145}
#define DDPF_LUMINANCE
Definition: ddsformat.c:61
#define DDPF_ALPHA
Definition: ddsformat.c:57
#define DDPF_FOURCC
Definition: ddsformat.c:58
#define DDPF_RGB
Definition: ddsformat.c:60
#define DDPF_PALETTEINDEXED8
Definition: ddsformat.c:59
#define DDPF_ALPHAPIXELS
Definition: ddsformat.c:56
#define DDPF_BUMPDUDV
Definition: ddsformat.c:62
#define DDPF_PALETTEINDEXED4
Definition: ddraw.h:506
#define DDPF_PALETTEINDEXED2
Definition: ddraw.h:515
#define DDPF_STENCILBUFFER
Definition: ddraw.h:517
#define DDPF_YUV
Definition: ddraw.h:512
#define DDPF_ZPIXELS
Definition: ddraw.h:516
#define DDPF_PALETTEINDEXED1
Definition: ddraw.h:514
DWORD dwBBitMask
Definition: ddraw.h:1108
DWORD dwFourCC
Definition: ddraw.h:1074
DWORD dwRBitMask
Definition: ddraw.h:1087
DWORD dwGBitMask
Definition: ddraw.h:1096
DWORD dwFlags
Definition: ddraw.h:1073
DWORD dwRGBAlphaBitMask
Definition: ddraw.h:1115

Referenced by ddraw_match_surface_desc().

◆ restore_callback()

static HRESULT CALLBACK restore_callback ( IDirectDrawSurface7 *  surface,
DDSURFACEDESC2 *  desc,
void *  context 
)
static

Definition at line 2784 of file ddraw.c.

2785{
2786 IDirectDrawSurface_Restore(surface);
2787 IDirectDrawSurface_Release(surface);
2788
2789 return DDENUMRET_OK;
2790}

Referenced by ddraw7_RestoreAllSurfaces().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( ddraw  )

Variable Documentation

◆ d3d1_vtbl

const struct IDirect3DVtbl d3d1_vtbl
static
Initial value:
=
{
}
static HRESULT WINAPI d3d1_CreateViewport(IDirect3D *iface, IDirect3DViewport **viewport, IUnknown *outer_unknown)
Definition: ddraw.c:4178
static ULONG WINAPI d3d1_Release(IDirect3D *iface)
Definition: ddraw.c:539
static HRESULT WINAPI d3d1_CreateLight(IDirect3D *iface, IDirect3DLight **light, IUnknown *outer_unknown)
Definition: ddraw.c:4030
static HRESULT WINAPI d3d1_QueryInterface(IDirect3D *iface, REFIID riid, void **object)
Definition: ddraw.c:267
static HRESULT WINAPI d3d1_CreateMaterial(IDirect3D *iface, IDirect3DMaterial **material, IUnknown *outer_unknown)
Definition: ddraw.c:4103
static HRESULT WINAPI d3d1_Initialize(IDirect3D *iface, REFIID riid)
Definition: ddraw.c:2092
static HRESULT WINAPI d3d1_EnumDevices(IDirect3D *iface, LPD3DENUMDEVICESCALLBACK callback, void *context)
Definition: ddraw.c:3966
static HRESULT WINAPI d3d1_FindDevice(IDirect3D *iface, D3DFINDDEVICESEARCH *fds, D3DFINDDEVICERESULT *fdr)
Definition: ddraw.c:4331
static ULONG WINAPI d3d1_AddRef(IDirect3D *iface)
Definition: ddraw.c:369

Definition at line 4883 of file ddraw.c.

Referenced by ddraw_init().

◆ d3d2_vtbl

const struct IDirect3D2Vtbl d3d2_vtbl
static
Initial value:
=
{
}
static HRESULT WINAPI d3d2_EnumDevices(IDirect3D2 *iface, LPD3DENUMDEVICESCALLBACK callback, void *context)
Definition: ddraw.c:3957
static ULONG WINAPI d3d2_AddRef(IDirect3D2 *iface)
Definition: ddraw.c:360
static HRESULT WINAPI d3d2_CreateDevice(IDirect3D2 *iface, REFCLSID riid, IDirectDrawSurface *surface, IDirect3DDevice2 **device)
Definition: ddraw.c:4422
static HRESULT WINAPI d3d2_FindDevice(IDirect3D2 *iface, D3DFINDDEVICESEARCH *fds, D3DFINDDEVICERESULT *fdr)
Definition: ddraw.c:4314
static HRESULT WINAPI d3d2_CreateViewport(IDirect3D2 *iface, IDirect3DViewport2 **viewport, IUnknown *outer_unknown)
Definition: ddraw.c:4168
static HRESULT WINAPI d3d2_CreateLight(IDirect3D2 *iface, IDirect3DLight **light, IUnknown *outer_unknown)
Definition: ddraw.c:4021
static ULONG WINAPI d3d2_Release(IDirect3D2 *iface)
Definition: ddraw.c:530
static HRESULT WINAPI d3d2_CreateMaterial(IDirect3D2 *iface, IDirect3DMaterial2 **material, IUnknown *outer_unknown)
Definition: ddraw.c:4082
static HRESULT WINAPI d3d2_QueryInterface(IDirect3D2 *iface, REFIID riid, void **object)
Definition: ddraw.c:258

Definition at line 4868 of file ddraw.c.

Referenced by ddraw_init().

◆ d3d3_vtbl

const struct IDirect3D3Vtbl d3d3_vtbl
static
Initial value:
=
{
}
static HRESULT WINAPI d3d3_CreateMaterial(IDirect3D3 *iface, IDirect3DMaterial3 **material, IUnknown *outer_unknown)
Definition: ddraw.c:4059
static HRESULT WINAPI d3d3_EvictManagedTextures(IDirect3D3 *iface)
Definition: ddraw.c:4686
static ULONG WINAPI d3d3_AddRef(IDirect3D3 *iface)
Definition: ddraw.c:351
static HRESULT WINAPI d3d3_FindDevice(IDirect3D3 *iface, D3DFINDDEVICESEARCH *fds, D3DFINDDEVICERESULT *fdr)
Definition: ddraw.c:4299
static HRESULT WINAPI d3d3_EnumZBufferFormats(IDirect3D3 *iface, REFCLSID device_iid, LPD3DENUMPIXELFORMATSCALLBACK callback, void *context)
Definition: ddraw.c:4649
static HRESULT WINAPI d3d3_CreateDevice(IDirect3D3 *iface, REFCLSID riid, IDirectDrawSurface4 *surface, IDirect3DDevice3 **device, IUnknown *outer_unknown)
Definition: ddraw.c:4393
static HRESULT WINAPI d3d3_QueryInterface(IDirect3D3 *iface, REFIID riid, void **object)
Definition: ddraw.c:249
static HRESULT WINAPI d3d3_CreateVertexBuffer(IDirect3D3 *iface, D3DVERTEXBUFFERDESC *desc, IDirect3DVertexBuffer **vertex_buffer, DWORD flags, IUnknown *outer_unknown)
Definition: ddraw.c:4491
static ULONG WINAPI d3d3_Release(IDirect3D3 *iface)
Definition: ddraw.c:521

Definition at line 4850 of file ddraw.c.

Referenced by ddraw_init().

◆ d3d7_vtbl

const struct IDirect3D7Vtbl d3d7_vtbl
static
Initial value:
=
{
}
static HRESULT WINAPI d3d7_EnumDevices(IDirect3D7 *iface, LPD3DENUMDEVICESCALLBACK7 callback, void *context)
Definition: ddraw.c:3783
static ULONG WINAPI d3d7_Release(IDirect3D7 *iface)
Definition: ddraw.c:512
static HRESULT WINAPI d3d7_CreateVertexBuffer(IDirect3D7 *iface, D3DVERTEXBUFFERDESC *desc, IDirect3DVertexBuffer7 **vertex_buffer, DWORD flags)
Definition: ddraw.c:4467
static HRESULT WINAPI d3d7_QueryInterface(IDirect3D7 *iface, REFIID riid, void **object)
Definition: ddraw.c:240
static ULONG WINAPI d3d7_AddRef(IDirect3D7 *iface)
Definition: ddraw.c:342
static HRESULT WINAPI d3d7_CreateDevice(IDirect3D7 *iface, REFCLSID riid, IDirectDrawSurface7 *surface, IDirect3DDevice7 **device)
Definition: ddraw.c:4368

Definition at line 4836 of file ddraw.c.

Referenced by ddraw_init().

◆ ddraw1_vtbl

struct IDirectDrawVtbl ddraw1_vtbl
static
Initial value:
=
{
}
static HRESULT WINAPI ddraw1_DuplicateSurface(IDirectDraw *iface, IDirectDrawSurface *src, IDirectDrawSurface **dst)
Definition: ddraw.c:3746
static HRESULT WINAPI ddraw1_RestoreDisplayMode(IDirectDraw *iface)
Definition: ddraw.c:745
static HRESULT WINAPI ddraw1_WaitForVerticalBlank(IDirectDraw *iface, DWORD flags, HANDLE event)
Definition: ddraw.c:2224
static HRESULT WINAPI ddraw1_GetScanLine(IDirectDraw *iface, DWORD *line)
Definition: ddraw.c:2276
static HRESULT WINAPI ddraw1_GetDisplayMode(IDirectDraw *iface, DDSURFACEDESC *surface_desc)
Definition: ddraw.c:1738
static HRESULT WINAPI ddraw1_EnumSurfaces(IDirectDraw *iface, DWORD flags, DDSURFACEDESC *surface_desc, void *context, LPDDENUMSURFACESCALLBACK callback)
Definition: ddraw.c:3430
static HRESULT WINAPI ddraw1_GetMonitorFrequency(IDirectDraw *iface, DWORD *frequency)
Definition: ddraw.c:1875
static HRESULT WINAPI ddraw1_GetFourCCCodes(IDirectDraw *iface, DWORD *codes_count, DWORD *codes)
Definition: ddraw.c:1826
static HRESULT WINAPI ddraw1_CreateClipper(IDirectDraw *iface, DWORD flags, IDirectDrawClipper **clipper, IUnknown *outer_unknown)
Definition: ddraw.c:3535
static HRESULT WINAPI ddraw1_GetVerticalBlankStatus(IDirectDraw *iface, BOOL *status)
Definition: ddraw.c:1927
static HRESULT WINAPI ddraw1_CreateSurface(IDirectDraw *iface, DDSURFACEDESC *surface_desc, IDirectDrawSurface **surface, IUnknown *outer_unknown)
Definition: ddraw.c:3040
static HRESULT WINAPI ddraw1_FlipToGDISurface(IDirectDraw *iface)
Definition: ddraw.c:2160
static HRESULT WINAPI ddraw1_SetCooperativeLevel(IDirectDraw *iface, HWND window, DWORD flags)
Definition: ddraw.c:1057
static HRESULT WINAPI ddraw1_Compact(IDirectDraw *iface)
Definition: ddraw.c:1652
static HRESULT WINAPI ddraw1_CreatePalette(IDirectDraw *iface, DWORD flags, PALETTEENTRY *entries, IDirectDrawPalette **palette, IUnknown *outer_unknown)
Definition: ddraw.c:3649
static HRESULT WINAPI ddraw1_Initialize(IDirectDraw *iface, GUID *guid)
Definition: ddraw.c:2083
static HRESULT WINAPI ddraw1_GetGDISurface(IDirectDraw *iface, IDirectDrawSurface **surface)
Definition: ddraw.c:2387
static HRESULT WINAPI ddraw1_GetCaps(IDirectDraw *iface, DDCAPS *driver_caps, DDCAPS *hel_caps)
Definition: ddraw.c:1609
static HRESULT WINAPI ddraw1_QueryInterface(IDirectDraw *iface, REFIID riid, void **object)
Definition: ddraw.c:231
static HRESULT WINAPI ddraw1_EnumDisplayModes(IDirectDraw *iface, DWORD flags, DDSURFACEDESC *surface_desc, void *context, LPDDENUMMODESCALLBACK callback)
Definition: ddraw.c:2591
static HRESULT WINAPI ddraw1_SetDisplayMode(IDirectDraw *iface, DWORD width, DWORD height, DWORD bpp)
Definition: ddraw.c:1194

Definition at line 4807 of file ddraw.c.

Referenced by ddraw_init().

◆ ddraw2_vtbl

const struct IDirectDraw2Vtbl ddraw2_vtbl
static
Initial value:
=
{
}
static HRESULT WINAPI ddraw2_GetScanLine(IDirectDraw2 *iface, DWORD *line)
Definition: ddraw.c:2267
static HRESULT WINAPI ddraw2_DuplicateSurface(IDirectDraw2 *iface, IDirectDrawSurface *src, IDirectDrawSurface **dst)
Definition: ddraw.c:3723
static HRESULT WINAPI ddraw2_EnumDisplayModes(IDirectDraw2 *iface, DWORD flags, DDSURFACEDESC *surface_desc, void *context, LPDDENUMMODESCALLBACK callback)
Definition: ddraw.c:2573
static HRESULT WINAPI ddraw2_GetFourCCCodes(IDirectDraw2 *iface, DWORD *codes_count, DWORD *codes)
Definition: ddraw.c:1817
static ULONG WINAPI ddraw2_Release(IDirectDraw2 *iface)
Definition: ddraw.c:486
static HRESULT WINAPI ddraw2_SetCooperativeLevel(IDirectDraw2 *iface, HWND window, DWORD flags)
Definition: ddraw.c:1048
static ULONG WINAPI ddraw2_AddRef(IDirectDraw2 *iface)
Definition: ddraw.c:318
static HRESULT WINAPI ddraw2_Initialize(IDirectDraw2 *iface, GUID *guid)
Definition: ddraw.c:2074
static HRESULT WINAPI ddraw2_EnumSurfaces(IDirectDraw2 *iface, DWORD flags, DDSURFACEDESC *surface_desc, void *context, LPDDENUMSURFACESCALLBACK callback)
Definition: ddraw.c:3412
static HRESULT WINAPI ddraw2_QueryInterface(IDirectDraw2 *iface, REFIID riid, void **object)
Definition: ddraw.c:222
static HRESULT WINAPI ddraw2_GetDisplayMode(IDirectDraw2 *iface, DDSURFACEDESC *surface_desc)
Definition: ddraw.c:1726
static HRESULT WINAPI ddraw2_CreatePalette(IDirectDraw2 *iface, DWORD flags, PALETTEENTRY *entries, IDirectDrawPalette **palette, IUnknown *outer_unknown)
Definition: ddraw.c:3629
static HRESULT WINAPI ddraw2_GetGDISurface(IDirectDraw2 *iface, IDirectDrawSurface **surface)
Definition: ddraw.c:2364
static HRESULT WINAPI ddraw2_FlipToGDISurface(IDirectDraw2 *iface)
Definition: ddraw.c:2151
static HRESULT WINAPI ddraw2_SetDisplayMode(IDirectDraw2 *iface, DWORD width, DWORD height, DWORD bpp, DWORD refresh_rate, DWORD flags)
Definition: ddraw.c:1183
static HRESULT WINAPI ddraw2_GetVerticalBlankStatus(IDirectDraw2 *iface, BOOL *status)
Definition: ddraw.c:1918
static HRESULT WINAPI ddraw2_GetAvailableVidMem(IDirectDraw2 *iface, DDSCAPS *caps, DWORD *total, DWORD *free)
Definition: ddraw.c:2021
static HRESULT WINAPI ddraw2_GetCaps(IDirectDraw2 *iface, DDCAPS *driver_caps, DDCAPS *hel_caps)
Definition: ddraw.c:1600
static HRESULT WINAPI ddraw2_RestoreDisplayMode(IDirectDraw2 *iface)
Definition: ddraw.c:736
static HRESULT WINAPI ddraw2_GetMonitorFrequency(IDirectDraw2 *iface, DWORD *frequency)
Definition: ddraw.c:1866
static HRESULT WINAPI ddraw2_CreateClipper(IDirectDraw2 *iface, DWORD flags, IDirectDrawClipper **clipper, IUnknown *outer_unknown)
Definition: ddraw.c:3524
static HRESULT WINAPI ddraw2_WaitForVerticalBlank(IDirectDraw2 *iface, DWORD flags, HANDLE event)
Definition: ddraw.c:2215
static HRESULT WINAPI ddraw2_Compact(IDirectDraw2 *iface)
Definition: ddraw.c:1643
static HRESULT WINAPI ddraw2_CreateSurface(IDirectDraw2 *iface, DDSURFACEDESC *surface_desc, IDirectDrawSurface **surface, IUnknown *outer_unknown)
Definition: ddraw.c:2976

Definition at line 4775 of file ddraw.c.

Referenced by ddraw_init().

◆ ddraw4_vtbl

const struct IDirectDraw4Vtbl ddraw4_vtbl
static

Definition at line 4738 of file ddraw.c.

Referenced by ddraw_init().

◆ ddraw7_vtbl

const struct IDirectDraw7Vtbl ddraw7_vtbl
static

Definition at line 4698 of file ddraw.c.

Referenced by ddraw_init().

◆ ddraw_null_wined3d_parent_ops

◆ ddraw_swapchain_state_parent_ops

const struct wined3d_swapchain_state_parent_ops ddraw_swapchain_state_parent_ops
static
Initial value:
=
{
}
static void CDECL ddraw_swapchain_windowed_state_changed(struct wined3d_swapchain_state_parent *parent, BOOL windowed)
Definition: ddraw.c:87

Definition at line 93 of file ddraw.c.

Referenced by ddraw_init().

◆ ddraw_wined3d_device_parent_ops

const struct wined3d_device_parent_ops ddraw_wined3d_device_parent_ops
static
Initial value:
=
{
}
static void CDECL device_parent_mode_changed(struct wined3d_device_parent *device_parent)
Definition: ddraw.c:4984
static void CDECL device_parent_activate(struct wined3d_device_parent *device_parent, BOOL activate)
Definition: ddraw.c:5014
static HRESULT CDECL device_parent_texture_sub_resource_created(struct wined3d_device_parent *device_parent, enum wined3d_resource_type type, struct wined3d_texture *wined3d_texture, unsigned int sub_resource_idx, void **parent, const struct wined3d_parent_ops **parent_ops)
Definition: ddraw.c:5058
static void CDECL device_parent_wined3d_device_created(struct wined3d_device_parent *device_parent, struct wined3d_device *device)
Definition: ddraw.c:4974

Definition at line 5071 of file ddraw.c.

Referenced by ddraw_init().

◆ device_list7

struct enum_device_entry device_list7[]
static
Initial value:
=
{
{
"WINE Direct3D7 Hardware Transform and Lighting acceleration using WineD3D",
"Wine D3D7 T&L HAL",
&IID_IDirect3DTnLHalDevice,
0,
},
{
"WINE Direct3D7 Hardware acceleration using WineD3D",
"Direct3D HAL",
&IID_IDirect3DHALDevice,
},
{
"WINE Direct3D7 RGB Software Emulation using WineD3D",
"Wine D3D7 RGB",
&IID_IDirect3DRGBDevice,
},
}

Referenced by d3d7_EnumDevices().

◆ deviceidentifier

const DDDEVICEIDENTIFIER2 deviceidentifier
static
Initial value:
=
{
"vga.dll",
"DirectDraw HAL",
{ { 0x00010001, 0x00010001 } },
0, 0, 0, 0,
{0xa8373c10,0x7ac4,0x4deb, {0x84,0x9a,0x00,0x98,0x44,0xd0,0x8b,0x2d}},
0
}

Definition at line 36 of file ddraw.c.

Referenced by ddraw7_GetDeviceIdentifier().

◆ exclusive_ddraw

const struct ddraw* exclusive_ddraw
static

◆ exclusive_window

HWND exclusive_window
static

Definition at line 33 of file ddraw.c.

Referenced by ddraw_set_cooperative_level(), and device_parent_activate().