Signed-off-by: Henri Verbeet hverbeet@codeweavers.com --- dlls/d3d8/device.c | 47 +++++++++++++++++++++++------------------------ 1 file changed, 23 insertions(+), 24 deletions(-)
diff --git a/dlls/d3d8/device.c b/dlls/d3d8/device.c index 67996a78e70..3c83811103f 100644 --- a/dlls/d3d8/device.c +++ b/dlls/d3d8/device.c @@ -1144,29 +1144,26 @@ static HRESULT WINAPI d3d8_device_CreateIndexBuffer(IDirect3DDevice8 *iface, UIN return D3D_OK; }
-static HRESULT d3d8_device_create_surface(struct d3d8_device *device, UINT width, UINT height, - D3DFORMAT format, DWORD flags, IDirect3DSurface8 **surface, UINT usage, D3DPOOL pool, - D3DMULTISAMPLE_TYPE multisample_type, DWORD multisample_quality) +static HRESULT d3d8_device_create_surface(struct d3d8_device *device, enum wined3d_format_id format, + enum wined3d_multisample_type multisample_type, unsigned int bind_flags, unsigned int access, + unsigned int width, unsigned int height, IDirect3DSurface8 **surface) { struct wined3d_resource_desc desc; struct d3d8_surface *surface_impl; struct wined3d_texture *texture; HRESULT hr;
- TRACE("device %p, width %u, height %u, format %#x, flags %#x, surface %p, " - "usage %#x, pool %#x, multisample_type %#x, multisample_quality %u.\n", - device, width, height, format, flags, surface, - usage, pool, multisample_type, multisample_quality); + TRACE("device %p, format %#x, multisample_type %#x, bind_flags %#x, " + "access %#x, width %u, height %u, surface %p.\n", + device, format, multisample_type, bind_flags, access, width, height, surface);
desc.resource_type = WINED3D_RTYPE_TEXTURE_2D; - desc.format = wined3dformat_from_d3dformat(format); + desc.format = format; desc.multisample_type = multisample_type; - desc.multisample_quality = multisample_quality; - desc.usage = usage & WINED3DUSAGE_MASK; - if (pool == D3DPOOL_SCRATCH) - desc.usage |= WINED3DUSAGE_SCRATCH; - desc.bind_flags = wined3d_bind_flags_from_d3d8_usage(usage); - desc.access = wined3daccess_from_d3dpool(pool, usage); + desc.multisample_quality = 0; + desc.usage = 0; + desc.bind_flags = bind_flags; + desc.access = access; desc.width = width; desc.height = height; desc.depth = 1; @@ -1175,7 +1172,7 @@ static HRESULT d3d8_device_create_surface(struct d3d8_device *device, UINT width wined3d_mutex_lock();
if (FAILED(hr = wined3d_texture_create(device->wined3d_device, &desc, - 1, 1, flags, NULL, NULL, &d3d8_null_wined3d_parent_ops, &texture))) + 1, 1, 0, NULL, NULL, &d3d8_null_wined3d_parent_ops, &texture))) { wined3d_mutex_unlock(); WARN("Failed to create texture, hr %#x.\n", hr); @@ -1198,7 +1195,7 @@ static HRESULT WINAPI d3d8_device_CreateRenderTarget(IDirect3DDevice8 *iface, UI IDirect3DSurface8 **surface) { struct d3d8_device *device = impl_from_IDirect3DDevice8(iface); - DWORD flags = 0; + unsigned int access = WINED3D_RESOURCE_ACCESS_GPU;
TRACE("iface %p, width %u, height %u, format %#x, multisample_type %#x, lockable %#x, surface %p.\n", iface, width, height, format, multisample_type, lockable, surface); @@ -1208,10 +1205,10 @@ static HRESULT WINAPI d3d8_device_CreateRenderTarget(IDirect3DDevice8 *iface, UI
*surface = NULL; if (lockable) - flags |= WINED3D_TEXTURE_CREATE_MAPPABLE; + access |= WINED3D_RESOURCE_ACCESS_MAP_R | WINED3D_RESOURCE_ACCESS_MAP_W;
- return d3d8_device_create_surface(device, width, height, format, flags, surface, - D3DUSAGE_RENDERTARGET, D3DPOOL_DEFAULT, multisample_type, 0); + return d3d8_device_create_surface(device, wined3dformat_from_d3dformat(format), + multisample_type, WINED3D_BIND_RENDER_TARGET, access, width, height, surface); }
static HRESULT WINAPI d3d8_device_CreateDepthStencilSurface(IDirect3DDevice8 *iface, @@ -1228,9 +1225,9 @@ static HRESULT WINAPI d3d8_device_CreateDepthStencilSurface(IDirect3DDevice8 *if
*surface = NULL;
- /* TODO: Verify that Discard is false */ - return d3d8_device_create_surface(device, width, height, format, 0, - surface, D3DUSAGE_DEPTHSTENCIL, D3DPOOL_DEFAULT, multisample_type, 0); + return d3d8_device_create_surface(device, wined3dformat_from_d3dformat(format), + multisample_type, WINED3D_BIND_DEPTH_STENCIL, + WINED3D_RESOURCE_ACCESS_GPU, width, height, surface); }
/* IDirect3DDevice8Impl::CreateImageSurface returns surface with pool type SYSTEMMEM */ @@ -1238,14 +1235,16 @@ static HRESULT WINAPI d3d8_device_CreateImageSurface(IDirect3DDevice8 *iface, UI UINT height, D3DFORMAT format, IDirect3DSurface8 **surface) { struct d3d8_device *device = impl_from_IDirect3DDevice8(iface); + unsigned int access = WINED3D_RESOURCE_ACCESS_CPU + | WINED3D_RESOURCE_ACCESS_MAP_R | WINED3D_RESOURCE_ACCESS_MAP_W;
TRACE("iface %p, width %u, height %u, format %#x, surface %p.\n", iface, width, height, format, surface);
*surface = NULL;
- return d3d8_device_create_surface(device, width, height, format, 0, - surface, 0, D3DPOOL_SYSTEMMEM, D3DMULTISAMPLE_NONE, 0); + return d3d8_device_create_surface(device, wined3dformat_from_d3dformat(format), + WINED3D_MULTISAMPLE_NONE, 0, access, width, height, surface); }
static HRESULT WINAPI d3d8_device_CopyRects(IDirect3DDevice8 *iface,
Hi,
While running your changed tests on Windows, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=44888
Your paranoid android.
=== debian9 (build log) ===
X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 140 (RANDR) Minor opcode of failed request: 21 (RRSetCrtcConfig) X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 140 (RANDR) Minor opcode of failed request: 21 (RRSetCrtcConfig) X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 140 (RANDR) Minor opcode of failed request: 21 (RRSetCrtcConfig) X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 140 (RANDR) Minor opcode of failed request: 21 (RRSetCrtcConfig) X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 140 (RANDR) Minor opcode of failed request: 21 (RRSetCrtcConfig) X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 140 (RANDR) Minor opcode of failed request: 21 (RRSetCrtcConfig)
=== debian9 (build log) ===
X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 140 (RANDR) Minor opcode of failed request: 21 (RRSetCrtcConfig) X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 140 (RANDR) Minor opcode of failed request: 21 (RRSetCrtcConfig) X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 140 (RANDR) Minor opcode of failed request: 21 (RRSetCrtcConfig) X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 140 (RANDR) Minor opcode of failed request: 21 (RRSetCrtcConfig) X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 140 (RANDR) Minor opcode of failed request: 21 (RRSetCrtcConfig) X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 140 (RANDR) Minor opcode of failed request: 21 (RRSetCrtcConfig)