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
September 2023
----- 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
920 discussions
Start a n
N
ew thread
Daniel Lehman : msvcp110: Add std::_Throw_future_error.
by Alexandre Julliard
13 Sep '23
13 Sep '23
Module: wine Branch: master Commit: c66eb79ed1439368562d7a58a3cb0e2d5c57efa7 URL:
https://gitlab.winehq.org/wine/wine/-/commit/c66eb79ed1439368562d7a58a3cb0e…
Author: Daniel Lehman <dlehman25(a)gmail.com> Date: Thu Sep 7 22:16:39 2023 -0700 msvcp110: Add std::_Throw_future_error. --- dlls/msvcp110/msvcp110.spec | 4 +- dlls/msvcp120/msvcp120.spec | 4 +- dlls/msvcp120_app/msvcp120_app.spec | 4 +- dlls/msvcp140/msvcp140.spec | 4 +- dlls/msvcp90/exception.c | 73 +++++++++++++++++++++++++++++++++++++ dlls/msvcp_win/msvcp_win.spec | 4 +- 6 files changed, 83 insertions(+), 10 deletions(-) diff --git a/dlls/msvcp110/msvcp110.spec b/dlls/msvcp110/msvcp110.spec index 074ca946b19..4326e9a4589 100644 --- a/dlls/msvcp110/msvcp110.spec +++ b/dlls/msvcp110/msvcp110.spec @@ -1780,8 +1780,8 @@ @ cdecl -arch=win64 ?_Syserror_map@std@@YAPEBDH@Z(long) _Syserror_map @ stub ?_Throw_C_error@std@@YAXH@Z @ stub ?_Throw_Cpp_error@std@@YAXH@Z -@ stub -arch=win32 ?_Throw_future_error@std@@YAXABVerror_code@1@@Z -@ stub -arch=win64 ?_Throw_future_error@std@@YAXAEBVerror_code@1@@Z +@ cdecl -arch=win32 ?_Throw_future_error@std@@YAXABVerror_code@1@@Z(ptr) _Throw_future_error +@ cdecl -arch=win64 ?_Throw_future_error@std@@YAXAEBVerror_code@1@@Z(ptr) _Throw_future_error @ stub ?_Throw_lock_error@threads@stdext@@YAXXZ @ stub ?_Throw_resource_error@threads@stdext@@YAXXZ @ cdecl -arch=arm ?_Tidy@?$_Yarn@D@std@@AAAXXZ(ptr) _Yarn_char__Tidy diff --git a/dlls/msvcp120/msvcp120.spec b/dlls/msvcp120/msvcp120.spec index 0d2a5fe0fca..615172a3376 100644 --- a/dlls/msvcp120/msvcp120.spec +++ b/dlls/msvcp120/msvcp120.spec @@ -1741,8 +1741,8 @@ @ cdecl -arch=win64 ?_Syserror_map@std@@YAPEBDH@Z(long) _Syserror_map @ stub ?_Throw_C_error@std@@YAXH@Z @ stub ?_Throw_Cpp_error@std@@YAXH@Z -@ stub -arch=win32 ?_Throw_future_error@std@@YAXABVerror_code@1@@Z -@ stub -arch=win64 ?_Throw_future_error@std@@YAXAEBVerror_code@1@@Z +@ cdecl -arch=win32 ?_Throw_future_error@std@@YAXABVerror_code@1@@Z(ptr) _Throw_future_error +@ cdecl -arch=win64 ?_Throw_future_error@std@@YAXAEBVerror_code@1@@Z(ptr) _Throw_future_error @ stub ?_Throw_lock_error@threads@stdext@@YAXXZ @ stub ?_Throw_resource_error@threads@stdext@@YAXXZ @ cdecl -arch=arm ?_Tidy@?$_Yarn@D@std@@AAAXXZ(ptr) _Yarn_char__Tidy diff --git a/dlls/msvcp120_app/msvcp120_app.spec b/dlls/msvcp120_app/msvcp120_app.spec index d11ba788898..b8f7e4b69e2 100644 --- a/dlls/msvcp120_app/msvcp120_app.spec +++ b/dlls/msvcp120_app/msvcp120_app.spec @@ -1741,8 +1741,8 @@ @ cdecl -arch=win64 ?_Syserror_map@std@@YAPEBDH@Z(long) msvcp120.?_Syserror_map@std@@YAPEBDH@Z @ stub ?_Throw_C_error@std@@YAXH@Z @ stub ?_Throw_Cpp_error@std@@YAXH@Z -@ stub -arch=win32 ?_Throw_future_error@std@@YAXABVerror_code@1@@Z -@ stub -arch=win64 ?_Throw_future_error@std@@YAXAEBVerror_code@1@@Z +@ cdecl -arch=win32 ?_Throw_future_error@std@@YAXABVerror_code@1@@Z(ptr) msvcp120.?_Throw_future_error@std@@YAXABVerror_code@1@@Z +@ cdecl -arch=win64 ?_Throw_future_error@std@@YAXAEBVerror_code@1@@Z(ptr) msvcp120.?_Throw_future_error@std@@YAXAEBVerror_code@1@@Z @ stub ?_Throw_lock_error@threads@stdext@@YAXXZ @ stub ?_Throw_resource_error@threads@stdext@@YAXXZ @ cdecl -arch=arm ?_Tidy@?$_Yarn@D@std@@AAAXXZ(ptr) msvcp120.?_Tidy@?$_Yarn@D@std@@AAAXXZ diff --git a/dlls/msvcp140/msvcp140.spec b/dlls/msvcp140/msvcp140.spec index 8e57b828182..258a5acc648 100644 --- a/dlls/msvcp140/msvcp140.spec +++ b/dlls/msvcp140/msvcp140.spec @@ -1625,8 +1625,8 @@ @ cdecl -arch=win64 ?_Syserror_map@std@@YAPEBDH@Z(long) _Syserror_map @ stub ?_Throw_C_error@std@@YAXH@Z @ stub ?_Throw_Cpp_error@std@@YAXH@Z -@ stub -arch=win32 ?_Throw_future_error@std@@YAXABVerror_code@1@@Z -@ stub -arch=win64 ?_Throw_future_error@std@@YAXAEBVerror_code@1@@Z +@ cdecl -arch=win32 ?_Throw_future_error@std@@YAXABVerror_code@1@@Z(ptr) _Throw_future_error +@ cdecl -arch=win64 ?_Throw_future_error@std@@YAXAEBVerror_code@1@@Z(ptr) _Throw_future_error @ cdecl -arch=arm ?_Tidy@?$_Yarn@D@std@@AAAXXZ(ptr) _Yarn_char__Tidy @ thiscall -arch=i386 ?_Tidy@?$_Yarn@D@std@@AAEXXZ(ptr) _Yarn_char__Tidy @ cdecl -arch=win64 ?_Tidy@?$_Yarn@D@std@@AEAAXXZ(ptr) _Yarn_char__Tidy diff --git a/dlls/msvcp90/exception.c b/dlls/msvcp90/exception.c index 66a5061a4f0..63c698f3c6c 100644 --- a/dlls/msvcp90/exception.c +++ b/dlls/msvcp90/exception.c @@ -948,6 +948,68 @@ bool __cdecl MSVCP__uncaught_exception(void) } #if _MSVCP_VER >= 110 +typedef struct +{ + int code; + void *category; +} error_code; + +typedef struct +{ + logic_error base; + error_code code; +} future_error; + +extern const vtable_ptr future_error_vtable; + +DEFINE_THISCALL_WRAPPER(future_error_copy_ctor, 8) +future_error* __thiscall future_error_copy_ctor(future_error *this, const future_error *rhs) +{ + logic_error_copy_ctor(&this->base, &rhs->base); + this->code = rhs->code; + this->base.e.vtable = &future_error_vtable; + return this; +} + +DEFINE_THISCALL_WRAPPER(MSVCP_future_error_what, 4) +const char* __thiscall MSVCP_future_error_what(future_error *this) +{ + const char *names[4] = { + "broken promise", + "future already retrieved", + "promise already satisfied", + "no state", + }; +#if _MSVCP_VER == 110 + int code = this->code.code; +#else + int code = this->code.code-1; +#endif + TRACE("%p\n", this); + return code >= 0 && code < ARRAY_SIZE(names) ? names[code] : NULL; +} + +DEFINE_RTTI_DATA3(future_error, 0, &future_error_rtti_base_descriptor, + &logic_error_rtti_base_descriptor, &exception_rtti_base_descriptor, + ".?AVfuture_error@std@@") +DEFINE_CXX_DATA3(future_error, &logic_error_cxx_type_info, &logic_error_cxx_type_info, + &exception_cxx_type_info, MSVCP_logic_error_dtor) + +/* ?_Throw_future_error@std@@YAXABVerror_code@1@@Z */ +/* ?_Throw_future_error@std@@YAXAEBVerror_code@1@@Z */ +void __cdecl DECLSPEC_NORETURN _Throw_future_error( const error_code *error_code ) +{ + future_error e; + const char *name = ""; + + TRACE("(%p)\n", error_code); + + MSVCP_logic_error_ctor(&e.base, EXCEPTION_NAME(name)); + e.code = *error_code; + e.base.e.vtable = &future_error_vtable; + _CxxThrowException(&e, &future_error_cxx_type); +} + typedef struct { EXCEPTION_RECORD *rec; @@ -1360,6 +1422,11 @@ __ASM_BLOCK_BEGIN(exception_vtables) EXCEPTION_VTABLE(runtime_error, VTABLE_ADD_FUNC(MSVCP_runtime_error_vector_dtor) VTABLE_ADD_FUNC(MSVCP_runtime_error_what)); +#if _MSVCP_VER >= 110 + EXCEPTION_VTABLE(future_error, + VTABLE_ADD_FUNC(MSVCP_logic_error_vector_dtor) + VTABLE_ADD_FUNC(MSVCP_future_error_what)); +#endif #if _MSVCP_VER > 110 EXCEPTION_VTABLE(_System_error, VTABLE_ADD_FUNC(MSVCP_failure_vector_dtor) @@ -1422,6 +1489,9 @@ void init_exception(void *base) init_out_of_range_rtti(base); init_invalid_argument_rtti(base); init_runtime_error_rtti(base); +#if _MSVCP_VER >= 110 + init_future_error_rtti(base); +#endif #if _MSVCP_VER > 110 init__System_error_rtti(base); #endif @@ -1439,6 +1509,9 @@ void init_exception(void *base) init_out_of_range_cxx(base); init_invalid_argument_cxx(base); init_runtime_error_cxx(base); +#if _MSVCP_VER >= 110 + init_future_error_cxx(base); +#endif #if _MSVCP_VER > 110 init__System_error_cxx_type_info(base); #endif diff --git a/dlls/msvcp_win/msvcp_win.spec b/dlls/msvcp_win/msvcp_win.spec index 0e05582e251..99b34ccc9ac 100644 --- a/dlls/msvcp_win/msvcp_win.spec +++ b/dlls/msvcp_win/msvcp_win.spec @@ -1625,8 +1625,8 @@ @ cdecl -arch=win64 ?_Syserror_map@std@@YAPEBDH@Z(long) msvcp140.?_Syserror_map@std@@YAPEBDH@Z @ stub ?_Throw_C_error@std@@YAXH@Z @ stub ?_Throw_Cpp_error@std@@YAXH@Z -@ stub -arch=win32 ?_Throw_future_error@std@@YAXABVerror_code@1@@Z -@ stub -arch=win64 ?_Throw_future_error@std@@YAXAEBVerror_code@1@@Z +@ cdecl -arch=win32 ?_Throw_future_error@std@@YAXABVerror_code@1@@Z(ptr) msvcp140.?_Throw_future_error@std@@YAXABVerror_code@1@@Z +@ cdecl -arch=win64 ?_Throw_future_error@std@@YAXAEBVerror_code@1@@Z(ptr) msvcp140.?_Throw_future_error@std@@YAXAEBVerror_code@1@@Z @ cdecl -arch=arm ?_Tidy@?$_Yarn@D@std@@AAAXXZ(ptr) msvcp140.?_Tidy@?$_Yarn@D@std@@AAAXXZ @ thiscall -arch=i386 ?_Tidy@?$_Yarn@D@std@@AAEXXZ(ptr) msvcp140.?_Tidy@?$_Yarn@D@std@@AAEXXZ @ cdecl -arch=win64 ?_Tidy@?$_Yarn@D@std@@AEAAXXZ(ptr) msvcp140.?_Tidy@?$_Yarn@D@std@@AEAAXXZ
1
0
0
0
Biswapriyo Nath : include: Add IEnumTfPropertyValue definition in msctf.idl.
by Alexandre Julliard
13 Sep '23
13 Sep '23
Module: wine Branch: master Commit: 844efaeec530aaed5299675b0e7e0802db895d7f URL:
https://gitlab.winehq.org/wine/wine/-/commit/844efaeec530aaed5299675b0e7e08…
Author: Biswapriyo Nath <nathbappai(a)gmail.com> Date: Tue Sep 12 20:30:50 2023 +0000 include: Add IEnumTfPropertyValue definition in msctf.idl. --- include/msctf.idl | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/include/msctf.idl b/include/msctf.idl index c2f171997ff..6a9b36a670e 100644 --- a/include/msctf.idl +++ b/include/msctf.idl @@ -166,6 +166,12 @@ typedef [uuid(77c12f95-b783-450d-879f-1cd2362c6521)] struct TF_PRESERVEDKEY typedef [uuid(5a886226-ae9a-489b-b991-2b1e25ee59a9)] enum { TF_ANCHOR_START = 0, TF_ANCHOR_END = 1 } TfAnchor; +typedef [uuid(d678c645-eb6a-45c9-b4ee-0f3e3a991348)] struct TF_PROPERTYVAL +{ + GUID guidId; + VARIANT varValue; +} TF_PROPERTYVAL; + [ object, uuid(101d6610-0990-11d3-8df0-00105a2799b5), @@ -375,6 +381,27 @@ interface IEnumTfProperties : IUnknown [in] ULONG count); } +[ + object, + uuid(8ed8981b-7c10-4d7d-9fb3-ab72e9c75f72), + pointer_default(unique) +] +interface IEnumTfPropertyValue : IUnknown +{ + HRESULT Clone( + [out] IEnumTfPropertyValue **property_value); + + HRESULT Next( + [in] ULONG count, + [out, size_is(count), length_is(*fetched)] TF_PROPERTYVAL *values, + [out] ULONG *fetched); + + HRESULT Reset(); + + HRESULT Skip( + [in] ULONG count); +} + [ object, uuid(463a506d-6992-49d2-9b88-93d55e70bb16),
1
0
0
0
Francisco Casas : vkd3d-shader/hlsl: Lower matrix swizzles.
by Alexandre Julliard
13 Sep '23
13 Sep '23
Module: vkd3d Branch: master Commit: 39563aa5b3eb725671b3d26c38d619ed0244d2a0 URL:
https://gitlab.winehq.org/wine/vkd3d/-/commit/39563aa5b3eb725671b3d26c38d61…
Author: Francisco Casas <fcasas(a)codeweavers.com> Date: Wed Sep 6 21:01:49 2023 -0300 vkd3d-shader/hlsl: Lower matrix swizzles. --- libs/vkd3d-shader/hlsl_codegen.c | 50 +++++++++++++++++++++++++++++++++++ tests/hlsl/swizzle-matrix.shader_test | 10 +++---- 2 files changed, 55 insertions(+), 5 deletions(-) diff --git a/libs/vkd3d-shader/hlsl_codegen.c b/libs/vkd3d-shader/hlsl_codegen.c index 132f44a2..be024842 100644 --- a/libs/vkd3d-shader/hlsl_codegen.c +++ b/libs/vkd3d-shader/hlsl_codegen.c @@ -934,6 +934,55 @@ static struct hlsl_ir_node *add_zero_mipmap_level(struct hlsl_ctx *ctx, struct h return &coords_load->node; } +/* hlsl_ir_swizzle nodes that directly point to a matrix value are only a parse-time construct that + * represents matrix swizzles (e.g. mat._m01_m23) before we know if they will be used in the lhs of + * an assignment or as a value made from different components of the matrix. The former cases should + * have already been split into several separate assignments, but the latter are lowered by this + * pass. */ +static bool lower_matrix_swizzles(struct hlsl_ctx *ctx, struct hlsl_ir_node *instr, struct hlsl_block *block) +{ + struct hlsl_ir_swizzle *swizzle; + struct hlsl_ir_load *var_load; + struct hlsl_deref var_deref; + struct hlsl_type *matrix_type; + struct hlsl_ir_var *var; + unsigned int x, y, k, i; + + if (instr->type != HLSL_IR_SWIZZLE) + return false; + swizzle = hlsl_ir_swizzle(instr); + matrix_type = swizzle->val.node->data_type; + if (matrix_type->class != HLSL_CLASS_MATRIX) + return false; + + if (!(var = hlsl_new_synthetic_var(ctx, "matrix-swizzle", instr->data_type, &instr->loc))) + return false; + hlsl_init_simple_deref_from_var(&var_deref, var); + + for (i = 0; i < instr->data_type->dimx; ++i) + { + struct hlsl_block store_block; + struct hlsl_ir_node *load; + + y = (swizzle->swizzle >> (8 * i + 4)) & 0xf; + x = (swizzle->swizzle >> 8 * i) & 0xf; + k = y * matrix_type->dimx + x; + + if (!(load = hlsl_add_load_component(ctx, block, swizzle->val.node, k, &instr->loc))) + return false; + + if (!hlsl_new_store_component(ctx, &store_block, &var_deref, i, load)) + return false; + hlsl_block_add_block(block, &store_block); + } + + if (!(var_load = hlsl_new_var_load(ctx, var, &instr->loc))) + return false; + hlsl_block_add_instr(block, &var_load->node); + + return true; +} + /* hlsl_ir_index nodes are a parse-time construct used to represent array indexing and struct * record access before knowing if they will be used in the lhs of an assignment --in which case * they are lowered into a deref-- or as the load of an element within a larger value. @@ -4295,6 +4344,7 @@ int hlsl_emit_bytecode(struct hlsl_ctx *ctx, struct hlsl_ir_function_decl *entry while (hlsl_transform_ir(ctx, lower_calls, body, NULL)); + lower_ir(ctx, lower_matrix_swizzles, body); hlsl_transform_ir(ctx, lower_index_loads, body, NULL); LIST_FOR_EACH_ENTRY(var, &ctx->globals->vars, struct hlsl_ir_var, scope_entry) diff --git a/tests/hlsl/swizzle-matrix.shader_test b/tests/hlsl/swizzle-matrix.shader_test index 2602d9dd..bc2814eb 100644 --- a/tests/hlsl/swizzle-matrix.shader_test +++ b/tests/hlsl/swizzle-matrix.shader_test @@ -10,7 +10,7 @@ float4 main() : sv_target uniform 0 float4 11 21 31 -1 uniform 4 float4 12 22 32 -1 draw quad -todo probe all rgba (21.0, 31.0, 11.0, 12.0) +probe all rgba (21.0, 31.0, 11.0, 12.0) [pixel shader] @@ -25,7 +25,7 @@ float4 main() : sv_target uniform 0 float4 11 21 31 -1 uniform 4 float4 12 22 32 -1 draw quad -todo probe all rgba (11.0, 31.0, 12.0, 32.0) +probe all rgba (11.0, 31.0, 12.0, 32.0) [pixel shader] @@ -41,7 +41,7 @@ uniform 0 float4 11 12 -1 -1 uniform 4 float4 21 22 -1 -1 uniform 8 float4 31 32 -1 -1 draw quad -todo probe all rgba (11.0, 31.0, 12.0, 32.0) +probe all rgba (11.0, 31.0, 12.0, 32.0) [pixel shader] @@ -55,7 +55,7 @@ float4 main() : sv_target [test] draw quad -todo probe all rgba (1.0, 6.0, 1.0, 6.0) +probe all rgba (1.0, 6.0, 1.0, 6.0) % zero-based and one-based subscripts cannot be used in the same swizzle. @@ -152,7 +152,7 @@ float4 main() : SV_TARGET [test] draw quad -todo probe all rgba (40.0, 40.0, 40.0, 40.0) +probe all rgba (40.0, 40.0, 40.0, 40.0) [pixel shader todo]
1
0
0
0
Francisco Casas : tests: Test matrix swizzles.
by Alexandre Julliard
13 Sep '23
13 Sep '23
Module: vkd3d Branch: master Commit: 60a32793180fd4afb768b4ad7c324a90a9a2e492 URL:
https://gitlab.winehq.org/wine/vkd3d/-/commit/60a32793180fd4afb768b4ad7c324…
Author: Francisco Casas <fcasas(a)codeweavers.com> Date: Wed Sep 6 13:44:00 2023 -0300 tests: Test matrix swizzles. --- Makefile.am | 1 + tests/hlsl/swizzle-matrix.shader_test | 202 ++++++++++++++++++++++++++++++++++ 2 files changed, 203 insertions(+) diff --git a/Makefile.am b/Makefile.am index b36358b2..e869df1f 100644 --- a/Makefile.am +++ b/Makefile.am @@ -164,6 +164,7 @@ vkd3d_shader_tests = \ tests/hlsl/struct-assignment.shader_test \ tests/hlsl/struct-semantics.shader_test \ tests/hlsl/swizzle-constant-prop.shader_test \ + tests/hlsl/swizzle-matrix.shader_test \ tests/hlsl/swizzles.shader_test \ tests/hlsl/ternary.shader_test \ tests/hlsl/texture-load-offset.shader_test \ diff --git a/tests/hlsl/swizzle-matrix.shader_test b/tests/hlsl/swizzle-matrix.shader_test new file mode 100644 index 00000000..2602d9dd --- /dev/null +++ b/tests/hlsl/swizzle-matrix.shader_test @@ -0,0 +1,202 @@ +[pixel shader] +float3x2 mat; + +float4 main() : sv_target +{ + return mat._21_31_11_12; +} + +[test] +uniform 0 float4 11 21 31 -1 +uniform 4 float4 12 22 32 -1 +draw quad +todo probe all rgba (21.0, 31.0, 11.0, 12.0) + + +[pixel shader] +float3x2 mat; + +float4 main() : sv_target +{ + return mat._m00_m20_m01_m21; +} + +[test] +uniform 0 float4 11 21 31 -1 +uniform 4 float4 12 22 32 -1 +draw quad +todo probe all rgba (11.0, 31.0, 12.0, 32.0) + + +[pixel shader] +row_major float3x2 mat; + +float4 main() : sv_target +{ + return mat._11_31_12_32; +} + +[test] +uniform 0 float4 11 12 -1 -1 +uniform 4 float4 21 22 -1 -1 +uniform 8 float4 31 32 -1 -1 +draw quad +todo probe all rgba (11.0, 31.0, 12.0, 32.0) + + +[pixel shader] +float4 main() : sv_target +{ + float3x2 mat = {1, 2, 3, 4, 5, 6}; + float2 p = mat._11_32; + + return float4(p, p); +} + +[test] +draw quad +todo probe all rgba (1.0, 6.0, 1.0, 6.0) + + +% zero-based and one-based subscripts cannot be used in the same swizzle. +[pixel shader fail] +float4 main() : sv_target +{ + float3x2 mat = {1, 2, 3, 4, 5, 6}; + float2 p = mat._11_m00; + + return 0.0; +} + + +[pixel shader fail] +float4 main() : sv_target +{ + float3x2 mat = {1, 2, 3, 4, 5, 6}; + float p = mat._41; + + return 0.0; +} + +[pixel shader fail] +float4 main() : sv_target +{ + float3x2 mat = {1, 2, 3, 4, 5, 6}; + float p = mat._33; + + return 0.0; +} + +[pixel shader fail] +float4 main() : sv_target +{ + float3x2 mat = {1, 2, 3, 4, 5, 6}; + float p = mat._m30; + + return 0.0; +} + +[pixel shader fail] +float4 main() : sv_target +{ + float3x2 mat = {1, 2, 3, 4, 5, 6}; + float p = mat._m22; + + return 0.0; +} + +[pixel shader fail] +float4 main() : sv_target +{ + float3x2 mat = {1, 2, 3, 4, 5, 6}; + float p = mat._00; + + return 0.0; +} + +[pixel shader fail] +float4 main() : sv_target +{ + float3x2 mat = {1, 2, 3, 4, 5, 6}; + + return mat._11_11_11_11_11; +} + +[pixel shader fail] +float4 main() : sv_target +{ + float3x2 mat = {1, 2, 3, 4, 5, 6}; + float p = mat.x + + return 0; +} + +[pixel shader fail] +float4 main() : sv_target +{ + float3 vec = {1, 2, 3}; + float p = vec._11; + + return 0; +} + +% Like with vectors, a single-component swizzle is scalar. +[pixel shader] +float4 main() : SV_TARGET +{ + float4 vec = {10, 20, 30, 40}; + int2x3 idx = {0, 1, 2, 3, 4, 5}; + + return vec[idx._21]; +} + +[test] +draw quad +todo probe all rgba (40.0, 40.0, 40.0, 40.0) + + +[pixel shader todo] +float3 a; + +float4 main() : sv_target +{ + float2x2 mat = {1, 2, 3, 4}; + + mat._11 = 10; + mat._m01_m10_m11 = a; + return float4(mat); +} + +[test] +uniform 0 float4 20 30 40 -1 +todo draw quad +todo probe all rgba (10.0, 20.0, 30.0, 40.0) + + +[pixel shader todo] +float3 a; + +float4 main() : sv_target +{ + row_major float4x2 mat = {1, 2, 3, 4, 5, 6, 7, 8}; + + mat._11 = 10; + mat._m01_m10_m31 = a; + return float4(mat._m31_m10_m01_m00); +} + +[test] +uniform 0 float4 20 30 80 -1 +todo draw quad +todo probe all rgba (80.0, 30.0, 20.0, 10.0) + + +% Cannot repeat components when assigning to a swizzle. +[pixel shader fail todo] +float4 main() : sv_target +{ + float2x2 mat = {1, 2, 3, 4}; + + mat._m01_m01 = float2(20, 20); + return 0; +}
1
0
0
0
Jeff Smith : gdiplus: GdipIsVisiblePathPoint is not affected by world transform.
by Alexandre Julliard
12 Sep '23
12 Sep '23
Module: wine Branch: master Commit: 0c777a7d5cab90ab59d7a4a6b60c516efa7a9830 URL:
https://gitlab.winehq.org/wine/wine/-/commit/0c777a7d5cab90ab59d7a4a6b60c51…
Author: Jeff Smith <whydoubt(a)gmail.com> Date: Tue Sep 12 03:35:20 2023 -0500 gdiplus: GdipIsVisiblePathPoint is not affected by world transform. Wine-Bug:
https://bugs.winehq.org/show_bug.cgi?id=38823
--- dlls/gdiplus/graphicspath.c | 2 +- dlls/gdiplus/tests/graphicspath.c | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/dlls/gdiplus/graphicspath.c b/dlls/gdiplus/graphicspath.c index fd2622daf0e..8e436f96f4e 100644 --- a/dlls/gdiplus/graphicspath.c +++ b/dlls/gdiplus/graphicspath.c @@ -1793,7 +1793,7 @@ GpStatus WINGDIPAPI GdipIsVisiblePathPoint(GpPath* path, REAL x, REAL y, GpGraph if(status != Ok) return status; - status = GdipGetRegionHRgn(region, graphics, &hrgn); + status = GdipGetRegionHRgn(region, NULL, &hrgn); if(status != Ok){ GdipDeleteRegion(region); return status; diff --git a/dlls/gdiplus/tests/graphicspath.c b/dlls/gdiplus/tests/graphicspath.c index b0ee9f41360..908ca8bcaf0 100644 --- a/dlls/gdiplus/tests/graphicspath.c +++ b/dlls/gdiplus/tests/graphicspath.c @@ -1865,6 +1865,18 @@ static void test_isvisible(void) status = GdipIsVisiblePathPoint(path, 0.0, 0.0, graphics, &result); expect(Ok, status); expect(TRUE, result); + /* not affected by world transform */ + status = GdipScaleWorldTransform(graphics, 2.0, 2.0, MatrixOrderPrepend); + expect(Ok, status); + result = FALSE; + status = GdipIsVisiblePathPoint(path, 9.0, 9.0, graphics, &result); + expect(Ok, status); + expect(TRUE, result); + result = TRUE; + status = GdipIsVisiblePathPoint(path, 11.0, 11.0, graphics, &result); + expect(Ok, status); + expect(FALSE, result); + GdipResetWorldTransform(graphics); GdipDeletePath(path); GdipDeleteGraphics(graphics);
1
0
0
0
Stefan Dösinger : gitlab: Enable d3d8 and d3d9 device tests.
by Alexandre Julliard
12 Sep '23
12 Sep '23
Module: wine Branch: master Commit: c9f2f1c376b0a926ff1d0cc469fb6f35def73132 URL:
https://gitlab.winehq.org/wine/wine/-/commit/c9f2f1c376b0a926ff1d0cc469fb6f…
Author: Stefan Dösinger <stefan(a)codeweavers.com> Date: Tue Sep 12 11:38:51 2023 +0300 gitlab: Enable d3d8 and d3d9 device tests. --- tools/gitlab/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/gitlab/test.yml b/tools/gitlab/test.yml index 1fa0ce402af..0df6a6029f9 100644 --- a/tools/gitlab/test.yml +++ b/tools/gitlab/test.yml @@ -57,7 +57,7 @@ test-linux-64: test-linux-32: extends: .wine-test variables: - EXCLUDE_TESTS: "d3d10core:d3d10core d3d11:d3d11 d3d8:device d3d8:visual d3d9:d3d9ex d3d9:device d3d9:visual" + EXCLUDE_TESTS: "d3d10core:d3d10core d3d11:d3d11 d3d8:visual d3d9:d3d9ex d3d9:visual" rules: - if: $CI_PIPELINE_SOURCE == 'merge_request_event' needs:
1
0
0
0
Esme Povirk : user32/tests: Detect win7's broken GetQueueStatus behavior.
by Alexandre Julliard
12 Sep '23
12 Sep '23
Module: wine Branch: master Commit: 2ac81edb3e65217e9c52fd28e51fa8cf1cab3bae URL:
https://gitlab.winehq.org/wine/wine/-/commit/2ac81edb3e65217e9c52fd28e51fa8…
Author: Esme Povirk <esme(a)codeweavers.com> Date: Tue Sep 12 13:21:08 2023 -0500 user32/tests: Detect win7's broken GetQueueStatus behavior. --- dlls/user32/tests/msg.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/dlls/user32/tests/msg.c b/dlls/user32/tests/msg.c index 6df3ebe284f..c05982a9939 100644 --- a/dlls/user32/tests/msg.c +++ b/dlls/user32/tests/msg.c @@ -13380,7 +13380,7 @@ static void test_PeekMessage(void) DWORD tid, qstatus; UINT qs_all_input = QS_ALLINPUT; UINT qs_input = QS_INPUT; - BOOL ret; + BOOL ret, broken_flags = FALSE; struct peekmsg_info info; info.hwnd = CreateWindowA("TestWindowClass", NULL, WS_OVERLAPPEDWINDOW, @@ -13407,6 +13407,13 @@ static void test_PeekMessage(void) trace("QS_RAWINPUT not supported on this platform\n"); qs_all_input &= ~QS_RAWINPUT; qs_input &= ~QS_RAWINPUT; + + SetLastError(0xdeadbeef); + qstatus = GetQueueStatus(qs_all_input); + if (GetLastError() == ERROR_INVALID_FLAGS) + broken_flags = TRUE; + ok(GetLastError() == 0xdeadbeef || broken(GetLastError() == ERROR_INVALID_FLAGS) /* win7 */, + "wrong error %ld\n", GetLastError()); } if (qstatus & QS_POSTMESSAGE) { @@ -13426,10 +13433,14 @@ static void test_PeekMessage(void) if (!qstatus) { ok(GetLastError() == ERROR_INVALID_FLAGS, "wrong error %ld\n", GetLastError()); + SetLastError(0xdeadbeef); qstatus = GetQueueStatus(qs_all_input); + ok(GetLastError() == 0xdeadbeef || broken(broken_flags && GetLastError() == ERROR_INVALID_FLAGS), + "wrong error %ld\n", GetLastError()); } qstatus &= ~MAKELONG( 0x4000, 0x4000 ); /* sometimes set on Win95 */ - ok(qstatus == MAKELONG(QS_SENDMESSAGE, QS_SENDMESSAGE), + ok(qstatus == MAKELONG(QS_SENDMESSAGE, QS_SENDMESSAGE) || + broken(broken_flags && qstatus == 0), "wrong qstatus %08lx\n", qstatus); msg.message = 0;
1
0
0
0
Paul Gofman : server: Don't set SO_RCVBUF below Windows default value on Unix socket.
by Alexandre Julliard
12 Sep '23
12 Sep '23
Module: wine Branch: master Commit: 578fc9c96fa85821715dba0034524e0bc4b0a476 URL:
https://gitlab.winehq.org/wine/wine/-/commit/578fc9c96fa85821715dba0034524e…
Author: Paul Gofman <pgofman(a)codeweavers.com> Date: Fri Sep 1 12:56:39 2023 -0600 server: Don't set SO_RCVBUF below Windows default value on Unix socket. --- dlls/ws2_32/tests/sock.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++- server/sock.c | 14 ++++++++++-- 2 files changed, 70 insertions(+), 3 deletions(-) diff --git a/dlls/ws2_32/tests/sock.c b/dlls/ws2_32/tests/sock.c index a1fefb45d1e..31dff1a11c7 100644 --- a/dlls/ws2_32/tests/sock.c +++ b/dlls/ws2_32/tests/sock.c @@ -161,6 +161,7 @@ static GUID WSARecvMsg_GUID = WSAID_WSARECVMSG; static SOCKET setup_server_socket(struct sockaddr_in *addr, int *len); static SOCKET setup_connector_socket(const struct sockaddr_in *addr, int len, BOOL nonblock); +static int sync_recv(SOCKET s, void *buffer, int len, DWORD flags); static void tcp_socketpair_flags(SOCKET *src, SOCKET *dst, DWORD flags) { @@ -1225,7 +1226,7 @@ static void test_set_getsockopt(void) {AF_INET6, SOCK_DGRAM, IPPROTO_IPV6, IPV6_UNICAST_HOPS, TRUE, {1, 1, 4}, {0}, FALSE}, {AF_INET6, SOCK_DGRAM, IPPROTO_IPV6, IPV6_V6ONLY, TRUE, {1, 1, 1}, {0}, TRUE}, }; - SOCKET s, s2; + SOCKET s, s2, src, dst; int i, j, err, lasterr; int timeout; LINGER lingval; @@ -1237,6 +1238,7 @@ static void test_set_getsockopt(void) int expected_err, expected_size; DWORD value, save_value; UINT64 value64; + char buffer[4096]; struct _prottest { @@ -1302,6 +1304,61 @@ static void test_set_getsockopt(void) ok( !err, "getsockopt(SO_RCVBUF) failed error: %u\n", WSAGetLastError() ); ok( value == 4096, "expected 4096, got %lu\n", value ); + value = 0; + size = sizeof(value); + err = setsockopt(s, SOL_SOCKET, SO_RCVBUF, (char *)&value, size); + ok( !err, "setsockopt(SO_RCVBUF) failed error: %u\n", WSAGetLastError() ); + value = 0xdeadbeef; + err = getsockopt(s, SOL_SOCKET, SO_RCVBUF, (char *)&value, &size); + ok( !err, "getsockopt(SO_RCVBUF) failed error: %u\n", WSAGetLastError() ); + ok( value == 0, "expected 0, got %lu\n", value ); + + /* Test non-blocking receive with too short SO_RCVBUF. */ + tcp_socketpair(&src, &dst); + set_blocking(src, FALSE); + set_blocking(dst, FALSE); + + value = 0; + size = sizeof(value); + err = setsockopt(src, SOL_SOCKET, SO_SNDBUF, (char *)&value, size); + ok( !err, "got %d, error %u.\n", err, WSAGetLastError() ); + + value = 0xdeadbeef; + err = getsockopt(dst, SOL_SOCKET, SO_RCVBUF, (char *)&value, &size); + ok( !err, "got %d, error %u.\n", err, WSAGetLastError() ); + if (value >= sizeof(buffer) * 3) + { + value = 1024; + size = sizeof(value); + err = setsockopt(dst, SOL_SOCKET, SO_RCVBUF, (char *)&value, size); + ok( !err, "got %d, error %u.\n", err, WSAGetLastError() ); + value = 0xdeadbeef; + err = getsockopt(dst, SOL_SOCKET, SO_RCVBUF, (char *)&value, &size); + ok( !err, "got %d, error %u.\n", err, WSAGetLastError() ); + ok( value == 1024, "expected 0, got %lu\n", value ); + + err = send(src, buffer, sizeof(buffer), 0); + ok(err == sizeof(buffer), "got %d\n", err); + err = send(src, buffer, sizeof(buffer), 0); + ok(err == sizeof(buffer), "got %d\n", err); + err = send(src, buffer, sizeof(buffer), 0); + ok(err == sizeof(buffer), "got %d\n", err); + + err = sync_recv(dst, buffer, sizeof(buffer), 0); + ok(err == sizeof(buffer), "got %d, error %u\n", err, WSAGetLastError()); + err = sync_recv(dst, buffer, sizeof(buffer), 0); + ok(err == sizeof(buffer), "got %d, error %u\n", err, WSAGetLastError()); + err = sync_recv(dst, buffer, sizeof(buffer), 0); + ok(err == sizeof(buffer), "got %d, error %u\n", err, WSAGetLastError()); + } + else + { + skip("Default SO_RCVBUF %lu is too small, skipping test.\n", value); + } + + closesocket(src); + closesocket(dst); + /* SO_LINGER */ for( i = 0; i < ARRAY_SIZE(linger_testvals);i++) { size = sizeof(lingval); diff --git a/server/sock.c b/server/sock.c index b63412ab216..ac55a5448f7 100644 --- a/server/sock.c +++ b/server/sock.c @@ -197,6 +197,8 @@ struct bound_addr #define MAX_ICMP_HISTORY_LENGTH 8 +#define MIN_RCVBUF 65536 + struct sock { struct object obj; /* object header */ @@ -1916,7 +1918,14 @@ static int init_socket( struct sock *sock, int family, int type, int protocol ) len = sizeof(value); if (!getsockopt( sockfd, SOL_SOCKET, SO_RCVBUF, &value, &len )) + { + if (value < MIN_RCVBUF) + { + value = MIN_RCVBUF; + setsockopt( sockfd, SOL_SOCKET, SO_RCVBUF, &value, sizeof(value) ); + } sock->rcvbuf = value; + } len = sizeof(value); if (!getsockopt( sockfd, SOL_SOCKET, SO_SNDBUF, &value, &len )) @@ -3064,7 +3073,7 @@ static void sock_ioctl( struct fd *fd, ioctl_code_t code, struct async *async ) case IOCTL_AFD_WINE_SET_SO_RCVBUF: { - DWORD rcvbuf; + DWORD rcvbuf, set_rcvbuf; if (get_req_data_size() < sizeof(rcvbuf)) { @@ -3072,8 +3081,9 @@ static void sock_ioctl( struct fd *fd, ioctl_code_t code, struct async *async ) return; } rcvbuf = *(DWORD *)get_req_data(); + set_rcvbuf = max( rcvbuf, MIN_RCVBUF ); - if (!setsockopt( unix_fd, SOL_SOCKET, SO_RCVBUF, (char *)&rcvbuf, sizeof(rcvbuf) )) + if (!setsockopt( unix_fd, SOL_SOCKET, SO_RCVBUF, (char *)&set_rcvbuf, sizeof(set_rcvbuf) )) sock->rcvbuf = rcvbuf; else set_error( sock_get_ntstatus( errno ) );
1
0
0
0
Ziqing Hui : winegstreamer: Create wg_muxer for media sink.
by Alexandre Julliard
12 Sep '23
12 Sep '23
Module: wine Branch: master Commit: 2e5ae803b16c5a535f4f4e4b2518d344d453d5ff URL:
https://gitlab.winehq.org/wine/wine/-/commit/2e5ae803b16c5a535f4f4e4b2518d3…
Author: Ziqing Hui <zhui(a)codeweavers.com> Date: Fri Aug 18 10:00:29 2023 +0800 winegstreamer: Create wg_muxer for media sink. --- dlls/winegstreamer/gst_private.h | 3 +- dlls/winegstreamer/main.c | 7 +++-- dlls/winegstreamer/media_sink.c | 65 ++++++++++++++++++++++++++++++++-------- 3 files changed, 58 insertions(+), 17 deletions(-) diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h index 4c397b5f385..8cfadd10bfc 100644 --- a/dlls/winegstreamer/gst_private.h +++ b/dlls/winegstreamer/gst_private.h @@ -125,7 +125,8 @@ HRESULT wma_decoder_create(IUnknown *outer, IUnknown **out); HRESULT wmv_decoder_create(IUnknown *outer, IUnknown **out); HRESULT resampler_create(IUnknown *outer, IUnknown **out); HRESULT color_convert_create(IUnknown *outer, IUnknown **out); -HRESULT sink_class_factory_create(IUnknown *outer, IUnknown **out); +HRESULT mp3_sink_class_factory_create(IUnknown *outer, IUnknown **out); +HRESULT mpeg4_sink_class_factory_create(IUnknown *outer, IUnknown **out); bool amt_from_wg_format(AM_MEDIA_TYPE *mt, const struct wg_format *format, bool wm); bool amt_to_wg_format(const AM_MEDIA_TYPE *mt, struct wg_format *format); diff --git a/dlls/winegstreamer/main.c b/dlls/winegstreamer/main.c index f45d061200a..853907e1825 100644 --- a/dlls/winegstreamer/main.c +++ b/dlls/winegstreamer/main.c @@ -638,7 +638,8 @@ static struct class_factory wma_decoder_cf = {{&class_factory_vtbl}, wma_decoder static struct class_factory wmv_decoder_cf = {{&class_factory_vtbl}, wmv_decoder_create}; static struct class_factory resampler_cf = {{&class_factory_vtbl}, resampler_create}; static struct class_factory color_convert_cf = {{&class_factory_vtbl}, color_convert_create}; -static struct class_factory sink_class_factory_cf = {{&class_factory_vtbl}, sink_class_factory_create}; +static struct class_factory mp3_sink_class_factory_cf = {{&class_factory_vtbl}, mp3_sink_class_factory_create}; +static struct class_factory mpeg4_sink_class_factory_cf = {{&class_factory_vtbl}, mpeg4_sink_class_factory_create}; HRESULT WINAPI DllGetClassObject(REFCLSID clsid, REFIID iid, void **out) { @@ -674,9 +675,9 @@ HRESULT WINAPI DllGetClassObject(REFCLSID clsid, REFIID iid, void **out) else if (IsEqualGUID(clsid, &CLSID_CColorConvertDMO)) factory = &color_convert_cf; else if (IsEqualGUID(clsid, &CLSID_MFMP3SinkClassFactory)) - factory = &sink_class_factory_cf; + factory = &mp3_sink_class_factory_cf; else if (IsEqualGUID(clsid, &CLSID_MFMPEG4SinkClassFactory)) - factory = &sink_class_factory_cf; + factory = &mpeg4_sink_class_factory_cf; else { FIXME("%s not implemented, returning CLASS_E_CLASSNOTAVAILABLE.\n", debugstr_guid(clsid)); diff --git a/dlls/winegstreamer/media_sink.c b/dlls/winegstreamer/media_sink.c index fcea67eb8f1..6bd9fdcfb7d 100644 --- a/dlls/winegstreamer/media_sink.c +++ b/dlls/winegstreamer/media_sink.c @@ -77,6 +77,8 @@ struct media_sink IMFMediaEventQueue *event_queue; struct list stream_sinks; + + wg_muxer_t muxer; }; static struct stream_sink *impl_from_IMFStreamSink(IMFStreamSink *iface) @@ -567,6 +569,7 @@ static ULONG WINAPI media_sink_Release(IMFFinalizableMediaSink *iface) IMFByteStream_Release(media_sink->bytestream); media_sink->cs.DebugInfo->Spare[0] = 0; DeleteCriticalSection(&media_sink->cs); + wg_muxer_destroy(media_sink->muxer); free(media_sink); } @@ -1022,7 +1025,7 @@ static const IMFAsyncCallbackVtbl media_sink_callback_vtbl = media_sink_callback_Invoke, }; -static HRESULT media_sink_create(IMFByteStream *bytestream, struct media_sink **out) +static HRESULT media_sink_create(IMFByteStream *bytestream, const char *format, struct media_sink **out) { struct media_sink *media_sink; HRESULT hr; @@ -1035,11 +1038,10 @@ static HRESULT media_sink_create(IMFByteStream *bytestream, struct media_sink ** if (!(media_sink = calloc(1, sizeof(*media_sink)))) return E_OUTOFMEMORY; + if (FAILED(hr = wg_muxer_create(format, &media_sink->muxer))) + goto fail; if (FAILED(hr = MFCreateEventQueue(&media_sink->event_queue))) - { - free(media_sink); - return hr; - } + goto fail; media_sink->IMFFinalizableMediaSink_iface.lpVtbl = &media_sink_vtbl; media_sink->IMFMediaEventGenerator_iface.lpVtbl = &media_sink_event_vtbl; @@ -1056,6 +1058,12 @@ static HRESULT media_sink_create(IMFByteStream *bytestream, struct media_sink ** TRACE("Created media sink %p.\n", media_sink); return S_OK; + +fail: + if (media_sink->muxer) + wg_muxer_destroy(media_sink->muxer); + free(media_sink); + return hr; } static HRESULT WINAPI sink_class_factory_QueryInterface(IMFSinkClassFactory *iface, REFIID riid, void **out) @@ -1082,8 +1090,8 @@ static ULONG WINAPI sink_class_factory_Release(IMFSinkClassFactory *iface) return 1; } -static HRESULT WINAPI sink_class_factory_CreateMediaSink(IMFSinkClassFactory *iface, IMFByteStream *bytestream, - IMFMediaType *video_type, IMFMediaType *audio_type, IMFMediaSink **out) +static HRESULT WINAPI sink_class_factory_create_media_sink(IMFSinkClassFactory *iface, IMFByteStream *bytestream, + const char *format, IMFMediaType *video_type, IMFMediaType *audio_type, IMFMediaSink **out) { IMFFinalizableMediaSink *media_sink_iface; struct media_sink *media_sink; @@ -1092,7 +1100,7 @@ static HRESULT WINAPI sink_class_factory_CreateMediaSink(IMFSinkClassFactory *if TRACE("iface %p, bytestream %p, video_type %p, audio_type %p, out %p.\n", iface, bytestream, video_type, audio_type, out); - if (FAILED(hr = media_sink_create(bytestream, &media_sink))) + if (FAILED(hr = media_sink_create(bytestream, format, &media_sink))) return hr; media_sink_iface = &media_sink->IMFFinalizableMediaSink_iface; @@ -1119,18 +1127,49 @@ static HRESULT WINAPI sink_class_factory_CreateMediaSink(IMFSinkClassFactory *if return S_OK; } -static const IMFSinkClassFactoryVtbl sink_class_factory_vtbl = +static HRESULT WINAPI mp3_sink_class_factory_CreateMediaSink(IMFSinkClassFactory *iface, IMFByteStream *bytestream, + IMFMediaType *video_type, IMFMediaType *audio_type, IMFMediaSink **out) +{ + const char *format = "application/x-id3"; + + return sink_class_factory_create_media_sink(iface, bytestream, format, video_type, audio_type, out); +} + +static HRESULT WINAPI mpeg4_sink_class_factory_CreateMediaSink(IMFSinkClassFactory *iface, IMFByteStream *bytestream, + IMFMediaType *video_type, IMFMediaType *audio_type, IMFMediaSink **out) +{ + const char *format = "video/quicktime, variant=iso"; + + return sink_class_factory_create_media_sink(iface, bytestream, format, video_type, audio_type, out); +} + +static const IMFSinkClassFactoryVtbl mp3_sink_class_factory_vtbl = +{ + sink_class_factory_QueryInterface, + sink_class_factory_AddRef, + sink_class_factory_Release, + mp3_sink_class_factory_CreateMediaSink, +}; + +static const IMFSinkClassFactoryVtbl mpeg4_sink_class_factory_vtbl = { sink_class_factory_QueryInterface, sink_class_factory_AddRef, sink_class_factory_Release, - sink_class_factory_CreateMediaSink, + mpeg4_sink_class_factory_CreateMediaSink, }; -static IMFSinkClassFactory sink_class_factory = { &sink_class_factory_vtbl }; +static IMFSinkClassFactory mp3_sink_class_factory = { &mp3_sink_class_factory_vtbl }; +static IMFSinkClassFactory mpeg4_sink_class_factory = { &mpeg4_sink_class_factory_vtbl }; + +HRESULT mp3_sink_class_factory_create(IUnknown *outer, IUnknown **out) +{ + *out = (IUnknown *)&mp3_sink_class_factory; + return S_OK; +} -HRESULT sink_class_factory_create(IUnknown *outer, IUnknown **out) +HRESULT mpeg4_sink_class_factory_create(IUnknown *outer, IUnknown **out) { - *out = (IUnknown *)&sink_class_factory; + *out = (IUnknown *)&mpeg4_sink_class_factory; return S_OK; }
1
0
0
0
Ziqing Hui : winegstreamer: Implement seeking query for wg_muxer sink pad.
by Alexandre Julliard
12 Sep '23
12 Sep '23
Module: wine Branch: master Commit: e21fc494a04620ed9f5d091a9be53950e8c644a4 URL:
https://gitlab.winehq.org/wine/wine/-/commit/e21fc494a04620ed9f5d091a9be539…
Author: Ziqing Hui <zhui(a)codeweavers.com> Date: Thu Aug 24 09:26:57 2023 +0800 winegstreamer: Implement seeking query for wg_muxer sink pad. This makes muxer element know that it can perform seeking. --- dlls/winegstreamer/wg_muxer.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/dlls/winegstreamer/wg_muxer.c b/dlls/winegstreamer/wg_muxer.c index ad4d26ae329..6887bc015ba 100644 --- a/dlls/winegstreamer/wg_muxer.c +++ b/dlls/winegstreamer/wg_muxer.c @@ -39,6 +39,24 @@ static struct wg_muxer *get_muxer(wg_muxer_t muxer) return (struct wg_muxer *)(ULONG_PTR)muxer; } +static gboolean muxer_sink_query_cb(GstPad *pad, GstObject *parent, GstQuery *query) +{ + struct wg_muxer *muxer = gst_pad_get_element_private(pad); + + GST_DEBUG("pad %p, parent %p, query %p, muxer %p, type \"%s\".", + pad, parent, query, muxer, gst_query_type_get_name(query->type)); + + switch (query->type) + { + case GST_QUERY_SEEKING: + gst_query_set_seeking(query, GST_FORMAT_BYTES, true, 0, -1); + return true; + default: + GST_WARNING("Ignoring \"%s\" query.", gst_query_type_get_name(query->type)); + return gst_pad_query_default(pad, parent, query); + } +} + NTSTATUS wg_muxer_create(void *args) { struct wg_muxer_create_params *params = args; @@ -66,6 +84,7 @@ NTSTATUS wg_muxer_create(void *args) if (!muxer->my_sink) goto out; gst_pad_set_element_private(muxer->my_sink, muxer); + gst_pad_set_query_function(muxer->my_sink, muxer_sink_query_cb); /* Create gstreamer muxer element. */ if (!(muxer->muxer = find_element(GST_ELEMENT_FACTORY_TYPE_MUXER | GST_ELEMENT_FACTORY_TYPE_FORMATTER,
1
0
0
0
← Newer
1
...
56
57
58
59
60
61
62
...
92
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
83
84
85
86
87
88
89
90
91
92
Results per page:
10
25
50
100
200