24#define DDRAW_INIT_GUID
65 unsigned int interface_count = 0;
66 unsigned int adapter_idx = 0;
67 unsigned int output_idx;
77 memset(&adapter_id, 0x0,
sizeof(adapter_id));
84 WARN(
"Failed to get adapter identifier, hr %#lx.\n",
hr);
96 WARN(
"Failed to get output description, hr %#lx.\n",
hr);
102 TRACE(
"Interface %u: %s\n", interface_count++,
120 if (!(
t->entries =
calloc(initial_size,
sizeof(*
t->entries))))
122 ERR(
"Failed to allocate handle table memory.\n");
125 t->free_entries =
NULL;
126 t->table_size = initial_size;
152 ERR(
"Handle %#lx (%p) is in the free list, but has type %#x.\n",
idx,
entry->object,
entry->type);
155 t->free_entries =
entry->object;
162 if (!(
t->entry_count <
t->table_size))
170 ERR(
"Failed to grow the handle table.\n");
173 t->entries = new_entries;
177 entry = &
t->entries[
t->entry_count];
181 return t->entry_count++;
194 WARN(
"Invalid handle %#lx passed.\n",
handle);
205 object =
entry->object;
206 entry->object =
t->free_entries;
222 WARN(
"Invalid handle %#lx passed.\n",
handle);
233 return entry->object;
240 TRACE(
"dc %p, surface %p, device_dc %p.\n",
dc, surface, device_dc);
300 TRACE(
"driver_guid %s, ddraw %p, outer_unknown %p, interface_iid %s.\n",
319 if (outer_unknown !=
NULL)
327 ERR(
"Out of memory when creating DirectDraw.\n");
333 WARN(
"Failed to initialize ddraw object, hr %#lx.\n",
hr);
361 TRACE(
"driver_guid %s, ddraw %p, outer %p.\n",
370 if (
FAILED(
hr = IDirectDraw_Initialize(*
ddraw, driver_guid)))
371 IDirectDraw_Release(*
ddraw);
391 TRACE(
"driver_guid %s, ddraw %p, interface_iid %s, outer %p.\n",
394 if (!
IsEqualGUID(interface_iid, &IID_IDirectDraw7))
404 hr = IDirectDraw7_Initialize(ddraw7, driver_guid);
406 IDirectDraw7_Release(ddraw7);
466 TRACE(
"Enumerating ddraw interfaces\n");
471 WARN(
"Failed to create a wined3d object.\n");
475 WARN(
"Created a wined3d object without 3D support.\n");
481 static CHAR driver_desc[] =
"DirectDraw HAL",
482 driver_name[] =
"display";
485 TRACE(
"Default interface: DirectDraw HAL\n");
500 TRACE(
"End of enumeration\n");
587 IDirectDrawClipper *Clip;
599 hr = IDirectDrawClipper_QueryInterface(Clip,
riid,
obj);
600 IDirectDrawClipper_Release(Clip);
648 IClassFactory_AddRef(iface);
718 TRACE(
"iface %p, outer_unknown %p, riid %s, out %p.\n",
738 FIXME(
"iface %p, dolock %#x stub!\n", iface, dolock);
760 TRACE(
"rclsid %s, riid %s, out %p.\n",
825 ERR(
"Failed to register ddraw window class, last error %#lx.\n",
GetLastError());
862 TRACE(
"ForceRefreshRate set; overriding refresh rate to %ld Hz\n",
data);
873 if (!
GetModuleHandleExW(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_PIN,
874 (
const WCHAR *)&ddraw_self, &ddraw_self))
875 ERR(
"Failed to get own module handle.\n");
892 WARN(
"DirectDraw object %p has reference counts {%lu, %lu, %lu, %lu, %lu}.\n",
896 WARN(
"DirectDraw object %p has Direct3D device(s) attached.\n",
ddraw);
900 WARN(
"Surface %p has reference counts {%lu, %lu, %lu, %lu, %lu, %lu}.\n",
916 WARN(
"Material handle %#x (%p) not unset properly.\n",
i + 1,
entry->object);
920 WARN(
"Texture handle %#x (%p) not unset properly.\n",
i + 1,
entry->object);
924 WARN(
"Leftover matrix handle %#x (%p), deleting.\n",
i + 1,
entry->object);
928 WARN(
"Handle %#x (%p) has unknown type %#x.\n",
i + 1,
entry->object,
entry->type);
#define DECLSPEC_HOTPATCH
#define InterlockedIncrement
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static int list_empty(struct list_entry *head)
static void list_add_head(struct list_entry *head, struct list_entry *entry)
BOOL NTAPI DllMain(_In_ HINSTANCE hDll, _In_ ULONG dwReason, _In_opt_ PVOID pReserved)
const GUID IID_IClassFactory
#define RegCloseKey(hKey)
#define DDRAW_WINDOW_CLASS_NAME
#define DDRAW_INVALID_HANDLE
#define DDRAW_WINED3D_FLAGS
HRESULT WINAPI DirectDrawEnumerateExW(LPDDENUMCALLBACKEXW lpCallback, LPVOID lpContext, DWORD dwFlags)
HRESULT WINAPI DirectDrawEnumerateW(LPDDENUMCALLBACKW lpCallback, LPVOID lpContext)
HRESULT WINAPI DirectDrawCreateClipper(DWORD dwFlags, LPDIRECTDRAWCLIPPER *lplpDDClipper, LPUNKNOWN pUnkOuter)
HRESULT WINAPI DirectDrawCreateEx(LPGUID lpGUID, LPVOID *lplpDD, REFIID id, LPUNKNOWN pUnkOuter)
HRESULT WINAPI DirectDrawEnumerateA(LPDDENUMCALLBACKA lpCallback, LPVOID lpContext)
HRESULT WINAPI DirectDrawEnumerateExA(LPDDENUMCALLBACKEXA lpCallback, LPVOID lpContext, DWORD dwFlags)
HRESULT WINAPI DirectDrawCreate(LPGUID lpGUID, LPDIRECTDRAW *lplpDD, LPUNKNOWN pUnkOuter)
static const struct object_creation_info object_creation[]
HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
static IClassFactoryImpl * impl_from_IClassFactory(IClassFactory *iface)
HRESULT ddraw_init(struct ddraw *ddraw, DWORD flags, enum wined3d_device_type device_type)
static HRESULT WINAPI ddraw_class_factory_LockServer(IClassFactory *iface, BOOL dolock)
void * ddraw_free_handle(struct ddraw_handle_table *t, DWORD handle, enum ddraw_handle_type type)
static HRESULT CF_CreateDirectDrawClipper(IUnknown *UnkOuter, REFIID riid, void **obj)
static HRESULT DDRAW_Create(const GUID *guid, void **out, IUnknown *outer_unknown, REFIID iid)
void * ddraw_get_object(struct ddraw_handle_table *t, DWORD handle, enum ddraw_handle_type type)
static HINSTANCE instance
static void ddraw_enumerate_secondary_devices(struct wined3d *wined3d, LPDDENUMCALLBACKEXA callback, void *context)
void ddraw_handle_table_destroy(struct ddraw_handle_table *t)
struct ddraw_handle_table global_handle_table
static HRESULT WINAPI ddraw_class_factory_QueryInterface(IClassFactory *iface, REFIID riid, void **out)
static BOOL CALLBACK enum_callback(GUID *guid, char *description, char *driver_name, void *context, HMONITOR monitor)
static const IClassFactoryVtbl IClassFactory_Vtbl
static ULONG WINAPI ddraw_class_factory_AddRef(IClassFactory *iface)
BOOL ddraw_handle_table_init(struct ddraw_handle_table *t, UINT initial_size)
static struct list global_ddraw_list
DWORD ddraw_allocate_handle(struct ddraw_handle_table *t, void *object, enum ddraw_handle_type type)
static HRESULT CF_CreateDirectDraw(IUnknown *UnkOuter, REFIID iid, void **obj)
HRESULT WINAPI GetSurfaceFromDC(HDC dc, IDirectDrawSurface4 **surface, HDC *device_dc)
static HRESULT WINAPI ddraw_class_factory_CreateInstance(IClassFactory *iface, IUnknown *outer_unknown, REFIID riid, void **out)
static ULONG WINAPI ddraw_class_factory_Release(IClassFactory *iface)
LONG WINAPI RegOpenKeyA(HKEY hKey, LPCSTR lpSubKey, PHKEY phkResult)
LONG WINAPI RegQueryValueExA(_In_ HKEY hkeyorg, _In_ LPCSTR name, _In_ LPDWORD reserved, _Out_opt_ LPDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ LPDWORD count)
static WCHAR reason[MAX_STRING_RESOURCE_LEN]
#define DLL_PROCESS_ATTACH
#define DLL_PROCESS_DETACH
#define WideCharToMultiByte
#define __EXCEPT_PAGE_FAULT
BOOL WINAPI GetModuleHandleExW(IN DWORD dwFlags, IN LPCWSTR lpwModuleName OPTIONAL, OUT HMODULE *phModule)
BOOL WINAPI DisableThreadLibraryCalls(IN HMODULE hLibModule)
static const WCHAR device_name[]
GLuint GLuint GLsizei GLenum type
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
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
static IPrintDialogCallback callback
#define IsEqualGUID(rguid1, rguid2)
BOOL WINAPI UnregisterClassA(_In_ LPCSTR, HINSTANCE)
LRESULT WINAPI DefWindowProcA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
ATOM WINAPI RegisterClassA(_In_ CONST WNDCLASSA *)
#define DDENUM_ATTACHEDSECONDARYDEVICES
#define DDERR_UNSUPPORTED
#define DDCREATE_HARDWAREONLY
#define DDERR_INVALIDPARAMS
#define DDENUM_DETACHEDSECONDARYDEVICES
#define DDENUM_NONDISPLAYDEVICES
#define DDCREATE_EMULATIONONLY
static __inline const char * wine_dbgstr_guid(const GUID *id)
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
LPDDENUMCALLBACKA callback
IClassFactory IClassFactory_iface
HRESULT(* pfnCreateInstance)(IUnknown *outer, REFIID iid, void **out)
struct list surface_list_entry
IDirectDraw7 IDirectDraw7_iface
struct list d3ddevice_list
IDirectDraw4 IDirectDraw4_iface
struct list ddraw_list_entry
IClassFactory IClassFactory_iface
unsigned int description_size
WCHAR device_name[CCHDEVICENAME]
#define CONTAINING_RECORD(address, type, field)
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
DWORD WINAPI GetLastError(void)
ULONG CDECL wined3d_decref(struct wined3d *wined3d)
HRESULT CDECL wined3d_output_get_desc(const struct wined3d_output *output, struct wined3d_output_desc *desc)
HRESULT CDECL wined3d_adapter_get_identifier(const struct wined3d_adapter *adapter, uint32_t flags, struct wined3d_adapter_identifier *identifier)
struct wined3d_adapter *CDECL wined3d_get_adapter(const struct wined3d *wined3d, unsigned int idx)
struct wined3d_output *CDECL wined3d_adapter_get_output(const struct wined3d_adapter *adapter, unsigned int idx)
#define WINED3D_LEGACY_FFP_LIGHTING
@ WINED3D_DEVICE_TYPE_HAL
@ WINED3D_DEVICE_TYPE_REF
void WINAPI wined3d_mutex_unlock(void)
void WINAPI wined3d_mutex_lock(void)
struct wined3d *CDECL wined3d_create(uint32_t flags)
#define CLASS_E_NOAGGREGATION
#define CLASS_E_CLASSNOTAVAILABLE
HGDIOBJ WINAPI GetStockObject(_In_ int)
#define HKEY_LOCAL_MACHINE