From 01b9436018211bc005467a1ef0569765d65f13d4 Mon Sep 17 00:00:00 2001 From: Ove Kaaven Date: Mon, 16 Apr 2001 19:06:13 +0000 Subject: [PATCH] Added ddraw HAL and gamma ramp stuff to implementation structures. Added a parameter and return value to flip_data and flip_update. --- dlls/ddraw/ddraw_private.h | 31 +++++++++++++++++++++++++++---- dlls/ddraw/dsurface/dga2.c | 9 +++++---- dlls/ddraw/dsurface/dga2.h | 7 ++++--- dlls/ddraw/dsurface/dib.c | 8 +++++--- dlls/ddraw/dsurface/dib.h | 5 +++-- dlls/ddraw/dsurface/main.c | 11 +++++++---- dlls/ddraw/dsurface/main.h | 5 +++-- dlls/ddraw/dsurface/thunks.c | 2 +- dlls/ddraw/dsurface/user.c | 9 +++++---- dlls/ddraw/dsurface/user.h | 8 +++++--- 10 files changed, 65 insertions(+), 30 deletions(-) diff --git a/dlls/ddraw/ddraw_private.h b/dlls/ddraw/ddraw_private.h index fb81343e7b0..7e78973e267 100644 --- a/dlls/ddraw/ddraw_private.h +++ b/dlls/ddraw/ddraw_private.h @@ -1,4 +1,4 @@ -/* Copyright 2000 TransGaming Technologies Inc. */ +/* Copyright 2000-2001 TransGaming Technologies Inc. */ #ifndef __WINE_DLLS_DDRAW_DDRAW_PRIVATE_H #define __WINE_DLLS_DDRAW_DDRAW_PRIVATE_H @@ -11,6 +11,7 @@ #include "winuser.h" #include "ddraw.h" #include "ddcomimpl.h" +#include "ddrawi.h" /* XXX Put this somewhere proper. */ #define DD_STRUCT_INIT(x) \ @@ -68,6 +69,9 @@ struct IDirectDrawImpl IDirectDrawSurfaceImpl* primary_surface; + DDRAWI_DIRECTDRAW_LCL local; + DDCAPS caps; + HWND window; DWORD cooperative_level; WNDPROC original_wndproc; @@ -84,6 +88,8 @@ struct IDirectDrawImpl /* Called when the refcount goes to 0. */ void (*final_release)(IDirectDrawImpl *This); + HRESULT (*set_exclusive_mode)(IDirectDrawImpl *This, DWORD dwExcl); + HRESULT (*create_palette)(IDirectDrawImpl* This, DWORD dwFlags, LPDIRECTDRAWPALETTE* ppPalette, LPUNKNOWN pUnkOuter); @@ -144,6 +150,9 @@ struct IDirectDrawPaletteImpl ICOM_VFIELD_MULTI(IDirectDrawPalette); DWORD ref; + DDRAWI_DDRAWPALETTE_LCL local; + DDRAWI_DDRAWPALETTE_GBL global; + /* IDirectDrawPalette fields */ DWORD flags; HPALETTE hpal; @@ -187,6 +196,7 @@ struct IDirectDrawSurfaceImpl /* IUnknown fields */ ICOM_VFIELD_MULTI(IDirectDrawSurface7); ICOM_VFIELD_MULTI(IDirectDrawSurface3); + ICOM_VFIELD_MULTI(IDirectDrawGammaControl); DWORD ref; struct IDirectDrawSurfaceImpl* attached; /* attached surfaces */ @@ -202,6 +212,14 @@ struct IDirectDrawSurfaceImpl IDirectDrawPaletteImpl* palette; /* strong ref */ IDirectDrawClipperImpl* clipper; /* strong ref */ + DDRAWI_DDRAWSURFACE_LCL local; + DDRAWI_DDRAWSURFACE_MORE more; + /* FIXME: since Flip should swap the GBL structures, they should + * probably not be embedded into the IDirectDrawSurfaceImpl structure... */ + LPDDRAWI_DDRAWSURFACE_GBL_MORE gmore; + DDRAWI_DDRAWSURFACE_GBL global; + DDRAWI_DDRAWSURFACE_GBL_MORE global_more; + DDSURFACEDESC2 surface_desc; HDC hDC; @@ -210,20 +228,24 @@ struct IDirectDrawSurfaceImpl HRESULT (*duplicate_surface)(IDirectDrawSurfaceImpl* src, LPDIRECTDRAWSURFACE7* dst); void (*final_release)(IDirectDrawSurfaceImpl *This); + HRESULT (*late_allocate)(IDirectDrawSurfaceImpl *This); BOOL (*attach)(IDirectDrawSurfaceImpl *This, IDirectDrawSurfaceImpl *to); BOOL (*detach)(IDirectDrawSurfaceImpl *This); void (*lock_update)(IDirectDrawSurfaceImpl* This, LPCRECT pRect); void (*unlock_update)(IDirectDrawSurfaceImpl* This, LPCRECT pRect); void (*lose_surface)(IDirectDrawSurfaceImpl* This); - void (*flip_data)(IDirectDrawSurfaceImpl* front, - IDirectDrawSurfaceImpl* back); - void (*flip_update)(IDirectDrawSurfaceImpl* front); + BOOL (*flip_data)(IDirectDrawSurfaceImpl* front, + IDirectDrawSurfaceImpl* back, + DWORD dwFlags); + void (*flip_update)(IDirectDrawSurfaceImpl* front, DWORD dwFlags); HRESULT (*get_dc)(IDirectDrawSurfaceImpl* This, HDC* phDC); HRESULT (*release_dc)(IDirectDrawSurfaceImpl* This, HDC hDC); void (*set_palette)(IDirectDrawSurfaceImpl* This, IDirectDrawPaletteImpl* pal); void (*update_palette)(IDirectDrawSurfaceImpl* This, IDirectDrawPaletteImpl* pal, DWORD dwStart, DWORD dwCount, LPPALETTEENTRY palent); HWND (*get_display_window)(IDirectDrawSurfaceImpl *This); + HRESULT (*get_gamma_ramp)(IDirectDrawSurfaceImpl *This, DWORD dwFlags, LPDDGAMMARAMP lpGammaRamp); + HRESULT (*set_gamma_ramp)(IDirectDrawSurfaceImpl *This, DWORD dwFlags, LPDDGAMMARAMP lpGammaRamp); struct PrivateData* private_data; @@ -249,6 +271,7 @@ struct IDirectDrawSurfaceImpl /***************************************************************************** * Driver initialisation functions. */ +BOOL DDRAW_HAL_Init(HINSTANCE, DWORD, LPVOID); BOOL DDRAW_User_Init(HINSTANCE, DWORD, LPVOID); typedef struct { diff --git a/dlls/ddraw/dsurface/dga2.c b/dlls/ddraw/dsurface/dga2.c index 53bcc2d7991..dac148d7954 100644 --- a/dlls/ddraw/dsurface/dga2.c +++ b/dlls/ddraw/dsurface/dga2.c @@ -159,8 +159,9 @@ HRESULT XF86DGA2_DirectDrawSurface_duplicate_surface(IDirectDrawSurfaceImpl* Thi &This->surface_desc, ppDup, NULL); } -void XF86DGA2_DirectDrawSurface_flip_data(IDirectDrawSurfaceImpl* front, - IDirectDrawSurfaceImpl* back) +BOOL XF86DGA2_DirectDrawSurface_flip_data(IDirectDrawSurfaceImpl* front, + IDirectDrawSurfaceImpl* back, + DWORD dwFlags) { XF86DGA2_PRIV_VAR(front_priv, front); XF86DGA2_PRIV_VAR(back_priv, back); @@ -178,10 +179,10 @@ void XF86DGA2_DirectDrawSurface_flip_data(IDirectDrawSurfaceImpl* front, back_priv->xf86dga2.fb_addr = tmp; } - DIB_DirectDrawSurface_flip_data(front, back); + return DIB_DirectDrawSurface_flip_data(front, back, dwFlags); } -void XF86DGA2_DirectDrawSurface_flip_update(IDirectDrawSurfaceImpl* This) +void XF86DGA2_DirectDrawSurface_flip_update(IDirectDrawSurfaceImpl* This, DWORD dwFlags) { XF86DGA2_PRIV_VAR(priv, This); diff --git a/dlls/ddraw/dsurface/dga2.h b/dlls/ddraw/dsurface/dga2.h index 23f8f0d2da6..a25323b7c34 100644 --- a/dlls/ddraw/dsurface/dga2.h +++ b/dlls/ddraw/dsurface/dga2.h @@ -42,9 +42,10 @@ void XF86DGA2_DirectDrawSurface_update_palette(IDirectDrawSurfaceImpl* This, LPPALETTEENTRY palent); HRESULT XF86DGA2_DirectDrawSurface_duplicate_surface(IDirectDrawSurfaceImpl* This, LPDIRECTDRAWSURFACE7* ppDup); -void XF86DGA2_DirectDrawSurface_flip_data(IDirectDrawSurfaceImpl* front, - IDirectDrawSurfaceImpl* back); -void XF86DGA2_DirectDrawSurface_flip_update(IDirectDrawSurfaceImpl* This); +BOOL XF86DGA2_DirectDrawSurface_flip_data(IDirectDrawSurfaceImpl* front, + IDirectDrawSurfaceImpl* back, + DWORD dwFlags); +void XF86DGA2_DirectDrawSurface_flip_update(IDirectDrawSurfaceImpl* This, DWORD dwFlags); HWND XF86DGA2_DirectDrawSurface_get_display_window(IDirectDrawSurfaceImpl* This); #endif diff --git a/dlls/ddraw/dsurface/dib.c b/dlls/ddraw/dsurface/dib.c index cf471838bbc..11abe8596f1 100644 --- a/dlls/ddraw/dsurface/dib.c +++ b/dlls/ddraw/dsurface/dib.c @@ -662,14 +662,14 @@ error: /* EnumAttachedSurfaces: generic */ /* EnumOverlayZOrders: generic, unimplemented */ -void DIB_DirectDrawSurface_flip_data(IDirectDrawSurfaceImpl* front, - IDirectDrawSurfaceImpl* back) +BOOL DIB_DirectDrawSurface_flip_data(IDirectDrawSurfaceImpl* front, + IDirectDrawSurfaceImpl* back, + DWORD dwFlags) { DIB_DirectDrawSurfaceImpl* front_priv = front->private; DIB_DirectDrawSurfaceImpl* back_priv = back->private; TRACE("(%p,%p)\n",front,back); - Main_DirectDrawSurface_flip_data(front, back); { HBITMAP tmp; @@ -696,6 +696,8 @@ void DIB_DirectDrawSurface_flip_data(IDirectDrawSurfaceImpl* front, front_priv->dib.client_memory = back_priv->dib.client_memory; back_priv->dib.client_memory = tmp; } + + return Main_DirectDrawSurface_flip_data(front, back, dwFlags); } /* Flip: generic */ diff --git a/dlls/ddraw/dsurface/dib.h b/dlls/ddraw/dsurface/dib.h index bfbad79b4bd..f4deba08e35 100644 --- a/dlls/ddraw/dsurface/dib.h +++ b/dlls/ddraw/dsurface/dib.h @@ -34,8 +34,9 @@ DIB_DirectDrawSurface_Create(IDirectDrawImpl *pDD, IUnknown *pUnkOuter); void DIB_DirectDrawSurface_final_release(IDirectDrawSurfaceImpl* This); -void DIB_DirectDrawSurface_flip_data(IDirectDrawSurfaceImpl* front, - IDirectDrawSurfaceImpl* back); +BOOL DIB_DirectDrawSurface_flip_data(IDirectDrawSurfaceImpl* front, + IDirectDrawSurfaceImpl* back, + DWORD dwFlags); void DIB_DirectDrawSurface_set_palette(IDirectDrawSurfaceImpl* This, IDirectDrawPaletteImpl* pal); diff --git a/dlls/ddraw/dsurface/main.c b/dlls/ddraw/dsurface/main.c index a11785b284d..28c29a28c42 100644 --- a/dlls/ddraw/dsurface/main.c +++ b/dlls/ddraw/dsurface/main.c @@ -316,8 +316,9 @@ Main_DirectDrawSurface_EnumOverlayZOrders(LPDIRECTDRAWSURFACE7 iface, return DD_OK; } -void Main_DirectDrawSurface_flip_data(IDirectDrawSurfaceImpl* front, - IDirectDrawSurfaceImpl* back) +BOOL Main_DirectDrawSurface_flip_data(IDirectDrawSurfaceImpl* front, + IDirectDrawSurfaceImpl* back, + DWORD dwFlags) { /* uniqueness_value? */ /* This is necessary. But is it safe? */ @@ -332,6 +333,8 @@ void Main_DirectDrawSurface_flip_data(IDirectDrawSurfaceImpl* front, front->dc_in_use = back->dc_in_use; back->dc_in_use = tmp; } + + return TRUE; } HRESULT WINAPI @@ -398,8 +401,8 @@ Main_DirectDrawSurface_Flip(LPDIRECTDRAWSURFACE7 iface, } TRACE("flip to backbuffer: %p\n",target); - This->flip_data(This, target); - This->flip_update(This); + if (This->flip_data(This, target, dwFlags)) + This->flip_update(This, dwFlags); return DD_OK; } diff --git a/dlls/ddraw/dsurface/main.h b/dlls/ddraw/dsurface/main.h index 8630964bcce..3fe2c1f1e9e 100644 --- a/dlls/ddraw/dsurface/main.h +++ b/dlls/ddraw/dsurface/main.h @@ -57,8 +57,9 @@ Main_DirectDrawSurface_update_palette(IDirectDrawSurfaceImpl* This, HWND Main_DirectDrawSurface_get_display_window(IDirectDrawSurfaceImpl* This); -void Main_DirectDrawSurface_flip_data(IDirectDrawSurfaceImpl* front, - IDirectDrawSurfaceImpl* back); +BOOL Main_DirectDrawSurface_flip_data(IDirectDrawSurfaceImpl* front, + IDirectDrawSurfaceImpl* back, + DWORD dwFlags); #define CHECK_LOST(This) \ do { \ diff --git a/dlls/ddraw/dsurface/thunks.c b/dlls/ddraw/dsurface/thunks.c index a4f9c30a79c..0feab4cbab0 100644 --- a/dlls/ddraw/dsurface/thunks.c +++ b/dlls/ddraw/dsurface/thunks.c @@ -6,9 +6,9 @@ #include "ddraw.h" #include "winerror.h" -#include "ddcomimpl.h" #include "dsurface/main.h" #include "dsurface/thunks.h" +#include "ddcomimpl.h" #define CONVERT(pdds) COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, \ IDirectDrawSurface3, \ diff --git a/dlls/ddraw/dsurface/user.c b/dlls/ddraw/dsurface/user.c index 47510c21e6d..b919fb6ff78 100644 --- a/dlls/ddraw/dsurface/user.c +++ b/dlls/ddraw/dsurface/user.c @@ -205,8 +205,9 @@ HRESULT User_DirectDrawSurface_duplicate_surface(IDirectDrawSurfaceImpl* This, &This->surface_desc, ppDup, NULL); } -void User_DirectDrawSurface_flip_data(IDirectDrawSurfaceImpl* front, - IDirectDrawSurfaceImpl* back) +BOOL User_DirectDrawSurface_flip_data(IDirectDrawSurfaceImpl* front, + IDirectDrawSurfaceImpl* back, + DWORD dwFlags) { USER_PRIV_VAR(front_priv, front); USER_PRIV_VAR(back_priv, back); @@ -218,10 +219,10 @@ void User_DirectDrawSurface_flip_data(IDirectDrawSurfaceImpl* front, back_priv->user.cached_dc = tmp; } - DIB_DirectDrawSurface_flip_data(front, back); + return DIB_DirectDrawSurface_flip_data(front, back, dwFlags); } -void User_DirectDrawSurface_flip_update(IDirectDrawSurfaceImpl* This) +void User_DirectDrawSurface_flip_update(IDirectDrawSurfaceImpl* This, DWORD dwFlags) { #ifdef SYNC_UPDATE assert(This->surface_desc.ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE); diff --git a/dlls/ddraw/dsurface/user.h b/dlls/ddraw/dsurface/user.h index c13922d1f06..9f12307ddbd 100644 --- a/dlls/ddraw/dsurface/user.h +++ b/dlls/ddraw/dsurface/user.h @@ -46,9 +46,11 @@ void User_DirectDrawSurface_update_palette(IDirectDrawSurfaceImpl* This, LPPALETTEENTRY palent); HRESULT User_DirectDrawSurface_duplicate_surface(IDirectDrawSurfaceImpl* This, LPDIRECTDRAWSURFACE7* ppDup); -void User_DirectDrawSurface_flip_data(IDirectDrawSurfaceImpl* front, - IDirectDrawSurfaceImpl* back); -void User_DirectDrawSurface_flip_update(IDirectDrawSurfaceImpl* This); +BOOL User_DirectDrawSurface_flip_data(IDirectDrawSurfaceImpl* front, + IDirectDrawSurfaceImpl* back, + DWORD dwFlags); +void User_DirectDrawSurface_flip_update(IDirectDrawSurfaceImpl* This, + DWORD dwFlags); HWND User_DirectDrawSurface_get_display_window(IDirectDrawSurfaceImpl* This); HRESULT User_DirectDrawSurface_get_dc(IDirectDrawSurfaceImpl* This, HDC* phDC);