winehq.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2025
February
January
2024
December
November
October
September
August
July
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
May
April
March
February
January
2011
December
November
October
September
August
July
June
May
April
March
February
January
2010
December
November
October
September
August
July
June
May
April
March
February
January
2009
December
November
October
September
August
July
June
May
April
March
February
January
2008
December
November
October
September
August
July
June
May
April
March
February
January
2007
December
November
October
September
August
July
June
May
April
March
February
January
2006
December
November
October
September
August
July
June
May
April
March
February
January
2005
December
November
October
September
August
July
June
May
April
March
February
January
2004
December
November
October
September
August
July
June
May
April
March
February
January
2003
December
November
October
September
August
July
June
May
April
March
February
January
2002
December
November
October
September
August
July
June
May
April
March
February
January
2001
December
November
October
September
August
July
June
May
April
March
February
List overview
wine-commits
March 2024
----- 2025 -----
February 2025
January 2025
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
----- 2008 -----
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
----- 2007 -----
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
----- 2006 -----
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
----- 2005 -----
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
----- 2004 -----
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
February 2004
January 2004
----- 2003 -----
December 2003
November 2003
October 2003
September 2003
August 2003
July 2003
June 2003
May 2003
April 2003
March 2003
February 2003
January 2003
----- 2002 -----
December 2002
November 2002
October 2002
September 2002
August 2002
July 2002
June 2002
May 2002
April 2002
March 2002
February 2002
January 2002
----- 2001 -----
December 2001
November 2001
October 2001
September 2001
August 2001
July 2001
June 2001
May 2001
April 2001
March 2001
February 2001
wine-commits@winehq.org
1 participants
775 discussions
Start a n
N
ew thread
Rémi Bernon : mfplat/tests: Test that aperture is dropped with VIDEOINFOHEADER2.
by Alexandre Julliard
19 Mar '24
19 Mar '24
Module: wine Branch: master Commit: 7598556b64834e432b7a144d33af4996b5dda9a8 URL:
https://gitlab.winehq.org/wine/wine/-/commit/7598556b64834e432b7a144d33af49…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Wed Mar 6 23:13:04 2024 +0100 mfplat/tests: Test that aperture is dropped with VIDEOINFOHEADER2. But preserved with MFVIDEOFORMAT. --- dlls/mfplat/tests/mfplat.c | 47 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c index 14873422d04..39fb439b65a 100644 --- a/dlls/mfplat/tests/mfplat.c +++ b/dlls/mfplat/tests/mfplat.c @@ -7143,8 +7143,10 @@ static void test_MFInitAMMediaTypeFromMFMediaType(void) WAVEFORMATEXTENSIBLE *wave_format_ext; VIDEOINFOHEADER *video_info; WAVEFORMATEX *wave_format; - IMFMediaType *media_type; + IMFMediaType *media_type, *other_type; AM_MEDIA_TYPE am_type; + MFVideoArea *area; + UINT32 value32; HRESULT hr; hr = MFCreateMediaType(&media_type); @@ -7713,6 +7715,49 @@ static void test_MFInitAMMediaTypeFromMFMediaType(void) CoTaskMemFree(am_type.pbFormat); IMFMediaType_DeleteAllItems(media_type); + /* aperture is lost with VIDEOINFOHEADER(2), preserved with MFVIDEOFORMAT */ + hr = IMFMediaType_SetGUID(media_type, &MF_MT_MAJOR_TYPE, &MFMediaType_Video); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IMFMediaType_SetGUID(media_type, &MF_MT_SUBTYPE, &MFVideoFormat_NV12); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IMFMediaType_SetUINT64(media_type, &MF_MT_FRAME_SIZE, (UINT64)1920 << 32 | 1088); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IMFMediaType_SetBlob(media_type, &MF_MT_MINIMUM_DISPLAY_APERTURE, (BYTE *)&aperture, sizeof(aperture)); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = MFCreateMediaType(&other_type); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = MFInitAMMediaTypeFromMFMediaType(media_type, FORMAT_VideoInfo, &am_type); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = MFInitMediaTypeFromAMMediaType(other_type, &am_type); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IMFMediaType_GetAllocatedBlob(other_type, &MF_MT_MINIMUM_DISPLAY_APERTURE, (BYTE **)&area, &value32); + ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr); + IMFMediaType_DeleteAllItems(other_type); + CoTaskMemFree(am_type.pbFormat); + + hr = MFInitAMMediaTypeFromMFMediaType(media_type, FORMAT_VideoInfo2, &am_type); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = MFInitMediaTypeFromAMMediaType(other_type, &am_type); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IMFMediaType_GetAllocatedBlob(other_type, &MF_MT_MINIMUM_DISPLAY_APERTURE, (BYTE **)&area, &value32); + ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr); + IMFMediaType_DeleteAllItems(other_type); + CoTaskMemFree(am_type.pbFormat); + + hr = MFInitAMMediaTypeFromMFMediaType(media_type, FORMAT_MFVideoFormat, &am_type); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = MFInitMediaTypeFromAMMediaType(other_type, &am_type); + todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IMFMediaType_GetAllocatedBlob(other_type, &MF_MT_MINIMUM_DISPLAY_APERTURE, (BYTE **)&area, &value32); + todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + if (hr == S_OK) CoTaskMemFree(area); + IMFMediaType_DeleteAllItems(other_type); + CoTaskMemFree(am_type.pbFormat); + + IMFMediaType_Release(other_type); + IMFMediaType_Release(media_type); }
1
0
0
0
Hans Leidekker : ntdll/tests: Load NtMakeTemporaryObject() dynamically.
by Alexandre Julliard
19 Mar '24
19 Mar '24
Module: wine Branch: master Commit: 4fdb45f23ffe7a0578404f6a8fc08e904fc7f962 URL:
https://gitlab.winehq.org/wine/wine/-/commit/4fdb45f23ffe7a0578404f6a8fc08e…
Author: Hans Leidekker <hans(a)codeweavers.com> Date: Tue Mar 19 11:25:46 2024 +0100 ntdll/tests: Load NtMakeTemporaryObject() dynamically. --- dlls/ntdll/tests/om.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/dlls/ntdll/tests/om.c b/dlls/ntdll/tests/om.c index 3f416f75f0f..d9bcce6d365 100644 --- a/dlls/ntdll/tests/om.c +++ b/dlls/ntdll/tests/om.c @@ -72,6 +72,7 @@ static NTSTATUS (WINAPI *pNtOpenThreadToken)(HANDLE,DWORD,BOOLEAN,HANDLE*); static NTSTATUS (WINAPI *pNtDuplicateToken)(HANDLE,ACCESS_MASK,OBJECT_ATTRIBUTES*,BOOLEAN,TOKEN_TYPE,HANDLE*); static NTSTATUS (WINAPI *pNtDuplicateObject)(HANDLE,HANDLE,HANDLE,HANDLE*,ACCESS_MASK,ULONG,ULONG); static NTSTATUS (WINAPI *pNtCompareObjects)(HANDLE,HANDLE); +static NTSTATUS (WINAPI *pNtMakeTemporaryObject)(HANDLE); #define KEYEDEVENT_WAIT 0x0001 #define KEYEDEVENT_WAKE 0x0002 @@ -3258,6 +3259,12 @@ static void test_object_permanence(void) NTSTATUS status; BOOL creatpermapriv = FALSE; + if (!pNtMakeTemporaryObject) + { + win_skip( "NtMakeTemporaryObject is not available.\n" ); + return; + } + status = NtOpenProcessToken( GetCurrentProcess(), TOKEN_DUPLICATE, &process_token ); ok( status == STATUS_SUCCESS, "NtOpenProcessToken returned %08lx\n", status ); @@ -3320,7 +3327,7 @@ static void test_object_permanence(void) if (test->make_temp_status == STATUS_SUCCESS) ok( !!(obi.GrantedAccess & DELETE), "expected DELETE access in %08lx\n", obi.GrantedAccess ); - status = NtMakeTemporaryObject( handle ); + status = pNtMakeTemporaryObject( handle ); todo_wine_if(test->make_temp_status == STATUS_ACCESS_DENIED) ok( status == test->make_temp_status, "NtMakeTemporaryObject returned %08lx\n", status ); if (!NT_ERROR(status)) is_permanent = FALSE; @@ -3372,7 +3379,7 @@ static void test_object_permanence(void) ok( obi_new.Attributes == expect_attr, "expected attr %08lx, got %08lx\n", expect_attr, obi_new.Attributes ); /* ensure object is deleted */ - NtMakeTemporaryObject( handle ); + pNtMakeTemporaryObject( handle ); NtClose( handle ); } winetest_pop_context(); @@ -3429,6 +3436,7 @@ START_TEST(om) pNtDuplicateToken = (void *)GetProcAddress(hntdll, "NtDuplicateToken"); pNtDuplicateObject = (void *)GetProcAddress(hntdll, "NtDuplicateObject"); pNtCompareObjects = (void *)GetProcAddress(hntdll, "NtCompareObjects"); + pNtMakeTemporaryObject = (void *)GetProcAddress(hntdll, "NtMakeTemporaryObject"); test_null_in_object_name(); test_case_sensitive();
1
0
0
0
Zhenbo Li : shell32: Create nonexistent destination directories in FO_MOVE.
by Alexandre Julliard
19 Mar '24
19 Mar '24
Module: wine Branch: master Commit: b4a5775ffb2e5c27ff85399f89f6b37f1d1298d3 URL:
https://gitlab.winehq.org/wine/wine/-/commit/b4a5775ffb2e5c27ff85399f89f6b3…
Author: Zhenbo Li <litimetal(a)gmail.com> Date: Sun Mar 17 14:04:32 2024 -0500 shell32: Create nonexistent destination directories in FO_MOVE. Wine-Bug:
https://bugs.winehq.org/show_bug.cgi?id=25207
--- dlls/shell32/shlfileop.c | 6 ++++-- dlls/shell32/tests/shlfileop.c | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/dlls/shell32/shlfileop.c b/dlls/shell32/shlfileop.c index b4a941187ab..a7e88c813d2 100644 --- a/dlls/shell32/shlfileop.c +++ b/dlls/shell32/shlfileop.c @@ -1398,6 +1398,7 @@ static int move_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom, const INT mismatched = 0; const FILE_ENTRY *entryToMove; const FILE_ENTRY *fileDest; + int ret; if (!flFrom->dwNumFiles) return ERROR_SUCCESS; @@ -1418,8 +1419,9 @@ static int move_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom, const return ERROR_CANCELLED; } - if (!PathFileExistsW(flTo->feFiles[0].szDirectory)) - return ERROR_CANCELLED; + ret = SHCreateDirectoryExW(NULL, flTo->feFiles[0].szDirectory, NULL); + if (ret && ret != ERROR_ALREADY_EXISTS) + return ret; if (lpFileOp->fFlags & FOF_MULTIDESTFILES) mismatched = flFrom->dwNumFiles - flTo->dwNumFiles; diff --git a/dlls/shell32/tests/shlfileop.c b/dlls/shell32/tests/shlfileop.c index 1b00780499c..097e99fd113 100644 --- a/dlls/shell32/tests/shlfileop.c +++ b/dlls/shell32/tests/shlfileop.c @@ -2165,8 +2165,8 @@ static void test_move(void) shfo.pFrom = "test2.txt\0"; shfo.pTo = "dir1\\dir2\\test2.txt\0"; retval = SHFileOperationA(&shfo); - todo_wine ok(!retval, "got %ld\n", retval); - todo_wine ok(DeleteFileA("dir1\\dir2\\test2.txt"), "Expected dir1\\dir2\\test2.txt to exist\n"); + ok(!retval, "got %ld\n", retval); + ok(DeleteFileA("dir1\\dir2\\test2.txt"), "Expected dir1\\dir2\\test2.txt to exist\n"); RemoveDirectoryA("dir1\\dir2"); RemoveDirectoryA("dir1"); createTestFile("test2.txt");
1
0
0
0
Zebediah Figura : shell32/tests: Remove obsolete workarounds from test_move().
by Alexandre Julliard
19 Mar '24
19 Mar '24
Module: wine Branch: master Commit: 19627b13e4c6db49cc2e354dbb602cb581923f73 URL:
https://gitlab.winehq.org/wine/wine/-/commit/19627b13e4c6db49cc2e354dbb602c…
Author: Zebediah Figura <zfigura(a)codeweavers.com> Date: Sun Mar 17 13:34:28 2024 -0500 shell32/tests: Remove obsolete workarounds from test_move(). --- dlls/shell32/tests/shlfileop.c | 307 ++++++++++------------------------------- 1 file changed, 70 insertions(+), 237 deletions(-)
1
0
0
0
Alexandre Julliard : ntdll/tests: Update the KiUserExceptionDispatcher test for ARM64EC.
by Alexandre Julliard
19 Mar '24
19 Mar '24
Module: wine Branch: master Commit: 1bb011f815700d4e5e72b9353be2ec8d26af34f6 URL:
https://gitlab.winehq.org/wine/wine/-/commit/1bb011f815700d4e5e72b9353be2ec…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Tue Mar 19 22:16:23 2024 +0100 ntdll/tests: Update the KiUserExceptionDispatcher test for ARM64EC. --- dlls/ntdll/tests/exception.c | 46 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 43 insertions(+), 3 deletions(-) diff --git a/dlls/ntdll/tests/exception.c b/dlls/ntdll/tests/exception.c index e1389bae2ab..3300e5fbe00 100644 --- a/dlls/ntdll/tests/exception.c +++ b/dlls/ntdll/tests/exception.c @@ -4541,7 +4541,7 @@ static LONG WINAPI dbg_except_continue_vectored_handler(struct _EXCEPTION_POINTE got_exception = 1; dbg_except_continue_handler_rip = (void *)context->Rip; - if (NtCurrentTeb()->Peb->BeingDebugged) + if (NtCurrentTeb()->Peb->BeingDebugged && !is_arm64ec) ++context->Rip; if (context->Rip >= (ULONG64)code_mem && context->Rip < (ULONG64)code_mem + 0x100) @@ -4580,6 +4580,27 @@ static void * WINAPI hook_KiUserExceptionDispatcher(EXCEPTION_RECORD *rec, CONTE return pKiUserExceptionDispatcher; } +static void * WINAPI hook_KiUserExceptionDispatcher_arm64ec(EXCEPTION_RECORD *rec, CONTEXT *context) +{ + ARM64_NT_CONTEXT *arm64_context = (ARM64_NT_CONTEXT *)(context + 1); + + trace("rec %p context %p context->Rip %#Ix, context->Rsp %#Ix, ContextFlags %#lx.\n", + rec, context, context->Rip, context->Rsp, context->ContextFlags); + hook_called = TRUE; + ok(rec->ExceptionCode == 0x80000003 || rec->ExceptionCode == 0xceadbeef, + "Got unexpected ExceptionCode %#lx.\n", rec->ExceptionCode); + + ok( !((ULONG_PTR)context & 15), "unaligned context %p\n", context ); + ok( arm64_context->Pc == context->Rip, "wrong rip %Ix / %Ix\n", arm64_context->Pc, context->Rip ); + ok( arm64_context->Sp == context->Rsp, "wrong rsp %Ix / %Ix\n", arm64_context->Sp, context->Rsp ); + + hook_KiUserExceptionDispatcher_rip = (void *)context->Rip; + hook_exception_address = rec->ExceptionAddress; + memcpy(pKiUserExceptionDispatcher, saved_KiUserExceptionDispatcher_bytes, + sizeof(saved_KiUserExceptionDispatcher_bytes)); + return pKiUserExceptionDispatcher; +} + static void test_KiUserExceptionDispatcher(void) { LPVOID vectored_handler; @@ -4628,6 +4649,19 @@ static void test_KiUserExceptionDispatcher(void) 0x48, 0x31, 0xd2, /* xor %rdx, %rdx */ 0xff, 0xe0, /* jmpq *rax */ }; + static BYTE hook_trampoline_arm64ec[] = + { + 0x48, 0x8d, 0x54, 0x24, 0x08, /* lea 0x8(%rsp),%rdx */ + 0x48, 0x8d, 0x8a, 0x60, 0x08, 0x00, 0x00, + /* lea 0x860(%rdx),%rcx */ + 0x4c, 0x89, 0x22, /* mov %r12,(%rdx) */ + 0x48, 0xb8, /* movabs hook_KiUserExceptionDispatcher_arm64ec,%rax */ + 0,0,0,0,0,0,0,0, /* offset 16 */ + 0xff, 0xd0, /* callq *rax */ + 0x48, 0x31, 0xc9, /* xor %rcx, %rcx */ + 0x48, 0x31, 0xd2, /* xor %rdx, %rdx */ + 0xff, 0xe0, /* jmpq *rax */ + }; BYTE patched_KiUserExceptionDispatcher_bytes[12]; void *bpt_address, *trampoline_ptr; @@ -4641,9 +4675,13 @@ static void test_KiUserExceptionDispatcher(void) *(ULONG64 *)(except_code + 2) = (ULONG64)&test_kiuserexceptiondispatcher_regs; *(ULONG64 *)(except_code + 0x2a) = (ULONG64)&test_kiuserexceptiondispatcher_regs.new_rax; + *(ULONG_PTR *)(hook_trampoline_arm64ec + 17) = (ULONG_PTR)hook_KiUserExceptionDispatcher_arm64ec; *(ULONG_PTR *)(hook_trampoline + 16) = (ULONG_PTR)hook_KiUserExceptionDispatcher; trampoline_ptr = (char *)code_mem + 1024; - memcpy(trampoline_ptr, hook_trampoline, sizeof(hook_trampoline)); + if (is_arm64ec) + memcpy(trampoline_ptr, hook_trampoline_arm64ec, sizeof(hook_trampoline_arm64ec)); + else + memcpy(trampoline_ptr, hook_trampoline, sizeof(hook_trampoline)); ret = VirtualProtect(pKiUserExceptionDispatcher, sizeof(saved_KiUserExceptionDispatcher_bytes), PAGE_EXECUTE_READWRITE, &old_protect); @@ -4666,7 +4704,9 @@ static void test_KiUserExceptionDispatcher(void) got_exception = 0; run_exception_test(dbg_except_continue_handler, NULL, except_code, sizeof(except_code), PAGE_EXECUTE_READ); ok(got_exception, "Handler was not called.\n"); + todo_wine_if(is_arm64ec) ok(hook_called, "Hook was not called.\n"); + if (!hook_called) return; ok(test_kiuserexceptiondispatcher_regs.new_rax == 0xdeadbeef, "Got unexpected rax %#Ix.\n", test_kiuserexceptiondispatcher_regs.new_rax); @@ -4717,7 +4757,7 @@ static void test_KiUserExceptionDispatcher(void) ok(got_exception, "Handler was not called.\n"); ok(hook_called, "Hook was not called.\n"); - ok(hook_exception_address == (BYTE *)hook_KiUserExceptionDispatcher_rip + 1 + ok(hook_exception_address == (BYTE *)hook_KiUserExceptionDispatcher_rip + !is_arm64ec || broken(!hook_exception_address) /* 2008 */, "Got unexpected addresses %p, %p.\n", hook_KiUserExceptionDispatcher_rip, hook_exception_address);
1
0
0
0
Alexandre Julliard : ntdll/tests: Fix exception address checks in child process on ARM64EC.
by Alexandre Julliard
19 Mar '24
19 Mar '24
Module: wine Branch: master Commit: 2c2229523385976cb05a2811a4874bd7a7e31d15 URL:
https://gitlab.winehq.org/wine/wine/-/commit/2c2229523385976cb05a2811a4874b…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Tue Mar 19 22:15:54 2024 +0100 ntdll/tests: Fix exception address checks in child process on ARM64EC. --- dlls/ntdll/tests/exception.c | 66 ++++++++++++++++++++++++++++---------------- 1 file changed, 42 insertions(+), 24 deletions(-) diff --git a/dlls/ntdll/tests/exception.c b/dlls/ntdll/tests/exception.c index d3c279ecab8..e1389bae2ab 100644 --- a/dlls/ntdll/tests/exception.c +++ b/dlls/ntdll/tests/exception.c @@ -89,6 +89,7 @@ static VOID (WINAPI *pRtlUnwindEx)(VOID*, VOID*, EXCEPTION_RECORD*, VOID*, static BOOLEAN (CDECL *pRtlAddFunctionTable)(RUNTIME_FUNCTION*, DWORD, DWORD64); static BOOLEAN (CDECL *pRtlDeleteFunctionTable)(RUNTIME_FUNCTION*); static VOID (CDECL *pRtlRestoreContext)(CONTEXT*, EXCEPTION_RECORD*); +static NTSTATUS (WINAPI *pRtlGetNativeSystemInformation)(SYSTEM_INFORMATION_CLASS,void*,ULONG,ULONG*); #endif static void *pKiUserApcDispatcher; @@ -146,7 +147,6 @@ static EXCEPTION_DISPOSITION (WINAPI *p__C_specific_handler)(EXCEPTION_RECORD*, static NTSTATUS (WINAPI *pRtlWow64GetThreadContext)(HANDLE, WOW64_CONTEXT *); static NTSTATUS (WINAPI *pRtlWow64SetThreadContext)(HANDLE, const WOW64_CONTEXT *); static NTSTATUS (WINAPI *pRtlWow64GetCpuAreaInfo)(WOW64_CPURESERVED*,ULONG,WOW64_CPU_AREA_INFO*); -static NTSTATUS (WINAPI *pRtlGetNativeSystemInformation)(SYSTEM_INFORMATION_CLASS,void*,ULONG,ULONG*); #endif enum debugger_stages @@ -3011,7 +3011,9 @@ static void test_exceptions(void) got_exception = 0; run_exception_test(direction_flag_handler, NULL, direction_flag_code, sizeof(direction_flag_code), 0); ok(got_exception == 1, "got %d exceptions, expected 1\n", got_exception); +#ifndef __arm64ec__ if (is_arm64ec) __asm__ volatile( "cld" ); /* needed on Windows */ +#endif /* test int3 handling */ run_exception_test(int3_handler, NULL, int3_code, sizeof(int3_code), 0); @@ -3294,7 +3296,7 @@ static void rtlraiseexception_handler_( EXCEPTION_RECORD *rec, void *frame, CONT /* check that pc is fixed up only for EXCEPTION_BREAKPOINT * even if raised by RtlRaiseException */ - if (rec->ExceptionCode == EXCEPTION_BREAKPOINT && test_stage) + if (rec->ExceptionCode == EXCEPTION_BREAKPOINT && test_stage && !is_arm64ec) ok( context->Rip == (UINT_PTR)addr - 1, "%d: Rip at %Ix instead of %Ix\n", test_stage, context->Rip, (UINT_PTR)addr - 1 ); else @@ -3386,7 +3388,7 @@ static LONG CALLBACK rtlraiseexception_vectored_handler(EXCEPTION_POINTERS *Exce /* check that Rip is fixed up only for EXCEPTION_BREAKPOINT * even if raised by RtlRaiseException */ - if (rec->ExceptionCode == EXCEPTION_BREAKPOINT && test_stage) + if (rec->ExceptionCode == EXCEPTION_BREAKPOINT && test_stage && !is_arm64ec) ok( context->Rip == (UINT_PTR)addr - 1, "%d: Rip at %Ix instead of %Ix\n", test_stage, context->Rip, (UINT_PTR)addr - 1 ); else @@ -3579,20 +3581,24 @@ static void test_debugger(DWORD cont_status, BOOL with_WaitForDebugEventEx) else if (counter < 2) /* startup breakpoint */ { /* breakpoint is inside ntdll */ - void *ntdll = GetModuleHandleA( "ntdll.dll" ); - IMAGE_NT_HEADERS *nt = RtlImageNtHeader( ntdll ); + IMAGE_NT_HEADERS *nt = RtlImageNtHeader( hntdll ); - ok( (char *)ctx.Rip >= (char *)ntdll && - (char *)ctx.Rip < (char *)ntdll + nt->OptionalHeader.SizeOfImage, - "wrong rip %p ntdll %p-%p\n", (void *)ctx.Rip, ntdll, - (char *)ntdll + nt->OptionalHeader.SizeOfImage ); + ok( (char *)ctx.Rip >= (char *)hntdll && + (char *)ctx.Rip < (char *)hntdll + nt->OptionalHeader.SizeOfImage, + "wrong rip %p ntdll %p-%p\n", (void *)ctx.Rip, hntdll, + (char *)hntdll + nt->OptionalHeader.SizeOfImage ); } else { if (stage == STAGE_RTLRAISE_NOT_HANDLED) { - ok((char *)ctx.Rip == (char *)code_mem_address + 0x0c, "Rip at %p instead of %p\n", - (char *)ctx.Rip, (char *)code_mem_address + 0x0c); + if (is_arm64ec) /* addr points to RtlRaiseException entry thunk */ + ok( ((ULONG *)ctx.Rip)[-1] == 0xd63f0120 /* blr x9 */, + "Rip not in entry thunk %p (ntdll+%Ix)\n", + (char *)ctx.Rip, (char *)ctx.Rip - (char *)hntdll ); + else + ok((char *)ctx.Rip == (char *)code_mem_address + 0x0c, "Rip at %p instead of %p\n", + (char *)ctx.Rip, (char *)code_mem_address + 0x0c); /* setting the context from debugger does not affect the context that the * exception handler gets, except on w2008 */ ctx.Rip = (UINT_PTR)code_mem_address + 0x0e; @@ -3604,8 +3610,14 @@ static void test_debugger(DWORD cont_status, BOOL with_WaitForDebugEventEx) { if (de.u.Exception.dwFirstChance) { - ok((char *)ctx.Rip == (char *)code_mem_address + 0x0c, "Rip at %p instead of %p\n", - (char *)ctx.Rip, (char *)code_mem_address + 0x0c); + if (is_arm64ec) + ok( ((ULONG *)ctx.Rip)[-1] == 0xd63f0120 /* blr x9 */, + "Rip not in entry thunk %p (ntdll+%Ix)\n", + (char *)ctx.Rip, (char *)ctx.Rip - (char *)hntdll ); + else + ok((char *)ctx.Rip == (char *)code_mem_address + 0x0c, + "Rip at %p instead of %p\n", + (char *)ctx.Rip, (char *)code_mem_address + 0x0c); /* setting the context from debugger does not affect the context that the * exception handler gets, except on w2008 */ ctx.Rip = (UINT_PTR)code_mem_address + 0x0e; @@ -3617,7 +3629,11 @@ static void test_debugger(DWORD cont_status, BOOL with_WaitForDebugEventEx) else { /* debugger gets context after exception handler has played with it */ - if (de.u.Exception.ExceptionRecord.ExceptionCode == EXCEPTION_BREAKPOINT) + if (is_arm64ec) + ok( ((ULONG *)ctx.Rip)[-1] == 0xd63f0120 /* blr x9 */, + "Rip not in entry thunk %p (ntdll+%Ix)\n", + (char *)ctx.Rip, (char *)ctx.Rip - (char *)hntdll ); + else if (de.u.Exception.ExceptionRecord.ExceptionCode == EXCEPTION_BREAKPOINT) { ok((char *)ctx.Rip == (char *)code_mem_address + 0xb, "Rip at %p instead of %p\n", (char *)ctx.Rip, (char *)code_mem_address + 0xb); @@ -4275,7 +4291,7 @@ static void test_wow64_context(void) ok( !context.Rbx, "rbx is not zero %Ix\n", context.Rbx ); ok( ((ULONG_PTR)context.Rsp & ~0xfff) == ((ULONG_PTR)teb.Tib.StackBase & ~0xfff), "rsp is not at top of stack %p / %p\n", (void *)context.Rsp, teb.Tib.StackBase ); - ok( context.EFlags == 0x200, "wrong flags %08lx\n", context.EFlags ); + ok( context.EFlags == 0x200 || context.EFlags == 0x202, "wrong flags %08lx\n", context.EFlags ); for (i = 0, got32 = got64 = FALSE; i < 10000 && !(got32 && got64); i++) { @@ -10868,6 +10884,17 @@ START_TEST(exception) X(RtlUnwindEx); X(RtlAddFunctionTable); X(RtlDeleteFunctionTable); + X(RtlGetNativeSystemInformation); +#endif + +#ifdef __x86_64__ + if (pRtlGetNativeSystemInformation) + { + SYSTEM_CPU_INFORMATION info; + ULONG len; + if (!pRtlGetNativeSystemInformation( SystemCpuInformation, &info, sizeof(info), &len )) + is_arm64ec = (info.ProcessorArchitecture == PROCESSOR_ARCHITECTURE_ARM64); + } #endif #undef X @@ -10999,17 +11026,8 @@ START_TEST(exception) X(RtlWow64GetThreadContext); X(RtlWow64SetThreadContext); X(RtlWow64GetCpuAreaInfo); - X(RtlGetNativeSystemInformation); #undef X - if (pRtlGetNativeSystemInformation) - { - SYSTEM_CPU_INFORMATION info; - ULONG len; - if (!pRtlGetNativeSystemInformation( SystemCpuInformation, &info, sizeof(info), &len )) - is_arm64ec = (info.ProcessorArchitecture == PROCESSOR_ARCHITECTURE_ARM64); - } - test_exceptions(); test_debug_registers(); test_debug_registers_wow64();
1
0
0
0
Alexandre Julliard : msvcrt: Use floating point comparison builtins also in MSVC mode.
by Alexandre Julliard
19 Mar '24
19 Mar '24
Module: wine Branch: master Commit: d70dd610305318143d9b06ec98f1be5cf4716119 URL:
https://gitlab.winehq.org/wine/wine/-/commit/d70dd610305318143d9b06ec98f1be…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Tue Mar 19 11:06:03 2024 +0100 msvcrt: Use floating point comparison builtins also in MSVC mode. --- include/msvcrt/math.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/msvcrt/math.h b/include/msvcrt/math.h index 4b7df1244eb..fc7de676c83 100644 --- a/include/msvcrt/math.h +++ b/include/msvcrt/math.h @@ -351,7 +351,7 @@ static inline int __signbit(double x) #define _FP_EQ 2 #define _FP_GT 4 -#ifdef __GNUC__ +#if defined(__GNUC__) || defined(__clang__) # define isgreater(x, y) __builtin_isgreater(x, y) # define isgreaterequal(x, y) __builtin_isgreaterequal(x, y) # define isless(x, y) __builtin_isless(x, y)
1
0
0
0
Alexandre Julliard : netprofm: Use the correct symbols for error codes.
by Alexandre Julliard
19 Mar '24
19 Mar '24
Module: wine Branch: master Commit: 5cf558935d38aaffc1773201d804189a81163e3a URL:
https://gitlab.winehq.org/wine/wine/-/commit/5cf558935d38aaffc1773201d80418…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Tue Mar 19 09:56:48 2024 +0100 netprofm: Use the correct symbols for error codes. --- dlls/netprofm/list.c | 4 ++-- dlls/netprofm/tests/list.c | 9 +++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/dlls/netprofm/list.c b/dlls/netprofm/list.c index 31534c7f4b9..af40dc0ac91 100644 --- a/dlls/netprofm/list.c +++ b/dlls/netprofm/list.c @@ -194,7 +194,7 @@ static HRESULT WINAPI connection_point_Advise( if (FAILED(hr)) { WARN( "iface %s not implemented by sink\n", debugstr_guid(&cp->iid) ); - return CO_E_FAILEDTOOPENTHREADTOKEN; + return CONNECT_E_CANNOTCONNECT; } sink_entry = malloc( sizeof(*sink_entry) ); @@ -234,7 +234,7 @@ static HRESULT WINAPI connection_point_Unadvise( } WARN( "invalid cookie\n" ); - return OLE_E_NOCONNECTION; + return CONNECT_E_NOCONNECTION; } static HRESULT WINAPI connection_point_EnumConnections( diff --git a/dlls/netprofm/tests/list.c b/dlls/netprofm/tests/list.c index 4c0c87cab8b..12a54477f66 100644 --- a/dlls/netprofm/tests/list.c +++ b/dlls/netprofm/tests/list.c @@ -22,6 +22,7 @@ #include "initguid.h" #include "objbase.h" #include "ocidl.h" +#include "olectl.h" #include "netlistmgr.h" #include "wine/test.h" @@ -348,13 +349,13 @@ static void test_INetworkListManager( void ) "Expected iid to be IID_INetworkListManagerEvents\n" ); hr = IConnectionPoint_Advise( pt, (IUnknown*)&mgr_sink_unk, &cookie); - ok( hr == CO_E_FAILEDTOOPENTHREADTOKEN, "Advise failed: %08lx\n", hr ); + ok( hr == CONNECT_E_CANNOTCONNECT, "Advise failed: %08lx\n", hr ); hr = IConnectionPoint_Advise( pt, (IUnknown*)&mgr_sink, &cookie); ok( hr == S_OK, "Advise failed: %08lx\n", hr ); hr = IConnectionPoint_Unadvise( pt, 0xdeadbeef ); - ok( hr == OLE_E_NOCONNECTION || hr == CO_E_FAILEDTOIMPERSONATE, "Unadvise failed: %08lx\n", hr ); + ok( hr == OLE_E_NOCONNECTION || hr == CONNECT_E_NOCONNECTION, "Unadvise failed: %08lx\n", hr ); hr = IConnectionPoint_Unadvise( pt, cookie ); ok( hr == S_OK, "Unadvise failed: %08lx\n", hr ); @@ -365,11 +366,11 @@ static void test_INetworkListManager( void ) IConnectionPoint_Release( pt2 ); hr = IConnectionPointContainer_FindConnectionPoint( cpc, &IID_INetworkCostManagerEvents, &pt ); - ok( hr == S_OK || hr == CO_E_FAILEDTOIMPERSONATE, "got %08lx\n", hr ); + ok( hr == S_OK || hr == CONNECT_E_NOCONNECTION, "got %08lx\n", hr ); if (hr == S_OK) IConnectionPoint_Release( pt ); hr = IConnectionPointContainer_FindConnectionPoint( cpc, &IID_INetworkConnectionEvents, &pt ); - ok( hr == S_OK || hr == CO_E_FAILEDTOIMPERSONATE, "got %08lx\n", hr ); + ok( hr == S_OK || hr == CONNECT_E_NOCONNECTION, "got %08lx\n", hr ); if (hr == S_OK) IConnectionPoint_Release( pt ); hr = IConnectionPointContainer_FindConnectionPoint( cpc, &IID_INetworkEvents, &pt );
1
0
0
0
Henri Verbeet : vkd3d-shader/d3d-asm: Pass a prefix and suffix to shader_dump_dst_param().
by Alexandre Julliard
18 Mar '24
18 Mar '24
Module: vkd3d Branch: master Commit: 164608a007db3e682fe34b46e9acee4921677a73 URL:
https://gitlab.winehq.org/wine/vkd3d/-/commit/164608a007db3e682fe34b46e9ace…
Author: Henri Verbeet <hverbeet(a)codeweavers.com> Date: Thu Mar 14 19:23:41 2024 +0100 vkd3d-shader/d3d-asm: Pass a prefix and suffix to shader_dump_dst_param(). --- libs/vkd3d-shader/d3d_asm.c | 42 ++++++++++++++++-------------------------- 1 file changed, 16 insertions(+), 26 deletions(-) diff --git a/libs/vkd3d-shader/d3d_asm.c b/libs/vkd3d-shader/d3d_asm.c index b564490b..0623a129 100644 --- a/libs/vkd3d-shader/d3d_asm.c +++ b/libs/vkd3d-shader/d3d_asm.c @@ -1422,11 +1422,12 @@ static void shader_print_write_mask(struct vkd3d_d3d_asm_compiler *compiler, compiler->colours.write_mask, buffer, compiler->colours.reset, suffix); } -static void shader_dump_dst_param(struct vkd3d_d3d_asm_compiler *compiler, - const struct vkd3d_shader_dst_param *param, bool is_declaration) +static void shader_print_dst_param(struct vkd3d_d3d_asm_compiler *compiler, + const char *prefix, const struct vkd3d_shader_dst_param *param, bool is_declaration, const char *suffix) { uint32_t write_mask = param->write_mask; + vkd3d_string_buffer_printf(&compiler->buffer, "%s", prefix); shader_dump_register(compiler, ¶m->reg, is_declaration); if (write_mask && param->reg.dimension == VSIR_DIMENSION_VEC4) @@ -1440,6 +1441,7 @@ static void shader_dump_dst_param(struct vkd3d_d3d_asm_compiler *compiler, shader_print_precision(compiler, ¶m->reg); shader_print_non_uniform(compiler, ¶m->reg); shader_dump_reg_type(compiler, ¶m->reg); + vkd3d_string_buffer_printf(&compiler->buffer, "%s", suffix); } static void shader_print_src_param(struct vkd3d_d3d_asm_compiler *compiler, @@ -1858,8 +1860,7 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler, break; case VKD3DSIH_DCL_INDEX_RANGE: - vkd3d_string_buffer_printf(buffer, " "); - shader_dump_dst_param(compiler, &ins->declaration.index_range.dst, true); + shader_print_dst_param(compiler, " ", &ins->declaration.index_range.dst, true, ""); shader_print_uint_literal(compiler, " ", ins->declaration.index_range.register_count, ""); break; @@ -1877,16 +1878,14 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler, case VKD3DSIH_DCL_INPUT_PS: vkd3d_string_buffer_printf(buffer, " "); shader_dump_interpolation_mode(compiler, ins->flags); - shader_addline(buffer, " "); - shader_dump_dst_param(compiler, &ins->declaration.dst, true); + shader_print_dst_param(compiler, " ", &ins->declaration.dst, true, ""); break; case VKD3DSIH_DCL_INPUT_PS_SGV: case VKD3DSIH_DCL_INPUT_SGV: case VKD3DSIH_DCL_INPUT_SIV: case VKD3DSIH_DCL_OUTPUT_SIV: - vkd3d_string_buffer_printf(buffer, " "); - shader_dump_dst_param(compiler, &ins->declaration.register_semantic.reg, true); + shader_print_dst_param(compiler, " ", &ins->declaration.register_semantic.reg, true, ""); shader_addline(buffer, ", "); shader_dump_shader_input_sysval_semantic(compiler, ins->declaration.register_semantic.sysval_semantic); break; @@ -1894,16 +1893,14 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler, case VKD3DSIH_DCL_INPUT_PS_SIV: vkd3d_string_buffer_printf(buffer, " "); shader_dump_interpolation_mode(compiler, ins->flags); - shader_addline(buffer, " "); - shader_dump_dst_param(compiler, &ins->declaration.register_semantic.reg, true); + shader_print_dst_param(compiler, " ", &ins->declaration.register_semantic.reg, true, ""); shader_addline(buffer, ", "); shader_dump_shader_input_sysval_semantic(compiler, ins->declaration.register_semantic.sysval_semantic); break; case VKD3DSIH_DCL_INPUT: case VKD3DSIH_DCL_OUTPUT: - vkd3d_string_buffer_printf(buffer, " "); - shader_dump_dst_param(compiler, &ins->declaration.dst, true); + shader_print_dst_param(compiler, " ", &ins->declaration.dst, true, ""); break; case VKD3DSIH_DCL_INPUT_PRIMITIVE: @@ -1920,14 +1917,12 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler, break; case VKD3DSIH_DCL_RESOURCE_RAW: - vkd3d_string_buffer_printf(buffer, " "); - shader_dump_dst_param(compiler, &ins->declaration.raw_resource.resource.reg, true); + shader_print_dst_param(compiler, " ", &ins->declaration.raw_resource.resource.reg, true, ""); shader_dump_register_space(compiler, ins->declaration.raw_resource.resource.range.space); break; case VKD3DSIH_DCL_RESOURCE_STRUCTURED: - vkd3d_string_buffer_printf(buffer, " "); - shader_dump_dst_param(compiler, &ins->declaration.structured_resource.resource.reg, true); + shader_print_dst_param(compiler, " ", &ins->declaration.structured_resource.resource.reg, true, ""); shader_print_uint_literal(compiler, ", ", ins->declaration.structured_resource.byte_stride, ""); shader_dump_register_space(compiler, ins->declaration.structured_resource.resource.range.space); break; @@ -1963,14 +1958,12 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler, break; case VKD3DSIH_DCL_TGSM_RAW: - vkd3d_string_buffer_printf(buffer, " "); - shader_dump_dst_param(compiler, &ins->declaration.tgsm_raw.reg, true); + shader_print_dst_param(compiler, " ", &ins->declaration.tgsm_raw.reg, true, ""); shader_print_uint_literal(compiler, ", ", ins->declaration.tgsm_raw.byte_count, ""); break; case VKD3DSIH_DCL_TGSM_STRUCTURED: - vkd3d_string_buffer_printf(buffer, " "); - shader_dump_dst_param(compiler, &ins->declaration.tgsm_structured.reg, true); + shader_print_dst_param(compiler, " ", &ins->declaration.tgsm_structured.reg, true, ""); shader_print_uint_literal(compiler, ", ", ins->declaration.tgsm_structured.byte_stride, ""); shader_print_uint_literal(compiler, ", ", ins->declaration.tgsm_structured.structure_count, ""); break; @@ -1983,15 +1976,13 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler, case VKD3DSIH_DCL_UAV_RAW: shader_dump_uav_flags(compiler, ins->flags); - shader_addline(buffer, " "); - shader_dump_dst_param(compiler, &ins->declaration.raw_resource.resource.reg, true); + shader_print_dst_param(compiler, " ", &ins->declaration.raw_resource.resource.reg, true, ""); shader_dump_register_space(compiler, ins->declaration.raw_resource.resource.range.space); break; case VKD3DSIH_DCL_UAV_STRUCTURED: shader_dump_uav_flags(compiler, ins->flags); - shader_addline(buffer, " "); - shader_dump_dst_param(compiler, &ins->declaration.structured_resource.resource.reg, true); + shader_print_dst_param(compiler, " ", &ins->declaration.structured_resource.resource.reg, true, ""); shader_print_uint_literal(compiler, ", ", ins->declaration.structured_resource.byte_stride, ""); shader_dump_register_space(compiler, ins->declaration.structured_resource.resource.range.space); break; @@ -2053,8 +2044,7 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler, for (i = 0; i < ins->dst_count; ++i) { shader_dump_ins_modifiers(compiler, &ins->dst[i]); - shader_addline(buffer, !i ? " " : ", "); - shader_dump_dst_param(compiler, &ins->dst[i], false); + shader_print_dst_param(compiler, !i ? " " : ", ", &ins->dst[i], false, ""); } /* Other source tokens */
1
0
0
0
Henri Verbeet : vkd3d-shader/d3d-asm: Pass a prefix and suffix to shader_dump_src_param().
by Alexandre Julliard
18 Mar '24
18 Mar '24
Module: vkd3d Branch: master Commit: e2d1a878a77bf40da6024327b0655a1c03e3172f URL:
https://gitlab.winehq.org/wine/vkd3d/-/commit/e2d1a878a77bf40da6024327b0655…
Author: Henri Verbeet <hverbeet(a)codeweavers.com> Date: Thu Mar 14 19:08:16 2024 +0100 vkd3d-shader/d3d-asm: Pass a prefix and suffix to shader_dump_src_param(). --- libs/vkd3d-shader/d3d_asm.c | 93 +++++++++++++++++++++++---------------------- 1 file changed, 48 insertions(+), 45 deletions(-) diff --git a/libs/vkd3d-shader/d3d_asm.c b/libs/vkd3d-shader/d3d_asm.c index 94ebe3e0..b564490b 100644 --- a/libs/vkd3d-shader/d3d_asm.c +++ b/libs/vkd3d-shader/d3d_asm.c @@ -807,8 +807,8 @@ static void shader_dump_decl_usage(struct vkd3d_d3d_asm_compiler *compiler, } } -static void shader_dump_src_param(struct vkd3d_d3d_asm_compiler *compiler, - const struct vkd3d_shader_src_param *param); +static void shader_print_src_param(struct vkd3d_d3d_asm_compiler *compiler, + const char *prefix, const struct vkd3d_shader_src_param *param, const char *suffix); static void shader_print_float_literal(struct vkd3d_d3d_asm_compiler *compiler, const char *prefix, float f, const char *suffix) @@ -905,13 +905,9 @@ static void shader_print_untyped_literal(struct vkd3d_d3d_asm_compiler *compiler static void shader_print_subscript(struct vkd3d_d3d_asm_compiler *compiler, unsigned int offset, const struct vkd3d_shader_src_param *rel_addr) { - vkd3d_string_buffer_printf(&compiler->buffer, "["); if (rel_addr) - { - shader_dump_src_param(compiler, rel_addr); - vkd3d_string_buffer_printf(&compiler->buffer, " + "); - } - shader_print_uint_literal(compiler, "", offset, "]"); + shader_print_src_param(compiler, "[", rel_addr, " + "); + shader_print_uint_literal(compiler, rel_addr ? "" : "[", offset, "]"); } static void shader_print_subscript_range(struct vkd3d_d3d_asm_compiler *compiler, @@ -1446,46 +1442,62 @@ static void shader_dump_dst_param(struct vkd3d_d3d_asm_compiler *compiler, shader_dump_reg_type(compiler, ¶m->reg); } -static void shader_dump_src_param(struct vkd3d_d3d_asm_compiler *compiler, - const struct vkd3d_shader_src_param *param) +static void shader_print_src_param(struct vkd3d_d3d_asm_compiler *compiler, + const char *prefix, const struct vkd3d_shader_src_param *param, const char *suffix) { enum vkd3d_shader_src_modifier src_modifier = param->modifiers; struct vkd3d_string_buffer *buffer = &compiler->buffer; uint32_t swizzle = param->swizzle; + const char *modifier = ""; if (src_modifier == VKD3DSPSM_NEG || src_modifier == VKD3DSPSM_BIASNEG || src_modifier == VKD3DSPSM_SIGNNEG || src_modifier == VKD3DSPSM_X2NEG || src_modifier == VKD3DSPSM_ABSNEG) - shader_addline(buffer, "-"); + modifier = "-"; else if (src_modifier == VKD3DSPSM_COMP) - shader_addline(buffer, "1-"); + modifier = "1-"; else if (src_modifier == VKD3DSPSM_NOT) - shader_addline(buffer, "!"); + modifier = "!"; + vkd3d_string_buffer_printf(buffer, "%s%s", prefix, modifier); if (src_modifier == VKD3DSPSM_ABS || src_modifier == VKD3DSPSM_ABSNEG) - shader_addline(buffer, "|"); + vkd3d_string_buffer_printf(buffer, "|"); shader_dump_register(compiler, ¶m->reg, false); switch (src_modifier) { - case VKD3DSPSM_NONE: break; - case VKD3DSPSM_NEG: break; - case VKD3DSPSM_NOT: break; - case VKD3DSPSM_BIAS: shader_addline(buffer, "_bias"); break; - case VKD3DSPSM_BIASNEG: shader_addline(buffer, "_bias"); break; - case VKD3DSPSM_SIGN: shader_addline(buffer, "_bx2"); break; - case VKD3DSPSM_SIGNNEG: shader_addline(buffer, "_bx2"); break; - case VKD3DSPSM_COMP: break; - case VKD3DSPSM_X2: shader_addline(buffer, "_x2"); break; - case VKD3DSPSM_X2NEG: shader_addline(buffer, "_x2"); break; - case VKD3DSPSM_DZ: shader_addline(buffer, "_dz"); break; - case VKD3DSPSM_DW: shader_addline(buffer, "_dw"); break; + case VKD3DSPSM_NONE: + case VKD3DSPSM_NEG: + case VKD3DSPSM_COMP: + case VKD3DSPSM_ABS: case VKD3DSPSM_ABSNEG: - case VKD3DSPSM_ABS: /* handled later */ break; - default: shader_addline(buffer, "_unknown_modifier(%#x)", src_modifier); + case VKD3DSPSM_NOT: + break; + case VKD3DSPSM_BIAS: + case VKD3DSPSM_BIASNEG: + vkd3d_string_buffer_printf(buffer, "_bias"); + break; + case VKD3DSPSM_SIGN: + case VKD3DSPSM_SIGNNEG: + vkd3d_string_buffer_printf(buffer, "_bx2"); + break; + case VKD3DSPSM_X2: + case VKD3DSPSM_X2NEG: + vkd3d_string_buffer_printf(buffer, "_x2"); + break; + case VKD3DSPSM_DZ: + vkd3d_string_buffer_printf(buffer, "_dz"); + break; + case VKD3DSPSM_DW: + vkd3d_string_buffer_printf(buffer, "_dw"); + break; + default: + vkd3d_string_buffer_printf(buffer, "_%s<unhandled modifier %#x>%s", + compiler->colours.error, src_modifier, compiler->colours.reset); + break; } if (param->reg.type != VKD3DSPR_IMMCONST && param->reg.type != VKD3DSPR_IMMCONST64 @@ -1503,26 +1515,22 @@ static void shader_dump_src_param(struct vkd3d_d3d_asm_compiler *compiler, swizzle_z = vsir_swizzle_get_component(swizzle, 2); swizzle_w = vsir_swizzle_get_component(swizzle, 3); - if (swizzle_x == swizzle_y - && swizzle_x == swizzle_z - && swizzle_x == swizzle_w) - { - shader_addline(buffer, ".%s%c%s", compiler->colours.swizzle, + if (swizzle_x == swizzle_y && swizzle_x == swizzle_z && swizzle_x == swizzle_w) + vkd3d_string_buffer_printf(buffer, ".%s%c%s", compiler->colours.swizzle, swizzle_chars[swizzle_x], compiler->colours.reset); - } else - { - shader_addline(buffer, ".%s%c%c%c%c%s", compiler->colours.swizzle, + vkd3d_string_buffer_printf(buffer, ".%s%c%c%c%c%s", compiler->colours.swizzle, swizzle_chars[swizzle_x], swizzle_chars[swizzle_y], swizzle_chars[swizzle_z], swizzle_chars[swizzle_w], compiler->colours.reset); - } } + if (src_modifier == VKD3DSPSM_ABS || src_modifier == VKD3DSPSM_ABSNEG) - shader_addline(buffer, "|"); + vkd3d_string_buffer_printf(buffer, "|"); shader_print_precision(compiler, ¶m->reg); shader_print_non_uniform(compiler, ¶m->reg); shader_dump_reg_type(compiler, ¶m->reg); + vkd3d_string_buffer_printf(buffer, "%s", suffix); } static void shader_dump_ins_modifiers(struct vkd3d_d3d_asm_compiler *compiler, @@ -1796,11 +1804,7 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler, compiler->current = ins; if (ins->predicate) - { - vkd3d_string_buffer_printf(buffer, "("); - shader_dump_src_param(compiler, ins->predicate); - vkd3d_string_buffer_printf(buffer, ") "); - } + shader_print_src_param(compiler, "(", ins->predicate, ") "); /* PixWin marks instructions with the coissue flag with a '+' */ if (ins->coissue) @@ -2056,8 +2060,7 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler, /* Other source tokens */ for (i = ins->dst_count; i < (ins->dst_count + ins->src_count); ++i) { - shader_addline(buffer, !i ? " " : ", "); - shader_dump_src_param(compiler, &ins->src[i - ins->dst_count]); + shader_print_src_param(compiler, !i ? " " : ", ", &ins->src[i - ins->dst_count], ""); } break; }
1
0
0
0
← Newer
1
...
22
23
24
25
26
27
28
...
78
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
Results per page:
10
25
50
100
200