Wine-Devel
By thread
wine-devel@list.winehq.org
By month
Messages by month
- ----- 2026 -----
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- 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
January 2022
- 86 participants
- 2418 messages
Re: [PATCH vkd3d v2 1/3] vkd3d-shader/hlsl: Handle branches in copy propagation.
by Francisco Casas
Hi,
Just in case, this no longer applies after 62bcdcda762d87a63f23a29da281637c71608460.
But I agree with this somewhat "functional" approach to the problem,
it is very readable and hopefully not too expensive.
Francisco.
January 20, 2022 8:42 AM, "Giovanni Mascellani" <gmascellani(a)codeweavers.com> wrote:
> Signed-off-by: Giovanni Mascellani <gmascellani(a)codeweavers.com>
> --
> v2 (well, I don't remember which version number we were, but it was over
> a month ago, so I'll restart over):
> * differentiate between a value that was not written in a scope and a value
> that was dynamically written (i.e., we don't know statically which node
> the written value came from);
>
> Maybe "statically" and "dynamically" are not as understandable as possible,
> I'm open to suggestions.
> ---
> libs/vkd3d-shader/hlsl_codegen.c | 176 +++++++++++++++++++++++++++----
> 1 file changed, 154 insertions(+), 22 deletions(-)
>
> diff --git a/libs/vkd3d-shader/hlsl_codegen.c b/libs/vkd3d-shader/hlsl_codegen.c
> index 75716bdf..1c334f88 100644
> --- a/libs/vkd3d-shader/hlsl_codegen.c
> +++ b/libs/vkd3d-shader/hlsl_codegen.c
> @@ -274,8 +274,16 @@ static bool lower_broadcasts(struct hlsl_ctx *ctx, struct hlsl_ir_node *instr,
> v
> return false;
> }
>
> +enum copy_propagation_value_state
> +{
> + VALUE_STATE_NOT_WRITTEN = 0,
> + VALUE_STATE_STATICALLY_WRITTEN,
> + VALUE_STATE_DYNAMICALLY_WRITTEN,
> +};
> +
> struct copy_propagation_value
> {
> + enum copy_propagation_value_state state;
> struct hlsl_ir_node *node;
> unsigned int component;
> };
> @@ -290,6 +298,7 @@ struct copy_propagation_var_def
> struct copy_propagation_state
> {
> struct rb_tree var_defs;
> + struct copy_propagation_state *parent;
> };
>
> static int copy_propagation_var_def_compare(const void *key, const struct rb_entry *entry)
> @@ -307,15 +316,23 @@ static void copy_propagation_var_def_destroy(struct rb_entry *entry, void
> *conte
> vkd3d_free(var_def);
> }
>
> -static struct copy_propagation_var_def *copy_propagation_get_var_def(struct copy_propagation_state
> *state,
> - struct hlsl_ir_var *var)
> +static struct copy_propagation_value *copy_propagation_get_value(struct copy_propagation_state
> *state,
> + struct hlsl_ir_var *var, unsigned component)
> {
> - struct rb_entry *entry = rb_get(&state->var_defs, var);
> + for (; state; state = state->parent)
> + {
> + struct rb_entry *entry = rb_get(&state->var_defs, var);
> + if (entry)
> + {
> + struct copy_propagation_var_def *var_def = RB_ENTRY_VALUE(entry, struct copy_propagation_var_def,
> entry);
> + assert(component < var_def->var->data_type->reg_size);
>
> - if (entry)
> - return RB_ENTRY_VALUE(entry, struct copy_propagation_var_def, entry);
> - else
> - return NULL;
> + if (var_def->values[component].state != VALUE_STATE_NOT_WRITTEN)
> + return &var_def->values[component];
> + }
> + }
> +
> + return NULL;
> }
>
> static struct copy_propagation_var_def *copy_propagation_create_var_def(struct hlsl_ctx *ctx,
> @@ -339,10 +356,35 @@ static struct copy_propagation_var_def
> *copy_propagation_create_var_def(struct h
> return var_def;
> }
>
> +static void copy_propagation_invalidate_variable(struct copy_propagation_var_def *var_def,
> + unsigned offset, unsigned char writemask)
> +{
> + unsigned i;
> +
> + TRACE("Invalidate variable %s[%u]%s.\n", var_def->var->name, offset,
> debug_hlsl_writemask(writemask));
> +
> + for (i = 0; i < 4; ++i)
> + {
> + if (writemask & (1u << i))
> + {
> + memset(&var_def->values[offset + i], 0, sizeof(var_def->values[offset + i]));
> + var_def->values[offset + i].state = VALUE_STATE_DYNAMICALLY_WRITTEN;
> + }
> + }
> +}
> +
> static void copy_propagation_invalidate_whole_variable(struct copy_propagation_var_def *var_def)
> {
> + unsigned i;
> +
> TRACE("Invalidate variable %s.\n", var_def->var->name);
> +
> memset(var_def->values, 0, sizeof(*var_def->values) * var_def->var->data_type->reg_size);
> +
> + for (i = 0; i < var_def->var->data_type->reg_size; ++i)
> + {
> + var_def->values[i].state = VALUE_STATE_DYNAMICALLY_WRITTEN;
> + }
> }
>
> static void copy_propagation_set_value(struct copy_propagation_var_def *var_def, unsigned int
> offset,
> @@ -356,29 +398,35 @@ static void copy_propagation_set_value(struct copy_propagation_var_def
> *var_def,
> {
> TRACE("Variable %s[%u] is written by instruction %p%s.\n",
> var_def->var->name, offset + i, node, debug_hlsl_writemask(1u << i));
> + var_def->values[offset + i].state = VALUE_STATE_STATICALLY_WRITTEN;
> var_def->values[offset + i].node = node;
> var_def->values[offset + i].component = j++;
> }
> }
> }
>
> -static struct hlsl_ir_node *copy_propagation_compute_replacement(struct copy_propagation_var_def
> *var_def,
> - unsigned int offset, unsigned int count, unsigned int *swizzle)
> +static struct hlsl_ir_node *copy_propagation_compute_replacement(struct copy_propagation_state
> *state,
> + struct hlsl_ir_var *var, unsigned int offset, unsigned int count, unsigned int *swizzle)
> {
> struct hlsl_ir_node *node = NULL;
> unsigned int i;
>
> - assert(offset + count <= var_def->var->data_type->reg_size);
> + assert(offset + count <= var->data_type->reg_size);
>
> *swizzle = 0;
>
> for (i = 0; i < count; ++i)
> {
> + struct copy_propagation_value *value = copy_propagation_get_value(state, var, offset + i);
> +
> + if (!value || value->state != VALUE_STATE_STATICALLY_WRITTEN)
> + return NULL;
> +
> if (!node)
> - node = var_def->values[offset + i].node;
> - else if (node != var_def->values[offset + i].node)
> + node = value->node;
> + else if (node != value->node)
> return NULL;
> - *swizzle |= var_def->values[offset + i].component << i * 2;
> + *swizzle |= value->component << i * 2;
> }
>
> return node;
> @@ -388,7 +436,6 @@ static bool copy_propagation_analyze_load(struct hlsl_ctx *ctx, struct
> hlsl_ir_l
> struct copy_propagation_state *state)
> {
> struct hlsl_ir_node *node = &load->node, *new_node;
> - struct copy_propagation_var_def *var_def;
> struct hlsl_type *type = node->data_type;
> struct hlsl_ir_swizzle *swizzle_node;
> struct hlsl_deref *src = &load->src;
> @@ -401,10 +448,7 @@ static bool copy_propagation_analyze_load(struct hlsl_ctx *ctx, struct
> hlsl_ir_l
> if (!hlsl_offset_from_deref(src, &offset))
> return false;
>
> - if (!(var_def = copy_propagation_get_var_def(state, var)))
> - return false;
> -
> - if (!(new_node = copy_propagation_compute_replacement(var_def, offset, type->dimx, &swizzle)))
> + if (!(new_node = copy_propagation_compute_replacement(state, var, offset, type->dimx, &swizzle)))
> {
> TRACE("No single source for propagating load from %s[%u-%u].\n", var->name, offset, offset +
> type->dimx);
> return false;
> @@ -436,6 +480,94 @@ static void copy_propagation_record_store(struct hlsl_ctx *ctx, struct
> hlsl_ir_s
> copy_propagation_invalidate_whole_variable(var_def);
> }
>
> +static void copy_propagation_state_init(struct hlsl_ctx *ctx, struct copy_propagation_state
> *state,
> + struct copy_propagation_state *parent)
> +{
> + rb_init(&state->var_defs, copy_propagation_var_def_compare);
> + state->parent = parent;
> +}
> +
> +static void copy_propagation_state_destroy(struct copy_propagation_state *state)
> +{
> + rb_destroy(&state->var_defs, copy_propagation_var_def_destroy, NULL);
> +}
> +
> +static void copy_propagation_invalidate_from_block(struct hlsl_ctx *ctx, struct
> copy_propagation_state *state,
> + struct hlsl_block *block)
> +{
> + struct hlsl_ir_node *instr;
> +
> + LIST_FOR_EACH_ENTRY(instr, &block->instrs, struct hlsl_ir_node, entry)
> + {
> + switch (instr->type)
> + {
> + case HLSL_IR_STORE:
> + {
> + struct hlsl_ir_store *store = hlsl_ir_store(instr);
> + struct copy_propagation_var_def *var_def;
> + struct hlsl_deref *lhs = &store->lhs;
> + struct hlsl_ir_var *var = lhs->var;
> + unsigned int offset;
> +
> + if (!(var_def = copy_propagation_create_var_def(ctx, state, var)))
> + continue;
> +
> + if (hlsl_offset_from_deref(lhs, &offset))
> + copy_propagation_invalidate_variable(var_def, offset, store->writemask);
> + else
> + copy_propagation_invalidate_whole_variable(var_def);
> +
> + break;
> + }
> +
> + case HLSL_IR_IF:
> + {
> + struct hlsl_ir_if *iff = hlsl_ir_if(instr);
> +
> + copy_propagation_invalidate_from_block(ctx, state, &iff->then_instrs);
> + copy_propagation_invalidate_from_block(ctx, state, &iff->else_instrs);
> +
> + break;
> + }
> +
> + case HLSL_IR_LOOP:
> + {
> + struct hlsl_ir_loop *loop = hlsl_ir_loop(instr);
> +
> + copy_propagation_invalidate_from_block(ctx, state, &loop->body);
> +
> + break;
> + }
> +
> + default:
> + break;
> + }
> + }
> +}
> +
> +static bool copy_propagation_transform_block(struct hlsl_ctx *ctx, struct hlsl_block *block,
> + struct copy_propagation_state *state);
> +
> +static bool copy_propagation_process_if(struct hlsl_ctx *ctx, struct hlsl_ir_if *iff,
> + struct copy_propagation_state *state)
> +{
> + struct copy_propagation_state inner_state;
> + bool progress = false;
> +
> + copy_propagation_state_init(ctx, &inner_state, state);
> + progress |= copy_propagation_transform_block(ctx, &iff->then_instrs, &inner_state);
> + copy_propagation_state_destroy(&inner_state);
> +
> + copy_propagation_state_init(ctx, &inner_state, state);
> + progress |= copy_propagation_transform_block(ctx, &iff->else_instrs, &inner_state);
> + copy_propagation_state_destroy(&inner_state);
> +
> + copy_propagation_invalidate_from_block(ctx, state, &iff->then_instrs);
> + copy_propagation_invalidate_from_block(ctx, state, &iff->else_instrs);
> +
> + return progress;
> +}
> +
> static bool copy_propagation_transform_block(struct hlsl_ctx *ctx, struct hlsl_block *block,
> struct copy_propagation_state *state)
> {
> @@ -455,8 +587,8 @@ static bool copy_propagation_transform_block(struct hlsl_ctx *ctx, struct
> hlsl_b
> break;
>
> case HLSL_IR_IF:
> - FIXME("Copy propagation doesn't support conditionals yet, leaving.\n");
> - return progress;
> + progress |= copy_propagation_process_if(ctx, hlsl_ir_if(instr), state);
> + break;
>
> case HLSL_IR_LOOP:
> FIXME("Copy propagation doesn't support loops yet, leaving.\n");
> @@ -475,11 +607,11 @@ static bool copy_propagation_execute(struct hlsl_ctx *ctx, struct hlsl_block
> *bl
> struct copy_propagation_state state;
> bool progress;
>
> - rb_init(&state.var_defs, copy_propagation_var_def_compare);
> + copy_propagation_state_init(ctx, &state, NULL);
>
> progress = copy_propagation_transform_block(ctx, block, &state);
>
> - rb_destroy(&state.var_defs, copy_propagation_var_def_destroy, NULL);
> + copy_propagation_state_destroy(&state);
>
> return progress;
> }
> --
> 2.34.1
Jan. 28, 2022
Re: [PATCH] widl: Fix finding standalone tlb files for PE importlib.
by Alexandre Julliard
Jacek Caban <jacek(a)codeweavers.com> writes:
> From: Tom Ritter <tom(a)ritter.vg>
>
> Signed-off-by: Jacek Caban <jacek(a)codeweavers.com>
> ---
> tools/widl/widl.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
I think it would be better to do that .tlb hack directly in
open_typelib(), for the cases where it's needed. For instance it
wouldn't be needed inside the build tree.
--
Alexandre Julliard
julliard(a)winehq.org
Jan. 28, 2022
Re: [PATCH 04/24] gdiplus/tests: Avoid "misleading indentation" warnings.
by Esme Povirk (she/they)
Signed-off-by: Esme Povirk <esme(a)codeweavers.com>
Jan. 28, 2022
[PATCH 5/5] mscoree: Use wide string syntax in create_monodata.
by Esme Povirk
Signed-off-by: Esme Povirk <esme(a)codeweavers.com>
---
This is just some cleanup before adding support for the new registration
type.
dlls/mscoree/corruntimehost.c | 20 ++++++++------------
1 file changed, 8 insertions(+), 12 deletions(-)
diff --git a/dlls/mscoree/corruntimehost.c b/dlls/mscoree/corruntimehost.c
index ec06717be85..afb5a104ca7 100644
--- a/dlls/mscoree/corruntimehost.c
+++ b/dlls/mscoree/corruntimehost.c
@@ -1718,13 +1718,9 @@ end:
HRESULT create_monodata(REFIID riid, LPVOID *ppObj )
{
- static const WCHAR wszAssembly[] = {'A','s','s','e','m','b','l','y',0};
- static const WCHAR wszCodebase[] = {'C','o','d','e','B','a','s','e',0};
- static const WCHAR wszClass[] = {'C','l','a','s','s',0};
- static const WCHAR wszFileSlash[] = {'f','i','l','e',':','/','/','/',0};
- static const WCHAR wszCLSIDSlash[] = {'C','L','S','I','D','\\',0};
- static const WCHAR wszInprocServer32[] = {'\\','I','n','p','r','o','c','S','e','r','v','e','r','3','2',0};
- static const WCHAR wszDLL[] = {'.','d','l','l',0};
+ static const WCHAR wszFileSlash[] = L"file:///";
+ static const WCHAR wszCLSIDSlash[] = L"CLSID\\";
+ static const WCHAR wszInprocServer32[] = L"\\InprocServer32";
WCHAR path[CHARS_IN_GUID + ARRAY_SIZE(wszCLSIDSlash) + ARRAY_SIZE(wszInprocServer32) - 1];
MonoDomain *domain;
MonoAssembly *assembly;
@@ -1751,7 +1747,7 @@ HRESULT create_monodata(REFIID riid, LPVOID *ppObj )
res = RegOpenKeyExW(HKEY_CLASSES_ROOT, path, 0, KEY_READ, &key);
if (res != ERROR_FILE_NOT_FOUND)
{
- res = RegGetValueW( key, NULL, wszClass, RRF_RT_REG_SZ, NULL, classname, &dwBufLen);
+ res = RegGetValueW( key, NULL, L"Class", RRF_RT_REG_SZ, NULL, classname, &dwBufLen);
if(res != ERROR_SUCCESS)
{
WARN("Class value cannot be found.\n");
@@ -1762,7 +1758,7 @@ HRESULT create_monodata(REFIID riid, LPVOID *ppObj )
TRACE("classname (%s)\n", debugstr_w(classname));
dwBufLen = MAX_PATH + 8;
- res = RegGetValueW( key, NULL, wszCodebase, RRF_RT_REG_SZ, NULL, codebase, &dwBufLen);
+ res = RegGetValueW( key, NULL, L"CodeBase", RRF_RT_REG_SZ, NULL, codebase, &dwBufLen);
if(res == ERROR_SUCCESS)
{
/* Strip file:/// */
@@ -1797,7 +1793,7 @@ HRESULT create_monodata(REFIID riid, LPVOID *ppObj )
if (res != ERROR_SUCCESS)
goto cleanup;
dwBufLen = MAX_PATH + 8;
- res = RegGetValueW(subkey, NULL, wszAssembly, RRF_RT_REG_SZ, NULL, assemblyname, &dwBufLen);
+ res = RegGetValueW(subkey, NULL, L"Assembly", RRF_RT_REG_SZ, NULL, assemblyname, &dwBufLen);
RegCloseKey(subkey);
if (res != ERROR_SUCCESS)
goto cleanup;
@@ -1805,7 +1801,7 @@ HRESULT create_monodata(REFIID riid, LPVOID *ppObj )
else
{
dwBufLen = MAX_PATH + 8;
- res = RegGetValueW(key, NULL, wszAssembly, RRF_RT_REG_SZ, NULL, assemblyname, &dwBufLen);
+ res = RegGetValueW(key, NULL, L"Assembly", RRF_RT_REG_SZ, NULL, assemblyname, &dwBufLen);
if (res != ERROR_SUCCESS)
goto cleanup;
}
@@ -1830,7 +1826,7 @@ HRESULT create_monodata(REFIID riid, LPVOID *ppObj )
*(ns) = '\0';
lstrcatW(filename, assemblyname);
*(ns) = '.';
- lstrcatW(filename, wszDLL);
+ lstrcatW(filename, L".dll");
}
}
}
--
2.30.2
Jan. 28, 2022
[PATCH 4/5] mscoree: Update Wine Mono to 7.1.1.
by Esme Povirk
Signed-off-by: Esme Povirk <esme(a)codeweavers.com>
---
This version installs and registers diasymreader.dll, so we need to at
least have enough of that dll to register it first.
dlls/appwiz.cpl/addons.c | 4 ++--
dlls/mscoree/mscoree_private.h | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/dlls/appwiz.cpl/addons.c b/dlls/appwiz.cpl/addons.c
index b4da6137d72..71919f225c8 100644
--- a/dlls/appwiz.cpl/addons.c
+++ b/dlls/appwiz.cpl/addons.c
@@ -58,10 +58,10 @@ WINE_DEFAULT_DEBUG_CHANNEL(appwizcpl);
#define GECKO_SHA "???"
#endif
-#define MONO_VERSION "7.0.0"
+#define MONO_VERSION "7.1.1"
#if defined(__i386__) || defined(__x86_64__)
#define MONO_ARCH "x86"
-#define MONO_SHA "b37e6fc9e590e582243dc25d72a5fcc330c3a7970dfdc98a7a81d23845ba8900"
+#define MONO_SHA "9dc8e5603b7bc64354eb94ae4ea0f6821424767a3ff44ff0d19e346a490c11ea"
#else
#define MONO_ARCH ""
#define MONO_SHA "???"
diff --git a/dlls/mscoree/mscoree_private.h b/dlls/mscoree/mscoree_private.h
index 1ef5ac200f3..2e72ea5370b 100644
--- a/dlls/mscoree/mscoree_private.h
+++ b/dlls/mscoree/mscoree_private.h
@@ -45,7 +45,7 @@ extern HRESULT assembly_get_runtime_version(ASSEMBLY *assembly, LPSTR *version)
extern HRESULT assembly_get_vtable_fixups(ASSEMBLY *assembly, VTableFixup **fixups, DWORD *count) DECLSPEC_HIDDEN;
extern HRESULT assembly_get_native_entrypoint(ASSEMBLY *assembly, NativeEntryPointFunc *func) DECLSPEC_HIDDEN;
-#define WINE_MONO_VERSION "7.0.0"
+#define WINE_MONO_VERSION "7.1.1"
/* Mono embedding */
typedef struct _MonoDomain MonoDomain;
--
2.30.2
Jan. 28, 2022
[PATCH 3/5] diasymreader: Register CLSID_CorSymWriter_SXS.
by Esme Povirk
Signed-off-by: Esme Povirk <esme(a)codeweavers.com>
---
I think RGS registration is required for this because the way it goes
through mscoree is unusual. A later patch will add support for this
kind of COM registration to mscoree.
dlls/diasymreader/Makefile.in | 5 ++++
dlls/diasymreader/diasymreader.rc | 23 +++++++++++++++
dlls/diasymreader/diasymreader.rgs | 23 +++++++++++++++
dlls/diasymreader/diasymreader.spec | 6 ++--
dlls/diasymreader/main.c | 46 +++++++++++++++++++++++++++++
5 files changed, 100 insertions(+), 3 deletions(-)
create mode 100644 dlls/diasymreader/diasymreader.rc
create mode 100644 dlls/diasymreader/diasymreader.rgs
create mode 100644 dlls/diasymreader/main.c
diff --git a/dlls/diasymreader/Makefile.in b/dlls/diasymreader/Makefile.in
index 6cc5541adff..2ea95048edd 100644
--- a/dlls/diasymreader/Makefile.in
+++ b/dlls/diasymreader/Makefile.in
@@ -1,3 +1,8 @@
MODULE = diasymreader.dll
+IMPORTS = uuid
EXTRADLLFLAGS = -Wb,--prefer-native
+
+C_SRCS = main.c
+
+RC_SRCS = diasymreader.rc
diff --git a/dlls/diasymreader/diasymreader.rc b/dlls/diasymreader/diasymreader.rc
new file mode 100644
index 00000000000..ce8214c2065
--- /dev/null
+++ b/dlls/diasymreader/diasymreader.rc
@@ -0,0 +1,23 @@
+/*
+ * Copyright 2022 Esme Povirk
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <windef.h>
+
+/* @makedep: diasymreader.rgs */
+2 WINE_REGISTRY diasymreader.rgs
+
diff --git a/dlls/diasymreader/diasymreader.rgs b/dlls/diasymreader/diasymreader.rgs
new file mode 100644
index 00000000000..ea5bf07f370
--- /dev/null
+++ b/dlls/diasymreader/diasymreader.rgs
@@ -0,0 +1,23 @@
+HKCR
+{
+ NoRemove CLSID
+ {
+ '{0ae2deb0-f901-478b-bb9f-881ee8066788}'
+ {
+ InProcServer32 = s 'mscoree.dll'
+ {
+ val ThreadingModel = s 'Both'
+ '4.0.30319'
+ {
+ val 'ImplementedInThisVersion' = s ''
+ }
+ ProgID = s 'CorSymWriter_SxS'
+ Server = s 'diasymreader.dll'
+ }
+ }
+ }
+ 'CorSymWriter_SxS' = s 'NDP SymWriter'
+ {
+ CLSID = s '{0ae2deb0-f901-478b-bb9f-881ee8066788}'
+ }
+}
diff --git a/dlls/diasymreader/diasymreader.spec b/dlls/diasymreader/diasymreader.spec
index 9277fb1bcd9..63644e07fd4 100644
--- a/dlls/diasymreader/diasymreader.spec
+++ b/dlls/diasymreader/diasymreader.spec
@@ -1,8 +1,8 @@
@ stub CreateNGenPdbWriter
@ stub DllCanUnloadNow
-@ stub DllGetClassObject
+@ stdcall -private DllGetClassObject(ptr ptr ptr)
@ stub DllGetClassObjectInternal
-@ stub DllRegisterServer
-@ stub DllUnregisterServer
+@ stdcall -private DllRegisterServer()
+@ stdcall -private DllUnregisterServer()
@ stub VSDllRegisterServer
@ stub VSDllUnregisterServer
diff --git a/dlls/diasymreader/main.c b/dlls/diasymreader/main.c
new file mode 100644
index 00000000000..7c47edb475d
--- /dev/null
+++ b/dlls/diasymreader/main.c
@@ -0,0 +1,46 @@
+/* Copyright (C) 2022 Esme Povirk
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "winnls.h"
+#include "objbase.h"
+#include "ocidl.h"
+#include "rpcproxy.h"
+
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(diasymreader);
+
+HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID iid, LPVOID *ppv)
+{
+ FIXME("(%s,%s,%p)\n", debugstr_guid(rclsid), debugstr_guid(iid), ppv);
+ return CLASS_E_CLASSNOTAVAILABLE;
+}
+
+HRESULT WINAPI DllRegisterServer(void)
+{
+ return __wine_register_resources();
+}
+
+HRESULT WINAPI DllUnregisterServer(void)
+{
+ return __wine_unregister_resources();
+}
+
--
2.30.2
Jan. 28, 2022
[PATCH 2/5] diasymreader: Add stub dll
by Esme Povirk
Signed-off-by: Esme Povirk <esme(a)codeweavers.com>
---
configure.ac | 1 +
dlls/diasymreader/Makefile.in | 3 +++
dlls/diasymreader/diasymreader.spec | 8 ++++++++
loader/wine.inf.in | 2 ++
4 files changed, 14 insertions(+)
create mode 100644 dlls/diasymreader/Makefile.in
create mode 100644 dlls/diasymreader/diasymreader.spec
diff --git a/configure.ac b/configure.ac
index 0aad012060e..4396981f69c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2738,6 +2738,7 @@ WINE_CONFIG_MAKEFILE(dlls/dhcpcsvc)
WINE_CONFIG_MAKEFILE(dlls/dhcpcsvc/tests)
WINE_CONFIG_MAKEFILE(dlls/dhcpcsvc6)
WINE_CONFIG_MAKEFILE(dlls/dhtmled.ocx)
+WINE_CONFIG_MAKEFILE(dlls/diasymreader)
WINE_CONFIG_MAKEFILE(dlls/difxapi)
WINE_CONFIG_MAKEFILE(dlls/dinput)
WINE_CONFIG_MAKEFILE(dlls/dinput/tests)
diff --git a/dlls/diasymreader/Makefile.in b/dlls/diasymreader/Makefile.in
new file mode 100644
index 00000000000..6cc5541adff
--- /dev/null
+++ b/dlls/diasymreader/Makefile.in
@@ -0,0 +1,3 @@
+MODULE = diasymreader.dll
+
+EXTRADLLFLAGS = -Wb,--prefer-native
diff --git a/dlls/diasymreader/diasymreader.spec b/dlls/diasymreader/diasymreader.spec
new file mode 100644
index 00000000000..9277fb1bcd9
--- /dev/null
+++ b/dlls/diasymreader/diasymreader.spec
@@ -0,0 +1,8 @@
+@ stub CreateNGenPdbWriter
+@ stub DllCanUnloadNow
+@ stub DllGetClassObject
+@ stub DllGetClassObjectInternal
+@ stub DllRegisterServer
+@ stub DllUnregisterServer
+@ stub VSDllRegisterServer
+@ stub VSDllUnregisterServer
diff --git a/loader/wine.inf.in b/loader/wine.inf.in
index 2fd4fbd22ea..077338bc32e 100644
--- a/loader/wine.inf.in
+++ b/loader/wine.inf.in
@@ -2635,6 +2635,7 @@ HKLM,%CurrentVersion%\Telephony\Country List\998,"SameAreaRule",,"G"
11,,aspnet_regiis.exe,-
11,,ngen.exe,-
11,,fusion.dll,-
+11,,diasymreader.dll,-
11,,mscorwks.dll,-
11,,regsvcs.exe,-
11,,regasm.exe,-
@@ -2689,6 +2690,7 @@ HKLM,%CurrentVersion%\Telephony\Country List\998,"SameAreaRule",,"G"
11,,aspnet_regiis.exe,-
11,,ngen.exe,-
11,,fusion.dll,-
+11,,diasymreader.dll,-
11,,mscorwks.dll,-
11,,regsvcs.exe,-
11,,regasm.exe,-
--
2.30.2
Jan. 28, 2022
[PATCH 1/5] include: Add ISymUnmanagedWriter definition.
by Esme Povirk
Signed-off-by: Esme Povirk <esme(a)codeweavers.com>
---
include/Makefile.in | 1 +
include/corsym.idl | 97 +++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 98 insertions(+)
create mode 100644 include/corsym.idl
diff --git a/include/Makefile.in b/include/Makefile.in
index 7fcf5f0ba7b..2f1e4767848 100644
--- a/include/Makefile.in
+++ b/include/Makefile.in
@@ -89,6 +89,7 @@ SOURCES = \
cordebug.idl \
corerror.h \
corhdr.h \
+ corsym.idl \
cpl.h \
crtrow.idl \
cryptdlg.h \
diff --git a/include/corsym.idl b/include/corsym.idl
new file mode 100644
index 00000000000..5faf32c0ddd
--- /dev/null
+++ b/include/corsym.idl
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2022 Esme Povirk
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+import "unknwn.idl";
+import "objidl.idl";
+import "oaidl.idl";
+
+cpp_quote("#if 0")
+/* defined in corhdr.h */
+typedef UINT32 mdToken;
+typedef mdToken mdMethodDef;
+typedef mdToken mdTypeDef;
+/* defined in winnt.h */
+typedef SIZE_T IMAGE_DEBUG_DIRECTORY;
+cpp_quote("#endif")
+
+[
+ object,
+ uuid(b01fafeb-c450-3a4d-beec-b4ceec01e006),
+ pointer_default(unique)
+]
+interface ISymUnmanagedDocumentWriter : IUnknown
+{
+ HRESULT SetSource([in] ULONG32 sourceSize, [in, size_is(sourceSize)] BYTE source[]);
+ HRESULT SetCheckSum([in] GUID algorithmId,
+ [in] ULONG32 checkSumSize, [in, size_is(checkSumSize)] BYTE checkSum[]);
+}
+
+[
+ object,
+ uuid(ed14aa72-78e2-4884-84e2-334293ae5214),
+ pointer_default(unique)
+]
+interface ISymUnmanagedWriter : IUnknown
+{
+ HRESULT DefineDocument([in] const WCHAR *url, [in] const GUID *language, [in] const GUID *languageVendor,
+ [in] const GUID *documentType, [out, retval] ISymUnmanagedDocumentWriter** pRetVal);
+ HRESULT SetUserEntryPoint([in] mdMethodDef entryMethod);
+ HRESULT OpenMethod([in] mdMethodDef method);
+ HRESULT CloseMethod();
+ HRESULT OpenScope([in] ULONG32 startOffset, [out, retval] ULONG32 *pRetVal);
+ HRESULT CloseScope([in] ULONG32 endOffset);
+ HRESULT SetScopeRange([in] ULONG32 scopeID, [in] ULONG32 startOffset, [in] ULONG32 endOffset);
+ HRESULT DefineLocalVariable([in] const WCHAR *name, [in] ULONG32 attributes, [in] ULONG32 cSig,
+ [in, size_is(cSig)] unsigned char signature[], [in] ULONG32 addrKind,
+ [in] ULONG32 addr1, [in] ULONG32 addr2, [in] ULONG32 addr3,
+ [in] ULONG32 startOffset, [in] ULONG32 endOffset);
+ HRESULT DefineParameter([in] const WCHAR *name, [in] ULONG32 attributes, [in] ULONG32 sequence,
+ [in] ULONG32 addrKind,
+ [in] ULONG32 addr1, [in] ULONG32 addr2, [in] ULONG32 addr3);
+ HRESULT DefineField([in] mdTypeDef parent, [in] const WCHAR *name, [in] ULONG32 attributes, [in] ULONG32 cSig,
+ [in, size_is(cSig)] unsigned char signature[], [in] ULONG32 addrKind,
+ [in] ULONG32 addr1, [in] ULONG32 addr2, [in] ULONG32 addr3);
+ HRESULT DefineGlobalVariable([in] const WCHAR *name, [in] ULONG32 attributes, [in] ULONG32 cSig,
+ [in, size_is(cSig)] unsigned char signature[], [in] ULONG32 addrKind,
+ [in] ULONG32 addr1, [in] ULONG32 addr2, [in] ULONG32 addr3);
+ HRESULT Close();
+ HRESULT SetSymAttributes([in] mdToken parent, [in] const WCHAR *name,
+ [in] ULONG32 cData, [in, size_is(cData)] unsigned char data[]);
+ HRESULT OpenNamespace([in] const WCHAR *name);
+ HRESULT CloseNamespace();
+ HRESULT UsingNamespace([in] const WCHAR *fullName);
+ HRESULT SetMethodSourceRange([in] ISymUnmanagedDocumentWriter *startDoc, ULONG32 startLine, ULONG32 startColumn,
+ [in] ISymUnmanagedDocumentWriter *endDoc, ULONG32 endLine, ULONG32 endColumn);
+ HRESULT Initialize([in] IUnknown *emitter, [in] const WCHAR *filename, [in] IStream *pIStream,
+ [in] BOOL fFullBuild);
+ HRESULT GetDebugInfo([in, out] IMAGE_DEBUG_DIRECTORY *pIDD, [in] DWORD cData, [out] DWORD *pcData,
+ [out, size_is(cData), length_is(*pcData)] BYTE data[]);
+ HRESULT DefineSequencePoints([in] ISymUnmanagedDocumentWriter *document, [in] ULONG32 spCount,
+ [in, size_is(spCount)] ULONG32 offsets[], [in, size_is(spCount)] ULONG32 lines[],
+ [in, size_is(spCount)] ULONG32 columns[], [in, size_is(spCount)] ULONG32 endLines[],
+ [in, size_is(spCount)] ULONG32 endColumns[]);
+ HRESULT RemapToken([in] mdToken oldToken, [in] mdToken newToken);
+ HRESULT Initialize2([in] IUnknown *emitter, [in] const WCHAR *tempFilename, [in] IStream *pIStream,
+ [in] BOOL fFullBuild, [in] const WCHAR *finalFilename);
+ HRESULT DefineConstant([in] const WCHAR *name, [in] VARIANT value, [in] ULONG32 cSig,
+ [in, size_is(cSig)] unsigned char signature[]);
+ HRESULT Abort();
+}
+
+cpp_quote("DEFINE_GUID(CLSID_CorSymWriter_SxS, 0x0ae2deb0,0xf901,0x478b,0xbb,0x9f,0x88,0x1e,0xe8,0x06,0x67,0x88);")
+
--
2.30.2
Jan. 28, 2022
Re: [PATCH vkd3d v4 6/6] vkd3d-shader/hlsl: Parse bitwise OR.
by Francisco Casas
Signed-off-by: Francisco Casas <fcasas(a)codeweavers.com>
January 28, 2022 5:03 AM, "Giovanni Mascellani" <gmascellani(a)codeweavers.com> wrote:
> Signed-off-by: Giovanni Mascellani <gmascellani(a)codeweavers.com>
> ---
> libs/vkd3d-shader/hlsl.y | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/libs/vkd3d-shader/hlsl.y b/libs/vkd3d-shader/hlsl.y
> index ea13f4e7..cee682f3 100644
> --- a/libs/vkd3d-shader/hlsl.y
> +++ b/libs/vkd3d-shader/hlsl.y
> @@ -3611,7 +3611,7 @@ bitor_expr:
> bitxor_expr
> | bitor_expr '|' bitxor_expr
> {
> - hlsl_fixme(ctx, &@$, "Bitwise OR.");
> + $$ = add_binary_bitwise_expr_merge(ctx, $1, $3, HLSL_OP2_BIT_OR, &@2);
> }
>
> logicand_expr:
> --
> 2.34.1
Jan. 28, 2022
Re: [PATCH vkd3d v4 5/6] vkd3d-shader/hlsl: Parse bitwise XOR.
by Francisco Casas
Signed-off-by: Francisco Casas <fcasas(a)codeweavers.com>
January 28, 2022 4:48 AM, "Giovanni Mascellani" <gmascellani(a)codeweavers.com> wrote:
> Signed-off-by: Giovanni Mascellani <gmascellani(a)codeweavers.com>
> ---
> libs/vkd3d-shader/hlsl.y | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/libs/vkd3d-shader/hlsl.y b/libs/vkd3d-shader/hlsl.y
> index 13268617..ea13f4e7 100644
> --- a/libs/vkd3d-shader/hlsl.y
> +++ b/libs/vkd3d-shader/hlsl.y
> @@ -3604,7 +3604,7 @@ bitxor_expr:
> bitand_expr
> | bitxor_expr '^' bitand_expr
> {
> - hlsl_fixme(ctx, &@$, "Bitwise XOR.");
> + $$ = add_binary_bitwise_expr_merge(ctx, $1, $3, HLSL_OP2_BIT_XOR, &@2);
> }
>
> bitor_expr:
> --
> 2.34.1
Jan. 28, 2022