winehq.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2025
February
January
2024
December
November
October
September
August
July
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
May
April
March
February
January
2011
December
November
October
September
August
July
June
May
April
March
February
January
2010
December
November
October
September
August
July
June
May
April
March
February
January
2009
December
November
October
September
August
July
June
May
April
March
February
January
2008
December
November
October
September
August
July
June
May
April
March
February
January
2007
December
November
October
September
August
July
June
May
April
March
February
January
2006
December
November
October
September
August
July
June
May
April
March
February
January
2005
December
November
October
September
August
July
June
May
April
March
February
January
2004
December
November
October
September
August
July
June
May
April
March
February
January
2003
December
November
October
September
August
July
June
May
April
March
February
January
2002
December
November
October
September
August
July
June
May
April
March
February
January
2001
December
November
October
September
August
July
June
May
April
March
February
List overview
wine-commits
August 2014
----- 2025 -----
February 2025
January 2025
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
----- 2008 -----
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
----- 2007 -----
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
----- 2006 -----
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
----- 2005 -----
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
----- 2004 -----
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
February 2004
January 2004
----- 2003 -----
December 2003
November 2003
October 2003
September 2003
August 2003
July 2003
June 2003
May 2003
April 2003
March 2003
February 2003
January 2003
----- 2002 -----
December 2002
November 2002
October 2002
September 2002
August 2002
July 2002
June 2002
May 2002
April 2002
March 2002
February 2002
January 2002
----- 2001 -----
December 2001
November 2001
October 2001
September 2001
August 2001
July 2001
June 2001
May 2001
April 2001
March 2001
February 2001
wine-commits@winehq.org
2 participants
304 discussions
Start a n
N
ew thread
Henri Verbeet : d3d10core: Implement d3d10_device_OMSetRenderTargets().
by Alexandre Julliard
22 Aug '14
22 Aug '14
Module: wine Branch: master Commit: 28d7affa902f347cfb08d1a4b5c8338bf93d323e URL:
http://source.winehq.org/git/wine.git/?a=commit;h=28d7affa902f347cfb08d1a4b…
Author: Henri Verbeet <hverbeet(a)codeweavers.com> Date: Fri Aug 22 12:32:03 2014 +0200 d3d10core: Implement d3d10_device_OMSetRenderTargets(). --- dlls/d3d10core/d3d10core_private.h | 2 + dlls/d3d10core/device.c | 22 ++++++++++- dlls/d3d10core/view.c | 78 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 101 insertions(+), 1 deletion(-) diff --git a/dlls/d3d10core/d3d10core_private.h b/dlls/d3d10core/d3d10core_private.h index 8497f3a..bf6a592 100644 --- a/dlls/d3d10core/d3d10core_private.h +++ b/dlls/d3d10core/d3d10core_private.h @@ -125,6 +125,7 @@ struct d3d10_depthstencil_view ID3D10DepthStencilView ID3D10DepthStencilView_iface; LONG refcount; + struct wined3d_rendertarget_view *wined3d_view; D3D10_DEPTH_STENCIL_VIEW_DESC desc; ID3D10Resource *resource; ID3D10Device1 *device; @@ -132,6 +133,7 @@ struct d3d10_depthstencil_view HRESULT d3d10_depthstencil_view_init(struct d3d10_depthstencil_view *view, struct d3d10_device *device, ID3D10Resource *resource, const D3D10_DEPTH_STENCIL_VIEW_DESC *desc) DECLSPEC_HIDDEN; +struct d3d10_depthstencil_view *unsafe_impl_from_ID3D10DepthStencilView(ID3D10DepthStencilView *iface) DECLSPEC_HIDDEN; /* ID3D10RenderTargetView */ struct d3d10_rendertarget_view diff --git a/dlls/d3d10core/device.c b/dlls/d3d10core/device.c index 9668964..92b4622 100644 --- a/dlls/d3d10core/device.c +++ b/dlls/d3d10core/device.c @@ -395,8 +395,28 @@ static void STDMETHODCALLTYPE d3d10_device_OMSetRenderTargets(ID3D10Device1 *ifa UINT render_target_view_count, ID3D10RenderTargetView *const *render_target_views, ID3D10DepthStencilView *depth_stencil_view) { - FIXME("iface %p, render_target_view_count %u, render_target_views %p, depth_stencil_view %p\n", + struct d3d10_device *device = impl_from_ID3D10Device(iface); + struct d3d10_depthstencil_view *dsv; + unsigned int i; + + TRACE("iface %p, render_target_view_count %u, render_target_views %p, depth_stencil_view %p.\n", iface, render_target_view_count, render_target_views, depth_stencil_view); + + for (i = 0; i < render_target_view_count; ++i) + { + struct d3d10_rendertarget_view *rtv = unsafe_impl_from_ID3D10RenderTargetView(render_target_views[i]); + + wined3d_device_set_rendertarget_view(device->wined3d_device, i, + rtv ? rtv->wined3d_view : NULL, FALSE); + } + for (; i < D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT; ++i) + { + wined3d_device_set_rendertarget_view(device->wined3d_device, i, NULL, FALSE); + } + + dsv = unsafe_impl_from_ID3D10DepthStencilView(depth_stencil_view); + wined3d_device_set_depth_stencil_view(device->wined3d_device, + dsv ? dsv->wined3d_view : NULL); } static void STDMETHODCALLTYPE d3d10_device_OMSetBlendState(ID3D10Device1 *iface, diff --git a/dlls/d3d10core/view.c b/dlls/d3d10core/view.c index fb69f51..27b09a8 100644 --- a/dlls/d3d10core/view.c +++ b/dlls/d3d10core/view.c @@ -404,6 +404,7 @@ static ULONG STDMETHODCALLTYPE d3d10_depthstencil_view_Release(ID3D10DepthStenci if (!refcount) { + wined3d_rendertarget_view_decref(This->wined3d_view); ID3D10Resource_Release(This->resource); ID3D10Device1_Release(This->device); HeapFree(GetProcessHeap(), 0, This); @@ -492,9 +493,63 @@ static const struct ID3D10DepthStencilViewVtbl d3d10_depthstencil_view_vtbl = d3d10_depthstencil_view_GetDesc, }; +static void wined3d_depth_stencil_view_desc_from_d3d10core(struct wined3d_rendertarget_view_desc *wined3d_desc, + const D3D10_DEPTH_STENCIL_VIEW_DESC *desc) +{ + wined3d_desc->format_id = wined3dformat_from_dxgi_format(desc->Format); + + switch (desc->ViewDimension) + { + case D3D10_DSV_DIMENSION_TEXTURE1D: + wined3d_desc->u.texture.level_idx = desc->u.Texture1D.MipSlice; + wined3d_desc->u.texture.layer_idx = 0; + wined3d_desc->u.texture.layer_count = 1; + break; + + case D3D10_DSV_DIMENSION_TEXTURE1DARRAY: + wined3d_desc->u.texture.level_idx = desc->u.Texture1DArray.MipSlice; + wined3d_desc->u.texture.layer_idx = desc->u.Texture1DArray.FirstArraySlice; + wined3d_desc->u.texture.layer_count = desc->u.Texture1DArray.ArraySize; + break; + + case D3D10_DSV_DIMENSION_TEXTURE2D: + wined3d_desc->u.texture.level_idx = desc->u.Texture2D.MipSlice; + wined3d_desc->u.texture.layer_idx = 0; + wined3d_desc->u.texture.layer_count = 1; + break; + + case D3D10_DSV_DIMENSION_TEXTURE2DARRAY: + wined3d_desc->u.texture.level_idx = desc->u.Texture2DArray.MipSlice; + wined3d_desc->u.texture.layer_idx = desc->u.Texture2DArray.FirstArraySlice; + wined3d_desc->u.texture.layer_count = desc->u.Texture2DArray.ArraySize; + break; + + case D3D10_DSV_DIMENSION_TEXTURE2DMS: + wined3d_desc->u.texture.level_idx = 0; + wined3d_desc->u.texture.layer_idx = 0; + wined3d_desc->u.texture.layer_count = 1; + break; + + case D3D10_DSV_DIMENSION_TEXTURE2DMSARRAY: + wined3d_desc->u.texture.level_idx = 0; + wined3d_desc->u.texture.layer_idx = desc->u.Texture2DMSArray.FirstArraySlice; + wined3d_desc->u.texture.layer_count = desc->u.Texture2DMSArray.ArraySize; + break; + + default: + FIXME("Unhandled view dimension %#x.\n", desc->ViewDimension); + wined3d_desc->u.texture.level_idx = 0; + wined3d_desc->u.texture.layer_idx = 0; + wined3d_desc->u.texture.layer_count = 1; + break; + } +} + HRESULT d3d10_depthstencil_view_init(struct d3d10_depthstencil_view *view, struct d3d10_device *device, ID3D10Resource *resource, const D3D10_DEPTH_STENCIL_VIEW_DESC *desc) { + struct wined3d_rendertarget_view_desc wined3d_desc; + struct wined3d_resource *wined3d_resource; HRESULT hr; view->ID3D10DepthStencilView_iface.lpVtbl = &d3d10_depthstencil_view_vtbl; @@ -510,6 +565,20 @@ HRESULT d3d10_depthstencil_view_init(struct d3d10_depthstencil_view *view, struc view->desc = *desc; } + if (!(wined3d_resource = wined3d_resource_from_resource(resource))) + { + ERR("Failed to get wined3d resource for d3d10 resource %p.\n", resource); + return E_FAIL; + } + + wined3d_depth_stencil_view_desc_from_d3d10core(&wined3d_desc, &view->desc); + if (FAILED(hr = wined3d_rendertarget_view_create(&wined3d_desc, wined3d_resource, + view, &d3d10_null_wined3d_parent_ops, &view->wined3d_view))) + { + WARN("Failed to create a wined3d rendertarget view, hr %#x.\n", hr); + return hr; + } + view->resource = resource; ID3D10Resource_AddRef(resource); view->device = &device->ID3D10Device1_iface; @@ -518,6 +587,15 @@ HRESULT d3d10_depthstencil_view_init(struct d3d10_depthstencil_view *view, struc return S_OK; } +struct d3d10_depthstencil_view *unsafe_impl_from_ID3D10DepthStencilView(ID3D10DepthStencilView *iface) +{ + if (!iface) + return NULL; + assert(iface->lpVtbl == &d3d10_depthstencil_view_vtbl); + + return impl_from_ID3D10DepthStencilView(iface); +} + static inline struct d3d10_rendertarget_view *impl_from_ID3D10RenderTargetView(ID3D10RenderTargetView *iface) { return CONTAINING_RECORD(iface, struct d3d10_rendertarget_view, ID3D10RenderTargetView_iface);
1
0
0
0
Henri Verbeet : wined3d: Get rid of wined3d_device_color_fill().
by Alexandre Julliard
22 Aug '14
22 Aug '14
Module: wine Branch: master Commit: 736b9e1c1c4ae3caf7b0dc78b5ffaef8b00cc954 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=736b9e1c1c4ae3caf7b0dc78b…
Author: Henri Verbeet <hverbeet(a)codeweavers.com> Date: Fri Aug 22 12:32:02 2014 +0200 wined3d: Get rid of wined3d_device_color_fill(). --- dlls/d3d10core/device.c | 8 ++++--- dlls/d3d9/device.c | 10 +++++++-- dlls/wined3d/device.c | 54 ++++++++++++++++------------------------------- dlls/wined3d/wined3d.spec | 3 +-- include/wine/wined3d.h | 6 ++---- 5 files changed, 34 insertions(+), 47 deletions(-) diff --git a/dlls/d3d10core/device.c b/dlls/d3d10core/device.c index ac43ca6..9668964 100644 --- a/dlls/d3d10core/device.c +++ b/dlls/d3d10core/device.c @@ -535,14 +535,16 @@ static void STDMETHODCALLTYPE d3d10_device_UpdateSubresource(ID3D10Device1 *ifac static void STDMETHODCALLTYPE d3d10_device_ClearRenderTargetView(ID3D10Device1 *iface, ID3D10RenderTargetView *render_target_view, const FLOAT color_rgba[4]) { - struct d3d10_device *This = impl_from_ID3D10Device(iface); + struct d3d10_device *device = impl_from_ID3D10Device(iface); struct d3d10_rendertarget_view *view = unsafe_impl_from_ID3D10RenderTargetView(render_target_view); const struct wined3d_color color = {color_rgba[0], color_rgba[1], color_rgba[2], color_rgba[3]}; + HRESULT hr; - TRACE("iface %p, render_target_view %p, color_rgba [%f %f %f %f]\n", + TRACE("iface %p, render_target_view %p, color_rgba {%.8e, %.8e, %.8e, %.8e}.\n", iface, render_target_view, color_rgba[0], color_rgba[1], color_rgba[2], color_rgba[3]); - wined3d_device_clear_rendertarget_view(This->wined3d_device, view->wined3d_view, &color); + if (FAILED(hr = wined3d_device_clear_rendertarget_view(device->wined3d_device, view->wined3d_view, NULL, &color))) + ERR("Failed to clear view, hr %#x.\n", hr); } static void STDMETHODCALLTYPE d3d10_device_ClearDepthStencilView(ID3D10Device1 *iface, diff --git a/dlls/d3d9/device.c b/dlls/d3d9/device.c index 2d05e11..7b9b635 100644 --- a/dlls/d3d9/device.c +++ b/dlls/d3d9/device.c @@ -1271,8 +1271,14 @@ static HRESULT WINAPI d3d9_device_ColorFill(IDirect3DDevice9Ex *iface, return D3DERR_INVALIDCALL; } - /* Colorfill can only be used on rendertarget surfaces, or offscreen plain surfaces in D3DPOOL_DEFAULT */ - hr = wined3d_device_color_fill(device->wined3d_device, surface_impl->wined3d_surface, rect, &c); + if (desc.pool != WINED3D_POOL_DEFAULT && desc.pool != WINED3D_POOL_SYSTEM_MEM) + { + WARN("Color-fill not allowed on surfaces in pool %#x.\n", desc.pool); + return D3DERR_INVALIDCALL; + } + + hr = wined3d_device_clear_rendertarget_view(device->wined3d_device, + d3d9_surface_get_rendertarget_view(surface_impl), rect, &c); wined3d_mutex_unlock(); diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index 796d995..9df422f 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -609,9 +609,11 @@ static void device_load_logo(struct wined3d_device *device, const char *filename } else { + const RECT rect = {0, 0, surface->resource.width, surface->resource.height}; const struct wined3d_color c = {1.0f, 1.0f, 1.0f, 1.0f}; + /* Fill the surface with a white color to show that wined3d is there */ - wined3d_device_color_fill(device, surface, NULL, &c); + surface_color_fill(surface, &rect, &c); } out: @@ -3658,30 +3660,6 @@ HRESULT CDECL wined3d_device_update_surface(struct wined3d_device *device, return surface_upload_from_surface(dst_surface, dst_point, src_surface, src_rect); } -HRESULT CDECL wined3d_device_color_fill(struct wined3d_device *device, - struct wined3d_surface *surface, const RECT *rect, const struct wined3d_color *color) -{ - RECT r; - - TRACE("device %p, surface %p, rect %s, color {%.8e, %.8e, %.8e, %.8e}.\n", - device, surface, wine_dbgstr_rect(rect), - color->r, color->g, color->b, color->a); - - if (surface->resource.pool != WINED3D_POOL_DEFAULT && surface->resource.pool != WINED3D_POOL_SYSTEM_MEM) - { - WARN("Color-fill not allowed on %s surfaces.\n", debug_d3dpool(surface->resource.pool)); - return WINED3DERR_INVALIDCALL; - } - - if (!rect) - { - SetRect(&r, 0, 0, surface->resource.width, surface->resource.height); - rect = &r; - } - - return surface_color_fill(surface, rect, color); -} - void CDECL wined3d_device_copy_resource(struct wined3d_device *device, struct wined3d_resource *dst_resource, struct wined3d_resource *src_resource) { @@ -3753,33 +3731,37 @@ void CDECL wined3d_device_copy_resource(struct wined3d_device *device, } } -void CDECL wined3d_device_clear_rendertarget_view(struct wined3d_device *device, - struct wined3d_rendertarget_view *view, const struct wined3d_color *color) +HRESULT CDECL wined3d_device_clear_rendertarget_view(struct wined3d_device *device, + struct wined3d_rendertarget_view *view, const RECT *rect, const struct wined3d_color *color) { struct wined3d_resource *resource; - HRESULT hr; - RECT rect; + RECT r; - TRACE("device %p, view %p, color {%.8e, %.8e, %.8e, %.8e}.\n", - device, view, color->r, color->g, color->b, color->a); + TRACE("device %p, view %p, rect %s, color {%.8e, %.8e, %.8e, %.8e}.\n", + device, view, wine_dbgstr_rect(rect), color->r, color->g, color->b, color->a); resource = view->resource; if (resource->type != WINED3D_RTYPE_TEXTURE && resource->type != WINED3D_RTYPE_CUBE_TEXTURE) { FIXME("Not implemented for %s resources.\n", debug_d3dresourcetype(resource->type)); - return; + return WINED3DERR_INVALIDCALL; } if (view->depth > 1) { FIXME("Layered clears not implemented.\n"); - return; + return WINED3DERR_INVALIDCALL; + } + + if (!rect) + { + SetRect(&r, 0, 0, view->width, view->height); + rect = &r; } - SetRect(&rect, 0, 0, view->width, view->height); resource = wined3d_texture_get_sub_resource(wined3d_texture_from_resource(resource), view->sub_resource_idx); - if (FAILED(hr = surface_color_fill(surface_from_resource(resource), &rect, color))) - ERR("Color fill failed, hr %#x.\n", hr); + + return surface_color_fill(surface_from_resource(resource), rect, color); } struct wined3d_rendertarget_view * CDECL wined3d_device_get_rendertarget_view(const struct wined3d_device *device, diff --git a/dlls/wined3d/wined3d.spec b/dlls/wined3d/wined3d.spec index 2b4236b..0ee16c4 100644 --- a/dlls/wined3d/wined3d.spec +++ b/dlls/wined3d/wined3d.spec @@ -36,8 +36,7 @@ @ cdecl wined3d_device_begin_scene(ptr) @ cdecl wined3d_device_begin_stateblock(ptr) @ cdecl wined3d_device_clear(ptr long ptr long ptr float long) -@ cdecl wined3d_device_clear_rendertarget_view(ptr ptr ptr) -@ cdecl wined3d_device_color_fill(ptr ptr ptr ptr) +@ cdecl wined3d_device_clear_rendertarget_view(ptr ptr ptr ptr) @ cdecl wined3d_device_copy_resource(ptr ptr ptr) @ cdecl wined3d_device_create(ptr long long ptr long long ptr ptr) @ cdecl wined3d_device_decref(ptr) diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h index ca4a6af..6dda931 100644 --- a/include/wine/wined3d.h +++ b/include/wine/wined3d.h @@ -2095,10 +2095,8 @@ HRESULT __cdecl wined3d_device_begin_scene(struct wined3d_device *device); HRESULT __cdecl wined3d_device_begin_stateblock(struct wined3d_device *device); HRESULT __cdecl wined3d_device_clear(struct wined3d_device *device, DWORD rect_count, const RECT *rects, DWORD flags, const struct wined3d_color *color, float z, DWORD stencil); -void __cdecl wined3d_device_clear_rendertarget_view(struct wined3d_device *device, - struct wined3d_rendertarget_view *rendertarget_view, const struct wined3d_color *color); -HRESULT __cdecl wined3d_device_color_fill(struct wined3d_device *device, struct wined3d_surface *surface, - const RECT *rect, const struct wined3d_color *color); +HRESULT __cdecl wined3d_device_clear_rendertarget_view(struct wined3d_device *device, + struct wined3d_rendertarget_view *view, const RECT *rect, const struct wined3d_color *color); void __cdecl wined3d_device_copy_resource(struct wined3d_device *device, struct wined3d_resource *dst_resource, struct wined3d_resource *src_resource); HRESULT __cdecl wined3d_device_create(struct wined3d *wined3d, UINT adapter_idx,
1
0
0
0
Henri Verbeet : wined3d: Use rendertarget views for depth/ stencil buffers instead of surfaces.
by Alexandre Julliard
22 Aug '14
22 Aug '14
Module: wine Branch: master Commit: 07985a8c3836946c20488203a6f35cef0bf1928b URL:
http://source.winehq.org/git/wine.git/?a=commit;h=07985a8c3836946c20488203a…
Author: Henri Verbeet <hverbeet(a)codeweavers.com> Date: Fri Aug 22 12:32:01 2014 +0200 wined3d: Use rendertarget views for depth/stencil buffers instead of surfaces. I don't think the difference between d3d10 depth/stencil and rendertarget views is large enough to justify a separate type. Unfortunately that does make the name "wined3d_rendertarget_view" slightly awkward. --- dlls/d3d8/device.c | 17 +++-- dlls/d3d9/device.c | 11 +-- dlls/ddraw/ddraw.c | 13 ++-- dlls/ddraw/device.c | 6 +- dlls/wined3d/context.c | 14 ++-- dlls/wined3d/cs.c | 39 +++++------ dlls/wined3d/device.c | 151 +++++++++++++++++++++-------------------- dlls/wined3d/drawprim.c | 6 +- dlls/wined3d/state.c | 4 +- dlls/wined3d/surface.c | 19 ++++-- dlls/wined3d/swapchain.c | 30 +++++--- dlls/wined3d/wined3d.spec | 4 +- dlls/wined3d/wined3d_private.h | 7 +- include/wine/wined3d.h | 5 +- 14 files changed, 181 insertions(+), 145 deletions(-) Diff:
http://source.winehq.org/git/wine.git/?a=commitdiff;h=07985a8c3836946c20488…
1
0
0
0
Henri Verbeet : wined3d: Also update the container in wined3d_surface_update_desc().
by Alexandre Julliard
22 Aug '14
22 Aug '14
Module: wine Branch: master Commit: 9f9731410bf79d3bee8b2ce16bee2a7f9962e0f2 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=9f9731410bf79d3bee8b2ce16…
Author: Henri Verbeet <hverbeet(a)codeweavers.com> Date: Fri Aug 22 12:32:00 2014 +0200 wined3d: Also update the container in wined3d_surface_update_desc(). This fixes a bug exposed by commit 415b8037206b1d4c104d9623037458739f6cfdf5. In particular, wined3d_resource_update_draw_binding() uses the multisample type to determine to appropriate draw binding, and since we never updated that for the container, we could end up with an incorrect draw binding after a device reset. --- dlls/wined3d/surface.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c index b466524..1f96872 100644 --- a/dlls/wined3d/surface.c +++ b/dlls/wined3d/surface.c @@ -2372,6 +2372,7 @@ HRESULT CDECL wined3d_surface_update_desc(struct wined3d_surface *surface, const struct wined3d_gl_info *gl_info = &device->adapter->gl_info; const struct wined3d_format *format = wined3d_get_format(gl_info, format_id); UINT resource_size = wined3d_format_calculate_size(format, device->surface_alignment, width, height, 1); + struct wined3d_texture *texture; BOOL create_dib = FALSE; HRESULT hr; DWORD valid_location = 0; @@ -2448,6 +2449,13 @@ HRESULT CDECL wined3d_surface_update_desc(struct wined3d_surface *surface, if (surface->resource.map_binding == WINED3D_LOCATION_BUFFER && !surface_use_pbo(surface)) surface->resource.map_binding = create_dib ? WINED3D_LOCATION_DIB : WINED3D_LOCATION_SYSMEM; + texture = surface->container; + texture->resource.format = format; + texture->resource.multisample_type = multisample_type; + texture->resource.multisample_quality = multisample_quality; + texture->resource.width = width; + texture->resource.height = height; + if (create_dib) { if (FAILED(hr = surface_create_dib_section(surface)))
1
0
0
0
Alexandre Julliard : kernel32: Add detection of fake dlls when determining a binary type.
by Alexandre Julliard
22 Aug '14
22 Aug '14
Module: wine Branch: master Commit: ea1689e7b06a5f03a882bde9ee566939e9171330 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=ea1689e7b06a5f03a882bde9e…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Fri Aug 22 12:44:24 2014 +0200 kernel32: Add detection of fake dlls when determining a binary type. --- dlls/kernel32/kernel_private.h | 5 +++-- dlls/kernel32/module.c | 12 ++++++++++++ dlls/kernel32/process.c | 5 +++-- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/dlls/kernel32/kernel_private.h b/dlls/kernel32/kernel_private.h index 5c6c197..76611d7 100644 --- a/dlls/kernel32/kernel_private.h +++ b/dlls/kernel32/kernel_private.h @@ -75,8 +75,9 @@ enum binary_type BINARY_UNIX_LIB }; -#define BINARY_FLAG_DLL 0x01 -#define BINARY_FLAG_64BIT 0x02 +#define BINARY_FLAG_DLL 0x01 +#define BINARY_FLAG_64BIT 0x02 +#define BINARY_FLAG_FAKEDLL 0x04 struct binary_info { diff --git a/dlls/kernel32/module.c b/dlls/kernel32/module.c index 514b6be..ca4cf41 100644 --- a/dlls/kernel32/module.c +++ b/dlls/kernel32/module.c @@ -339,6 +339,9 @@ void MODULE_get_binary_info( HANDLE hfile, struct binary_info *info ) { if (len >= sizeof(ext_header.nt.FileHeader)) { + static const char fakedll_signature[] = "Wine placeholder DLL"; + char buffer[sizeof(fakedll_signature)]; + info->type = BINARY_PE; info->arch = ext_header.nt.FileHeader.Machine; if (ext_header.nt.FileHeader.Characteristics & IMAGE_FILE_DLL) @@ -356,6 +359,15 @@ void MODULE_get_binary_info( HANDLE hfile, struct binary_info *info ) info->flags |= BINARY_FLAG_64BIT; break; } + + if (header.mz.e_lfanew >= sizeof(header.mz) + sizeof(fakedll_signature) && + SetFilePointer( hfile, sizeof(header.mz), NULL, SEEK_SET ) == sizeof(header.mz) && + ReadFile( hfile, buffer, sizeof(fakedll_signature), &len, NULL ) && + len == sizeof(fakedll_signature) && + !memcmp( buffer, fakedll_signature, sizeof(fakedll_signature) )) + { + info->flags |= BINARY_FLAG_FAKEDLL; + } } } else if (!memcmp( &ext_header.os2.ne_magic, "NE", 2 )) diff --git a/dlls/kernel32/process.c b/dlls/kernel32/process.c index 2566ac4..301c64a 100644 --- a/dlls/kernel32/process.c +++ b/dlls/kernel32/process.c @@ -2342,9 +2342,10 @@ static BOOL create_process_impl( LPCWSTR app_name, LPWSTR cmd_line, LPSECURITY_A else switch (binary_info.type) { case BINARY_PE: - TRACE( "starting %s as Win%d binary (%p-%p, arch %04x)\n", + TRACE( "starting %s as Win%d binary (%p-%p, arch %04x%s)\n", debugstr_w(name), (binary_info.flags & BINARY_FLAG_64BIT) ? 64 : 32, - binary_info.res_start, binary_info.res_end, binary_info.arch ); + binary_info.res_start, binary_info.res_end, binary_info.arch, + (binary_info.flags & BINARY_FLAG_FAKEDLL) ? ", fakedll" : "" ); retv = create_process( hFile, name, tidy_cmdline, envW, cur_dir, process_attr, thread_attr, inherit, flags, startup_info, info, unixdir, &binary_info, FALSE ); break;
1
0
0
0
Erich E. Hoover : dwmapi: Add stub for DwmInvalidateIconicBitmaps.
by Alexandre Julliard
21 Aug '14
21 Aug '14
Module: wine Branch: master Commit: cf4404cfbb00cb8fa8a7031d7eee4c1dea2d954c URL:
http://source.winehq.org/git/wine.git/?a=commit;h=cf4404cfbb00cb8fa8a7031d7…
Author: Erich E. Hoover <erich.e.hoover(a)gmail.com> Date: Sat Aug 9 16:30:53 2014 -0600 dwmapi: Add stub for DwmInvalidateIconicBitmaps. --- dlls/dwmapi/dwmapi.spec | 1 + dlls/dwmapi/dwmapi_main.c | 12 ++++++++++++ include/dwmapi.h | 1 + 3 files changed, 14 insertions(+) diff --git a/dlls/dwmapi/dwmapi.spec b/dlls/dwmapi/dwmapi.spec index 5f74970..764f04c 100644 --- a/dlls/dwmapi/dwmapi.spec +++ b/dlls/dwmapi/dwmapi.spec @@ -33,6 +33,7 @@ @ stdcall DwmGetGraphicsStreamTransformHint(long ptr) @ stdcall DwmGetTransportAttributes(ptr ptr ptr) @ stdcall DwmGetWindowAttribute(ptr long ptr long) +@ stdcall DwmInvalidateIconicBitmaps(ptr) @ stdcall DwmIsCompositionEnabled(ptr) @ stub DwmModifyPreviousDxFrameDuration @ stub DwmQueryThumbnailSourceSize diff --git a/dlls/dwmapi/dwmapi_main.c b/dlls/dwmapi/dwmapi_main.c index 8cc46f0..6ee45af 100644 --- a/dlls/dwmapi/dwmapi_main.c +++ b/dlls/dwmapi/dwmapi_main.c @@ -108,6 +108,18 @@ HRESULT WINAPI DwmFlush(void) } /********************************************************************** + * DwmInvalidateIconicBitmaps (DWMAPI.@) + */ +HRESULT WINAPI DwmInvalidateIconicBitmaps(HWND hwnd) +{ + static BOOL once; + + if (!once++) FIXME("(%p) stub\n", hwnd); + + return E_NOTIMPL; +} + +/********************************************************************** * DwmSetWindowAttribute (DWMAPI.@) */ HRESULT WINAPI DwmSetWindowAttribute(HWND hwnd, DWORD attributenum, LPCVOID attribute, DWORD size) diff --git a/include/dwmapi.h b/include/dwmapi.h index f85999a..db13b5f 100644 --- a/include/dwmapi.h +++ b/include/dwmapi.h @@ -116,6 +116,7 @@ DWMAPI DwmEnableMMCSS(BOOL); DWMAPI DwmExtendFrameIntoClientArea(HWND,const MARGINS*); DWMAPI DwmGetColorizationColor(DWORD*,BOOL); DWMAPI DwmGetCompositionTimingInfo(HWND,DWM_TIMING_INFO*); +DWMAPI DwmInvalidateIconicBitmaps(HWND); DWMAPI DwmIsCompositionEnabled(BOOL*); DWMAPI DwmRegisterThumbnail(HWND, HWND, PHTHUMBNAIL); DWMAPI DwmSetWindowAttribute(HWND, DWORD, LPCVOID, DWORD);
1
0
0
0
Sebastian Lackner : kernel32/tests: Always allow only one correct test result, add todo_wine where necessary.
by Alexandre Julliard
21 Aug '14
21 Aug '14
Module: wine Branch: master Commit: 8f9df3afde238397ebe29bbe6441f804f19cb2ec URL:
http://source.winehq.org/git/wine.git/?a=commit;h=8f9df3afde238397ebe29bbe6…
Author: Sebastian Lackner <sebastian(a)fds-team.de> Date: Wed Jul 30 18:00:19 2014 +0200 kernel32/tests: Always allow only one correct test result, add todo_wine where necessary. --- dlls/kernel32/tests/pipe.c | 45 ++++++++++----------------------------------- 1 file changed, 10 insertions(+), 35 deletions(-) diff --git a/dlls/kernel32/tests/pipe.c b/dlls/kernel32/tests/pipe.c index 1cdc2ee..bdac564 100644 --- a/dlls/kernel32/tests/pipe.c +++ b/dlls/kernel32/tests/pipe.c @@ -153,20 +153,13 @@ static void test_CreateNamedPipe(int pipemode) ok(written == sizeof(obuf2), "write file len 3b\n"); ok(PeekNamedPipe(hFile, ibuf, sizeof(ibuf), &readden, &avail, NULL), "Peek3\n"); if (pipemode == PIPE_TYPE_BYTE) { - if (readden != sizeof(obuf)) /* Linux only returns the first message */ - ok(readden == sizeof(obuf) + sizeof(obuf2), "peek3 got %d bytes\n", readden); - else - todo_wine ok(readden == sizeof(obuf) + sizeof(obuf2), "peek3 got %d bytes\n", readden); + todo_wine ok(readden == sizeof(obuf) + sizeof(obuf2), "peek3 got %d bytes\n", readden); } else { - if (readden != sizeof(obuf) + sizeof(obuf2)) /* MacOS returns both messages */ - ok(readden == sizeof(obuf), "peek3 got %d bytes\n", readden); - else - todo_wine ok(readden == sizeof(obuf), "peek3 got %d bytes\n", readden); + ok(readden == sizeof(obuf), "peek3 got %d bytes\n", readden); } - if (avail != sizeof(obuf)) /* older Linux kernels only return the first write here */ - ok(avail == sizeof(obuf) + sizeof(obuf2), "peek3 got %d bytes available\n", avail); + ok(avail == sizeof(obuf) + sizeof(obuf2), "peek3 got %d bytes available\n", avail); pbuf = ibuf; ok(memcmp(obuf, pbuf, sizeof(obuf)) == 0, "pipe content 3a check\n"); if (pipemode == PIPE_TYPE_BYTE && readden >= sizeof(obuf)+sizeof(obuf2)) { @@ -188,21 +181,13 @@ static void test_CreateNamedPipe(int pipemode) ok(written == sizeof(obuf2), "write file len 4b\n"); ok(PeekNamedPipe(hnp, ibuf, sizeof(ibuf), &readden, &avail, NULL), "Peek4\n"); if (pipemode == PIPE_TYPE_BYTE) { - if (readden != sizeof(obuf)) /* Linux only returns the first message */ - /* should return all 23 bytes */ - ok(readden == sizeof(obuf) + sizeof(obuf2), "peek4 got %d bytes\n", readden); - else - todo_wine ok(readden == sizeof(obuf) + sizeof(obuf2), "peek4 got %d bytes\n", readden); + todo_wine ok(readden == sizeof(obuf) + sizeof(obuf2), "peek4 got %d bytes\n", readden); } else { - if (readden != sizeof(obuf) + sizeof(obuf2)) /* MacOS returns both messages */ - ok(readden == sizeof(obuf), "peek4 got %d bytes\n", readden); - else - todo_wine ok(readden == sizeof(obuf), "peek4 got %d bytes\n", readden); + ok(readden == sizeof(obuf), "peek4 got %d bytes\n", readden); } - if (avail != sizeof(obuf)) /* older Linux kernels only return the first write here */ - ok(avail == sizeof(obuf) + sizeof(obuf2), "peek4 got %d bytes available\n", avail); + ok(avail == sizeof(obuf) + sizeof(obuf2), "peek4 got %d bytes available\n", avail); pbuf = ibuf; ok(memcmp(obuf, pbuf, sizeof(obuf)) == 0, "pipe content 4a check\n"); if (pipemode == PIPE_TYPE_BYTE && readden >= sizeof(obuf)+sizeof(obuf2)) { @@ -241,14 +226,8 @@ static void test_CreateNamedPipe(int pipemode) ok(WriteFile(hnp, obuf2, sizeof(obuf2), &written, NULL), " WriteFile5b\n"); ok(written == sizeof(obuf2), "write file len 3b\n"); ok(PeekNamedPipe(hFile, ibuf, sizeof(ibuf), &readden, &avail, NULL), "Peek5\n"); - if (readden != sizeof(obuf) + sizeof(obuf2)) /* MacOS returns both writes */ - ok(readden == sizeof(obuf), "peek5 got %d bytes\n", readden); - else - todo_wine ok(readden == sizeof(obuf), "peek5 got %d bytes\n", readden); - if (avail != sizeof(obuf)) /* older Linux kernels only return the first write here */ - ok(avail == sizeof(obuf) + sizeof(obuf2), "peek5 got %d bytes available\n", avail); - else - todo_wine ok(avail == sizeof(obuf) + sizeof(obuf2), "peek5 got %d bytes available\n", avail); + ok(readden == sizeof(obuf), "peek5 got %d bytes\n", readden); + ok(avail == sizeof(obuf) + sizeof(obuf2), "peek5 got %d bytes available\n", avail); pbuf = ibuf; ok(memcmp(obuf, pbuf, sizeof(obuf)) == 0, "content 5a check\n"); ok(ReadFile(hFile, ibuf, sizeof(ibuf), &readden, NULL), "ReadFile\n"); @@ -277,12 +256,8 @@ static void test_CreateNamedPipe(int pipemode) ok(WriteFile(hFile, obuf2, sizeof(obuf2), &written, NULL), " WriteFile6b\n"); ok(written == sizeof(obuf2), "write file len 6b\n"); ok(PeekNamedPipe(hnp, ibuf, sizeof(ibuf), &readden, &avail, NULL), "Peek6\n"); - if (readden != sizeof(obuf) + sizeof(obuf2)) /* MacOS returns both writes */ - ok(readden == sizeof(obuf), "peek6 got %d bytes\n", readden); - else - todo_wine ok(readden == sizeof(obuf), "peek6 got %d bytes\n", readden); - if (avail != sizeof(obuf)) /* older Linux kernels only return the first write here */ - ok(avail == sizeof(obuf) + sizeof(obuf2), "peek6b got %d bytes available\n", avail); + ok(readden == sizeof(obuf), "peek6 got %d bytes\n", readden); + ok(avail == sizeof(obuf) + sizeof(obuf2), "peek6b got %d bytes available\n", avail); pbuf = ibuf; ok(memcmp(obuf, pbuf, sizeof(obuf)) == 0, "content 6a check\n"); ok(ReadFile(hnp, ibuf, sizeof(ibuf), &readden, NULL), "ReadFile\n");
1
0
0
0
Sebastian Lackner : kernel32/tests: Add better handling for test failure in test_readfileex_pending.
by Alexandre Julliard
21 Aug '14
21 Aug '14
Module: wine Branch: master Commit: 3e23aa57691df99ecb222c7abd4edc0ca2ffc289 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=3e23aa57691df99ecb222c7ab…
Author: Sebastian Lackner <sebastian(a)fds-team.de> Date: Wed Jul 30 18:00:19 2014 +0200 kernel32/tests: Add better handling for test failure in test_readfileex_pending. --- dlls/kernel32/tests/pipe.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/dlls/kernel32/tests/pipe.c b/dlls/kernel32/tests/pipe.c index 457e62b..1cdc2ee 100644 --- a/dlls/kernel32/tests/pipe.c +++ b/dlls/kernel32/tests/pipe.c @@ -1845,6 +1845,14 @@ static void test_readfileex_pending(void) wait = WaitForSingleObjectEx(event, 0, TRUE); ok(wait == WAIT_IO_COMPLETION || wait == WAIT_OBJECT_0, "WaitForSingleObject returned %x\n", wait); + if (wait == WAIT_TIMEOUT) + { + ret = ReadFile(client, read_buf, sizeof(read_buf), &num_bytes, NULL); + ok(ret == TRUE, "ReadFile failed\n"); + ok(completion_called == 0, "completion routine called during ReadFile\n"); + wait = WaitForSingleObjectEx(event, 0, TRUE); + ok(wait == WAIT_IO_COMPLETION || wait == WAIT_OBJECT_0, "WaitForSingleObject returned %x\n", wait); + } ok(completion_called == 1, "completion routine not called\n"); ok(completion_errorcode == 0, "completion called with error %x\n", completion_errorcode);
1
0
0
0
Sebastian Lackner : kernel32: Implement SetNamedPipeHandleState.
by Alexandre Julliard
21 Aug '14
21 Aug '14
Module: wine Branch: master Commit: 55396b701857e441eff6ecf6431c4b9c6fc9c079 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=55396b701857e441eff6ecf64…
Author: Sebastian Lackner <sebastian(a)fds-team.de> Date: Thu Aug 21 05:41:15 2014 +0200 kernel32: Implement SetNamedPipeHandleState. Based on a patch by Adam Martinson. --- dlls/kernel32/sync.c | 35 ++++++++++++++++++++++++++++------- dlls/kernel32/tests/pipe.c | 10 +--------- 2 files changed, 29 insertions(+), 16 deletions(-) diff --git a/dlls/kernel32/sync.c b/dlls/kernel32/sync.c index 21b24f2..8379c1d 100644 --- a/dlls/kernel32/sync.c +++ b/dlls/kernel32/sync.c @@ -1790,9 +1790,34 @@ BOOL WINAPI SetNamedPipeHandleState( { /* should be a fixme, but this function is called a lot by the RPC * runtime, and it slows down InstallShield a fair bit. */ - WARN("stub: %p %p/%d %p %p\n", + WARN("semi-stub: %p %p/%d %p %p\n", hNamedPipe, lpMode, lpMode ? *lpMode : 0, lpMaxCollectionCount, lpCollectDataTimeout); - return FALSE; + + if (lpMode) + { + FILE_PIPE_INFORMATION fpi; + IO_STATUS_BLOCK iosb; + NTSTATUS status; + + if (*lpMode & ~(PIPE_READMODE_MESSAGE | PIPE_NOWAIT)) + status = STATUS_INVALID_PARAMETER; + else + { + fpi.CompletionMode = (*lpMode & PIPE_NOWAIT) ? + FILE_PIPE_COMPLETE_OPERATION : FILE_PIPE_QUEUE_OPERATION; + fpi.ReadMode = (*lpMode & PIPE_READMODE_MESSAGE) ? + FILE_PIPE_MESSAGE_MODE : FILE_PIPE_BYTE_STREAM_MODE; + status = NtSetInformationFile(hNamedPipe, &iosb, &fpi, sizeof(fpi), FilePipeInformation); + } + + if (status) + { + SetLastError( RtlNtStatusToDosError(status) ); + return FALSE; + } + } + + return TRUE; } /*********************************************************************** @@ -1854,15 +1879,11 @@ BOOL WINAPI CallNamedPipeW( mode = PIPE_READMODE_MESSAGE; ret = SetNamedPipeHandleState(pipe, &mode, NULL, NULL); - - /* Currently SetNamedPipeHandleState() is a stub returning FALSE */ - if (ret) FIXME("Now that SetNamedPipeHandleState() is more than a stub, please update CallNamedPipeW\n"); - /* if (!ret) { CloseHandle(pipe); return FALSE; - }*/ + } ret = TransactNamedPipe(pipe, lpInput, lpInputSize, lpOutput, lpOutputSize, lpBytesRead, NULL); CloseHandle(pipe); diff --git a/dlls/kernel32/tests/pipe.c b/dlls/kernel32/tests/pipe.c index 20c2c61..457e62b 100644 --- a/dlls/kernel32/tests/pipe.c +++ b/dlls/kernel32/tests/pipe.c @@ -233,9 +233,7 @@ static void test_CreateNamedPipe(int pipemode) ok(!SetNamedPipeHandleState(hFile, &lpmode, NULL, NULL), "Change mode\n"); } else { - todo_wine { - ok(SetNamedPipeHandleState(hFile, &lpmode, NULL, NULL), "Change mode\n"); - } + ok(SetNamedPipeHandleState(hFile, &lpmode, NULL, NULL), "Change mode\n"); memset(ibuf, 0, sizeof(ibuf)); ok(WriteFile(hnp, obuf, sizeof(obuf), &written, NULL), "WriteFile5a\n"); @@ -1685,7 +1683,6 @@ static void test_NamedPipeHandleState(void) state = PIPE_READMODE_MESSAGE; SetLastError(0xdeadbeef); ret = SetNamedPipeHandleState(server, &state, NULL, NULL); - todo_wine ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); @@ -1695,13 +1692,11 @@ static void test_NamedPipeHandleState(void) state = PIPE_READMODE_BYTE; ret = SetNamedPipeHandleState(client, &state, NULL, NULL); - todo_wine ok(ret, "SetNamedPipeHandleState failed: %d\n", GetLastError()); /* A byte-mode pipe client can't be changed to message mode, either. */ state = PIPE_READMODE_MESSAGE; SetLastError(0xdeadbeef); ret = SetNamedPipeHandleState(server, &state, NULL, NULL); - todo_wine ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); @@ -1731,7 +1726,6 @@ static void test_NamedPipeHandleState(void) */ state = PIPE_READMODE_BYTE; ret = SetNamedPipeHandleState(server, &state, NULL, NULL); - todo_wine ok(ret, "SetNamedPipeHandleState failed: %d\n", GetLastError()); client = CreateFileA(PIPENAME, GENERIC_READ|GENERIC_WRITE, 0, NULL, @@ -1740,13 +1734,11 @@ static void test_NamedPipeHandleState(void) state = PIPE_READMODE_MESSAGE; ret = SetNamedPipeHandleState(client, &state, NULL, NULL); - todo_wine ok(ret, "SetNamedPipeHandleState failed: %d\n", GetLastError()); /* A message-mode pipe client can also be changed to byte mode. */ state = PIPE_READMODE_BYTE; ret = SetNamedPipeHandleState(client, &state, NULL, NULL); - todo_wine ok(ret, "SetNamedPipeHandleState failed: %d\n", GetLastError()); CloseHandle(client);
1
0
0
0
Sebastian Lackner : kernel32: Implement GetNamedPipeHandleState.
by Alexandre Julliard
21 Aug '14
21 Aug '14
Module: wine Branch: master Commit: 9e66e97db8b96eaf7f512a369743733443775e98 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=9e66e97db8b96eaf7f512a369…
Author: Sebastian Lackner <sebastian(a)fds-team.de> Date: Mon Aug 11 17:26:18 2014 +0200 kernel32: Implement GetNamedPipeHandleState. Based on a patch by Adam Martinson. --- dlls/kernel32/sync.c | 59 ++++++++++++++++++++++++++++++++++++++++------ dlls/kernel32/tests/pipe.c | 4 ---- 2 files changed, 52 insertions(+), 11 deletions(-) diff --git a/dlls/kernel32/sync.c b/dlls/kernel32/sync.c index 8210624..21b24f2 100644 --- a/dlls/kernel32/sync.c +++ b/dlls/kernel32/sync.c @@ -1712,12 +1712,16 @@ BOOL WINAPI GetNamedPipeHandleStateA( LPDWORD lpMaxCollectionCount, LPDWORD lpCollectDataTimeout, LPSTR lpUsername, DWORD nUsernameMaxSize) { - FIXME("%p %p %p %p %p %p %d\n", - hNamedPipe, lpState, lpCurInstances, - lpMaxCollectionCount, lpCollectDataTimeout, - lpUsername, nUsernameMaxSize); + WARN("%p %p %p %p %p %p %d: semi-stub\n", + hNamedPipe, lpState, lpCurInstances, + lpMaxCollectionCount, lpCollectDataTimeout, + lpUsername, nUsernameMaxSize); - return FALSE; + if (lpUsername && nUsernameMaxSize) + *lpUsername = 0; + + return GetNamedPipeHandleStateW(hNamedPipe, lpState, lpCurInstances, + lpMaxCollectionCount, lpCollectDataTimeout, NULL, 0); } /*********************************************************************** @@ -1728,12 +1732,53 @@ BOOL WINAPI GetNamedPipeHandleStateW( LPDWORD lpMaxCollectionCount, LPDWORD lpCollectDataTimeout, LPWSTR lpUsername, DWORD nUsernameMaxSize) { - FIXME("%p %p %p %p %p %p %d\n", + IO_STATUS_BLOCK iosb; + NTSTATUS status; + + FIXME("%p %p %p %p %p %p %d: semi-stub\n", hNamedPipe, lpState, lpCurInstances, lpMaxCollectionCount, lpCollectDataTimeout, lpUsername, nUsernameMaxSize); - return FALSE; + if (lpMaxCollectionCount) + *lpMaxCollectionCount = 0; + + if (lpCollectDataTimeout) + *lpCollectDataTimeout = 0; + + if (lpUsername && nUsernameMaxSize) + *lpUsername = 0; + + if (lpState) + { + FILE_PIPE_INFORMATION fpi; + status = NtQueryInformationFile(hNamedPipe, &iosb, &fpi, sizeof(fpi), + FilePipeInformation); + if (status) + { + SetLastError( RtlNtStatusToDosError(status) ); + return FALSE; + } + + *lpState = (fpi.ReadMode ? PIPE_READMODE_MESSAGE : PIPE_READMODE_BYTE) | + (fpi.CompletionMode ? PIPE_NOWAIT : PIPE_WAIT); + } + + if (lpCurInstances) + { + FILE_PIPE_LOCAL_INFORMATION fpli; + status = NtQueryInformationFile(hNamedPipe, &iosb, &fpli, sizeof(fpli), + FilePipeLocalInformation); + if (status) + { + SetLastError( RtlNtStatusToDosError(status) ); + return FALSE; + } + + *lpCurInstances = fpli.CurrentInstances; + } + + return TRUE; } /*********************************************************************** diff --git a/dlls/kernel32/tests/pipe.c b/dlls/kernel32/tests/pipe.c index f7c7531..20c2c61 100644 --- a/dlls/kernel32/tests/pipe.c +++ b/dlls/kernel32/tests/pipe.c @@ -1662,11 +1662,9 @@ static void test_NamedPipeHandleState(void) /* lpSecurityAttrib */ NULL); ok(server != INVALID_HANDLE_VALUE, "cf failed\n"); ret = GetNamedPipeHandleStateA(server, NULL, NULL, NULL, NULL, NULL, 0); - todo_wine ok(ret, "GetNamedPipeHandleState failed: %d\n", GetLastError()); ret = GetNamedPipeHandleStateA(server, &state, &instances, NULL, NULL, NULL, 0); - todo_wine ok(ret, "GetNamedPipeHandleState failed: %d\n", GetLastError()); if (ret) { @@ -1719,11 +1717,9 @@ static void test_NamedPipeHandleState(void) /* lpSecurityAttrib */ NULL); ok(server != INVALID_HANDLE_VALUE, "cf failed\n"); ret = GetNamedPipeHandleStateA(server, NULL, NULL, NULL, NULL, NULL, 0); - todo_wine ok(ret, "GetNamedPipeHandleState failed: %d\n", GetLastError()); ret = GetNamedPipeHandleStateA(server, &state, &instances, NULL, NULL, NULL, 0); - todo_wine ok(ret, "GetNamedPipeHandleState failed: %d\n", GetLastError()); if (ret) {
1
0
0
0
← Newer
1
...
5
6
7
8
9
10
11
...
31
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Results per page:
10
25
50
100
200