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 v3 07/13] loader: Don't clobber existing memory mappings when reserving addresses.
by Jinoh Kang
On 1/27/22 16:37, Alexandre Julliard wrote:
> Jinoh Kang <jinoh.kang.kr(a)gmail.com> writes:
>
>> - loader: Use long instead of int for syscall return type in i386 code.
>>
>> I was planning to add more syscalls, and found that i386 code used "int" for
>> syscall returns. My assumption was that it was a style issue (presumably
>> 32-bit-area Wine's leftover) that I was expected to address _before_ I could
>> add more inline asm blocks.
>>
>> [The reason why I found "int" confusing was that I usually read "long" as
>> "machine register-width integer," and "int" as "integer that either only
>> needs to hold small values (e.g. exit code) _or_ has to be 32-bit for some
>> reason." Granted int = long on ILP32, but someone looking at the
>> code might not be able to immediately verify that the type is correct unless
>> they also consider that "int $0x80" is for the i386 ABI (or that the code region
>> is guarded by ifdef __i386__), and i386 is a 32-bit architecture.
>> I supposed that would be extra cognitive load for someone reviewing/auditing
>> the code.]
>
> "long" doesn't mean pointer size in Win32, and since it differs between
> Win32 and Unix it's confusing, so we try to avoid it as much as
> possible. Here it's obviously safe, but that still makes it more
> confusing than "int", not less.
Thanks for the comment. It sounds reasonable. Perhaps if I were going for
readability, I should have used "uintptr_t" instead.
I'll switch to int for the next iteration.
>
>> - loader: Remove GCC <=4.x EBX register spilling workaround for i386.
>>
>> Similar to above, but debugging related. Again I was adding asm blocks
>> around, so I felt it obliged to fix it before adding more code.
>
> I'm not convinced that this is safe, did you test on a really old gcc?
Yes, I did. See:
https://godbolt.org/z/nq1T1rr93 (gcc -m32 -O2 -fno-PIC)
versus:
https://godbolt.org/z/8ebsK7Mzx (gcc -m32 -O2 -fPIC)
Note that using EBX works flawlessly if PIC is disabled (which is the case for the preloader).
Furthermore I have verified that the patch works on CentOS 7 with GCC 4.8.5:
$ gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ WINEPRELOADREMAPVDSO=always WINEPRELOADREMAPSTACK=always strace -e trace=mremap ./wine winecfg
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=23970, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=23971, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=23972, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=23973, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
strace: [ Process PID=23969 runs in 32 bit mode. ]
mremap(0xf127d000, 12288, 12288, MREMAP_MAYMOVE|MREMAP_FIXED, 0xf1278000) = 0xf1278000
mremap(0xf1280000, 4096, 4096, MREMAP_MAYMOVE|MREMAP_FIXED, 0xf127b000) = 0xf127b000
--- SIGIO {si_signo=SIGIO, si_code=SI_USER, si_pid=23969, si_uid=1000} ---
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=23974, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=23976, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=23978, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
--- SIGUSR1 {si_signo=SIGUSR1, si_code=SI_TKILL, si_pid=23975, si_uid=1000} ---
--- SIGUSR1 {si_signo=SIGUSR1, si_code=SI_TKILL, si_pid=23975, si_uid=1000} ---
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=23980, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
0044:err:ole:start_rpcss Failed to open service manager
003c:fixme:imm:ImeSetActiveContext (0x25ae88, 1): stub
003c:fixme:imm:ImmReleaseContext (00010054, 0025AE88): stub
0044:fixme:imm:ImeSetActiveContext (0x257eb0, 0): stub
0044:fixme:imm:ImmReleaseContext (00010020, 00257EB0): stub
>
>> Meanwhile, following are patches that I deem necessary and not gratuitous:
>>
>> - loader: Refactor argv/envp/auxv management.
>>
>> This was necessary because I had to pass around the pointers to
>> stack objects a lot. Examples include getenv() for letting
>> user control remapping behaviour via env vars, and stack relocation
>> (which requires shifting all the argv/envp/auxv pointers).
>> If the pointer variables were not in one place, the latter would
>> make the code a lot hairy (by passing around all the scattered
>> stack pointers) and unmaintainable.
>
> Well, letting user control it through env vars is exactly what I mean
> with "unneeded infrastructure".
It was intended to avoid regression by gradually adopting the new behaviour.
My plan was to:
1. Hide the new code path behind a flag.
2. Make it default on Wine-Staging (https://bugs.winehq.org/show_bug.cgi?id=52313)
3. Instruct users experiencing performance problem (intermittent or persistent)
to enable the new behaviour and see if it fixes the problem.
4. If enough users have tested the new feature, make it non-configurable.
If you think this process is unnecessary, the environment variables are of course nonsense.
(I've got no replies on the ticket there, and I guessed it might have been better off on the list after all...)
> No user is going to want to understand
> or tweak these things.
Yes. It is intended only for testers and tech/community support, not end-users.
>
>> - loader: Refactor number parsing to own function.
>>
>> Number parsing was only for WINEPRELOADRESERVE. Now I need it for
>> parsing /proc/self/maps as well.
>
> You shouldn't need to parse /proc/self/maps at all.
>
Honestly the part I spent the most time on this patchset was to try to avoid having to parse /proc/self/maps entirely.
The problem is that it's impossible to reliably identity the exact range of Linux vDSO/vvar mapping without reading /proc/self/maps.
1. vDSO hard-codes vvar's offset relative to vDSO. Therefore, remapping vDSO requires vvar to be *also* remapped as well.
However, vvar's size and its location relative to vDSO is *not* guaranteed by ABI, and has changed all the time.
- x86: [vvar] orginally resided at a fixed address 0xffffffffff5ff000 (64-bit) [1], but was later changed so that it precedes [vdso] [2].
There, sym_vvar_start is a negative value [3]. text_start is the base address of vDSO, and addr becomes the address of vvar.
- AArch32: [vvar] is a single page and precedes [vdso] [4].
- AArch64: [vvar] is two pages long and precedes [vdso] [5]. Before v5.9, [vvar] was a single page [6].
2. It's very difficult to deduce vDSO and vvar's size and offset relative to each other.
Since vvar's symbol does not exist in vDSO's symtab, determining the layout would require parsing vDSO's code.
Also note that CRIU (Checkpoint Restore In Userspace) has maps parsing code just for relocating vDSO [7].
[1] https://lwn.net/Articles/615809/
[2] https://elixir.bootlin.com/linux/v5.16.3/source/arch/x86/entry/vdso/vma.c#L…
[3] https://elixir.bootlin.com/linux/v5.16.3/source/arch/x86/include/asm/vdso.h…
[4] https://elixir.bootlin.com/linux/v5.16.3/source/arch/arm/kernel/vdso.c#L236
[5] https://elixir.bootlin.com/linux/v5.16.3/source/arch/arm64/kernel/vdso.c#L2…
[6] https://elixir.bootlin.com/linux/v5.8/source/arch/arm64/kernel/vdso.c#L161
[7] https://github.com/checkpoint-restore/criu/blob/a315774e11b4da1eb36446ae996…
--
Sincerely,
Jinoh Kang
Jan. 27, 2022
Re: [PATCH 6/6] msvcp140_atomic_wait: Implement __std_bulk_submit_threadpool_work.
by Piotr Caban
Hi Daniel,
On 1/26/22 23:50, Daniel Lehman wrote:
> + /* canceling bulk submit */
> + workcalled = 0;
> + work = p___std_create_threadpool_work(threadpool_workcallback, &workcalled, NULL);
> + ok(!!work, "failed to create threadpool_work\n");
> + p___std_bulk_submit_threadpool_work(work, 1234);
> + p___std_wait_for_threadpool_work_callbacks(work, TRUE);
> + p___std_close_threadpool_work(work);
> + ok(workcalled < 1234, "expected some work to be canceled, got %d\n", workcalled);
The workcalled < 1234 occasionally fails on my machine (and if it
doesn't we end with workcalled around 1230). Please remove the test or
find a way to avoid the race.
Please also use InterlockedIncrement when updating workcalled from
multiple threads.
Thanks,
Piotr
Jan. 27, 2022
Re: [PATCH v2 5/5] secur32/tests: Add tests for DTLS handshake retransmission.
by Marvin
Hi,
While running your changed tests, I think I found new failures.
Being a bot and all I'm not very good at pattern recognition, so I might be
wrong, but could you please double-check?
Full results can be found at:
https://testbot.winehq.org/JobDetails.pl?Key=106161
Your paranoid android.
=== w1064 (32 bit report) ===
secur32:
schannel.c:1442: Test failed: got 00090317
schannel.c:1452: Test failed: DecryptMessage failed: 80090317
=== w1064 (64 bit report) ===
secur32:
schannel.c:1442: Test failed: got 00090317
schannel.c:1452: Test failed: DecryptMessage failed: 80090317
Jan. 27, 2022
[PATCH vkd3d v3 6/6] vkd3d-shader/hlsl: Parse bitwise OR.
by Giovanni Mascellani
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. 27, 2022
[PATCH vkd3d v3 5/6] vkd3d-shader/hlsl: Parse bitwise XOR.
by Giovanni Mascellani
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. 27, 2022
[PATCH vkd3d v3 4/6] vkd3d-shader/hlsl: Parse bitwise AND.
by Giovanni Mascellani
Signed-off-by: Giovanni Mascellani <gmascellani(a)codeweavers.com>
---
v2:
* Emit error messages.
---
libs/vkd3d-shader/hlsl.y | 45 +++++++++++++++++++++++++++++++++++++++-
1 file changed, 44 insertions(+), 1 deletion(-)
diff --git a/libs/vkd3d-shader/hlsl.y b/libs/vkd3d-shader/hlsl.y
index 9476765f..13268617 100644
--- a/libs/vkd3d-shader/hlsl.y
+++ b/libs/vkd3d-shader/hlsl.y
@@ -1057,6 +1057,49 @@ static struct list *add_binary_arithmetic_expr_merge(struct hlsl_ctx *ctx, struc
return list1;
}
+static struct hlsl_ir_expr *add_binary_bitwise_expr(struct hlsl_ctx *ctx, struct list *instrs,
+ enum hlsl_ir_expr_op op, struct hlsl_ir_node *arg1, struct hlsl_ir_node *arg2,
+ const struct vkd3d_shader_location *loc)
+{
+ if (arg1->data_type->base_type == HLSL_TYPE_HALF || arg1->data_type->base_type == HLSL_TYPE_FLOAT)
+ {
+ struct vkd3d_string_buffer *type_str = hlsl_type_to_string(ctx, arg1->data_type);
+
+ if (type_str)
+ hlsl_error(ctx, loc, VKD3D_SHADER_ERROR_HLSL_INVALID_TYPE,
+ "The first argument has type '%s', which is not integer.",
+ type_str->buffer);
+ hlsl_release_string_buffer(ctx, type_str);
+ return NULL;
+ }
+
+ if (arg2->data_type->base_type == HLSL_TYPE_HALF || arg2->data_type->base_type == HLSL_TYPE_FLOAT)
+ {
+ struct vkd3d_string_buffer *type_str = hlsl_type_to_string(ctx, arg2->data_type);
+
+ if (type_str)
+ hlsl_error(ctx, loc, VKD3D_SHADER_ERROR_HLSL_INVALID_TYPE,
+ "The second argument has type '%s', which is not integer.",
+ type_str->buffer);
+ hlsl_release_string_buffer(ctx, type_str);
+ return NULL;
+ }
+
+ return add_binary_arithmetic_expr(ctx, instrs, op, arg1, arg2, loc);
+}
+
+static struct list *add_binary_bitwise_expr_merge(struct hlsl_ctx *ctx, struct list *list1, struct list *list2,
+ enum hlsl_ir_expr_op op, const struct vkd3d_shader_location *loc)
+{
+ struct hlsl_ir_node *arg1 = node_from_list(list1), *arg2 = node_from_list(list2);
+
+ list_move_tail(list1, list2);
+ vkd3d_free(list2);
+ add_binary_bitwise_expr(ctx, list1, op, arg1, arg2, loc);
+
+ return list1;
+}
+
static struct hlsl_ir_expr *add_binary_comparison_expr(struct hlsl_ctx *ctx, struct list *instrs,
enum hlsl_ir_expr_op op, struct hlsl_ir_node *arg1, struct hlsl_ir_node *arg2,
struct vkd3d_shader_location *loc)
@@ -3554,7 +3597,7 @@ bitand_expr:
equality_expr
| bitand_expr '&' equality_expr
{
- hlsl_fixme(ctx, &@$, "Bitwise AND.");
+ $$ = add_binary_bitwise_expr_merge(ctx, $1, $3, HLSL_OP2_BIT_AND, &@2);
}
bitxor_expr:
--
2.34.1
Jan. 27, 2022
[PATCH vkd3d v3 3/6] vkd3d-shader/hlsl: Write SM4 unsigned multiplication instructions.
by Giovanni Mascellani
Signed-off-by: Giovanni Mascellani <gmascellani(a)codeweavers.com>
---
v2:
* Rename to write_sm4_binary_op_with_two_destinations().
* Fix writemask mapping (before it always used the writemask from
destination 1, but of course it has to use dst_idx).
v3:
* Rebased onto master.
---
libs/vkd3d-shader/hlsl_sm4.c | 34 +++++++++++++++++++++++++++++++++-
1 file changed, 33 insertions(+), 1 deletion(-)
diff --git a/libs/vkd3d-shader/hlsl_sm4.c b/libs/vkd3d-shader/hlsl_sm4.c
index 4eebd583..3ab60c26 100644
--- a/libs/vkd3d-shader/hlsl_sm4.c
+++ b/libs/vkd3d-shader/hlsl_sm4.c
@@ -786,7 +786,7 @@ struct sm4_instruction
{
struct sm4_register reg;
unsigned int writemask;
- } dsts[1];
+ } dsts[2];
unsigned int dst_count;
struct sm4_src_register
@@ -1266,6 +1266,31 @@ static void write_sm4_binary_op(struct vkd3d_bytecode_buffer *buffer, enum vkd3d
write_sm4_instruction(buffer, &instr);
}
+static void write_sm4_binary_op_with_two_destinations(struct vkd3d_bytecode_buffer *buffer,
+ enum vkd3d_sm4_opcode opcode, const struct hlsl_ir_node *dst, unsigned dst_idx,
+ const struct hlsl_ir_node *src1, const struct hlsl_ir_node *src2)
+{
+ struct sm4_instruction instr;
+ unsigned int writemask;
+
+ memset(&instr, 0, sizeof(instr));
+ instr.opcode = opcode;
+
+ instr.dsts[1 - dst_idx].reg.type = VKD3D_SM4_RT_NULL;
+ instr.dsts[1 - dst_idx].reg.dim = VKD3D_SM4_DIMENSION_NONE;
+ instr.dsts[1 - dst_idx].reg.idx_count = 0;
+ sm4_register_from_node(&instr.dsts[dst_idx].reg, &instr.dsts[dst_idx].writemask, NULL, dst);
+ instr.dst_count = 2;
+
+ sm4_register_from_node(&instr.srcs[0].reg, &writemask, &instr.srcs[0].swizzle_type, src1);
+ instr.srcs[0].swizzle = hlsl_map_swizzle(hlsl_swizzle_from_writemask(writemask), instr.dsts[dst_idx].writemask);
+ sm4_register_from_node(&instr.srcs[1].reg, &writemask, &instr.srcs[1].swizzle_type, src2);
+ instr.srcs[1].swizzle = hlsl_map_swizzle(hlsl_swizzle_from_writemask(writemask), instr.dsts[dst_idx].writemask);
+ instr.src_count = 2;
+
+ write_sm4_instruction(buffer, &instr);
+}
+
static void write_sm4_constant(struct hlsl_ctx *ctx,
struct vkd3d_bytecode_buffer *buffer, const struct hlsl_ir_constant *constant)
{
@@ -1578,6 +1603,13 @@ static void write_sm4_expr(struct hlsl_ctx *ctx,
write_sm4_binary_op(buffer, VKD3D_SM4_OP_UMIN, &expr->node, arg1, arg2);
break;
+ case HLSL_OP2_MUL:
+ /* Using IMUL instead of UMUL because we're taking
+ * the low bits, and the native compiler generates
+ * IMUL. */
+ write_sm4_binary_op_with_two_destinations(buffer, VKD3D_SM4_OP_IMUL, &expr->node, 1, arg1, arg2);
+ break;
+
default:
hlsl_fixme(ctx, &expr->node.loc, "SM4 uint \"%s\" expression.\n", debug_hlsl_expr_op(expr->op));
break;
--
2.34.1
Jan. 27, 2022
[PATCH vkd3d v3 2/6] tests: Test a number of simple HLSL operations.
by Giovanni Mascellani
Signed-off-by: Giovanni Mascellani <gmascellani(a)codeweavers.com>
Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com>
--
v2:
* Split to many individual tests
---
Makefile.am | 2 +
tests/hlsl-operations.shader_test | 367 ++++++++++++++++++++++++++++++
2 files changed, 369 insertions(+)
create mode 100644 tests/hlsl-operations.shader_test
diff --git a/Makefile.am b/Makefile.am
index 2d76e545..7c4cf54e 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -77,6 +77,7 @@ vkd3d_shader_tests = \
tests/hlsl-mul.shader_test \
tests/hlsl-nested-arrays.shader_test \
tests/hlsl-numeric-types.shader_test \
+ tests/hlsl-operations.shader_test \
tests/hlsl-return-implicit-conversion.shader_test \
tests/hlsl-return-void.shader_test \
tests/hlsl-shape.shader_test \
@@ -304,6 +305,7 @@ XFAIL_TESTS = \
tests/hlsl-mul.shader_test \
tests/hlsl-nested-arrays.shader_test \
tests/hlsl-numeric-types.shader_test \
+ tests/hlsl-operations.shader_test \
tests/hlsl-return-implicit-conversion.shader_test \
tests/hlsl-return-void.shader_test \
tests/hlsl-shape.shader_test \
diff --git a/tests/hlsl-operations.shader_test b/tests/hlsl-operations.shader_test
new file mode 100644
index 00000000..717899b5
--- /dev/null
+++ b/tests/hlsl-operations.shader_test
@@ -0,0 +1,367 @@
+
+[pixel shader]
+float4 main() : SV_TARGET
+{
+ float x = 5.0;
+ float y = 15.0;
+
+ return float4(x + y, x - y, x * y, x / y);
+}
+
+[test]
+draw quad
+probe all rgba (20.0, -10.0, 75.0, 0.33333333)
+
+[pixel shader]
+float4 main() : SV_TARGET
+{
+ float x = 5.0;
+ float y = 15.0;
+
+ return float4(x % y, +x, -x, y / x);
+}
+
+[test]
+draw quad
+probe all rgba (5.0, 5.0, -5.0, 3.0)
+
+[pixel shader]
+float4 main() : SV_TARGET
+{
+ float x = 5.0;
+ float y = 15.0;
+
+ return float4(x == y, x != y, x < y, x <= y);
+}
+
+[test]
+draw quad
+probe all rgba (0.0, 1.0, 1.0, 1.0)
+
+[pixel shader]
+float4 main() : SV_TARGET
+{
+ float x = 5.0;
+ float y = 15.0;
+ float zero = 0.0;
+
+ return float4(x > y, x >= y, !x, !zero);
+}
+
+[test]
+draw quad
+probe all rgba (0.0, 0.0, 0.0, 1.0)
+
+[pixel shader]
+float4 main() : SV_TARGET
+{
+ float zero = 0.0;
+ float one = 1.0;
+
+ return float4(zero && zero, zero && one, one && zero, one && one);
+}
+
+[test]
+draw quad
+probe all rgba (0.0, 0.0, 0.0, 1.0)
+
+[pixel shader]
+float4 main() : SV_TARGET
+{
+ float zero = 0.0;
+ float one = 1.0;
+
+ return float4(zero || zero, zero || one, one || zero, one || one);
+}
+
+[test]
+draw quad
+probe all rgba (0.0, 1.0, 1.0, 1.0)
+
+[pixel shader]
+float4 main() : SV_TARGET
+{
+ int x = 5;
+ int y = 15;
+
+ return float4(x + y, x - y, x * y, x / y);
+}
+
+[test]
+draw quad
+probe all rgba (20.0, -10.0, 75.0, 0.0)
+
+[pixel shader]
+float4 main() : SV_TARGET
+{
+ int x = 5;
+ int y = 15;
+
+ return float4(x % y, +x, -x, y / x);
+}
+
+[test]
+draw quad
+probe all rgba (5.0, 5.0, -5.0, 3.0)
+
+[pixel shader]
+float4 main() : SV_TARGET
+{
+ int x = 5;
+ int y = 15;
+
+ return float4(x == y, x != y, x < y, x <= y);
+}
+
+[test]
+draw quad
+probe all rgba (0.0, 1.0, 1.0, 1.0)
+
+[pixel shader]
+float4 main() : SV_TARGET
+{
+ int x = 5;
+ int y = 15;
+ int zero = 0;
+
+ return float4(x > y, x >= y, !x, !zero);
+}
+
+[test]
+draw quad
+probe all rgba (0.0, 0.0, 0.0, 1.0)
+
+[pixel shader]
+float4 main() : SV_TARGET
+{
+ int x = 5;
+ int y = 15;
+
+ return float4(x >> y, y >> x, x << y, y << x);
+}
+
+[test]
+draw quad
+probe all rgba (0.0, 0.0, 163840.0, 480.0)
+
+[pixel shader]
+float4 main() : SV_TARGET
+{
+ int x = 5;
+ int y = 15;
+
+ return float4(x & y, x | y, x ^ y, ~x);
+}
+
+[test]
+draw quad
+probe all rgba (5.0, 15.0, 10.0, -6.0)
+
+[pixel shader]
+float4 main() : SV_TARGET
+{
+ int zero = 0;
+ int one = 1;
+
+ return float4(zero && zero, zero && one, one && zero, one && one);
+}
+
+[test]
+draw quad
+probe all rgba (0.0, 0.0, 0.0, 1.0)
+
+[pixel shader]
+float4 main() : SV_TARGET
+{
+ int zero = 0;
+ int one = 1;
+
+ return float4(zero || zero, zero || one, one || zero, one || one);
+}
+
+[test]
+draw quad
+probe all rgba (0.0, 1.0, 1.0, 1.0)
+
+[pixel shader]
+float4 main() : SV_TARGET
+{
+ int zero = 0;
+ int one = 1;
+
+ return float4(zero & zero, zero & one, one & zero, one & one);
+}
+
+[test]
+draw quad
+probe all rgba (0.0, 0.0, 0.0, 1.0)
+
+[pixel shader]
+float4 main() : SV_TARGET
+{
+ int zero = 0;
+ int one = 1;
+
+ return float4(zero | zero, zero | one, one | zero, one | one);
+}
+
+[test]
+draw quad
+probe all rgba (0.0, 1.0, 1.0, 1.0)
+
+[pixel shader]
+float4 main() : SV_TARGET
+{
+ int zero = 0;
+ int one = 1;
+
+ return float4(zero ^ zero, zero ^ one, one ^ zero, one ^ one);
+}
+
+[test]
+draw quad
+probe all rgba (0.0, 1.0, 1.0, 0.0)
+
+[pixel shader]
+float4 main() : SV_TARGET
+{
+ uint x = 5;
+ uint y = 15;
+
+ return float4(x + y, x - y, x * y, x / y);
+}
+
+[test]
+draw quad
+probe all rgba (20.0, 4294967300.0, 75.0, 0.0)
+
+[pixel shader]
+float4 main() : SV_TARGET
+{
+ uint x = 5;
+ uint y = 15;
+
+ return float4(x % y, +x, -x, y / x);
+}
+
+[test]
+draw quad
+probe all rgba (5.0, 5.0, 4294967300.0, 3.0)
+
+[pixel shader]
+float4 main() : SV_TARGET
+{
+ uint x = 5;
+ uint y = 15;
+
+ return float4(x == y, x != y, x < y, x <= y);
+}
+
+[test]
+draw quad
+probe all rgba (0.0, 1.0, 1.0, 1.0)
+
+[pixel shader]
+float4 main() : SV_TARGET
+{
+ uint x = 5;
+ uint y = 15;
+ uint zero = 0;
+
+ return float4(x > y, x >= y, !x, !zero);
+}
+
+[test]
+draw quad
+probe all rgba (0.0, 0.0, 0.0, 1.0)
+
+[pixel shader]
+float4 main() : SV_TARGET
+{
+ uint x = 5;
+ uint y = 15;
+
+ return float4(x >> y, y >> x, x << y, y << x);
+}
+
+[test]
+draw quad
+probe all rgba (0.0, 0.0, 163840.0, 480.0)
+
+[pixel shader]
+float4 main() : SV_TARGET
+{
+ uint x = 5;
+ uint y = 15;
+
+ return float4(x & y, x | y, x ^ y, ~x);
+}
+
+[test]
+draw quad
+probe all rgba (5.0, 15.0, 10.0, 4294967300.0)
+
+[pixel shader]
+float4 main() : SV_TARGET
+{
+ uint zero = 0;
+ uint one = 1;
+
+ return float4(zero && zero, zero && one, one && zero, one && one);
+}
+
+[test]
+draw quad
+probe all rgba (0.0, 0.0, 0.0, 1.0)
+
+[pixel shader]
+float4 main() : SV_TARGET
+{
+ uint zero = 0;
+ uint one = 1;
+
+ return float4(zero || zero, zero || one, one || zero, one || one);
+}
+
+[test]
+draw quad
+probe all rgba (0.0, 1.0, 1.0, 1.0)
+
+[pixel shader]
+float4 main() : SV_TARGET
+{
+ uint zero = 0;
+ uint one = 1;
+
+ return float4(zero & zero, zero & one, one & zero, one & one);
+}
+
+[test]
+draw quad
+probe all rgba (0.0, 0.0, 0.0, 1.0)
+
+[pixel shader]
+float4 main() : SV_TARGET
+{
+ uint zero = 0;
+ uint one = 1;
+
+ return float4(zero | zero, zero | one, one | zero, one | one);
+}
+
+[test]
+draw quad
+probe all rgba (0.0, 1.0, 1.0, 1.0)
+
+[pixel shader]
+float4 main() : SV_TARGET
+{
+ uint zero = 0;
+ uint one = 1;
+
+ return float4(zero ^ zero, zero ^ one, one ^ zero, one ^ one);
+}
+
+[test]
+draw quad
+probe all rgba (0.0, 1.0, 1.0, 0.0)
--
2.34.1
Jan. 27, 2022
[PATCH vkd3d v3 1/6] tests: Test matrix multiplication.
by Giovanni Mascellani
Signed-off-by: Giovanni Mascellani <gmascellani(a)codeweavers.com>
Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com>
---
v2:
* Split to many individual tests
---
Makefile.am | 2 +
tests/hlsl-mul.shader_test | 290 +++++++++++++++++++++++++++++++++++++
2 files changed, 292 insertions(+)
create mode 100644 tests/hlsl-mul.shader_test
diff --git a/Makefile.am b/Makefile.am
index db0a6f68..2d76e545 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -74,6 +74,7 @@ vkd3d_shader_tests = \
tests/hlsl-invalid.shader_test \
tests/hlsl-majority-pragma.shader_test \
tests/hlsl-majority-typedef.shader_test \
+ tests/hlsl-mul.shader_test \
tests/hlsl-nested-arrays.shader_test \
tests/hlsl-numeric-types.shader_test \
tests/hlsl-return-implicit-conversion.shader_test \
@@ -300,6 +301,7 @@ XFAIL_TESTS = \
tests/hlsl-intrinsic-override.shader_test \
tests/hlsl-majority-pragma.shader_test \
tests/hlsl-majority-typedef.shader_test \
+ tests/hlsl-mul.shader_test \
tests/hlsl-nested-arrays.shader_test \
tests/hlsl-numeric-types.shader_test \
tests/hlsl-return-implicit-conversion.shader_test \
diff --git a/tests/hlsl-mul.shader_test b/tests/hlsl-mul.shader_test
new file mode 100644
index 00000000..7b453187
--- /dev/null
+++ b/tests/hlsl-mul.shader_test
@@ -0,0 +1,290 @@
+
+[pixel shader]
+float4 main(float4 pos : sv_position) : sv_target
+{
+ float4x4 x = float4x4(1.0, 2.0, 3.0, 4.0,
+ 5.0, 6.0, 7.0, 8.0,
+ 9.0, 10.0, 11.0, 12.0,
+ 13.0, 14.0, 15.0, 16.0);
+ float4 y = float4(1.0, 2.0, 3.0, 4.0);
+
+ return mul(x, y);
+}
+
+[test]
+draw quad
+probe all rgba (30.0, 70.0, 110.0, 150.0)
+
+[pixel shader]
+float4 main(float4 pos : sv_position) : sv_target
+{
+ float4 x = float4(1.0, 2.0, 3.0, 4.0);
+ float4x4 y = float4x4(1.0, 2.0, 3.0, 4.0,
+ 5.0, 6.0, 7.0, 8.0,
+ 9.0, 10.0, 11.0, 12.0,
+ 13.0, 14.0, 15.0, 16.0);
+
+ return mul(x, y);
+}
+
+[test]
+draw quad
+probe all rgba (90.0, 100.0, 110.0, 120.0)
+
+[pixel shader]
+float4 main(float4 pos : sv_position) : sv_target
+{
+ float4x4 x = float4x4(1.0, 2.0, 3.0, 4.0,
+ 5.0, 6.0, 7.0, 8.0,
+ 9.0, 10.0, 11.0, 12.0,
+ 13.0, 14.0, 15.0, 16.0);
+ float3 y = float3(1.0, 2.0, 3.0);
+
+ return mul(x, y);
+}
+
+[test]
+draw quad
+probe all rgba (14.0, 38.0, 62.0, 86.0)
+
+[pixel shader]
+float4 main(float4 pos : sv_position) : sv_target
+{
+ float3 x = float3(1.0, 2.0, 3.0);
+ float4x4 y = float4x4(1.0, 2.0, 3.0, 4.0,
+ 5.0, 6.0, 7.0, 8.0,
+ 9.0, 10.0, 11.0, 12.0,
+ 13.0, 14.0, 15.0, 16.0);
+
+ return mul(x, y);
+}
+
+[test]
+draw quad
+probe all rgba (38.0, 44.0, 50.0, 56.0)
+
+[pixel shader]
+float4 main(float4 pos : sv_position) : sv_target
+{
+ float3x3 x = float3x3(1.0, 2.0, 3.0,
+ 4.0, 5.0, 6.0,
+ 7.0, 8.0, 9.0);
+ float4 y = float4(1.0, 2.0, 3.0, 4.0);
+
+ return float4(mul(x, y), 0.0);
+}
+
+[test]
+draw quad
+probe all rgba (14.0, 32.0, 50.0, 0.0)
+
+[pixel shader]
+float4 main(float4 pos : sv_position) : sv_target
+{
+ float4 x = float4(1.0, 2.0, 3.0, 4.0);
+ float3x3 y = float3x3(1.0, 2.0, 3.0,
+ 4.0, 5.0, 6.0,
+ 7.0, 8.0, 9.0);
+
+ return float4(mul(x, y), 0.0);
+}
+
+[test]
+draw quad
+probe all rgba (30.0, 36.0, 42.0, 0.0)
+
+[pixel shader]
+float4 main(float4 pos : sv_position) : sv_target
+{
+ float x = 10.0;
+ float4x4 y = float4x4(1.0, 2.0, 3.0, 4.0,
+ 5.0, 6.0, 7.0, 8.0,
+ 9.0, 10.0, 11.0, 12.0,
+ 13.0, 14.0, 15.0, 16.0);
+
+ return mul(x, y)[1];
+}
+
+[test]
+draw quad
+probe all rgba (50.0, 60.0, 70.0, 80.0)
+
+[pixel shader]
+float4 main(float4 pos : sv_position) : sv_target
+{
+ float4x4 x = float4x4(1.0, 2.0, 3.0, 4.0,
+ 5.0, 6.0, 7.0, 8.0,
+ 9.0, 10.0, 11.0, 12.0,
+ 13.0, 14.0, 15.0, 16.0);
+ float y = 10.0;
+
+ return mul(x, y)[1];
+}
+
+[test]
+draw quad
+probe all rgba (50.0, 60.0, 70.0, 80.0)
+
+[pixel shader]
+float4 main(float4 pos : sv_position) : sv_target
+{
+ float1 x = float1(10.0);
+ float4x4 y = float4x4(1.0, 2.0, 3.0, 4.0,
+ 5.0, 6.0, 7.0, 8.0,
+ 9.0, 10.0, 11.0, 12.0,
+ 13.0, 14.0, 15.0, 16.0);
+
+ return mul(x, y);
+}
+
+[test]
+draw quad
+probe all rgba (10.0, 20.0, 30.0, 40.0)
+
+[pixel shader]
+float4 main(float4 pos : sv_position) : sv_target
+{
+ float4x4 x = float4x4(1.0, 2.0, 3.0, 4.0,
+ 5.0, 6.0, 7.0, 8.0,
+ 9.0, 10.0, 11.0, 12.0,
+ 13.0, 14.0, 15.0, 16.0);
+ float1 y = float1(10.0);
+
+ return mul(x, y);
+}
+
+[test]
+draw quad
+probe all rgba (10.0, 50.0, 90.0, 130.0)
+
+[pixel shader]
+float4 main(float4 pos : sv_position) : sv_target
+{
+ float1x1 x = float1x1(10.0);
+ float4x4 y = float4x4(1.0, 2.0, 3.0, 4.0,
+ 5.0, 6.0, 7.0, 8.0,
+ 9.0, 10.0, 11.0, 12.0,
+ 13.0, 14.0, 15.0, 16.0);
+
+ return mul(x, y);
+}
+
+[test]
+draw quad
+probe all rgba (10.0, 20.0, 30.0, 40.0)
+
+[pixel shader]
+float4 main(float4 pos : sv_position) : sv_target
+{
+ float4x4 x = float4x4(1.0, 2.0, 3.0, 4.0,
+ 5.0, 6.0, 7.0, 8.0,
+ 9.0, 10.0, 11.0, 12.0,
+ 13.0, 14.0, 15.0, 16.0);
+ float1x1 y = float1x1(10.0);
+
+ return mul(x, y);
+}
+
+[test]
+draw quad
+probe all rgba (10.0, 50.0, 90.0, 130.0)
+
+[pixel shader]
+float4 main(float4 pos : sv_position) : sv_target
+{
+ float1x4 x = float1x4(1.0, 2.0, 3.0, 4.0);
+ float4x4 y = float4x4(1.0, 2.0, 3.0, 4.0,
+ 5.0, 6.0, 7.0, 8.0,
+ 9.0, 10.0, 11.0, 12.0,
+ 13.0, 14.0, 15.0, 16.0);
+
+ return mul(x, y);
+}
+
+[test]
+draw quad
+probe all rgba (90.0, 100.0, 110.0, 120.0)
+
+[pixel shader]
+float4 main(float4 pos : sv_position) : sv_target
+{
+ float4x4 x = float4x4(1.0, 2.0, 3.0, 4.0,
+ 5.0, 6.0, 7.0, 8.0,
+ 9.0, 10.0, 11.0, 12.0,
+ 13.0, 14.0, 15.0, 16.0);
+ float1x4 y = float1x4(1.0, 2.0, 3.0, 4.0);
+
+ return mul(x, y)[1];
+}
+
+[test]
+draw quad
+probe all rgba (5.0, 10.0, 15.0, 20.0)
+
+[pixel shader]
+float4 main(float4 pos : sv_position) : sv_target
+{
+ float4x1 x = float4x1(1.0, 2.0, 3.0, 4.0);
+ float4x4 y = float4x4(1.0, 2.0, 3.0, 4.0,
+ 5.0, 6.0, 7.0, 8.0,
+ 9.0, 10.0, 11.0, 12.0,
+ 13.0, 14.0, 15.0, 16.0);
+
+ return mul(x, y)[1];
+}
+
+[test]
+draw quad
+probe all rgba (2.0, 4.0, 6.0, 8.0)
+
+[pixel shader]
+float4 main(float4 pos : sv_position) : sv_target
+{
+ float4x4 x = float4x4(1.0, 2.0, 3.0, 4.0,
+ 5.0, 6.0, 7.0, 8.0,
+ 9.0, 10.0, 11.0, 12.0,
+ 13.0, 14.0, 15.0, 16.0);
+ float4x1 y = float4x1(1.0, 2.0, 3.0, 4.0);
+
+ return mul(x, y);
+}
+
+[test]
+draw quad
+probe all rgba (30.0, 70.0, 110.0, 150.0)
+
+[pixel shader]
+float4 main(float4 pos : sv_position) : sv_target
+{
+ float3x3 x = float3x3(1.0, 2.0, 3.0,
+ 4.0, 5.0, 6.0,
+ 7.0, 8.0, 9.0);
+ float4x4 y = float4x4(1.0, 2.0, 3.0, 4.0,
+ 5.0, 6.0, 7.0, 8.0,
+ 9.0, 10.0, 11.0, 12.0,
+ 13.0, 14.0, 15.0, 16.0);
+
+ return mul(x, y)[1];
+}
+
+[test]
+draw quad
+probe all rgba (83.0, 98.0, 113.0, 128.0)
+
+[pixel shader]
+float4 main(float4 pos : sv_position) : sv_target
+{
+ float4x4 x = float4x4(1.0, 2.0, 3.0, 4.0,
+ 5.0, 6.0, 7.0, 8.0,
+ 9.0, 10.0, 11.0, 12.0,
+ 13.0, 14.0, 15.0, 16.0);
+ float3x3 y = float3x3(1.0, 2.0, 3.0,
+ 4.0, 5.0, 6.0,
+ 7.0, 8.0, 9.0);
+
+ return float4(mul(x, y)[1], 0.0);
+}
+
+[test]
+draw quad
+probe all rgba (78.0, 96.0, 114.0, 0.0)
--
2.34.1
Jan. 27, 2022
[tools 2/2] testbot/SetWinLocale: Show more locale settings.
by Francois Gouget
In particular show how the system account (System/LocalSystem)
settings are affected by SetWinLocale.
Signed-off-by: Francois Gouget <fgouget(a)codeweavers.com>
---
testbot/bin/SetWinLocale | 22 ++++++++++++++++++++--
testbot/bin/SetWinLocale.ps1 | 22 ++++++++++++++++++++++
2 files changed, 42 insertions(+), 2 deletions(-)
diff --git a/testbot/bin/SetWinLocale b/testbot/bin/SetWinLocale
index 25023bb94f..f1b72176eb 100755
--- a/testbot/bin/SetWinLocale
+++ b/testbot/bin/SetWinLocale
@@ -627,19 +627,37 @@ sub ShowWinSettings($)
print "LocaleName (--locale) = ", Value2Str($Settings->{LocaleName}), "\n";
print "Geo:Nation (--country) = ", Value2Str($Settings->{Country}), "\n";
print "Geo:Name (--country) = ", Value2Str($Settings->{CountryName}), "\n";
- print "InputMethod (--keyboard) = ", Value2Str($Settings->{InputMethod}), "\n";
print "Languages = ", Value2Str($Settings->{Languages}), "\n";
print "PreferredUILanguages (--mui) = ", Value2Str($Settings->{PreferredUILanguages}), "\n";
print " ...Pending (--mui) = ", Value2Str($Settings->{PreferredUILanguagesPending}), "\n";
- print " Previous... (--mui) = ", Value2Str($Settings->{PreviousPreferredUILanguages}), "\n";
+ print " Previous... = ", Value2Str($Settings->{PreviousPreferredUILanguages}), "\n";
+ print "WindowsOverride (--mui) = ", Value2Str($Settings->{WindowsOverride}), "\n";
+ print "InputMethod (--keyboard) = ", Value2Str($Settings->{InputMethod}), "\n";
print "\n";
print "System settings:\n";
print "Nls:Language (--system) = ", Value2Str($Settings->{SysLanguage}), "\n";
+ print "Nls:InstallLang (--system) = ", Value2Str($Settings->{SysInstallLang}), "\n";
print "Nls:Locale (--system) = ", Value2Str($Settings->{SysLocale}), "\n";
print "ACP (--utf8) = ", Value2Str($Settings->{ACP}), "\n";
print "MACCP (--utf8) = ", Value2Str($Settings->{MACCP}), "\n";
print "OEMCP (--utf8) = ", Value2Str($Settings->{OEMCP}), "\n";
+
+ print "\n";
+ print ".DEFAULT account:\n";
+ # Locale used for the date and time in the logon screen
+ print "Locale (--locale) = ", Value2Str($Settings->{DefLocale}), "\n";
+ print "LocaleName (--locale) = ", Value2Str($Settings->{DefLocaleName}), "\n";
+ print "Geo:Nation (--country) = ", Value2Str($Settings->{DefCountry}), "\n";
+ print "Geo:Name (--country) = ", Value2Str($Settings->{DefCountryName}), "\n";
+ # Language of the 'Welcome' message
+ print "PreferredUILanguages = ", Value2Str($Settings->{DefPreferredUILanguages}), "\n";
+ print " ...Pending = ", Value2Str($Settings->{DefPreferredUILanguagesPending}), "\n";
+ print " Previous... = ", Value2Str($Settings->{DefPreviousPreferredUILanguages}), "\n";
+ # Language of the 'Password' text in the password field
+ print "MachinePrefUILanguages(--mui)= ", Value2Str($Settings->{DefMachinePreferredUILanguages}), "\n";
+ # Keyboard layout for the password field
+ print "InputMethod (--keyboard) = ", Value2Str($Settings->{DefInputMethod}), "\n";
}
if ($OptShow)
diff --git a/testbot/bin/SetWinLocale.ps1 b/testbot/bin/SetWinLocale.ps1
index 8d6b3a94bc..702b3301dc 100644
--- a/testbot/bin/SetWinLocale.ps1
+++ b/testbot/bin/SetWinLocale.ps1
@@ -32,6 +32,12 @@ $HKLM_LOCALE = "HKLM:\SYSTEM\CurrentControlSet\Control\Nls\Locale"
$HKLM_CODE_PAGE = "HKLM:\System\CurrentControlSet\Control\Nls\CodePage"
$CODE_PAGES = "ACP", "MACCP", "OEMCP"
+$HKDEF_INTERNATIONAL = "Registry::HKEY_USERS\.DEFAULT\Control Panel\International"
+$HKDEF_GEO = "Registry::HKEY_USERS\.DEFAULT\Control Panel\International\Geo"
+$HKDEF_USER_PROFILE = "Registry::HKEY_USERS\.DEFAULT\Control Panel\International\User Profile"
+$HKDEF_DESKTOP = "Registry::HKEY_USERS\.DEFAULT\Control Panel\Desktop"
+$HKDEF_MUICACHED = "Registry::HKEY_USERS\.DEFAULT\Control Panel\Desktop\MuiCached"
+
function ShowSetting([string]$Key, [string]$VName, [string]$SName)
{
@@ -56,6 +62,7 @@ function ShowSettings()
ShowSetting $HKCU_GEO "Name" "CountryName"
ShowSetting $HKCU_USER_PROFILE "InputMethodOverride" "InputMethod"
ShowSetting $HKCU_USER_PROFILE "Languages"
+ ShowSetting $HKCU_USER_PROFILE "WindowsOverride"
ShowSetting $HKCU_DESKTOP "PreferredUILanguages"
ShowSetting $HKCU_DESKTOP "PreferredUILanguagesPending"
ShowSetting $HKCU_DESKTOP "PreviousPreferredUILanguages"
@@ -63,6 +70,7 @@ function ShowSettings()
Write-Output ""
Write-Output "System settings:"
ShowSetting $HKLM_LANGUAGE "Default" "SysLanguage"
+ ShowSetting $HKLM_LANGUAGE "InstallLanguage" "SysInstallLang"
try
{
ShowSetting $HKLM_LOCALE "(Default)" "SysLocale"
@@ -78,6 +86,20 @@ function ShowSettings()
ShowSetting $HKLM_CODE_PAGE $CodePage
}
+ Write-Output ""
+ Write-Output ".DEFAULT account:"
+ ShowSetting $HKDEF_INTERNATIONAL "Locale" "DefLocale"
+ ShowSetting $HKDEF_INTERNATIONAL "LocaleName" "DefLocaleName"
+ ShowSetting $HKDEF_GEO "Nation" "DefCountry"
+ ShowSetting $HKDEF_GEO "Name" "DefCountryName"
+ ShowSetting $HKDEF_USER_PROFILE "InputMethodOverride" "DefInputMethod"
+ ShowSetting $HKDEF_USER_PROFILE "Languages" "DefLanguages"
+ ShowSetting $HKDEF_USER_PROFILE "WindowsOverride" "DefWindowsOverride"
+ ShowSetting $HKDEF_DESKTOP "PreferredUILanguages" "DefPreferredUILanguages"
+ ShowSetting $HKDEF_DESKTOP "PreferredUILanguagesPending" "DefPreferredUILanguagesPending"
+ ShowSetting $HKDEF_DESKTOP "PreviousPreferredUILanguages" "DefPreviousPreferredUILanguages"
+ ShowSetting $HKDEF_MUICACHED "MachinePreferredUILanguages" "DefMachinePreferredUILanguages"
+
exit 0
}
--
2.30.2
Jan. 27, 2022