ddraw: User memory surfaces should be created with an explicit pitch.

This commit is contained in:
Henri Verbeet 2014-03-04 10:21:35 +01:00 committed by Alexandre Julliard
parent da2fafca8d
commit 162bc8db6e

View file

@ -5812,11 +5812,21 @@ HRESULT ddraw_surface_create(struct ddraw *ddraw, const DDSURFACEDESC2 *surface_
* field. Frank Herbert's Dune specifies a NULL pointer for lpSurface. */
if ((desc->ddsCaps.dwCaps & DDSCAPS_ALLOCONLOAD) || !desc->lpSurface)
desc->dwFlags &= ~DDSD_LPSURFACE;
if ((desc->dwFlags & DDSD_LPSURFACE) && wined3d_desc.pool != WINED3D_POOL_SYSTEM_MEM)
if (desc->dwFlags & DDSD_LPSURFACE)
{
WARN("User memory surfaces should be in the system memory pool.\n");
HeapFree(GetProcessHeap(), 0, texture);
return DDERR_INVALIDCAPS;
if (wined3d_desc.pool != WINED3D_POOL_SYSTEM_MEM)
{
WARN("User memory surfaces should be in the system memory pool.\n");
HeapFree(GetProcessHeap(), 0, texture);
return DDERR_INVALIDCAPS;
}
if (!(desc->dwFlags & DDSD_PITCH))
{
WARN("User memory surfaces should explicitly specify the pitch.\n");
HeapFree(GetProcessHeap(), 0, texture);
return DDERR_INVALIDPARAMS;
}
}
if (desc->ddsCaps.dwCaps & (DDSCAPS_OVERLAY))
@ -6057,17 +6067,9 @@ HRESULT ddraw_surface_init(struct ddraw_surface *surface, struct ddraw *ddraw, s
if (desc->dwFlags & DDSD_LPSURFACE)
{
UINT pitch = 0;
if (desc->dwFlags & DDSD_PITCH)
{
pitch = desc->u1.lPitch;
surface->surface_desc.u1.lPitch = pitch;
}
if (FAILED(hr = wined3d_surface_update_desc(wined3d_surface, wined3d_desc.width,
wined3d_desc.height, wined3d_desc.format, WINED3D_MULTISAMPLE_NONE, 0,
desc->lpSurface, pitch)))
desc->lpSurface, desc->u1.lPitch)))
{
ERR("Failed to set surface memory, hr %#x.\n", hr);
return hr;