mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2025-01-28 22:04:43 -08:00
Rebase against 46bdb6e59a007b71aa6a0932228e30bf3ad8bc2b.
This commit is contained in:
parent
5a89756c6a
commit
3daf410291
@ -72,7 +72,7 @@ for more details.*
|
||||
* Add stub for d3d11.D3D11CreateDeviceAndSwapChain ([Wine Bug #33153](https://bugs.winehq.org/show_bug.cgi?id=33153))
|
||||
* Add stub for fltlib.FilterLoad ([Wine Bug #38435](https://bugs.winehq.org/show_bug.cgi?id=38435))
|
||||
* Add stub for gdiplus.GdipCreateEffect ([Wine Bug #32163](https://bugs.winehq.org/show_bug.cgi?id=32163))
|
||||
* Add stub for kernel32.SetFileCompletionNotificationModes (for Steam in Win7 mode) ([Wine Bug #38493](https://bugs.winehq.org/show_bug.cgi?id=38493))
|
||||
* ~~Add stub for kernel32.SetFileCompletionNotificationModes (for Steam in Win7 mode)~~ ([Wine Bug #38493](https://bugs.winehq.org/show_bug.cgi?id=38493))
|
||||
* Add stub for ntoskrnl.ExAcquireResourceExclusiveLite
|
||||
* Add stub for ntoskrnl.ExDeleteResourceLite
|
||||
* Add stub for ntoskrnl.ExReleaseResourceForThread
|
||||
@ -172,7 +172,7 @@ for more details.*
|
||||
* GetMonitorInfo returns the same name for all monitors ([Wine Bug #37709](https://bugs.winehq.org/show_bug.cgi?id=37709))
|
||||
* GetSecurityInfo returns NULL DACL for process object ([Wine Bug #15980](https://bugs.winehq.org/show_bug.cgi?id=15980))
|
||||
* Graphical issues in Inquisitor ([Wine Bug #32490](https://bugs.winehq.org/show_bug.cgi?id=32490))
|
||||
* IOCTL_DVD_READ_STRUCTURE expects the wrong size of output buffer for some requests ([Wine Bug #37767](https://bugs.winehq.org/show_bug.cgi?id=37767))
|
||||
* ~~IOCTL_DVD_READ_STRUCTURE expects the wrong size of output buffer for some requests~~ ([Wine Bug #37767](https://bugs.winehq.org/show_bug.cgi?id=37767))
|
||||
* Ignore garbage after decoding gif lines ([Wine Bug #32227](https://bugs.winehq.org/show_bug.cgi?id=32227))
|
||||
* Ignore unsupported flags for CoInternetSetFeatureEnabled ([Wine Bug #35197](https://bugs.winehq.org/show_bug.cgi?id=35197))
|
||||
* Implement D3DXGetShaderOutputSemantics
|
||||
@ -250,7 +250,7 @@ for more details.*
|
||||
* Support for DDS file format in D3DXSaveTextureToFileInMemory ([Wine Bug #26898](https://bugs.winehq.org/show_bug.cgi?id=26898))
|
||||
* Support for DOS hidden/system file attributes ([Wine Bug #9158](https://bugs.winehq.org/show_bug.cgi?id=9158))
|
||||
* Support for FileFsFullSizeInformation information class
|
||||
* Support for GdipCreateRegionRgnData ([Wine Bug #34843](https://bugs.winehq.org/show_bug.cgi?id=34843))
|
||||
* ~~Support for GdipCreateRegionRgnData~~ ([Wine Bug #34843](https://bugs.winehq.org/show_bug.cgi?id=34843))
|
||||
* Support for GetFinalPathNameByHandle ([Wine Bug #34851](https://bugs.winehq.org/show_bug.cgi?id=34851))
|
||||
* Support for GetVolumePathName
|
||||
* Support for H264 DXVA2 GPU video decoding through vaapi
|
||||
@ -289,7 +289,7 @@ for more details.*
|
||||
* Use POSIX implementation to enumerate directory content on FreeBSD ([Wine Bug #35397](https://bugs.winehq.org/show_bug.cgi?id=35397))
|
||||
* Use actual program name if available to describe PulseAudio streams
|
||||
* Use manual relay for RunDLL_CallEntry16 in shell32 ([Wine Bug #23033](https://bugs.winehq.org/show_bug.cgi?id=23033))
|
||||
* Use random names when caching very long urls in wininet ([Wine Bug #34021](https://bugs.winehq.org/show_bug.cgi?id=34021))
|
||||
* ~~Use random names when caching very long urls in wininet~~
|
||||
* Voobly expects correct handling of WRITECOPY memory protection ([Wine Bug #29384](https://bugs.winehq.org/show_bug.cgi?id=29384))
|
||||
* Wine ignores IDF_CHECKFIRST flag in SetupPromptForDisk ([Wine Bug #20465](https://bugs.winehq.org/show_bug.cgi?id=20465))
|
||||
* Workaround for shlwapi URLs with relative paths
|
||||
|
8
debian/changelog
vendored
8
debian/changelog
vendored
@ -1,6 +1,14 @@
|
||||
wine-staging (1.7.46) UNRELEASED; urgency=low
|
||||
* Add reference to upstream bug report for various patchsets.
|
||||
* Added patch to improve IoGetDeviceObjectPointer stub to appease SecuROM 5.x.
|
||||
* Removed patch for implementation of GdipCreateRegionRgnData (accepted
|
||||
upstream).
|
||||
* Removed patch to fix output buffer size for IOCTL_DVD_READ_STRUCTURE
|
||||
requests (accepted upstream).
|
||||
* Removed patch to add stub for kernel32.SetFileCompletionNotificationModes
|
||||
(accepted upstream).
|
||||
* Removed patch to use random names when caching very long urls in wininet
|
||||
(accepted upstream).
|
||||
-- Sebastian Lackner <sebastian@fds-team.de> Sun, 14 Jun 2015 09:15:50 +0200
|
||||
|
||||
wine-staging (1.7.45) unstable; urgency=low
|
||||
|
@ -1,516 +0,0 @@
|
||||
From 662f5dfa5e3f4de2106b5abbe47b069fa580b94a Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Timoshkov <dmitry@baikal.ru>
|
||||
Date: Thu, 11 Jun 2015 15:32:36 +0200
|
||||
Subject: gdiplus: Implement GdipCreateRegionRgnData. Take 3.
|
||||
|
||||
---
|
||||
dlls/gdiplus/region.c | 249 ++++++++++++++++++++++++++++++++++++--------
|
||||
dlls/gdiplus/tests/region.c | 65 ++++++++++++
|
||||
2 files changed, 273 insertions(+), 41 deletions(-)
|
||||
|
||||
diff --git a/dlls/gdiplus/region.c b/dlls/gdiplus/region.c
|
||||
index 572df62..a3b526e 100644
|
||||
--- a/dlls/gdiplus/region.c
|
||||
+++ b/dlls/gdiplus/region.c
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2008 Google (Lei Zhang)
|
||||
+ * Copyright (C) 2013 Dmitry Timoshkov
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
@@ -76,6 +77,28 @@ WINE_DEFAULT_DEBUG_CHANNEL(gdiplus);
|
||||
#define FLAGS_NOFLAGS 0x0
|
||||
#define FLAGS_INTPATH 0x4000
|
||||
|
||||
+struct memory_buffer
|
||||
+{
|
||||
+ const BYTE *buffer;
|
||||
+ INT size, pos;
|
||||
+};
|
||||
+
|
||||
+struct region_header
|
||||
+{
|
||||
+ DWORD size;
|
||||
+ DWORD checksum;
|
||||
+ DWORD magic;
|
||||
+ DWORD num_children;
|
||||
+};
|
||||
+
|
||||
+struct path_header
|
||||
+{
|
||||
+ DWORD size;
|
||||
+ DWORD magic;
|
||||
+ DWORD count;
|
||||
+ DWORD flags;
|
||||
+};
|
||||
+
|
||||
/* Header size as far as header->size is concerned. This doesn't include
|
||||
* header->size or header->checksum
|
||||
*/
|
||||
@@ -729,15 +752,9 @@ static void write_element(const region_element* element, DWORD *buffer,
|
||||
{
|
||||
INT i;
|
||||
const GpPath* path = element->elementdata.path;
|
||||
- struct _pathheader
|
||||
- {
|
||||
- DWORD size;
|
||||
- DWORD magic;
|
||||
- DWORD count;
|
||||
- DWORD flags;
|
||||
- } *pathheader;
|
||||
+ struct path_header *pathheader;
|
||||
|
||||
- pathheader = (struct _pathheader *)(buffer + *filled);
|
||||
+ pathheader = (struct path_header *)(buffer + *filled);
|
||||
|
||||
pathheader->flags = is_integer_path(path) ? FLAGS_INTPATH : FLAGS_NOFLAGS;
|
||||
/* 3 for headers, once again size doesn't count itself */
|
||||
@@ -778,14 +795,6 @@ static void write_element(const region_element* element, DWORD *buffer,
|
||||
}
|
||||
}
|
||||
|
||||
-struct region_header
|
||||
-{
|
||||
- DWORD size;
|
||||
- DWORD checksum;
|
||||
- DWORD magic;
|
||||
- DWORD num_children;
|
||||
-};
|
||||
-
|
||||
/*****************************************************************************
|
||||
* GdipGetRegionData [GDIPLUS.@]
|
||||
*
|
||||
@@ -856,36 +865,190 @@ GpStatus WINGDIPAPI GdipGetRegionData(GpRegion *region, BYTE *buffer, UINT size,
|
||||
return Ok;
|
||||
}
|
||||
|
||||
-static inline GpStatus read_dword(DWORD **buffer, INT *size, DWORD *ret)
|
||||
+static inline void init_memory_buffer(struct memory_buffer *mbuf, const BYTE *buffer, INT size)
|
||||
{
|
||||
- if (*size < sizeof(DWORD))
|
||||
- return GenericError;
|
||||
+ mbuf->buffer = buffer;
|
||||
+ mbuf->size = size;
|
||||
+ mbuf->pos = 0;
|
||||
+}
|
||||
|
||||
- *ret = **buffer;
|
||||
- (*buffer)++;
|
||||
- (*size) -= sizeof(DWORD);
|
||||
- return Ok;
|
||||
+static inline const void *buffer_read(struct memory_buffer *mbuf, INT size)
|
||||
+{
|
||||
+ if (mbuf->size - mbuf->pos >= size)
|
||||
+ {
|
||||
+ const void *data = mbuf->buffer + mbuf->pos;
|
||||
+ mbuf->pos += size;
|
||||
+ return data;
|
||||
+ }
|
||||
+ return NULL;
|
||||
}
|
||||
|
||||
-static GpStatus read_element(GpRegion *region, region_element *element, DWORD **buffer, INT *size)
|
||||
+static GpStatus read_element(struct memory_buffer *mbuf, GpRegion *region, region_element *node, INT *count)
|
||||
{
|
||||
GpStatus status;
|
||||
+ const DWORD *type;
|
||||
|
||||
- status = read_dword(buffer, size, &element->type);
|
||||
- if (status != Ok)
|
||||
+ type = buffer_read(mbuf, sizeof(DWORD));
|
||||
+ if (!type) return Ok;
|
||||
+
|
||||
+ TRACE("type %#x\n", *type);
|
||||
+
|
||||
+ node->type = *type;
|
||||
+
|
||||
+ switch (node->type)
|
||||
+ {
|
||||
+ case CombineModeReplace:
|
||||
+ case CombineModeIntersect:
|
||||
+ case CombineModeUnion:
|
||||
+ case CombineModeXor:
|
||||
+ case CombineModeExclude:
|
||||
+ case CombineModeComplement:
|
||||
+ {
|
||||
+ region_element *left, *right;
|
||||
+
|
||||
+ left = GdipAlloc(sizeof(region_element));
|
||||
+ if (!left) return OutOfMemory;
|
||||
+ right = GdipAlloc(sizeof(region_element));
|
||||
+ if (!right)
|
||||
+ {
|
||||
+ GdipFree(left);
|
||||
+ return OutOfMemory;
|
||||
+ }
|
||||
+
|
||||
+ status = read_element(mbuf, region, left, count);
|
||||
+ if (status == Ok)
|
||||
+ {
|
||||
+ status = read_element(mbuf, region, right, count);
|
||||
+ if (status == Ok)
|
||||
+ {
|
||||
+ node->elementdata.combine.left = left;
|
||||
+ node->elementdata.combine.right = right;
|
||||
+ region->num_children += 2;
|
||||
+ return Ok;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ GdipFree(left);
|
||||
+ GdipFree(right);
|
||||
return status;
|
||||
+ }
|
||||
|
||||
- switch (element->type)
|
||||
+ case RegionDataRect:
|
||||
{
|
||||
- case RegionDataInfiniteRect:
|
||||
+ const GpRectF *rc;
|
||||
+
|
||||
+ rc = buffer_read(mbuf, sizeof(GpRectF));
|
||||
+ if (!rc)
|
||||
+ {
|
||||
+ ERR("failed to read rect data\n");
|
||||
+ return InvalidParameter;
|
||||
+ }
|
||||
+
|
||||
+ node->elementdata.rect = *rc;
|
||||
+ *count += 1;
|
||||
+ return Ok;
|
||||
+ }
|
||||
+
|
||||
+ case RegionDataPath:
|
||||
+ {
|
||||
+ GpPath *path;
|
||||
+ const struct path_header *path_header;
|
||||
+ const BYTE *types;
|
||||
+
|
||||
+ path_header = buffer_read(mbuf, sizeof(struct path_header));
|
||||
+ if (!path_header)
|
||||
+ {
|
||||
+ ERR("failed to read path header\n");
|
||||
+ return InvalidParameter;
|
||||
+ }
|
||||
+ if (path_header->magic != VERSION_MAGIC)
|
||||
+ {
|
||||
+ ERR("invalid path header magic %#x\n", path_header->magic);
|
||||
+ return InvalidParameter;
|
||||
+ }
|
||||
+
|
||||
+ /* Windows always fails to create an empty path in a region */
|
||||
+ if (!path_header->count)
|
||||
+ {
|
||||
+ TRACE("refusing to create an empty path in a region\n");
|
||||
+ return GenericError;
|
||||
+ }
|
||||
+
|
||||
+ status = GdipCreatePath(FillModeAlternate, &path);
|
||||
+ if (status) return status;
|
||||
+
|
||||
+ node->elementdata.path = path;
|
||||
+
|
||||
+ if (!lengthen_path(path, path_header->count))
|
||||
+ return OutOfMemory;
|
||||
+
|
||||
+ path->pathdata.Count = path_header->count;
|
||||
+
|
||||
+ if (path_header->flags & ~FLAGS_INTPATH)
|
||||
+ FIXME("unhandled path flags %#x\n", path_header->flags);
|
||||
+
|
||||
+ if (path_header->flags & FLAGS_INTPATH)
|
||||
+ {
|
||||
+ const packed_point *pt;
|
||||
+ DWORD i;
|
||||
+
|
||||
+ pt = buffer_read(mbuf, sizeof(packed_point) * path_header->count);
|
||||
+ if (!pt)
|
||||
+ {
|
||||
+ ERR("failed to read packed %u path points\n", path_header->count);
|
||||
+ return InvalidParameter;
|
||||
+ }
|
||||
+
|
||||
+ for (i = 0; i < path_header->count; i++)
|
||||
+ {
|
||||
+ path->pathdata.Points[i].X = (REAL)pt[i].X;
|
||||
+ path->pathdata.Points[i].Y = (REAL)pt[i].Y;
|
||||
+ }
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ const GpPointF *ptf;
|
||||
+
|
||||
+ ptf = buffer_read(mbuf, sizeof(GpPointF) * path_header->count);
|
||||
+ if (!ptf)
|
||||
+ {
|
||||
+ ERR("failed to read %u path points\n", path_header->count);
|
||||
+ return InvalidParameter;
|
||||
+ }
|
||||
+ memcpy(path->pathdata.Points, ptf, sizeof(GpPointF) * path_header->count);
|
||||
+ }
|
||||
+
|
||||
+ types = buffer_read(mbuf, path_header->count);
|
||||
+ if (!types)
|
||||
+ {
|
||||
+ ERR("failed to read %u path types\n", path_header->count);
|
||||
+ return InvalidParameter;
|
||||
+ }
|
||||
+ memcpy(path->pathdata.Types, types, path_header->count);
|
||||
+ if (path_header->count & 3)
|
||||
+ {
|
||||
+ if (!buffer_read(mbuf, 4 - (path_header->count & 3)))
|
||||
+ {
|
||||
+ ERR("failed to read rounding %u bytes\n", 4 - (path_header->count & 3));
|
||||
+ return InvalidParameter;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ *count += 1;
|
||||
+ return Ok;
|
||||
+ }
|
||||
+
|
||||
case RegionDataEmptyRect:
|
||||
- break;
|
||||
+ case RegionDataInfiniteRect:
|
||||
+ *count += 1;
|
||||
+ return Ok;
|
||||
+
|
||||
default:
|
||||
- FIXME("region element type 0x%08x not supported\n", element->type);
|
||||
- return NotImplemented;
|
||||
+ FIXME("element type %#x is not supported\n", *type);
|
||||
+ break;
|
||||
}
|
||||
|
||||
- return Ok;
|
||||
+ return InvalidParameter;
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
@@ -893,28 +1056,32 @@ static GpStatus read_element(GpRegion *region, region_element *element, DWORD **
|
||||
*/
|
||||
GpStatus WINGDIPAPI GdipCreateRegionRgnData(GDIPCONST BYTE *data, INT size, GpRegion **region)
|
||||
{
|
||||
- struct region_header *region_header;
|
||||
- DWORD *buffer = (DWORD*)data;
|
||||
+ const struct region_header *region_header;
|
||||
+ struct memory_buffer mbuf;
|
||||
GpStatus status;
|
||||
+ INT count;
|
||||
|
||||
TRACE("(%p, %d, %p)\n", data, size, region);
|
||||
|
||||
- if (!data || size < sizeof(*region_header) || !region)
|
||||
+ if (!data || !size)
|
||||
return InvalidParameter;
|
||||
|
||||
- region_header = (struct region_header *)buffer;
|
||||
- if (region_header->magic != VERSION_MAGIC && region_header->magic != VERSION_MAGIC2)
|
||||
+ init_memory_buffer(&mbuf, data, size);
|
||||
+
|
||||
+ region_header = buffer_read(&mbuf, sizeof(struct region_header));
|
||||
+ if (!region_header || (region_header->magic != VERSION_MAGIC &&
|
||||
+ region_header->magic != VERSION_MAGIC2))
|
||||
return InvalidParameter;
|
||||
|
||||
status = GdipCreateRegion(region);
|
||||
if (status != Ok)
|
||||
return status;
|
||||
|
||||
- /* skip header */
|
||||
- buffer += 4;
|
||||
- size -= sizeof(*region_header);
|
||||
+ count = 0;
|
||||
+ status = read_element(&mbuf, *region, &(*region)->node, &count);
|
||||
+ if (status == Ok && !count)
|
||||
+ status = InvalidParameter;
|
||||
|
||||
- status = read_element(*region, &(*region)->node, &buffer, &size);
|
||||
if (status != Ok)
|
||||
{
|
||||
GdipDeleteRegion(*region);
|
||||
diff --git a/dlls/gdiplus/tests/region.c b/dlls/gdiplus/tests/region.c
|
||||
index 92569c7..0c70ccd 100644
|
||||
--- a/dlls/gdiplus/tests/region.c
|
||||
+++ b/dlls/gdiplus/tests/region.c
|
||||
@@ -102,6 +102,56 @@ static void verify_region(HRGN hrgn, const RECT *rc)
|
||||
rgn.data.rdh.rcBound.left, rgn.data.rdh.rcBound.top, rgn.data.rdh.rcBound.right, rgn.data.rdh.rcBound.bottom);
|
||||
}
|
||||
|
||||
+static void test_region_data(DWORD *data, UINT size, INT line)
|
||||
+{
|
||||
+ GpStatus status;
|
||||
+ GpRegion *region;
|
||||
+ DWORD buf[256];
|
||||
+ UINT needed, i;
|
||||
+
|
||||
+ status = GdipCreateRegionRgnData((BYTE *)data, size, ®ion);
|
||||
+ /* Windows always fails to create an empty path in a region */
|
||||
+ if (data[4] == RGNDATA_PATH)
|
||||
+ {
|
||||
+ struct _path_header
|
||||
+ {
|
||||
+ DWORD size;
|
||||
+ DWORD magic;
|
||||
+ DWORD count;
|
||||
+ DWORD flags;
|
||||
+ } *path_header = (struct _path_header *)(data + 5);
|
||||
+ if (!path_header->count)
|
||||
+ {
|
||||
+ ok_(__FILE__, line)(status == GenericError, "expected GenericError, got %d\n", status);
|
||||
+ return;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ ok_(__FILE__, line)(status == Ok, "GdipCreateRegionRgnData error %d\n", status);
|
||||
+ if (status != Ok) return;
|
||||
+
|
||||
+ needed = 0;
|
||||
+ status = GdipGetRegionDataSize(region, &needed);
|
||||
+ ok_(__FILE__, line)(status == Ok, "status %d\n", status);
|
||||
+ ok_(__FILE__, line)(needed == size, "data size mismatch: %u != %u\n", needed, size);
|
||||
+
|
||||
+ memset(buf, 0xee, sizeof(buf));
|
||||
+ needed = 0;
|
||||
+ status = GdipGetRegionData(region, (BYTE *)buf, sizeof(buf), &needed);
|
||||
+ ok_(__FILE__, line)(status == Ok, "status %08x\n", status);
|
||||
+ ok_(__FILE__, line)(needed == size, "data size mismatch: %u != %u\n", needed, size);
|
||||
+
|
||||
+ size /= sizeof(DWORD);
|
||||
+ for (i = 0; i < size - 1; i++)
|
||||
+ {
|
||||
+ if (i == 1) continue; /* data[1] never matches */
|
||||
+ ok_(__FILE__, line)(data[i] == buf[i], "off %u: %#x != %#x\n", i, data[i], buf[i]);
|
||||
+ }
|
||||
+ /* some Windows versions fail to properly clear the aligned DWORD */
|
||||
+ ok_(__FILE__, line)(data[size - 1] == buf[size - 1] || broken(data[size - 1] != buf[size - 1]),
|
||||
+ "off %u: %#x != %#x\n", size - 1, data[size - 1], buf[size - 1]);
|
||||
+}
|
||||
+
|
||||
static void test_getregiondata(void)
|
||||
{
|
||||
GpStatus status;
|
||||
@@ -143,6 +193,7 @@ static void test_getregiondata(void)
|
||||
expect_dword(buf + 3, 0);
|
||||
expect_dword(buf + 4, RGNDATA_INFINITE_RECT);
|
||||
expect_dword(buf + 6, 0xeeeeeeee);
|
||||
+ test_region_data(buf, needed, __LINE__);
|
||||
|
||||
status = GdipSetEmpty(region);
|
||||
ok(status == Ok, "status %08x\n", status);
|
||||
@@ -160,6 +211,7 @@ static void test_getregiondata(void)
|
||||
expect_dword(buf + 3, 0);
|
||||
expect_dword(buf + 4, RGNDATA_EMPTY_RECT);
|
||||
expect_dword(buf + 6, 0xeeeeeeee);
|
||||
+ test_region_data(buf, needed, __LINE__);
|
||||
|
||||
status = GdipSetInfinite(region);
|
||||
ok(status == Ok, "status %08x\n", status);
|
||||
@@ -177,6 +229,7 @@ static void test_getregiondata(void)
|
||||
expect_dword(buf + 3, 0);
|
||||
expect_dword(buf + 4, RGNDATA_INFINITE_RECT);
|
||||
expect_dword(buf + 6, 0xeeeeeeee);
|
||||
+ test_region_data(buf, needed, __LINE__);
|
||||
|
||||
status = GdipDeleteRegion(region);
|
||||
ok(status == Ok, "status %08x\n", status);
|
||||
@@ -205,6 +258,7 @@ static void test_getregiondata(void)
|
||||
expect_float(buf + 7, 100.0);
|
||||
expect_float(buf + 8, 200.0);
|
||||
expect_dword(buf + 10, 0xeeeeeeee);
|
||||
+ test_region_data(buf, needed, __LINE__);
|
||||
|
||||
rect.X = 50;
|
||||
rect.Y = 30;
|
||||
@@ -290,6 +344,7 @@ static void test_getregiondata(void)
|
||||
expect_float(buf + 37, 22.0);
|
||||
expect_float(buf + 38, 55.0);
|
||||
expect_dword(buf + 39, 0xeeeeeeee);
|
||||
+ test_region_data(buf, needed, __LINE__);
|
||||
|
||||
status = GdipDeleteRegion(region2);
|
||||
ok(status == Ok, "status %08x\n", status);
|
||||
@@ -331,6 +386,7 @@ static void test_getregiondata(void)
|
||||
expect_float(buf + 16, 28.0);
|
||||
expect_dword(buf + 17, 0x81010100);
|
||||
expect_dword(buf + 18, 0xeeeeeeee);
|
||||
+ test_region_data(buf, needed, __LINE__);
|
||||
|
||||
rect.X = 50;
|
||||
rect.Y = 30;
|
||||
@@ -371,6 +427,7 @@ static void test_getregiondata(void)
|
||||
expect_float(buf + 22, 10.0);
|
||||
expect_float(buf + 23, 20.0);
|
||||
expect_dword(buf + 24, 0xeeeeeeee);
|
||||
+ test_region_data(buf, needed, __LINE__);
|
||||
|
||||
status = GdipDeleteRegion(region);
|
||||
ok(status == Ok, "status %08x\n", status);
|
||||
@@ -403,6 +460,7 @@ static void test_getregiondata(void)
|
||||
ok(*(buf + 8) == 0x4000 /* before win7 */ || *(buf + 8) == 0,
|
||||
"expected 0x4000 or 0, got %08x\n", *(buf + 8));
|
||||
expect_dword(buf + 10, 0xeeeeeeee);
|
||||
+ test_region_data(buf, needed, __LINE__);
|
||||
|
||||
/* Transform an empty region */
|
||||
status = GdipCreateMatrix(&matrix);
|
||||
@@ -453,6 +511,7 @@ static void test_getregiondata(void)
|
||||
expect(6, point[3].Y);
|
||||
expect_dword(buf + 13, 0x81010100); /* 0x01010100 if we don't close the path */
|
||||
expect_dword(buf + 14, 0xeeeeeeee);
|
||||
+ test_region_data(buf, needed, __LINE__);
|
||||
|
||||
status = GdipTranslateRegion(region, 0.6, 0.8);
|
||||
expect(Ok, status);
|
||||
@@ -480,6 +539,7 @@ static void test_getregiondata(void)
|
||||
expect_float(buf + 16, 6.8);
|
||||
expect_dword(buf + 17, 0x81010100); /* 0x01010100 if we don't close the path */
|
||||
expect_dword(buf + 18, 0xeeeeeeee);
|
||||
+ test_region_data(buf, needed, __LINE__);
|
||||
|
||||
status = GdipDeletePath(path);
|
||||
expect(Ok, status);
|
||||
@@ -522,6 +582,7 @@ static void test_getregiondata(void)
|
||||
expect_float(buf + 16, 6.2);
|
||||
expect_dword(buf + 17, 0x01010100);
|
||||
expect_dword(buf + 18, 0xeeeeeeee);
|
||||
+ test_region_data(buf, needed, __LINE__);
|
||||
|
||||
status = GdipDeletePath(path);
|
||||
expect(Ok, status);
|
||||
@@ -584,6 +645,7 @@ static void test_getregiondata(void)
|
||||
ok(*(buf + 28) == 0x00000101 || *(buf + 28) == 0x43050101 /* Win 7 */,
|
||||
"expected 00000101 or 43050101 got %08x\n", *(buf + 28));
|
||||
expect_dword(buf + 29, 0xeeeeeeee);
|
||||
+ test_region_data(buf, needed, __LINE__);
|
||||
|
||||
status = GdipDeletePath(path);
|
||||
expect(Ok, status);
|
||||
@@ -627,6 +689,7 @@ static void test_getregiondata(void)
|
||||
expect(23, point[3].Y);
|
||||
expect_dword(buf + 13, 0x81010100); /* 0x01010100 if we don't close the path */
|
||||
expect_dword(buf + 14, 0xeeeeeeee);
|
||||
+ test_region_data(buf, needed, __LINE__);
|
||||
|
||||
status = GdipDeletePath(path);
|
||||
expect(Ok, status);
|
||||
@@ -669,6 +732,7 @@ static void test_getregiondata(void)
|
||||
expect_float(buf + 16, 2300.0);
|
||||
expect_dword(buf + 17, 0x81010100); /* 0x01010100 if we don't close the path */
|
||||
expect_dword(buf + 18, 0xeeeeeeee);
|
||||
+ test_region_data(buf, needed, __LINE__);
|
||||
|
||||
status = GdipDeletePath(path);
|
||||
expect(Ok, status);
|
||||
@@ -732,6 +796,7 @@ static void test_getregiondata(void)
|
||||
*(buf + 33) == 0x43030303 /* 32-bit win7 */ || *(buf + 33) == 0x4c030303 /* 64-bit win7 */,
|
||||
"expected 0x00030303 or 0x43030303 or 0x4c030303 got %08x\n", *(buf + 33));
|
||||
expect_dword(buf + 34, 0xeeeeeeee);
|
||||
+ test_region_data(buf, needed, __LINE__);
|
||||
|
||||
status = GdipDeletePath(path);
|
||||
expect(Ok, status);
|
||||
--
|
||||
2.4.2
|
||||
|
@ -1 +0,0 @@
|
||||
Fixes: [34843] Support for GdipCreateRegionRgnData
|
@ -1,74 +0,0 @@
|
||||
From f8bfaee1501abb1b24d80f2221c3b55ca4a3a628 Mon Sep 17 00:00:00 2001
|
||||
From: "Olivier F. R. Dierick" <o.dierick@piezo-forte.be>
|
||||
Date: Thu, 30 Apr 2015 22:58:37 +0200
|
||||
Subject: kernel32: Implement SetFileCompletionNotificationModes as a stub.
|
||||
|
||||
---
|
||||
.../api-ms-win-core-kernel32-legacy-l1-1-0.spec | 2 +-
|
||||
dlls/kernel32/file.c | 10 ++++++++++
|
||||
dlls/kernel32/kernel32.spec | 2 +-
|
||||
include/winbase.h | 1 +
|
||||
4 files changed, 13 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/dlls/api-ms-win-core-kernel32-legacy-l1-1-0/api-ms-win-core-kernel32-legacy-l1-1-0.spec b/dlls/api-ms-win-core-kernel32-legacy-l1-1-0/api-ms-win-core-kernel32-legacy-l1-1-0.spec
|
||||
index f4b9050..7c196c9 100644
|
||||
--- a/dlls/api-ms-win-core-kernel32-legacy-l1-1-0/api-ms-win-core-kernel32-legacy-l1-1-0.spec
|
||||
+++ b/dlls/api-ms-win-core-kernel32-legacy-l1-1-0/api-ms-win-core-kernel32-legacy-l1-1-0.spec
|
||||
@@ -45,7 +45,7 @@
|
||||
@ stub RaiseFailFastException
|
||||
@ stdcall RegisterWaitForSingleObject(ptr long ptr ptr long long) kernel32.RegisterWaitForSingleObject
|
||||
@ stdcall SetConsoleTitleA(str) kernel32.SetConsoleTitleA
|
||||
-@ stub SetFileCompletionNotificationModes
|
||||
+@ stdcall SetFileCompletionNotificationModes(long long) kernel32.SetFileCompletionNotificationModes
|
||||
@ stdcall SetHandleCount(long) kernel32.SetHandleCount
|
||||
@ stdcall SetMailslotInfo(long long) kernel32.SetMailslotInfo
|
||||
@ stdcall SetVolumeLabelW(wstr wstr) kernel32.SetVolumeLabelW
|
||||
diff --git a/dlls/kernel32/file.c b/dlls/kernel32/file.c
|
||||
index bcb21c9..3e557aa 100644
|
||||
--- a/dlls/kernel32/file.c
|
||||
+++ b/dlls/kernel32/file.c
|
||||
@@ -1041,6 +1041,16 @@ BOOL WINAPI SetEndOfFile( HANDLE hFile )
|
||||
}
|
||||
|
||||
|
||||
+/**************************************************************************
|
||||
+ * SetFileCompletionNotificationModes (KERNEL32.@)
|
||||
+ */
|
||||
+BOOL WINAPI SetFileCompletionNotificationModes( HANDLE file, UCHAR flags )
|
||||
+{
|
||||
+ FIXME("%p %x - stub\n", file, flags);
|
||||
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
||||
+ return FALSE;
|
||||
+}
|
||||
+
|
||||
/***********************************************************************
|
||||
* SetFileInformationByHandle (KERNEL32.@)
|
||||
*/
|
||||
diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec
|
||||
index a0c8123..8e97cdb 100644
|
||||
--- a/dlls/kernel32/kernel32.spec
|
||||
+++ b/dlls/kernel32/kernel32.spec
|
||||
@@ -1393,7 +1393,7 @@
|
||||
# @ stub SetFileAttributesTransactedW
|
||||
@ stdcall SetFileAttributesW(wstr long)
|
||||
# @ stub SetFileBandwidthReservation
|
||||
-# @ stub SetFileCompletionNotificationModes
|
||||
+@ stdcall SetFileCompletionNotificationModes(long long)
|
||||
@ stdcall SetFileInformationByHandle(long long ptr long)
|
||||
# @ stub SetFileIoOverlappedRange
|
||||
@ stdcall SetFilePointer(long long ptr long)
|
||||
diff --git a/include/winbase.h b/include/winbase.h
|
||||
index e20a675..cc1081e 100644
|
||||
--- a/include/winbase.h
|
||||
+++ b/include/winbase.h
|
||||
@@ -2460,6 +2460,7 @@ WINBASEAPI VOID WINAPI SetFileApisToOEM(void);
|
||||
WINBASEAPI BOOL WINAPI SetFileAttributesA(LPCSTR,DWORD);
|
||||
WINBASEAPI BOOL WINAPI SetFileAttributesW(LPCWSTR,DWORD);
|
||||
#define SetFileAttributes WINELIB_NAME_AW(SetFileAttributes)
|
||||
+WINBASEAPI BOOL WINAPI SetFileCompletionNotificationModes(HANDLE,UCHAR);
|
||||
WINBASEAPI BOOL WINAPI SetFileInformationByHandle(HANDLE,FILE_INFO_BY_HANDLE_CLASS,LPVOID,DWORD);
|
||||
WINBASEAPI DWORD WINAPI SetFilePointer(HANDLE,LONG,LPLONG,DWORD);
|
||||
WINBASEAPI BOOL WINAPI SetFilePointerEx(HANDLE,LARGE_INTEGER,LARGE_INTEGER*,DWORD);
|
||||
--
|
||||
2.4.2
|
||||
|
@ -1 +0,0 @@
|
||||
Fixes: [38493] Add stub for kernel32.SetFileCompletionNotificationModes (for Steam in Win7 mode)
|
@ -1,55 +0,0 @@
|
||||
From bb710e8476f67b51076f25866657f97c7907c442 Mon Sep 17 00:00:00 2001
|
||||
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
|
||||
Date: Mon, 22 Dec 2014 20:32:29 -0700
|
||||
Subject: ntdll: Fix expected IOCTL_DVD_READ_STRUCTURE expected output size.
|
||||
(rev 2)
|
||||
|
||||
---
|
||||
dlls/ntdll/cdrom.c | 24 +++++++++++++++++++++++-
|
||||
1 file changed, 23 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/ntdll/cdrom.c b/dlls/ntdll/cdrom.c
|
||||
index 25a3fde..4407277 100644
|
||||
--- a/dlls/ntdll/cdrom.c
|
||||
+++ b/dlls/ntdll/cdrom.c
|
||||
@@ -2491,6 +2491,28 @@ static NTSTATUS DVD_GetRegion(int fd, PDVD_REGION region)
|
||||
#endif
|
||||
}
|
||||
|
||||
+static DWORD DVD_ReadStructureSize(const DVD_READ_STRUCTURE *structure, DWORD size)
|
||||
+{
|
||||
+ if (!structure || size != sizeof(DVD_READ_STRUCTURE))
|
||||
+ return 0;
|
||||
+
|
||||
+ switch (structure->Format)
|
||||
+ {
|
||||
+ case DvdPhysicalDescriptor:
|
||||
+ return sizeof(DVD_LAYER_DESCRIPTOR);
|
||||
+ case DvdCopyrightDescriptor:
|
||||
+ return sizeof(DVD_COPYRIGHT_DESCRIPTOR);
|
||||
+ case DvdDiskKeyDescriptor:
|
||||
+ return sizeof(DVD_DISK_KEY_DESCRIPTOR);
|
||||
+ case DvdBCADescriptor:
|
||||
+ return sizeof(DVD_BCA_DESCRIPTOR);
|
||||
+ case DvdManufacturerDescriptor:
|
||||
+ return sizeof(DVD_MANUFACTURER_DESCRIPTOR);
|
||||
+ default:
|
||||
+ return 0;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
/******************************************************************
|
||||
* DVD_ReadStructure
|
||||
*
|
||||
@@ -3097,7 +3119,7 @@ NTSTATUS CDROM_DeviceIoControl(HANDLE hDevice,
|
||||
}
|
||||
break;
|
||||
case IOCTL_DVD_READ_STRUCTURE:
|
||||
- sz = sizeof(DVD_LAYER_DESCRIPTOR);
|
||||
+ sz = DVD_ReadStructureSize(lpInBuffer, nInBufferSize);
|
||||
if (lpInBuffer == NULL || nInBufferSize != sizeof(DVD_READ_STRUCTURE)) status = STATUS_INVALID_PARAMETER;
|
||||
else if (nOutBufferSize < sz || !lpOutBuffer) status = STATUS_BUFFER_TOO_SMALL;
|
||||
else
|
||||
--
|
||||
2.3.5
|
||||
|
@ -1 +0,0 @@
|
||||
Fixes: [37767] IOCTL_DVD_READ_STRUCTURE expects the wrong size of output buffer for some requests
|
@ -55,7 +55,7 @@ version()
|
||||
echo "Copyright (C) 2014-2015 the Wine Staging project authors."
|
||||
echo ""
|
||||
echo "Patchset to be applied on upstream Wine:"
|
||||
echo " commit cde46665fa8503e90c9a2fab1898cdb4d22f667b"
|
||||
echo " commit 46bdb6e59a007b71aa6a0932228e30bf3ad8bc2b"
|
||||
echo ""
|
||||
}
|
||||
|
||||
@ -125,7 +125,6 @@ patch_enable_all ()
|
||||
enable_gdi32_MultiMonitor="$1"
|
||||
enable_gdiplus_GIF_Encoder="$1"
|
||||
enable_gdiplus_GdipCreateEffect="$1"
|
||||
enable_gdiplus_GdipCreateRegionRgnData="$1"
|
||||
enable_imagehlp_BindImageEx="$1"
|
||||
enable_imagehlp_ImageLoad="$1"
|
||||
enable_inetcpl_Default_Home="$1"
|
||||
@ -141,7 +140,6 @@ patch_enable_all ()
|
||||
enable_kernel32_Named_Pipe="$1"
|
||||
enable_kernel32_NeedCurrentDirectoryForExePath="$1"
|
||||
enable_kernel32_Profile="$1"
|
||||
enable_kernel32_SetFileCompletionNotificationMode="$1"
|
||||
enable_kernel32_SetFileInformationByHandle="$1"
|
||||
enable_kernel32_TimezoneInformation_Registry="$1"
|
||||
enable_kernel32_VerifyVersionInfo="$1"
|
||||
@ -162,7 +160,6 @@ patch_enable_all ()
|
||||
enable_ntdll_Activation_Context="$1"
|
||||
enable_ntdll_CLI_Images="$1"
|
||||
enable_ntdll_DOS_Attributes="$1"
|
||||
enable_ntdll_DVD_Read_Size="$1"
|
||||
enable_ntdll_DeviceType_Systemroot="$1"
|
||||
enable_ntdll_DllRedirects="$1"
|
||||
enable_ntdll_Exception="$1"
|
||||
@ -279,7 +276,6 @@ patch_enable_all ()
|
||||
enable_winex11_Window_Style="$1"
|
||||
enable_winex11_XEMBED="$1"
|
||||
enable_winex11_wglShareLists="$1"
|
||||
enable_wininet_Cache_Long_URLs="$1"
|
||||
enable_wininet_Cleanup="$1"
|
||||
enable_wininet_ParseX509EncodedCertificateForListBoxEntry="$1"
|
||||
enable_winmm_Delay_Import_Depends="$1"
|
||||
@ -458,9 +454,6 @@ patch_enable ()
|
||||
gdiplus-GdipCreateEffect)
|
||||
enable_gdiplus_GdipCreateEffect="$2"
|
||||
;;
|
||||
gdiplus-GdipCreateRegionRgnData)
|
||||
enable_gdiplus_GdipCreateRegionRgnData="$2"
|
||||
;;
|
||||
imagehlp-BindImageEx)
|
||||
enable_imagehlp_BindImageEx="$2"
|
||||
;;
|
||||
@ -506,9 +499,6 @@ patch_enable ()
|
||||
kernel32-Profile)
|
||||
enable_kernel32_Profile="$2"
|
||||
;;
|
||||
kernel32-SetFileCompletionNotificationMode)
|
||||
enable_kernel32_SetFileCompletionNotificationMode="$2"
|
||||
;;
|
||||
kernel32-SetFileInformationByHandle)
|
||||
enable_kernel32_SetFileInformationByHandle="$2"
|
||||
;;
|
||||
@ -569,9 +559,6 @@ patch_enable ()
|
||||
ntdll-DOS_Attributes)
|
||||
enable_ntdll_DOS_Attributes="$2"
|
||||
;;
|
||||
ntdll-DVD_Read_Size)
|
||||
enable_ntdll_DVD_Read_Size="$2"
|
||||
;;
|
||||
ntdll-DeviceType_Systemroot)
|
||||
enable_ntdll_DeviceType_Systemroot="$2"
|
||||
;;
|
||||
@ -920,9 +907,6 @@ patch_enable ()
|
||||
winex11-wglShareLists)
|
||||
enable_winex11_wglShareLists="$2"
|
||||
;;
|
||||
wininet-Cache_Long_URLs)
|
||||
enable_wininet_Cache_Long_URLs="$2"
|
||||
;;
|
||||
wininet-Cleanup)
|
||||
enable_wininet_Cleanup="$2"
|
||||
;;
|
||||
@ -2879,21 +2863,6 @@ if test "$enable_gdiplus_GdipCreateEffect" -eq 1; then
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset gdiplus-GdipCreateRegionRgnData
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#34843] Support for GdipCreateRegionRgnData
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/gdiplus/region.c, dlls/gdiplus/tests/region.c
|
||||
# |
|
||||
if test "$enable_gdiplus_GdipCreateRegionRgnData" -eq 1; then
|
||||
patch_apply gdiplus-GdipCreateRegionRgnData/0001-gdiplus-Implement-GdipCreateRegionRgnData.-Take-3.patch
|
||||
(
|
||||
echo '+ { "Dmitry Timoshkov", "gdiplus: Implement GdipCreateRegionRgnData.", 3 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset imagehlp-BindImageEx
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
@ -2977,18 +2946,6 @@ if test "$enable_kernel32_CompareStringEx" -eq 1; then
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset kernel32-SetFileInformationByHandle
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * include/winbase.h
|
||||
# |
|
||||
if test "$enable_kernel32_SetFileInformationByHandle" -eq 1; then
|
||||
patch_apply kernel32-SetFileInformationByHandle/0001-include-Declare-a-couple-more-file-information-class.patch
|
||||
(
|
||||
echo '+ { "Michael Müller", "include: Declare a couple more file information class structures.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset server-File_Permissions
|
||||
# |
|
||||
# | Modified files:
|
||||
@ -3052,6 +3009,18 @@ if test "$enable_ntdll_FileDispositionInformation" -eq 1; then
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset kernel32-SetFileInformationByHandle
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * include/winbase.h
|
||||
# |
|
||||
if test "$enable_kernel32_SetFileInformationByHandle" -eq 1; then
|
||||
patch_apply kernel32-SetFileInformationByHandle/0001-include-Declare-a-couple-more-file-information-class.patch
|
||||
(
|
||||
echo '+ { "Michael Müller", "include: Declare a couple more file information class structures.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset kernel32-CopyFileEx
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
@ -3250,22 +3219,6 @@ if test "$enable_kernel32_Profile" -eq 1; then
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset kernel32-SetFileCompletionNotificationMode
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#38493] Add stub for kernel32.SetFileCompletionNotificationModes (for Steam in Win7 mode)
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/api-ms-win-core-kernel32-legacy-l1-1-0/api-ms-win-core-kernel32-legacy-l1-1-0.spec, dlls/kernel32/file.c,
|
||||
# | dlls/kernel32/kernel32.spec, include/winbase.h
|
||||
# |
|
||||
if test "$enable_kernel32_SetFileCompletionNotificationMode" -eq 1; then
|
||||
patch_apply kernel32-SetFileCompletionNotificationMode/0001-kernel32-Implement-SetFileCompletionNotificationMode.patch
|
||||
(
|
||||
echo '+ { "Olivier F. R. Dierick", "kernel32: Implement SetFileCompletionNotificationModes as a stub.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset kernel32-TimezoneInformation_Registry
|
||||
# |
|
||||
# | Modified files:
|
||||
@ -3552,21 +3505,6 @@ if test "$enable_ntdll_DOS_Attributes" -eq 1; then
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset ntdll-DVD_Read_Size
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#37767] IOCTL_DVD_READ_STRUCTURE expects the wrong size of output buffer for some requests
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/ntdll/cdrom.c
|
||||
# |
|
||||
if test "$enable_ntdll_DVD_Read_Size" -eq 1; then
|
||||
patch_apply ntdll-DVD_Read_Size/0001-ntdll-Fix-expected-IOCTL_DVD_READ_STRUCTURE-expected.patch
|
||||
(
|
||||
echo '+ { "Erich E. Hoover", "ntdll: Fix expected IOCTL_DVD_READ_STRUCTURE expected output size.", 2 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset ntdll-DeviceType_Systemroot
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
@ -5120,6 +5058,57 @@ if test "$enable_wined3d_CSMT_Helper" -eq 1; then
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset wined3d-UnhandledBlendFactor
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/wined3d/state.c
|
||||
# |
|
||||
if test "$enable_wined3d_UnhandledBlendFactor" -eq 1; then
|
||||
patch_apply wined3d-UnhandledBlendFactor/0001-wined3d-Silence-repeated-Unhandled-blend-factor-0-me.patch
|
||||
(
|
||||
echo '+ { "Sebastian Lackner", "wined3d: Silence repeated '\''Unhandled blend factor 0'\'' messages.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset wined3d-wined3d_swapchain_present
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/wined3d/swapchain.c
|
||||
# |
|
||||
if test "$enable_wined3d_wined3d_swapchain_present" -eq 1; then
|
||||
patch_apply wined3d-wined3d_swapchain_present/0001-wined3d-Silence-repeated-wined3d_swapchain_present-F.patch
|
||||
(
|
||||
echo '+ { "Sebastian Lackner", "wined3d: Silence repeated wined3d_swapchain_present FIXME.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset wined3d-resource_check_usage
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/wined3d/resource.c
|
||||
# |
|
||||
if test "$enable_wined3d_resource_check_usage" -eq 1; then
|
||||
patch_apply wined3d-resource_check_usage/0001-wined3d-Silence-repeated-resource_check_usage-FIXME.patch
|
||||
(
|
||||
echo '+ { "Erich E. Hoover", "wined3d: Silence repeated resource_check_usage FIXME.", 2 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset wined3d-Multisampling
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#12652] Allow to override number of quality levels for D3DMULTISAMPLE_NONMASKABLE.
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/wined3d/directx.c, dlls/wined3d/wined3d_main.c, dlls/wined3d/wined3d_private.h
|
||||
# |
|
||||
if test "$enable_wined3d_Multisampling" -eq 1; then
|
||||
patch_apply wined3d-Multisampling/0001-wined3d-Allow-to-specify-multisampling-AA-quality-le.patch
|
||||
(
|
||||
echo '+ { "Austin English", "wined3d: Allow to specify multisampling AA quality levels via registry.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset wined3d-Revert_PixelFormat
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
@ -5154,57 +5143,6 @@ if test "$enable_wined3d_Revert_PixelFormat" -eq 1; then
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset wined3d-resource_check_usage
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/wined3d/resource.c
|
||||
# |
|
||||
if test "$enable_wined3d_resource_check_usage" -eq 1; then
|
||||
patch_apply wined3d-resource_check_usage/0001-wined3d-Silence-repeated-resource_check_usage-FIXME.patch
|
||||
(
|
||||
echo '+ { "Erich E. Hoover", "wined3d: Silence repeated resource_check_usage FIXME.", 2 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset wined3d-wined3d_swapchain_present
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/wined3d/swapchain.c
|
||||
# |
|
||||
if test "$enable_wined3d_wined3d_swapchain_present" -eq 1; then
|
||||
patch_apply wined3d-wined3d_swapchain_present/0001-wined3d-Silence-repeated-wined3d_swapchain_present-F.patch
|
||||
(
|
||||
echo '+ { "Sebastian Lackner", "wined3d: Silence repeated wined3d_swapchain_present FIXME.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset wined3d-Multisampling
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#12652] Allow to override number of quality levels for D3DMULTISAMPLE_NONMASKABLE.
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/wined3d/directx.c, dlls/wined3d/wined3d_main.c, dlls/wined3d/wined3d_private.h
|
||||
# |
|
||||
if test "$enable_wined3d_Multisampling" -eq 1; then
|
||||
patch_apply wined3d-Multisampling/0001-wined3d-Allow-to-specify-multisampling-AA-quality-le.patch
|
||||
(
|
||||
echo '+ { "Austin English", "wined3d: Allow to specify multisampling AA quality levels via registry.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset wined3d-UnhandledBlendFactor
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/wined3d/state.c
|
||||
# |
|
||||
if test "$enable_wined3d_UnhandledBlendFactor" -eq 1; then
|
||||
patch_apply wined3d-UnhandledBlendFactor/0001-wined3d-Silence-repeated-Unhandled-blend-factor-0-me.patch
|
||||
(
|
||||
echo '+ { "Sebastian Lackner", "wined3d: Silence repeated '\''Unhandled blend factor 0'\'' messages.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset wined3d-CSMT_Main
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
@ -5809,21 +5747,6 @@ if test "$enable_winex11_wglShareLists" -eq 1; then
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset wininet-Cache_Long_URLs
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#34021] Use random names when caching very long urls in wininet
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/wininet/urlcache.c
|
||||
# |
|
||||
if test "$enable_wininet_Cache_Long_URLs" -eq 1; then
|
||||
patch_apply wininet-Cache_Long_URLs/0001-wininet-Use-random-names-when-caching-very-long-urls.patch
|
||||
(
|
||||
echo '+ { "Michael Müller", "wininet: Use random names when caching very long urls.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset wininet-Cleanup
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
|
@ -7090,7 +7090,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
}
|
||||
|
||||
void * CDECL wined3d_surface_get_parent(const struct wined3d_surface *surface)
|
||||
@@ -1923,6 +2338,7 @@
|
||||
@@ -1902,6 +2317,7 @@
|
||||
{
|
||||
DeleteDC(surface->hDC);
|
||||
DeleteObject(surface->dib.DIBsection);
|
||||
@ -7098,7 +7098,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
surface->resource.bitmap_data = NULL;
|
||||
surface->flags &= ~SFLAG_DIBSECTION;
|
||||
create_dib = TRUE;
|
||||
@@ -1931,6 +2347,15 @@
|
||||
@@ -1910,6 +2326,15 @@
|
||||
surface->resource.locations = 0;
|
||||
wined3d_resource_free_sysmem(&surface->resource);
|
||||
surface->resource.map_heap_memory = NULL;
|
||||
@ -7114,7 +7114,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
|
||||
width = texture_resource->width;
|
||||
height = texture_resource->height;
|
||||
@@ -1956,7 +2381,11 @@
|
||||
@@ -1935,7 +2360,11 @@
|
||||
else
|
||||
surface->flags &= ~SFLAG_NONPOW2;
|
||||
|
||||
@ -7126,7 +7126,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
{
|
||||
surface->resource.map_binding = WINED3D_LOCATION_USER_MEMORY;
|
||||
valid_location = WINED3D_LOCATION_USER_MEMORY;
|
||||
@@ -1998,11 +2427,19 @@
|
||||
@@ -1977,11 +2406,19 @@
|
||||
|
||||
if (!valid_location)
|
||||
{
|
||||
@ -7146,7 +7146,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
|
||||
return WINED3D_OK;
|
||||
}
|
||||
@@ -2361,6 +2798,7 @@
|
||||
@@ -2340,6 +2777,7 @@
|
||||
|
||||
static struct wined3d_texture *surface_convert_format(struct wined3d_surface *source, enum wined3d_format_id to_fmt)
|
||||
{
|
||||
@ -7154,7 +7154,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
void *dst_data = NULL, *src_data = NULL;
|
||||
UINT src_row_pitch, src_slice_pitch, dst_row_pitch, dst_slice_pitch;
|
||||
const struct d3dfmt_converter_desc *conv;
|
||||
@@ -2369,6 +2807,13 @@
|
||||
@@ -2348,6 +2786,13 @@
|
||||
struct wined3d_surface *dst;
|
||||
struct wined3d_context *context = NULL;
|
||||
struct wined3d_device *device = source->resource.device;
|
||||
@ -7168,7 +7168,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
|
||||
conv = find_converter(source->resource.format->id, to_fmt);
|
||||
if (!conv)
|
||||
@@ -2392,6 +2837,7 @@
|
||||
@@ -2371,6 +2816,7 @@
|
||||
}
|
||||
dst = surface_from_resource(wined3d_texture_get_sub_resource(ret, 0));
|
||||
|
||||
@ -7176,7 +7176,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
wined3d_resource_get_pitch(&source->resource, &src_row_pitch, &src_slice_pitch);
|
||||
wined3d_resource_get_pitch(&ret->resource, &dst_row_pitch, &dst_slice_pitch);
|
||||
|
||||
@@ -2432,6 +2878,32 @@
|
||||
@@ -2411,6 +2857,32 @@
|
||||
if (context)
|
||||
context_release(context);
|
||||
return NULL;
|
||||
@ -7209,7 +7209,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
}
|
||||
|
||||
static HRESULT _Blt_ColorFill(BYTE *buf, unsigned int width, unsigned int height,
|
||||
@@ -2499,6 +2971,7 @@
|
||||
@@ -2478,6 +2950,7 @@
|
||||
|
||||
HRESULT CDECL wined3d_surface_unmap(struct wined3d_surface *surface)
|
||||
{
|
||||
@ -7217,7 +7217,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
HRESULT hr;
|
||||
TRACE("surface %p.\n", surface);
|
||||
|
||||
@@ -2517,6 +2990,40 @@
|
||||
@@ -2496,6 +2969,40 @@
|
||||
struct wined3d_box box;
|
||||
const struct wined3d_format *format = surface->resource.format;
|
||||
unsigned int fmt_flags = surface->container->resource.format_flags;
|
||||
@ -7258,7 +7258,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
|
||||
if ((fmt_flags & WINED3DFMT_FLAG_BLOCKS) && rect
|
||||
&& !surface_check_block_align(surface, rect))
|
||||
@@ -2528,6 +3035,13 @@
|
||||
@@ -2507,6 +3014,13 @@
|
||||
return WINED3DERR_INVALIDCALL;
|
||||
}
|
||||
|
||||
@ -7272,7 +7272,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
/* Performance optimization: Count how often a surface is mapped, if it is
|
||||
* mapped regularly do not throw away the system memory copy. This avoids
|
||||
* the need to download the surface from OpenGL all the time. The surface
|
||||
@@ -2543,6 +3057,7 @@
|
||||
@@ -2522,6 +3036,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
@ -7280,7 +7280,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
if (rect)
|
||||
{
|
||||
surface->lockedRect = *rect;
|
||||
@@ -2607,20 +3122,119 @@
|
||||
@@ -2586,22 +3101,121 @@
|
||||
WARN("Cannot use GetDC on a %s surface.\n", debug_d3dformat(surface->container->resource.format->id));
|
||||
return WINED3DERR_INVALIDCALL;
|
||||
}
|
||||
@ -7314,7 +7314,8 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
- TRACE("Returning dc %p.\n", *dc);
|
||||
+ if (!(flags & (WINED3D_MAP_NO_DIRTY_UPDATE | WINED3D_MAP_READONLY)))
|
||||
+ surface_invalidate_location(surface, ~surface->resource.map_binding);
|
||||
+
|
||||
|
||||
- return *dc ? WINED3D_OK : WINED3DERR_INVALIDCALL;
|
||||
+ switch (surface->resource.map_binding)
|
||||
+ {
|
||||
+ case WINED3D_LOCATION_SYSMEM:
|
||||
@ -7409,10 +7410,12 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
+ wined3d_cs_emit_getdc(device->cs, surface);
|
||||
+ *dc = surface->hDC;
|
||||
+ TRACE("Returning dc %p.\n", *dc);
|
||||
|
||||
return *dc ? WINED3D_OK : WINED3DERR_INVALIDCALL;
|
||||
+
|
||||
+ return *dc ? WINED3D_OK : WINED3DERR_INVALIDCALL;
|
||||
}
|
||||
@@ -2648,6 +3262,35 @@
|
||||
|
||||
void wined3d_surface_releasedc_cs(struct wined3d_surface *surface)
|
||||
@@ -2627,6 +3241,35 @@
|
||||
if (context)
|
||||
context_release(context);
|
||||
}
|
||||
@ -7448,7 +7451,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
}
|
||||
|
||||
HRESULT CDECL wined3d_surface_releasedc(struct wined3d_surface *surface, HDC dc)
|
||||
@@ -2667,6 +3310,7 @@
|
||||
@@ -2646,6 +3289,7 @@
|
||||
surface->resource.map_count--;
|
||||
surface->flags &= ~SFLAG_DCINUSE;
|
||||
|
||||
@ -7456,7 +7459,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
wined3d_cs_emit_releasedc(surface->resource.device->cs, surface);
|
||||
|
||||
return WINED3D_OK;
|
||||
@@ -2679,6 +3323,31 @@
|
||||
@@ -2658,6 +3302,31 @@
|
||||
const struct wined3d_gl_info *gl_info;
|
||||
struct wined3d_context *context;
|
||||
struct wined3d_surface *restore_rt;
|
||||
@ -7488,7 +7491,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
BYTE *mem;
|
||||
BYTE *row, *top, *bottom;
|
||||
int i;
|
||||
@@ -2686,6 +3355,7 @@
|
||||
@@ -2665,6 +3334,7 @@
|
||||
struct wined3d_bo_address data;
|
||||
UINT row_pitch, slice_pitch;
|
||||
|
||||
@ -7496,7 +7499,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
wined3d_resource_get_memory(&surface->resource, dst_location, &data);
|
||||
|
||||
/* Context_release does not restore the original context in case of
|
||||
@@ -2703,6 +3373,11 @@
|
||||
@@ -2682,6 +3352,11 @@
|
||||
context = context_acquire(device, surface);
|
||||
}
|
||||
|
||||
@ -7508,7 +7511,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
context_apply_blit_state(context, device);
|
||||
gl_info = context->gl_info;
|
||||
|
||||
@@ -2791,12 +3466,16 @@
|
||||
@@ -2770,12 +3445,16 @@
|
||||
checkGLcall("glBindBuffer");
|
||||
}
|
||||
|
||||
@ -7525,7 +7528,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
}
|
||||
|
||||
/* Read the framebuffer contents into a texture. Note that this function
|
||||
@@ -2858,6 +3537,85 @@
|
||||
@@ -2837,6 +3516,85 @@
|
||||
}
|
||||
}
|
||||
|
||||
@ -7611,7 +7614,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
/* Does a direct frame buffer -> texture copy. Stretching is done with single
|
||||
* pixel copy calls. */
|
||||
static void fb_copy_to_texture_direct(struct wined3d_surface *dst_surface, struct wined3d_surface *src_surface,
|
||||
@@ -2964,8 +3722,13 @@
|
||||
@@ -2943,8 +3701,13 @@
|
||||
|
||||
/* The texture is now most up to date - If the surface is a render target
|
||||
* and has a drawable, this path is never entered. */
|
||||
@ -7625,7 +7628,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
}
|
||||
|
||||
/* Uses the hardware to stretch and flip the image */
|
||||
@@ -3033,7 +3796,11 @@
|
||||
@@ -3012,7 +3775,11 @@
|
||||
checkGLcall("glEnable(texture_target)");
|
||||
|
||||
/* For now invalidate the texture copy of the back buffer. Drawable and sysmem copy are untouched */
|
||||
@ -7637,7 +7640,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
}
|
||||
|
||||
/* Make sure that the top pixel is always above the bottom pixel, and keep a separate upside down flag
|
||||
@@ -3230,6 +3997,7 @@
|
||||
@@ -3209,6 +3976,7 @@
|
||||
checkGLcall("glDeleteTextures(1, &backup)");
|
||||
}
|
||||
|
||||
@ -7645,7 +7648,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
if (wined3d_settings.cs_multithreaded)
|
||||
gl_info->gl_ops.gl.p_glFinish();
|
||||
else if (wined3d_settings.strict_draw_ordering)
|
||||
@@ -3241,6 +4009,17 @@
|
||||
@@ -3220,6 +3988,17 @@
|
||||
* and has a drawable, this path is never entered. */
|
||||
wined3d_resource_validate_location(&dst_surface->resource, WINED3D_LOCATION_TEXTURE_RGB);
|
||||
wined3d_resource_invalidate_location(&dst_surface->resource, ~WINED3D_LOCATION_TEXTURE_RGB);
|
||||
@ -7663,7 +7666,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
}
|
||||
|
||||
/* Front buffer coordinates are always full screen coordinates, but our GL
|
||||
@@ -3271,6 +4050,7 @@
|
||||
@@ -3250,6 +4029,7 @@
|
||||
rect->bottom = drawable_height - rect->bottom;
|
||||
}
|
||||
|
||||
@ -7671,7 +7674,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
/* Context activation is done by the caller. */
|
||||
static void surface_blt_to_drawable(const struct wined3d_device *device,
|
||||
struct wined3d_context *old_ctx,
|
||||
@@ -3305,6 +4085,26 @@
|
||||
@@ -3284,6 +4064,26 @@
|
||||
/* Make sure the surface is up-to-date. This should probably use
|
||||
* wined3d_resource_load_location() and worry about the destination
|
||||
* surface too, unless we're overwriting it completely. */
|
||||
@ -7698,7 +7701,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
wined3d_texture_load(src_surface->container, context, FALSE);
|
||||
|
||||
/* Activate the destination context, set it up for blitting */
|
||||
@@ -3347,6 +4147,7 @@
|
||||
@@ -3326,6 +4126,7 @@
|
||||
/* Leave the opengl state valid for blitting */
|
||||
device->blitter->unset_shader(context->gl_info);
|
||||
|
||||
@ -7706,7 +7709,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
if (wined3d_settings.cs_multithreaded)
|
||||
gl_info->gl_ops.gl.p_glFinish();
|
||||
else if (wined3d_settings.strict_draw_ordering
|
||||
@@ -3360,6 +4161,14 @@
|
||||
@@ -3339,6 +4140,14 @@
|
||||
context = context_acquire(device, restore_rt);
|
||||
context_release(context);
|
||||
}
|
||||
@ -7721,7 +7724,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
}
|
||||
|
||||
HRESULT surface_color_fill(struct wined3d_surface *s, const RECT *rect, const struct wined3d_color *color)
|
||||
@@ -3383,8 +4192,13 @@
|
||||
@@ -3362,8 +4171,13 @@
|
||||
enum wined3d_texture_filter_type filter)
|
||||
{
|
||||
struct wined3d_device *device = dst_surface->resource.device;
|
||||
@ -7735,7 +7738,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
|
||||
TRACE("dst_surface %p, dst_rect %s, src_surface %p, src_rect %s, flags %#x, blt_fx %p, filter %s.\n",
|
||||
dst_surface, wine_dbgstr_rect(dst_rect), src_surface, wine_dbgstr_rect(src_rect),
|
||||
@@ -3575,6 +4389,7 @@
|
||||
@@ -3554,6 +4368,7 @@
|
||||
{
|
||||
TRACE("surface %p, new location %#x, w %u, h %u.\n", surface, location, w, h);
|
||||
|
||||
@ -7743,7 +7746,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
if (((surface->resource.locations & WINED3D_LOCATION_TEXTURE_RGB) && !(location & WINED3D_LOCATION_TEXTURE_RGB))
|
||||
|| (!(surface->resource.locations & WINED3D_LOCATION_TEXTURE_RGB)
|
||||
&& (location & WINED3D_LOCATION_TEXTURE_RGB)))
|
||||
@@ -3583,6 +4398,15 @@
|
||||
@@ -3562,6 +4377,15 @@
|
||||
surface->ds_current_size.cx = w;
|
||||
surface->ds_current_size.cy = h;
|
||||
surface->resource.locations = location;
|
||||
@ -7759,7 +7762,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
}
|
||||
|
||||
/* Context activation is done by the caller. */
|
||||
@@ -3597,7 +4421,11 @@
|
||||
@@ -3576,7 +4400,11 @@
|
||||
/* TODO: Make this work for modes other than FBO */
|
||||
if (wined3d_settings.offscreen_rendering_mode != ORM_FBO) return;
|
||||
|
||||
@ -7771,7 +7774,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
{
|
||||
w = surface->ds_current_size.cx;
|
||||
h = surface->ds_current_size.cy;
|
||||
@@ -3623,7 +4451,11 @@
|
||||
@@ -3602,7 +4430,11 @@
|
||||
return;
|
||||
}
|
||||
|
||||
@ -7783,7 +7786,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
{
|
||||
TRACE("Surface was discarded, no need copy data.\n");
|
||||
switch (location)
|
||||
@@ -3643,6 +4475,7 @@
|
||||
@@ -3622,6 +4454,7 @@
|
||||
default:
|
||||
FIXME("Unhandled location %#x\n", location);
|
||||
}
|
||||
@ -7791,7 +7794,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
surface->resource.locations &= ~WINED3D_LOCATION_DISCARDED;
|
||||
surface->resource.locations |= location;
|
||||
surface->ds_current_size.cx = surface->resource.width;
|
||||
@@ -3654,6 +4487,19 @@
|
||||
@@ -3633,6 +4466,19 @@
|
||||
{
|
||||
FIXME("No up to date depth stencil location.\n");
|
||||
surface->resource.locations |= location;
|
||||
@ -7811,7 +7814,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
surface->ds_current_size.cx = surface->resource.width;
|
||||
surface->ds_current_size.cy = surface->resource.height;
|
||||
return;
|
||||
@@ -3718,9 +4564,13 @@
|
||||
@@ -3697,9 +4543,13 @@
|
||||
|
||||
context_invalidate_state(context, STATE_FRAMEBUFFER);
|
||||
|
||||
@ -7825,7 +7828,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
gl_info->gl_ops.gl.p_glFlush(); /* Flush to ensure ordering across contexts. */
|
||||
}
|
||||
else if (location == WINED3D_LOCATION_DRAWABLE)
|
||||
@@ -3736,9 +4586,13 @@
|
||||
@@ -3715,9 +4565,13 @@
|
||||
|
||||
context_invalidate_state(context, STATE_FRAMEBUFFER);
|
||||
|
||||
@ -7839,7 +7842,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
gl_info->gl_ops.gl.p_glFlush(); /* Flush to ensure ordering across contexts. */
|
||||
}
|
||||
else
|
||||
@@ -3746,6 +4600,7 @@
|
||||
@@ -3725,6 +4579,7 @@
|
||||
ERR("Invalid location (%#x) specified.\n", location);
|
||||
}
|
||||
|
||||
@ -7847,7 +7850,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
surface->resource.locations |= location;
|
||||
surface->ds_current_size.cx = surface->resource.width;
|
||||
surface->ds_current_size.cy = surface->resource.height;
|
||||
@@ -3791,6 +4646,135 @@
|
||||
@@ -3770,6 +4625,135 @@
|
||||
TRACE("Surface was discarded, nothing to do.\n");
|
||||
return WINED3D_OK;
|
||||
}
|
||||
@ -7983,7 +7986,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
|
||||
if (wined3d_settings.offscreen_rendering_mode == ORM_FBO
|
||||
&& wined3d_resource_is_offscreen(&surface->container->resource))
|
||||
@@ -3800,6 +4784,7 @@
|
||||
@@ -3779,6 +4763,7 @@
|
||||
}
|
||||
|
||||
surface_get_rect(surface, NULL, &r);
|
||||
@ -7991,7 +7994,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
wined3d_resource_load_location(&surface->resource, context, WINED3D_LOCATION_TEXTURE_RGB);
|
||||
surface_blt_to_drawable(surface->resource.device, context,
|
||||
WINED3D_TEXF_POINT, FALSE, surface, &r, surface, &r);
|
||||
@@ -3868,6 +4853,66 @@
|
||||
@@ -3847,6 +4832,66 @@
|
||||
RECT rect = {0, 0, surface->resource.width, surface->resource.height};
|
||||
|
||||
surface_blt_fbo(device, context, WINED3D_TEXF_POINT, surface, src_location,
|
||||
@ -8058,7 +8061,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
&rect, surface, dst_location, &rect);
|
||||
|
||||
return WINED3D_OK;
|
||||
@@ -3877,6 +4922,7 @@
|
||||
@@ -3856,6 +4901,7 @@
|
||||
|
||||
if (srgb)
|
||||
{
|
||||
@ -8066,7 +8069,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
if ((surface->resource.locations & (WINED3D_LOCATION_TEXTURE_RGB | surface->resource.map_binding))
|
||||
== WINED3D_LOCATION_TEXTURE_RGB)
|
||||
{
|
||||
@@ -3905,6 +4951,39 @@
|
||||
@@ -3884,6 +4930,39 @@
|
||||
wined3d_resource_prepare_system_memory(&surface->resource);
|
||||
wined3d_resource_load_location(&surface->resource, context, WINED3D_LOCATION_SYSMEM);
|
||||
}
|
||||
@ -8106,7 +8109,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
|
||||
wined3d_texture_prepare_texture(texture, context, srgb);
|
||||
wined3d_texture_bind_and_dirtify(texture, context, srgb);
|
||||
@@ -3919,7 +4998,11 @@
|
||||
@@ -3898,7 +4977,11 @@
|
||||
/* Don't use PBOs for converted surfaces. During PBO conversion we look at
|
||||
* WINED3D_TEXTURE_CONVERTED but it isn't set (yet) in all cases it is
|
||||
* getting called. */
|
||||
@ -8118,7 +8121,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
{
|
||||
TRACE("Removing the pbo attached to surface %p.\n", surface);
|
||||
|
||||
@@ -3928,6 +5011,7 @@
|
||||
@@ -3907,6 +4990,7 @@
|
||||
else
|
||||
surface->resource.map_binding = WINED3D_LOCATION_SYSMEM;
|
||||
|
||||
@ -8126,7 +8129,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
wined3d_resource_prepare_map_memory(&surface->resource, context);
|
||||
wined3d_resource_load_location(&surface->resource, context, surface->resource.map_binding);
|
||||
wined3d_resource_free_bo(&surface->resource);
|
||||
@@ -3935,6 +5019,14 @@
|
||||
@@ -3914,6 +4998,14 @@
|
||||
}
|
||||
|
||||
wined3d_resource_get_memory(&surface->resource, surface->resource.locations, &data);
|
||||
@ -8141,7 +8144,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
if (format.convert)
|
||||
{
|
||||
/* This code is entered for texture formats which need a fixup. */
|
||||
@@ -3980,6 +5072,7 @@
|
||||
@@ -3959,6 +5051,7 @@
|
||||
wined3d_surface_upload_data(surface, gl_info, &format, &src_rect,
|
||||
src_row_pitch, &dst_point, srgb, wined3d_const_bo_address(&data));
|
||||
|
||||
@ -8149,7 +8152,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
HeapFree(GetProcessHeap(), 0, mem);
|
||||
|
||||
return WINED3D_OK;
|
||||
@@ -4003,6 +5096,31 @@
|
||||
@@ -3982,6 +5075,31 @@
|
||||
struct wined3d_context *context, DWORD location)
|
||||
{
|
||||
struct wined3d_surface *surface = surface_from_resource(resource);
|
||||
@ -8181,7 +8184,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
HRESULT hr;
|
||||
|
||||
TRACE("surface %p, location %s.\n", surface, wined3d_debug_location(location));
|
||||
@@ -4010,6 +5128,7 @@
|
||||
@@ -3989,6 +5107,7 @@
|
||||
if (surface->resource.usage & WINED3DUSAGE_DEPTHSTENCIL)
|
||||
{
|
||||
if (location == WINED3D_LOCATION_TEXTURE_RGB
|
||||
@ -8189,7 +8192,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
&& surface->resource.locations & (WINED3D_LOCATION_DRAWABLE | WINED3D_LOCATION_DISCARDED))
|
||||
{
|
||||
surface_load_ds_location(surface, context, location);
|
||||
@@ -4019,21 +5138,63 @@
|
||||
@@ -3998,21 +5117,63 @@
|
||||
&& surface->container->resource.draw_binding != WINED3D_LOCATION_DRAWABLE)
|
||||
{
|
||||
/* Already up to date, nothing to do. */
|
||||
@ -8258,7 +8261,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
}
|
||||
|
||||
switch (location)
|
||||
@@ -4042,6 +5203,7 @@
|
||||
@@ -4021,6 +5182,7 @@
|
||||
case WINED3D_LOCATION_USER_MEMORY:
|
||||
case WINED3D_LOCATION_SYSMEM:
|
||||
case WINED3D_LOCATION_BUFFER:
|
||||
@ -8266,7 +8269,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
surface_load_sysmem(surface, context, location);
|
||||
break;
|
||||
|
||||
@@ -4059,6 +5221,24 @@
|
||||
@@ -4038,6 +5200,24 @@
|
||||
if (FAILED(hr = surface_load_texture(surface, context,
|
||||
location == WINED3D_LOCATION_TEXTURE_SRGB)))
|
||||
return;
|
||||
@ -8291,7 +8294,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -4066,12 +5246,21 @@
|
||||
@@ -4045,12 +5225,21 @@
|
||||
break;
|
||||
}
|
||||
|
||||
@ -8313,7 +8316,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
}
|
||||
|
||||
static HRESULT ffp_blit_alloc(struct wined3d_device *device) { return WINED3D_OK; }
|
||||
@@ -4179,6 +5368,7 @@
|
||||
@@ -4158,6 +5347,7 @@
|
||||
const RECT *dst_rect, const struct wined3d_color *color)
|
||||
{
|
||||
const RECT draw_rect = {0, 0, dst_surface->resource.width, dst_surface->resource.height};
|
||||
@ -8321,7 +8324,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
struct wined3d_rendertarget_view view, *view_ptr = &view;
|
||||
struct wined3d_fb_state fb = {&view_ptr, NULL, 1};
|
||||
struct wined3d_texture *texture = dst_surface->container;
|
||||
@@ -4199,6 +5389,21 @@
|
||||
@@ -4178,6 +5368,21 @@
|
||||
view.sub_resource_idx = dst_surface->texture_layer * texture->level_count + dst_surface->texture_level;
|
||||
|
||||
device_clear_render_targets(device, 1, &fb, 1, dst_rect, &draw_rect, WINED3DCLEAR_TARGET, color, 0.0f, 0);
|
||||
@ -8343,7 +8346,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
|
||||
return WINED3D_OK;
|
||||
}
|
||||
@@ -4207,6 +5412,7 @@
|
||||
@@ -4186,6 +5391,7 @@
|
||||
const RECT *dst_rect, float depth)
|
||||
{
|
||||
const RECT draw_rect = {0, 0, dst_surface->resource.width, dst_surface->resource.height};
|
||||
@ -8351,7 +8354,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
struct wined3d_rendertarget_view view;
|
||||
struct wined3d_fb_state fb = {NULL, &view};
|
||||
struct wined3d_texture *texture = dst_surface->container;
|
||||
@@ -4222,6 +5428,20 @@
|
||||
@@ -4201,6 +5407,20 @@
|
||||
view.sub_resource_idx = dst_surface->texture_layer * texture->level_count + dst_surface->texture_level;
|
||||
|
||||
device_clear_render_targets(device, 0, &fb, 1, dst_rect, &draw_rect, WINED3DCLEAR_ZBUFFER, 0, depth, 0);
|
||||
@ -8372,7 +8375,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
|
||||
return WINED3D_OK;
|
||||
}
|
||||
@@ -4234,6 +5454,7 @@
|
||||
@@ -4213,6 +5433,7 @@
|
||||
/* Blit from offscreen surface to render target */
|
||||
struct wined3d_color_key old_blt_key = src_surface->container->async.src_blt_color_key;
|
||||
DWORD old_color_key_flags = src_surface->container->async.color_key_flags;
|
||||
@ -8380,7 +8383,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
struct wined3d_context *context;
|
||||
|
||||
TRACE("Blt from surface %p to rendertarget %p\n", src_surface, dst_surface);
|
||||
@@ -4251,6 +5472,22 @@
|
||||
@@ -4230,6 +5451,22 @@
|
||||
|
||||
wined3d_resource_validate_location(&dst_surface->resource, dst_surface->container->resource.draw_binding);
|
||||
wined3d_resource_invalidate_location(&dst_surface->resource, ~dst_surface->container->resource.draw_binding);
|
||||
@ -8403,7 +8406,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
}
|
||||
|
||||
const struct blit_shader ffp_blit = {
|
||||
@@ -4410,6 +5647,7 @@
|
||||
@@ -4389,6 +5626,7 @@
|
||||
const struct wined3d_format *src_format, *dst_format;
|
||||
unsigned int src_fmt_flags, dst_fmt_flags;
|
||||
struct wined3d_texture *src_texture = NULL;
|
||||
@ -8411,7 +8414,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
void *src_data = NULL, *dst_data = NULL;
|
||||
UINT src_row_pitch, src_slice_pitch, dst_row_pitch, dst_slice_pitch;
|
||||
const BYTE *sbase = NULL;
|
||||
@@ -4440,6 +5678,23 @@
|
||||
@@ -4419,6 +5657,23 @@
|
||||
wined3d_resource_get_pitch(&dst_surface->resource, &dst_row_pitch, &dst_slice_pitch);
|
||||
src_data = dst_data;
|
||||
src_row_pitch = dst_row_pitch;
|
||||
@ -8435,7 +8438,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
src_format = dst_surface->resource.format;
|
||||
dst_format = src_format;
|
||||
dst_fmt_flags = dst_surface->container->resource.format_flags;
|
||||
@@ -4451,12 +5706,14 @@
|
||||
@@ -4430,12 +5685,14 @@
|
||||
dst_fmt_flags = dst_surface->container->resource.format_flags;
|
||||
if (src_surface)
|
||||
{
|
||||
@ -8450,7 +8453,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
if (dst_surface->resource.format->id != src_surface->resource.format->id)
|
||||
{
|
||||
if (!(src_texture = surface_convert_format(src_surface, dst_format->id)))
|
||||
@@ -4467,9 +5724,13 @@
|
||||
@@ -4446,9 +5703,13 @@
|
||||
}
|
||||
src_surface = surface_from_resource(wined3d_texture_get_sub_resource(src_texture, 0));
|
||||
}
|
||||
@ -8464,7 +8467,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
src_format = src_surface->resource.format;
|
||||
src_fmt_flags = src_surface->container->resource.format_flags;
|
||||
}
|
||||
@@ -4479,8 +5740,12 @@
|
||||
@@ -4458,8 +5719,12 @@
|
||||
src_fmt_flags = dst_fmt_flags;
|
||||
}
|
||||
|
||||
@ -8477,7 +8480,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
}
|
||||
|
||||
bpp = dst_surface->resource.format->byte_count;
|
||||
@@ -4491,12 +5756,24 @@
|
||||
@@ -4470,12 +5735,24 @@
|
||||
width = (dst_rect->right - dst_rect->left) * bpp;
|
||||
|
||||
if (src_surface)
|
||||
@ -8502,7 +8505,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
|
||||
if (src_fmt_flags & dst_fmt_flags & WINED3DFMT_FLAG_BLOCKS)
|
||||
{
|
||||
@@ -4531,7 +5808,11 @@
|
||||
@@ -4510,7 +5787,11 @@
|
||||
}
|
||||
|
||||
hr = surface_cpu_blt_compressed(sbase, dbuf,
|
||||
@ -8514,7 +8517,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
src_format, flags, fx);
|
||||
goto release;
|
||||
}
|
||||
@@ -4539,7 +5820,11 @@
|
||||
@@ -4518,7 +5799,11 @@
|
||||
/* First, all the 'source-less' blits */
|
||||
if (flags & WINEDDBLT_COLORFILL)
|
||||
{
|
||||
@ -8526,7 +8529,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
flags &= ~WINEDDBLT_COLORFILL;
|
||||
}
|
||||
|
||||
@@ -4588,6 +5873,7 @@
|
||||
@@ -4567,6 +5852,7 @@
|
||||
for (y = 0; y < dstheight; ++y)
|
||||
{
|
||||
memcpy(dbuf, sbuf, width);
|
||||
@ -8534,7 +8537,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
sbuf += src_row_pitch;
|
||||
dbuf += dst_row_pitch;
|
||||
}
|
||||
@@ -4601,6 +5887,21 @@
|
||||
@@ -4580,6 +5866,21 @@
|
||||
{
|
||||
sbuf -= src_row_pitch;
|
||||
dbuf -= dst_row_pitch;
|
||||
@ -8556,7 +8559,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
memcpy(dbuf, sbuf, width);
|
||||
}
|
||||
}
|
||||
@@ -4610,8 +5911,13 @@
|
||||
@@ -4589,8 +5890,13 @@
|
||||
for (y = 0; y < dstheight; ++y)
|
||||
{
|
||||
memmove(dbuf, sbuf, width);
|
||||
@ -8570,7 +8573,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4620,9 +5926,15 @@
|
||||
@@ -4599,9 +5905,15 @@
|
||||
/* Stretching in y direction only. */
|
||||
for (y = sy = 0; y < dstheight; ++y, sy += yinc)
|
||||
{
|
||||
@ -8586,7 +8589,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4632,6 +5944,7 @@
|
||||
@@ -4611,6 +5923,7 @@
|
||||
int last_sy = -1;
|
||||
for (y = sy = 0; y < dstheight; ++y, sy += yinc)
|
||||
{
|
||||
@ -8594,7 +8597,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
sbuf = sbase + (sy >> 16) * src_row_pitch;
|
||||
|
||||
if ((sy >> 16) == (last_sy >> 16))
|
||||
@@ -4639,6 +5952,15 @@
|
||||
@@ -4618,6 +5931,15 @@
|
||||
/* This source row is the same as last source row -
|
||||
* Copy the already stretched row. */
|
||||
memcpy(dbuf, dbuf - dst_row_pitch, width);
|
||||
@ -8610,7 +8613,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -4685,6 +6007,7 @@
|
||||
@@ -4664,6 +5986,7 @@
|
||||
}
|
||||
#undef STRETCH_ROW
|
||||
}
|
||||
@ -8618,7 +8621,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
dbuf += dst_row_pitch;
|
||||
last_sy = sy;
|
||||
}
|
||||
@@ -4693,6 +6016,16 @@
|
||||
@@ -4672,6 +5995,16 @@
|
||||
else
|
||||
{
|
||||
LONG dstyinc = dst_row_pitch, dstxinc = bpp;
|
||||
@ -8635,7 +8638,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
DWORD keylow = 0xffffffff, keyhigh = 0, keymask = 0xffffffff;
|
||||
DWORD destkeylow = 0x0, destkeyhigh = 0xffffffff, destkeymask = 0xffffffff;
|
||||
if (flags & (WINEDDBLT_KEYSRC | WINEDDBLT_KEYDEST | WINEDDBLT_KEYSRCOVERRIDE | WINEDDBLT_KEYDESTOVERRIDE))
|
||||
@@ -4742,7 +6075,11 @@
|
||||
@@ -4721,7 +6054,11 @@
|
||||
LONG tmpxy;
|
||||
dTopLeft = dbuf;
|
||||
dTopRight = dbuf + ((dstwidth - 1) * bpp);
|
||||
@ -8647,7 +8650,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
dBottomRight = dBottomLeft + ((dstwidth - 1) * bpp);
|
||||
|
||||
if (fx->dwDDFX & WINEDDBLTFX_ARITHSTRETCHY)
|
||||
@@ -4819,6 +6156,7 @@
|
||||
@@ -4798,6 +6135,7 @@
|
||||
flags &= ~(WINEDDBLT_DDFX);
|
||||
}
|
||||
|
||||
@ -8655,7 +8658,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
#define COPY_COLORKEY_FX(type) \
|
||||
do { \
|
||||
const type *s; \
|
||||
@@ -4840,6 +6178,29 @@
|
||||
@@ -4819,6 +6157,29 @@
|
||||
d = (type *)(((BYTE *)d) + dstyinc); \
|
||||
} \
|
||||
} while(0)
|
||||
@ -8685,7 +8688,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
|
||||
switch (bpp)
|
||||
{
|
||||
@@ -4858,7 +6219,11 @@
|
||||
@@ -4837,7 +6198,11 @@
|
||||
BYTE *d = dbuf, *dx;
|
||||
for (y = sy = 0; y < dstheight; ++y, sy += yinc)
|
||||
{
|
||||
@ -8697,7 +8700,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
dx = d;
|
||||
for (x = sx = 0; x < dstwidth; ++x, sx+= xinc)
|
||||
{
|
||||
@@ -4889,10 +6254,12 @@
|
||||
@@ -4868,10 +6233,12 @@
|
||||
}
|
||||
}
|
||||
|
||||
@ -8710,7 +8713,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
error:
|
||||
if (flags && FIXME_ON(d3d_surface))
|
||||
{
|
||||
@@ -4900,6 +6267,7 @@
|
||||
@@ -4879,6 +6246,7 @@
|
||||
}
|
||||
|
||||
release:
|
||||
@ -8718,7 +8721,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
if (dst_data)
|
||||
{
|
||||
wined3d_resource_release_map_ptr(&dst_surface->resource, context);
|
||||
@@ -4918,6 +6286,14 @@
|
||||
@@ -4897,6 +6265,14 @@
|
||||
wined3d_texture_decref(src_texture);
|
||||
if (context)
|
||||
context_release(context);
|
||||
@ -8733,7 +8736,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
|
||||
return hr;
|
||||
}
|
||||
@@ -4962,6 +6338,7 @@
|
||||
@@ -4941,6 +6317,7 @@
|
||||
cpu_blit_blit_surface,
|
||||
};
|
||||
|
||||
@ -8741,7 +8744,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
void surface_blt_ugly(struct wined3d_surface *dst_surface, const RECT *dst_rect,
|
||||
struct wined3d_surface *src_surface, const RECT *src_rect, DWORD flags,
|
||||
const WINEDDBLTFX *fx, enum wined3d_texture_filter_type filter)
|
||||
@@ -4969,6 +6346,16 @@
|
||||
@@ -4948,6 +6325,16 @@
|
||||
struct wined3d_swapchain *src_swapchain, *dst_swapchain;
|
||||
struct wined3d_device *device = dst_surface->resource.device;
|
||||
DWORD src_ds_flags, dst_ds_flags;
|
||||
@ -8758,7 +8761,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
BOOL scale, convert;
|
||||
|
||||
static const DWORD simple_blit = WINEDDBLT_ASYNC
|
||||
@@ -4979,6 +6366,106 @@
|
||||
@@ -4958,6 +6345,106 @@
|
||||
| WINEDDBLT_DEPTHFILL
|
||||
| WINEDDBLT_DONOTWAIT;
|
||||
|
||||
@ -8865,7 +8868,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
if (!device->d3d_initialized)
|
||||
{
|
||||
WARN("D3D not initialized, using fallback.\n");
|
||||
@@ -5021,8 +6508,13 @@
|
||||
@@ -5000,8 +6487,13 @@
|
||||
}
|
||||
|
||||
scale = src_surface
|
||||
@ -8879,7 +8882,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
convert = src_surface && src_surface->resource.format->id != dst_surface->resource.format->id;
|
||||
|
||||
dst_ds_flags = dst_surface->container->resource.format_flags
|
||||
@@ -5042,6 +6534,7 @@
|
||||
@@ -5021,6 +6513,7 @@
|
||||
TRACE("Depth fill.\n");
|
||||
|
||||
if (!surface_convert_depth_to_float(dst_surface, fx->u5.dwFillDepth, &depth))
|
||||
@ -8887,7 +8890,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
return;
|
||||
|
||||
if (SUCCEEDED(wined3d_surface_depth_fill(dst_surface, dst_rect, depth)))
|
||||
@@ -5052,6 +6545,24 @@
|
||||
@@ -5031,6 +6524,24 @@
|
||||
if (SUCCEEDED(wined3d_surface_depth_blt(src_surface, src_surface->container->resource.draw_binding,
|
||||
src_rect, dst_surface, dst_surface->container->resource.draw_binding, dst_rect)))
|
||||
return;
|
||||
@ -8912,7 +8915,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -5060,8 +6571,13 @@
|
||||
@@ -5039,8 +6550,13 @@
|
||||
|
||||
/* In principle this would apply to depth blits as well, but we don't
|
||||
* implement those in the CPU blitter at the moment. */
|
||||
@ -8926,7 +8929,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
{
|
||||
if (scale)
|
||||
TRACE("Not doing sysmem blit because of scaling.\n");
|
||||
@@ -5082,8 +6598,13 @@
|
||||
@@ -5061,8 +6577,13 @@
|
||||
palette, fx->u5.dwFillColor, &color))
|
||||
goto fallback;
|
||||
|
||||
@ -8940,7 +8943,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -5101,8 +6622,13 @@
|
||||
@@ -5080,8 +6601,13 @@
|
||||
color_key = &src_surface->container->async.src_blt_color_key;
|
||||
blit_op = WINED3D_BLIT_OP_COLOR_BLIT_CKEY;
|
||||
}
|
||||
@ -8954,7 +8957,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
{
|
||||
/* Upload */
|
||||
if (scale)
|
||||
@@ -5111,6 +6637,7 @@
|
||||
@@ -5090,6 +6616,7 @@
|
||||
TRACE("Not doing upload because of format conversion.\n");
|
||||
else
|
||||
{
|
||||
@ -8962,7 +8965,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
POINT dst_point = {dst_rect->left, dst_rect->top};
|
||||
|
||||
if (SUCCEEDED(surface_upload_from_surface(dst_surface, &dst_point, src_surface, src_rect)))
|
||||
@@ -5123,6 +6650,15 @@
|
||||
@@ -5102,6 +6629,15 @@
|
||||
context_release(context);
|
||||
}
|
||||
return;
|
||||
@ -8978,7 +8981,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5146,6 +6682,7 @@
|
||||
@@ -5125,6 +6661,7 @@
|
||||
wined3d_swapchain_present(dst_swapchain, NULL, NULL, dst_swapchain->win_handle, NULL, 0);
|
||||
dst_swapchain->desc.swap_effect = swap_effect;
|
||||
|
||||
@ -8986,7 +8989,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -5341,6 +6878,49 @@
|
||||
@@ -5320,6 +6857,49 @@
|
||||
wined3d_surface_location_invalidated,
|
||||
wined3d_surface_load_location,
|
||||
};
|
||||
@ -9036,7 +9039,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
|
||||
static HRESULT surface_init(struct wined3d_surface *surface, struct wined3d_texture *container,
|
||||
const struct wined3d_resource_desc *desc, GLenum target, unsigned int level, unsigned int layer, DWORD flags)
|
||||
@@ -5408,7 +6988,11 @@
|
||||
@@ -5387,7 +6967,11 @@
|
||||
}
|
||||
|
||||
surface->container = container;
|
||||
@ -9048,7 +9051,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
list_init(&surface->renderbuffers);
|
||||
list_init(&surface->overlays);
|
||||
|
||||
@@ -5440,9 +7024,14 @@
|
||||
@@ -5419,9 +7003,14 @@
|
||||
if (surface->resource.map_binding == WINED3D_LOCATION_DIB)
|
||||
{
|
||||
wined3d_resource_free_sysmem(&surface->resource);
|
||||
@ -9063,7 +9066,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
}
|
||||
|
||||
return hr;
|
||||
@@ -5469,7 +7058,11 @@
|
||||
@@ -5448,7 +7037,11 @@
|
||||
if (FAILED(hr = surface_init(object, container, desc, target, level, layer, flags)))
|
||||
{
|
||||
WARN("Failed to initialize surface, returning %#x.\n", hr);
|
||||
|
@ -1,25 +0,0 @@
|
||||
From c437a2f59781727e9dd2109eafc9fa750404c260 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Thu, 28 May 2015 22:47:20 +0200
|
||||
Subject: wininet: Use random names when caching very long urls.
|
||||
|
||||
---
|
||||
dlls/wininet/urlcache.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/wininet/urlcache.c b/dlls/wininet/urlcache.c
|
||||
index 276132b..0e5fe3c 100644
|
||||
--- a/dlls/wininet/urlcache.c
|
||||
+++ b/dlls/wininet/urlcache.c
|
||||
@@ -2630,7 +2630,7 @@ static BOOL urlcache_entry_create(const char *url, const char *ext, WCHAR *full_
|
||||
if(!InternetCrackUrlA(url, 0, 0, &uc))
|
||||
uc.dwUrlPathLength = 0;
|
||||
|
||||
- if(!uc.dwUrlPathLength) {
|
||||
+ if(!uc.dwUrlPathLength || uc.dwUrlPathLength >= sizeof(file_name)) {
|
||||
file_name[0] = 0;
|
||||
}else {
|
||||
char *p, *e;
|
||||
--
|
||||
2.4.1
|
||||
|
@ -1 +0,0 @@
|
||||
Fixes: [34021] Use random names when caching very long urls in wininet
|
Loading…
x
Reference in New Issue
Block a user