[D3D8] Add some depth/stencil buffer stuff

Christian Costa titan.costa at wanadoo.fr
Sat Apr 12 06:48:48 CDT 2003


Hi,

This patch makes Incoming Forces go further.
(and crash in vertex/pixel shaders stuff).

Bye.
Christian

Changelog :
Handle creation of a depth/stencil buffer when creating a device.
Implement IDirect3D8DeviceImpl_GetDepthStencilBuffer.

Christian Costa   titan.costa at wanadoo.fr

-------------- next part --------------
Index: d3d8_private.h
===================================================================
RCS file: /home/wine/wine/dlls/d3d8/d3d8_private.h,v
retrieving revision 1.16
diff -u -r1.16 d3d8_private.h
--- d3d8_private.h	12 Apr 2003 00:06:43 -0000	1.16
+++ d3d8_private.h	12 Apr 2003 11:14:50 -0000
@@ -239,6 +239,7 @@
     /* IDirect3DDevice8 fields */
     IDirect3D8Impl               *direct3d8;
     IDirect3DSurface8Impl        *backBuffer;
+    IDirect3DSurface8Impl        *depthStencilBuffer;
     D3DPRESENT_PARAMETERS         PresentParms;
     D3DDEVICE_CREATION_PARAMETERS CreateParms;
 
Index: device.c
===================================================================
RCS file: /home/wine/wine/dlls/d3d8/device.c,v
retrieving revision 1.36
diff -u -r1.36 device.c
--- device.c	30 Jan 2003 00:18:27 -0000	1.36
+++ device.c	12 Apr 2003 11:15:00 -0000
@@ -828,12 +828,22 @@
     SHORT retVal;
 
     switch (fmt) {
+    /* color buffer */
     case D3DFMT_A4R4G4B4:         retVal = 2; break;
     case D3DFMT_A8R8G8B8:         retVal = 4; break;
     case D3DFMT_X8R8G8B8:         retVal = 4; break;
     case D3DFMT_R8G8B8:           retVal = 3; break;
     case D3DFMT_R5G6B5:           retVal = 2; break;
     case D3DFMT_A1R5G5B5:         retVal = 2; break;
+    /* depth/stencil buffer */
+    case D3DFMT_D16_LOCKABLE:     retVal = 2; break;
+    case D3DFMT_D32:              retVal = 4; break;
+    case D3DFMT_D15S1:            retVal = 2; break;
+    case D3DFMT_D24S8:            retVal = 4; break;
+    case D3DFMT_D16:              retVal = 2; break;
+    case D3DFMT_D24X8:            retVal = 4; break;
+    case D3DFMT_D24X4S4:          retVal = 4; break;
+    /* unknown */				  
     case D3DFMT_UNKNOWN:
         /* Guess at the highest value of the above */
         TRACE("D3DFMT_UNKNOWN - Guessing at 4 bytes/pixel %d\n", fmt);
@@ -1587,10 +1597,12 @@
 
     ICOM_THIS(IDirect3DDevice8Impl,iface);
 
-    /* Note inc ref on returned surface *
-    IDirect3DSurface8Impl_AddRef((LPDIRECT3DSURFACE8) *ppBackBuffer); */
+    TRACE("(%p)->(%p)\n", This, ppZStencilSurface);
+    
+    /* Note inc ref on returned surface */
+    IDirect3DSurface8Impl_AddRef((LPDIRECT3DSURFACE8)This->depthStencilBuffer);
+    *ppZStencilSurface = (LPDIRECT3DSURFACE8)This->depthStencilBuffer;
 
-    FIXME("(%p) : stub\n", This);
     return D3D_OK;
 }
 
Index: directx.c
===================================================================
RCS file: /home/wine/wine/dlls/d3d8/directx.c,v
retrieving revision 1.18
diff -u -r1.18 directx.c
--- directx.c	1 Feb 2003 00:35:36 -0000	1.18
+++ directx.c	12 Apr 2003 11:15:02 -0000
@@ -530,6 +530,13 @@
                                             pPresentationParameters->BackBufferFormat,
                                             (LPDIRECT3DSURFACE8*) &object->backBuffer);
 
+    if (pPresentationParameters->EnableAutoDepthStencil)
+        IDirect3DDevice8Impl_CreateImageSurface((LPDIRECT3DDEVICE8) object,
+                                                pPresentationParameters->BackBufferWidth,
+                                                pPresentationParameters->BackBufferHeight,
+                                                pPresentationParameters->AutoDepthStencilFormat,
+                                                (LPDIRECT3DSURFACE8*) &object->depthStencilBuffer);
+    
     /* Now override the surface's Flip method (if in double buffering) ?COPIED from DDRAW!?
     ((x11_ds_private *) surface->private)->opengl_flip = TRUE;
     {



More information about the wine-patches mailing list