Number of surface Lock/Unlocks must NOT match, so do NOT use it for
[wine] / dlls / ddraw / dsurface / dga2.c
1 /*              DirectDrawSurface XF86DGA implementation
2  *
3  * DGA2's specific DirectDrawSurface routines
4  */
5 #include "config.h"
6 #include "winerror.h"
7
8 #include <unistd.h>
9 #include <assert.h>
10 #include <fcntl.h>
11 #include <string.h>
12 #include <stdlib.h>
13 #include <stdio.h>
14
15 #include "debugtools.h"
16 #include "dga2_private.h"
17
18 DEFAULT_DEBUG_CHANNEL(ddraw);
19
20 #define DDPRIVATE(x) dga2_dd_private *ddpriv = ((dga2_dd_private*)(x)->private)
21 #define DPPRIVATE(x) dga2_dp_private *dppriv = ((dga2_dp_private*)(x)->private)
22 #define DSPRIVATE(x) dga2_ds_private *dspriv = ((dga2_ds_private*)(x)->private)
23
24 HRESULT WINAPI DGA2_IDirectDrawSurface4Impl_Flip(
25     LPDIRECTDRAWSURFACE4 iface,LPDIRECTDRAWSURFACE4 flipto,DWORD dwFlags
26 ) {
27     ICOM_THIS(IDirectDrawSurface4Impl,iface);
28     IDirectDrawSurface4Impl* iflipto=(IDirectDrawSurface4Impl*)flipto;
29     DWORD       xheight;
30     DSPRIVATE(This);
31     dga_ds_private      *fspriv;
32     LPBYTE      surf;
33
34     TRACE("(%p)->Flip(%p,%08lx)\n",This,iflipto,dwFlags);
35     iflipto = _common_find_flipto(This,iflipto);
36
37     /* and flip! */
38     fspriv = (dga_ds_private*)iflipto->private;
39     TSXDGASetViewport(display,DefaultScreen(display),0,fspriv->fb_height, XDGAFlipRetrace);
40     TSXDGASync(display,DefaultScreen(display));
41     TSXFlush(display);
42     if (iflipto->s.palette) {
43         DPPRIVATE(iflipto->s.palette);
44         if (dppriv->cm)
45             TSXDGAInstallColormap(display,DefaultScreen(display),dppriv->cm);
46     }
47
48     /* We need to switch the lowlevel surfaces, for DGA this is: */
49     /* The height within the framebuffer */
50     xheight             = dspriv->fb_height;
51     dspriv->fb_height   = fspriv->fb_height;
52     fspriv->fb_height   = xheight;
53
54     /* And the assciated surface pointer */
55     surf                                 = This->s.surface_desc.u1.lpSurface;
56     This->s.surface_desc.u1.lpSurface    = iflipto->s.surface_desc.u1.lpSurface;
57     iflipto->s.surface_desc.u1.lpSurface = surf;
58
59     return DD_OK;
60 }
61
62 ICOM_VTABLE(IDirectDrawSurface4) dga2_dds4vt = 
63 {
64     ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
65     IDirectDrawSurface4Impl_QueryInterface,
66     IDirectDrawSurface4Impl_AddRef,
67     DGA_IDirectDrawSurface4Impl_Release,
68     IDirectDrawSurface4Impl_AddAttachedSurface,
69     IDirectDrawSurface4Impl_AddOverlayDirtyRect,
70     IDirectDrawSurface4Impl_Blt,
71     IDirectDrawSurface4Impl_BltBatch,
72     IDirectDrawSurface4Impl_BltFast,
73     IDirectDrawSurface4Impl_DeleteAttachedSurface,
74     IDirectDrawSurface4Impl_EnumAttachedSurfaces,
75     IDirectDrawSurface4Impl_EnumOverlayZOrders,
76     DGA2_IDirectDrawSurface4Impl_Flip,
77     IDirectDrawSurface4Impl_GetAttachedSurface,
78     IDirectDrawSurface4Impl_GetBltStatus,
79     IDirectDrawSurface4Impl_GetCaps,
80     IDirectDrawSurface4Impl_GetClipper,
81     IDirectDrawSurface4Impl_GetColorKey,
82     IDirectDrawSurface4Impl_GetDC,
83     IDirectDrawSurface4Impl_GetFlipStatus,
84     IDirectDrawSurface4Impl_GetOverlayPosition,
85     IDirectDrawSurface4Impl_GetPalette,
86     IDirectDrawSurface4Impl_GetPixelFormat,
87     IDirectDrawSurface4Impl_GetSurfaceDesc,
88     IDirectDrawSurface4Impl_Initialize,
89     IDirectDrawSurface4Impl_IsLost,
90     IDirectDrawSurface4Impl_Lock,
91     IDirectDrawSurface4Impl_ReleaseDC,
92     IDirectDrawSurface4Impl_Restore,
93     IDirectDrawSurface4Impl_SetClipper,
94     IDirectDrawSurface4Impl_SetColorKey,
95     IDirectDrawSurface4Impl_SetOverlayPosition,
96     DGA_IDirectDrawSurface4Impl_SetPalette,
97     IDirectDrawSurface4Impl_Unlock,
98     IDirectDrawSurface4Impl_UpdateOverlay,
99     IDirectDrawSurface4Impl_UpdateOverlayDisplay,
100     IDirectDrawSurface4Impl_UpdateOverlayZOrder,
101     IDirectDrawSurface4Impl_GetDDInterface,
102     IDirectDrawSurface4Impl_PageLock,
103     IDirectDrawSurface4Impl_PageUnlock,
104     IDirectDrawSurface4Impl_SetSurfaceDesc,
105     IDirectDrawSurface4Impl_SetPrivateData,
106     IDirectDrawSurface4Impl_GetPrivateData,
107     IDirectDrawSurface4Impl_FreePrivateData,
108     IDirectDrawSurface4Impl_GetUniquenessValue,
109     IDirectDrawSurface4Impl_ChangeUniquenessValue
110 };