diff --git a/patches/mfplat-streaming-support/0041-winegstreamer-Implement-decoder-MFT-on-gstreamer.patch b/patches/mfplat-streaming-support/0041-winegstreamer-Implement-decoder-MFT-on-gstreamer.patch index 49af5d3c..ad20c35d 100644 --- a/patches/mfplat-streaming-support/0041-winegstreamer-Implement-decoder-MFT-on-gstreamer.patch +++ b/patches/mfplat-streaming-support/0041-winegstreamer-Implement-decoder-MFT-on-gstreamer.patch @@ -1,4 +1,4 @@ -From 389c087267b8d9d3892c68b52ffa965df38730db Mon Sep 17 00:00:00 2001 +From ca61f3487605168b0f68f9c3d64bec15f5ecef1f Mon Sep 17 00:00:00 2001 From: Derek Lesho Date: Mon, 16 Mar 2020 12:09:39 -0500 Subject: [PATCH] winegstreamer: Implement decoder MFT on gstreamer. @@ -28,7 +28,7 @@ index 4f6b428f067..81c670c17e4 100644 pin.c \ qualitycontrol.c \ diff --git a/dlls/winegstreamer/gst_cbs.c b/dlls/winegstreamer/gst_cbs.c -index b9effe73a5b..4afefe91aa8 100644 +index 6c5877ce785..cf410b8934d 100644 --- a/dlls/winegstreamer/gst_cbs.c +++ b/dlls/winegstreamer/gst_cbs.c @@ -51,6 +51,8 @@ static void CALLBACK perform_cb(TP_CALLBACK_INSTANCE *instance, void *user) @@ -40,7 +40,7 @@ index b9effe73a5b..4afefe91aa8 100644 pthread_mutex_lock(&cbdata->lock); cbdata->finished = 1; -@@ -363,3 +365,66 @@ void mf_src_no_more_pads_wrapper(GstElement *element, gpointer user) +@@ -301,3 +303,66 @@ void mf_src_no_more_pads_wrapper(GstElement *element, gpointer user) call_cb(&cbdata); } @@ -108,10 +108,10 @@ index b9effe73a5b..4afefe91aa8 100644 + return cbdata.u.new_sample_data.ret; +} diff --git a/dlls/winegstreamer/gst_cbs.h b/dlls/winegstreamer/gst_cbs.h -index 0e262c12db8..98dff43ba9b 100644 +index f063a0a2a7b..7737ae589d2 100644 --- a/dlls/winegstreamer/gst_cbs.h +++ b/dlls/winegstreamer/gst_cbs.h -@@ -50,6 +50,12 @@ enum CB_TYPE { +@@ -45,6 +45,12 @@ enum CB_TYPE { MF_SRC_STREAM_REMOVED, MF_SRC_NO_MORE_PADS, MEDIA_SOURCE_MAX, @@ -124,7 +124,7 @@ index 0e262c12db8..98dff43ba9b 100644 }; struct cb_data { -@@ -120,6 +126,17 @@ struct cb_data { +@@ -103,6 +109,17 @@ struct cb_data { GstQuery *query; gboolean ret; } query_sink_data; @@ -142,15 +142,15 @@ index 0e262c12db8..98dff43ba9b 100644 } u; int finished; -@@ -131,6 +148,7 @@ struct cb_data { +@@ -114,6 +131,7 @@ struct cb_data { void mark_wine_thread(void) DECLSPEC_HIDDEN; void perform_cb_gstdemux(struct cb_data *data) DECLSPEC_HIDDEN; void perform_cb_media_source(struct cb_data *data) DECLSPEC_HIDDEN; +void perform_cb_mf_decode(struct cb_data *data) DECLSPEC_HIDDEN; void existing_new_pad_wrapper(GstElement *bin, GstPad *pad, gpointer user) DECLSPEC_HIDDEN; - gboolean query_function_wrapper(GstPad *pad, GstObject *parent, GstQuery *query) DECLSPEC_HIDDEN; -@@ -152,5 +170,10 @@ GstBusSyncReply mf_src_bus_watch_wrapper(GstBus *bus, GstMessage *message, gpoin + gboolean activate_mode_wrapper(GstPad *pad, GstObject *parent, GstPadMode mode, gboolean activate) DECLSPEC_HIDDEN; +@@ -130,5 +148,10 @@ GstBusSyncReply mf_src_bus_watch_wrapper(GstBus *bus, GstMessage *message, gpoin void mf_src_stream_added_wrapper(GstElement *bin, GstPad *pad, gpointer user) DECLSPEC_HIDDEN; void mf_src_stream_removed_wrapper(GstElement *element, GstPad *pad, gpointer user) DECLSPEC_HIDDEN; void mf_src_no_more_pads_wrapper(GstElement *element, gpointer user) DECLSPEC_HIDDEN; diff --git a/patches/patchinstall.sh b/patches/patchinstall.sh index 29004620..9fa25695 100755 --- a/patches/patchinstall.sh +++ b/patches/patchinstall.sh @@ -51,7 +51,7 @@ usage() # Get the upstream commit sha upstream_commit() { - echo "2d6462cdee2bd87a49382794e5a554f33c367f09" + echo "c1824d578ac514d29e79a5a00d6759f11dbe4813" } # Show version information @@ -4514,8 +4514,6 @@ fi # | tools/widl/widltypes.h # | if test "$enable_widl_winrt_support" -eq 1; then - patch_apply widl-winrt-support/0003-widl-Support-WinRT-mta-threading-attribute-parsing.patch - patch_apply widl-winrt-support/0004-widl-Support-WinRT-exclusiveto-attribute-parsing.patch patch_apply widl-winrt-support/0005-widl-Support-WinRT-runtimeclass-type.patch patch_apply widl-winrt-support/0006-widl-Support-WinRT-eventadd-eventremove-attributes.patch patch_apply widl-winrt-support/0007-widl-Support-WinRT-flags-attribute-parsing.patch diff --git a/patches/widl-winrt-support/0003-widl-Support-WinRT-mta-threading-attribute-parsing.patch b/patches/widl-winrt-support/0003-widl-Support-WinRT-mta-threading-attribute-parsing.patch deleted file mode 100644 index 60ad973f..00000000 --- a/patches/widl-winrt-support/0003-widl-Support-WinRT-mta-threading-attribute-parsing.patch +++ /dev/null @@ -1,100 +0,0 @@ -From feb19e6a9ae86a2a17a981ab7f69481e57c2a465 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?R=C3=A9mi=20Bernon?= -Date: Tue, 13 Oct 2020 11:35:49 +0200 -Subject: [PATCH] widl: Support WinRT mta threading attribute parsing. - ---- - tools/widl/header.c | 28 ++++++++++++++++++++++++++++ - tools/widl/parser.l | 1 + - tools/widl/parser.y | 2 ++ - tools/widl/widltypes.h | 3 ++- - 4 files changed, 33 insertions(+), 1 deletion(-) - -diff --git a/tools/widl/header.c b/tools/widl/header.c -index d5e35aac92f..aaae2fcf3c8 100644 ---- a/tools/widl/header.c -+++ b/tools/widl/header.c -@@ -1480,6 +1480,34 @@ static char *format_apicontract_macro(const type_t *type) - return name; - } - -+static void write_winrt_type_comments(FILE *header, const type_t *type) -+{ -+ expr_t *contract = get_attrp(type->attrs, ATTR_CONTRACT); -+ fprintf(header, " *\n"); -+ if (contract) -+ { -+ const type_t *type = contract->u.tref.type; -+ char *name = format_namespace(type->namespace, "", ".", type->name, NULL); -+ int ver = contract->ref->u.lval; -+ fprintf(header, " * Introduced to %s in version %d.%d\n *\n", name, (ver >> 16) & 0xffff, ver & 0xffff); -+ free(name); -+ } -+ switch (get_attrv(type->attrs, ATTR_THREADING)) -+ { -+ case THREADING_SINGLE: fprintf(header, " * Class Threading Model: Single Threaded Apartment\n *\n"); break; -+ case THREADING_BOTH: fprintf(header, " * Class Threading Model: Both Single and Multi Threaded Apartment\n *\n"); break; -+ case THREADING_MTA: fprintf(header, " * Class Threading Model: Multi Threaded Apartment\n *\n"); break; -+ default: break; -+ } -+ switch (get_attrv(type->attrs, ATTR_MARSHALING_BEHAVIOR)) -+ { -+ case MARSHALING_AGILE: fprintf(header, " * Class Marshaling Behavior: Agile - Class is agile\n *\n"); break; -+ case MARSHALING_STANDARD: fprintf(header, " * Class Marshaling Behavior: Standard - Class marshals using the standard marshaler\n *\n"); break; -+ case MARSHALING_NONE: fprintf(header, " * Class Marshaling Behavior: None - Class cannot be marshaled\n *\n"); break; -+ default: break; -+ } -+} -+ - static void write_apicontract_guard_start(FILE *header, const expr_t *expr) - { - const type_t *type; -diff --git a/tools/widl/parser.l b/tools/widl/parser.l -index 01c6f800a08..067966a85d4 100644 ---- a/tools/widl/parser.l -+++ b/tools/widl/parser.l -@@ -385,6 +385,7 @@ static const struct keyword attr_keywords[] = - {"marshaling_behavior", tMARSHALINGBEHAVIOR, 1}, - {"maybe", tMAYBE, 0}, - {"message", tMESSAGE, 0}, -+ {"mta" , tMTA, 1}, - {"neutral", tNEUTRAL, 0}, - {"nocode", tNOCODE, 0}, - {"nonbrowsable", tNONBROWSABLE, 0}, -diff --git a/tools/widl/parser.y b/tools/widl/parser.y -index 48f180cdb49..fd994ae70bb 100644 ---- a/tools/widl/parser.y -+++ b/tools/widl/parser.y -@@ -222,6 +222,7 @@ static typelib_t *current_typelib; - %token tMAYBE tMESSAGE - %token tMETHODS - %token tMODULE -+%token tMTA - %token tNAMESPACE - %token tNOCODE tNONBROWSABLE - %token tNONCREATABLE -@@ -1154,6 +1155,7 @@ threading_type: - | tSINGLE { $$ = THREADING_SINGLE; } - | tFREE { $$ = THREADING_FREE; } - | tBOTH { $$ = THREADING_BOTH; } -+ | tMTA { $$ = THREADING_MTA; } - ; - - pointer_type: -diff --git a/tools/widl/widltypes.h b/tools/widl/widltypes.h -index 6c130d4701e..8a3bd00e340 100644 ---- a/tools/widl/widltypes.h -+++ b/tools/widl/widltypes.h -@@ -269,7 +269,8 @@ enum threading_type - THREADING_NEUTRAL, - THREADING_SINGLE, - THREADING_FREE, -- THREADING_BOTH -+ THREADING_BOTH, -+ THREADING_MTA, - }; - - enum marshaling_type --- -2.29.2 - diff --git a/patches/widl-winrt-support/0004-widl-Support-WinRT-exclusiveto-attribute-parsing.patch b/patches/widl-winrt-support/0004-widl-Support-WinRT-exclusiveto-attribute-parsing.patch deleted file mode 100644 index 7945ccc4..00000000 --- a/patches/widl-winrt-support/0004-widl-Support-WinRT-exclusiveto-attribute-parsing.patch +++ /dev/null @@ -1,92 +0,0 @@ -From 25fe11311b4f20a900d4b001a051c17a980d0b75 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?R=C3=A9mi=20Bernon?= -Date: Tue, 13 Oct 2020 00:11:08 +0200 -Subject: [PATCH] widl: Support WinRT exclusiveto attribute parsing. - ---- - tools/widl/header.c | 7 +++++++ - tools/widl/parser.l | 1 + - tools/widl/parser.y | 3 +++ - tools/widl/widltypes.h | 1 + - 4 files changed, 12 insertions(+) - -diff --git a/tools/widl/header.c b/tools/widl/header.c -index 3fa938192d3..1d910364994 100644 ---- a/tools/widl/header.c -+++ b/tools/widl/header.c -@@ -1485,6 +1485,7 @@ static char *format_apicontract_macro(const type_t *type) - static void write_winrt_type_comments(FILE *header, const type_t *type) - { - expr_t *contract = get_attrp(type->attrs, ATTR_CONTRACT); -+ type_t *exclusiveto = get_attrp(type->attrs, ATTR_EXCLUSIVETO); - fprintf(header, " *\n"); - if (contract) - { -@@ -1494,6 +1495,12 @@ static void write_winrt_type_comments(FILE *header, const type_t *type) - fprintf(header, " * Introduced to %s in version %d.%d\n *\n", name, (ver >> 16) & 0xffff, ver & 0xffff); - free(name); - } -+ if (exclusiveto) -+ { -+ char *name = format_namespace(exclusiveto->namespace, "", ".", exclusiveto->name, NULL); -+ fprintf(header, " * Interface is a part of the implementation of type %s\n *\n", name); -+ free(name); -+ } - switch (get_attrv(type->attrs, ATTR_THREADING)) - { - case THREADING_SINGLE: fprintf(header, " * Class Threading Model: Single Threaded Apartment\n *\n"); break; -diff --git a/tools/widl/parser.l b/tools/widl/parser.l -index 067966a85d4..de25b7d12c4 100644 ---- a/tools/widl/parser.l -+++ b/tools/widl/parser.l -@@ -358,6 +358,7 @@ static const struct keyword attr_keywords[] = - {"encode", tENCODE, 0}, - {"endpoint", tENDPOINT, 0}, - {"entry", tENTRY, 0}, -+ {"exclusiveto", tEXCLUSIVETO, 1}, - {"explicit_handle", tEXPLICITHANDLE, 0}, - {"fault_status", tFAULTSTATUS, 0}, - {"force_allocate", tFORCEALLOCATE, 0}, -diff --git a/tools/widl/parser.y b/tools/widl/parser.y -index caaa2f49d0c..57f1e3f5301 100644 ---- a/tools/widl/parser.y -+++ b/tools/widl/parser.y -@@ -196,6 +196,7 @@ static typelib_t *current_typelib; - %token tDLLNAME tDONTFREE tDOUBLE tDUAL - %token tENABLEALLOCATE tENCODE tENDPOINT - %token tENTRY tENUM tERRORSTATUST -+%token tEXCLUSIVETO - %token tEXPLICITHANDLE tEXTERN - %token tFALSE - %token tFASTCALL tFAULTSTATUS -@@ -561,6 +562,7 @@ attribute: { $$ = NULL; } - | tENCODE { $$ = make_attr(ATTR_ENCODE); } - | tENDPOINT '(' str_list ')' { $$ = make_attrp(ATTR_ENDPOINT, $3); } - | tENTRY '(' expr_const ')' { $$ = make_attrp(ATTR_ENTRY, $3); } -+ | tEXCLUSIVETO '(' decl_spec ')' { $$ = make_attrp(ATTR_EXCLUSIVETO, $3->type); } - | tEXPLICITHANDLE { $$ = make_attr(ATTR_EXPLICIT_HANDLE); } - | tFAULTSTATUS { $$ = make_attr(ATTR_FAULTSTATUS); } - | tFORCEALLOCATE { $$ = make_attr(ATTR_FORCEALLOCATE); } -@@ -2223,6 +2225,7 @@ struct allowed_attr allowed_attr[] = - /* ATTR_ENCODE */ { 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "encode" }, - /* ATTR_ENDPOINT */ { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "endpoint" }, - /* ATTR_ENTRY */ { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "entry" }, -+ /* ATTR_EXCLUSIVETO */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "exclusive_to" }, - /* ATTR_EXPLICIT_HANDLE */ { 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "explicit_handle" }, - /* ATTR_FAULTSTATUS */ { 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "fault_status" }, - /* ATTR_FORCEALLOCATE */ { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "force_allocate" }, -diff --git a/tools/widl/widltypes.h b/tools/widl/widltypes.h -index 8a3bd00e340..7ad0cbea66f 100644 ---- a/tools/widl/widltypes.h -+++ b/tools/widl/widltypes.h -@@ -103,6 +103,7 @@ enum attr_type - ATTR_ENCODE, - ATTR_ENDPOINT, - ATTR_ENTRY, -+ ATTR_EXCLUSIVETO, - ATTR_EXPLICIT_HANDLE, - ATTR_FAULTSTATUS, - ATTR_FORCEALLOCATE, --- -2.29.2 - diff --git a/patches/widl-winrt-support/0005-widl-Support-WinRT-runtimeclass-type.patch b/patches/widl-winrt-support/0005-widl-Support-WinRT-runtimeclass-type.patch index 4f48d54d..3e3b0c67 100644 --- a/patches/widl-winrt-support/0005-widl-Support-WinRT-runtimeclass-type.patch +++ b/patches/widl-winrt-support/0005-widl-Support-WinRT-runtimeclass-type.patch @@ -1,4 +1,4 @@ -From b44446b4cb028670ebc371a7c7f3bb5eef05c7c3 Mon Sep 17 00:00:00 2001 +From 62715392ea059ed59519abacb47ab84e1fc5ab64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Bernon?= Date: Fri, 20 Nov 2020 11:06:18 +0100 Subject: [PATCH] widl: Support WinRT runtimeclass type. @@ -10,15 +10,15 @@ type is instead used in the generated code. --- include/windows.media.speechsynthesis.idl | 25 ++ tools/widl/expr.c | 1 + - tools/widl/header.c | 65 +++++- + tools/widl/header.c | 100 +++++++- tools/widl/parser.l | 1 + tools/widl/parser.y | 269 +++++++++++++--------- tools/widl/typegen.c | 4 + tools/widl/typelib.c | 1 + tools/widl/typetree.c | 17 ++ tools/widl/typetree.h | 24 ++ - tools/widl/widltypes.h | 7 + - 10 files changed, 300 insertions(+), 114 deletions(-) + tools/widl/widltypes.h | 10 +- + 10 files changed, 337 insertions(+), 115 deletions(-) diff --git a/include/windows.media.speechsynthesis.idl b/include/windows.media.speechsynthesis.idl index 7a1de5fcba6..90bc9f279c6 100644 @@ -76,10 +76,10 @@ index be8311cfb7f..13bd5a889aa 100644 break; case TYPE_ALIAS: diff --git a/tools/widl/header.c b/tools/widl/header.c -index 1d910364994..93bcb4f5214 100644 +index d5e35aac92f..cd31d145caa 100644 --- a/tools/widl/header.c +++ b/tools/widl/header.c -@@ -465,6 +465,9 @@ void write_type_left(FILE *h, const decl_spec_t *ds, enum name_type name_type, i +@@ -463,6 +463,9 @@ void write_type_left(FILE *h, const decl_spec_t *ds, enum name_type name_type, i case TYPE_COCLASS: fprintf(h, "%s", name); break; @@ -89,7 +89,7 @@ index 1d910364994..93bcb4f5214 100644 case TYPE_VOID: fprintf(h, "void"); break; -@@ -547,6 +550,7 @@ void write_type_right(FILE *h, type_t *t, int is_field) +@@ -545,6 +548,7 @@ void write_type_right(FILE *h, type_t *t, int is_field) case TYPE_MODULE: case TYPE_COCLASS: case TYPE_INTERFACE: @@ -97,7 +97,7 @@ index 1d910364994..93bcb4f5214 100644 break; case TYPE_APICONTRACT: /* not supposed to be here */ -@@ -1033,7 +1037,8 @@ static int is_aggregate_return(const var_t *func) +@@ -1031,7 +1035,8 @@ static int is_aggregate_return(const var_t *func) { enum type_type type = type_get_type(type_function_get_rettype(func->declspec.type)); return type == TYPE_STRUCT || type == TYPE_UNION || @@ -107,10 +107,29 @@ index 1d910364994..93bcb4f5214 100644 } static char *get_vtbl_entry_name(const type_t *iface, const var_t *func) -@@ -1501,6 +1506,21 @@ static void write_winrt_type_comments(FILE *header, const type_t *type) - fprintf(header, " * Interface is a part of the implementation of type %s\n *\n", name); - free(name); - } +@@ -1480,6 +1485,56 @@ static char *format_apicontract_macro(const type_t *type) + return name; + } + ++static void write_winrt_type_comments(FILE *header, const type_t *type) ++{ ++ expr_t *contract = get_attrp(type->attrs, ATTR_CONTRACT); ++ type_t *exclusiveto = get_attrp(type->attrs, ATTR_EXCLUSIVETO); ++ fprintf(header, " *\n"); ++ if (contract) ++ { ++ const type_t *type = contract->u.tref.type; ++ char *name = format_namespace(type->namespace, "", ".", type->name, NULL); ++ int ver = contract->ref->u.lval; ++ fprintf(header, " * Introduced to %s in version %d.%d\n *\n", name, (ver >> 16) & 0xffff, ver & 0xffff); ++ free(name); ++ } ++ if (exclusiveto) ++ { ++ char *name = format_namespace(exclusiveto->namespace, "", ".", exclusiveto->name, NULL); ++ fprintf(header, " * Interface is a part of the implementation of type %s\n *\n", name); ++ free(name); ++ } + if (type_get_type(type) == TYPE_RUNTIMECLASS) + { + ifref_list_t *ifaces = type_runtimeclass_get_ifaces(type); @@ -126,10 +145,26 @@ index 1d910364994..93bcb4f5214 100644 + } + fprintf(header, " *\n"); + } - switch (get_attrv(type->attrs, ATTR_THREADING)) - { - case THREADING_SINGLE: fprintf(header, " * Class Threading Model: Single Threaded Apartment\n *\n"); break; -@@ -1728,6 +1748,45 @@ static void write_apicontract(FILE *header, type_t *apicontract) ++ switch (get_attrv(type->attrs, ATTR_THREADING)) ++ { ++ case THREADING_SINGLE: fprintf(header, " * Class Threading Model: Single Threaded Apartment\n *\n"); break; ++ case THREADING_BOTH: fprintf(header, " * Class Threading Model: Both Single and Multi Threaded Apartment\n *\n"); break; ++ case THREADING_MTA: fprintf(header, " * Class Threading Model: Multi Threaded Apartment\n *\n"); break; ++ default: break; ++ } ++ switch (get_attrv(type->attrs, ATTR_MARSHALING_BEHAVIOR)) ++ { ++ case MARSHALING_AGILE: fprintf(header, " * Class Marshaling Behavior: Agile - Class is agile\n *\n"); break; ++ case MARSHALING_STANDARD: fprintf(header, " * Class Marshaling Behavior: Standard - Class marshals using the standard marshaler\n *\n"); break; ++ case MARSHALING_NONE: fprintf(header, " * Class Marshaling Behavior: None - Class cannot be marshaled\n *\n"); break; ++ default: break; ++ } ++} ++ + static void write_apicontract_guard_start(FILE *header, const expr_t *expr) + { + const type_t *type; +@@ -1689,6 +1744,45 @@ static void write_apicontract(FILE *header, type_t *apicontract) free(name); } @@ -175,7 +210,7 @@ index 1d910364994..93bcb4f5214 100644 static void write_import(FILE *header, const char *fname) { char *hname, *p; -@@ -1792,6 +1851,8 @@ static void write_forward_decls(FILE *header, const statement_list_t *stmts) +@@ -1753,6 +1847,8 @@ static void write_forward_decls(FILE *header, const statement_list_t *stmts) } else if (type_get_type(stmt->u.type) == TYPE_COCLASS) write_coclass_forward(header, stmt->u.type); @@ -184,7 +219,7 @@ index 1d910364994..93bcb4f5214 100644 break; case STMT_TYPEREF: case STMT_IMPORTLIB: -@@ -1848,6 +1909,8 @@ static void write_header_stmts(FILE *header, const statement_list_t *stmts, cons +@@ -1809,6 +1905,8 @@ static void write_header_stmts(FILE *header, const statement_list_t *stmts, cons write_coclass(header, stmt->u.type); else if (type_get_type(stmt->u.type) == TYPE_APICONTRACT) write_apicontract(header, stmt->u.type); @@ -194,7 +229,7 @@ index 1d910364994..93bcb4f5214 100644 { write_type_definition(header, stmt->u.type, stmt->declonly); diff --git a/tools/widl/parser.l b/tools/widl/parser.l -index de25b7d12c4..80a6bc38afb 100644 +index 7a811d537d1..6bbfed5e80b 100644 --- a/tools/widl/parser.l +++ b/tools/widl/parser.l @@ -298,6 +298,7 @@ static const struct keyword keywords[] = { @@ -206,7 +241,7 @@ index de25b7d12c4..80a6bc38afb 100644 {"signed", tSIGNED, 0}, {"sizeof", tSIZEOF, 0}, diff --git a/tools/widl/parser.y b/tools/widl/parser.y -index 57f1e3f5301..93714ebf712 100644 +index 351bbd12107..d12caa06b63 100644 --- a/tools/widl/parser.y +++ b/tools/widl/parser.y @@ -100,6 +100,7 @@ static attr_list_t *check_library_attrs(const char *name, attr_list_t *attrs); @@ -710,10 +745,20 @@ index 7abec41a8fd..951084cf875 100644 { type = type_get_real_type(type); diff --git a/tools/widl/widltypes.h b/tools/widl/widltypes.h -index 7ad0cbea66f..77313b30c0f 100644 +index fbaabfbc8c3..77313b30c0f 100644 --- a/tools/widl/widltypes.h +++ b/tools/widl/widltypes.h -@@ -426,6 +426,11 @@ struct alias_details +@@ -270,7 +270,8 @@ enum threading_type + THREADING_NEUTRAL, + THREADING_SINGLE, + THREADING_FREE, +- THREADING_BOTH ++ THREADING_BOTH, ++ THREADING_MTA, + }; + + enum marshaling_type +@@ -425,6 +426,11 @@ struct alias_details struct _decl_spec_t aliasee; }; @@ -725,7 +770,7 @@ index 7ad0cbea66f..77313b30c0f 100644 #define HASHMAX 64 struct namespace { -@@ -453,6 +458,7 @@ enum type_type +@@ -452,6 +458,7 @@ enum type_type TYPE_ARRAY, TYPE_BITFIELD, TYPE_APICONTRACT, @@ -733,7 +778,7 @@ index 7ad0cbea66f..77313b30c0f 100644 }; struct _type_t { -@@ -473,6 +479,7 @@ struct _type_t { +@@ -472,6 +479,7 @@ struct _type_t { struct pointer_details pointer; struct bitfield_details bitfield; struct alias_details alias; diff --git a/staging/upstream-commit b/staging/upstream-commit index ac9ce0fa..49571a59 100644 --- a/staging/upstream-commit +++ b/staging/upstream-commit @@ -1 +1 @@ -2d6462cdee2bd87a49382794e5a554f33c367f09 +c1824d578ac514d29e79a5a00d6759f11dbe4813