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
54 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
18f7125892 | ||
|
f993930ee6 | ||
|
2a9e87abea | ||
|
af97ec8ce0 | ||
|
b14430433d | ||
|
f9d1798edb | ||
|
e5da84dc36 | ||
|
75c7644c3d | ||
|
7c7868f4bb | ||
|
d1a8b6bc14 | ||
|
53b02cd0ee | ||
|
36b8b8cc65 | ||
|
13536af59c | ||
|
a6f3bd989e | ||
|
0830db32cd | ||
|
cd7d77fe36 | ||
|
2e9977f4ac | ||
|
a1246b5e92 | ||
|
676dd02663 | ||
|
648db00708 | ||
|
6bfaa3b0a5 | ||
|
cbf7f73313 | ||
|
c896e5cb69 | ||
|
4d65ec9456 | ||
|
d14250ab03 | ||
|
789f5c7c64 | ||
|
69cb47fd36 | ||
|
8450903b5c | ||
|
ffe93505d2 | ||
|
5213d551f8 | ||
|
e61a75f75f | ||
|
7428dd8656 | ||
|
40e84b052b | ||
|
92b2688a74 | ||
|
f7eec766a5 | ||
|
b4e0277488 | ||
|
f54b943bca | ||
|
6138369b4f | ||
|
59fe96c14c | ||
|
afdf5020ff | ||
|
2fc5c88068 | ||
|
ad3de029e7 | ||
|
4ff3984c49 | ||
|
deeaa04aa4 | ||
|
592b853fe4 | ||
|
26f14c2ddd | ||
|
57204d77d9 | ||
|
37e000145f | ||
|
d68ab574f5 | ||
|
469cbe7ed8 | ||
|
1fe141dd3e | ||
|
a3b99d730d | ||
|
de7c2faf80 | ||
|
8b2fd051c9 |
@@ -1,4 +1,4 @@
|
||||
From c07a490a6950f4efe563e38ca78b1aa459dfad86 Mon Sep 17 00:00:00 2001
|
||||
From df12fdb8d4cdf11d9f72a068923a5b0097e36bdb Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Wed, 28 May 2014 19:50:51 +0200
|
||||
Subject: [PATCH] loader: Add commandline option --check-libs.
|
||||
@@ -12,7 +12,7 @@ Subject: [PATCH] loader: Add commandline option --check-libs.
|
||||
5 files changed, 213 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/include/wine/library.h b/include/wine/library.h
|
||||
index 511bf4722..557cec20c 100644
|
||||
index 511bf4722a0..557cec20cf8 100644
|
||||
--- a/include/wine/library.h
|
||||
+++ b/include/wine/library.h
|
||||
@@ -44,6 +44,7 @@ extern "C" {
|
||||
@@ -32,7 +32,7 @@ index 511bf4722..557cec20c 100644
|
||||
extern void *wine_dlsym( void *handle, const char *symbol, char *error, size_t errorsize );
|
||||
extern int wine_dlclose( void *handle, char *error, size_t errorsize );
|
||||
diff --git a/libs/wine/config.c b/libs/wine/config.c
|
||||
index 5b66c063d..e0988513e 100644
|
||||
index 5b66c063db6..e0988513e14 100644
|
||||
--- a/libs/wine/config.c
|
||||
+++ b/libs/wine/config.c
|
||||
@@ -470,6 +470,130 @@ const char *wine_get_build_dir(void)
|
||||
@@ -167,7 +167,7 @@ index 5b66c063d..e0988513e 100644
|
||||
const char *wine_get_server_dir(void)
|
||||
{
|
||||
diff --git a/libs/wine/loader.c b/libs/wine/loader.c
|
||||
index 2a569f5b7..5f10c3f9d 100644
|
||||
index 2a569f5b739..5f10c3f9d3e 100644
|
||||
--- a/libs/wine/loader.c
|
||||
+++ b/libs/wine/loader.c
|
||||
@@ -1072,6 +1072,42 @@ void *wine_dlopen( const char *filename, int flag, char *error, size_t errorsize
|
||||
@@ -214,7 +214,7 @@ index 2a569f5b7..5f10c3f9d 100644
|
||||
* wine_dlsym
|
||||
*/
|
||||
diff --git a/libs/wine/wine.map b/libs/wine/wine.map
|
||||
index ca46979f5..22a4e73b0 100644
|
||||
index ca46979f5b9..22a4e73b05b 100644
|
||||
--- a/libs/wine/wine.map
|
||||
+++ b/libs/wine/wine.map
|
||||
@@ -9,6 +9,7 @@ WINE_1.0
|
||||
@@ -234,7 +234,7 @@ index ca46979f5..22a4e73b0 100644
|
||||
wine_get_ss;
|
||||
wine_get_user_name;
|
||||
diff --git a/loader/main.c b/loader/main.c
|
||||
index f6629128d..a2dc40c51 100644
|
||||
index d97d6b28bf8..49dc996e354 100644
|
||||
--- a/loader/main.c
|
||||
+++ b/loader/main.c
|
||||
@@ -36,6 +36,12 @@
|
||||
@@ -247,10 +247,10 @@ index f6629128d..a2dc40c51 100644
|
||||
+#ifdef HAVE_LINK_H
|
||||
+# include <link.h>
|
||||
+#endif
|
||||
#include <pthread.h>
|
||||
|
||||
#include "wine/library.h"
|
||||
@@ -55,7 +61,8 @@ static void check_command_line( int argc, char *argv[] )
|
||||
#include "main.h"
|
||||
@@ -54,7 +60,8 @@ static void check_command_line( int argc, char *argv[] )
|
||||
"Usage: wine PROGRAM [ARGUMENTS...] Run the specified program\n"
|
||||
" wine --help Display this help and exit\n"
|
||||
" wine --version Output version information and exit\n"
|
||||
@@ -260,7 +260,7 @@ index f6629128d..a2dc40c51 100644
|
||||
|
||||
if (argc <= 1)
|
||||
{
|
||||
@@ -111,6 +118,47 @@ static void check_command_line( int argc, char *argv[] )
|
||||
@@ -110,6 +117,47 @@ static void check_command_line( int argc, char *argv[] )
|
||||
|
||||
exit(0);
|
||||
}
|
||||
@@ -309,5 +309,5 @@ index f6629128d..a2dc40c51 100644
|
||||
|
||||
|
||||
--
|
||||
2.25.0
|
||||
2.25.1
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,149 @@
|
||||
From d0c4ac467f5e85e29ae407b29b6a93c85f375fd3 Mon Sep 17 00:00:00 2001
|
||||
From: Derek Lesho <dlesho@codeweavers.com>
|
||||
Date: Tue, 7 Jan 2020 14:22:49 -0600
|
||||
Subject: [PATCH] bcrypt: Implement BCRYPT_KDF_HASH.
|
||||
|
||||
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47699
|
||||
Signed-off-by: Derek Lesho <dlesho at codeweavers.com>
|
||||
---
|
||||
dlls/bcrypt/bcrypt_main.c | 110 +++++++++++++++++++++++++++++++++++++
|
||||
dlls/bcrypt/tests/bcrypt.c | 2 +-
|
||||
2 files changed, 111 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/bcrypt/bcrypt_main.c b/dlls/bcrypt/bcrypt_main.c
|
||||
index 15b934247d..57d552a4c0 100644
|
||||
--- a/dlls/bcrypt/bcrypt_main.c
|
||||
+++ b/dlls/bcrypt/bcrypt_main.c
|
||||
@@ -1773,6 +1773,116 @@ NTSTATUS WINAPI BCryptDeriveKey(BCRYPT_SECRET_HANDLE hSecret, LPCWSTR deriv_func
|
||||
return STATUS_INVALID_HANDLE;
|
||||
}
|
||||
|
||||
+ if (flags)
|
||||
+ {
|
||||
+ FIXME("flags ignored: %08x\n", flags);
|
||||
+ }
|
||||
+
|
||||
+ if (!(strcmpW(deriv_func, BCRYPT_KDF_HASH)))
|
||||
+ {
|
||||
+ unsigned int i;
|
||||
+ BCryptBuffer *hash_algorithm = NULL;
|
||||
+ BCryptBuffer *secret_prepend = NULL;
|
||||
+ BCryptBuffer *secret_append = NULL;
|
||||
+ enum alg_id hash_alg_id;
|
||||
+ ULONG hash_length;
|
||||
+ struct hash_impl hash;
|
||||
+ NTSTATUS status;
|
||||
+
|
||||
+ if (parameter)
|
||||
+ {
|
||||
+ for (i = 0; i < parameter->cBuffers; i++)
|
||||
+ {
|
||||
+ BCryptBuffer *cur_buffer = ¶meter->pBuffers[i];
|
||||
+ switch(cur_buffer->BufferType)
|
||||
+ {
|
||||
+ case KDF_HASH_ALGORITHM:
|
||||
+ if (hash_algorithm)
|
||||
+ FIXME("Duplicate KDF_HASH_ALGORITHM, untested\n");
|
||||
+ hash_algorithm = cur_buffer;
|
||||
+ break;
|
||||
+ case KDF_SECRET_PREPEND:
|
||||
+ if (secret_prepend)
|
||||
+ FIXME("Multiple prefixes unsupported\n");
|
||||
+ secret_prepend = cur_buffer;
|
||||
+ break;
|
||||
+ case KDF_SECRET_APPEND:
|
||||
+ if (secret_append)
|
||||
+ FIXME("Multiple suffixes unsupported\n");
|
||||
+ secret_append = cur_buffer;
|
||||
+ break;
|
||||
+ default:
|
||||
+ FIXME("Unsupported BCRYPT_KDF_HASH parameter type %x\n", cur_buffer->BufferType);
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (!(hash_algorithm))
|
||||
+ hash_alg_id = ALG_ID_SHA1;
|
||||
+ else
|
||||
+ {
|
||||
+ for (i = 0; i < ARRAY_SIZE( builtin_algorithms ); i++)
|
||||
+ {
|
||||
+ if (!strcmpW( hash_algorithm->pvBuffer, builtin_algorithms[i].name))
|
||||
+ {
|
||||
+ hash_alg_id = i;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ if (i == ARRAY_SIZE(builtin_algorithms))
|
||||
+ {
|
||||
+ WARN("Algorithm %s not found\n", debugstr_w(hash_algorithm->pvBuffer));
|
||||
+ return STATUS_NOT_SUPPORTED;
|
||||
+ }
|
||||
+ if (builtin_algorithms[hash_alg_id].class != BCRYPT_HASH_INTERFACE)
|
||||
+ {
|
||||
+ return STATUS_NOT_SUPPORTED;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ hash_length = builtin_algorithms[hash_alg_id].hash_length;
|
||||
+
|
||||
+ if (!derived)
|
||||
+ {
|
||||
+ *result = hash_length;
|
||||
+ return STATUS_SUCCESS;
|
||||
+ }
|
||||
+
|
||||
+ if ((status = hash_init(&hash, hash_alg_id)))
|
||||
+ {
|
||||
+ return status;
|
||||
+ }
|
||||
+
|
||||
+ if (secret_prepend)
|
||||
+ {
|
||||
+ hash_update(&hash, hash_alg_id, secret_prepend->pvBuffer, secret_prepend->cbBuffer);
|
||||
+ }
|
||||
+
|
||||
+ hash_update(&hash, hash_alg_id, secret->data, secret->len);
|
||||
+
|
||||
+ if (secret_append)
|
||||
+ {
|
||||
+ hash_update(&hash, hash_alg_id, secret_append->pvBuffer, secret_append->cbBuffer);
|
||||
+ }
|
||||
+
|
||||
+ if (derived_size >= hash_length)
|
||||
+ {
|
||||
+ hash_finish(&hash, hash_alg_id, derived, derived_size);
|
||||
+ *result = hash_length;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ UCHAR *output = heap_alloc(hash_length);
|
||||
+ hash_finish(&hash, hash_alg_id, output, hash_length);
|
||||
+ memcpy(derived, output, derived_size);
|
||||
+ heap_free(output);
|
||||
+ *result = derived_size;
|
||||
+ }
|
||||
+
|
||||
+ return STATUS_SUCCESS;
|
||||
+ }
|
||||
+ else
|
||||
if (!(strcmpW(deriv_func, BCRYPT_KDF_RAW_SECRET)))
|
||||
{
|
||||
ULONG n;
|
||||
diff --git a/dlls/bcrypt/tests/bcrypt.c b/dlls/bcrypt/tests/bcrypt.c
|
||||
index d9509f2c49..edc59a8a97 100644
|
||||
--- a/dlls/bcrypt/tests/bcrypt.c
|
||||
+++ b/dlls/bcrypt/tests/bcrypt.c
|
||||
@@ -2084,7 +2084,7 @@ static void test_ECDH(void)
|
||||
raw_secret_end:
|
||||
|
||||
status = pBCryptDeriveKey(secret, BCRYPT_KDF_HASH, &hash_params, NULL, 0, &size, 0);
|
||||
- todo_wine ok (status == STATUS_SUCCESS, "got %08x\n", status);
|
||||
+ ok (status == STATUS_SUCCESS, "got %08x\n", status);
|
||||
|
||||
if (status != STATUS_SUCCESS)
|
||||
{
|
||||
--
|
||||
2.24.1
|
||||
|
2
patches/bcrypt-ECDHSecretAgreement/definition
Normal file
2
patches/bcrypt-ECDHSecretAgreement/definition
Normal file
@@ -0,0 +1,2 @@
|
||||
Fixes: [47699] Multiple games fail to connect to online services (missing BCryptSecretAgreement / BCryptDeriveKey implementation)
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From ad23e816eb724d81032306f8ac6d4faa96ccaf4a Mon Sep 17 00:00:00 2001
|
||||
From 3a94f82a0cf783abf7c7d17335914bed3c6791bb Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Timoshkov <dmitry@baikal.ru>
|
||||
Date: Tue, 12 Nov 2019 18:13:20 +0800
|
||||
Subject: [PATCH] comctl32: Bump version to 6.0.
|
||||
@@ -40,7 +40,7 @@ index c9aa1ba6253..be6e2425193 100644
|
||||
#define WINE_PRODUCTVERSION_STR WINE_FILEVERSION_STR
|
||||
|
||||
diff --git a/include/commctrl.h b/include/commctrl.h
|
||||
index 700b335fbb7..029a4b45457 100644
|
||||
index dfd2f4a37d2..0784478ce14 100644
|
||||
--- a/include/commctrl.h
|
||||
+++ b/include/commctrl.h
|
||||
@@ -51,7 +51,7 @@ enum _LI_METRIC
|
||||
@@ -50,8 +50,8 @@ index 700b335fbb7..029a4b45457 100644
|
||||
-#define COMCTL32_VERSION 5 /* dll version */
|
||||
+#define COMCTL32_VERSION 6 /* dll version */
|
||||
|
||||
#ifndef _WIN32_IE
|
||||
#define _WIN32_IE 0x0400
|
||||
#define ICC_LISTVIEW_CLASSES 0x00000001 /* listview, header */
|
||||
#define ICC_TREEVIEW_CLASSES 0x00000002 /* treeview, tooltips */
|
||||
--
|
||||
2.24.1
|
||||
2.25.1
|
||||
|
||||
|
@@ -1,333 +0,0 @@
|
||||
From b1655e88c9c7b4b87ae87d06261ce3db4fac1432 Mon Sep 17 00:00:00 2001
|
||||
From: Christian Costa <titan.costa@gmail.com>
|
||||
Date: Sun, 26 May 2013 19:42:08 +0200
|
||||
Subject: [PATCH] d3dx9_36: Implement ID3DXFontImpl_DrawText.
|
||||
|
||||
Changes by Sebastian Lackner <sebastian@fds-team.de>:
|
||||
* Use pitch value for locked buffer instead of assuming that pitch = width * bytesperpixel
|
||||
* Avoid one for loop to simplify code
|
||||
* Ensure that DrawText doesn't dereference a NULL pointer when count != 0.
|
||||
|
||||
Changes by Christian Costa <titan.costa@gmail.com>
|
||||
* Use dedicated variables for text width & height instead of reusing rect.right and rect.bottom
|
||||
* Remove useless test in pixel conversion
|
||||
* Remove left over 'partial stub' in fixme
|
||||
|
||||
Changes by Sebastian Lackner <sebastian@fds-team.de>:
|
||||
* Replace code to convert text from ascii to widechar
|
||||
* Strip terminating NULL chars before drawing text
|
||||
---
|
||||
dlls/d3dx9_36/font.c | 229 ++++++++++++++++++++++++++++++++++++++++++++++-----
|
||||
1 file changed, 210 insertions(+), 19 deletions(-)
|
||||
|
||||
diff --git a/dlls/d3dx9_36/font.c b/dlls/d3dx9_36/font.c
|
||||
index 5522dea..916ce4c 100644
|
||||
--- a/dlls/d3dx9_36/font.c
|
||||
+++ b/dlls/d3dx9_36/font.c
|
||||
@@ -35,8 +35,29 @@ struct d3dx_font
|
||||
|
||||
HDC hdc;
|
||||
HFONT hfont;
|
||||
+
|
||||
+ UINT tex_width;
|
||||
+ UINT tex_height;
|
||||
+ IDirect3DTexture9 *texture;
|
||||
+ HBITMAP bitmap;
|
||||
+ BYTE *bits;
|
||||
};
|
||||
|
||||
+/* Returns the smallest power of 2 which is greater than or equal to num */
|
||||
+static UINT make_pow2(UINT num)
|
||||
+{
|
||||
+ UINT result = 1;
|
||||
+
|
||||
+ /* In the unlikely event somebody passes a large value, make sure we don't enter an infinite loop */
|
||||
+ if (num >= 0x80000000)
|
||||
+ return 0x80000000;
|
||||
+
|
||||
+ while (result < num)
|
||||
+ result <<= 1;
|
||||
+
|
||||
+ return result;
|
||||
+}
|
||||
+
|
||||
static inline struct d3dx_font *impl_from_ID3DXFont(ID3DXFont *iface)
|
||||
{
|
||||
return CONTAINING_RECORD(iface, struct d3dx_font, ID3DXFont_iface);
|
||||
@@ -63,19 +84,27 @@ static HRESULT WINAPI ID3DXFontImpl_QueryInterface(ID3DXFont *iface, REFIID riid
|
||||
static ULONG WINAPI ID3DXFontImpl_AddRef(ID3DXFont *iface)
|
||||
{
|
||||
struct d3dx_font *This = impl_from_ID3DXFont(iface);
|
||||
- ULONG ref=InterlockedIncrement(&This->ref);
|
||||
+ ULONG ref = InterlockedIncrement(&This->ref);
|
||||
+
|
||||
TRACE("%p increasing refcount to %u\n", iface, ref);
|
||||
+
|
||||
return ref;
|
||||
}
|
||||
|
||||
static ULONG WINAPI ID3DXFontImpl_Release(ID3DXFont *iface)
|
||||
{
|
||||
struct d3dx_font *This = impl_from_ID3DXFont(iface);
|
||||
- ULONG ref=InterlockedDecrement(&This->ref);
|
||||
+ ULONG ref = InterlockedDecrement(&This->ref);
|
||||
|
||||
TRACE("%p decreasing refcount to %u\n", iface, ref);
|
||||
|
||||
- if(ref==0) {
|
||||
+ if (!ref)
|
||||
+ {
|
||||
+ if (This->texture)
|
||||
+ {
|
||||
+ IDirect3DTexture9_Release(This->texture);
|
||||
+ DeleteObject(This->bitmap);
|
||||
+ }
|
||||
DeleteObject(This->hfont);
|
||||
DeleteDC(This->hdc);
|
||||
IDirect3DDevice9_Release(This->device);
|
||||
@@ -178,17 +207,170 @@ static HRESULT WINAPI ID3DXFontImpl_PreloadTextW(ID3DXFont *iface, const WCHAR *
|
||||
static INT WINAPI ID3DXFontImpl_DrawTextA(ID3DXFont *iface, ID3DXSprite *sprite,
|
||||
const char *string, INT count, RECT *rect, DWORD format, D3DCOLOR color)
|
||||
{
|
||||
- FIXME("iface %p, sprite %p, string %s, count %d, rect %s, format %#x, color 0x%08x stub!\n",
|
||||
+ LPWSTR stringW;
|
||||
+ INT countW, ret = 0;
|
||||
+
|
||||
+ TRACE("iface %p, sprite %p, string %s, count %d, rect %s, format %#x, color 0x%08x\n",
|
||||
iface, sprite, debugstr_a(string), count, wine_dbgstr_rect(rect), format, color);
|
||||
- return 1;
|
||||
+
|
||||
+ if (!string || count <= 0)
|
||||
+ return 0;
|
||||
+
|
||||
+ countW = MultiByteToWideChar(CP_ACP, 0, string, count, NULL, 0);
|
||||
+ stringW = HeapAlloc(GetProcessHeap(), 0, countW * sizeof(WCHAR));
|
||||
+ if (stringW)
|
||||
+ {
|
||||
+ MultiByteToWideChar(CP_ACP, 0, string, count, stringW, countW);
|
||||
+ ret = ID3DXFont_DrawTextW(iface, sprite, stringW, countW, rect, format, color);
|
||||
+ HeapFree(GetProcessHeap(), 0, stringW);
|
||||
+ }
|
||||
+
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
static INT WINAPI ID3DXFontImpl_DrawTextW(ID3DXFont *iface, ID3DXSprite *sprite,
|
||||
const WCHAR *string, INT count, RECT *rect, DWORD format, D3DCOLOR color)
|
||||
{
|
||||
- FIXME("iface %p, sprite %p, string %s, count %d, rect %s, format %#x, color 0x%08x stub!\n",
|
||||
+ struct d3dx_font *This = impl_from_ID3DXFont(iface);
|
||||
+ RECT calc_rect = *rect;
|
||||
+ INT height;
|
||||
+
|
||||
+ TRACE("iface %p, sprite %p, string %s, count %d, rect %s, format %#x, color 0x%08x\n",
|
||||
iface, sprite, debugstr_w(string), count, wine_dbgstr_rect(rect), format, color);
|
||||
- return 1;
|
||||
+
|
||||
+ if (!string || count <= 0)
|
||||
+ return 0;
|
||||
+
|
||||
+ /* Strip terminating NULL characters */
|
||||
+ while (count > 0 && !string[count-1])
|
||||
+ count--;
|
||||
+
|
||||
+ height = DrawTextW(This->hdc, string, count, &calc_rect, format | DT_CALCRECT);
|
||||
+
|
||||
+ if (format & DT_CALCRECT)
|
||||
+ {
|
||||
+ *rect = calc_rect;
|
||||
+ return height;
|
||||
+ }
|
||||
+
|
||||
+ if (height && (calc_rect.left < calc_rect.right))
|
||||
+ {
|
||||
+ D3DLOCKED_RECT locked_rect;
|
||||
+ D3DXVECTOR3 position;
|
||||
+ UINT text_width, text_height;
|
||||
+ RECT text_rect;
|
||||
+ ID3DXSprite *target = sprite;
|
||||
+ HRESULT hr;
|
||||
+ int i, j;
|
||||
+
|
||||
+ /* Get rect position and dimensions */
|
||||
+ position.x = calc_rect.left;
|
||||
+ position.y = calc_rect.top;
|
||||
+ position.z = 0;
|
||||
+ text_width = calc_rect.right - calc_rect.left;
|
||||
+ text_height = calc_rect.bottom - calc_rect.top;
|
||||
+ text_rect.left = 0;
|
||||
+ text_rect.top = 0;
|
||||
+ text_rect.right = text_width;
|
||||
+ text_rect.bottom = text_height;
|
||||
+
|
||||
+ /* We need to flush as it seems all draws in the begin/end sequence use only the latest updated texture */
|
||||
+ if (sprite)
|
||||
+ ID3DXSprite_Flush(sprite);
|
||||
+
|
||||
+ /* Extend texture and DIB section to contain text */
|
||||
+ if ((text_width > This->tex_width) || (text_height > This->tex_height))
|
||||
+ {
|
||||
+ BITMAPINFOHEADER header;
|
||||
+
|
||||
+ if (text_width > This->tex_width)
|
||||
+ This->tex_width = make_pow2(text_width);
|
||||
+ if (text_height > This->tex_height)
|
||||
+ This->tex_height = make_pow2(text_height);
|
||||
+
|
||||
+ if (This->texture)
|
||||
+ {
|
||||
+ IDirect3DTexture9_Release(This->texture);
|
||||
+ DeleteObject(This->bitmap);
|
||||
+ }
|
||||
+
|
||||
+ hr = D3DXCreateTexture(This->device, This->tex_width, This->tex_height, 1, D3DUSAGE_DYNAMIC,
|
||||
+ D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &This->texture);
|
||||
+ if (FAILED(hr))
|
||||
+ {
|
||||
+ This->texture = NULL;
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ header.biSize = sizeof(header);
|
||||
+ header.biWidth = This->tex_width;
|
||||
+ header.biHeight = -This->tex_height;
|
||||
+ header.biPlanes = 1;
|
||||
+ header.biBitCount = 32;
|
||||
+ header.biCompression = BI_RGB;
|
||||
+ header.biSizeImage = sizeof(DWORD) * This->tex_width * This->tex_height;
|
||||
+ header.biXPelsPerMeter = 0;
|
||||
+ header.biYPelsPerMeter = 0;
|
||||
+ header.biClrUsed = 0;
|
||||
+ header.biClrImportant = 0;
|
||||
+
|
||||
+ This->bitmap = CreateDIBSection(This->hdc, (const BITMAPINFO*)&header,
|
||||
+ DIB_RGB_COLORS, (void**)&This->bits, NULL, 0);
|
||||
+ if (!This->bitmap)
|
||||
+ {
|
||||
+ IDirect3DTexture9_Release(This->texture);
|
||||
+ This->texture = NULL;
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ SelectObject(This->hdc, This->bitmap);
|
||||
+ }
|
||||
+
|
||||
+ if (FAILED(IDirect3DTexture9_LockRect(This->texture, 0, &locked_rect, &text_rect, D3DLOCK_DISCARD)))
|
||||
+ return 0;
|
||||
+
|
||||
+ /* Clear rect */
|
||||
+ for (i = 0; i < text_height; i++)
|
||||
+ memset(This->bits + i * This->tex_width * sizeof(DWORD), 0,
|
||||
+ text_width * sizeof(DWORD));
|
||||
+
|
||||
+ DrawTextW(This->hdc, string, count, &text_rect, format);
|
||||
+
|
||||
+ /* All RGB components are equal so take one as alpha and set RGB
|
||||
+ * color to white, so it can be modulated with color parameter */
|
||||
+ for (i = 0; i < text_height; i++)
|
||||
+ {
|
||||
+ DWORD *src = (DWORD *)This->bits + i * This->tex_width;
|
||||
+ DWORD *dst = (DWORD *)((BYTE *)locked_rect.pBits + i * locked_rect.Pitch);
|
||||
+ for (j = 0; j < text_width; j++)
|
||||
+ {
|
||||
+ *dst++ = (*src++ << 24) | 0xFFFFFF;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ IDirect3DTexture9_UnlockRect(This->texture, 0);
|
||||
+
|
||||
+ if (!sprite)
|
||||
+ {
|
||||
+ hr = D3DXCreateSprite(This->device, &target);
|
||||
+ if (FAILED(hr))
|
||||
+ return 0;
|
||||
+ ID3DXSprite_Begin(target, 0);
|
||||
+ }
|
||||
+
|
||||
+ hr = target->lpVtbl->Draw(target, This->texture, &text_rect, NULL, &position, color);
|
||||
+
|
||||
+ if (!sprite)
|
||||
+ {
|
||||
+ ID3DXSprite_End(target);
|
||||
+ ID3DXSprite_Release(target);
|
||||
+ }
|
||||
+
|
||||
+ if (FAILED(hr))
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ return height;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI ID3DXFontImpl_OnLostDevice(ID3DXFont *iface)
|
||||
@@ -302,46 +484,55 @@ HRESULT WINAPI D3DXCreateFontIndirectW(IDirect3DDevice9 *device, const D3DXFONT_
|
||||
|
||||
TRACE("(%p, %p, %p)\n", device, desc, font);
|
||||
|
||||
- if( !device || !desc || !font ) return D3DERR_INVALIDCALL;
|
||||
+ if (!device || !desc || !font) return D3DERR_INVALIDCALL;
|
||||
+
|
||||
+ TRACE("desc: %d %d %d %d %d %d %d %d %d %s\n", desc->Height, desc->Width, desc->Weight, desc->MipLevels, desc->Italic,
|
||||
+ desc->CharSet, desc->OutputPrecision, desc->Quality, desc->PitchAndFamily, debugstr_w(desc->FaceName));
|
||||
|
||||
- /* the device MUST support D3DFMT_A8R8G8B8 */
|
||||
+ /* The device MUST support D3DFMT_A8R8G8B8 */
|
||||
IDirect3DDevice9_GetDirect3D(device, &d3d);
|
||||
IDirect3DDevice9_GetCreationParameters(device, &cpars);
|
||||
IDirect3DDevice9_GetDisplayMode(device, 0, &mode);
|
||||
hr = IDirect3D9_CheckDeviceFormat(d3d, cpars.AdapterOrdinal, cpars.DeviceType, mode.Format, 0, D3DRTYPE_TEXTURE, D3DFMT_A8R8G8B8);
|
||||
- if(FAILED(hr)) {
|
||||
+ if (FAILED(hr))
|
||||
+ {
|
||||
IDirect3D9_Release(d3d);
|
||||
return D3DXERR_INVALIDDATA;
|
||||
}
|
||||
IDirect3D9_Release(d3d);
|
||||
|
||||
- object = HeapAlloc(GetProcessHeap(), 0, sizeof(struct d3dx_font));
|
||||
- if(object==NULL) {
|
||||
- *font=NULL;
|
||||
+ object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(struct d3dx_font));
|
||||
+ if (!object)
|
||||
+ {
|
||||
+ *font = NULL;
|
||||
return E_OUTOFMEMORY;
|
||||
}
|
||||
object->ID3DXFont_iface.lpVtbl = &D3DXFont_Vtbl;
|
||||
- object->ref=1;
|
||||
- object->device=device;
|
||||
- object->desc=*desc;
|
||||
+ object->ref = 1;
|
||||
+ object->device = device;
|
||||
+ object->desc = *desc;
|
||||
|
||||
object->hdc = CreateCompatibleDC(NULL);
|
||||
- if( !object->hdc ) {
|
||||
+ if (!object->hdc)
|
||||
+ {
|
||||
HeapFree(GetProcessHeap(), 0, object);
|
||||
return D3DXERR_INVALIDDATA;
|
||||
}
|
||||
|
||||
object->hfont = CreateFontW(desc->Height, desc->Width, 0, 0, desc->Weight, desc->Italic, FALSE, FALSE, desc->CharSet,
|
||||
desc->OutputPrecision, CLIP_DEFAULT_PRECIS, desc->Quality, desc->PitchAndFamily, desc->FaceName);
|
||||
- if( !object->hfont ) {
|
||||
+ if (!object->hfont)
|
||||
+ {
|
||||
DeleteDC(object->hdc);
|
||||
HeapFree(GetProcessHeap(), 0, object);
|
||||
return D3DXERR_INVALIDDATA;
|
||||
}
|
||||
SelectObject(object->hdc, object->hfont);
|
||||
+ SetTextColor(object->hdc, 0x00ffffff);
|
||||
+ SetBkColor(object->hdc, 0x00000000);
|
||||
|
||||
IDirect3DDevice9_AddRef(device);
|
||||
- *font=&object->ID3DXFont_iface;
|
||||
+ *font = &object->ID3DXFont_iface;
|
||||
|
||||
return D3D_OK;
|
||||
}
|
||||
--
|
||||
1.9.1
|
||||
|
@@ -1,32 +0,0 @@
|
||||
From 93b91dc6b0ccaf6c9babab7adb218454df93b750 Mon Sep 17 00:00:00 2001
|
||||
From: Christian Costa <titan.costa@gmail.com>
|
||||
Date: Sun, 4 Jan 2015 18:43:42 +0100
|
||||
Subject: d3dx9_36: Fix horizontal centering in ID3DXFont_DrawText.
|
||||
|
||||
Fix remaining text issues in Air Strike.
|
||||
Should fix text placement in Stronghold Kingdoms.
|
||||
---
|
||||
dlls/d3dx9_36/font.c | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
diff --git a/dlls/d3dx9_36/font.c b/dlls/d3dx9_36/font.c
|
||||
index 368c784..fa52859 100644
|
||||
--- a/dlls/d3dx9_36/font.c
|
||||
+++ b/dlls/d3dx9_36/font.c
|
||||
@@ -254,6 +254,13 @@ static INT WINAPI ID3DXFontImpl_DrawTextW(ID3DXFont *iface, ID3DXSprite *sprite,
|
||||
return height;
|
||||
}
|
||||
|
||||
+ if (format & DT_CENTER)
|
||||
+ {
|
||||
+ UINT new_width = calc_rect.right - calc_rect.left;
|
||||
+ calc_rect.left = (rect->right + rect->left - new_width) / 2;
|
||||
+ calc_rect.right = calc_rect.left + new_width;
|
||||
+ }
|
||||
+
|
||||
if (height && (calc_rect.left < calc_rect.right))
|
||||
{
|
||||
D3DLOCKED_RECT locked_rect;
|
||||
--
|
||||
2.2.1
|
||||
|
@@ -1,47 +0,0 @@
|
||||
From 0b6fc918564f580a9d62f14d76da83349075574f Mon Sep 17 00:00:00 2001
|
||||
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
Date: Fri, 4 Dec 2015 09:22:35 +1100
|
||||
Subject: [PATCH] d3dx9_36: Support NULL terminated strings in
|
||||
ID3DXFont_DrawText
|
||||
|
||||
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
---
|
||||
dlls/d3dx9_36/font.c | 10 ++++++++--
|
||||
dlls/d3dx9_36/tests/core.c | 1 -
|
||||
2 files changed, 8 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/dlls/d3dx9_36/font.c b/dlls/d3dx9_36/font.c
|
||||
index ad1eb2383e4..83fec560fc5 100644
|
||||
--- a/dlls/d3dx9_36/font.c
|
||||
+++ b/dlls/d3dx9_36/font.c
|
||||
@@ -210,9 +210,12 @@ static INT WINAPI ID3DXFontImpl_DrawTextA(ID3DXFont *iface, ID3DXSprite *sprite,
|
||||
TRACE("iface %p, sprite %p, string %s, count %d, rect %s, format %#x, color 0x%08x\n",
|
||||
iface, sprite, debugstr_a(string), count, wine_dbgstr_rect(rect), format, color);
|
||||
|
||||
- if (!string || count <= 0)
|
||||
+ if (!string || count == 0)
|
||||
return 0;
|
||||
|
||||
+ if (count < 0)
|
||||
+ count = -1;
|
||||
+
|
||||
countW = MultiByteToWideChar(CP_ACP, 0, string, count, NULL, 0);
|
||||
stringW = HeapAlloc(GetProcessHeap(), 0, countW * sizeof(WCHAR));
|
||||
if (stringW)
|
||||
@@ -235,9 +238,12 @@ static INT WINAPI ID3DXFontImpl_DrawTextW(ID3DXFont *iface, ID3DXSprite *sprite,
|
||||
TRACE("iface %p, sprite %p, string %s, count %d, rect %s, format %#x, color 0x%08x\n",
|
||||
iface, sprite, debugstr_w(string), count, wine_dbgstr_rect(rect), format, color);
|
||||
|
||||
- if (!string || count <= 0)
|
||||
+ if (!string || count == 0)
|
||||
return 0;
|
||||
|
||||
+ if (count < 0)
|
||||
+ count = lstrlenW(string);
|
||||
+
|
||||
/* Strip terminating NULL characters */
|
||||
while (count > 0 && !string[count-1])
|
||||
count--;
|
||||
--
|
||||
2.17.1
|
||||
|
@@ -1,43 +0,0 @@
|
||||
From ccf7cfe0cd7cbaa15ee34b4390dd6c30cf7e84ec Mon Sep 17 00:00:00 2001
|
||||
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
Date: Sat, 5 Dec 2015 15:31:06 +1100
|
||||
Subject: [PATCH] d3dx9_36: ID3DXFont_DrawText calc_rect can be null
|
||||
|
||||
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
---
|
||||
dlls/d3dx9_36/font.c | 8 ++++++--
|
||||
1 file changed, 6 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/dlls/d3dx9_36/font.c b/dlls/d3dx9_36/font.c
|
||||
index 83fec560fc5..f5c704ebabb 100644
|
||||
--- a/dlls/d3dx9_36/font.c
|
||||
+++ b/dlls/d3dx9_36/font.c
|
||||
@@ -232,7 +232,7 @@ static INT WINAPI ID3DXFontImpl_DrawTextW(ID3DXFont *iface, ID3DXSprite *sprite,
|
||||
const WCHAR *string, INT count, RECT *rect, DWORD format, D3DCOLOR color)
|
||||
{
|
||||
struct d3dx_font *This = impl_from_ID3DXFont(iface);
|
||||
- RECT calc_rect = *rect;
|
||||
+ RECT calc_rect;
|
||||
INT height;
|
||||
|
||||
TRACE("iface %p, sprite %p, string %s, count %d, rect %s, format %#x, color 0x%08x\n",
|
||||
@@ -248,11 +248,15 @@ static INT WINAPI ID3DXFontImpl_DrawTextW(ID3DXFont *iface, ID3DXSprite *sprite,
|
||||
while (count > 0 && !string[count-1])
|
||||
count--;
|
||||
|
||||
+ if (rect)
|
||||
+ calc_rect = *rect;
|
||||
+
|
||||
height = DrawTextW(This->hdc, string, count, &calc_rect, format | DT_CALCRECT);
|
||||
|
||||
if (format & DT_CALCRECT)
|
||||
{
|
||||
- *rect = calc_rect;
|
||||
+ if (rect)
|
||||
+ *rect = calc_rect;
|
||||
return height;
|
||||
}
|
||||
|
||||
--
|
||||
2.17.1
|
||||
|
@@ -1 +0,0 @@
|
||||
Fixes: [24754] Support for ID3DXFont::DrawTextA/W
|
@@ -1,15 +1,15 @@
|
||||
From e920f461eaf4c5d19c0cfc8e9c9a40671269dd93 Mon Sep 17 00:00:00 2001
|
||||
From 1c52fd394b75313b41023d53c011ab861dc79b66 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Mon, 6 Oct 2014 05:06:06 +0200
|
||||
Subject: [PATCH] dbghelp: Always check for debug symbols in BINDIR.
|
||||
|
||||
---
|
||||
dlls/dbghelp/Makefile.in | 2 +-
|
||||
dlls/dbghelp/elf_module.c | 8 +++++---
|
||||
2 files changed, 6 insertions(+), 4 deletions(-)
|
||||
dlls/dbghelp/elf_module.c | 1 +
|
||||
2 files changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/dbghelp/Makefile.in b/dlls/dbghelp/Makefile.in
|
||||
index f08464cd422..aa7a767110b 100644
|
||||
index 39d3bfc8641..ab66ff5b6c5 100644
|
||||
--- a/dlls/dbghelp/Makefile.in
|
||||
+++ b/dlls/dbghelp/Makefile.in
|
||||
@@ -1,6 +1,6 @@
|
||||
@@ -21,24 +21,17 @@ index f08464cd422..aa7a767110b 100644
|
||||
EXTRAINCL = $(Z_CFLAGS)
|
||||
EXTRALIBS = $(Z_LIBS) $(CORESERVICES_LIBS) $(COREFOUNDATION_LIBS)
|
||||
diff --git a/dlls/dbghelp/elf_module.c b/dlls/dbghelp/elf_module.c
|
||||
index 96b16fd5c0c..611533ee098 100644
|
||||
index 0b60524fc44..f2d6e84e3ea 100644
|
||||
--- a/dlls/dbghelp/elf_module.c
|
||||
+++ b/dlls/dbghelp/elf_module.c
|
||||
@@ -1644,9 +1644,11 @@ static BOOL elf_search_and_load_file(struct process* pcs, const WCHAR* filename,
|
||||
if (!ret && !strchrW(filename, '/'))
|
||||
{
|
||||
ret = elf_load_file_from_path(pcs, filename, load_offset, dyn_addr,
|
||||
- getenv("PATH"), elf_info) ||
|
||||
- elf_load_file_from_path(pcs, filename, load_offset, dyn_addr,
|
||||
- getenv("LD_LIBRARY_PATH"), elf_info);
|
||||
+ getenv("PATH"), elf_info);
|
||||
+ if (!ret) ret = elf_load_file_from_path(pcs, filename, load_offset, dyn_addr,
|
||||
+ getenv("LD_LIBRARY_PATH"), elf_info);
|
||||
+ if (!ret) ret = elf_load_file_from_path(pcs, filename, load_offset, dyn_addr,
|
||||
+ BINDIR, elf_info);
|
||||
if (!ret) ret = elf_load_file_from_dll_path(pcs, filename,
|
||||
load_offset, dyn_addr, elf_info);
|
||||
@@ -1379,6 +1379,7 @@ static BOOL elf_search_and_load_file(struct process* pcs, const WCHAR* filename,
|
||||
|
||||
ret = search_unix_path(filename, getenv("PATH"), elf_load_file_cb, &load_elf)
|
||||
|| search_unix_path(filename, getenv("LD_LIBRARY_PATH"), elf_load_file_cb, &load_elf)
|
||||
+ || search_unix_path(filename, BINDIR, elf_load_file_cb, &load_elf)
|
||||
|| search_dll_path(filename, elf_load_file_cb, &load_elf);
|
||||
}
|
||||
|
||||
--
|
||||
2.20.1
|
||||
2.25.1
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From cdf51c18aa92ddfc4df67216ebeaea0c393d8cbd Mon Sep 17 00:00:00 2001
|
||||
From 2097fbe83a66a3a423bdd148ecfc4f16c1237110 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Wed, 29 Jul 2015 17:09:50 +0200
|
||||
Subject: [PATCH] ddraw: Create rendering targets in video memory if possible.
|
||||
@@ -12,10 +12,10 @@ Based on a patch by Henri Verbeet.
|
||||
4 files changed, 56 insertions(+), 15 deletions(-)
|
||||
|
||||
diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
|
||||
index e77aab1cc5c..7df9cf5b28f 100644
|
||||
index 050f625f7..9655f9e47 100644
|
||||
--- a/dlls/ddraw/ddraw.c
|
||||
+++ b/dlls/ddraw/ddraw.c
|
||||
@@ -4297,7 +4297,7 @@ static HRESULT WINAPI d3d7_CreateDevice(IDirect3D7 *iface, REFCLSID riid,
|
||||
@@ -4214,7 +4214,7 @@ static HRESULT WINAPI d3d7_CreateDevice(IDirect3D7 *iface, REFCLSID riid,
|
||||
TRACE("iface %p, riid %s, surface %p, device %p.\n", iface, debugstr_guid(riid), surface, device);
|
||||
|
||||
wined3d_mutex_lock();
|
||||
@@ -24,7 +24,7 @@ index e77aab1cc5c..7df9cf5b28f 100644
|
||||
{
|
||||
*device = &object->IDirect3DDevice7_iface;
|
||||
}
|
||||
@@ -4326,7 +4326,7 @@ static HRESULT WINAPI d3d3_CreateDevice(IDirect3D3 *iface, REFCLSID riid,
|
||||
@@ -4243,7 +4243,7 @@ static HRESULT WINAPI d3d3_CreateDevice(IDirect3D3 *iface, REFCLSID riid,
|
||||
return CLASS_E_NOAGGREGATION;
|
||||
|
||||
wined3d_mutex_lock();
|
||||
@@ -33,7 +33,7 @@ index e77aab1cc5c..7df9cf5b28f 100644
|
||||
{
|
||||
*device = &device_impl->IDirect3DDevice3_iface;
|
||||
}
|
||||
@@ -4352,7 +4352,7 @@ static HRESULT WINAPI d3d2_CreateDevice(IDirect3D2 *iface, REFCLSID riid,
|
||||
@@ -4269,7 +4269,7 @@ static HRESULT WINAPI d3d2_CreateDevice(IDirect3D2 *iface, REFCLSID riid,
|
||||
iface, debugstr_guid(riid), surface, device);
|
||||
|
||||
wined3d_mutex_lock();
|
||||
@@ -43,10 +43,10 @@ index e77aab1cc5c..7df9cf5b28f 100644
|
||||
*device = &device_impl->IDirect3DDevice2_iface;
|
||||
}
|
||||
diff --git a/dlls/ddraw/ddraw_private.h b/dlls/ddraw/ddraw_private.h
|
||||
index 4ecd83d006b..c11f4f0aa80 100644
|
||||
index f4fe970a6..ba0ec73d8 100644
|
||||
--- a/dlls/ddraw/ddraw_private.h
|
||||
+++ b/dlls/ddraw/ddraw_private.h
|
||||
@@ -309,6 +309,7 @@ struct d3d_device
|
||||
@@ -313,6 +313,7 @@ struct d3d_device
|
||||
IUnknown IUnknown_inner;
|
||||
LONG ref;
|
||||
UINT version;
|
||||
@@ -54,8 +54,8 @@ index 4ecd83d006b..c11f4f0aa80 100644
|
||||
|
||||
IUnknown *outer_unknown;
|
||||
struct wined3d_device *wined3d_device;
|
||||
@@ -356,7 +357,7 @@ struct d3d_device
|
||||
struct wined3d_stateblock *recording, *state, *update_state;
|
||||
@@ -360,7 +361,7 @@ struct d3d_device
|
||||
const struct wined3d_stateblock_state *stateblock_state;
|
||||
};
|
||||
|
||||
-HRESULT d3d_device_create(struct ddraw *ddraw, struct ddraw_surface *target, IUnknown *rt_iface,
|
||||
@@ -64,10 +64,10 @@ index 4ecd83d006b..c11f4f0aa80 100644
|
||||
enum wined3d_depth_buffer_type d3d_device_update_depth_stencil(struct d3d_device *device) DECLSPEC_HIDDEN;
|
||||
|
||||
diff --git a/dlls/ddraw/device.c b/dlls/ddraw/device.c
|
||||
index ffa029321c1..31f76bdcbd3 100644
|
||||
index 048ba7fba..ce74a0fb8 100644
|
||||
--- a/dlls/ddraw/device.c
|
||||
+++ b/dlls/ddraw/device.c
|
||||
@@ -1854,7 +1854,7 @@ static HRESULT d3d_device7_SetRenderTarget(IDirect3DDevice7 *iface,
|
||||
@@ -1858,7 +1858,7 @@ static HRESULT d3d_device7_SetRenderTarget(IDirect3DDevice7 *iface,
|
||||
return DDERR_INVALIDCAPS;
|
||||
}
|
||||
|
||||
@@ -76,7 +76,7 @@ index ffa029321c1..31f76bdcbd3 100644
|
||||
{
|
||||
WARN("Surface %p is not in video memory.\n", target_impl);
|
||||
wined3d_mutex_unlock();
|
||||
@@ -1930,7 +1930,7 @@ static HRESULT WINAPI d3d_device3_SetRenderTarget(IDirect3DDevice3 *iface,
|
||||
@@ -1934,7 +1934,7 @@ static HRESULT WINAPI d3d_device3_SetRenderTarget(IDirect3DDevice3 *iface,
|
||||
return DDERR_INVALIDPIXELFORMAT;
|
||||
}
|
||||
|
||||
@@ -85,7 +85,7 @@ index ffa029321c1..31f76bdcbd3 100644
|
||||
{
|
||||
WARN("Surface %p is not in video memory.\n", target_impl);
|
||||
IDirectDrawSurface4_AddRef(target);
|
||||
@@ -1979,7 +1979,7 @@ static HRESULT WINAPI d3d_device2_SetRenderTarget(IDirect3DDevice2 *iface,
|
||||
@@ -1983,7 +1983,7 @@ static HRESULT WINAPI d3d_device2_SetRenderTarget(IDirect3DDevice2 *iface,
|
||||
return DDERR_INVALIDPIXELFORMAT;
|
||||
}
|
||||
|
||||
@@ -94,7 +94,7 @@ index ffa029321c1..31f76bdcbd3 100644
|
||||
{
|
||||
WARN("Surface %p is not in video memory.\n", target_impl);
|
||||
IDirectDrawSurface_AddRef(target);
|
||||
@@ -6972,7 +6972,7 @@ static void ddraw_reset_viewport_state(struct ddraw *ddraw)
|
||||
@@ -6951,7 +6951,7 @@ static void ddraw_reset_viewport_state(struct ddraw *ddraw)
|
||||
wined3d_stateblock_set_scissor_rect(ddraw->state, &rect);
|
||||
}
|
||||
|
||||
@@ -102,8 +102,8 @@ index ffa029321c1..31f76bdcbd3 100644
|
||||
+static HRESULT d3d_device_init(struct d3d_device *device, struct ddraw *ddraw, BOOL hw,
|
||||
struct ddraw_surface *target, IUnknown *rt_iface, UINT version, IUnknown *outer_unknown)
|
||||
{
|
||||
static const D3DMATRIX ident =
|
||||
@@ -6995,6 +6995,7 @@ static HRESULT d3d_device_init(struct d3d_device *device, struct ddraw *ddraw,
|
||||
static const struct wined3d_matrix ident =
|
||||
@@ -6974,6 +6974,7 @@ static HRESULT d3d_device_init(struct d3d_device *device, struct ddraw *ddraw,
|
||||
device->IUnknown_inner.lpVtbl = &d3d_device_inner_vtbl;
|
||||
device->ref = 1;
|
||||
device->version = version;
|
||||
@@ -111,7 +111,7 @@ index ffa029321c1..31f76bdcbd3 100644
|
||||
|
||||
if (outer_unknown)
|
||||
device->outer_unknown = outer_unknown;
|
||||
@@ -7054,14 +7055,18 @@ static HRESULT d3d_device_init(struct d3d_device *device, struct ddraw *ddraw,
|
||||
@@ -7032,14 +7033,18 @@ static HRESULT d3d_device_init(struct d3d_device *device, struct ddraw *ddraw,
|
||||
return D3D_OK;
|
||||
}
|
||||
|
||||
@@ -133,7 +133,7 @@ index ffa029321c1..31f76bdcbd3 100644
|
||||
|
||||
if (!(target->surface_desc.ddsCaps.dwCaps & DDSCAPS_3DDEVICE)
|
||||
|| (target->surface_desc.ddsCaps.dwCaps & DDSCAPS_ZBUFFER))
|
||||
@@ -7084,7 +7089,7 @@ HRESULT d3d_device_create(struct ddraw *ddraw, struct ddraw_surface *target, IUn
|
||||
@@ -7062,7 +7067,7 @@ HRESULT d3d_device_create(struct ddraw *ddraw, struct ddraw_surface *target, IUn
|
||||
return DDERR_OUTOFMEMORY;
|
||||
}
|
||||
|
||||
@@ -142,7 +142,7 @@ index ffa029321c1..31f76bdcbd3 100644
|
||||
{
|
||||
WARN("Surface %p is not in video memory.\n", target);
|
||||
return D3DERR_SURFACENOTINVIDMEM;
|
||||
@@ -7102,7 +7107,7 @@ HRESULT d3d_device_create(struct ddraw *ddraw, struct ddraw_surface *target, IUn
|
||||
@@ -7080,7 +7085,7 @@ HRESULT d3d_device_create(struct ddraw *ddraw, struct ddraw_surface *target, IUn
|
||||
return DDERR_OUTOFMEMORY;
|
||||
}
|
||||
|
||||
@@ -152,7 +152,7 @@ index ffa029321c1..31f76bdcbd3 100644
|
||||
WARN("Failed to initialize device, hr %#x.\n", hr);
|
||||
heap_free(object);
|
||||
diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c
|
||||
index 1f24c49634b..dc017d87467 100644
|
||||
index 85c1ef496..01522f515 100644
|
||||
--- a/dlls/ddraw/surface.c
|
||||
+++ b/dlls/ddraw/surface.c
|
||||
@@ -223,7 +223,7 @@ static HRESULT WINAPI ddraw_surface7_QueryInterface(IDirectDrawSurface7 *iface,
|
||||
@@ -164,7 +164,7 @@ index 1f24c49634b..dc017d87467 100644
|
||||
1, &This->device1, (IUnknown *)&This->IDirectDrawSurface_iface)))
|
||||
{
|
||||
This->device1 = NULL;
|
||||
@@ -6201,7 +6201,42 @@ HRESULT ddraw_surface_create(struct ddraw *ddraw, const DDSURFACEDESC2 *surface_
|
||||
@@ -6192,7 +6192,42 @@ HRESULT ddraw_surface_create(struct ddraw *ddraw, const DDSURFACEDESC2 *surface_
|
||||
|
||||
if (desc->ddsCaps.dwCaps & DDSCAPS_SYSTEMMEMORY)
|
||||
{
|
||||
@@ -196,7 +196,7 @@ index 1f24c49634b..dc017d87467 100644
|
||||
+ * possible.
|
||||
+ */
|
||||
+ if (bind_flags
|
||||
+ && SUCCEEDED(hr = wined3d_check_device_format(ddraw->wined3d, WINED3DADAPTER_DEFAULT,
|
||||
+ && SUCCEEDED(hr = wined3d_check_device_format(ddraw->wined3d, ddraw->wined3d_adapter,
|
||||
+ WINED3D_DEVICE_TYPE_HAL, mode.format_id, 0,
|
||||
+ bind_flags, WINED3D_RTYPE_TEXTURE_2D, wined3d_desc.format)))
|
||||
+ {
|
||||
@@ -209,5 +209,5 @@ index 1f24c49634b..dc017d87467 100644
|
||||
}
|
||||
else
|
||||
--
|
||||
2.17.1
|
||||
2.25.1
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 882c25ffe94d7e8869ed5a364120cf0c5f2ef241 Mon Sep 17 00:00:00 2001
|
||||
From a6f14f05fefc9510f673b47092cbc62a2366ccf9 Mon Sep 17 00:00:00 2001
|
||||
From: Paul Gofman <gofmanp@gmail.com>
|
||||
Date: Thu, 4 Apr 2019 02:25:00 +0300
|
||||
Subject: [PATCH] ddraw: Allow setting texture without DDSCAPS_TEXTURE for
|
||||
@@ -6,26 +6,15 @@ Subject: [PATCH] ddraw: Allow setting texture without DDSCAPS_TEXTURE for
|
||||
|
||||
Signed-off-by: Paul Gofman <gofmanp@gmail.com>
|
||||
---
|
||||
dlls/ddraw/device.c | 22 +++++--
|
||||
dlls/ddraw/device.c | 20 ++++--
|
||||
dlls/ddraw/tests/ddraw4.c | 128 +++++++++++++++++++++++++++++++++++++-
|
||||
2 files changed, 141 insertions(+), 9 deletions(-)
|
||||
2 files changed, 141 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/dlls/ddraw/device.c b/dlls/ddraw/device.c
|
||||
index e2643e6589..a43bca7a14 100644
|
||||
index 11e60f80c..324475303 100644
|
||||
--- a/dlls/ddraw/device.c
|
||||
+++ b/dlls/ddraw/device.c
|
||||
@@ -2921,10 +2921,8 @@ static HRESULT WINAPI d3d_device3_SetLightState(IDirect3DDevice3 *iface,
|
||||
wined3d_mutex_unlock();
|
||||
return DDERR_INVALIDPARAMS;
|
||||
}
|
||||
-
|
||||
material_activate(m);
|
||||
}
|
||||
-
|
||||
device->material = value;
|
||||
}
|
||||
else if (state == D3DLIGHTSTATE_COLORMODEL)
|
||||
@@ -4807,7 +4805,8 @@ static HRESULT d3d_device7_SetTexture(IDirect3DDevice7 *iface,
|
||||
@@ -4798,7 +4798,8 @@ static HRESULT d3d_device7_SetTexture(IDirect3DDevice7 *iface,
|
||||
struct ddraw_surface *surf = unsafe_impl_from_IDirectDrawSurface7(texture);
|
||||
struct wined3d_texture *wined3d_texture = NULL;
|
||||
|
||||
@@ -35,7 +24,7 @@ index e2643e6589..a43bca7a14 100644
|
||||
|
||||
if (surf && (surf->surface_desc.ddsCaps.dwCaps & DDSCAPS_TEXTURE))
|
||||
wined3d_texture = surf->wined3d_texture;
|
||||
@@ -4845,19 +4844,30 @@ static HRESULT WINAPI d3d_device3_SetTexture(IDirect3DDevice3 *iface,
|
||||
@@ -4834,19 +4835,30 @@ static HRESULT WINAPI d3d_device3_SetTexture(IDirect3DDevice3 *iface,
|
||||
{
|
||||
struct d3d_device *device = impl_from_IDirect3DDevice3(iface);
|
||||
struct ddraw_surface *tex = unsafe_impl_from_IDirect3DTexture2(texture);
|
||||
@@ -58,7 +47,7 @@ index e2643e6589..a43bca7a14 100644
|
||||
+ wined3d_texture = NULL;
|
||||
+ }
|
||||
+
|
||||
+ wined3d_device_set_texture(device->wined3d_device, stage, wined3d_texture);
|
||||
+ wined3d_stateblock_set_texture(device->state, stage, wined3d_texture);
|
||||
|
||||
fixup_texture_alpha_op(device);
|
||||
|
||||
@@ -70,7 +59,7 @@ index e2643e6589..a43bca7a14 100644
|
||||
|
||||
static const struct tss_lookup
|
||||
diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c
|
||||
index e3146ca45d..8861244e05 100644
|
||||
index e1d5bac18..e18f3c638 100644
|
||||
--- a/dlls/ddraw/tests/ddraw4.c
|
||||
+++ b/dlls/ddraw/tests/ddraw4.c
|
||||
@@ -330,7 +330,7 @@ static IDirectDraw4 *create_ddraw(void)
|
||||
@@ -132,7 +121,7 @@ index e3146ca45d..8861244e05 100644
|
||||
static IDirect3DViewport3 *create_viewport(IDirect3DDevice3 *device, UINT x, UINT y, UINT w, UINT h)
|
||||
{
|
||||
IDirect3DViewport3 *viewport;
|
||||
@@ -16819,6 +16830,116 @@ static void test_surface_format_conversion_alpha(void)
|
||||
@@ -16980,6 +16991,116 @@ static void test_surface_format_conversion_alpha(void)
|
||||
DestroyWindow(window);
|
||||
}
|
||||
|
||||
@@ -249,7 +238,7 @@ index e3146ca45d..8861244e05 100644
|
||||
START_TEST(ddraw4)
|
||||
{
|
||||
DDDEVICEIDENTIFIER identifier;
|
||||
@@ -16951,6 +17072,7 @@ START_TEST(ddraw4)
|
||||
@@ -17112,6 +17233,7 @@ START_TEST(ddraw4)
|
||||
test_gdi_surface();
|
||||
test_alphatest();
|
||||
test_clipper_refcount();
|
||||
@@ -258,5 +247,5 @@ index e3146ca45d..8861244e05 100644
|
||||
test_d32_support();
|
||||
test_surface_format_conversion_alpha();
|
||||
--
|
||||
2.17.1
|
||||
2.25.1
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From e70e35f995515223d802e47e139089e964576b1f Mon Sep 17 00:00:00 2001
|
||||
From 5ce4edd65773a793bc4b4f8ad1fa3b64b5894c7d Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Tue, 10 Feb 2015 16:54:21 +0100
|
||||
Subject: dxva2: Implement stubbed interfaces for
|
||||
@@ -9,15 +9,15 @@ Subject: dxva2: Implement stubbed interfaces for
|
||||
dlls/dxva2/devicemanager.c | 4 +-
|
||||
dlls/dxva2/dxva2_private.h | 1 +
|
||||
dlls/dxva2/main.c | 4 +-
|
||||
dlls/dxva2/videoservices.c | 467 +++++++++++++++++++++++++++++++++++++++++++++
|
||||
dlls/dxva2/videoservices.c | 467 +++++++++++++++++++++++++++++++++++++
|
||||
5 files changed, 474 insertions(+), 5 deletions(-)
|
||||
create mode 100644 dlls/dxva2/videoservices.c
|
||||
|
||||
diff --git a/dlls/dxva2/Makefile.in b/dlls/dxva2/Makefile.in
|
||||
index 27c653d3f20..b517921190b 100644
|
||||
index 5c3e3842d..c86b165e8 100644
|
||||
--- a/dlls/dxva2/Makefile.in
|
||||
+++ b/dlls/dxva2/Makefile.in
|
||||
@@ -3,4 +3,5 @@ IMPORTS = ole32
|
||||
@@ -5,4 +5,5 @@ EXTRADLLFLAGS = -mno-cygwin
|
||||
|
||||
C_SRCS = \
|
||||
devicemanager.c \
|
||||
@@ -25,10 +25,10 @@ index 27c653d3f20..b517921190b 100644
|
||||
+ main.c \
|
||||
+ videoservices.c
|
||||
diff --git a/dlls/dxva2/devicemanager.c b/dlls/dxva2/devicemanager.c
|
||||
index 15d78aa7ff0..b9ed76c865d 100644
|
||||
index bba0fbc61..8182adedc 100644
|
||||
--- a/dlls/dxva2/devicemanager.c
|
||||
+++ b/dlls/dxva2/devicemanager.c
|
||||
@@ -169,9 +169,9 @@ static HRESULT WINAPI Direct3DDeviceManager9_GetVideoService( IDirect3DDeviceMan
|
||||
@@ -170,9 +170,9 @@ static HRESULT WINAPI Direct3DDeviceManager9_GetVideoService( IDirect3DDeviceMan
|
||||
{
|
||||
Direct3DDeviceManager9Impl *This = impl_from_Direct3DDeviceManager9(iface);
|
||||
|
||||
@@ -41,7 +41,7 @@ index 15d78aa7ff0..b9ed76c865d 100644
|
||||
|
||||
static const IDirect3DDeviceManager9Vtbl Direct3DDeviceManager9_VTable =
|
||||
diff --git a/dlls/dxva2/dxva2_private.h b/dlls/dxva2/dxva2_private.h
|
||||
index d6e59fc6da8..a88809cf7ec 100644
|
||||
index d6e59fc6d..a88809cf7 100644
|
||||
--- a/dlls/dxva2/dxva2_private.h
|
||||
+++ b/dlls/dxva2/dxva2_private.h
|
||||
@@ -18,4 +18,5 @@
|
||||
@@ -51,7 +51,7 @@ index d6e59fc6da8..a88809cf7ec 100644
|
||||
+extern HRESULT videoservice_create( IDirect3DDevice9 *device, REFIID riid, void **ppv ) DECLSPEC_HIDDEN;
|
||||
extern HRESULT devicemanager_create( UINT *resetToken, void **ppv ) DECLSPEC_HIDDEN;
|
||||
diff --git a/dlls/dxva2/main.c b/dlls/dxva2/main.c
|
||||
index df8f2030104..0382b5fb00a 100644
|
||||
index df8f20301..0382b5fb0 100644
|
||||
--- a/dlls/dxva2/main.c
|
||||
+++ b/dlls/dxva2/main.c
|
||||
@@ -49,9 +49,9 @@ HRESULT WINAPI DXVA2CreateDirect3DDeviceManager9( UINT *resetToken, IDirect3DDev
|
||||
@@ -68,7 +68,7 @@ index df8f2030104..0382b5fb00a 100644
|
||||
BOOL WINAPI DegaussMonitor( HMONITOR monitor )
|
||||
diff --git a/dlls/dxva2/videoservices.c b/dlls/dxva2/videoservices.c
|
||||
new file mode 100644
|
||||
index 00000000000..936aa37b43c
|
||||
index 000000000..607729502
|
||||
--- /dev/null
|
||||
+++ b/dlls/dxva2/videoservices.c
|
||||
@@ -0,0 +1,467 @@
|
||||
@@ -302,9 +302,9 @@ index 00000000000..936aa37b43c
|
||||
+
|
||||
+ /* TODO: Query decoder instead of using hardcoded values */
|
||||
+
|
||||
+ memcpy(&config->guidConfigBitstreamEncryption, &DXVA_NoEncrypt, sizeof(GUID));
|
||||
+ memcpy(&config->guidConfigMBcontrolEncryption, &DXVA_NoEncrypt, sizeof(GUID));
|
||||
+ memcpy(&config->guidConfigResidDiffEncryption, &DXVA_NoEncrypt, sizeof(GUID));
|
||||
+ memcpy(&config->guidConfigBitstreamEncryption, &DXVA2_NoEncrypt, sizeof(GUID));
|
||||
+ memcpy(&config->guidConfigMBcontrolEncryption, &DXVA2_NoEncrypt, sizeof(GUID));
|
||||
+ memcpy(&config->guidConfigResidDiffEncryption, &DXVA2_NoEncrypt, sizeof(GUID));
|
||||
+
|
||||
+ config->ConfigBitstreamRaw = 1;
|
||||
+ config->ConfigMBcontrolRasterOrder = is_h264_codec(guid) ? 0 : 1;
|
||||
@@ -540,5 +540,5 @@ index 00000000000..936aa37b43c
|
||||
+ return S_OK;
|
||||
+}
|
||||
--
|
||||
2.11.0
|
||||
2.25.0
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 935b985d2e4fab7402030c71ff1a6ba0abdd9874 Mon Sep 17 00:00:00 2001
|
||||
From 95a95d09125707b24f8728c545c7f5b706bafe1c Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Sun, 22 Feb 2015 01:25:20 +0100
|
||||
Subject: [PATCH] dxva2: Initial implementation of MPEG2 decoder using vaapi
|
||||
@@ -22,10 +22,10 @@ Subject: [PATCH] dxva2: Initial implementation of MPEG2 decoder using vaapi
|
||||
create mode 100644 dlls/dxva2/vaapi.c
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 58e5211e9bc..53aea6188ca 100644
|
||||
index 39cef46e7..bb89c7ee0 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -110,6 +110,8 @@ AC_ARG_WITH(xslt, AS_HELP_STRING([--without-xslt],[do not use XSLT]))
|
||||
@@ -111,6 +111,8 @@ AC_ARG_WITH(xslt, AS_HELP_STRING([--without-xslt],[do not use XSLT]))
|
||||
AC_ARG_WITH(xxf86vm, AS_HELP_STRING([--without-xxf86vm],[do not use XFree video mode extension]),
|
||||
[if test "x$withval" = "xno"; then ac_cv_header_X11_extensions_xf86vmode_h=no; ac_cv_header_X11_extensions_xf86vmproto_h=no; fi])
|
||||
AC_ARG_WITH(zlib, AS_HELP_STRING([--without-zlib],[do not use Zlib (data compression)]))
|
||||
@@ -34,7 +34,7 @@ index 58e5211e9bc..53aea6188ca 100644
|
||||
|
||||
AC_ARG_WITH(wine-tools,AS_HELP_STRING([--with-wine-tools=DIR],[use Wine tools from directory DIR]))
|
||||
AC_ARG_WITH(wine64, AS_HELP_STRING([--with-wine64=DIR],[use the 64-bit Wine in DIR for a Wow64 build]))
|
||||
@@ -1292,6 +1294,20 @@ This probably prevents linking to OpenGL. Try deleting the file and restarting c
|
||||
@@ -1296,6 +1298,20 @@ This probably prevents linking to OpenGL. Try deleting the file and restarting c
|
||||
WINE_WARNING_WITH(opengl,[test -n "$opengl_msg"],[$opengl_msg
|
||||
OpenGL and Direct3D won't be supported.])
|
||||
|
||||
@@ -56,7 +56,7 @@ index 58e5211e9bc..53aea6188ca 100644
|
||||
else
|
||||
X_CFLAGS=""
|
||||
diff --git a/dlls/dxva2/Makefile.in b/dlls/dxva2/Makefile.in
|
||||
index e4c90b5231e..b42cfae525e 100644
|
||||
index e4c90b523..b42cfae52 100644
|
||||
--- a/dlls/dxva2/Makefile.in
|
||||
+++ b/dlls/dxva2/Makefile.in
|
||||
@@ -1,10 +1,16 @@
|
||||
@@ -81,7 +81,7 @@ index e4c90b5231e..b42cfae525e 100644
|
||||
+ videoservices.c
|
||||
diff --git a/dlls/dxva2/backend.idl b/dlls/dxva2/backend.idl
|
||||
new file mode 100644
|
||||
index 00000000000..8d488351ff2
|
||||
index 000000000..8d488351f
|
||||
--- /dev/null
|
||||
+++ b/dlls/dxva2/backend.idl
|
||||
@@ -0,0 +1,96 @@
|
||||
@@ -182,7 +182,7 @@ index 00000000000..8d488351ff2
|
||||
+ [out] IWineVideoDecoder **decoder);
|
||||
+}
|
||||
diff --git a/dlls/dxva2/dxva2_private.h b/dlls/dxva2/dxva2_private.h
|
||||
index f0068b68891..f51863739b0 100644
|
||||
index f0068b688..f51863739 100644
|
||||
--- a/dlls/dxva2/dxva2_private.h
|
||||
+++ b/dlls/dxva2/dxva2_private.h
|
||||
@@ -1,5 +1,5 @@
|
||||
@@ -317,7 +317,7 @@ index f0068b68891..f51863739b0 100644
|
||||
+#endif /* HAVE_VAAPI */
|
||||
diff --git a/dlls/dxva2/genericdecoder.c b/dlls/dxva2/genericdecoder.c
|
||||
new file mode 100644
|
||||
index 00000000000..3903d6b0b46
|
||||
index 000000000..3903d6b0b
|
||||
--- /dev/null
|
||||
+++ b/dlls/dxva2/genericdecoder.c
|
||||
@@ -0,0 +1,432 @@
|
||||
@@ -754,7 +754,7 @@ index 00000000000..3903d6b0b46
|
||||
+ return S_OK;
|
||||
+}
|
||||
diff --git a/dlls/dxva2/main.c b/dlls/dxva2/main.c
|
||||
index 0382b5fb00a..3006f175b7f 100644
|
||||
index 0382b5fb0..3006f175b 100644
|
||||
--- a/dlls/dxva2/main.c
|
||||
+++ b/dlls/dxva2/main.c
|
||||
@@ -32,6 +32,8 @@
|
||||
@@ -848,7 +848,7 @@ index 0382b5fb00a..3006f175b7f 100644
|
||||
|
||||
return TRUE;
|
||||
diff --git a/dlls/dxva2/tests/dxva2.c b/dlls/dxva2/tests/dxva2.c
|
||||
index dcbb990ee5c..c28be4d8e3c 100644
|
||||
index dcbb990ee..c28be4d8e 100644
|
||||
--- a/dlls/dxva2/tests/dxva2.c
|
||||
+++ b/dlls/dxva2/tests/dxva2.c
|
||||
@@ -1,7 +1,7 @@
|
||||
@@ -929,7 +929,7 @@ index dcbb990ee5c..c28be4d8e3c 100644
|
||||
IDirectXVideoDecoderService_Release(service);
|
||||
diff --git a/dlls/dxva2/vaapi-mpeg2.c b/dlls/dxva2/vaapi-mpeg2.c
|
||||
new file mode 100644
|
||||
index 00000000000..7b7f61db755
|
||||
index 000000000..7b7f61db7
|
||||
--- /dev/null
|
||||
+++ b/dlls/dxva2/vaapi-mpeg2.c
|
||||
@@ -0,0 +1,753 @@
|
||||
@@ -1688,7 +1688,7 @@ index 00000000000..7b7f61db755
|
||||
+#endif /* HAVE_VAAPI */
|
||||
diff --git a/dlls/dxva2/vaapi.c b/dlls/dxva2/vaapi.c
|
||||
new file mode 100644
|
||||
index 00000000000..80e63bf38d9
|
||||
index 000000000..e2a64065e
|
||||
--- /dev/null
|
||||
+++ b/dlls/dxva2/vaapi.c
|
||||
@@ -0,0 +1,767 @@
|
||||
@@ -2306,9 +2306,9 @@ index 00000000000..80e63bf38d9
|
||||
+ return E_OUTOFMEMORY;
|
||||
+
|
||||
+ /* TODO: Query decoder instead of using hardcoded values */
|
||||
+ memcpy(&config->guidConfigBitstreamEncryption, &DXVA_NoEncrypt, sizeof(GUID));
|
||||
+ memcpy(&config->guidConfigMBcontrolEncryption, &DXVA_NoEncrypt, sizeof(GUID));
|
||||
+ memcpy(&config->guidConfigResidDiffEncryption, &DXVA_NoEncrypt, sizeof(GUID));
|
||||
+ memcpy(&config->guidConfigBitstreamEncryption, &DXVA2_NoEncrypt, sizeof(GUID));
|
||||
+ memcpy(&config->guidConfigMBcontrolEncryption, &DXVA2_NoEncrypt, sizeof(GUID));
|
||||
+ memcpy(&config->guidConfigResidDiffEncryption, &DXVA2_NoEncrypt, sizeof(GUID));
|
||||
+
|
||||
+ config->ConfigBitstreamRaw = 1;
|
||||
+ config->ConfigMBcontrolRasterOrder = is_h264_codec(guid) ? 0 : 1;
|
||||
@@ -2460,7 +2460,7 @@ index 00000000000..80e63bf38d9
|
||||
+
|
||||
+#endif /* HAVE_VAAPI */
|
||||
diff --git a/dlls/dxva2/videoservices.c b/dlls/dxva2/videoservices.c
|
||||
index 46e431a7f29..84222dce558 100644
|
||||
index 11cba1441..84222dce5 100644
|
||||
--- a/dlls/dxva2/videoservices.c
|
||||
+++ b/dlls/dxva2/videoservices.c
|
||||
@@ -1,5 +1,5 @@
|
||||
@@ -2540,9 +2540,9 @@ index 46e431a7f29..84222dce558 100644
|
||||
-
|
||||
- /* TODO: Query decoder instead of using hardcoded values */
|
||||
-
|
||||
- memcpy(&config->guidConfigBitstreamEncryption, &DXVA_NoEncrypt, sizeof(GUID));
|
||||
- memcpy(&config->guidConfigMBcontrolEncryption, &DXVA_NoEncrypt, sizeof(GUID));
|
||||
- memcpy(&config->guidConfigResidDiffEncryption, &DXVA_NoEncrypt, sizeof(GUID));
|
||||
- memcpy(&config->guidConfigBitstreamEncryption, &DXVA2_NoEncrypt, sizeof(GUID));
|
||||
- memcpy(&config->guidConfigMBcontrolEncryption, &DXVA2_NoEncrypt, sizeof(GUID));
|
||||
- memcpy(&config->guidConfigResidDiffEncryption, &DXVA2_NoEncrypt, sizeof(GUID));
|
||||
-
|
||||
- config->ConfigBitstreamRaw = 1;
|
||||
- config->ConfigMBcontrolRasterOrder = is_h264_codec(guid) ? 0 : 1;
|
||||
@@ -2637,5 +2637,5 @@ index 46e431a7f29..84222dce558 100644
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
--
|
||||
2.20.1
|
||||
2.25.0
|
||||
|
||||
|
@@ -0,0 +1,197 @@
|
||||
From c00917721a5076b90e3e61a7d326ef485c1f9dfb Mon Sep 17 00:00:00 2001
|
||||
From: Zebediah Figura <z.figura12@gmail.com>
|
||||
Date: Mon, 17 Feb 2020 11:28:37 -0600
|
||||
Subject: [PATCH] ntdll, server: Abandon esync mutexes on thread exit.
|
||||
|
||||
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
|
||||
---
|
||||
dlls/ntdll/esync.c | 31 ++++++++++++++++++++++++++-----
|
||||
server/esync.c | 32 +++++++++++++++++++++++++++++---
|
||||
server/esync.h | 1 +
|
||||
server/thread.c | 2 ++
|
||||
4 files changed, 58 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/dlls/ntdll/esync.c b/dlls/ntdll/esync.c
|
||||
index 87f303403..c2190f2fd 100644
|
||||
--- a/dlls/ntdll/esync.c
|
||||
+++ b/dlls/ntdll/esync.c
|
||||
@@ -807,7 +807,7 @@ NTSTATUS esync_query_mutex( HANDLE handle, MUTANT_INFORMATION_CLASS class,
|
||||
|
||||
out->CurrentCount = 1 - mutex->count;
|
||||
out->OwnedByCaller = (mutex->tid == GetCurrentThreadId());
|
||||
- out->AbandonedState = FALSE;
|
||||
+ out->AbandonedState = (mutex->tid == ~0);
|
||||
if (ret_len) *ret_len = sizeof(*out);
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
@@ -857,14 +857,19 @@ static int do_poll( struct pollfd *fds, nfds_t nfds, ULONGLONG *end )
|
||||
return ret;
|
||||
}
|
||||
|
||||
-static void update_grabbed_object( struct esync *obj )
|
||||
+/* Return TRUE if abandoned. */
|
||||
+static BOOL update_grabbed_object( struct esync *obj )
|
||||
{
|
||||
+ BOOL ret = FALSE;
|
||||
+
|
||||
if (obj->type == ESYNC_MUTEX)
|
||||
{
|
||||
struct mutex *mutex = obj->shm;
|
||||
/* We don't have to worry about a race between this and read(); the
|
||||
* fact that we grabbed it means the count is now zero, so nobody else
|
||||
* can (and the only thread that can release it is us). */
|
||||
+ if (mutex->tid == ~0)
|
||||
+ ret = TRUE;
|
||||
mutex->tid = GetCurrentThreadId();
|
||||
mutex->count++;
|
||||
}
|
||||
@@ -885,6 +890,8 @@ static void update_grabbed_object( struct esync *obj )
|
||||
* This might already be 0, but that's okay! */
|
||||
event->signaled = 0;
|
||||
}
|
||||
+
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
/* A value of STATUS_NOT_IMPLEMENTED returned from this function means that we
|
||||
@@ -1018,7 +1025,13 @@ static NTSTATUS __esync_wait_objects( DWORD count, const HANDLE *handles,
|
||||
{
|
||||
if ((size = read( obj->fd, &value, sizeof(value) )) == sizeof(value))
|
||||
{
|
||||
- TRACE("Woken up by handle %p [%d].\n", handles[i], i);
|
||||
+ if (mutex->tid == ~0)
|
||||
+ {
|
||||
+ TRACE("Woken up by abandoned mutex %p [%d].\n", handles[i], i);
|
||||
+ i += STATUS_ABANDONED_WAIT_0;
|
||||
+ }
|
||||
+ else
|
||||
+ TRACE("Woken up by handle %p [%d].\n", handles[i], i);
|
||||
mutex->tid = GetCurrentThreadId();
|
||||
mutex->count++;
|
||||
return i;
|
||||
@@ -1136,7 +1149,8 @@ static NTSTATUS __esync_wait_objects( DWORD count, const HANDLE *handles,
|
||||
{
|
||||
/* We found our object. */
|
||||
TRACE("Woken up by handle %p [%d].\n", handles[i], i);
|
||||
- update_grabbed_object( obj );
|
||||
+ if (update_grabbed_object( obj ))
|
||||
+ return STATUS_ABANDONED_WAIT_0 + i;
|
||||
return i;
|
||||
}
|
||||
}
|
||||
@@ -1255,6 +1269,8 @@ tryagain:
|
||||
ret = poll( fds, pollcount, 0 );
|
||||
if (ret == pollcount)
|
||||
{
|
||||
+ BOOL abandoned = FALSE;
|
||||
+
|
||||
/* Quick, grab everything. */
|
||||
for (i = 0; i < pollcount; i++)
|
||||
{
|
||||
@@ -1295,8 +1311,13 @@ tryagain:
|
||||
/* Make sure to let ourselves know that we grabbed the mutexes
|
||||
* and semaphores. */
|
||||
for (i = 0; i < count; i++)
|
||||
- update_grabbed_object( objs[i] );
|
||||
+ abandoned |= update_grabbed_object( objs[i] );
|
||||
|
||||
+ if (abandoned)
|
||||
+ {
|
||||
+ TRACE("Wait successful, but some object(s) were abandoned.\n");
|
||||
+ return STATUS_ABANDONED;
|
||||
+ }
|
||||
TRACE("Wait successful.\n");
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
diff --git a/server/esync.c b/server/esync.c
|
||||
index 040e24e69..1b035bdb0 100644
|
||||
--- a/server/esync.c
|
||||
+++ b/server/esync.c
|
||||
@@ -104,12 +104,15 @@ void esync_init(void)
|
||||
atexit( shm_cleanup );
|
||||
}
|
||||
|
||||
+static struct list mutex_list = LIST_INIT(mutex_list);
|
||||
+
|
||||
struct esync
|
||||
{
|
||||
- struct object obj; /* object header */
|
||||
- int fd; /* eventfd file descriptor */
|
||||
+ struct object obj; /* object header */
|
||||
+ int fd; /* eventfd file descriptor */
|
||||
enum esync_type type;
|
||||
- unsigned int shm_idx; /* index into the shared memory section */
|
||||
+ unsigned int shm_idx; /* index into the shared memory section */
|
||||
+ struct list mutex_entry; /* entry in the mutex list (if applicable) */
|
||||
};
|
||||
|
||||
static void esync_dump( struct object *obj, int verbose );
|
||||
@@ -168,6 +171,8 @@ static unsigned int esync_map_access( struct object *obj, unsigned int access )
|
||||
static void esync_destroy( struct object *obj )
|
||||
{
|
||||
struct esync *esync = (struct esync *)obj;
|
||||
+ if (esync->type == ESYNC_MUTEX)
|
||||
+ list_remove( &esync->mutex_entry );
|
||||
close( esync->fd );
|
||||
}
|
||||
|
||||
@@ -301,6 +306,7 @@ static struct esync *create_esync( struct object *root, const struct unicode_str
|
||||
struct mutex *mutex = get_shm( esync->shm_idx );
|
||||
mutex->tid = initval ? 0 : current->id;
|
||||
mutex->count = initval ? 0 : 1;
|
||||
+ list_add_tail( &mutex_list, &esync->mutex_entry );
|
||||
break;
|
||||
}
|
||||
default:
|
||||
@@ -447,6 +453,26 @@ void esync_reset_event( struct esync *esync )
|
||||
}
|
||||
}
|
||||
|
||||
+void esync_abandon_mutexes( struct thread *thread )
|
||||
+{
|
||||
+ unsigned int index = 0;
|
||||
+ struct esync *esync;
|
||||
+
|
||||
+ LIST_FOR_EACH_ENTRY( esync, &mutex_list, struct esync, mutex_entry )
|
||||
+ {
|
||||
+ struct mutex *mutex = get_shm( esync->shm_idx );
|
||||
+
|
||||
+ if (mutex->tid == thread->id)
|
||||
+ {
|
||||
+ if (debug_level)
|
||||
+ fprintf( stderr, "esync_abandon_mutexes() fd=%d\n", esync->fd );
|
||||
+ mutex->tid = ~0;
|
||||
+ mutex->count = 0;
|
||||
+ esync_wake_fd( esync->fd );
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
DECL_HANDLER(create_esync)
|
||||
{
|
||||
struct esync *esync;
|
||||
diff --git a/server/esync.h b/server/esync.h
|
||||
index cea025d93..125da8e9d 100644
|
||||
--- a/server/esync.h
|
||||
+++ b/server/esync.h
|
||||
@@ -30,3 +30,4 @@ struct esync;
|
||||
extern const struct object_ops esync_ops;
|
||||
void esync_set_event( struct esync *esync );
|
||||
void esync_reset_event( struct esync *esync );
|
||||
+void esync_abandon_mutexes( struct thread *thread );
|
||||
diff --git a/server/thread.c b/server/thread.c
|
||||
index d1923b4e8..1d5bca525 100644
|
||||
--- a/server/thread.c
|
||||
+++ b/server/thread.c
|
||||
@@ -1253,6 +1253,8 @@ void kill_thread( struct thread *thread, int violent_death )
|
||||
kill_console_processes( thread, 0 );
|
||||
debug_exit_thread( thread );
|
||||
abandon_mutexes( thread );
|
||||
+ if (do_esync())
|
||||
+ esync_abandon_mutexes( thread );
|
||||
if (violent_death)
|
||||
{
|
||||
send_thread_signal( thread, SIGQUIT );
|
||||
--
|
||||
2.25.0
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 339d3f797f4ba20feac9c887dc79734cd15a2c10 Mon Sep 17 00:00:00 2001
|
||||
From 6b8f0a1f1283cb47bf1156745a42e50bb32d3d2f Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Sat, 6 Feb 2016 18:31:25 +0100
|
||||
Subject: [PATCH] kernel32: Strip invalid characters from mask in
|
||||
@@ -9,10 +9,10 @@ Subject: [PATCH] kernel32: Strip invalid characters from mask in
|
||||
1 file changed, 22 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/dlls/kernelbase/file.c b/dlls/kernelbase/file.c
|
||||
index 89c5f85cb20..542531e895c 100644
|
||||
index 6591a110732..fd411b7baac 100644
|
||||
--- a/dlls/kernelbase/file.c
|
||||
+++ b/dlls/kernelbase/file.c
|
||||
@@ -795,6 +795,7 @@ HANDLE WINAPI DECLSPEC_HOTPATCH FindFirstFileExW( LPCWSTR filename, FINDEX_INFO_
|
||||
@@ -790,6 +790,7 @@ HANDLE WINAPI DECLSPEC_HOTPATCH FindFirstFileExW( LPCWSTR filename, FINDEX_INFO_
|
||||
WCHAR *mask;
|
||||
BOOL has_wildcard = FALSE;
|
||||
FIND_FIRST_INFO *info = NULL;
|
||||
@@ -20,7 +20,7 @@ index 89c5f85cb20..542531e895c 100644
|
||||
UNICODE_STRING nt_name;
|
||||
OBJECT_ATTRIBUTES attr;
|
||||
IO_STATUS_BLOCK io;
|
||||
@@ -826,6 +827,8 @@ HANDLE WINAPI DECLSPEC_HOTPATCH FindFirstFileExW( LPCWSTR filename, FINDEX_INFO_
|
||||
@@ -821,6 +822,8 @@ HANDLE WINAPI DECLSPEC_HOTPATCH FindFirstFileExW( LPCWSTR filename, FINDEX_INFO_
|
||||
return INVALID_HANDLE_VALUE;
|
||||
}
|
||||
|
||||
@@ -28,8 +28,8 @@ index 89c5f85cb20..542531e895c 100644
|
||||
+
|
||||
if (!mask && (device = RtlIsDosDeviceName_U( filename )))
|
||||
{
|
||||
static const WCHAR dotW[] = {'.',0};
|
||||
@@ -860,8 +863,26 @@ HANDLE WINAPI DECLSPEC_HOTPATCH FindFirstFileExW( LPCWSTR filename, FINDEX_INFO_
|
||||
WCHAR *dir = NULL;
|
||||
@@ -854,8 +857,26 @@ HANDLE WINAPI DECLSPEC_HOTPATCH FindFirstFileExW( LPCWSTR filename, FINDEX_INFO_
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -57,7 +57,7 @@ index 89c5f85cb20..542531e895c 100644
|
||||
size = has_wildcard ? 8192 : max_entry_size;
|
||||
}
|
||||
|
||||
@@ -922,9 +943,6 @@ HANDLE WINAPI DECLSPEC_HOTPATCH FindFirstFileExW( LPCWSTR filename, FINDEX_INFO_
|
||||
@@ -916,9 +937,6 @@ HANDLE WINAPI DECLSPEC_HOTPATCH FindFirstFileExW( LPCWSTR filename, FINDEX_INFO_
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -68,5 +68,5 @@ index 89c5f85cb20..542531e895c 100644
|
||||
FileBothDirectoryInformation, FALSE, &mask_str, TRUE );
|
||||
if (status)
|
||||
--
|
||||
2.17.1
|
||||
2.25.1
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From e9f5574ee2a3b6a0b2668747aef7d95c176ece8f Mon Sep 17 00:00:00 2001
|
||||
From 8781454669b29f8e2a2c0406ed4b48b435354a0c Mon Sep 17 00:00:00 2001
|
||||
From: Mark Jansen <mark.jansen@reactos.org>
|
||||
Date: Sun, 24 Sep 2017 22:45:22 +0200
|
||||
Subject: [PATCH] kernel32/tests: Add tests for job object accounting
|
||||
@@ -9,10 +9,10 @@ Signed-off-by: Mark Jansen <mark.jansen@reactos.org>
|
||||
1 file changed, 95 insertions(+)
|
||||
|
||||
diff --git a/dlls/kernel32/tests/process.c b/dlls/kernel32/tests/process.c
|
||||
index f181536e7a6..4c2709cce0e 100644
|
||||
index 32818042337..2ecd3dc10e8 100644
|
||||
--- a/dlls/kernel32/tests/process.c
|
||||
+++ b/dlls/kernel32/tests/process.c
|
||||
@@ -2423,6 +2423,69 @@ static void _create_process(int line, const char *command, LPPROCESS_INFORMATION
|
||||
@@ -2398,6 +2398,69 @@ static void _create_process(int line, const char *command, LPPROCESS_INFORMATION
|
||||
ok_(__FILE__, line)(ret, "CreateProcess error %u\n", GetLastError());
|
||||
}
|
||||
|
||||
@@ -82,7 +82,7 @@ index f181536e7a6..4c2709cce0e 100644
|
||||
|
||||
static void test_IsProcessInJob(void)
|
||||
{
|
||||
@@ -2449,11 +2512,15 @@ static void test_IsProcessInJob(void)
|
||||
@@ -2423,11 +2486,15 @@ static void test_IsProcessInJob(void)
|
||||
ret = pIsProcessInJob(pi.hProcess, job, &out);
|
||||
ok(ret, "IsProcessInJob error %u\n", GetLastError());
|
||||
ok(!out, "IsProcessInJob returned out=%u\n", out);
|
||||
@@ -98,7 +98,7 @@ index f181536e7a6..4c2709cce0e 100644
|
||||
|
||||
ret = pAssignProcessToJobObject(job, pi.hProcess);
|
||||
ok(ret, "AssignProcessToJobObject error %u\n", GetLastError());
|
||||
@@ -2462,11 +2529,15 @@ static void test_IsProcessInJob(void)
|
||||
@@ -2436,11 +2503,15 @@ static void test_IsProcessInJob(void)
|
||||
ret = pIsProcessInJob(pi.hProcess, job, &out);
|
||||
ok(ret, "IsProcessInJob error %u\n", GetLastError());
|
||||
ok(out, "IsProcessInJob returned out=%u\n", out);
|
||||
@@ -114,7 +114,7 @@ index f181536e7a6..4c2709cce0e 100644
|
||||
|
||||
out = FALSE;
|
||||
ret = pIsProcessInJob(pi.hProcess, NULL, &out);
|
||||
@@ -2482,6 +2553,8 @@ static void test_IsProcessInJob(void)
|
||||
@@ -2454,6 +2525,8 @@ static void test_IsProcessInJob(void)
|
||||
ret = pIsProcessInJob(pi.hProcess, job, &out);
|
||||
ok(ret, "IsProcessInJob error %u\n", GetLastError());
|
||||
ok(out, "IsProcessInJob returned out=%u\n", out);
|
||||
@@ -123,7 +123,7 @@ index f181536e7a6..4c2709cce0e 100644
|
||||
|
||||
CloseHandle(pi.hProcess);
|
||||
CloseHandle(pi.hThread);
|
||||
@@ -2498,11 +2571,15 @@ static void test_TerminateJobObject(void)
|
||||
@@ -2470,11 +2543,15 @@ static void test_TerminateJobObject(void)
|
||||
|
||||
job = pCreateJobObjectW(NULL, NULL);
|
||||
ok(job != NULL, "CreateJobObject error %u\n", GetLastError());
|
||||
@@ -139,7 +139,7 @@ index f181536e7a6..4c2709cce0e 100644
|
||||
|
||||
ret = pTerminateJobObject(job, 123);
|
||||
ok(ret, "TerminateJobObject error %u\n", GetLastError());
|
||||
@@ -2510,6 +2587,8 @@ static void test_TerminateJobObject(void)
|
||||
@@ -2483,6 +2560,8 @@ static void test_TerminateJobObject(void)
|
||||
dwret = WaitForSingleObject(pi.hProcess, 1000);
|
||||
ok(dwret == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", dwret);
|
||||
if (dwret == WAIT_TIMEOUT) TerminateProcess(pi.hProcess, 0);
|
||||
@@ -148,7 +148,7 @@ index f181536e7a6..4c2709cce0e 100644
|
||||
|
||||
ret = GetExitCodeProcess(pi.hProcess, &dwret);
|
||||
ok(ret, "GetExitCodeProcess error %u\n", GetLastError());
|
||||
@@ -2529,6 +2608,8 @@ static void test_TerminateJobObject(void)
|
||||
@@ -2500,6 +2579,8 @@ static void test_TerminateJobObject(void)
|
||||
ret = pAssignProcessToJobObject(job, pi.hProcess);
|
||||
ok(!ret, "AssignProcessToJobObject unexpectedly succeeded\n");
|
||||
expect_eq_d(ERROR_ACCESS_DENIED, GetLastError());
|
||||
@@ -157,7 +157,7 @@ index f181536e7a6..4c2709cce0e 100644
|
||||
|
||||
CloseHandle(pi.hProcess);
|
||||
CloseHandle(pi.hThread);
|
||||
@@ -2715,11 +2796,15 @@ static void test_KillOnJobClose(void)
|
||||
@@ -2687,11 +2768,15 @@ static void test_KillOnJobClose(void)
|
||||
return;
|
||||
}
|
||||
ok(ret, "SetInformationJobObject error %u\n", GetLastError());
|
||||
@@ -173,7 +173,7 @@ index f181536e7a6..4c2709cce0e 100644
|
||||
|
||||
CloseHandle(job);
|
||||
|
||||
@@ -2823,6 +2908,8 @@ static HANDLE test_AddSelfToJob(void)
|
||||
@@ -2801,6 +2886,8 @@ static HANDLE test_AddSelfToJob(void)
|
||||
|
||||
ret = pAssignProcessToJobObject(job, GetCurrentProcess());
|
||||
ok(ret, "AssignProcessToJobObject error %u\n", GetLastError());
|
||||
@@ -182,16 +182,16 @@ index f181536e7a6..4c2709cce0e 100644
|
||||
|
||||
return job;
|
||||
}
|
||||
@@ -2850,6 +2937,8 @@ static void test_jobInheritance(HANDLE job)
|
||||
@@ -2822,6 +2909,8 @@ static void test_jobInheritance(HANDLE job)
|
||||
ret = pIsProcessInJob(pi.hProcess, job, &out);
|
||||
ok(ret, "IsProcessInJob error %u\n", GetLastError());
|
||||
ok(out, "IsProcessInJob returned out=%u\n", out);
|
||||
+ test_assigned_proc(job, 2, GetCurrentProcessId(), pi.dwProcessId);
|
||||
+ test_accounting(job, 2, 2, 0);
|
||||
|
||||
dwret = WaitForSingleObject(pi.hProcess, 1000);
|
||||
ok(dwret == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", dwret);
|
||||
@@ -2878,6 +2967,8 @@ static void test_BreakawayOk(HANDLE job)
|
||||
wait_and_close_child_process(&pi);
|
||||
}
|
||||
@@ -2844,6 +2933,8 @@ static void test_BreakawayOk(HANDLE job)
|
||||
ret = CreateProcessA(NULL, buffer, NULL, NULL, FALSE, CREATE_BREAKAWAY_FROM_JOB, NULL, NULL, &si, &pi);
|
||||
ok(!ret, "CreateProcessA expected failure\n");
|
||||
expect_eq_d(ERROR_ACCESS_DENIED, GetLastError());
|
||||
@@ -200,24 +200,24 @@ index f181536e7a6..4c2709cce0e 100644
|
||||
|
||||
if (ret)
|
||||
{
|
||||
@@ -2900,6 +2991,8 @@ static void test_BreakawayOk(HANDLE job)
|
||||
@@ -2861,6 +2952,8 @@ static void test_BreakawayOk(HANDLE job)
|
||||
ret = pIsProcessInJob(pi.hProcess, job, &out);
|
||||
ok(ret, "IsProcessInJob error %u\n", GetLastError());
|
||||
ok(!out, "IsProcessInJob returned out=%u\n", out);
|
||||
+ test_assigned_proc(job, 1, GetCurrentProcessId());
|
||||
+ test_accounting(job, 2, 1, 0);
|
||||
|
||||
dwret = WaitForSingleObject(pi.hProcess, 1000);
|
||||
ok(dwret == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", dwret);
|
||||
@@ -2917,6 +3010,8 @@ static void test_BreakawayOk(HANDLE job)
|
||||
wait_and_close_child_process(&pi);
|
||||
|
||||
@@ -2874,6 +2967,8 @@ static void test_BreakawayOk(HANDLE job)
|
||||
ret = pIsProcessInJob(pi.hProcess, job, &out);
|
||||
ok(ret, "IsProcessInJob error %u\n", GetLastError());
|
||||
ok(!out, "IsProcessInJob returned out=%u\n", out);
|
||||
+ test_assigned_proc(job, 1, GetCurrentProcessId());
|
||||
+ test_accounting(job, 2, 1, 0);
|
||||
|
||||
dwret = WaitForSingleObject(pi.hProcess, 1000);
|
||||
ok(dwret == WAIT_OBJECT_0, "WaitForSingleObject returned %u\n", dwret);
|
||||
wait_and_close_child_process(&pi);
|
||||
|
||||
--
|
||||
2.23.0
|
||||
2.25.1
|
||||
|
||||
|
@@ -1,15 +1,15 @@
|
||||
From 005d9c0bdb0dec9feb4263ec0afadd510722d09b Mon Sep 17 00:00:00 2001
|
||||
From 9ecf6543f498cfc6c1cfb44033746cfd1ba16587 Mon Sep 17 00:00:00 2001
|
||||
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
Date: Mon, 1 Jul 2019 09:58:55 +1000
|
||||
Subject: [PATCH] loader: Add Keyboard Layouts registry enteries.
|
||||
|
||||
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
---
|
||||
loader/wine.inf.in | 209 +++++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 209 insertions(+)
|
||||
loader/wine.inf.in | 215 +++++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 215 insertions(+)
|
||||
|
||||
diff --git a/loader/wine.inf.in b/loader/wine.inf.in
|
||||
index c3d3b770b5..0a7afd37d3 100644
|
||||
index 6e0cb212531..fc929859be3 100644
|
||||
--- a/loader/wine.inf.in
|
||||
+++ b/loader/wine.inf.in
|
||||
@@ -39,6 +39,7 @@ AddReg=\
|
||||
@@ -36,7 +36,7 @@ index c3d3b770b5..0a7afd37d3 100644
|
||||
MCI,\
|
||||
Misc,\
|
||||
Nls,\
|
||||
@@ -111,6 +114,7 @@ AddReg=\
|
||||
@@ -138,6 +141,7 @@ AddReg=\
|
||||
CurrentVersionWow64,\
|
||||
Debugger,\
|
||||
DirectX,\
|
||||
@@ -44,10 +44,16 @@ index c3d3b770b5..0a7afd37d3 100644
|
||||
MCI,\
|
||||
Misc,\
|
||||
Tapi,\
|
||||
@@ -1027,6 +1031,211 @@ HKLM,System\CurrentControlSet\Control\Nls\Locale\Alternate Sorts,"00021004",,"a"
|
||||
@@ -1087,6 +1091,217 @@ HKLM,System\CurrentControlSet\Control\Nls\Locale\Alternate Sorts,"00021004",,"a"
|
||||
HKLM,System\CurrentControlSet\Control\Nls\Locale\Alternate Sorts,"00021404",,"9"
|
||||
HKLM,System\CurrentControlSet\Control\Nls\Locale\Alternate Sorts,"00030404",,"9"
|
||||
|
||||
+HKLM,System\CurrentControlSet\Control\Nls\Normalization,"1",,"normnfc.nls"
|
||||
+HKLM,System\CurrentControlSet\Control\Nls\Normalization,"2",,"normnfd.nls"
|
||||
+HKLM,System\CurrentControlSet\Control\Nls\Normalization,"5",,"normnfkc.nls"
|
||||
+HKLM,System\CurrentControlSet\Control\Nls\Normalization,"6",,"normnfkd.nls"
|
||||
+HKLM,System\CurrentControlSet\Control\Nls\Normalization,"d",,"normidna.nls"
|
||||
+
|
||||
+[KeyboardLayouts]
|
||||
+HKLM,SYSTEM\CurrentControlSet\Control\Keyboard Layouts,,16
|
||||
+HKLM,SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000401,,16
|
||||
@@ -257,5 +263,5 @@ index c3d3b770b5..0a7afd37d3 100644
|
||||
HKLM,"Software\Microsoft\OLE","EnableDCOM",,"Y"
|
||||
HKLM,"Software\Microsoft\OLE","EnableRemoteConnect",,"N"
|
||||
--
|
||||
2.17.1
|
||||
2.25.1
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
From d9e16cb2bde3371d403da8dbbc2c7d63b9a29a27 Mon Sep 17 00:00:00 2001
|
||||
From caf668bdbcf74b6f00d6d70ae6030007852a082d Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Mon, 16 Mar 2015 03:46:36 +0100
|
||||
Subject: ntdll: Fix return value for missing
|
||||
Subject: [PATCH] ntdll: Fix return value for missing
|
||||
ACTIVATION_CONTEXT_SECTION_ASSEMBLY_INFORMATION key.
|
||||
|
||||
---
|
||||
@@ -10,10 +10,10 @@ Subject: ntdll: Fix return value for missing
|
||||
2 files changed, 19 insertions(+), 20 deletions(-)
|
||||
|
||||
diff --git a/dlls/kernel32/tests/actctx.c b/dlls/kernel32/tests/actctx.c
|
||||
index af3dadf..b68c895 100644
|
||||
index 4b7096276e8..8effbdbc9bc 100644
|
||||
--- a/dlls/kernel32/tests/actctx.c
|
||||
+++ b/dlls/kernel32/tests/actctx.c
|
||||
@@ -2067,7 +2067,7 @@ static HANDLE create_manifest(const char *filename, const char *data, int line)
|
||||
@@ -2365,7 +2365,7 @@ static HANDLE create_manifest(const char *filename, const char *data, int line)
|
||||
return handle;
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ index af3dadf..b68c895 100644
|
||||
{
|
||||
UNICODE_STRING string_to_findW;
|
||||
ACTCTX_SECTION_KEYED_DATA data;
|
||||
@@ -2084,7 +2084,6 @@ static void kernel32_find(ULONG section, const char *string_to_find, BOOL should
|
||||
@@ -2382,7 +2382,6 @@ static void kernel32_find(ULONG section, const char *string_to_find, BOOL should
|
||||
err = GetLastError();
|
||||
ok_(__FILE__, line)(ret == should_find,
|
||||
"FindActCtxSectionStringA: expected ret = %u, got %u\n", should_find, ret);
|
||||
@@ -30,7 +30,7 @@ index af3dadf..b68c895 100644
|
||||
ok_(__FILE__, line)(err == (should_find ? ERROR_SUCCESS : ERROR_SXS_KEY_NOT_FOUND),
|
||||
"FindActCtxSectionStringA: unexpected error %u\n", err);
|
||||
|
||||
@@ -2096,7 +2095,6 @@ static void kernel32_find(ULONG section, const char *string_to_find, BOOL should
|
||||
@@ -2394,7 +2393,6 @@ static void kernel32_find(ULONG section, const char *string_to_find, BOOL should
|
||||
err = GetLastError();
|
||||
ok_(__FILE__, line)(ret == should_find,
|
||||
"FindActCtxSectionStringW: expected ret = %u, got %u\n", should_find, ret);
|
||||
@@ -38,7 +38,7 @@ index af3dadf..b68c895 100644
|
||||
ok_(__FILE__, line)(err == (should_find ? ERROR_SUCCESS : ERROR_SXS_KEY_NOT_FOUND),
|
||||
"FindActCtxSectionStringW: unexpected error %u\n", err);
|
||||
|
||||
@@ -2119,7 +2117,7 @@ static void kernel32_find(ULONG section, const char *string_to_find, BOOL should
|
||||
@@ -2417,7 +2415,7 @@ static void kernel32_find(ULONG section, const char *string_to_find, BOOL should
|
||||
pRtlFreeUnicodeString(&string_to_findW);
|
||||
}
|
||||
|
||||
@@ -47,7 +47,7 @@ index af3dadf..b68c895 100644
|
||||
{
|
||||
UNICODE_STRING string_to_findW;
|
||||
ACTCTX_SECTION_KEYED_DATA data;
|
||||
@@ -2131,12 +2129,10 @@ static void ntdll_find(ULONG section, const char *string_to_find, BOOL should_fi
|
||||
@@ -2429,12 +2427,10 @@ static void ntdll_find(ULONG section, const char *string_to_find, BOOL should_fi
|
||||
data.cbSize = sizeof(data);
|
||||
|
||||
ret = pRtlFindActivationContextSectionString(0, NULL, section, &string_to_findW, &data);
|
||||
@@ -60,7 +60,7 @@ index af3dadf..b68c895 100644
|
||||
ok_(__FILE__, line)(ret == (should_find ? STATUS_SUCCESS : STATUS_SXS_KEY_NOT_FOUND),
|
||||
"RtlFindActivationContextSectionString: unexpected status 0x%x\n", ret);
|
||||
|
||||
@@ -2154,22 +2150,22 @@ static void test_findsectionstring(void)
|
||||
@@ -2452,22 +2448,22 @@ static void test_findsectionstring(void)
|
||||
ok(ret, "ActivateActCtx failed: %u\n", GetLastError());
|
||||
|
||||
/* first we show the parameter validation from kernel32 */
|
||||
@@ -95,13 +95,13 @@ index af3dadf..b68c895 100644
|
||||
+ ntdll_find(ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION, "wndClass2", TRUE, __LINE__);
|
||||
+ ntdll_find(ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION, "wndClass3", FALSE, __LINE__);
|
||||
|
||||
ret = pDeactivateActCtx(0, cookie);
|
||||
ret = DeactivateActCtx(0, cookie);
|
||||
ok(ret, "DeactivateActCtx failed: %u\n", GetLastError());
|
||||
diff --git a/dlls/ntdll/actctx.c b/dlls/ntdll/actctx.c
|
||||
index 4aa1a72..8957fad 100644
|
||||
index 59e9671f9a8..c50d1a42fcf 100644
|
||||
--- a/dlls/ntdll/actctx.c
|
||||
+++ b/dlls/ntdll/actctx.c
|
||||
@@ -4431,6 +4431,9 @@ static NTSTATUS find_string(ACTIVATION_CONTEXT* actctx, ULONG section_kind,
|
||||
@@ -4842,6 +4842,9 @@ static NTSTATUS find_string(ACTIVATION_CONTEXT* actctx, ULONG section_kind,
|
||||
|
||||
switch (section_kind)
|
||||
{
|
||||
@@ -112,5 +112,5 @@ index 4aa1a72..8957fad 100644
|
||||
status = find_dll_redirection(actctx, section_name, data);
|
||||
break;
|
||||
--
|
||||
2.7.0
|
||||
2.17.1
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user