Henri Verbeet : ddraw: Remove another hack.
Alexandre Julliard
julliard at winehq.org
Tue Oct 5 12:03:11 CDT 2010
Module: wine
Branch: master
Commit: 5fa84c56c344927dcb13b12409fbf64d738438f4
URL: http://source.winehq.org/git/wine.git/?a=commit;h=5fa84c56c344927dcb13b12409fbf64d738438f4
Author: Henri Verbeet <hverbeet at codeweavers.com>
Date: Tue Oct 5 14:32:35 2010 +0200
ddraw: Remove another hack.
It breaks actual front buffer / back buffer flips.
---
dlls/ddraw/ddraw_private.h | 1 -
dlls/ddraw/device.c | 78 ++++++----------------------------------
dlls/wined3d/device.c | 86 --------------------------------------------
include/wine/wined3d.idl | 4 --
4 files changed, 11 insertions(+), 158 deletions(-)
diff --git a/dlls/ddraw/ddraw_private.h b/dlls/ddraw/ddraw_private.h
index 9b3f614..f9b9a48 100644
--- a/dlls/ddraw/ddraw_private.h
+++ b/dlls/ddraw/ddraw_private.h
@@ -359,7 +359,6 @@ struct IDirect3DDeviceImpl
IDirectDrawImpl *ddraw;
IWineD3DBuffer *indexbuffer;
IDirectDrawSurfaceImpl *target;
- BOOL OffScreenTarget;
/* Viewport management */
IDirect3DViewportImpl *viewport_list;
diff --git a/dlls/ddraw/device.c b/dlls/ddraw/device.c
index 30109e9..0056a40 100644
--- a/dlls/ddraw/device.c
+++ b/dlls/ddraw/device.c
@@ -311,34 +311,10 @@ IDirect3DDeviceImpl_7_Release(IDirect3DDevice7 *iface)
* IDirect3DVertexBuffer::Release will unset it.
*/
- /* Restore the render targets */
- if(This->OffScreenTarget)
- {
- WINED3DVIEWPORT vp;
-
- vp.X = 0;
- vp.Y = 0;
- vp.Width = This->ddraw->d3d_target->surface_desc.dwWidth;
- vp.Height = This->ddraw->d3d_target->surface_desc.dwHeight;
- vp.MinZ = 0.0;
- vp.MaxZ = 1.0;
- IWineD3DDevice_SetViewport(This->wineD3DDevice,
- &vp);
-
- /* Set the device up to render to the front buffer since the back buffer will
- * vanish soon.
- */
- IWineD3DDevice_SetRenderTarget(This->wineD3DDevice, 0,
- This->ddraw->d3d_target->WineD3DSurface,
- FALSE);
- /* This->target is the offscreen target.
- * This->ddraw->d3d_target is the target used by DDraw
- */
- TRACE("(%p) Release: Using %p as front buffer, %p as back buffer\n", This, This->ddraw->d3d_target, NULL);
- IWineD3DDevice_SetFrontBackBuffers(This->wineD3DDevice,
- This->ddraw->d3d_target->WineD3DSurface,
- NULL);
- }
+ /* Set the device up to render to the front buffer since the back
+ * buffer will vanish soon. */
+ IWineD3DDevice_SetRenderTarget(This->wineD3DDevice, 0,
+ This->ddraw->d3d_target->WineD3DSurface, TRUE);
/* Release the WineD3DDevice. This won't destroy it */
if(IWineD3DDevice_Release(This->wineD3DDevice) <= 0)
@@ -7024,46 +7000,14 @@ HRESULT d3d_device_init(IDirect3DDeviceImpl *device, IDirectDrawImpl *ddraw, IDi
device->wineD3DDevice = ddraw->wineD3DDevice;
IWineD3DDevice_AddRef(ddraw->wineD3DDevice);
- /* This is for apps which create a non-flip, non-d3d primary surface
- * and an offscreen D3DDEVICE surface, then render to the offscreen surface
- * and do a Blt from the offscreen to the primary surface.
- *
- * Set the offscreen D3DDDEVICE surface(=target) as the back buffer,
- * and the primary surface(=This->d3d_target) as the front buffer.
- *
- * This way the app will render to the D3DDEVICE surface and WineD3D
- * will catch the Blt was Back Buffer -> Front buffer blt and perform
- * a flip instead. This way we don't have to deal with a mixed GL / GDI
- * environment.
- *
- * This should be checked against windowed apps. The only app tested with
- * this is moto racer 2 during the loading screen.
- */
- TRACE("Is rendertarget: %s, d3d_target %p.\n",
- target->surface_desc.ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE ? "true" : "false", ddraw->d3d_target);
-
- if (!(target->surface_desc.ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE)
- && ddraw->d3d_target != target)
- {
- TRACE("Using %p as front buffer, %p as back buffer.\n", ddraw->d3d_target, target);
-
- hr = IWineD3DDevice_SetFrontBackBuffers(ddraw->wineD3DDevice,
- ddraw->d3d_target->WineD3DSurface, target->WineD3DSurface);
- if (FAILED(hr))
- {
- ERR("Failed to set front and back buffer, hr %#x.\n", hr);
- IParent_Release((IParent *)index_buffer_parent);
- ddraw_handle_table_destroy(&device->handle_table);
- return hr;
- }
-
- /* Render to the back buffer */
- IWineD3DDevice_SetRenderTarget(ddraw->wineD3DDevice, 0, target->WineD3DSurface, TRUE);
- device->OffScreenTarget = TRUE;
- }
- else
+ /* Render to the back buffer */
+ hr = IWineD3DDevice_SetRenderTarget(ddraw->wineD3DDevice, 0, target->WineD3DSurface, TRUE);
+ if (FAILED(hr))
{
- device->OffScreenTarget = FALSE;
+ ERR("Failed to set render target, hr %#x.\n", hr);
+ IParent_Release((IParent *)index_buffer_parent);
+ ddraw_handle_table_destroy(&device->handle_table);
+ return hr;
}
/* FIXME: This is broken. The target AddRef() makes some sense, because
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index ea4f69e..1e42409 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -5636,91 +5636,6 @@ static HRESULT WINAPI IWineD3DDeviceImpl_GetRenderTarget(IWineD3DDevice *iface,
return WINED3D_OK;
}
-static HRESULT WINAPI IWineD3DDeviceImpl_SetFrontBackBuffers(IWineD3DDevice *iface,
- IWineD3DSurface *front, IWineD3DSurface *back)
-{
- IWineD3DSurfaceImpl *front_impl = (IWineD3DSurfaceImpl *)front;
- IWineD3DSurfaceImpl *back_impl = (IWineD3DSurfaceImpl *)back;
- IWineD3DSwapChainImpl *swapchain;
- HRESULT hr;
-
- TRACE("iface %p, front %p, back %p.\n", iface, front, back);
-
- if (FAILED(hr = IWineD3DDevice_GetSwapChain(iface, 0, (IWineD3DSwapChain **)&swapchain)))
- {
- ERR("Failed to get the swapchain, hr %#x.\n", hr);
- return hr;
- }
-
- if (front_impl && !(front_impl->resource.usage & WINED3DUSAGE_RENDERTARGET))
- {
- ERR("Trying to set a front buffer which doesn't have WINED3DUSAGE_RENDERTARGET usage.\n");
- IWineD3DSwapChain_Release((IWineD3DSwapChain *)swapchain);
- return WINED3DERR_INVALIDCALL;
- }
-
- if (back_impl)
- {
- if (!(back_impl->resource.usage & WINED3DUSAGE_RENDERTARGET))
- {
- ERR("Trying to set a back buffer which doesn't have WINED3DUSAGE_RENDERTARGET usage.\n");
- IWineD3DSwapChain_Release((IWineD3DSwapChain *)swapchain);
- return WINED3DERR_INVALIDCALL;
- }
-
- if (!swapchain->back_buffers)
- {
- swapchain->back_buffers = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*swapchain->back_buffers));
- if (!swapchain->back_buffers)
- {
- ERR("Failed to allocate back buffer array memory.\n");
- IWineD3DSwapChain_Release((IWineD3DSwapChain *)swapchain);
- return E_OUTOFMEMORY;
- }
- }
- }
-
- if (swapchain->front_buffer != front_impl)
- {
- TRACE("Changing the front buffer from %p to %p.\n", swapchain->front_buffer, front_impl);
-
- if (swapchain->front_buffer)
- surface_set_container(swapchain->front_buffer, WINED3D_CONTAINER_NONE, NULL);
- swapchain->front_buffer = front_impl;
-
- if (front_impl)
- surface_set_container(front_impl, WINED3D_CONTAINER_SWAPCHAIN, (IWineD3DBase *)swapchain);
- }
-
- if (swapchain->back_buffers[0] != back_impl)
- {
- TRACE("Changing the back buffer from %p to %p.\n", swapchain->back_buffers[0], back_impl);
-
- if (swapchain->back_buffers[0])
- surface_set_container(swapchain->back_buffers[0], WINED3D_CONTAINER_NONE, NULL);
- swapchain->back_buffers[0] = back_impl;
-
- if (back_impl)
- {
- swapchain->presentParms.BackBufferWidth = back_impl->currentDesc.Width;
- swapchain->presentParms.BackBufferHeight = back_impl->currentDesc.Height;
- swapchain->presentParms.BackBufferFormat = back_impl->resource.format->id;
- swapchain->presentParms.BackBufferCount = 1;
-
- surface_set_container(back_impl, WINED3D_CONTAINER_SWAPCHAIN, (IWineD3DBase *)swapchain);
- }
- else
- {
- swapchain->presentParms.BackBufferCount = 0;
- HeapFree(GetProcessHeap(), 0, swapchain->back_buffers);
- swapchain->back_buffers = NULL;
- }
- }
-
- IWineD3DSwapChain_Release((IWineD3DSwapChain *)swapchain);
- return WINED3D_OK;
-}
-
static HRESULT WINAPI IWineD3DDeviceImpl_GetDepthStencilSurface(IWineD3DDevice *iface, IWineD3DSurface **depth_stencil)
{
IWineD3DDeviceImpl *device = (IWineD3DDeviceImpl *)iface;
@@ -6803,7 +6718,6 @@ static const IWineD3DDeviceVtbl IWineD3DDevice_Vtbl =
IWineD3DDeviceImpl_GetRenderState,
IWineD3DDeviceImpl_SetRenderTarget,
IWineD3DDeviceImpl_GetRenderTarget,
- IWineD3DDeviceImpl_SetFrontBackBuffers,
IWineD3DDeviceImpl_SetSamplerState,
IWineD3DDeviceImpl_GetSamplerState,
IWineD3DDeviceImpl_SetScissorRect,
diff --git a/include/wine/wined3d.idl b/include/wine/wined3d.idl
index 548a08a..d990f70 100644
--- a/include/wine/wined3d.idl
+++ b/include/wine/wined3d.idl
@@ -3137,10 +3137,6 @@ interface IWineD3DDevice : IUnknown
[in] DWORD render_target_idx,
[out] IWineD3DSurface **render_target
);
- HRESULT SetFrontBackBuffers(
- [in] IWineD3DSurface *front,
- [in] IWineD3DSurface *back
- );
HRESULT SetSamplerState(
[in] DWORD sampler_idx,
[in] WINED3DSAMPLERSTATETYPE state,
More information about the wine-cvs
mailing list