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
July
June
May
April
March
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
June 2021
----- 2025 -----
July 2025
June 2025
May 2025
April 2025
March 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
1 participants
811 discussions
Start a n
N
ew thread
Rémi Bernon : d2d1: Use D3DDeviceContextState instead of D3D10 state block.
by Alexandre Julliard
28 Jun '21
28 Jun '21
Module: wine Branch: master Commit: 8c9354926204242cde714a51e5283bc3aac55837 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=8c9354926204242cde714a51…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Mon Jun 28 09:17:36 2021 +0200 d2d1: Use D3DDeviceContextState instead of D3D10 state block. Wine-Bug:
https://bugs.winehq.org/show_bug.cgi?id=49395
Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/d2d1/brush.c | 23 ++++---- dlls/d2d1/d2d1_private.h | 2 +- dlls/d2d1/device.c | 146 ++++++++++++----------------------------------- 3 files changed, 48 insertions(+), 123 deletions(-) Diff:
https://source.winehq.org/git/wine.git/?a=commitdiff;h=8c9354926204242cde71…
1
0
0
0
Rémi Bernon : d2d1: Use D3D11 interfaces to create sampler states.
by Alexandre Julliard
28 Jun '21
28 Jun '21
Module: wine Branch: master Commit: 580ef84cae0955bd533702d8b276ead8dc0a884f URL:
https://source.winehq.org/git/wine.git/?a=commit;h=580ef84cae0955bd533702d8…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Mon Jun 28 09:17:35 2021 +0200 d2d1: Use D3D11 interfaces to create sampler states. Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/d2d1/brush.c | 32 +++++++++++++++++++------------- dlls/d2d1/d2d1_private.h | 2 +- dlls/d2d1/device.c | 2 +- 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/dlls/d2d1/brush.c b/dlls/d2d1/brush.c index 5932a5fa113..6384cb0ae52 100644 --- a/dlls/d2d1/brush.c +++ b/dlls/d2d1/brush.c @@ -1121,19 +1121,19 @@ struct d2d_brush *unsafe_impl_from_ID2D1Brush(ID2D1Brush *iface) return CONTAINING_RECORD(iface, struct d2d_brush, ID2D1Brush_iface); } -static D3D10_TEXTURE_ADDRESS_MODE texture_address_mode_from_extend_mode(D2D1_EXTEND_MODE mode) +static D3D11_TEXTURE_ADDRESS_MODE texture_address_mode_from_extend_mode(D2D1_EXTEND_MODE mode) { switch (mode) { case D2D1_EXTEND_MODE_CLAMP: - return D3D10_TEXTURE_ADDRESS_CLAMP; + return D3D11_TEXTURE_ADDRESS_CLAMP; case D2D1_EXTEND_MODE_WRAP: - return D3D10_TEXTURE_ADDRESS_WRAP; + return D3D11_TEXTURE_ADDRESS_WRAP; case D2D1_EXTEND_MODE_MIRROR: - return D3D10_TEXTURE_ADDRESS_MIRROR; + return D3D11_TEXTURE_ADDRESS_MIRROR; default: FIXME("Unhandled extend mode %#x.\n", mode); - return D3D10_TEXTURE_ADDRESS_CLAMP; + return D3D11_TEXTURE_ADDRESS_CLAMP; } } @@ -1256,7 +1256,8 @@ BOOL d2d_brush_fill_cb(const struct d2d_brush *brush, struct d2d_brush_cb *cb) static void d2d_brush_bind_bitmap(struct d2d_brush *brush, struct d2d_device_context *context, unsigned int brush_idx) { - ID3D10SamplerState **sampler_state; + ID3D10SamplerState *d3d10_sampler_state; + ID3D11SamplerState **sampler_state; HRESULT hr; ID3D10Device_PSSetShaderResources(context->d3d_device, brush_idx, 1, &brush->u.bitmap.bitmap->srv); @@ -1268,18 +1269,18 @@ static void d2d_brush_bind_bitmap(struct d2d_brush *brush, struct d2d_device_con if (!*sampler_state) { - D3D10_SAMPLER_DESC sampler_desc; + D3D11_SAMPLER_DESC sampler_desc; if (brush->u.bitmap.interpolation_mode == D2D1_INTERPOLATION_MODE_NEAREST_NEIGHBOR) - sampler_desc.Filter = D3D10_FILTER_MIN_MAG_MIP_POINT; + sampler_desc.Filter = D3D11_FILTER_MIN_MAG_MIP_POINT; else - sampler_desc.Filter = D3D10_FILTER_MIN_MAG_MIP_LINEAR; + sampler_desc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR; sampler_desc.AddressU = texture_address_mode_from_extend_mode(brush->u.bitmap.extend_mode_x); sampler_desc.AddressV = texture_address_mode_from_extend_mode(brush->u.bitmap.extend_mode_y); - sampler_desc.AddressW = D3D10_TEXTURE_ADDRESS_CLAMP; + sampler_desc.AddressW = D3D11_TEXTURE_ADDRESS_CLAMP; sampler_desc.MipLODBias = 0.0f; sampler_desc.MaxAnisotropy = 0; - sampler_desc.ComparisonFunc = D3D10_COMPARISON_NEVER; + sampler_desc.ComparisonFunc = D3D11_COMPARISON_NEVER; sampler_desc.BorderColor[0] = 0.0f; sampler_desc.BorderColor[1] = 0.0f; sampler_desc.BorderColor[2] = 0.0f; @@ -1287,10 +1288,15 @@ static void d2d_brush_bind_bitmap(struct d2d_brush *brush, struct d2d_device_con sampler_desc.MinLOD = 0.0f; sampler_desc.MaxLOD = 0.0f; - if (FAILED(hr = ID3D10Device_CreateSamplerState(context->d3d_device, &sampler_desc, sampler_state))) + if (FAILED(hr = ID3D11Device1_CreateSamplerState(context->d3d11_device, &sampler_desc, sampler_state))) ERR("Failed to create sampler state, hr %#x.\n", hr); } - ID3D10Device_PSSetSamplers(context->d3d_device, brush_idx, 1, sampler_state); + + if (FAILED(hr = ID3D11SamplerState_QueryInterface(*sampler_state, &IID_ID3D10SamplerState, (void **)&d3d10_sampler_state))) + ERR("Failed to query D3D10 sampler state, hr %#x.\n", hr); + + ID3D10Device_PSSetSamplers(context->d3d_device, brush_idx, 1, &d3d10_sampler_state); + ID3D10SamplerState_Release(d3d10_sampler_state); } void d2d_brush_bind_resources(struct d2d_brush *brush, struct d2d_device_context *context, unsigned int brush_idx) diff --git a/dlls/d2d1/d2d1_private.h b/dlls/d2d1/d2d1_private.h index f823953dd2b..b4a489e1966 100644 --- a/dlls/d2d1/d2d1_private.h +++ b/dlls/d2d1/d2d1_private.h @@ -174,7 +174,7 @@ struct d2d_device_context ID3D11Buffer *vb; ID3D11RasterizerState *rs; ID3D11BlendState *bs; - ID3D10SamplerState *sampler_states + ID3D11SamplerState *sampler_states [D2D_SAMPLER_INTERPOLATION_MODE_COUNT] [D2D_SAMPLER_EXTEND_MODE_COUNT] [D2D_SAMPLER_EXTEND_MODE_COUNT]; diff --git a/dlls/d2d1/device.c b/dlls/d2d1/device.c index ba9e4e13481..a862215c130 100644 --- a/dlls/d2d1/device.c +++ b/dlls/d2d1/device.c @@ -352,7 +352,7 @@ static ULONG STDMETHODCALLTYPE d2d_device_context_inner_Release(IUnknown *iface) for (k = 0; k < D2D_SAMPLER_EXTEND_MODE_COUNT; ++k) { if (context->sampler_states[i][j][k]) - ID3D10SamplerState_Release(context->sampler_states[i][j][k]); + ID3D11SamplerState_Release(context->sampler_states[i][j][k]); } } }
1
0
0
0
Rémi Bernon : d2d1: Use D3D11 interfaces to create blend state.
by Alexandre Julliard
28 Jun '21
28 Jun '21
Module: wine Branch: master Commit: 50e04d9f9d18fd29e747c4dc4874c23b0e5404b8 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=50e04d9f9d18fd29e747c4dc…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Mon Jun 28 09:17:34 2021 +0200 d2d1: Use D3D11 interfaces to create blend state. Wine-Bug:
https://bugs.winehq.org/show_bug.cgi?id=49395
Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/d2d1/d2d1_private.h | 2 +- dlls/d2d1/device.c | 39 ++++++++++++++++++++++++--------------- 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/dlls/d2d1/d2d1_private.h b/dlls/d2d1/d2d1_private.h index 0915bc55cfd..f823953dd2b 100644 --- a/dlls/d2d1/d2d1_private.h +++ b/dlls/d2d1/d2d1_private.h @@ -173,7 +173,7 @@ struct d2d_device_context unsigned int vb_stride; ID3D11Buffer *vb; ID3D11RasterizerState *rs; - ID3D10BlendState *bs; + ID3D11BlendState *bs; ID3D10SamplerState *sampler_states [D2D_SAMPLER_INTERPOLATION_MODE_COUNT] [D2D_SAMPLER_EXTEND_MODE_COUNT] diff --git a/dlls/d2d1/device.c b/dlls/d2d1/device.c index 0a0e9f5bbe6..ba9e4e13481 100644 --- a/dlls/d2d1/device.c +++ b/dlls/d2d1/device.c @@ -129,6 +129,7 @@ static void d2d_device_context_draw(struct d2d_device_context *render_target, en ID3D10VertexShader *d3d10_vs = NULL; ID3D10PixelShader *d3d10_ps = NULL; ID3D10InputLayout *d3d10_il = NULL; + ID3D10BlendState *d3d10_bs = NULL; D3D10_RECT scissor_rect; unsigned int offset; D3D10_VIEWPORT vp; @@ -189,6 +190,12 @@ static void d2d_device_context_draw(struct d2d_device_context *render_target, en goto error; } + if (render_target->bs && FAILED(hr = ID3D11BlendState_QueryInterface(render_target->bs, &IID_ID3D10BlendState, (void **)&d3d10_bs))) + { + ERR("Failed to query D3D10 blend state, hr %#x.\n", hr); + goto error; + } + if (FAILED(hr = render_target->stateblock->lpVtbl->Capture(render_target->stateblock))) { WARN("Failed to capture stateblock, hr %#x.\n", hr); @@ -229,7 +236,7 @@ static void d2d_device_context_draw(struct d2d_device_context *render_target, en ID3D10Device_OMSetRenderTargets(device, 1, &render_target->target->rtv, NULL); if (brush) { - ID3D10Device_OMSetBlendState(device, render_target->bs, NULL, D3D10_DEFAULT_SAMPLE_MASK); + ID3D10Device_OMSetBlendState(device, d3d10_bs, NULL, D3D10_DEFAULT_SAMPLE_MASK); d2d_brush_bind_resources(brush, render_target, 0); } if (opacity_brush) @@ -244,6 +251,7 @@ static void d2d_device_context_draw(struct d2d_device_context *render_target, en WARN("Failed to apply stateblock, hr %#x.\n", hr); error: + if (d3d10_bs) ID3D10BlendState_Release(d3d10_bs); if (d3d10_rs) ID3D10RasterizerState_Release(d3d10_rs); if (d3d10_ps) ID3D10PixelShader_Release(d3d10_ps); if (d3d10_vs) ID3D10VertexShader_Release(d3d10_vs); @@ -325,7 +333,7 @@ static ULONG STDMETHODCALLTYPE d2d_device_context_inner_Release(IUnknown *iface) if (context->text_rendering_params) IDWriteRenderingParams_Release(context->text_rendering_params); if (context->bs) - ID3D10BlendState_Release(context->bs); + ID3D11BlendState_Release(context->bs); ID3D11RasterizerState_Release(context->rs); ID3D11Buffer_Release(context->vb); ID3D11Buffer_Release(context->ib); @@ -2076,7 +2084,7 @@ static void d2d_device_context_reset_target(struct d2d_device_context *context) memset(&context->desc.pixelFormat, 0, sizeof(context->desc.pixelFormat)); memset(&context->pixel_size, 0, sizeof(context->pixel_size)); - ID3D10BlendState_Release(context->bs); + ID3D11BlendState_Release(context->bs); context->bs = NULL; } @@ -2084,7 +2092,7 @@ static void STDMETHODCALLTYPE d2d_device_context_SetTarget(ID2D1DeviceContext *i { struct d2d_device_context *context = impl_from_ID2D1DeviceContext(iface); struct d2d_bitmap *bitmap_impl; - D3D10_BLEND_DESC blend_desc; + D3D11_BLEND_DESC blend_desc; ID2D1Bitmap *bitmap; HRESULT hr; @@ -2118,23 +2126,24 @@ static void STDMETHODCALLTYPE d2d_device_context_SetTarget(ID2D1DeviceContext *i context->target = bitmap_impl; memset(&blend_desc, 0, sizeof(blend_desc)); - blend_desc.BlendEnable[0] = TRUE; - blend_desc.SrcBlend = D3D10_BLEND_ONE; - blend_desc.DestBlend = D3D10_BLEND_INV_SRC_ALPHA; - blend_desc.BlendOp = D3D10_BLEND_OP_ADD; + blend_desc.IndependentBlendEnable = FALSE; + blend_desc.RenderTarget[0].BlendEnable = TRUE; + blend_desc.RenderTarget[0].SrcBlend = D3D11_BLEND_ONE; + blend_desc.RenderTarget[0].DestBlend = D3D11_BLEND_INV_SRC_ALPHA; + blend_desc.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD; if (context->desc.pixelFormat.alphaMode == D2D1_ALPHA_MODE_IGNORE) { - blend_desc.SrcBlendAlpha = D3D10_BLEND_ZERO; - blend_desc.DestBlendAlpha = D3D10_BLEND_ONE; + blend_desc.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_ZERO; + blend_desc.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_ONE; } else { - blend_desc.SrcBlendAlpha = D3D10_BLEND_ONE; - blend_desc.DestBlendAlpha = D3D10_BLEND_INV_SRC_ALPHA; + blend_desc.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_ONE; + blend_desc.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_INV_SRC_ALPHA; } - blend_desc.BlendOpAlpha = D3D10_BLEND_OP_ADD; - blend_desc.RenderTargetWriteMask[0] = D3D10_COLOR_WRITE_ENABLE_ALL; - if (FAILED(hr = ID3D10Device_CreateBlendState(context->d3d_device, &blend_desc, &context->bs))) + blend_desc.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD; + blend_desc.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL; + if (FAILED(hr = ID3D11Device1_CreateBlendState(context->d3d11_device, &blend_desc, &context->bs))) WARN("Failed to create blend state, hr %#x.\n", hr); }
1
0
0
0
Rémi Bernon : d2d1: Use D3D11 interfaces to create rasterizer state.
by Alexandre Julliard
28 Jun '21
28 Jun '21
Module: wine Branch: master Commit: 942ee9318ea5cadfebf4da6db7f24553f11174db URL:
https://source.winehq.org/git/wine.git/?a=commit;h=942ee9318ea5cadfebf4da6d…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Mon Jun 28 09:17:33 2021 +0200 d2d1: Use D3D11 interfaces to create rasterizer state. Wine-Bug:
https://bugs.winehq.org/show_bug.cgi?id=49395
Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/d2d1/d2d1_private.h | 2 +- dlls/d2d1/device.c | 22 +++++++++++++++------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/dlls/d2d1/d2d1_private.h b/dlls/d2d1/d2d1_private.h index 73259835786..0915bc55cfd 100644 --- a/dlls/d2d1/d2d1_private.h +++ b/dlls/d2d1/d2d1_private.h @@ -172,7 +172,7 @@ struct d2d_device_context ID3D11Buffer *ib; unsigned int vb_stride; ID3D11Buffer *vb; - ID3D10RasterizerState *rs; + ID3D11RasterizerState *rs; ID3D10BlendState *bs; ID3D10SamplerState *sampler_states [D2D_SAMPLER_INTERPOLATION_MODE_COUNT] diff --git a/dlls/d2d1/device.c b/dlls/d2d1/device.c index efeeaf6aa18..0a0e9f5bbe6 100644 --- a/dlls/d2d1/device.c +++ b/dlls/d2d1/device.c @@ -125,6 +125,7 @@ static void d2d_device_context_draw(struct d2d_device_context *render_target, en ID3D10Device *device = render_target->d3d_device; ID3D10Buffer *d3d10_ib = NULL, *d3d10_vb = NULL, *d3d10_vs_cb = NULL, *d3d10_ps_cb = NULL; ID3D11Buffer *vs_cb = render_target->vs_cb, *ps_cb = render_target->ps_cb; + ID3D10RasterizerState *d3d10_rs = NULL; ID3D10VertexShader *d3d10_vs = NULL; ID3D10PixelShader *d3d10_ps = NULL; ID3D10InputLayout *d3d10_il = NULL; @@ -182,6 +183,12 @@ static void d2d_device_context_draw(struct d2d_device_context *render_target, en goto error; } + if (render_target->rs && FAILED(hr = ID3D11RasterizerState_QueryInterface(render_target->rs, &IID_ID3D10RasterizerState, (void **)&d3d10_rs))) + { + ERR("Failed to query D3D10 rasterizer state, hr %#x.\n", hr); + goto error; + } + if (FAILED(hr = render_target->stateblock->lpVtbl->Capture(render_target->stateblock))) { WARN("Failed to capture stateblock, hr %#x.\n", hr); @@ -218,7 +225,7 @@ static void d2d_device_context_draw(struct d2d_device_context *render_target, en scissor_rect.bottom = render_target->pixel_size.height; } ID3D10Device_RSSetScissorRects(device, 1, &scissor_rect); - ID3D10Device_RSSetState(device, render_target->rs); + ID3D10Device_RSSetState(device, d3d10_rs); ID3D10Device_OMSetRenderTargets(device, 1, &render_target->target->rtv, NULL); if (brush) { @@ -237,6 +244,7 @@ static void d2d_device_context_draw(struct d2d_device_context *render_target, en WARN("Failed to apply stateblock, hr %#x.\n", hr); error: + if (d3d10_rs) ID3D10RasterizerState_Release(d3d10_rs); if (d3d10_ps) ID3D10PixelShader_Release(d3d10_ps); if (d3d10_vs) ID3D10VertexShader_Release(d3d10_vs); if (d3d10_il) ID3D10InputLayout_Release(d3d10_il); @@ -318,7 +326,7 @@ static ULONG STDMETHODCALLTYPE d2d_device_context_inner_Release(IUnknown *iface) IDWriteRenderingParams_Release(context->text_rendering_params); if (context->bs) ID3D10BlendState_Release(context->bs); - ID3D10RasterizerState_Release(context->rs); + ID3D11RasterizerState_Release(context->rs); ID3D11Buffer_Release(context->vb); ID3D11Buffer_Release(context->ib); ID3D11Buffer_Release(context->ps_cb); @@ -2859,7 +2867,7 @@ static HRESULT d2d_device_context_init(struct d2d_device_context *render_target, D3D10_STATE_BLOCK_MASK state_mask; struct d2d_device *device_impl; IDWriteFactory *dwrite_factory; - D3D10_RASTERIZER_DESC rs_desc; + D3D11_RASTERIZER_DESC rs_desc; D3D11_BUFFER_DESC buffer_desc; unsigned int i; HRESULT hr; @@ -4033,8 +4041,8 @@ static HRESULT d2d_device_context_init(struct d2d_device_context *render_target, goto err; } - rs_desc.FillMode = D3D10_FILL_SOLID; - rs_desc.CullMode = D3D10_CULL_NONE; + rs_desc.FillMode = D3D11_FILL_SOLID; + rs_desc.CullMode = D3D11_CULL_NONE; rs_desc.FrontCounterClockwise = FALSE; rs_desc.DepthBias = 0; rs_desc.DepthBiasClamp = 0.0f; @@ -4043,7 +4051,7 @@ static HRESULT d2d_device_context_init(struct d2d_device_context *render_target, rs_desc.ScissorEnable = TRUE; rs_desc.MultisampleEnable = FALSE; rs_desc.AntialiasedLineEnable = FALSE; - if (FAILED(hr = ID3D10Device_CreateRasterizerState(render_target->d3d_device, &rs_desc, &render_target->rs))) + if (FAILED(hr = ID3D11Device1_CreateRasterizerState(render_target->d3d11_device, &rs_desc, &render_target->rs))) { WARN("Failed to create clear rasterizer state, hr %#x.\n", hr); goto err; @@ -4082,7 +4090,7 @@ err: if (render_target->default_text_rendering_params) IDWriteRenderingParams_Release(render_target->default_text_rendering_params); if (render_target->rs) - ID3D10RasterizerState_Release(render_target->rs); + ID3D11RasterizerState_Release(render_target->rs); if (render_target->vb) ID3D11Buffer_Release(render_target->vb); if (render_target->ib)
1
0
0
0
Zebediah Figura : wined3d: Move box validation to wined3d_device_context_map().
by Alexandre Julliard
28 Jun '21
28 Jun '21
Module: wine Branch: master Commit: 08c96a488892b2ea3bf339691a85d54ba113f129 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=08c96a488892b2ea3bf33969…
Author: Zebediah Figura <z.figura12(a)gmail.com> Date: Fri Jun 25 18:21:26 2021 -0500 wined3d: Move box validation to wined3d_device_context_map(). Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com> Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/wined3d/device.c | 10 ++++++++++ dlls/wined3d/texture.c | 7 ------- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index 5b2bd7ae03b..96657141419 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -4866,6 +4866,16 @@ HRESULT CDECL wined3d_device_context_map(struct wined3d_device_context *context, wined3d_box_set(&b, 0, 0, desc.width, desc.height, 0, desc.depth); box = &b; } + else if (FAILED(wined3d_resource_check_box_dimensions(resource, sub_resource_idx, box))) + { + WARN("Map box is invalid.\n"); + + if (resource->type != WINED3D_RTYPE_BUFFER && resource->type != WINED3D_RTYPE_TEXTURE_2D) + return WINED3DERR_INVALIDCALL; + + if ((resource->format_flags & WINED3DFMT_FLAG_BLOCKS) && !(resource->access & WINED3D_RESOURCE_ACCESS_CPU)) + return WINED3DERR_INVALIDCALL; + } if (SUCCEEDED(hr = context->ops->map(context, resource, sub_resource_idx, &map_desc->data, box, flags))) wined3d_resource_get_sub_resource_map_pitch(resource, sub_resource_idx, diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c index 0f753e66704..62f38a1d592 100644 --- a/dlls/wined3d/texture.c +++ b/dlls/wined3d/texture.c @@ -3513,13 +3513,6 @@ static HRESULT texture_resource_sub_resource_map(struct wined3d_resource *resour sub_resource = wined3d_texture_get_sub_resource(texture, sub_resource_idx); texture_level = sub_resource_idx % texture->level_count; - if (FAILED(wined3d_resource_check_box_dimensions(resource, sub_resource_idx, box))) - { - WARN("Map box is invalid.\n"); - if (((fmt_flags & WINED3DFMT_FLAG_BLOCKS) && !(resource->access & WINED3D_RESOURCE_ACCESS_CPU)) - || resource->type != WINED3D_RTYPE_TEXTURE_2D) - return WINED3DERR_INVALIDCALL; - } if (texture->flags & WINED3D_TEXTURE_DC_IN_USE) {
1
0
0
0
Zebediah Figura : wined3d: Pass a wined3d_resource and sub-resource index to wined3d_texture_check_box_dimensions().
by Alexandre Julliard
28 Jun '21
28 Jun '21
Module: wine Branch: master Commit: 2e0667757016a6ac4b24a3183c261fc1020b60e9 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=2e0667757016a6ac4b24a318…
Author: Zebediah Figura <z.figura12(a)gmail.com> Date: Fri Jun 25 18:21:25 2021 -0500 wined3d: Pass a wined3d_resource and sub-resource index to wined3d_texture_check_box_dimensions(). Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com> Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/wined3d/device.c | 9 +++----- dlls/wined3d/resource.c | 38 ++++++++++++++++++++++++++++++++ dlls/wined3d/texture.c | 50 ++++-------------------------------------- dlls/wined3d/wined3d_private.h | 4 ++-- 4 files changed, 47 insertions(+), 54 deletions(-) diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index 2af705b10e3..5b2bd7ae03b 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -4608,7 +4608,7 @@ HRESULT CDECL wined3d_device_context_copy_sub_resource_region(struct wined3d_dev wined3d_box_set(&b, 0, 0, min(src_w, dst_w), min(src_h, dst_h), 0, min(src_d, dst_d)); src_box = &b; } - else if (FAILED(wined3d_texture_check_box_dimensions(src_texture, src_level, src_box))) + else if (FAILED(wined3d_resource_check_box_dimensions(src_resource, src_sub_resource_idx, src_box))) { WARN("Invalid source box %s.\n", debug_box(src_box)); return WINED3DERR_INVALIDCALL; @@ -4631,8 +4631,7 @@ HRESULT CDECL wined3d_device_context_copy_sub_resource_region(struct wined3d_dev dst_y + (src_row_count * dst_resource->format->block_height), dst_z, dst_z + (src_box->back - src_box->front)); } - if (FAILED(wined3d_texture_check_box_dimensions(dst_texture, - dst_sub_resource_idx % dst_texture->level_count, &dst_box))) + if (FAILED(wined3d_resource_check_box_dimensions(dst_resource, dst_sub_resource_idx, &dst_box))) { WARN("Invalid destination box %s.\n", debug_box(&dst_box)); return WINED3DERR_INVALIDCALL; @@ -4760,11 +4759,9 @@ HRESULT CDECL wined3d_device_context_clear_rendertarget_view(struct wined3d_devi else { struct wined3d_box b = {rect->left, rect->top, rect->right, rect->bottom, 0, 1}; - struct wined3d_texture *texture = texture_from_resource(view->resource); HRESULT hr; - if (FAILED(hr = wined3d_texture_check_box_dimensions(texture, - view->sub_resource_idx % texture->level_count, &b))) + if (FAILED(hr = wined3d_resource_check_box_dimensions(resource, view->sub_resource_idx, &b))) return hr; } diff --git a/dlls/wined3d/resource.c b/dlls/wined3d/resource.c index 58e3e5c77fd..f37c313e023 100644 --- a/dlls/wined3d/resource.c +++ b/dlls/wined3d/resource.c @@ -501,6 +501,44 @@ unsigned int wined3d_resource_get_sample_count(const struct wined3d_resource *re return resource->multisample_type; } +HRESULT wined3d_resource_check_box_dimensions(struct wined3d_resource *resource, + unsigned int sub_resource_idx, const struct wined3d_box *box) +{ + const struct wined3d_format *format = resource->format; + struct wined3d_sub_resource_desc desc; + unsigned int width_mask, height_mask; + + wined3d_resource_get_sub_resource_desc(resource, sub_resource_idx, &desc); + + if (box->left >= box->right || box->right > desc.width + || box->top >= box->bottom || box->bottom > desc.height + || box->front >= box->back || box->back > desc.depth) + { + WARN("Box %s is invalid.\n", debug_box(box)); + return WINEDDERR_INVALIDRECT; + } + + if (resource->format_flags & WINED3DFMT_FLAG_BLOCKS) + { + /* This assumes power of two block sizes, but NPOT block sizes would + * be silly anyway. + * + * This also assumes that the format's block depth is 1. */ + width_mask = format->block_width - 1; + height_mask = format->block_height - 1; + + if ((box->left & width_mask) || (box->top & height_mask) + || (box->right & width_mask && box->right != desc.width) + || (box->bottom & height_mask && box->bottom != desc.height)) + { + WARN("Box %s is misaligned for %ux%u blocks.\n", debug_box(box), format->block_width, format->block_height); + return WINED3DERR_INVALIDCALL; + } + } + + return WINED3D_OK; +} + VkAccessFlags vk_access_mask_from_bind_flags(uint32_t bind_flags) { VkAccessFlags flags = 0; diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c index 5876f580e0d..0f753e66704 100644 --- a/dlls/wined3d/texture.c +++ b/dlls/wined3d/texture.c @@ -1653,46 +1653,6 @@ void * CDECL wined3d_texture_get_parent(const struct wined3d_texture *texture) return texture->resource.parent; } -HRESULT wined3d_texture_check_box_dimensions(const struct wined3d_texture *texture, - unsigned int level, const struct wined3d_box *box) -{ - const struct wined3d_format *format = texture->resource.format; - unsigned int width_mask, height_mask, width, height, depth; - - width = wined3d_texture_get_level_width(texture, level); - height = wined3d_texture_get_level_height(texture, level); - depth = wined3d_texture_get_level_depth(texture, level); - - if (box->left >= box->right || box->right > width - || box->top >= box->bottom || box->bottom > height - || box->front >= box->back || box->back > depth) - { - WARN("Box %s is invalid.\n", debug_box(box)); - return WINEDDERR_INVALIDRECT; - } - - if (texture->resource.format_flags & WINED3DFMT_FLAG_BLOCKS) - { - /* This assumes power of two block sizes, but NPOT block sizes would - * be silly anyway. - * - * This also assumes that the format's block depth is 1. */ - width_mask = format->block_width - 1; - height_mask = format->block_height - 1; - - if ((box->left & width_mask) || (box->top & height_mask) - || (box->right & width_mask && box->right != width) - || (box->bottom & height_mask && box->bottom != height)) - { - WARN("Box %s is misaligned for %ux%u blocks.\n", - debug_box(box), format->block_width, format->block_height); - return WINED3DERR_INVALIDCALL; - } - } - - return WINED3D_OK; -} - void CDECL wined3d_texture_get_pitch(const struct wined3d_texture *texture, unsigned int level, unsigned int *row_pitch, unsigned int *slice_pitch) { @@ -2250,7 +2210,7 @@ HRESULT CDECL wined3d_texture_add_dirty_region(struct wined3d_texture *texture, return WINED3DERR_INVALIDCALL; } - if (dirty_region && FAILED(wined3d_texture_check_box_dimensions(texture, 0, dirty_region))) + if (dirty_region && FAILED(wined3d_resource_check_box_dimensions(&texture->resource, 0, dirty_region))) { WARN("Invalid dirty_region %s specified.\n", debug_box(dirty_region)); return WINED3DERR_INVALIDCALL; @@ -3553,7 +3513,7 @@ static HRESULT texture_resource_sub_resource_map(struct wined3d_resource *resour sub_resource = wined3d_texture_get_sub_resource(texture, sub_resource_idx); texture_level = sub_resource_idx % texture->level_count; - if (FAILED(wined3d_texture_check_box_dimensions(texture, texture_level, box))) + if (FAILED(wined3d_resource_check_box_dimensions(resource, sub_resource_idx, box))) { WARN("Map box is invalid.\n"); if (((fmt_flags & WINED3DFMT_FLAG_BLOCKS) && !(resource->access & WINED3D_RESOURCE_ACCESS_CPU)) @@ -4024,12 +3984,10 @@ HRESULT CDECL wined3d_device_context_blt(struct wined3d_device_context *context, && filter != WINED3D_TEXF_LINEAR) return WINED3DERR_INVALIDCALL; - if (FAILED(hr = wined3d_texture_check_box_dimensions(dst_texture, - dst_sub_resource_idx % dst_texture->level_count, &dst_box))) + if (FAILED(hr = wined3d_resource_check_box_dimensions(&dst_texture->resource, dst_sub_resource_idx, &dst_box))) return hr; - if (FAILED(hr = wined3d_texture_check_box_dimensions(src_texture, - src_sub_resource_idx % src_texture->level_count, &src_box))) + if (FAILED(hr = wined3d_resource_check_box_dimensions(&src_texture->resource, src_sub_resource_idx, &src_box))) return hr; if (dst_texture->sub_resources[dst_sub_resource_idx].map_count diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index 84dad38f0c9..6700302b481 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -4134,6 +4134,8 @@ HRESULT resource_init(struct wined3d_resource *resource, struct wined3d_device * unsigned int size, void *parent, const struct wined3d_parent_ops *parent_ops, const struct wined3d_resource_ops *resource_ops) DECLSPEC_HIDDEN; void resource_unload(struct wined3d_resource *resource) DECLSPEC_HIDDEN; +HRESULT wined3d_resource_check_box_dimensions(struct wined3d_resource *resource, + unsigned int sub_resource_idx, const struct wined3d_box *box) DECLSPEC_HIDDEN; void wined3d_resource_free_sysmem(struct wined3d_resource *resource) DECLSPEC_HIDDEN; const struct wined3d_format *wined3d_resource_get_decompress_format( const struct wined3d_resource *resource) DECLSPEC_HIDDEN; @@ -4358,8 +4360,6 @@ void texture2d_load_fb_texture(struct wined3d_texture_gl *texture_gl, unsigned i void texture2d_read_from_framebuffer(struct wined3d_texture *texture, unsigned int sub_resource_idx, struct wined3d_context *context, DWORD src_location, DWORD dst_location) DECLSPEC_HIDDEN; -HRESULT wined3d_texture_check_box_dimensions(const struct wined3d_texture *texture, - unsigned int level, const struct wined3d_box *box) DECLSPEC_HIDDEN; void wined3d_texture_cleanup(struct wined3d_texture *texture) DECLSPEC_HIDDEN; void wined3d_texture_download_from_texture(struct wined3d_texture *dst_texture, unsigned int dst_sub_resource_idx, struct wined3d_texture *src_texture, unsigned int src_sub_resource_idx) DECLSPEC_HIDDEN;
1
0
0
0
Zebediah Figura : qcap/vfwcapture: Set the correct allocator properties when connecting.
by Alexandre Julliard
28 Jun '21
28 Jun '21
Module: wine Branch: master Commit: a216c0a28b7ded2d35d6692767468510f2a2e468 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=a216c0a28b7ded2d35d66927…
Author: Zebediah Figura <z.figura12(a)gmail.com> Date: Mon Jun 28 00:08:56 2021 -0500 qcap/vfwcapture: Set the correct allocator properties when connecting. Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/qcap/vfwcapture.c | 30 ++++++++++-------------------- 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/dlls/qcap/vfwcapture.c b/dlls/qcap/vfwcapture.c index ae073b845e0..6f03a3124af 100644 --- a/dlls/qcap/vfwcapture.c +++ b/dlls/qcap/vfwcapture.c @@ -190,17 +190,8 @@ static DWORD WINAPI stream_thread(void *arg) static HRESULT vfw_capture_init_stream(struct strmbase_filter *iface) { struct vfw_capture *filter = impl_from_strmbase_filter(iface); - ALLOCATOR_PROPERTIES req_props, ret_props; HRESULT hr; - req_props.cBuffers = 3; - req_props.cbBuffer = get_image_size(filter); - req_props.cbAlign = 1; - req_props.cbPrefix = 0; - if (FAILED(hr = IMemAllocator_SetProperties(filter->source.pAllocator, &req_props, &ret_props)) - && hr != VFW_E_ALREADY_COMMITTED) - ERR("Failed to set allocator properties (buffer size %u), hr %#x.\n", req_props.cbBuffer, hr); - if (FAILED(hr = IMemAllocator_Commit(filter->source.pAllocator))) ERR("Failed to commit allocator, hr %#x.\n", hr); @@ -688,20 +679,19 @@ static HRESULT source_query_interface(struct strmbase_pin *iface, REFIID iid, vo } static HRESULT WINAPI VfwPin_DecideBufferSize(struct strmbase_source *iface, - IMemAllocator *pAlloc, ALLOCATOR_PROPERTIES *ppropInputRequest) + IMemAllocator *allocator, ALLOCATOR_PROPERTIES *req_props) { - ALLOCATOR_PROPERTIES actual; + struct vfw_capture *filter = impl_from_strmbase_pin(&iface->pin); + ALLOCATOR_PROPERTIES ret_props; - /* What we put here doesn't matter, the - driver function should override it then commit */ - if (!ppropInputRequest->cBuffers) - ppropInputRequest->cBuffers = 3; - if (!ppropInputRequest->cbBuffer) - ppropInputRequest->cbBuffer = 230400; - if (!ppropInputRequest->cbAlign) - ppropInputRequest->cbAlign = 1; + if (!req_props->cBuffers) + req_props->cBuffers = 3; + if (!req_props->cbBuffer) + req_props->cbBuffer = get_image_size(filter); + if (!req_props->cbAlign) + req_props->cbAlign = 1; - return IMemAllocator_SetProperties(pAlloc, ppropInputRequest, &actual); + return IMemAllocator_SetProperties(allocator, req_props, &ret_props); } static const struct strmbase_source_ops source_ops =
1
0
0
0
Huw Davies : nsi: Add a stub implementation of NsiGetAllParametersEx().
by Alexandre Julliard
28 Jun '21
28 Jun '21
Module: wine Branch: master Commit: 4ed3eb477fc5ac3a20e62465eb01742713061c00 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=4ed3eb477fc5ac3a20e62465…
Author: Huw Davies <huw(a)codeweavers.com> Date: Mon Jun 28 08:35:49 2021 +0100 nsi: Add a stub implementation of NsiGetAllParametersEx(). Signed-off-by: Huw Davies <huw(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/nsi/nsi.c | 23 +++++++++++++++++++++++ dlls/nsi/nsi.spec | 2 +- dlls/nsi/tests/nsi.c | 30 ++++++++++++++++++++++++++++++ include/wine/nsi.h | 18 ++++++++++++++++++ 4 files changed, 72 insertions(+), 1 deletion(-) diff --git a/dlls/nsi/nsi.c b/dlls/nsi/nsi.c index 1ed0cfad916..4e55721475b 100644 --- a/dlls/nsi/nsi.c +++ b/dlls/nsi/nsi.c @@ -84,8 +84,31 @@ DWORD WINAPI NsiGetAllParameters( DWORD unk, const NPI_MODULEID *module, DWORD t void *rw_data, DWORD rw_size, void *dynamic_data, DWORD dynamic_size, void *static_data, DWORD static_size ) { + struct nsi_get_all_parameters_ex params; + FIXME( "%d %p %d %p %d %p %d %p %d %p %d: stub\n", unk, module, table, key, key_size, rw_data, rw_size, dynamic_data, dynamic_size, static_data, static_size ); + + params.unknown[0] = 0; + params.unknown[1] = 0; + params.module = module; + params.table = table; + params.first_arg = unk; + params.unknown2 = 0; + params.key = key; + params.key_size = key_size; + params.rw_data = rw_data; + params.rw_size = rw_size; + params.dynamic_data = dynamic_data; + params.dynamic_size = dynamic_size; + params.static_data = static_data; + params.static_size = static_size; + + return NsiGetAllParametersEx( ¶ms ); +} + +DWORD WINAPI NsiGetAllParametersEx( struct nsi_get_all_parameters_ex *params ) +{ return ERROR_CALL_NOT_IMPLEMENTED; } diff --git a/dlls/nsi/nsi.spec b/dlls/nsi/nsi.spec index 912a5e8d052..376d25438aa 100644 --- a/dlls/nsi/nsi.spec +++ b/dlls/nsi/nsi.spec @@ -9,7 +9,7 @@ @ stub NsiFreePersistentDataWithMaskTable @ stdcall NsiFreeTable(ptr ptr ptr ptr) @ stdcall NsiGetAllParameters(long ptr long ptr long ptr long ptr long ptr long) -@ stub NsiGetAllParametersEx +@ stdcall NsiGetAllParametersEx(ptr) @ stub NsiGetAllPersistentParametersWithMask @ stub NsiObjectSecurity @ stdcall NsiGetParameter(long ptr long ptr long long ptr long long) diff --git a/dlls/nsi/tests/nsi.c b/dlls/nsi/tests/nsi.c index 5e2ea71646c..7c2c57b9548 100644 --- a/dlls/nsi/tests/nsi.c +++ b/dlls/nsi/tests/nsi.c @@ -40,6 +40,7 @@ static void test_nsi_api( void ) struct nsi_ndis_ifinfo_rw *rw_tbl, *rw, get_rw, *enum_rw_tbl, *enum_rw; struct nsi_ndis_ifinfo_dynamic *dyn_tbl, *dyn, get_dyn, *enum_dyn_tbl, *enum_dyn; struct nsi_ndis_ifinfo_static *stat_tbl, *stat, get_stat, *enum_stat_tbl, *enum_stat; + struct nsi_get_all_parameters_ex get_all_params; struct nsi_enumerate_all_ex enum_params; DWORD err, count, i, rw_size, enum_count; NET_LUID *luid_tbl, *enum_luid_tbl; @@ -81,6 +82,35 @@ todo_wine memset( &get_dyn, 0xcc, sizeof(get_dyn) ); memset( &get_stat, 0xcc, sizeof(get_stat) ); + memset( &get_all_params, 0, sizeof(get_all_params) ); + get_all_params.first_arg = 1; + get_all_params.module = &NPI_MS_NDIS_MODULEID; + get_all_params.table = NSI_NDIS_IFINFO_TABLE; + get_all_params.key = luid_tbl + i; + get_all_params.key_size = sizeof(*luid_tbl); + get_all_params.rw_data = &get_rw; + get_all_params.rw_size = rw_size; + get_all_params.dynamic_data = &get_dyn; + get_all_params.dynamic_size = sizeof(get_dyn); + get_all_params.static_data = &get_stat; + get_all_params.static_size = sizeof(get_stat); + + err = NsiGetAllParametersEx( &get_all_params ); + ok( !err, "got %d\n", err ); + /* test a selection of members */ + ok( IsEqualGUID( &get_rw.network_guid, &rw->network_guid ), "mismatch\n" ); + ok( get_rw.alias.Length == rw->alias.Length, "mismatch\n" ); + ok( !memcmp( get_rw.alias.String, rw->alias.String, rw->alias.Length ), "mismatch\n" ); + ok( get_rw.phys_addr.Length == rw->phys_addr.Length, "mismatch\n" ); + ok( !memcmp( get_rw.phys_addr.Address, rw->phys_addr.Address, IF_MAX_PHYS_ADDRESS_LENGTH ), "mismatch\n" ); + ok( get_dyn.oper_status == dyn->oper_status, "mismatch\n" ); + ok( get_stat.if_index == stat->if_index, "mismatch\n" ); + ok( IsEqualGUID( &get_stat.if_guid, &stat->if_guid ), "mismatch\n" ); + + memset( &get_rw, 0xcc, sizeof(get_rw) ); + memset( &get_dyn, 0xcc, sizeof(get_dyn) ); + memset( &get_stat, 0xcc, sizeof(get_stat) ); + err = NsiGetParameter( 1, &NPI_MS_NDIS_MODULEID, NSI_NDIS_IFINFO_TABLE, luid_tbl + i, sizeof(*luid_tbl), NSI_PARAM_TYPE_RW, &get_rw.alias, sizeof(get_rw.alias), FIELD_OFFSET(struct nsi_ndis_ifinfo_rw, alias) ); diff --git a/include/wine/nsi.h b/include/wine/nsi.h index 999b8a57810..81d221324e9 100644 --- a/include/wine/nsi.h +++ b/include/wine/nsi.h @@ -116,6 +116,23 @@ struct nsi_enumerate_all_ex DWORD_PTR count; }; +struct nsi_get_all_parameters_ex +{ + void *unknown[2]; + const NPI_MODULEID *module; + DWORD_PTR table; + DWORD first_arg; + DWORD unknown2; + const void *key; + DWORD key_size; + void *rw_data; + DWORD rw_size; + void *dynamic_data; + DWORD dynamic_size; + void *static_data; + DWORD static_size; +}; + DWORD WINAPI NsiAllocateAndGetTable( DWORD unk, const NPI_MODULEID *module, DWORD table, void **key_data, DWORD key_size, void **rw_data, DWORD rw_size, void **dynamic_data, DWORD dynamic_size, void **static_data, DWORD static_size, DWORD *count, DWORD unk2 ); @@ -128,6 +145,7 @@ void WINAPI NsiFreeTable( void *key_data, void *rw_data, void *dynamic_data, voi DWORD WINAPI NsiGetAllParameters( DWORD unk, const NPI_MODULEID *module, DWORD table, const void *key, DWORD key_size, void *rw_data, DWORD rw_size, void *dynamic_data, DWORD dynamic_size, void *static_data, DWORD static_size ); +DWORD WINAPI NsiGetAllParametersEx( struct nsi_get_all_parameters_ex *params ); DWORD WINAPI NsiGetParameter( DWORD unk, const NPI_MODULEID *module, DWORD table, const void *key, DWORD key_size, DWORD param_type, void *data, DWORD data_size, DWORD data_offset );
1
0
0
0
Huw Davies : nsi: Add a stub implementation of NsiEnumerateObjectsAllParametersEx().
by Alexandre Julliard
28 Jun '21
28 Jun '21
Module: wine Branch: master Commit: 2bde6ccddb11cf09c3b353a98d5d7e8a578a9f2f URL:
https://source.winehq.org/git/wine.git/?a=commit;h=2bde6ccddb11cf09c3b353a9…
Author: Huw Davies <huw(a)codeweavers.com> Date: Mon Jun 28 08:35:48 2021 +0100 nsi: Add a stub implementation of NsiEnumerateObjectsAllParametersEx(). Signed-off-by: Huw Davies <huw(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/nsi/nsi.c | 27 +++++++++++++++++++++++++++ dlls/nsi/nsi.spec | 2 +- dlls/nsi/tests/nsi.c | 20 ++++++++++++++++++++ include/wine/nsi.h | 19 +++++++++++++++++++ 4 files changed, 67 insertions(+), 1 deletion(-) diff --git a/dlls/nsi/nsi.c b/dlls/nsi/nsi.c index 66054ffacd6..1ed0cfad916 100644 --- a/dlls/nsi/nsi.c +++ b/dlls/nsi/nsi.c @@ -43,8 +43,35 @@ DWORD WINAPI NsiEnumerateObjectsAllParameters( DWORD unk, DWORD unk2, const NPI_ void *dynamic_data, DWORD dynamic_size, void *static_data, DWORD static_size, DWORD *count ) { + struct nsi_enumerate_all_ex params; + DWORD err; + FIXME( "%d %d %p %d %p %d %p %d %p %d %p %d %p: stub\n", unk, unk2, module, table, key_data, key_size, rw_data, rw_size, dynamic_data, dynamic_size, static_data, static_size, count ); + + params.unknown[0] = 0; + params.unknown[1] = 0; + params.module = module; + params.table = table; + params.first_arg = unk; + params.second_arg = unk2; + params.key_data = key_data; + params.key_size = key_size; + params.rw_data = rw_data; + params.rw_size = rw_size; + params.dynamic_data = dynamic_data; + params.dynamic_size = dynamic_size; + params.static_data = static_data; + params.static_size = static_size; + params.count = *count; + + err = NsiEnumerateObjectsAllParametersEx( ¶ms ); + *count = params.count; + return err; +} + +DWORD WINAPI NsiEnumerateObjectsAllParametersEx( struct nsi_enumerate_all_ex *params ) +{ return ERROR_CALL_NOT_IMPLEMENTED; } diff --git a/dlls/nsi/nsi.spec b/dlls/nsi/nsi.spec index d4a29c38fe6..912a5e8d052 100644 --- a/dlls/nsi/nsi.spec +++ b/dlls/nsi/nsi.spec @@ -4,7 +4,7 @@ @ stub NsiDeregisterChangeNotification @ stub NsiDeregisterChangeNotificationEx @ stdcall NsiEnumerateObjectsAllParameters(long long ptr long ptr long ptr long ptr long ptr long ptr) -@ stub NsiEnumerateObjectsAllParametersEx +@ stdcall NsiEnumerateObjectsAllParametersEx(ptr) @ stub NsiEnumerateObjectsAllPersistentParametersWithMask @ stub NsiFreePersistentDataWithMaskTable @ stdcall NsiFreeTable(ptr ptr ptr ptr) diff --git a/dlls/nsi/tests/nsi.c b/dlls/nsi/tests/nsi.c index b1befd548cd..5e2ea71646c 100644 --- a/dlls/nsi/tests/nsi.c +++ b/dlls/nsi/tests/nsi.c @@ -40,6 +40,7 @@ static void test_nsi_api( void ) struct nsi_ndis_ifinfo_rw *rw_tbl, *rw, get_rw, *enum_rw_tbl, *enum_rw; struct nsi_ndis_ifinfo_dynamic *dyn_tbl, *dyn, get_dyn, *enum_dyn_tbl, *enum_dyn; struct nsi_ndis_ifinfo_static *stat_tbl, *stat, get_stat, *enum_stat_tbl, *enum_stat; + struct nsi_enumerate_all_ex enum_params; DWORD err, count, i, rw_size, enum_count; NET_LUID *luid_tbl, *enum_luid_tbl; @@ -159,6 +160,25 @@ todo_wine ok( enum_luid_tbl[i].Value == luid_tbl[i].Value, "%d: mismatch\n", i ); } + memset( &enum_params, 0, sizeof(enum_params) ); + enum_params.first_arg = 1; + enum_params.second_arg = 1; + enum_params.module = &NPI_MS_NDIS_MODULEID; + enum_params.table = NSI_NDIS_IFINFO_TABLE; + enum_params.key_data = enum_luid_tbl; + enum_params.key_size = sizeof(*enum_luid_tbl); + enum_params.rw_data = enum_rw_tbl; + enum_params.rw_size = rw_size; + enum_params.dynamic_data = enum_dyn_tbl; + enum_params.dynamic_size = sizeof(*enum_dyn_tbl); + enum_params.static_data = enum_stat_tbl; + enum_params.static_size = sizeof(*enum_stat_tbl); + enum_params.count = count; + + err = NsiEnumerateObjectsAllParametersEx( &enum_params ); + ok( !err, "got %d\n", err ); + ok( enum_params.count == count, "mismatch\n" ); + free( enum_luid_tbl ); free( enum_rw_tbl ); free( enum_dyn_tbl ); diff --git a/include/wine/nsi.h b/include/wine/nsi.h index 648adac9931..999b8a57810 100644 --- a/include/wine/nsi.h +++ b/include/wine/nsi.h @@ -98,6 +98,24 @@ struct nsi_ndis_ifinfo_static #define NSI_PARAM_TYPE_DYNAMIC 1 #define NSI_PARAM_TYPE_STATIC 2 +struct nsi_enumerate_all_ex +{ + void *unknown[2]; + const NPI_MODULEID *module; + DWORD_PTR table; + DWORD first_arg; + DWORD second_arg; + void *key_data; + DWORD key_size; + void *rw_data; + DWORD rw_size; + void *dynamic_data; + DWORD dynamic_size; + void *static_data; + DWORD static_size; + DWORD_PTR count; +}; + DWORD WINAPI NsiAllocateAndGetTable( DWORD unk, const NPI_MODULEID *module, DWORD table, void **key_data, DWORD key_size, void **rw_data, DWORD rw_size, void **dynamic_data, DWORD dynamic_size, void **static_data, DWORD static_size, DWORD *count, DWORD unk2 ); @@ -105,6 +123,7 @@ DWORD WINAPI NsiEnumerateObjectsAllParameters( DWORD unk, DWORD unk2, const NPI_ void *key_data, DWORD key_size, void *rw_data, DWORD rw_size, void *dynamic_data, DWORD dynamic_size, void *static_data, DWORD static_size, DWORD *count ); +DWORD WINAPI NsiEnumerateObjectsAllParametersEx( struct nsi_enumerate_all_ex *params ); void WINAPI NsiFreeTable( void *key_data, void *rw_data, void *dynamic_data, void *static_data ); DWORD WINAPI NsiGetAllParameters( DWORD unk, const NPI_MODULEID *module, DWORD table, const void *key, DWORD key_size, void *rw_data, DWORD rw_size, void *dynamic_data, DWORD dynamic_size,
1
0
0
0
Huw Davies : nsi: Add a stub implementation of NsiEnumerateObjectsAllParameters().
by Alexandre Julliard
28 Jun '21
28 Jun '21
Module: wine Branch: master Commit: 687650db1b6d0145112c025e38bc0a94b4248c82 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=687650db1b6d0145112c025e…
Author: Huw Davies <huw(a)codeweavers.com> Date: Mon Jun 28 08:35:47 2021 +0100 nsi: Add a stub implementation of NsiEnumerateObjectsAllParameters(). Signed-off-by: Huw Davies <huw(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/nsi/nsi.c | 10 ++++++++ dlls/nsi/nsi.spec | 2 +- dlls/nsi/tests/nsi.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++++---- include/wine/nsi.h | 4 +++ 4 files changed, 82 insertions(+), 6 deletions(-) diff --git a/dlls/nsi/nsi.c b/dlls/nsi/nsi.c index bf52fe248c8..66054ffacd6 100644 --- a/dlls/nsi/nsi.c +++ b/dlls/nsi/nsi.c @@ -38,6 +38,16 @@ DWORD WINAPI NsiAllocateAndGetTable( DWORD unk, const NPI_MODULEID *module, DWOR return ERROR_CALL_NOT_IMPLEMENTED; } +DWORD WINAPI NsiEnumerateObjectsAllParameters( DWORD unk, DWORD unk2, const NPI_MODULEID *module, DWORD table, + void *key_data, DWORD key_size, void *rw_data, DWORD rw_size, + void *dynamic_data, DWORD dynamic_size, void *static_data, DWORD static_size, + DWORD *count ) +{ + FIXME( "%d %d %p %d %p %d %p %d %p %d %p %d %p: stub\n", unk, unk2, module, table, key_data, key_size, + rw_data, rw_size, dynamic_data, dynamic_size, static_data, static_size, count ); + return ERROR_CALL_NOT_IMPLEMENTED; +} + void WINAPI NsiFreeTable( void *key_data, void *rw_data, void *dynamic_data, void *static_data ) { FIXME( "%p %p %p %p: stub\n", key_data, rw_data, dynamic_data, static_data ); diff --git a/dlls/nsi/nsi.spec b/dlls/nsi/nsi.spec index 46757988146..d4a29c38fe6 100644 --- a/dlls/nsi/nsi.spec +++ b/dlls/nsi/nsi.spec @@ -3,7 +3,7 @@ @ stub NsiCancelChangeNotification @ stub NsiDeregisterChangeNotification @ stub NsiDeregisterChangeNotificationEx -@ stub NsiEnumerateObjectsAllParameters +@ stdcall NsiEnumerateObjectsAllParameters(long long ptr long ptr long ptr long ptr long ptr long ptr) @ stub NsiEnumerateObjectsAllParametersEx @ stub NsiEnumerateObjectsAllPersistentParametersWithMask @ stub NsiFreePersistentDataWithMaskTable diff --git a/dlls/nsi/tests/nsi.c b/dlls/nsi/tests/nsi.c index 72c9dcdccbd..b1befd548cd 100644 --- a/dlls/nsi/tests/nsi.c +++ b/dlls/nsi/tests/nsi.c @@ -37,11 +37,11 @@ static void test_nsi_api( void ) { DWORD rw_sizes[] = { FIELD_OFFSET(struct nsi_ndis_ifinfo_rw, name2), FIELD_OFFSET(struct nsi_ndis_ifinfo_rw, unk), sizeof(struct nsi_ndis_ifinfo_rw) }; - struct nsi_ndis_ifinfo_rw *rw_tbl, *rw, get_rw; - struct nsi_ndis_ifinfo_dynamic *dyn_tbl, *dyn, get_dyn; - struct nsi_ndis_ifinfo_static *stat_tbl, *stat, get_stat; - DWORD err, count, i, rw_size; - NET_LUID *luid_tbl; + struct nsi_ndis_ifinfo_rw *rw_tbl, *rw, get_rw, *enum_rw_tbl, *enum_rw; + struct nsi_ndis_ifinfo_dynamic *dyn_tbl, *dyn, get_dyn, *enum_dyn_tbl, *enum_dyn; + struct nsi_ndis_ifinfo_static *stat_tbl, *stat, get_stat, *enum_stat_tbl, *enum_stat; + DWORD err, count, i, rw_size, enum_count; + NET_LUID *luid_tbl, *enum_luid_tbl; /* Use the NDIS ifinfo table to test various api */ for (i = 0; i < ARRAY_SIZE(rw_sizes); i++) @@ -101,6 +101,68 @@ todo_wine winetest_pop_context(); } + enum_count = 0; + err = NsiEnumerateObjectsAllParameters( 1, 1, &NPI_MS_NDIS_MODULEID, NSI_NDIS_IFINFO_TABLE, + NULL, 0, NULL, 0, + NULL, 0, NULL, 0, &enum_count ); + ok( !err, "got %d\n", err ); + ok( enum_count == count, "mismatch\n" ); + + enum_luid_tbl = malloc( count * sizeof(*enum_luid_tbl) ); + enum_rw_tbl = malloc( count * rw_size ); + enum_dyn_tbl = malloc( count * sizeof(*enum_dyn_tbl) ); + enum_stat_tbl = malloc( count * sizeof(*enum_stat_tbl) ); + + err = NsiEnumerateObjectsAllParameters( 1, 1, &NPI_MS_NDIS_MODULEID, NSI_NDIS_IFINFO_TABLE, + enum_luid_tbl, sizeof(*enum_luid_tbl), enum_rw_tbl, rw_size, + enum_dyn_tbl, sizeof(*enum_dyn_tbl), enum_stat_tbl, sizeof(*enum_stat_tbl), + &enum_count ); + ok( !err, "got %d\n", err ); + ok( enum_count == count, "mismatch\n" ); + + for (i = 0; i < count; i++) + { + winetest_push_context( "%d", i ); + rw = (struct nsi_ndis_ifinfo_rw *)((BYTE *)rw_tbl + i * rw_size); + enum_rw = (struct nsi_ndis_ifinfo_rw *)((BYTE *)enum_rw_tbl + i * rw_size); + dyn = dyn_tbl + i; + enum_dyn = enum_dyn_tbl + i; + stat = stat_tbl + i; + enum_stat = enum_stat_tbl + i; + + /* test a selection of members */ + ok( enum_luid_tbl[i].Value == luid_tbl[i].Value, "mismatch\n" ); + ok( IsEqualGUID( &enum_rw->network_guid, &rw->network_guid ), "mismatch\n" ); + ok( enum_rw->alias.Length == rw->alias.Length, "mismatch\n" ); + ok( !memcmp( enum_rw->alias.String, rw->alias.String, rw->alias.Length ), "mismatch\n" ); + ok( enum_rw->phys_addr.Length == rw->phys_addr.Length, "mismatch\n" ); + ok( !memcmp( enum_rw->phys_addr.Address, rw->phys_addr.Address, IF_MAX_PHYS_ADDRESS_LENGTH ), "mismatch\n" ); + ok( enum_dyn->oper_status == dyn->oper_status, "mismatch\n" ); + ok( enum_stat->if_index == stat->if_index, "mismatch\n" ); + ok( IsEqualGUID( &enum_stat->if_guid, &stat->if_guid ), "mismatch\n" ); + winetest_pop_context(); + } + + if (count > 0) + { + enum_count--; + memset( enum_luid_tbl, 0xcc, count * sizeof(*enum_luid_tbl) ); + + err = NsiEnumerateObjectsAllParameters( 1, 1, &NPI_MS_NDIS_MODULEID, NSI_NDIS_IFINFO_TABLE, + enum_luid_tbl, sizeof(*enum_luid_tbl), enum_rw_tbl, rw_size, + enum_dyn_tbl, sizeof(*enum_dyn_tbl), enum_stat_tbl, sizeof(*enum_stat_tbl), + &enum_count ); + ok( err == ERROR_MORE_DATA, "got %d\n", err ); + ok( enum_count == count - 1, "mismatch\n" ); + + for (i = 0; i < enum_count; i++) /* for simplicity just check the luids */ + ok( enum_luid_tbl[i].Value == luid_tbl[i].Value, "%d: mismatch\n", i ); + } + + free( enum_luid_tbl ); + free( enum_rw_tbl ); + free( enum_dyn_tbl ); + free( enum_stat_tbl ); NsiFreeTable( luid_tbl, rw_tbl, dyn_tbl, stat_tbl ); } diff --git a/include/wine/nsi.h b/include/wine/nsi.h index e0370b00d41..648adac9931 100644 --- a/include/wine/nsi.h +++ b/include/wine/nsi.h @@ -101,6 +101,10 @@ struct nsi_ndis_ifinfo_static DWORD WINAPI NsiAllocateAndGetTable( DWORD unk, const NPI_MODULEID *module, DWORD table, void **key_data, DWORD key_size, void **rw_data, DWORD rw_size, void **dynamic_data, DWORD dynamic_size, void **static_data, DWORD static_size, DWORD *count, DWORD unk2 ); +DWORD WINAPI NsiEnumerateObjectsAllParameters( DWORD unk, DWORD unk2, const NPI_MODULEID *module, DWORD table, + void *key_data, DWORD key_size, void *rw_data, DWORD rw_size, + void *dynamic_data, DWORD dynamic_size, void *static_data, DWORD static_size, + DWORD *count ); void WINAPI NsiFreeTable( void *key_data, void *rw_data, void *dynamic_data, void *static_data ); DWORD WINAPI NsiGetAllParameters( DWORD unk, const NPI_MODULEID *module, DWORD table, const void *key, DWORD key_size, void *rw_data, DWORD rw_size, void *dynamic_data, DWORD dynamic_size,
1
0
0
0
← Newer
1
...
5
6
7
8
9
10
11
...
82
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
Results per page:
10
25
50
100
200