Ričardas Barkauskas : ddraw: Do not create implicit depth buffer.
Alexandre Julliard
julliard at winehq.org
Thu Aug 25 13:00:11 CDT 2011
Module: wine
Branch: master
Commit: bf7df8516991cf4d544cbc22e66692e25be24b73
URL: http://source.winehq.org/git/wine.git/?a=commit;h=bf7df8516991cf4d544cbc22e66692e25be24b73
Author: Ričardas Barkauskas <rbarkauskas at codeweavers.com>
Date: Mon Aug 22 15:46:41 2011 +0300
ddraw: Do not create implicit depth buffer.
---
dlls/ddraw/ddraw.c | 50 +++--------------------------------------------
dlls/ddraw/tests/d3d.c | 12 +++++++++++
2 files changed, 16 insertions(+), 46 deletions(-)
diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
index fc0dd93..d1754ec 100644
--- a/dlls/ddraw/ddraw.c
+++ b/dlls/ddraw/ddraw.c
@@ -2939,8 +2939,8 @@ static HRESULT ddraw_attach_d3d_device(IDirectDrawImpl *ddraw, IDirectDrawSurfac
localParameters.SwapEffect = WINED3DSWAPEFFECT_COPY;
localParameters.hDeviceWindow = window;
localParameters.Windowed = !(ddraw->cooperative_level & DDSCL_FULLSCREEN);
- localParameters.EnableAutoDepthStencil = TRUE;
- localParameters.AutoDepthStencilFormat = WINED3DFMT_D16_UNORM;
+ localParameters.EnableAutoDepthStencil = FALSE;
+ localParameters.AutoDepthStencilFormat = WINED3DFMT_UNKNOWN;
localParameters.Flags = 0;
localParameters.FullScreen_RefreshRateInHz = WINED3DPRESENT_RATE_DEFAULT;
localParameters.PresentationInterval = WINED3DPRESENT_INTERVAL_DEFAULT;
@@ -5923,50 +5923,8 @@ static HRESULT CDECL device_parent_create_depth_stencil(struct wined3d_device_pa
UINT width, UINT height, enum wined3d_format_id format, WINED3DMULTISAMPLE_TYPE multisample_type,
DWORD multisample_quality, BOOL discard, struct wined3d_surface **surface)
{
- struct IDirectDrawImpl *ddraw = ddraw_from_device_parent(device_parent);
- IDirectDrawSurface7 *ddraw7;
- IDirectDrawSurfaceImpl *ddraw_surface;
- DDSURFACEDESC2 ddsd;
- HRESULT hr;
-
- TRACE("device_parent %p, width %u, height %u, format %#x, multisample_type %#x,\n"
- "\tmultisample_quality %u, discard %u, surface %p.\n",
- device_parent, width, height, format, multisample_type, multisample_quality, discard, surface);
-
- *surface = NULL;
-
- /* Create a DirectDraw surface */
- memset(&ddsd, 0, sizeof(ddsd));
- ddsd.dwSize = sizeof(ddsd);
- ddsd.u4.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
- ddsd.dwFlags = DDSD_PIXELFORMAT | DDSD_WIDTH | DDSD_HEIGHT | DDSD_CAPS;
- ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
- ddsd.dwHeight = height;
- ddsd.dwWidth = width;
- if (format)
- {
- PixelFormat_WineD3DtoDD(&ddsd.u4.ddpfPixelFormat, format);
- }
- else
- {
- ddsd.dwFlags ^= DDSD_PIXELFORMAT;
- }
-
- ddraw->depthstencil = TRUE;
- hr = IDirectDraw7_CreateSurface(&ddraw->IDirectDraw7_iface, &ddsd, &ddraw7, NULL);
- ddraw->depthstencil = FALSE;
- if (FAILED(hr))
- {
- WARN("Failed to create depth/stencil surface, hr %#x.\n", hr);
- return hr;
- }
-
- ddraw_surface = impl_from_IDirectDrawSurface7(ddraw7);
- *surface = ddraw_surface->wined3d_surface;
- wined3d_surface_incref(*surface);
- IDirectDrawSurface7_Release(&ddraw_surface->IDirectDrawSurface7_iface);
-
- return D3D_OK;
+ ERR("DirectDraw doesn't have and shoudn't try creating implicit depth buffers.\n");
+ return E_NOTIMPL;
}
static HRESULT CDECL device_parent_create_volume(struct wined3d_device_parent *device_parent,
diff --git a/dlls/ddraw/tests/d3d.c b/dlls/ddraw/tests/d3d.c
index 685ed45..8946d48 100644
--- a/dlls/ddraw/tests/d3d.c
+++ b/dlls/ddraw/tests/d3d.c
@@ -100,11 +100,19 @@ static ULONG getRefcount(IUnknown *iface)
return IUnknown_Release(iface);
}
+static HRESULT WINAPI SurfaceCounter(IDirectDrawSurface7 *surface, DDSURFACEDESC2 *desc, void *context)
+{
+ UINT *num = context;
+ (*num)++;
+ IDirectDrawSurface_Release(surface);
+ return DDENUMRET_OK;
+}
static BOOL CreateDirect3D(void)
{
HRESULT rc;
DDSURFACEDESC2 ddsd;
+ UINT num;
rc = pDirectDrawCreateEx(NULL, (void**)&lpDD,
&IID_IDirectDraw7, NULL);
@@ -131,6 +139,10 @@ static BOOL CreateDirect3D(void)
if (FAILED(rc))
return FALSE;
+ num = 0;
+ IDirectDraw7_EnumSurfaces(lpDD, DDENUMSURFACES_ALL | DDENUMSURFACES_DOESEXIST, NULL, &num, SurfaceCounter);
+ ok(num == 1, "Has %d surfaces, expected 1\n", num);
+
memset(&ddsd, 0, sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT;
More information about the wine-cvs
mailing list