You've already forked wine-staging
mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2025-04-13 14:42:51 -07:00
Compare commits
35 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
b22ec60228 | ||
|
15a75851db | ||
|
5cd91c5928 | ||
|
5e623ee4d9 | ||
|
2677244e40 | ||
|
65a5de8630 | ||
|
b2341b8d08 | ||
|
c4de5ab774 | ||
|
f3854126b1 | ||
|
c40429f3c9 | ||
|
d1af5f06fa | ||
|
af5ec899c3 | ||
|
3c781f3862 | ||
|
7257898858 | ||
|
3ad216bb25 | ||
|
32823d7014 | ||
|
efca1a6845 | ||
|
76177e1da2 | ||
|
dbaede0fc8 | ||
|
5353b4a5a4 | ||
|
910abaa327 | ||
|
6db72e951e | ||
|
b9514dd7b0 | ||
|
76a233502e | ||
|
c0993595fe | ||
|
49ba202882 | ||
|
80a4e6bdd7 | ||
|
0c4032f598 | ||
|
96bce84236 | ||
|
e0e48313df | ||
|
105afd2146 | ||
|
966293c5d3 | ||
|
b19d0ea3ca | ||
|
e745798070 | ||
|
bb54734bd3 |
@@ -1,4 +1,4 @@
|
||||
From b6efa0b8bb1bba73863ca985c13d46a5eaec4198 Mon Sep 17 00:00:00 2001
|
||||
From c178117abacbf8644ae05429999ff8e8f8585a7e Mon Sep 17 00:00:00 2001
|
||||
From: Hans Leidekker <hans@codeweavers.com>
|
||||
Date: Mon, 19 Dec 2016 19:38:52 +0100
|
||||
Subject: bcrypt: Add AES provider.
|
||||
@@ -7,11 +7,12 @@ Subject: bcrypt: Add AES provider.
|
||||
dlls/bcrypt/bcrypt.spec | 10 +-
|
||||
dlls/bcrypt/bcrypt_main.c | 347 ++++++++++++++++++++++++++++++++++++++++++++-
|
||||
dlls/bcrypt/tests/bcrypt.c | 18 +--
|
||||
dlls/ncrypt/ncrypt.spec | 10 +-
|
||||
include/bcrypt.h | 3 +
|
||||
4 files changed, 352 insertions(+), 26 deletions(-)
|
||||
5 files changed, 357 insertions(+), 31 deletions(-)
|
||||
|
||||
diff --git a/dlls/bcrypt/bcrypt.spec b/dlls/bcrypt/bcrypt.spec
|
||||
index e299fe0..962953e 100644
|
||||
index e299fe0cce8..962953e509b 100644
|
||||
--- a/dlls/bcrypt/bcrypt.spec
|
||||
+++ b/dlls/bcrypt/bcrypt.spec
|
||||
@@ -5,15 +5,15 @@
|
||||
@@ -52,7 +53,7 @@ index e299fe0..962953e 100644
|
||||
@ stub BCryptUnregisterConfigChangeNotify
|
||||
@ stub BCryptUnregisterProvider
|
||||
diff --git a/dlls/bcrypt/bcrypt_main.c b/dlls/bcrypt/bcrypt_main.c
|
||||
index 6023c94..937bdf7 100644
|
||||
index 6023c942e49..5e066283f6e 100644
|
||||
--- a/dlls/bcrypt/bcrypt_main.c
|
||||
+++ b/dlls/bcrypt/bcrypt_main.c
|
||||
@@ -49,6 +49,10 @@ WINE_DECLARE_DEBUG_CHANNEL(winediag);
|
||||
@@ -498,7 +499,7 @@ index 6023c94..937bdf7 100644
|
||||
{
|
||||
switch (reason)
|
||||
diff --git a/dlls/bcrypt/tests/bcrypt.c b/dlls/bcrypt/tests/bcrypt.c
|
||||
index 3e41335..2668153 100644
|
||||
index 422f2cfd340..d2df74ed919 100644
|
||||
--- a/dlls/bcrypt/tests/bcrypt.c
|
||||
+++ b/dlls/bcrypt/tests/bcrypt.c
|
||||
@@ -780,7 +780,7 @@ static void test_aes(void)
|
||||
@@ -510,7 +511,7 @@ index 3e41335..2668153 100644
|
||||
alg = NULL;
|
||||
ret = pBCryptOpenAlgorithmProvider(&alg, BCRYPT_AES_ALGORITHM, MS_PRIMITIVE_PROVIDER, 0);
|
||||
ok(ret == STATUS_SUCCESS, "got %08x\n", ret);
|
||||
@@ -828,7 +828,6 @@ todo_wine {
|
||||
@@ -814,7 +814,6 @@ todo_wine {
|
||||
ret = pBCryptCloseAlgorithmProvider(alg, 0);
|
||||
ok(ret == STATUS_SUCCESS, "got %08x\n", ret);
|
||||
}
|
||||
@@ -518,7 +519,7 @@ index 3e41335..2668153 100644
|
||||
|
||||
static void test_BCryptGenerateSymmetricKey(void)
|
||||
{
|
||||
@@ -847,11 +846,6 @@ static void test_BCryptGenerateSymmetricKey(void)
|
||||
@@ -833,11 +832,6 @@ static void test_BCryptGenerateSymmetricKey(void)
|
||||
NTSTATUS ret;
|
||||
|
||||
ret = pBCryptOpenAlgorithmProvider(&aes, BCRYPT_AES_ALGORITHM, NULL, 0);
|
||||
@@ -530,7 +531,7 @@ index 3e41335..2668153 100644
|
||||
ok(ret == STATUS_SUCCESS, "got %08x\n", ret);
|
||||
|
||||
len = size = 0xdeadbeef;
|
||||
@@ -936,11 +930,6 @@ static void test_BCryptEncrypt(void)
|
||||
@@ -922,11 +916,6 @@ static void test_BCryptEncrypt(void)
|
||||
NTSTATUS ret;
|
||||
|
||||
ret = pBCryptOpenAlgorithmProvider(&aes, BCRYPT_AES_ALGORITHM, NULL, 0);
|
||||
@@ -542,7 +543,7 @@ index 3e41335..2668153 100644
|
||||
ok(ret == STATUS_SUCCESS, "got %08x\n", ret);
|
||||
|
||||
len = 0xdeadbeef;
|
||||
@@ -1027,11 +1016,6 @@ static void test_BCryptDecrypt(void)
|
||||
@@ -1013,11 +1002,6 @@ static void test_BCryptDecrypt(void)
|
||||
NTSTATUS ret;
|
||||
|
||||
ret = pBCryptOpenAlgorithmProvider(&aes, BCRYPT_AES_ALGORITHM, NULL, 0);
|
||||
@@ -554,8 +555,51 @@ index 3e41335..2668153 100644
|
||||
ok(ret == STATUS_SUCCESS, "got %08x\n", ret);
|
||||
|
||||
len = 0xdeadbeef;
|
||||
diff --git a/dlls/ncrypt/ncrypt.spec b/dlls/ncrypt/ncrypt.spec
|
||||
index 04127608d68..60b7eb37075 100644
|
||||
--- a/dlls/ncrypt/ncrypt.spec
|
||||
+++ b/dlls/ncrypt/ncrypt.spec
|
||||
@@ -5,17 +5,17 @@
|
||||
@ stub BCryptConfigureContextFunction
|
||||
@ stub BCryptCreateContext
|
||||
@ stdcall BCryptCreateHash(ptr ptr ptr long ptr long long) bcrypt.BCryptCreateHash
|
||||
-@ stub BCryptDecrypt
|
||||
+@ stdcall BCryptDecrypt(ptr ptr long ptr ptr long ptr long ptr long) bcrypt.BCryptDecrypt
|
||||
@ stub BCryptDeleteContext
|
||||
@ stub BCryptDeriveKey
|
||||
@ stub BCryptDeriveKeyCapi
|
||||
@ stub BCryptDeriveKeyPBKDF2
|
||||
@ stdcall BCryptDestroyHash(ptr) bcrypt.BCryptDestroyHash
|
||||
-@ stub BCryptDestroyKey
|
||||
+@ stdcall BCryptDestroyKey(ptr) bcrypt.BCryptDestroyKey
|
||||
@ stub BCryptDestroySecret
|
||||
@ stub BCryptDuplicateHash
|
||||
@ stub BCryptDuplicateKey
|
||||
-@ stub BCryptEncrypt
|
||||
+@ stdcall BCryptEncrypt(ptr ptr long ptr ptr long ptr long ptr long) bcrypt.BCryptEncrypt
|
||||
@ stdcall BCryptEnumAlgorithms(long ptr ptr long) bcrypt.BCryptEnumAlgorithms
|
||||
@ stub BCryptEnumContextFunctionProviders
|
||||
@ stub BCryptEnumContextFunctions
|
||||
@@ -28,7 +28,7 @@
|
||||
@ stub BCryptFreeBuffer
|
||||
@ stdcall BCryptGenRandom(ptr ptr long long) bcrypt.BCryptGenRandom
|
||||
@ stub BCryptGenerateKeyPair
|
||||
-@ stub BCryptGenerateSymmetricKey
|
||||
+@ stdcall BCryptGenerateSymmetricKey(ptr ptr ptr long ptr long long) bcrypt.BCryptGenerateSymmetricKey
|
||||
@ stdcall BCryptGetFipsAlgorithmMode(ptr) bcrypt.BCryptGetFipsAlgorithmMode
|
||||
@ stdcall BCryptGetProperty(ptr wstr ptr long ptr long) bcrypt.BCryptGetProperty
|
||||
@ stdcall BCryptHash(ptr ptr long ptr long ptr long) bcrypt.BCryptHash
|
||||
@@ -49,7 +49,7 @@
|
||||
@ stub BCryptSecretAgreement
|
||||
@ stub BCryptSetAuditingInterface
|
||||
@ stub BCryptSetContextFunctionProperty
|
||||
-@ stub BCryptSetProperty
|
||||
+@ stdcall BCryptSetProperty(ptr wstr ptr long long) bcrypt.BCryptSetProperty
|
||||
@ stub BCryptSignHash
|
||||
@ stub BCryptUnregisterConfigChangeNotify
|
||||
@ stub BCryptUnregisterProvider
|
||||
diff --git a/include/bcrypt.h b/include/bcrypt.h
|
||||
index 05d0691..6af85e3 100644
|
||||
index 05d0691f9c3..6af85e36143 100644
|
||||
--- a/include/bcrypt.h
|
||||
+++ b/include/bcrypt.h
|
||||
@@ -74,6 +74,9 @@ typedef LONG NTSTATUS;
|
||||
@@ -569,5 +613,5 @@ index 05d0691..6af85e3 100644
|
||||
typedef struct _BCRYPT_ALGORITHM_IDENTIFIER
|
||||
{
|
||||
--
|
||||
2.9.0
|
||||
2.11.0
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From ecff30df4deadc0df006a880a5528343a4ab788f Mon Sep 17 00:00:00 2001
|
||||
From 3439b4e5a1fd05c4fb68491c3814de2581e8a5aa Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Tue, 20 Dec 2016 02:36:57 +0100
|
||||
Subject: bcrypt: Add internal fallback implementation for hash calculations.
|
||||
@@ -17,7 +17,7 @@ Subject: bcrypt: Add internal fallback implementation for hash calculations.
|
||||
create mode 100644 dlls/bcrypt/sha512.c
|
||||
|
||||
diff --git a/dlls/bcrypt/Makefile.in b/dlls/bcrypt/Makefile.in
|
||||
index ef9d7ea..38753bd 100644
|
||||
index ef9d7ead6bc..f54fc5cd482 100644
|
||||
--- a/dlls/bcrypt/Makefile.in
|
||||
+++ b/dlls/bcrypt/Makefile.in
|
||||
@@ -4,6 +4,9 @@ IMPORTLIB = bcrypt
|
||||
@@ -27,13 +27,13 @@ index ef9d7ea..38753bd 100644
|
||||
- bcrypt_main.c
|
||||
+ bcrypt_main.c \
|
||||
+ sha256.c \
|
||||
+ sha512.c \
|
||||
+ sha384.c
|
||||
+ sha384.c \
|
||||
+ sha512.c
|
||||
|
||||
RC_SRCS = version.rc
|
||||
diff --git a/dlls/bcrypt/bcrypt_internal.h b/dlls/bcrypt/bcrypt_internal.h
|
||||
new file mode 100644
|
||||
index 0000000..8a8f6d1
|
||||
index 00000000000..8a8f6d170c4
|
||||
--- /dev/null
|
||||
+++ b/dlls/bcrypt/bcrypt_internal.h
|
||||
@@ -0,0 +1,79 @@
|
||||
@@ -117,7 +117,7 @@ index 0000000..8a8f6d1
|
||||
+
|
||||
+#endif /* __BCRYPT_INTERNAL_H */
|
||||
diff --git a/dlls/bcrypt/bcrypt_main.c b/dlls/bcrypt/bcrypt_main.c
|
||||
index af2314a..9441cf0 100644
|
||||
index 1f22063dbda..fbaece21f47 100644
|
||||
--- a/dlls/bcrypt/bcrypt_main.c
|
||||
+++ b/dlls/bcrypt/bcrypt_main.c
|
||||
@@ -36,6 +36,8 @@
|
||||
@@ -251,7 +251,7 @@ index af2314a..9441cf0 100644
|
||||
|
||||
diff --git a/dlls/bcrypt/sha256.c b/dlls/bcrypt/sha256.c
|
||||
new file mode 100644
|
||||
index 0000000..48c4a48
|
||||
index 00000000000..48c4a48d031
|
||||
--- /dev/null
|
||||
+++ b/dlls/bcrypt/sha256.c
|
||||
@@ -0,0 +1,169 @@
|
||||
@@ -426,7 +426,7 @@ index 0000000..48c4a48
|
||||
+}
|
||||
diff --git a/dlls/bcrypt/sha384.c b/dlls/bcrypt/sha384.c
|
||||
new file mode 100644
|
||||
index 0000000..81e7e08
|
||||
index 00000000000..81e7e08fd07
|
||||
--- /dev/null
|
||||
+++ b/dlls/bcrypt/sha384.c
|
||||
@@ -0,0 +1,41 @@
|
||||
@@ -473,7 +473,7 @@ index 0000000..81e7e08
|
||||
+}
|
||||
diff --git a/dlls/bcrypt/sha512.c b/dlls/bcrypt/sha512.c
|
||||
new file mode 100644
|
||||
index 0000000..fdd7867
|
||||
index 00000000000..fdd7867eab7
|
||||
--- /dev/null
|
||||
+++ b/dlls/bcrypt/sha512.c
|
||||
@@ -0,0 +1,191 @@
|
||||
@@ -669,5 +669,5 @@ index 0000000..fdd7867
|
||||
+ }
|
||||
+}
|
||||
--
|
||||
2.9.0
|
||||
2.11.0
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 9331e2a78e8ec0ba29ed1041a9f851ffd39cc249 Mon Sep 17 00:00:00 2001
|
||||
From 3dc21336baced97a110773ac9e72db210a56af82 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Tue, 20 Dec 2016 03:59:19 +0100
|
||||
Subject: bcrypt: Implement BCryptDuplicateHash.
|
||||
@@ -7,10 +7,11 @@ FIXME: Should we check for NULL pointers?
|
||||
---
|
||||
dlls/bcrypt/bcrypt.spec | 2 +-
|
||||
dlls/bcrypt/bcrypt_main.c | 18 ++++++++++++++++++
|
||||
2 files changed, 19 insertions(+), 1 deletion(-)
|
||||
dlls/ncrypt/ncrypt.spec | 2 +-
|
||||
3 files changed, 20 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/dlls/bcrypt/bcrypt.spec b/dlls/bcrypt/bcrypt.spec
|
||||
index 962953e..9ecd21d 100644
|
||||
index 962953e509b..9ecd21d767c 100644
|
||||
--- a/dlls/bcrypt/bcrypt.spec
|
||||
+++ b/dlls/bcrypt/bcrypt.spec
|
||||
@@ -11,7 +11,7 @@
|
||||
@@ -23,7 +24,7 @@ index 962953e..9ecd21d 100644
|
||||
@ stdcall BCryptEncrypt(ptr ptr long ptr ptr long ptr long ptr long)
|
||||
@ stdcall BCryptEnumAlgorithms(long ptr ptr long)
|
||||
diff --git a/dlls/bcrypt/bcrypt_main.c b/dlls/bcrypt/bcrypt_main.c
|
||||
index 3e2b22d..944a9ea 100644
|
||||
index 4f09948096c..3eb0135b37c 100644
|
||||
--- a/dlls/bcrypt/bcrypt_main.c
|
||||
+++ b/dlls/bcrypt/bcrypt_main.c
|
||||
@@ -672,6 +672,24 @@ end:
|
||||
@@ -51,6 +52,19 @@ index 3e2b22d..944a9ea 100644
|
||||
NTSTATUS WINAPI BCryptDestroyHash( BCRYPT_HASH_HANDLE handle )
|
||||
{
|
||||
struct hash *hash = handle;
|
||||
diff --git a/dlls/ncrypt/ncrypt.spec b/dlls/ncrypt/ncrypt.spec
|
||||
index 60b7eb37075..1a78853bf49 100644
|
||||
--- a/dlls/ncrypt/ncrypt.spec
|
||||
+++ b/dlls/ncrypt/ncrypt.spec
|
||||
@@ -13,7 +13,7 @@
|
||||
@ stdcall BCryptDestroyHash(ptr) bcrypt.BCryptDestroyHash
|
||||
@ stdcall BCryptDestroyKey(ptr) bcrypt.BCryptDestroyKey
|
||||
@ stub BCryptDestroySecret
|
||||
-@ stub BCryptDuplicateHash
|
||||
+@ stdcall BCryptDuplicateHash(ptr ptr ptr long long) bcrypt.BCryptDuplicateHash
|
||||
@ stub BCryptDuplicateKey
|
||||
@ stdcall BCryptEncrypt(ptr ptr long ptr ptr long ptr long ptr long) bcrypt.BCryptEncrypt
|
||||
@ stdcall BCryptEnumAlgorithms(long ptr ptr long) bcrypt.BCryptEnumAlgorithms
|
||||
--
|
||||
2.9.0
|
||||
2.11.0
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From e930551dfa4e0bb97db71d056a4ed59f9e459e01 Mon Sep 17 00:00:00 2001
|
||||
From 6d590beb24ef04948fe8e05fff3a72c1d415a7c1 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Mon, 26 Dec 2016 08:28:24 +0100
|
||||
Subject: bcrypt: Implement BCryptDuplicateKey.
|
||||
@@ -6,10 +6,11 @@ Subject: bcrypt: Implement BCryptDuplicateKey.
|
||||
---
|
||||
dlls/bcrypt/bcrypt.spec | 2 +-
|
||||
dlls/bcrypt/bcrypt_main.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++
|
||||
2 files changed, 50 insertions(+), 1 deletion(-)
|
||||
dlls/ncrypt/ncrypt.spec | 2 +-
|
||||
3 files changed, 51 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/dlls/bcrypt/bcrypt.spec b/dlls/bcrypt/bcrypt.spec
|
||||
index 9ecd21d..f5911d2 100644
|
||||
index 9ecd21d767c..f5911d2cd40 100644
|
||||
--- a/dlls/bcrypt/bcrypt.spec
|
||||
+++ b/dlls/bcrypt/bcrypt.spec
|
||||
@@ -12,7 +12,7 @@
|
||||
@@ -22,7 +23,7 @@ index 9ecd21d..f5911d2 100644
|
||||
@ stdcall BCryptEnumAlgorithms(long ptr ptr long)
|
||||
@ stub BCryptEnumContextFunctionProviders
|
||||
diff --git a/dlls/bcrypt/bcrypt_main.c b/dlls/bcrypt/bcrypt_main.c
|
||||
index 198b010..37d6909 100644
|
||||
index 198b010b27e..37d69095f7a 100644
|
||||
--- a/dlls/bcrypt/bcrypt_main.c
|
||||
+++ b/dlls/bcrypt/bcrypt_main.c
|
||||
@@ -915,6 +915,24 @@ static NTSTATUS key_init( struct key *key, struct algorithm *alg, UCHAR *secret,
|
||||
@@ -95,6 +96,19 @@ index 198b010..37d6909 100644
|
||||
NTSTATUS WINAPI BCryptDestroyKey( BCRYPT_KEY_HANDLE handle )
|
||||
{
|
||||
struct key *key = handle;
|
||||
diff --git a/dlls/ncrypt/ncrypt.spec b/dlls/ncrypt/ncrypt.spec
|
||||
index 1a78853bf49..b14a332e18f 100644
|
||||
--- a/dlls/ncrypt/ncrypt.spec
|
||||
+++ b/dlls/ncrypt/ncrypt.spec
|
||||
@@ -14,7 +14,7 @@
|
||||
@ stdcall BCryptDestroyKey(ptr) bcrypt.BCryptDestroyKey
|
||||
@ stub BCryptDestroySecret
|
||||
@ stdcall BCryptDuplicateHash(ptr ptr ptr long long) bcrypt.BCryptDuplicateHash
|
||||
-@ stub BCryptDuplicateKey
|
||||
+@ stdcall BCryptDuplicateKey(ptr ptr ptr long long) bcrypt.BCryptDuplicateKey
|
||||
@ stdcall BCryptEncrypt(ptr ptr long ptr ptr long ptr long ptr long) bcrypt.BCryptEncrypt
|
||||
@ stdcall BCryptEnumAlgorithms(long ptr ptr long) bcrypt.BCryptEnumAlgorithms
|
||||
@ stub BCryptEnumContextFunctionProviders
|
||||
--
|
||||
2.9.0
|
||||
2.11.0
|
||||
|
||||
|
@@ -1,132 +0,0 @@
|
||||
From 1b05fa6764dc8eb220ef9dd349801fa2e76914bd Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Sat, 17 Oct 2015 15:38:13 +0200
|
||||
Subject: comctl32/tests: Add tests for PROPSHEET_InsertPage.
|
||||
|
||||
---
|
||||
dlls/comctl32/tests/propsheet.c | 97 ++++++++++++++++++++++++++++++++++++++++-
|
||||
1 file changed, 96 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/comctl32/tests/propsheet.c b/dlls/comctl32/tests/propsheet.c
|
||||
index 6594298..8fdbae8 100644
|
||||
--- a/dlls/comctl32/tests/propsheet.c
|
||||
+++ b/dlls/comctl32/tests/propsheet.c
|
||||
@@ -806,7 +806,7 @@ static void test_PSM_ADDPAGE(void)
|
||||
psp.pfnDlgProc = page_dlg_proc_messages;
|
||||
psp.lParam = 0;
|
||||
|
||||
- /* two page with the same data */
|
||||
+ /* multiple pages with the same data */
|
||||
hpsp[0] = CreatePropertySheetPageA(&psp);
|
||||
hpsp[1] = CreatePropertySheetPageA(&psp);
|
||||
hpsp[2] = CreatePropertySheetPageA(&psp);
|
||||
@@ -878,6 +878,100 @@ if (0)
|
||||
DestroyWindow(hdlg);
|
||||
}
|
||||
|
||||
+static void test_PSM_INSERTPAGE(void)
|
||||
+{
|
||||
+ HPROPSHEETPAGE hpsp[5];
|
||||
+ PROPSHEETPAGEA psp;
|
||||
+ PROPSHEETHEADERA psh;
|
||||
+ HWND hdlg, tab;
|
||||
+ BOOL ret;
|
||||
+ DWORD r;
|
||||
+
|
||||
+ memset(&psp, 0, sizeof(psp));
|
||||
+ psp.dwSize = sizeof(psp);
|
||||
+ psp.dwFlags = 0;
|
||||
+ psp.hInstance = GetModuleHandleA(NULL);
|
||||
+ U(psp).pszTemplate = (LPCSTR)MAKEINTRESOURCE(IDD_PROP_PAGE_MESSAGE_TEST);
|
||||
+ U2(psp).pszIcon = NULL;
|
||||
+ psp.pfnDlgProc = page_dlg_proc_messages;
|
||||
+ psp.lParam = 0;
|
||||
+
|
||||
+ /* multiple pages with the same data */
|
||||
+ hpsp[0] = CreatePropertySheetPageA(&psp);
|
||||
+ hpsp[1] = CreatePropertySheetPageA(&psp);
|
||||
+ hpsp[2] = CreatePropertySheetPageA(&psp);
|
||||
+
|
||||
+ U(psp).pszTemplate = (LPCSTR)MAKEINTRESOURCE(IDD_PROP_PAGE_ERROR);
|
||||
+ hpsp[3] = CreatePropertySheetPageA(&psp);
|
||||
+
|
||||
+ psp.dwFlags = PSP_PREMATURE;
|
||||
+ hpsp[4] = CreatePropertySheetPageA(&psp);
|
||||
+
|
||||
+ memset(&psh, 0, sizeof(psh));
|
||||
+ psh.dwSize = PROPSHEETHEADERA_V1_SIZE;
|
||||
+ psh.dwFlags = PSH_MODELESS;
|
||||
+ psh.pszCaption = "test caption";
|
||||
+ psh.nPages = 1;
|
||||
+ psh.hwndParent = GetDesktopWindow();
|
||||
+ U3(psh).phpage = hpsp;
|
||||
+
|
||||
+ hdlg = (HWND)PropertySheetA(&psh);
|
||||
+ ok(hdlg != INVALID_HANDLE_VALUE, "got invalid handle %p\n", hdlg);
|
||||
+
|
||||
+ /* add pages one by one */
|
||||
+ ret = SendMessageA(hdlg, PSM_INSERTPAGE, 5, (LPARAM)hpsp[1]);
|
||||
+ todo_wine ok(ret == TRUE, "got %d\n", ret);
|
||||
+
|
||||
+ /* try with invalid values */
|
||||
+ ret = SendMessageA(hdlg, PSM_INSERTPAGE, 0, 0);
|
||||
+ ok(ret == FALSE, "got %d\n", ret);
|
||||
+
|
||||
+if (0)
|
||||
+{
|
||||
+ /* crashes on native */
|
||||
+ ret = SendMessageA(hdlg, PSM_INSERTPAGE, 0, (LPARAM)INVALID_HANDLE_VALUE);
|
||||
+}
|
||||
+
|
||||
+ ret = SendMessageA(hdlg, PSM_INSERTPAGE, (WPARAM)INVALID_HANDLE_VALUE, (LPARAM)hpsp[2]);
|
||||
+ ok(ret == FALSE, "got %d\n", ret);
|
||||
+
|
||||
+ /* check item count */
|
||||
+ tab = (HWND)SendMessageA(hdlg, PSM_GETTABCONTROL, 0, 0);
|
||||
+
|
||||
+ r = SendMessageA(tab, TCM_GETITEMCOUNT, 0, 0);
|
||||
+ todo_wine ok(r == 2, "got %d\n", r);
|
||||
+
|
||||
+ ret = SendMessageA(hdlg, PSM_INSERTPAGE, (WPARAM)hpsp[1], (LPARAM)hpsp[2]);
|
||||
+ todo_wine ok(ret == TRUE, "got %d\n", ret);
|
||||
+
|
||||
+ r = SendMessageA(tab, TCM_GETITEMCOUNT, 0, 0);
|
||||
+ todo_wine ok(r == 3, "got %d\n", r);
|
||||
+
|
||||
+ /* add property sheet page that can't be created */
|
||||
+ ret = SendMessageA(hdlg, PSM_INSERTPAGE, 1, (LPARAM)hpsp[3]);
|
||||
+ todo_wine ok(ret == TRUE, "got %d\n", ret);
|
||||
+
|
||||
+ r = SendMessageA(tab, TCM_GETITEMCOUNT, 0, 0);
|
||||
+ todo_wine ok(r == 4, "got %d\n", r);
|
||||
+
|
||||
+ /* select page that can't be created */
|
||||
+ ret = SendMessageA(hdlg, PSM_SETCURSEL, 1, 0);
|
||||
+ todo_wine ok(ret == TRUE, "got %d\n", ret);
|
||||
+
|
||||
+ r = SendMessageA(tab, TCM_GETITEMCOUNT, 0, 0);
|
||||
+ todo_wine ok(r == 3, "got %d\n", r);
|
||||
+
|
||||
+ /* test PSP_PREMATURE flag with incorrect property sheet page */
|
||||
+ ret = SendMessageA(hdlg, PSM_INSERTPAGE, 0, (LPARAM)hpsp[4]);
|
||||
+ ok(ret == FALSE, "got %d\n", ret);
|
||||
+
|
||||
+ r = SendMessageA(tab, TCM_GETITEMCOUNT, 0, 0);
|
||||
+ todo_wine ok(r == 3, "got %d\n", r);
|
||||
+
|
||||
+ DestroyPropertySheetPage(hpsp[4]);
|
||||
+ DestroyWindow(hdlg);
|
||||
+}
|
||||
+
|
||||
START_TEST(propsheet)
|
||||
{
|
||||
test_title();
|
||||
@@ -888,4 +982,5 @@ START_TEST(propsheet)
|
||||
test_custom_default_button();
|
||||
test_messages();
|
||||
test_PSM_ADDPAGE();
|
||||
+ test_PSM_INSERTPAGE();
|
||||
}
|
||||
--
|
||||
2.6.2
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,174 @@
|
||||
From 06cf41da9e0aeb09d3753132262d1b0e1207cd7f Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Thu, 19 Jan 2017 16:54:42 +0100
|
||||
Subject: wined3d: Add wined3d_resource_map_info function.
|
||||
|
||||
---
|
||||
dlls/wined3d/buffer.c | 19 +++++++++++++++++++
|
||||
dlls/wined3d/resource.c | 8 ++++++++
|
||||
dlls/wined3d/texture.c | 31 +++++++++++++++++++++++++++++++
|
||||
dlls/wined3d/wined3d.spec | 1 +
|
||||
dlls/wined3d/wined3d_private.h | 2 ++
|
||||
include/wine/wined3d.h | 9 +++++++++
|
||||
6 files changed, 70 insertions(+)
|
||||
|
||||
diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c
|
||||
index 6883b4010a0..1924752a421 100644
|
||||
--- a/dlls/wined3d/buffer.c
|
||||
+++ b/dlls/wined3d/buffer.c
|
||||
@@ -1405,6 +1405,24 @@ static HRESULT buffer_resource_sub_resource_map(struct wined3d_resource *resourc
|
||||
return wined3d_buffer_map(buffer, offset, size, (BYTE **)&map_desc->data, flags);
|
||||
}
|
||||
|
||||
+static HRESULT buffer_resource_sub_resource_map_info(struct wined3d_resource *resource, unsigned int sub_resource_idx,
|
||||
+ struct wined3d_map_info *info, DWORD flags)
|
||||
+{
|
||||
+ struct wined3d_buffer *buffer = buffer_from_resource(resource);
|
||||
+
|
||||
+ if (sub_resource_idx)
|
||||
+ {
|
||||
+ WARN("Invalid sub_resource_idx %u.\n", sub_resource_idx);
|
||||
+ return E_INVALIDARG;
|
||||
+ }
|
||||
+
|
||||
+ info->row_pitch = buffer->desc.byte_width;
|
||||
+ info->slice_pitch = buffer->desc.byte_width;
|
||||
+ info->size = buffer->resource.size;
|
||||
+
|
||||
+ return WINED3D_OK;
|
||||
+}
|
||||
+
|
||||
static HRESULT buffer_resource_sub_resource_unmap(struct wined3d_resource *resource, unsigned int sub_resource_idx)
|
||||
{
|
||||
if (sub_resource_idx)
|
||||
@@ -1424,6 +1442,7 @@ static const struct wined3d_resource_ops buffer_resource_ops =
|
||||
buffer_resource_preload,
|
||||
buffer_unload,
|
||||
buffer_resource_sub_resource_map,
|
||||
+ buffer_resource_sub_resource_map_info,
|
||||
buffer_resource_sub_resource_unmap,
|
||||
};
|
||||
|
||||
diff --git a/dlls/wined3d/resource.c b/dlls/wined3d/resource.c
|
||||
index ab64de07f41..51da49077ed 100644
|
||||
--- a/dlls/wined3d/resource.c
|
||||
+++ b/dlls/wined3d/resource.c
|
||||
@@ -359,6 +359,14 @@ HRESULT CDECL wined3d_resource_map(struct wined3d_resource *resource, unsigned i
|
||||
return wined3d_cs_map(resource->device->cs, resource, sub_resource_idx, map_desc, box, flags);
|
||||
}
|
||||
|
||||
+HRESULT CDECL wined3d_resource_map_info(struct wined3d_resource *resource, unsigned int sub_resource_idx,
|
||||
+ struct wined3d_map_info *info, DWORD flags)
|
||||
+{
|
||||
+ TRACE("resource %p, sub_resource_idx %u.\n", resource, sub_resource_idx);
|
||||
+
|
||||
+ return resource->resource_ops->resource_map_info(resource, sub_resource_idx, info, flags);
|
||||
+}
|
||||
+
|
||||
HRESULT CDECL wined3d_resource_unmap(struct wined3d_resource *resource, unsigned int sub_resource_idx)
|
||||
{
|
||||
TRACE("resource %p, sub_resource_idx %u.\n", resource, sub_resource_idx);
|
||||
diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c
|
||||
index 8d5e37a4949..be301420858 100644
|
||||
--- a/dlls/wined3d/texture.c
|
||||
+++ b/dlls/wined3d/texture.c
|
||||
@@ -2194,6 +2194,36 @@ static HRESULT texture_resource_sub_resource_map(struct wined3d_resource *resour
|
||||
return WINED3D_OK;
|
||||
}
|
||||
|
||||
+static HRESULT texture_resource_sub_resource_map_info(struct wined3d_resource *resource, unsigned int sub_resource_idx,
|
||||
+ struct wined3d_map_info *info, DWORD flags)
|
||||
+{
|
||||
+ const struct wined3d_format *format = resource->format;
|
||||
+ struct wined3d_texture_sub_resource *sub_resource;
|
||||
+ unsigned int fmt_flags = resource->format_flags;
|
||||
+ struct wined3d_texture *texture;
|
||||
+ unsigned int texture_level;
|
||||
+
|
||||
+ texture = texture_from_resource(resource);
|
||||
+ if (!(sub_resource = wined3d_texture_get_sub_resource(texture, sub_resource_idx)))
|
||||
+ return E_INVALIDARG;
|
||||
+
|
||||
+ texture_level = sub_resource_idx % texture->level_count;
|
||||
+
|
||||
+ if (fmt_flags & WINED3DFMT_FLAG_BROKEN_PITCH)
|
||||
+ {
|
||||
+ info->row_pitch = wined3d_texture_get_level_width(texture, texture_level) * format->byte_count;
|
||||
+ info->slice_pitch = wined3d_texture_get_level_height(texture, texture_level) * info->row_pitch;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ wined3d_texture_get_pitch(texture, texture_level, &info->row_pitch, &info->slice_pitch);
|
||||
+ }
|
||||
+
|
||||
+ info->size = info->slice_pitch * wined3d_texture_get_level_depth(texture, texture_level);
|
||||
+
|
||||
+ return WINED3D_OK;
|
||||
+}
|
||||
+
|
||||
static HRESULT texture_resource_sub_resource_unmap(struct wined3d_resource *resource, unsigned int sub_resource_idx)
|
||||
{
|
||||
struct wined3d_texture_sub_resource *sub_resource;
|
||||
@@ -2253,6 +2283,7 @@ static const struct wined3d_resource_ops texture_resource_ops =
|
||||
texture_resource_preload,
|
||||
wined3d_texture_unload,
|
||||
texture_resource_sub_resource_map,
|
||||
+ texture_resource_sub_resource_map_info,
|
||||
texture_resource_sub_resource_unmap,
|
||||
};
|
||||
|
||||
diff --git a/dlls/wined3d/wined3d.spec b/dlls/wined3d/wined3d.spec
|
||||
index 05df9f3db7e..e51380304b1 100644
|
||||
--- a/dlls/wined3d/wined3d.spec
|
||||
+++ b/dlls/wined3d/wined3d.spec
|
||||
@@ -187,6 +187,7 @@
|
||||
@ cdecl wined3d_resource_get_parent(ptr)
|
||||
@ cdecl wined3d_resource_get_priority(ptr)
|
||||
@ cdecl wined3d_resource_map(ptr long ptr ptr long)
|
||||
+@ cdecl wined3d_resource_map_info(ptr long ptr long)
|
||||
@ cdecl wined3d_resource_preload(ptr)
|
||||
@ cdecl wined3d_resource_set_parent(ptr ptr)
|
||||
@ cdecl wined3d_resource_set_priority(ptr long)
|
||||
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
|
||||
index ff61d9d872b..65f95004b44 100644
|
||||
--- a/dlls/wined3d/wined3d_private.h
|
||||
+++ b/dlls/wined3d/wined3d_private.h
|
||||
@@ -2639,6 +2639,8 @@ struct wined3d_resource_ops
|
||||
void (*resource_unload)(struct wined3d_resource *resource);
|
||||
HRESULT (*resource_sub_resource_map)(struct wined3d_resource *resource, unsigned int sub_resource_idx,
|
||||
struct wined3d_map_desc *map_desc, const struct wined3d_box *box, DWORD flags);
|
||||
+ HRESULT (*resource_map_info)(struct wined3d_resource *resource, unsigned int sub_resource_idx,
|
||||
+ struct wined3d_map_info *info, DWORD flags);
|
||||
HRESULT (*resource_sub_resource_unmap)(struct wined3d_resource *resource, unsigned int sub_resource_idx);
|
||||
};
|
||||
|
||||
diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h
|
||||
index 8c8fbcbe7e5..fff39e2fa0f 100644
|
||||
--- a/include/wine/wined3d.h
|
||||
+++ b/include/wine/wined3d.h
|
||||
@@ -1746,6 +1746,13 @@ struct wined3d_map_desc
|
||||
void *data;
|
||||
};
|
||||
|
||||
+struct wined3d_map_info
|
||||
+{
|
||||
+ UINT row_pitch;
|
||||
+ UINT slice_pitch;
|
||||
+ UINT size;
|
||||
+};
|
||||
+
|
||||
struct wined3d_sub_resource_data
|
||||
{
|
||||
const void *data;
|
||||
@@ -2431,6 +2438,8 @@ void * __cdecl wined3d_resource_get_parent(const struct wined3d_resource *resour
|
||||
DWORD __cdecl wined3d_resource_get_priority(const struct wined3d_resource *resource);
|
||||
HRESULT __cdecl wined3d_resource_map(struct wined3d_resource *resource, unsigned int sub_resource_idx,
|
||||
struct wined3d_map_desc *map_desc, const struct wined3d_box *box, DWORD flags);
|
||||
+HRESULT __cdecl wined3d_resource_map_info(struct wined3d_resource *resource, unsigned int sub_resource_idx,
|
||||
+ struct wined3d_map_info *info, DWORD flags);
|
||||
void __cdecl wined3d_resource_preload(struct wined3d_resource *resource);
|
||||
void __cdecl wined3d_resource_set_parent(struct wined3d_resource *resource, void *parent);
|
||||
DWORD __cdecl wined3d_resource_set_priority(struct wined3d_resource *resource, DWORD priority);
|
||||
--
|
||||
2.11.0
|
||||
|
File diff suppressed because it is too large
Load Diff
1
patches/d3d11-Deferred_Context/definition
Normal file
1
patches/d3d11-Deferred_Context/definition
Normal file
@@ -0,0 +1 @@
|
||||
Fixes: Add semi-stub for D3D11 deferred context implementation
|
@@ -0,0 +1,41 @@
|
||||
From d16a0f5f4bde197dbdda7b61d8c6b69bbc9be128 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Sat, 21 Jan 2017 22:43:12 +0100
|
||||
Subject: d3d11: Implement ResolveSubresource by copying sub resource (there is
|
||||
no multisample texture support yet).
|
||||
|
||||
---
|
||||
dlls/d3d11/device.c | 14 +++++++++++++-
|
||||
1 file changed, 13 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/d3d11/device.c b/dlls/d3d11/device.c
|
||||
index 777146d717e..9ad2b2ecaa5 100644
|
||||
--- a/dlls/d3d11/device.c
|
||||
+++ b/dlls/d3d11/device.c
|
||||
@@ -1120,10 +1120,22 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_ResolveSubresource(ID3D11D
|
||||
ID3D11Resource *src_resource, UINT src_subresource_idx,
|
||||
DXGI_FORMAT format)
|
||||
{
|
||||
- FIXME("iface %p, dst_resource %p, dst_subresource_idx %u, src_resource %p, src_subresource_idx %u, "
|
||||
+ struct d3d_device *device = device_from_immediate_ID3D11DeviceContext(iface);
|
||||
+ struct wined3d_resource *wined3d_dst_resource, *wined3d_src_resource;
|
||||
+
|
||||
+ TRACE("iface %p, dst_resource %p, dst_subresource_idx %u, src_resource %p, src_subresource_idx %u, "
|
||||
"format %s stub!\n",
|
||||
iface, dst_resource, dst_subresource_idx, src_resource, src_subresource_idx,
|
||||
debug_dxgi_format(format));
|
||||
+
|
||||
+ wined3d_dst_resource = wined3d_resource_from_d3d11_resource(dst_resource);
|
||||
+ wined3d_src_resource = wined3d_resource_from_d3d11_resource(src_resource);
|
||||
+
|
||||
+ /* Multisampled textures are not supported yet, so simply copy the sub resource */
|
||||
+ wined3d_mutex_lock();
|
||||
+ wined3d_device_copy_sub_resource_region(device->wined3d_device, wined3d_dst_resource, dst_subresource_idx,
|
||||
+ 0, 0, 0, wined3d_src_resource, src_subresource_idx, NULL);
|
||||
+ wined3d_mutex_unlock();
|
||||
}
|
||||
|
||||
static void STDMETHODCALLTYPE d3d11_immediate_context_ExecuteCommandList(ID3D11DeviceContext *iface,
|
||||
--
|
||||
2.11.0
|
||||
|
1
patches/d3d11-ResolveSubresource/definition
Normal file
1
patches/d3d11-ResolveSubresource/definition
Normal file
@@ -0,0 +1 @@
|
||||
Fixes: Implement semi-stub for d3d11 context ResolveSubresource method.
|
@@ -0,0 +1,58 @@
|
||||
From 5c5620766e4e3be85bdec4aab689b9f5b42b2f2b Mon Sep 17 00:00:00 2001
|
||||
From: Matteo Bruni <mbruni@codeweavers.com>
|
||||
Date: Wed, 18 Jan 2017 21:35:28 +0100
|
||||
Subject: d3d9: Fix DrawIndexedPrimitiveUP with non-zero min_vertex_idx.
|
||||
|
||||
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com>
|
||||
---
|
||||
dlls/d3d9/device.c | 14 ++++++--------
|
||||
1 file changed, 6 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/dlls/d3d9/device.c b/dlls/d3d9/device.c
|
||||
index e0bc5859c61..e646cb76c76 100644
|
||||
--- a/dlls/d3d9/device.c
|
||||
+++ b/dlls/d3d9/device.c
|
||||
@@ -2485,18 +2485,16 @@ static HRESULT WINAPI d3d9_device_DrawIndexedPrimitiveUP(IDirect3DDevice9Ex *ifa
|
||||
UINT primitive_count, const void *index_data, D3DFORMAT index_format,
|
||||
const void *vertex_data, UINT vertex_stride)
|
||||
{
|
||||
- struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface);
|
||||
- HRESULT hr;
|
||||
UINT idx_count = vertex_count_from_primitive_count(primitive_type, primitive_count);
|
||||
+ struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface);
|
||||
UINT idx_fmt_size = index_format == D3DFMT_INDEX16 ? 2 : 4;
|
||||
+ UINT vtx_size = vertex_count * vertex_stride;
|
||||
UINT idx_size = idx_count * idx_fmt_size;
|
||||
struct wined3d_map_desc wined3d_map_desc;
|
||||
struct wined3d_box wined3d_box = {0};
|
||||
struct wined3d_resource *ib, *vb;
|
||||
- UINT ib_pos;
|
||||
-
|
||||
- UINT vtx_size = vertex_count * vertex_stride;
|
||||
- UINT vb_pos, align;
|
||||
+ UINT vb_pos, ib_pos, align;
|
||||
+ HRESULT hr;
|
||||
|
||||
TRACE("iface %p, primitive_type %#x, min_vertex_idx %u, vertex_count %u, primitive_count %u, "
|
||||
"index_data %p, index_format %#x, vertex_data %p, vertex_stride %u.\n",
|
||||
@@ -2536,7 +2534,7 @@ static HRESULT WINAPI d3d9_device_DrawIndexedPrimitiveUP(IDirect3DDevice9Ex *ifa
|
||||
if (FAILED(hr = wined3d_resource_map(vb, 0, &wined3d_map_desc, &wined3d_box,
|
||||
vb_pos ? WINED3D_MAP_NOOVERWRITE : WINED3D_MAP_DISCARD)))
|
||||
goto done;
|
||||
- memcpy(wined3d_map_desc.data, vertex_data, vtx_size);
|
||||
+ memcpy(wined3d_map_desc.data, (char *)vertex_data + min_vertex_idx * vertex_stride, vtx_size);
|
||||
wined3d_resource_unmap(vb, 0);
|
||||
device->vertex_buffer_pos = vb_pos + vtx_size;
|
||||
|
||||
@@ -2568,7 +2566,7 @@ static HRESULT WINAPI d3d9_device_DrawIndexedPrimitiveUP(IDirect3DDevice9Ex *ifa
|
||||
|
||||
wined3d_device_set_index_buffer(device->wined3d_device, device->index_buffer,
|
||||
wined3dformat_from_d3dformat(index_format), 0);
|
||||
- wined3d_device_set_base_vertex_index(device->wined3d_device, vb_pos / vertex_stride);
|
||||
+ wined3d_device_set_base_vertex_index(device->wined3d_device, vb_pos / vertex_stride - min_vertex_idx);
|
||||
|
||||
wined3d_device_set_primitive_type(device->wined3d_device, primitive_type);
|
||||
hr = wined3d_device_draw_indexed_primitive(device->wined3d_device, ib_pos / idx_fmt_size, idx_count);
|
||||
--
|
||||
2.11.0
|
||||
|
@@ -0,0 +1,58 @@
|
||||
From 6ab43f9745b48a8646b54c1a072a07ddd96e333b Mon Sep 17 00:00:00 2001
|
||||
From: Matteo Bruni <mbruni@codeweavers.com>
|
||||
Date: Wed, 18 Jan 2017 21:35:29 +0100
|
||||
Subject: d3d8: Fix DrawIndexedPrimitiveUP with non-zero min_vertex_idx.
|
||||
|
||||
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com>
|
||||
---
|
||||
dlls/d3d8/device.c | 14 ++++++--------
|
||||
1 file changed, 6 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/dlls/d3d8/device.c b/dlls/d3d8/device.c
|
||||
index 43b8e2be4bb..805694b8536 100644
|
||||
--- a/dlls/d3d8/device.c
|
||||
+++ b/dlls/d3d8/device.c
|
||||
@@ -2124,18 +2124,16 @@ static HRESULT WINAPI d3d8_device_DrawIndexedPrimitiveUP(IDirect3DDevice8 *iface
|
||||
UINT primitive_count, const void *index_data, D3DFORMAT index_format,
|
||||
const void *vertex_data, UINT vertex_stride)
|
||||
{
|
||||
- struct d3d8_device *device = impl_from_IDirect3DDevice8(iface);
|
||||
- HRESULT hr;
|
||||
UINT idx_count = vertex_count_from_primitive_count(primitive_type, primitive_count);
|
||||
+ struct d3d8_device *device = impl_from_IDirect3DDevice8(iface);
|
||||
UINT idx_fmt_size = index_format == D3DFMT_INDEX16 ? 2 : 4;
|
||||
+ UINT vtx_size = vertex_count * vertex_stride;
|
||||
UINT idx_size = idx_count * idx_fmt_size;
|
||||
struct wined3d_map_desc wined3d_map_desc;
|
||||
struct wined3d_box wined3d_box = {0};
|
||||
struct wined3d_resource *ib, *vb;
|
||||
- UINT ib_pos;
|
||||
-
|
||||
- UINT vtx_size = vertex_count * vertex_stride;
|
||||
- UINT vb_pos, align;
|
||||
+ UINT vb_pos, ib_pos, align;
|
||||
+ HRESULT hr;
|
||||
|
||||
TRACE("iface %p, primitive_type %#x, min_vertex_idx %u, vertex_count %u, primitive_count %u, "
|
||||
"index_data %p, index_format %#x, vertex_data %p, vertex_stride %u.\n",
|
||||
@@ -2168,7 +2166,7 @@ static HRESULT WINAPI d3d8_device_DrawIndexedPrimitiveUP(IDirect3DDevice8 *iface
|
||||
if (FAILED(hr = wined3d_resource_map(vb, 0, &wined3d_map_desc, &wined3d_box,
|
||||
vb_pos ? WINED3D_MAP_NOOVERWRITE : WINED3D_MAP_DISCARD)))
|
||||
goto done;
|
||||
- memcpy(wined3d_map_desc.data, vertex_data, vtx_size);
|
||||
+ memcpy(wined3d_map_desc.data, (char *)vertex_data + min_vertex_idx * vertex_stride, vtx_size);
|
||||
wined3d_resource_unmap(vb, 0);
|
||||
device->vertex_buffer_pos = vb_pos + vtx_size;
|
||||
|
||||
@@ -2200,7 +2198,7 @@ static HRESULT WINAPI d3d8_device_DrawIndexedPrimitiveUP(IDirect3DDevice8 *iface
|
||||
|
||||
wined3d_device_set_index_buffer(device->wined3d_device, device->index_buffer,
|
||||
wined3dformat_from_d3dformat(index_format), 0);
|
||||
- wined3d_device_set_base_vertex_index(device->wined3d_device, vb_pos / vertex_stride);
|
||||
+ wined3d_device_set_base_vertex_index(device->wined3d_device, vb_pos / vertex_stride - min_vertex_idx);
|
||||
|
||||
wined3d_device_set_primitive_type(device->wined3d_device, primitive_type);
|
||||
hr = wined3d_device_draw_indexed_primitive(device->wined3d_device, ib_pos / idx_fmt_size, idx_count);
|
||||
--
|
||||
2.11.0
|
||||
|
@@ -0,0 +1,123 @@
|
||||
From c50f96ff6353cc65ed3e39b43fd7e46cf2678c69 Mon Sep 17 00:00:00 2001
|
||||
From: Matteo Bruni <mbruni@codeweavers.com>
|
||||
Date: Wed, 18 Jan 2017 21:35:30 +0100
|
||||
Subject: d3d9/tests: Add a test for DrawIndexedPrimitiveUP().
|
||||
|
||||
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com>
|
||||
---
|
||||
dlls/d3d9/tests/visual.c | 94 ++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 94 insertions(+)
|
||||
|
||||
diff --git a/dlls/d3d9/tests/visual.c b/dlls/d3d9/tests/visual.c
|
||||
index a1064127d5a..be544f3b5c7 100644
|
||||
--- a/dlls/d3d9/tests/visual.c
|
||||
+++ b/dlls/d3d9/tests/visual.c
|
||||
@@ -22244,6 +22244,99 @@ done:
|
||||
DestroyWindow(window);
|
||||
}
|
||||
|
||||
+static void test_drawindexedprimitiveup(void)
|
||||
+{
|
||||
+ static const struct vertex
|
||||
+ {
|
||||
+ struct vec3 position;
|
||||
+ DWORD diffuse;
|
||||
+ }
|
||||
+ quad[] =
|
||||
+ {
|
||||
+ {{-1.0f, -1.0f, 0.1f}, 0xff00ff00},
|
||||
+ {{-1.0f, 1.0f, 0.1f}, 0xff0000ff},
|
||||
+ {{ 1.0f, -1.0f, 0.1f}, 0xffff0000},
|
||||
+ {{ 1.0f, 1.0f, 0.1f}, 0xff0000ff},
|
||||
+
|
||||
+ {{-1.0f, -1.0f, 0.1f}, 0xff0000ff},
|
||||
+ {{-1.0f, 1.0f, 0.1f}, 0xff00ff00},
|
||||
+ {{ 1.0f, -1.0f, 0.1f}, 0xffff0000},
|
||||
+ {{ 1.0f, 1.0f, 0.1f}, 0xff00ff00},
|
||||
+ };
|
||||
+ static const unsigned short indices[] = {0, 1, 2, 3, 4, 5, 6, 7};
|
||||
+ IDirect3DDevice9 *device;
|
||||
+ IDirect3D9 *d3d;
|
||||
+ ULONG refcount;
|
||||
+ D3DCOLOR color;
|
||||
+ HWND window;
|
||||
+ HRESULT hr;
|
||||
+
|
||||
+ window = create_window();
|
||||
+ d3d = Direct3DCreate9(D3D_SDK_VERSION);
|
||||
+ ok(!!d3d, "Failed to create a D3D object.\n");
|
||||
+
|
||||
+ if (!(device = create_device(d3d, window, window, TRUE)))
|
||||
+ {
|
||||
+ skip("Failed to create a D3D device.\n");
|
||||
+ IDirect3D9_Release(d3d);
|
||||
+ DestroyWindow(window);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ hr = IDirect3DDevice9_SetRenderState(device, D3DRS_CLIPPING, FALSE);
|
||||
+ ok(SUCCEEDED(hr), "Failed to disable clipping, hr %#x.\n", hr);
|
||||
+ hr = IDirect3DDevice9_SetRenderState(device, D3DRS_ZENABLE, FALSE);
|
||||
+ ok(SUCCEEDED(hr), "Failed to disable Z test, hr %#x.\n", hr);
|
||||
+ hr = IDirect3DDevice9_SetRenderState(device, D3DRS_LIGHTING, FALSE);
|
||||
+ ok(SUCCEEDED(hr), "Failed to disable lighting, hr %#x.\n", hr);
|
||||
+
|
||||
+ hr = IDirect3DDevice9_SetFVF(device, D3DFVF_XYZ | D3DFVF_DIFFUSE);
|
||||
+ ok(SUCCEEDED(hr), "Failed to set FVF, hr %#x.\n", hr);
|
||||
+
|
||||
+ hr = IDirect3DDevice9_Clear(device, 0, NULL, D3DCLEAR_TARGET, 0xffffffff, 0.0f, 0);
|
||||
+ ok(SUCCEEDED(hr), "Failed to clear, hr %#x.\n", hr);
|
||||
+
|
||||
+ hr = IDirect3DDevice9_BeginScene(device);
|
||||
+ ok(SUCCEEDED(hr), "Failed to begin scene, hr %#x.\n", hr);
|
||||
+ hr = IDirect3DDevice9_DrawIndexedPrimitiveUP(device, D3DPT_TRIANGLESTRIP, 4, 4, 2, indices + 4, D3DFMT_INDEX16, quad, sizeof(*quad));
|
||||
+ ok(SUCCEEDED(hr), "Failed to draw, hr %#x.\n", hr);
|
||||
+ hr = IDirect3DDevice9_EndScene(device);
|
||||
+ ok(SUCCEEDED(hr), "Failed to end scene, hr %#x.\n", hr);
|
||||
+
|
||||
+ color = getPixelColor(device, 160, 120);
|
||||
+ ok(color_match(color, 0x0040bf00, 1), "Got unexpected color 0x%08x.\n", color);
|
||||
+ color = getPixelColor(device, 480, 120);
|
||||
+ ok(color_match(color, 0x0040bf00, 1), "Got unexpected color 0x%08x.\n", color);
|
||||
+ color = getPixelColor(device, 160, 360);
|
||||
+ ok(color_match(color, 0x00404080, 1), "Got unexpected color 0x%08x.\n", color);
|
||||
+ color = getPixelColor(device, 480, 360);
|
||||
+ ok(color_match(color, 0x00bf4000, 1), "Got unexpected color 0x%08x.\n", color);
|
||||
+
|
||||
+ hr = IDirect3DDevice9_Clear(device, 0, NULL, D3DCLEAR_TARGET, 0xffffffff, 0.0f, 0);
|
||||
+ ok(SUCCEEDED(hr), "Failed to clear, hr %#x.\n", hr);
|
||||
+
|
||||
+ hr = IDirect3DDevice9_BeginScene(device);
|
||||
+ ok(SUCCEEDED(hr), "Failed to begin scene, hr %#x.\n", hr);
|
||||
+ hr = IDirect3DDevice9_DrawIndexedPrimitiveUP(device, D3DPT_TRIANGLESTRIP, 0, 4, 2, indices, D3DFMT_INDEX16, quad, sizeof(*quad));
|
||||
+ ok(SUCCEEDED(hr), "Failed to draw, hr %#x.\n", hr);
|
||||
+ hr = IDirect3DDevice9_EndScene(device);
|
||||
+ ok(SUCCEEDED(hr), "Failed to end scene, hr %#x.\n", hr);
|
||||
+
|
||||
+ color = getPixelColor(device, 160, 120);
|
||||
+ ok(color_match(color, 0x004000bf, 1), "Got unexpected color 0x%08x.\n", color);
|
||||
+ color = getPixelColor(device, 480, 120);
|
||||
+ ok(color_match(color, 0x004000bf, 1), "Got unexpected color 0x%08x.\n", color);
|
||||
+ color = getPixelColor(device, 160, 360);
|
||||
+ ok(color_match(color, 0x00408040, 1), "Got unexpected color 0x%08x.\n", color);
|
||||
+ color = getPixelColor(device, 480, 360);
|
||||
+ ok(color_match(color, 0x00bf0040, 1), "Got unexpected color 0x%08x.\n", color);
|
||||
+
|
||||
+ refcount = IDirect3DDevice9_Release(device);
|
||||
+ ok(!refcount, "Device has %u references left.\n", refcount);
|
||||
+ IDirect3D9_Release(d3d);
|
||||
+ DestroyWindow(window);
|
||||
+}
|
||||
+
|
||||
START_TEST(visual)
|
||||
{
|
||||
D3DADAPTER_IDENTIFIER9 identifier;
|
||||
@@ -22372,4 +22465,5 @@ START_TEST(visual)
|
||||
test_evict_bound_resources();
|
||||
test_max_index16();
|
||||
test_backbuffer_resize();
|
||||
+ test_drawindexedprimitiveup();
|
||||
}
|
||||
--
|
||||
2.11.0
|
||||
|
@@ -0,0 +1,132 @@
|
||||
From 38c67dd093a7b64dc3730cf6b919f4bcf31c65f0 Mon Sep 17 00:00:00 2001
|
||||
From: Matteo Bruni <mbruni@codeweavers.com>
|
||||
Date: Wed, 18 Jan 2017 21:35:31 +0100
|
||||
Subject: d3d8/tests: Add a test for DrawIndexedPrimitiveUP().
|
||||
|
||||
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com>
|
||||
---
|
||||
dlls/d3d8/tests/visual.c | 103 +++++++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 103 insertions(+)
|
||||
|
||||
diff --git a/dlls/d3d8/tests/visual.c b/dlls/d3d8/tests/visual.c
|
||||
index c0ecc6a6fa6..57c89171b7d 100644
|
||||
--- a/dlls/d3d8/tests/visual.c
|
||||
+++ b/dlls/d3d8/tests/visual.c
|
||||
@@ -9700,6 +9700,108 @@ done:
|
||||
DestroyWindow(window);
|
||||
}
|
||||
|
||||
+static void test_drawindexedprimitiveup(void)
|
||||
+{
|
||||
+ static const struct vertex
|
||||
+ {
|
||||
+ struct vec3 position;
|
||||
+ DWORD diffuse;
|
||||
+ }
|
||||
+ quad[] =
|
||||
+ {
|
||||
+ {{-1.0f, -1.0f, 0.1f}, 0xff00ff00},
|
||||
+ {{-1.0f, 1.0f, 0.1f}, 0xff0000ff},
|
||||
+ {{ 1.0f, -1.0f, 0.1f}, 0xffff0000},
|
||||
+ {{ 1.0f, 1.0f, 0.1f}, 0xff0000ff},
|
||||
+
|
||||
+ {{-1.0f, -1.0f, 0.1f}, 0xff0000ff},
|
||||
+ {{-1.0f, 1.0f, 0.1f}, 0xff00ff00},
|
||||
+ {{ 1.0f, -1.0f, 0.1f}, 0xffff0000},
|
||||
+ {{ 1.0f, 1.0f, 0.1f}, 0xff00ff00},
|
||||
+ };
|
||||
+ static const unsigned short indices[] = {0, 1, 2, 3, 4, 5, 6, 7};
|
||||
+ IDirect3DDevice8 *device;
|
||||
+ IDirect3D8 *d3d;
|
||||
+ ULONG refcount;
|
||||
+ D3DCOLOR color;
|
||||
+ HWND window;
|
||||
+ HRESULT hr;
|
||||
+
|
||||
+ window = create_window();
|
||||
+ d3d = Direct3DCreate8(D3D_SDK_VERSION);
|
||||
+ ok(!!d3d, "Failed to create a D3D object.\n");
|
||||
+
|
||||
+ if (!(device = create_device(d3d, window, window, TRUE)))
|
||||
+ {
|
||||
+ skip("Failed to create a D3D device.\n");
|
||||
+ IDirect3D8_Release(d3d);
|
||||
+ DestroyWindow(window);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ hr = IDirect3DDevice8_SetRenderState(device, D3DRS_CLIPPING, FALSE);
|
||||
+ ok(SUCCEEDED(hr), "Failed to disable clipping, hr %#x.\n", hr);
|
||||
+ hr = IDirect3DDevice8_SetRenderState(device, D3DRS_ZENABLE, FALSE);
|
||||
+ ok(SUCCEEDED(hr), "Failed to disable Z test, hr %#x.\n", hr);
|
||||
+ hr = IDirect3DDevice8_SetRenderState(device, D3DRS_LIGHTING, FALSE);
|
||||
+ ok(SUCCEEDED(hr), "Failed to disable lighting, hr %#x.\n", hr);
|
||||
+
|
||||
+ hr = IDirect3DDevice8_SetTextureStageState(device, 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
|
||||
+ ok(SUCCEEDED(hr), "Failed to set color op, hr %#x.\n", hr);
|
||||
+ hr = IDirect3DDevice8_SetTextureStageState(device, 0, D3DTSS_COLORARG1, D3DTA_DIFFUSE);
|
||||
+ ok(SUCCEEDED(hr), "Failed to set color arg, hr %#x.\n", hr);
|
||||
+ hr = IDirect3DDevice8_SetTextureStageState(device, 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
|
||||
+ ok(SUCCEEDED(hr), "Failed to set alpha op, hr %#x.\n", hr);
|
||||
+ hr = IDirect3DDevice8_SetTextureStageState(device, 0, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE);
|
||||
+ ok(SUCCEEDED(hr), "Failed to set alpha arg, hr %#x.\n", hr);
|
||||
+
|
||||
+ hr = IDirect3DDevice8_SetVertexShader(device, D3DFVF_XYZ | D3DFVF_DIFFUSE);
|
||||
+ ok(SUCCEEDED(hr), "Failed to set FVF, hr %#x.\n", hr);
|
||||
+
|
||||
+ hr = IDirect3DDevice8_Clear(device, 0, NULL, D3DCLEAR_TARGET, 0xffffffff, 0.0f, 0);
|
||||
+ ok(SUCCEEDED(hr), "Failed to clear, hr %#x.\n", hr);
|
||||
+
|
||||
+ hr = IDirect3DDevice8_BeginScene(device);
|
||||
+ ok(SUCCEEDED(hr), "Failed to begin scene, hr %#x.\n", hr);
|
||||
+ hr = IDirect3DDevice8_DrawIndexedPrimitiveUP(device, D3DPT_TRIANGLESTRIP, 4, 4, 2, indices + 4, D3DFMT_INDEX16, quad, sizeof(*quad));
|
||||
+ ok(SUCCEEDED(hr), "Failed to draw, hr %#x.\n", hr);
|
||||
+ hr = IDirect3DDevice8_EndScene(device);
|
||||
+ ok(SUCCEEDED(hr), "Failed to end scene, hr %#x.\n", hr);
|
||||
+
|
||||
+ color = getPixelColor(device, 160, 120);
|
||||
+ ok(color_match(color, 0x0040bf00, 1), "Got unexpected color 0x%08x.\n", color);
|
||||
+ color = getPixelColor(device, 480, 120);
|
||||
+ ok(color_match(color, 0x0040bf00, 1), "Got unexpected color 0x%08x.\n", color);
|
||||
+ color = getPixelColor(device, 160, 360);
|
||||
+ ok(color_match(color, 0x00404080, 1), "Got unexpected color 0x%08x.\n", color);
|
||||
+ color = getPixelColor(device, 480, 360);
|
||||
+ ok(color_match(color, 0x00bf4000, 1), "Got unexpected color 0x%08x.\n", color);
|
||||
+
|
||||
+ hr = IDirect3DDevice8_Clear(device, 0, NULL, D3DCLEAR_TARGET, 0xffffffff, 0.0f, 0);
|
||||
+ ok(SUCCEEDED(hr), "Failed to clear, hr %#x.\n", hr);
|
||||
+
|
||||
+ hr = IDirect3DDevice8_BeginScene(device);
|
||||
+ ok(SUCCEEDED(hr), "Failed to begin scene, hr %#x.\n", hr);
|
||||
+ hr = IDirect3DDevice8_DrawIndexedPrimitiveUP(device, D3DPT_TRIANGLESTRIP, 0, 4, 2, indices, D3DFMT_INDEX16, quad, sizeof(*quad));
|
||||
+ ok(SUCCEEDED(hr), "Failed to draw, hr %#x.\n", hr);
|
||||
+ hr = IDirect3DDevice8_EndScene(device);
|
||||
+ ok(SUCCEEDED(hr), "Failed to end scene, hr %#x.\n", hr);
|
||||
+
|
||||
+ color = getPixelColor(device, 160, 120);
|
||||
+ ok(color_match(color, 0x004000bf, 1), "Got unexpected color 0x%08x.\n", color);
|
||||
+ color = getPixelColor(device, 480, 120);
|
||||
+ ok(color_match(color, 0x004000bf, 1), "Got unexpected color 0x%08x.\n", color);
|
||||
+ color = getPixelColor(device, 160, 360);
|
||||
+ ok(color_match(color, 0x00408040, 1), "Got unexpected color 0x%08x.\n", color);
|
||||
+ color = getPixelColor(device, 480, 360);
|
||||
+ ok(color_match(color, 0x00bf0040, 1), "Got unexpected color 0x%08x.\n", color);
|
||||
+
|
||||
+ refcount = IDirect3DDevice8_Release(device);
|
||||
+ ok(!refcount, "Device has %u references left.\n", refcount);
|
||||
+ IDirect3D8_Release(d3d);
|
||||
+ DestroyWindow(window);
|
||||
+}
|
||||
+
|
||||
START_TEST(visual)
|
||||
{
|
||||
D3DADAPTER_IDENTIFIER8 identifier;
|
||||
@@ -9770,4 +9872,5 @@ START_TEST(visual)
|
||||
test_edge_antialiasing_blending();
|
||||
test_max_index16();
|
||||
test_backbuffer_resize();
|
||||
+ test_drawindexedprimitiveup();
|
||||
}
|
||||
--
|
||||
2.11.0
|
||||
|
1
patches/d3d9-DrawIndexedPrimitiveUP/definition
Normal file
1
patches/d3d9-DrawIndexedPrimitiveUP/definition
Normal file
@@ -0,0 +1 @@
|
||||
Fixes: [35993] Fix DrawIndexedPrimitiveUP with non-zero min_vertex_idx
|
@@ -1,4 +1,4 @@
|
||||
From 746aa2c81af98e890e4db720783de7fce4bc84d3 Mon Sep 17 00:00:00 2001
|
||||
From bbe000942fadd116e85bd64abd6633fa1d9df382 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Fri, 4 Mar 2016 22:22:42 +0100
|
||||
Subject: ddraw: Set ddsOldCaps correctly in ddraw7_GetCaps.
|
||||
@@ -12,10 +12,10 @@ Subject: ddraw: Set ddsOldCaps correctly in ddraw7_GetCaps.
|
||||
5 files changed, 106 insertions(+)
|
||||
|
||||
diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
|
||||
index 1fa88751efe..5c138a5d726 100644
|
||||
index 8bf38ee930f..01a9a904ef5 100644
|
||||
--- a/dlls/ddraw/ddraw.c
|
||||
+++ b/dlls/ddraw/ddraw.c
|
||||
@@ -1533,6 +1533,8 @@ static HRESULT WINAPI ddraw7_GetCaps(IDirectDraw7 *iface, DDCAPS *DriverCaps, DD
|
||||
@@ -1536,6 +1536,8 @@ static HRESULT WINAPI ddraw7_GetCaps(IDirectDraw7 *iface, DDCAPS *DriverCaps, DD
|
||||
caps.dwCaps |= DDCAPS_ALIGNSTRIDE;
|
||||
caps.dwAlignStrideAlign = DDRAW_STRIDE_ALIGNMENT;
|
||||
|
||||
@@ -25,11 +25,11 @@ index 1fa88751efe..5c138a5d726 100644
|
||||
|
||||
if(DriverCaps)
|
||||
diff --git a/dlls/ddraw/tests/ddraw1.c b/dlls/ddraw/tests/ddraw1.c
|
||||
index 5b153a62a21..762c1074e79 100644
|
||||
index 5acbee61e00..bb873da220f 100644
|
||||
--- a/dlls/ddraw/tests/ddraw1.c
|
||||
+++ b/dlls/ddraw/tests/ddraw1.c
|
||||
@@ -9793,6 +9793,31 @@ static void test_display_mode_surface_pixel_format(void)
|
||||
DestroyWindow(window);
|
||||
@@ -9953,6 +9953,31 @@ static void test_surface_desc_size(void)
|
||||
ok(!refcount, "DirectDraw has %u references left.\n", refcount);
|
||||
}
|
||||
|
||||
+static void test_caps(void)
|
||||
@@ -60,18 +60,18 @@ index 5b153a62a21..762c1074e79 100644
|
||||
START_TEST(ddraw1)
|
||||
{
|
||||
IDirectDraw *ddraw;
|
||||
@@ -9877,4 +9902,5 @@ START_TEST(ddraw1)
|
||||
test_getdc();
|
||||
@@ -10038,4 +10063,5 @@ START_TEST(ddraw1)
|
||||
test_transform_vertices();
|
||||
test_display_mode_surface_pixel_format();
|
||||
test_surface_desc_size();
|
||||
+ test_caps();
|
||||
}
|
||||
diff --git a/dlls/ddraw/tests/ddraw2.c b/dlls/ddraw/tests/ddraw2.c
|
||||
index 422960012af..714d3f0e1a8 100644
|
||||
index dc8801c3e12..9afd5e8e681 100644
|
||||
--- a/dlls/ddraw/tests/ddraw2.c
|
||||
+++ b/dlls/ddraw/tests/ddraw2.c
|
||||
@@ -11247,6 +11247,31 @@ static void test_display_mode_surface_pixel_format(void)
|
||||
DestroyWindow(window);
|
||||
@@ -11444,6 +11444,31 @@ static void test_surface_desc_size(void)
|
||||
ok(!refcount, "DirectDraw has %u references left.\n", refcount);
|
||||
}
|
||||
|
||||
+static void test_caps(void)
|
||||
@@ -102,18 +102,18 @@ index 422960012af..714d3f0e1a8 100644
|
||||
START_TEST(ddraw2)
|
||||
{
|
||||
IDirectDraw2 *ddraw;
|
||||
@@ -11340,4 +11365,5 @@ START_TEST(ddraw2)
|
||||
test_edge_antialiasing_blending();
|
||||
@@ -11538,4 +11563,5 @@ START_TEST(ddraw2)
|
||||
test_transform_vertices();
|
||||
test_display_mode_surface_pixel_format();
|
||||
test_surface_desc_size();
|
||||
+ test_caps();
|
||||
}
|
||||
diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c
|
||||
index e091a6dac5d..70dd79d7a13 100644
|
||||
index f2b3e0cf63b..fbefe8425b3 100644
|
||||
--- a/dlls/ddraw/tests/ddraw4.c
|
||||
+++ b/dlls/ddraw/tests/ddraw4.c
|
||||
@@ -12532,6 +12532,31 @@ static void test_display_mode_surface_pixel_format(void)
|
||||
DestroyWindow(window);
|
||||
@@ -12729,6 +12729,31 @@ static void test_surface_desc_size(void)
|
||||
ok(!refcount, "DirectDraw has %u references left.\n", refcount);
|
||||
}
|
||||
|
||||
+static void test_caps(void)
|
||||
@@ -144,18 +144,18 @@ index e091a6dac5d..70dd79d7a13 100644
|
||||
START_TEST(ddraw4)
|
||||
{
|
||||
IDirectDraw4 *ddraw;
|
||||
@@ -12633,4 +12658,5 @@ START_TEST(ddraw4)
|
||||
test_edge_antialiasing_blending();
|
||||
@@ -12831,4 +12856,5 @@ START_TEST(ddraw4)
|
||||
test_transform_vertices();
|
||||
test_display_mode_surface_pixel_format();
|
||||
test_surface_desc_size();
|
||||
+ test_caps();
|
||||
}
|
||||
diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c
|
||||
index 0b1bdaef6d2..536163e9a5e 100644
|
||||
index 7b88824920e..7957f1733d5 100644
|
||||
--- a/dlls/ddraw/tests/ddraw7.c
|
||||
+++ b/dlls/ddraw/tests/ddraw7.c
|
||||
@@ -12211,6 +12211,31 @@ static void test_display_mode_surface_pixel_format(void)
|
||||
DestroyWindow(window);
|
||||
@@ -12424,6 +12424,31 @@ static void test_surface_desc_size(void)
|
||||
ok(!refcount, "DirectDraw has %u references left.\n", refcount);
|
||||
}
|
||||
|
||||
+static void test_caps(void)
|
||||
@@ -186,10 +186,10 @@ index 0b1bdaef6d2..536163e9a5e 100644
|
||||
START_TEST(ddraw7)
|
||||
{
|
||||
HMODULE module = GetModuleHandleA("ddraw.dll");
|
||||
@@ -12322,4 +12347,5 @@ START_TEST(ddraw7)
|
||||
test_draw_primitive();
|
||||
@@ -12536,4 +12561,5 @@ START_TEST(ddraw7)
|
||||
test_edge_antialiasing_blending();
|
||||
test_display_mode_surface_pixel_format();
|
||||
test_surface_desc_size();
|
||||
+ test_caps();
|
||||
}
|
||||
--
|
||||
|
@@ -1,19 +1,19 @@
|
||||
From 8bd90811a6f9431ffc1a966d76c80fae0ba23171 Mon Sep 17 00:00:00 2001
|
||||
From 269fa9451452446fb3c79cece46b61617f6eb480 Mon Sep 17 00:00:00 2001
|
||||
From: Henri Verbeet <hverbeet@codeweavers.com>
|
||||
Date: Sun, 8 Jan 2017 22:32:32 +0100
|
||||
Subject: ddraw: Implement ddraw7_FlipToGDISurface.
|
||||
Subject: ddraw: Implement ddraw7_FlipToGDISurface. (v2)
|
||||
|
||||
---
|
||||
dlls/ddraw/ddraw.c | 7 ++++++-
|
||||
dlls/ddraw/ddraw.c | 9 ++++++++-
|
||||
dlls/ddraw/ddraw_private.h | 1 +
|
||||
dlls/ddraw/surface.c | 5 +++--
|
||||
3 files changed, 10 insertions(+), 3 deletions(-)
|
||||
3 files changed, 12 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
|
||||
index 6afa6dddcb4..b883770c537 100644
|
||||
index 3b4c628666b..7a313e384ac 100644
|
||||
--- a/dlls/ddraw/ddraw.c
|
||||
+++ b/dlls/ddraw/ddraw.c
|
||||
@@ -2058,7 +2058,12 @@ static HRESULT WINAPI d3d1_Initialize(IDirect3D *iface, REFIID riid)
|
||||
@@ -2061,7 +2061,14 @@ static HRESULT WINAPI d3d1_Initialize(IDirect3D *iface, REFIID riid)
|
||||
*****************************************************************************/
|
||||
static HRESULT WINAPI ddraw7_FlipToGDISurface(IDirectDraw7 *iface)
|
||||
{
|
||||
@@ -23,7 +23,9 @@ index 6afa6dddcb4..b883770c537 100644
|
||||
+ TRACE("iface %p.\n", iface);
|
||||
+
|
||||
+ ddraw->flags |= DDRAW_GDI_FLIP;
|
||||
+ ddraw_surface_update_frontbuffer(ddraw->primary, NULL, FALSE);
|
||||
+
|
||||
+ if (ddraw->primary)
|
||||
+ ddraw_surface_update_frontbuffer(ddraw->primary, NULL, FALSE);
|
||||
|
||||
return DD_OK;
|
||||
}
|
||||
|
@@ -0,0 +1,269 @@
|
||||
From 0a0146b997a9c5d60fea6a4c6367e059241b942b Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?J=C3=B3zef=20Kucia?= <jkucia@codeweavers.com>
|
||||
Date: Tue, 17 Jan 2017 12:26:37 +0100
|
||||
Subject: ddraw: Relax "dwSize" validation in ddraw_surface*_Lock().
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: JĂłzef Kucia <jkucia@codeweavers.com>
|
||||
---
|
||||
dlls/ddraw/ddraw_private.h | 6 +--
|
||||
dlls/ddraw/surface.c | 91 ++++++++++++++++++++++++++--------------------
|
||||
dlls/ddraw/tests/ddraw7.c | 4 --
|
||||
3 files changed, 54 insertions(+), 47 deletions(-)
|
||||
|
||||
diff --git a/dlls/ddraw/ddraw_private.h b/dlls/ddraw/ddraw_private.h
|
||||
index 0dc915cfcb2..a8ac865887d 100644
|
||||
--- a/dlls/ddraw/ddraw_private.h
|
||||
+++ b/dlls/ddraw/ddraw_private.h
|
||||
@@ -628,10 +628,10 @@ struct member_info
|
||||
/* Structure copy */
|
||||
#define ME(x,f,e) { x, #x, (void (*)(const void *))(f), offsetof(STRUCT, e) }
|
||||
|
||||
-#define DD_STRUCT_COPY_BYSIZE_(to,from,from_size) \
|
||||
+#define DD_STRUCT_COPY_BYSIZE_(to,from,to_size,from_size) \
|
||||
do { \
|
||||
DWORD __size = (to)->dwSize; \
|
||||
- DWORD __resetsize = min(__size, sizeof(*to)); \
|
||||
+ DWORD __resetsize = min(to_size, sizeof(*to)); \
|
||||
DWORD __copysize = min(__resetsize, from_size); \
|
||||
assert(to != from); \
|
||||
memcpy(to, from, __copysize); \
|
||||
@@ -639,7 +639,7 @@ struct member_info
|
||||
(to)->dwSize = __size; /* restore size */ \
|
||||
} while (0)
|
||||
|
||||
-#define DD_STRUCT_COPY_BYSIZE(to,from) DD_STRUCT_COPY_BYSIZE_(to,from,(from)->dwSize)
|
||||
+#define DD_STRUCT_COPY_BYSIZE(to,from) DD_STRUCT_COPY_BYSIZE_(to,from,(to)->dwSize,(from)->dwSize)
|
||||
|
||||
HRESULT hr_ddraw_from_wined3d(HRESULT hr) DECLSPEC_HIDDEN;
|
||||
|
||||
diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c
|
||||
index 7d1fc2edd34..cbe1eb7d98f 100644
|
||||
--- a/dlls/ddraw/surface.c
|
||||
+++ b/dlls/ddraw/surface.c
|
||||
@@ -955,14 +955,15 @@ static HRESULT WINAPI ddraw_surface1_GetAttachedSurface(IDirectDrawSurface *ifac
|
||||
*
|
||||
*****************************************************************************/
|
||||
static HRESULT surface_lock(struct ddraw_surface *surface,
|
||||
- RECT *rect, DDSURFACEDESC2 *surface_desc, DWORD flags, HANDLE h)
|
||||
+ RECT *rect, DDSURFACEDESC2 *surface_desc, unsigned int surface_desc_size,
|
||||
+ DWORD flags, HANDLE h)
|
||||
{
|
||||
- struct wined3d_box box;
|
||||
struct wined3d_map_desc map_desc;
|
||||
+ struct wined3d_box box;
|
||||
HRESULT hr = DD_OK;
|
||||
|
||||
- TRACE("surface %p, rect %s, surface_desc %p, flags %#x, h %p.\n",
|
||||
- surface, wine_dbgstr_rect(rect), surface_desc, flags, h);
|
||||
+ TRACE("surface %p, rect %s, surface_desc %p, surface_desc_size %u, flags %#x, h %p.\n",
|
||||
+ surface, wine_dbgstr_rect(rect), surface_desc, surface_desc_size, flags, h);
|
||||
|
||||
/* surface->surface_desc.dwWidth and dwHeight are changeable, thus lock */
|
||||
wined3d_mutex_lock();
|
||||
@@ -1026,7 +1027,7 @@ static HRESULT surface_lock(struct ddraw_surface *surface,
|
||||
}
|
||||
|
||||
/* Windows does not set DDSD_LPSURFACE on locked surfaces. */
|
||||
- DD_STRUCT_COPY_BYSIZE(surface_desc, &surface->surface_desc);
|
||||
+ DD_STRUCT_COPY_BYSIZE_(surface_desc, &surface->surface_desc, surface_desc_size, surface->surface_desc.dwSize);
|
||||
surface_desc->lpSurface = map_desc.data;
|
||||
|
||||
TRACE("locked surface returning description :\n");
|
||||
@@ -1038,63 +1039,80 @@ static HRESULT surface_lock(struct ddraw_surface *surface,
|
||||
return DD_OK;
|
||||
}
|
||||
|
||||
+static BOOL surface_validate_lock_desc(struct ddraw_surface *surface,
|
||||
+ const DDSURFACEDESC *desc, unsigned int *size)
|
||||
+{
|
||||
+ if (!desc)
|
||||
+ return FALSE;
|
||||
+
|
||||
+ if (desc->dwSize == sizeof(DDSURFACEDESC) || desc->dwSize == sizeof(DDSURFACEDESC2))
|
||||
+ {
|
||||
+ *size = desc->dwSize;
|
||||
+ return TRUE;
|
||||
+ }
|
||||
+
|
||||
+ if (surface->version == 7
|
||||
+ && surface->surface_desc.ddsCaps.dwCaps & DDSCAPS_TEXTURE
|
||||
+ && !(surface->surface_desc.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY))
|
||||
+ {
|
||||
+ if (desc->dwSize >= sizeof(DDSURFACEDESC2))
|
||||
+ *size = sizeof(DDSURFACEDESC2);
|
||||
+ else
|
||||
+ *size = sizeof(DDSURFACEDESC);
|
||||
+ return TRUE;
|
||||
+ }
|
||||
+
|
||||
+ WARN("Invalid structure size %u.\n", desc->dwSize);
|
||||
+ return FALSE;
|
||||
+}
|
||||
+
|
||||
static HRESULT WINAPI ddraw_surface7_Lock(IDirectDrawSurface7 *iface,
|
||||
RECT *rect, DDSURFACEDESC2 *surface_desc, DWORD flags, HANDLE h)
|
||||
{
|
||||
struct ddraw_surface *surface = impl_from_IDirectDrawSurface7(iface);
|
||||
+ unsigned int surface_desc_size;
|
||||
|
||||
TRACE("iface %p, rect %s, surface_desc %p, flags %#x, h %p.\n",
|
||||
iface, wine_dbgstr_rect(rect), surface_desc, flags, h);
|
||||
|
||||
- if (!surface_desc) return DDERR_INVALIDPARAMS;
|
||||
- if (surface_desc->dwSize != sizeof(DDSURFACEDESC) &&
|
||||
- surface_desc->dwSize != sizeof(DDSURFACEDESC2))
|
||||
- {
|
||||
- WARN("Invalid structure size %d, returning DDERR_INVALIDPARAMS\n", surface_desc->dwSize);
|
||||
+ if (!surface_validate_lock_desc(surface, (DDSURFACEDESC *)surface_desc, &surface_desc_size))
|
||||
return DDERR_INVALIDPARAMS;
|
||||
- }
|
||||
- return surface_lock(surface, rect, surface_desc, flags, h);
|
||||
+
|
||||
+ return surface_lock(surface, rect, surface_desc, surface_desc_size, flags, h);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI ddraw_surface4_Lock(IDirectDrawSurface4 *iface, RECT *rect,
|
||||
DDSURFACEDESC2 *surface_desc, DWORD flags, HANDLE h)
|
||||
{
|
||||
struct ddraw_surface *surface = impl_from_IDirectDrawSurface4(iface);
|
||||
+ unsigned int surface_desc_size;
|
||||
|
||||
TRACE("iface %p, rect %s, surface_desc %p, flags %#x, h %p.\n",
|
||||
iface, wine_dbgstr_rect(rect), surface_desc, flags, h);
|
||||
|
||||
- if (!surface_desc) return DDERR_INVALIDPARAMS;
|
||||
- if (surface_desc->dwSize != sizeof(DDSURFACEDESC) &&
|
||||
- surface_desc->dwSize != sizeof(DDSURFACEDESC2))
|
||||
- {
|
||||
- WARN("Invalid structure size %d, returning DDERR_INVALIDPARAMS\n", surface_desc->dwSize);
|
||||
+ if (!surface_validate_lock_desc(surface, (DDSURFACEDESC *)surface_desc, &surface_desc_size))
|
||||
return DDERR_INVALIDPARAMS;
|
||||
- }
|
||||
- return surface_lock(surface, rect, surface_desc, flags, h);
|
||||
+
|
||||
+ return surface_lock(surface, rect, surface_desc, surface_desc_size, flags, h);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI ddraw_surface3_Lock(IDirectDrawSurface3 *iface, RECT *rect,
|
||||
DDSURFACEDESC *surface_desc, DWORD flags, HANDLE h)
|
||||
{
|
||||
struct ddraw_surface *surface = impl_from_IDirectDrawSurface3(iface);
|
||||
+ unsigned int surface_desc_size;
|
||||
DDSURFACEDESC2 surface_desc2;
|
||||
HRESULT hr;
|
||||
|
||||
TRACE("iface %p, rect %s, surface_desc %p, flags %#x, h %p.\n",
|
||||
iface, wine_dbgstr_rect(rect), surface_desc, flags, h);
|
||||
|
||||
- if (!surface_desc) return DDERR_INVALIDPARAMS;
|
||||
- if (surface_desc->dwSize != sizeof(DDSURFACEDESC) &&
|
||||
- surface_desc->dwSize != sizeof(DDSURFACEDESC2))
|
||||
- {
|
||||
- WARN("Invalid structure size %d, returning DDERR_INVALIDPARAMS\n", surface_desc->dwSize);
|
||||
+ if (!surface_validate_lock_desc(surface, surface_desc, &surface_desc_size))
|
||||
return DDERR_INVALIDPARAMS;
|
||||
- }
|
||||
|
||||
surface_desc2.dwSize = surface_desc->dwSize;
|
||||
surface_desc2.dwFlags = 0;
|
||||
- hr = surface_lock(surface, rect, &surface_desc2, flags, h);
|
||||
+ hr = surface_lock(surface, rect, &surface_desc2, surface_desc_size, flags, h);
|
||||
DDSD2_to_DDSD(&surface_desc2, surface_desc);
|
||||
surface_desc->dwSize = surface_desc2.dwSize;
|
||||
return hr;
|
||||
@@ -1104,23 +1122,19 @@ static HRESULT WINAPI ddraw_surface2_Lock(IDirectDrawSurface2 *iface, RECT *rect
|
||||
DDSURFACEDESC *surface_desc, DWORD flags, HANDLE h)
|
||||
{
|
||||
struct ddraw_surface *surface = impl_from_IDirectDrawSurface2(iface);
|
||||
+ unsigned int surface_desc_size;
|
||||
DDSURFACEDESC2 surface_desc2;
|
||||
HRESULT hr;
|
||||
|
||||
TRACE("iface %p, rect %s, surface_desc %p, flags %#x, h %p.\n",
|
||||
iface, wine_dbgstr_rect(rect), surface_desc, flags, h);
|
||||
|
||||
- if (!surface_desc) return DDERR_INVALIDPARAMS;
|
||||
- if (surface_desc->dwSize != sizeof(DDSURFACEDESC) &&
|
||||
- surface_desc->dwSize != sizeof(DDSURFACEDESC2))
|
||||
- {
|
||||
- WARN("Invalid structure size %d, returning DDERR_INVALIDPARAMS\n", surface_desc->dwSize);
|
||||
+ if (!surface_validate_lock_desc(surface, surface_desc, &surface_desc_size))
|
||||
return DDERR_INVALIDPARAMS;
|
||||
- }
|
||||
|
||||
surface_desc2.dwSize = surface_desc->dwSize;
|
||||
surface_desc2.dwFlags = 0;
|
||||
- hr = surface_lock(surface, rect, &surface_desc2, flags, h);
|
||||
+ hr = surface_lock(surface, rect, &surface_desc2, surface_desc_size, flags, h);
|
||||
DDSD2_to_DDSD(&surface_desc2, surface_desc);
|
||||
surface_desc->dwSize = surface_desc2.dwSize;
|
||||
return hr;
|
||||
@@ -1130,22 +1144,19 @@ static HRESULT WINAPI ddraw_surface1_Lock(IDirectDrawSurface *iface, RECT *rect,
|
||||
DDSURFACEDESC *surface_desc, DWORD flags, HANDLE h)
|
||||
{
|
||||
struct ddraw_surface *surface = impl_from_IDirectDrawSurface(iface);
|
||||
+ unsigned int surface_desc_size;
|
||||
DDSURFACEDESC2 surface_desc2;
|
||||
HRESULT hr;
|
||||
+
|
||||
TRACE("iface %p, rect %s, surface_desc %p, flags %#x, h %p.\n",
|
||||
iface, wine_dbgstr_rect(rect), surface_desc, flags, h);
|
||||
|
||||
- if (!surface_desc) return DDERR_INVALIDPARAMS;
|
||||
- if (surface_desc->dwSize != sizeof(DDSURFACEDESC) &&
|
||||
- surface_desc->dwSize != sizeof(DDSURFACEDESC2))
|
||||
- {
|
||||
- WARN("Invalid structure size %d, returning DDERR_INVALIDPARAMS\n", surface_desc->dwSize);
|
||||
+ if (!surface_validate_lock_desc(surface, surface_desc, &surface_desc_size))
|
||||
return DDERR_INVALIDPARAMS;
|
||||
- }
|
||||
|
||||
surface_desc2.dwSize = surface_desc->dwSize;
|
||||
surface_desc2.dwFlags = 0;
|
||||
- hr = surface_lock(surface, rect, &surface_desc2, flags, h);
|
||||
+ hr = surface_lock(surface, rect, &surface_desc2, surface_desc_size, flags, h);
|
||||
DDSD2_to_DDSD(&surface_desc2, surface_desc);
|
||||
surface_desc->dwSize = surface_desc2.dwSize;
|
||||
return hr;
|
||||
diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c
|
||||
index 7957f1733d5..bc35ae78199 100644
|
||||
--- a/dlls/ddraw/tests/ddraw7.c
|
||||
+++ b/dlls/ddraw/tests/ddraw7.c
|
||||
@@ -5909,7 +5909,6 @@ static void test_surface_lock(void)
|
||||
expected_hr = tests[i].caps & DDSCAPS_TEXTURE && !(tests[i].caps & DDSCAPS_VIDEOMEMORY)
|
||||
? DD_OK : DDERR_INVALIDPARAMS;
|
||||
hr = IDirectDrawSurface7_Lock(surface, NULL, &ddsd, DDLOCK_WAIT, NULL);
|
||||
- todo_wine_if(expected_hr == D3D_OK)
|
||||
ok(hr == expected_hr, "Got hr %#x, expected %#x, type %s.\n", hr, expected_hr, tests[i].name);
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
@@ -12340,7 +12339,6 @@ static void test_surface_desc_size(void)
|
||||
desc.blob[sizeof(DDSURFACEDESC2)] = 0xef;
|
||||
hr = IDirectDrawSurface_Lock(surface, NULL, &desc.desc1, 0, 0);
|
||||
expected_hr = ignore_size || valid_size ? DD_OK : DDERR_INVALIDPARAMS;
|
||||
- todo_wine_if(ignore_size && !valid_size)
|
||||
ok(hr == expected_hr, "Got hr %#x, expected %#x, dwSize %u, type %s.\n",
|
||||
hr, expected_hr, desc_sizes[j], surface_caps[i].name);
|
||||
ok(desc.dwSize == desc_sizes[j], "dwSize was changed from %u to %u, type %s.\n",
|
||||
@@ -12367,7 +12365,6 @@ static void test_surface_desc_size(void)
|
||||
desc.blob[sizeof(DDSURFACEDESC2)] = 0xef;
|
||||
hr = IDirectDrawSurface3_Lock(surface3, NULL, &desc.desc1, 0, 0);
|
||||
expected_hr = ignore_size || valid_size ? DD_OK : DDERR_INVALIDPARAMS;
|
||||
- todo_wine_if(ignore_size && !valid_size)
|
||||
ok(hr == expected_hr, "Got hr %#x, expected %#x, dwSize %u, type %s.\n",
|
||||
hr, expected_hr, desc_sizes[j], surface_caps[i].name);
|
||||
ok(desc.dwSize == desc_sizes[j], "dwSize was changed from %u to %u, type %s.\n",
|
||||
@@ -12394,7 +12391,6 @@ static void test_surface_desc_size(void)
|
||||
desc.blob[sizeof(DDSURFACEDESC2)] = 0xef;
|
||||
hr = IDirectDrawSurface7_Lock(surface7, NULL, &desc.desc2, 0, 0);
|
||||
expected_hr = ignore_size || valid_size ? DD_OK : DDERR_INVALIDPARAMS;
|
||||
- todo_wine_if(ignore_size && !valid_size)
|
||||
ok(hr == expected_hr, "Got hr %#x, expected %#x, dwSize %u, type %s.\n",
|
||||
hr, expected_hr, desc_sizes[j], surface_caps[i].name);
|
||||
ok(desc.dwSize == desc_sizes[j], "dwSize was changed from %u to %u, type %s.\n",
|
||||
--
|
||||
2.11.0
|
||||
|
1
patches/ddraw-Relax_dwSize_Validation/definition
Normal file
1
patches/ddraw-Relax_dwSize_Validation/definition
Normal file
@@ -0,0 +1 @@
|
||||
Fixes: [14897] Relax dwSize validation ddraw_surface*_Lock
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user