Rebase against c698682b3286d72cc7c4c4624b4d14b03dbe6908.

This commit is contained in:
Zebediah Figura 2018-08-18 11:37:45 -05:00
parent 93e4c328d7
commit c58c70e961
12 changed files with 223 additions and 2244 deletions

View File

@ -1,950 +0,0 @@
From a1de88de49c28a61ecc21f380e6ad3c25037eb59 Mon Sep 17 00:00:00 2001
From: Lucian Poston <lucian.poston@gmail.com>
Date: Thu, 3 May 2018 03:37:07 -0700
Subject: d2d1: Implement ID2D1DeviceContext
https://bugs.winehq.org/show_bug.cgi?id=44052
Signed-off-by: Lucian Poston <lucian.poston@gmail.com>
---
dlls/d2d1/d2d1_private.h | 16 +++
dlls/d2d1/device.c | 118 +++++++++++++----
dlls/d2d1/device_context.c | 318 ++++++++++++++++++++++++++++++++-------------
3 files changed, 336 insertions(+), 116 deletions(-)
diff --git a/dlls/d2d1/d2d1_private.h b/dlls/d2d1/d2d1_private.h
index 0bb0112..1958aa0 100644
--- a/dlls/d2d1/d2d1_private.h
+++ b/dlls/d2d1/d2d1_private.h
@@ -154,6 +154,10 @@ struct d2d_d3d_render_target
HRESULT d2d_d3d_create_render_target(ID2D1Factory *factory, IDXGISurface *surface, IUnknown *outer_unknown,
const D2D1_RENDER_TARGET_PROPERTIES *desc, ID2D1RenderTarget **render_target) DECLSPEC_HIDDEN;
+HRESULT d2d_d3d_create_render_target_with_device(ID2D1Factory *factory,
+ ID3D10Device *device, IUnknown *outer_unknown,
+ const D2D1_RENDER_TARGET_PROPERTIES *desc,
+ ID2D1RenderTarget **render_target) DECLSPEC_HIDDEN;
HRESULT d2d_d3d_render_target_create_rtv(ID2D1RenderTarget *render_target, IDXGISurface1 *surface) DECLSPEC_HIDDEN;
struct d2d_wic_render_target
@@ -577,4 +581,16 @@ static inline const char *debug_d2d_rect_f(const D2D1_RECT_F *rect)
return wine_dbg_sprintf("(%.8e,%.8e)-(%.8e,%.8e)", rect->left, rect->top, rect->right, rect->bottom );
}
+struct d2d_device_context
+{
+ ID2D1DeviceContext ID2D1DeviceContext_iface;
+ LONG refcount;
+ ID2D1Device *device;
+ ID2D1RenderTarget *dxgi_target;
+};
+
+HRESULT d2d_device_context_init(struct d2d_device_context *This,
+ ID2D1Device *device_iface, D2D1_DEVICE_CONTEXT_OPTIONS options,
+ ID3D10Device *d3d_device) DECLSPEC_HIDDEN;
+
#endif /* __WINE_D2D1_PRIVATE_H */
diff --git a/dlls/d2d1/device.c b/dlls/d2d1/device.c
index f74e9f8..24fb3c9 100644
--- a/dlls/d2d1/device.c
+++ b/dlls/d2d1/device.c
@@ -2144,7 +2144,7 @@ static const struct ID2D1GdiInteropRenderTargetVtbl d2d_gdi_interop_render_targe
};
static HRESULT d2d_d3d_render_target_init(struct d2d_d3d_render_target *render_target, ID2D1Factory *factory,
- IDXGISurface *surface, IUnknown *outer_unknown, const D2D1_RENDER_TARGET_PROPERTIES *desc)
+ IDXGISurface *surface, ID3D10Device *device, IUnknown *outer_unknown, const D2D1_RENDER_TARGET_PROPERTIES *desc)
{
D3D10_SUBRESOURCE_DATA buffer_data;
D3D10_STATE_BLOCK_MASK state_mask;
@@ -3033,25 +3033,41 @@ static HRESULT d2d_d3d_render_target_init(struct d2d_d3d_render_target *render_t
render_target->outer_unknown = outer_unknown ? outer_unknown :
(IUnknown *)&render_target->ID2D1RenderTarget_iface;
- if (FAILED(hr = IDXGISurface_GetDevice(surface, &IID_ID3D10Device, (void **)&render_target->device)))
+ if (surface == NULL)
{
- WARN("Failed to get device interface, hr %#x.\n", hr);
- ID2D1Factory_Release(render_target->factory);
- return hr;
+ ID3D10Device_AddRef(render_target->device = device);
}
-
- if (FAILED(hr = IDXGISurface_QueryInterface(surface, &IID_ID3D10Resource, (void **)&resource)))
+ else
{
- WARN("Failed to get ID3D10Resource interface, hr %#x.\n", hr);
- goto err;
- }
+ if (FAILED(hr = IDXGISurface_GetDevice(surface, &IID_ID3D10Device, (void **)&render_target->device)))
+ {
+ WARN("Failed to get device interface, hr %#x.\n", hr);
+ ID2D1Factory_Release(render_target->factory);
+ return hr;
+ }
- hr = ID3D10Device_CreateRenderTargetView(render_target->device, resource, NULL, &render_target->view);
- ID3D10Resource_Release(resource);
- if (FAILED(hr))
- {
- WARN("Failed to create rendertarget view, hr %#x.\n", hr);
- goto err;
+ if (FAILED(hr = IDXGISurface_QueryInterface(surface, &IID_ID3D10Resource, (void **)&resource)))
+ {
+ WARN("Failed to get ID3D10Resource interface, hr %#x.\n", hr);
+ goto err;
+ }
+
+ hr = ID3D10Device_CreateRenderTargetView(render_target->device, resource, NULL, &render_target->view);
+ ID3D10Resource_Release(resource);
+ if (FAILED(hr))
+ {
+ WARN("Failed to create rendertarget view, hr %#x.\n", hr);
+ goto err;
+ }
+
+ if (FAILED(hr = IDXGISurface_GetDesc(surface, &surface_desc)))
+ {
+ WARN("Failed to get surface desc, hr %#x.\n", hr);
+ goto err;
+ }
+
+ render_target->pixel_size.width = surface_desc.Width;
+ render_target->pixel_size.height = surface_desc.Height;
}
if (FAILED(hr = D3D10StateBlockMaskEnableAll(&state_mask)))
@@ -3176,15 +3192,7 @@ static HRESULT d2d_d3d_render_target_init(struct d2d_d3d_render_target *render_t
goto err;
}
- if (FAILED(hr = IDXGISurface_GetDesc(surface, &surface_desc)))
- {
- WARN("Failed to get surface desc, hr %#x.\n", hr);
- goto err;
- }
-
render_target->desc.pixelFormat = desc->pixelFormat;
- render_target->pixel_size.width = surface_desc.Width;
- render_target->pixel_size.height = surface_desc.Height;
render_target->drawing_state.transform = identity;
if (!d2d_clip_stack_init(&render_target->clip_stack))
@@ -3238,7 +3246,31 @@ HRESULT d2d_d3d_create_render_target(ID2D1Factory *factory, IDXGISurface *surfac
if (!(object = heap_alloc_zero(sizeof(*object))))
return E_OUTOFMEMORY;
- if (FAILED(hr = d2d_d3d_render_target_init(object, factory, surface, outer_unknown, desc)))
+ if (FAILED(hr = d2d_d3d_render_target_init(object, factory, surface, NULL, outer_unknown, desc)))
+ {
+ WARN("Failed to initialize render target, hr %#x.\n", hr);
+ HeapFree(GetProcessHeap(), 0, object);
+ return hr;
+ }
+
+ TRACE("Created render target %p.\n", object);
+ *render_target = &object->ID2D1RenderTarget_iface;
+
+ return S_OK;
+}
+
+HRESULT d2d_d3d_create_render_target_with_device(ID2D1Factory *factory,
+ ID3D10Device *device, IUnknown *outer_unknown,
+ const D2D1_RENDER_TARGET_PROPERTIES *desc,
+ ID2D1RenderTarget **render_target)
+{
+ struct d2d_d3d_render_target *object;
+ HRESULT hr;
+
+ if (!(object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object))))
+ return E_OUTOFMEMORY;
+
+ if (FAILED(hr = d2d_d3d_render_target_init(object, factory, NULL, device, outer_unknown, desc)))
{
WARN("Failed to initialize render target, hr %#x.\n", hr);
heap_free(object);
@@ -3354,9 +3386,41 @@ static void WINAPI d2d_device_GetFactory(ID2D1Device *iface, ID2D1Factory **fact
static HRESULT WINAPI d2d_device_CreateDeviceContext(ID2D1Device *iface, D2D1_DEVICE_CONTEXT_OPTIONS options,
ID2D1DeviceContext **context)
{
- FIXME("iface %p, options %#x, context %p stub!\n", iface, options, context);
+ struct d2d_device *device = impl_from_ID2D1Device(iface);
+ struct d2d_device_context *object;
+ ID3D10Device *d3d_device;
+ HRESULT hr;
- return E_NOTIMPL;
+ TRACE("iface %p, options %#x, context %p.\n", iface, options, context);
+ if (!context)
+ return E_POINTER;
+
+ if (FAILED(hr = IDXGIDevice_QueryInterface(device->dxgi_device,
+ &IID_ID3D10Device, (void **)&d3d_device)))
+ {
+ WARN("Failed to query d3d device, hr %#x.\n", hr);
+ return hr;
+ }
+
+ if (!(object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object))))
+ {
+ ID3D10Device_Release(d3d_device);
+ return E_OUTOFMEMORY;
+ }
+
+ hr = d2d_device_context_init(object, iface, options, d3d_device);
+ ID3D10Device_Release(d3d_device);
+ if (FAILED(hr))
+ {
+ HeapFree(GetProcessHeap(), 0, object);
+ WARN("Failed to create device context, hr %#x.\n", hr);
+ return hr;
+ }
+
+ *context = &object->ID2D1DeviceContext_iface;
+ TRACE("Created device context %p.\n", object);
+
+ return S_OK;
}
static HRESULT WINAPI d2d_device_CreatePrintControl(ID2D1Device *iface, IWICImagingFactory *wic_factory,
diff --git a/dlls/d2d1/device_context.c b/dlls/d2d1/device_context.c
index 04da4bf..75d163c 100644
--- a/dlls/d2d1/device_context.c
+++ b/dlls/d2d1/device_context.c
@@ -23,12 +23,6 @@
WINE_DEFAULT_DEBUG_CHANNEL(d2d);
-struct d2d_device_context
-{
- ID2D1DeviceContext ID2D1DeviceContext_iface;
- LONG refcount;
-};
-
static inline struct d2d_device_context *impl_from_ID2D1DeviceContext(ID2D1DeviceContext *iface)
{
return CONTAINING_RECORD(iface, struct d2d_device_context, ID2D1DeviceContext_iface);
@@ -39,25 +33,49 @@ static HRESULT WINAPI d2d_device_context_QueryInterface(
REFIID riid,
void **ppvObject)
{
- struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
- return E_NOTIMPL;
+ TRACE("iface %p, riid %s, ppvObject %p.\n", iface, debugstr_guid(riid), ppvObject);
+ if (ppvObject == NULL)
+ return E_POINTER;
+
+ if (IsEqualGUID(riid, &IID_ID2D1DeviceContext)
+ || IsEqualGUID(riid, &IID_ID2D1RenderTarget)
+ || IsEqualGUID(riid, &IID_ID2D1Resource)
+ || IsEqualGUID(riid, &IID_IUnknown))
+ {
+ ID2D1DeviceContext_AddRef(iface);
+ *ppvObject = iface;
+ return S_OK;
+ }
+
+ WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid));
+ *ppvObject = NULL;
+ return E_NOINTERFACE;
}
static ULONG WINAPI d2d_device_context_AddRef(
ID2D1DeviceContext *iface)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
- return 0;
+ ULONG refcount = InterlockedIncrement(&This->refcount);
+ TRACE("%p increasing refcount to %u.\n", iface, refcount);
+ return refcount;
}
static ULONG WINAPI d2d_device_context_Release(
ID2D1DeviceContext *iface)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
- return 0;
+ ULONG refcount = InterlockedDecrement(&This->refcount);
+ TRACE("%p decreasing refcount to %u.\n", iface, refcount);
+
+ if (refcount == 0)
+ {
+ ID2D1RenderTarget_Release(This->dxgi_target);
+ ID2D1Device_Release(This->device);
+ HeapFree(GetProcessHeap(), 0, This);
+ }
+
+ return refcount;
}
static void WINAPI d2d_device_context_GetFactory(
@@ -65,7 +83,8 @@ static void WINAPI d2d_device_context_GetFactory(
ID2D1Factory **factory)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
+ TRACE("This %p, factory %p.\n", This, factory);
+ ID2D1Device_GetFactory(This->device, factory);
}
static HRESULT WINAPI d2d_device_context_CreateBitmap(
@@ -77,8 +96,8 @@ static HRESULT WINAPI d2d_device_context_CreateBitmap(
ID2D1Bitmap **bitmap)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
- return E_NOTIMPL;
+ TRACE("This %p, src_data %p, desc %p, bitmap %p.\n", This, src_data, desc, bitmap);
+ return ID2D1RenderTarget_CreateBitmap(This->dxgi_target, size, src_data, pitch, desc, bitmap);
}
static HRESULT WINAPI d2d_device_context_CreateBitmapFromWicBitmap(
@@ -88,8 +107,9 @@ static HRESULT WINAPI d2d_device_context_CreateBitmapFromWicBitmap(
ID2D1Bitmap **bitmap)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
- return E_NOTIMPL;
+ TRACE("This %p, bitmap_source %p, desc %p, bitmap %p.\n",
+ This, bitmap_source, desc, bitmap);
+ return ID2D1RenderTarget_CreateBitmapFromWicBitmap(This->dxgi_target, bitmap_source, desc, bitmap);
}
static HRESULT WINAPI d2d_device_context_CreateSharedBitmap(
@@ -100,8 +120,9 @@ static HRESULT WINAPI d2d_device_context_CreateSharedBitmap(
ID2D1Bitmap **bitmap)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
- return E_NOTIMPL;
+ TRACE("This %p, iid %s, data %p, desc %p, bitmap %p.\n",
+ This, debugstr_guid(iid), data, desc, bitmap);
+ return ID2D1RenderTarget_CreateSharedBitmap(This->dxgi_target, iid, data, desc, bitmap);
}
static HRESULT WINAPI d2d_device_context_CreateBitmapBrush(
@@ -112,8 +133,10 @@ static HRESULT WINAPI d2d_device_context_CreateBitmapBrush(
ID2D1BitmapBrush **brush)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
- return E_NOTIMPL;
+ TRACE("This %p, bitmap %p, bitmap_brush_desc %p, brush_desc %p, brush %p.\n",
+ This, bitmap, bitmap_brush_desc, brush_desc, brush);
+ return ID2D1RenderTarget_CreateBitmapBrush(This->dxgi_target,
+ bitmap, bitmap_brush_desc, brush_desc, brush);
}
static HRESULT WINAPI d2d_device_context_CreateSolidColorBrush(
@@ -123,8 +146,8 @@ static HRESULT WINAPI d2d_device_context_CreateSolidColorBrush(
ID2D1SolidColorBrush **brush)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
- return E_NOTIMPL;
+ TRACE("This %p, color %p, desc %p, brush %p.\n", This, color, desc, brush);
+ return ID2D1RenderTarget_CreateSolidColorBrush(This->dxgi_target, color, desc, brush);
}
static HRESULT WINAPI d2d_device_context_CreateGradientStopCollection(
@@ -136,8 +159,9 @@ static HRESULT WINAPI d2d_device_context_CreateGradientStopCollection(
ID2D1GradientStopCollection **gradient)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
- return E_NOTIMPL;
+ TRACE("This %p, stops %p, gradient %p.\n", This, stops, gradient);
+ return ID2D1RenderTarget_CreateGradientStopCollection(This->dxgi_target,
+ stops, stop_count, gamma, extend_mode, gradient);
}
static HRESULT WINAPI d2d_device_context_CreateLinearGradientBrush(
@@ -148,8 +172,10 @@ static HRESULT WINAPI d2d_device_context_CreateLinearGradientBrush(
ID2D1LinearGradientBrush **brush)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
- return E_NOTIMPL;
+ TRACE("This %p, gradient_brush_desc %p, brush_desc %p, gradient %p, brush %p.\n",
+ This, gradient_brush_desc, brush_desc, gradient, brush);
+ return ID2D1RenderTarget_CreateLinearGradientBrush(This->dxgi_target,
+ gradient_brush_desc, brush_desc, gradient, brush);
}
static HRESULT WINAPI d2d_device_context_CreateRadialGradientBrush(
@@ -160,8 +186,10 @@ static HRESULT WINAPI d2d_device_context_CreateRadialGradientBrush(
ID2D1RadialGradientBrush **brush)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
- return E_NOTIMPL;
+ TRACE("This %p, gradient_brush_desc %p, brush_desc %p, gradient %p, brush %p.\n",
+ This, gradient_brush_desc, brush_desc, gradient, brush);
+ return ID2D1RenderTarget_CreateRadialGradientBrush(This->dxgi_target,
+ gradient_brush_desc, brush_desc, gradient, brush);
}
static HRESULT WINAPI d2d_device_context_CreateCompatibleRenderTarget(
@@ -173,8 +201,10 @@ static HRESULT WINAPI d2d_device_context_CreateCompatibleRenderTarget(
ID2D1BitmapRenderTarget **render_target)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
- return E_NOTIMPL;
+ TRACE("This %p, size %p, pixel_size %p, format %p, render_target %p.\n",
+ This, size, pixel_size, format, render_target);
+ return ID2D1RenderTarget_CreateCompatibleRenderTarget(This->dxgi_target,
+ size, pixel_size, format, options, render_target);
}
static HRESULT WINAPI d2d_device_context_CreateLayer(
@@ -183,8 +213,8 @@ static HRESULT WINAPI d2d_device_context_CreateLayer(
ID2D1Layer **layer)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
- return E_NOTIMPL;
+ TRACE("This %p, size %p, layer %p.\n", This, size, layer);
+ return ID2D1RenderTarget_CreateLayer(This->dxgi_target, size, layer);
}
static HRESULT WINAPI d2d_device_context_CreateMesh(
@@ -192,8 +222,8 @@ static HRESULT WINAPI d2d_device_context_CreateMesh(
ID2D1Mesh **mesh)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
- return E_NOTIMPL;
+ TRACE("This %p, mesh %p.\n", This, mesh);
+ return ID2D1RenderTarget_CreateMesh(This->dxgi_target, mesh);
}
static void WINAPI d2d_device_context_DrawLine(
@@ -205,7 +235,8 @@ static void WINAPI d2d_device_context_DrawLine(
ID2D1StrokeStyle *stroke_style)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
+ TRACE("This %p, brush %p, stroke_style %p.\n", This, brush, stroke_style);
+ ID2D1RenderTarget_DrawLine(This->dxgi_target, p0, p1, brush, stroke_width, stroke_style);
}
static void WINAPI d2d_device_context_DrawRectangle(
@@ -216,7 +247,8 @@ static void WINAPI d2d_device_context_DrawRectangle(
ID2D1StrokeStyle *stroke_style)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
+ TRACE("This %p, rect %p, brush %p, stroke_style %p.\n", This, rect, brush, stroke_style);
+ ID2D1RenderTarget_DrawRectangle(This->dxgi_target, rect, brush, stroke_width, stroke_style);
}
static void WINAPI d2d_device_context_FillRectangle(
@@ -225,7 +257,8 @@ static void WINAPI d2d_device_context_FillRectangle(
ID2D1Brush *brush)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
+ TRACE("This %p, rect %p, brush %p.\n", This, rect, brush);
+ ID2D1RenderTarget_FillRectangle(This->dxgi_target, rect, brush);
}
static void WINAPI d2d_device_context_DrawRoundedRectangle(
@@ -236,7 +269,8 @@ static void WINAPI d2d_device_context_DrawRoundedRectangle(
ID2D1StrokeStyle *stroke_style)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
+ TRACE("This %p, rect %p, brush %p, stroke_style %p.\n", This, rect, brush, stroke_style);
+ ID2D1RenderTarget_DrawRoundedRectangle(This->dxgi_target, rect, brush, stroke_width, stroke_style);
}
static void WINAPI d2d_device_context_FillRoundedRectangle(
@@ -245,7 +279,8 @@ static void WINAPI d2d_device_context_FillRoundedRectangle(
ID2D1Brush *brush)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
+ TRACE("This %p, rect %p, brush %p.\n", This, rect, brush);
+ ID2D1RenderTarget_FillRoundedRectangle(This->dxgi_target, rect, brush);
}
static void WINAPI d2d_device_context_DrawEllipse(
@@ -256,7 +291,8 @@ static void WINAPI d2d_device_context_DrawEllipse(
ID2D1StrokeStyle *stroke_style)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
+ TRACE("This %p, ellipse %p, brush %p, stroke_style %p.\n", This, ellipse, brush, stroke_style);
+ ID2D1RenderTarget_DrawEllipse(This->dxgi_target, ellipse, brush, stroke_width, stroke_style);
}
static void WINAPI d2d_device_context_FillEllipse(
@@ -265,7 +301,8 @@ static void WINAPI d2d_device_context_FillEllipse(
ID2D1Brush *brush)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
+ TRACE("This %p, ellipse %p, brush %p.\n", This, ellipse, brush);
+ ID2D1RenderTarget_FillEllipse(This->dxgi_target, ellipse, brush);
}
static void WINAPI d2d_device_context_DrawGeometry(
@@ -276,7 +313,8 @@ static void WINAPI d2d_device_context_DrawGeometry(
ID2D1StrokeStyle *stroke_style)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
+ TRACE("This %p, geometry %p, brush %p, stroke_style %p.\n", This, geometry, brush, stroke_style);
+ ID2D1RenderTarget_DrawGeometry(This->dxgi_target, geometry, brush, stroke_width, stroke_style);
}
static void WINAPI d2d_device_context_FillGeometry(
@@ -286,7 +324,8 @@ static void WINAPI d2d_device_context_FillGeometry(
ID2D1Brush *opacity_brush)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
+ TRACE("This %p, geometry %p, brush %p, opacity_brush %p.\n", This, geometry, brush, opacity_brush);
+ ID2D1RenderTarget_FillGeometry(This->dxgi_target, geometry, brush, opacity_brush);
}
static void WINAPI d2d_device_context_FillMesh(
@@ -295,7 +334,8 @@ static void WINAPI d2d_device_context_FillMesh(
ID2D1Brush *brush)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
+ TRACE("This %p, mesh %p, brush %p.\n", This, mesh, brush);
+ ID2D1RenderTarget_FillMesh(This->dxgi_target, mesh, brush);
}
static void WINAPI d2d_device_context_FillOpacityMask(
@@ -307,7 +347,9 @@ static void WINAPI d2d_device_context_FillOpacityMask(
const D2D1_RECT_F *src_rect)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
+ TRACE("This %p, mask %p, brush %p.\n", This, mask, brush);
+ ID2D1RenderTarget_FillOpacityMask(This->dxgi_target,
+ mask, brush, content, dst_rect, src_rect);
}
static void WINAPI d2d_device_context_DrawBitmap(
@@ -319,7 +361,9 @@ static void WINAPI d2d_device_context_DrawBitmap(
const D2D1_RECT_F *src_rect)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
+ TRACE("This %p, bitmap %p.\n", This, bitmap);
+ ID2D1RenderTarget_DrawBitmap(This->dxgi_target,
+ bitmap, dst_rect, opacity, interpolation_mode, src_rect);
}
static void WINAPI d2d_device_context_DrawText(
@@ -333,7 +377,9 @@ static void WINAPI d2d_device_context_DrawText(
DWRITE_MEASURING_MODE measuring_mode)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
+ TRACE("This %p, string %s.\n", This, debugstr_w(string));
+ ID2D1RenderTarget_DrawText(This->dxgi_target, string, string_len,
+ text_format, layout_rect, brush, options, measuring_mode);
}
static void WINAPI d2d_device_context_DrawTextLayout(
@@ -344,7 +390,8 @@ static void WINAPI d2d_device_context_DrawTextLayout(
D2D1_DRAW_TEXT_OPTIONS options)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
+ TRACE("This %p, layout %p, brush %p.\n", This, layout, brush);
+ ID2D1RenderTarget_DrawTextLayout(This->dxgi_target, origin, layout, brush, options);
}
static void WINAPI d2d_device_context_DrawGlyphRun(
@@ -355,7 +402,9 @@ static void WINAPI d2d_device_context_DrawGlyphRun(
DWRITE_MEASURING_MODE measuring_mode)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
+ TRACE("This %p, glyph_run %p, brush %p.\n", This, glyph_run, brush);
+ ID2D1RenderTarget_DrawGlyphRun(This->dxgi_target,
+ baseline_origin, glyph_run, brush, measuring_mode);
}
static void WINAPI d2d_device_context_SetTransform(
@@ -363,7 +412,8 @@ static void WINAPI d2d_device_context_SetTransform(
const D2D1_MATRIX_3X2_F *transform)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
+ TRACE("This %p, transform %p.\n", This, transform);
+ ID2D1RenderTarget_SetTransform(This->dxgi_target, transform);
}
static void WINAPI d2d_device_context_GetTransform(
@@ -371,7 +421,8 @@ static void WINAPI d2d_device_context_GetTransform(
D2D1_MATRIX_3X2_F *transform)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
+ TRACE("This %p, transform %p.\n", This, transform);
+ ID2D1RenderTarget_GetTransform(This->dxgi_target, transform);
}
static void WINAPI d2d_device_context_SetAntialiasMode(
@@ -379,15 +430,16 @@ static void WINAPI d2d_device_context_SetAntialiasMode(
D2D1_ANTIALIAS_MODE antialias_mode)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
+ TRACE("This %p.\n", This);
+ ID2D1RenderTarget_SetAntialiasMode(This->dxgi_target, antialias_mode);
}
static D2D1_ANTIALIAS_MODE WINAPI d2d_device_context_GetAntialiasMode(
ID2D1DeviceContext *iface)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
- return D2D1_ANTIALIAS_MODE_PER_PRIMITIVE;
+ TRACE("This %p.\n", This);
+ return ID2D1RenderTarget_GetAntialiasMode(This->dxgi_target);
}
static void WINAPI d2d_device_context_SetTextAntialiasMode(
@@ -395,15 +447,16 @@ static void WINAPI d2d_device_context_SetTextAntialiasMode(
D2D1_TEXT_ANTIALIAS_MODE antialias_mode)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
+ TRACE("This %p.\n", This);
+ ID2D1RenderTarget_SetTextAntialiasMode(This->dxgi_target, antialias_mode);
}
static D2D1_TEXT_ANTIALIAS_MODE WINAPI d2d_device_context_GetTextAntialiasMode(
ID2D1DeviceContext *iface)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
- return D2D1_TEXT_ANTIALIAS_MODE_DEFAULT;
+ TRACE("This %p.\n", This);
+ return ID2D1RenderTarget_GetTextAntialiasMode(This->dxgi_target);
}
static void WINAPI d2d_device_context_SetTextRenderingParams(
@@ -411,7 +464,8 @@ static void WINAPI d2d_device_context_SetTextRenderingParams(
IDWriteRenderingParams *text_rendering_params)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
+ TRACE("This %p.\n", This);
+ ID2D1RenderTarget_SetTextRenderingParams(This->dxgi_target, text_rendering_params);
}
static void WINAPI d2d_device_context_GetTextRenderingParams(
@@ -419,7 +473,8 @@ static void WINAPI d2d_device_context_GetTextRenderingParams(
IDWriteRenderingParams **text_rendering_params)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
+ TRACE("This %p.\n", This);
+ ID2D1RenderTarget_GetTextRenderingParams(This->dxgi_target, text_rendering_params);
}
static void WINAPI d2d_device_context_SetTags(
@@ -428,7 +483,8 @@ static void WINAPI d2d_device_context_SetTags(
D2D1_TAG tag2)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
+ TRACE("This %p.\n", This);
+ ID2D1RenderTarget_SetTags(This->dxgi_target, tag1, tag2);
}
static void WINAPI d2d_device_context_GetTags(
@@ -437,7 +493,8 @@ static void WINAPI d2d_device_context_GetTags(
D2D1_TAG *tag2)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
+ TRACE("This %p.\n", This);
+ ID2D1RenderTarget_GetTags(This->dxgi_target, tag1, tag2);
}
static void WINAPI d2d_device_context_PushLayer(
@@ -446,14 +503,16 @@ static void WINAPI d2d_device_context_PushLayer(
ID2D1Layer *layer)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
+ TRACE("This %p.\n", This);
+ ID2D1RenderTarget_PushLayer(This->dxgi_target, layer_parameters, layer);
}
static void WINAPI d2d_device_context_PopLayer(
ID2D1DeviceContext *iface)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
+ TRACE("This %p.\n", This);
+ ID2D1RenderTarget_PopLayer(This->dxgi_target);
}
static HRESULT WINAPI d2d_device_context_Flush(
@@ -462,8 +521,8 @@ static HRESULT WINAPI d2d_device_context_Flush(
D2D1_TAG *tag2)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
- return E_NOTIMPL;
+ TRACE("This %p.\n", This);
+ return ID2D1RenderTarget_Flush(This->dxgi_target, tag1, tag2);
}
static void WINAPI d2d_device_context_SaveDrawingState(
@@ -471,7 +530,8 @@ static void WINAPI d2d_device_context_SaveDrawingState(
ID2D1DrawingStateBlock *state_block)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
+ TRACE("This %p, state_block %p.\n", This, state_block);
+ ID2D1RenderTarget_SaveDrawingState(This->dxgi_target, state_block);
}
static void WINAPI d2d_device_context_RestoreDrawingState(
@@ -479,7 +539,8 @@ static void WINAPI d2d_device_context_RestoreDrawingState(
ID2D1DrawingStateBlock *state_block)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
+ TRACE("This %p, state_block %p.\n", This, state_block);
+ ID2D1RenderTarget_RestoreDrawingState(This->dxgi_target, state_block);
}
static void WINAPI d2d_device_context_PushAxisAlignedClip(
@@ -488,14 +549,16 @@ static void WINAPI d2d_device_context_PushAxisAlignedClip(
D2D1_ANTIALIAS_MODE antialias_mode)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
+ TRACE("This %p.\n", This);
+ ID2D1RenderTarget_PushAxisAlignedClip(This->dxgi_target, clip_rect, antialias_mode);
}
static void WINAPI d2d_device_context_PopAxisAlignedClip(
ID2D1DeviceContext *iface)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
+ TRACE("This %p.\n", This);
+ ID2D1RenderTarget_PopAxisAlignedClip(This->dxgi_target);
}
static void WINAPI d2d_device_context_Clear(
@@ -503,14 +566,16 @@ static void WINAPI d2d_device_context_Clear(
const D2D1_COLOR_F *color)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
+ TRACE("This %p.\n", This);
+ ID2D1RenderTarget_Clear(This->dxgi_target, color);
}
static void WINAPI d2d_device_context_BeginDraw(
ID2D1DeviceContext *iface)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
+ TRACE("This %p.\n", This);
+ ID2D1RenderTarget_BeginDraw(This->dxgi_target);
}
static HRESULT WINAPI d2d_device_context_EndDraw(
@@ -519,8 +584,8 @@ static HRESULT WINAPI d2d_device_context_EndDraw(
D2D1_TAG *tag2)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
- return E_NOTIMPL;
+ TRACE("This %p.\n", This);
+ return ID2D1RenderTarget_EndDraw(This->dxgi_target, tag1, tag2);
}
static D2D1_PIXEL_FORMAT * WINAPI d2d_device_context_GetPixelFormat(
@@ -528,8 +593,9 @@ static D2D1_PIXEL_FORMAT * WINAPI d2d_device_context_GetPixelFormat(
D2D1_PIXEL_FORMAT *__ret)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
- return NULL;
+ TRACE("This %p, __ret %p.\n", This, __ret);
+ *__ret = ID2D1RenderTarget_GetPixelFormat(This->dxgi_target);
+ return __ret;
}
static void WINAPI d2d_device_context_SetDpi(
@@ -538,7 +604,8 @@ static void WINAPI d2d_device_context_SetDpi(
float dpi_y)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
+ TRACE("This %p.\n", This);
+ ID2D1RenderTarget_SetDpi(This->dxgi_target, dpi_x, dpi_y);
}
static void WINAPI d2d_device_context_GetDpi(
@@ -547,7 +614,8 @@ static void WINAPI d2d_device_context_GetDpi(
float *dpi_y)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
+ TRACE("This %p.\n", This);
+ ID2D1RenderTarget_GetDpi(This->dxgi_target, dpi_x, dpi_y);
}
static D2D1_SIZE_F * WINAPI d2d_device_context_GetSize(
@@ -555,8 +623,9 @@ static D2D1_SIZE_F * WINAPI d2d_device_context_GetSize(
D2D1_SIZE_F *__ret)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
- return NULL;
+ TRACE("This %p, __ret %p.\n", This, __ret);
+ *__ret = ID2D1RenderTarget_GetSize(This->dxgi_target);
+ return __ret;
}
static D2D1_SIZE_U * WINAPI d2d_device_context_GetPixelSize(
@@ -564,16 +633,17 @@ static D2D1_SIZE_U * WINAPI d2d_device_context_GetPixelSize(
D2D1_SIZE_U *__ret)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
- return NULL;
+ TRACE("This %p, __ret %p.\n", This, __ret);
+ *__ret = ID2D1RenderTarget_GetPixelSize(This->dxgi_target);
+ return __ret;
}
static UINT32 WINAPI d2d_device_context_GetMaximumBitmapSize(
ID2D1DeviceContext *iface)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
- return 0;
+ TRACE("This %p.\n", This);
+ return ID2D1RenderTarget_GetMaximumBitmapSize(This->dxgi_target);
}
static BOOL WINAPI d2d_device_context_IsSupported(
@@ -581,8 +651,8 @@ static BOOL WINAPI d2d_device_context_IsSupported(
const D2D1_RENDER_TARGET_PROPERTIES *desc)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
- return FALSE;
+ TRACE("This %p.\n", This);
+ return ID2D1RenderTarget_IsSupported(This->dxgi_target, desc);
}
static HRESULT WINAPI d2d_device_context_ID2D1DeviceContext_CreateBitmap(
@@ -765,7 +835,12 @@ static void WINAPI d2d_device_context_GetDevice(
ID2D1Device **device)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
+ TRACE("This %p, device %p.\n", This, device);
+ if (device == NULL)
+ return;
+
+ ID2D1Device_AddRef(This->device);
+ *device = This->device;
}
static void WINAPI d2d_device_context_SetTarget(
@@ -773,7 +848,34 @@ static void WINAPI d2d_device_context_SetTarget(
ID2D1Image *target)
{
struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface);
- FIXME("%p stub!\n", This);
+ IDXGISurface *surface;
+ IDXGISurface1 *surface1;
+ ID2D1Bitmap1 *bitmap;
+ HRESULT hr;
+
+ TRACE("This %p, target %p.\n", This, target);
+ if (FAILED(hr = ID2D1Image_QueryInterface(target, &IID_ID2D1Bitmap1, (void **)&bitmap)))
+ {
+ FIXME("Provided ID2D1Image type not yet supported, hr %#x.\n", hr);
+ return;
+ }
+
+ ID2D1Bitmap1_GetSurface(bitmap, &surface);
+ ID2D1Bitmap1_Release(bitmap);
+ hr = IDXGISurface_QueryInterface(surface, &IID_IDXGISurface1, (void **)&surface1);
+ IDXGISurface_Release(surface);
+ if (FAILED(hr))
+ {
+ WARN("Failed to query IDXGISurface1, hr %#x.\n", hr);
+ return;
+ }
+
+ if (FAILED(d2d_d3d_render_target_create_rtv(This->dxgi_target, surface1)))
+ {
+ WARN("Failed to set renderviewtarget, hr %#x.\n", hr);
+ }
+
+ IDXGISurface1_Release(surface1);
}
static void WINAPI d2d_device_context_GetTarget(
@@ -1038,3 +1140,41 @@ static const struct ID2D1DeviceContextVtbl d2d_device_context_vtbl =
d2d_device_context_GetEffectRequiredInputRectangles,
d2d_device_context_ID2D1DeviceContext_FillOpacityMask,
};
+
+HRESULT d2d_device_context_init(struct d2d_device_context *This,
+ ID2D1Device *device_iface, D2D1_DEVICE_CONTEXT_OPTIONS options,
+ ID3D10Device *d3d_device)
+{
+ HRESULT hr;
+ ID2D1Factory *factory;
+ D2D1_RENDER_TARGET_PROPERTIES desc;
+ desc.type = D2D1_RENDER_TARGET_TYPE_DEFAULT;
+ desc.pixelFormat.format = DXGI_FORMAT_UNKNOWN;
+ desc.pixelFormat.alphaMode = D2D1_ALPHA_MODE_UNKNOWN;
+ desc.dpiX = 96.0f;
+ desc.dpiY = 96.0f;
+ desc.usage = D2D1_RENDER_TARGET_USAGE_NONE;
+ desc.minLevel = D2D1_FEATURE_LEVEL_DEFAULT;
+
+ if (options == D2D1_DEVICE_CONTEXT_OPTIONS_ENABLE_MULTITHREADED_OPTIMIZATIONS)
+ FIXME("D2D1_DEVICE_CONTEXT_OPTIONS ignored.");
+
+ This->ID2D1DeviceContext_iface.lpVtbl = &d2d_device_context_vtbl;
+ This->refcount = 1;
+ This->device = device_iface;
+
+ ID2D1Device_GetFactory(This->device, &factory);
+ hr = d2d_d3d_create_render_target_with_device(factory, d3d_device,
+ (IUnknown *)&This->ID2D1DeviceContext_iface,
+ &desc, &This->dxgi_target);
+ ID2D1Factory_Release(factory);
+ if (FAILED(hr))
+ {
+ WARN("Failed to create base render target, hr %#x.\n", hr);
+ return hr;
+ }
+
+ ID2D1Device_AddRef(This->device);
+
+ return S_OK;
+}
--
2.7.4

View File

@ -1,12 +1,12 @@
From a93e855c484c622efedfe9696eac72c32007621d Mon Sep 17 00:00:00 2001
From 04bb8bf7196efb6f7c0a3c5f7524ac8aefc645b6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Sat, 7 Oct 2017 00:52:34 +0200
Subject: wined3d: Add support for depth bias clamping.
---
dlls/d3d11/device.c | 5 ++++-
dlls/wined3d/adapter_gl.c | 3 +++
dlls/wined3d/cs.c | 1 +
dlls/wined3d/directx.c | 3 +++
dlls/wined3d/state.c | 17 +++++++++++++++--
dlls/wined3d/stateblock.c | 2 ++
dlls/wined3d/utils.c | 1 +
@ -15,10 +15,10 @@ Subject: wined3d: Add support for depth bias clamping.
8 files changed, 29 insertions(+), 4 deletions(-)
diff --git a/dlls/d3d11/device.c b/dlls/d3d11/device.c
index 68d6cf0..9854906 100644
index e6ba31c..f0ff7b3 100644
--- a/dlls/d3d11/device.c
+++ b/dlls/d3d11/device.c
@@ -920,7 +920,7 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_RSSetState(ID3D11DeviceCon
@@ -933,7 +933,7 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_RSSetState(ID3D11DeviceCon
{
DWORD d;
float f;
@ -27,7 +27,7 @@ index 68d6cf0..9854906 100644
TRACE("iface %p, rasterizer_state %p.\n", iface, rasterizer_state);
@@ -932,6 +932,7 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_RSSetState(ID3D11DeviceCon
@@ -945,6 +945,7 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_RSSetState(ID3D11DeviceCon
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_CULLMODE, WINED3D_CULL_BACK);
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_SLOPESCALEDEPTHBIAS, 0);
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_DEPTHBIAS, 0);
@ -35,7 +35,7 @@ index 68d6cf0..9854906 100644
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_SCISSORTESTENABLE, FALSE);
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_MULTISAMPLEANTIALIAS, FALSE);
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_ANTIALIASEDLINEENABLE, FALSE);
@@ -946,8 +947,10 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_RSSetState(ID3D11DeviceCon
@@ -959,8 +960,10 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_RSSetState(ID3D11DeviceCon
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_CULLMODE, desc->CullMode);
scale_bias.f = desc->SlopeScaledDepthBias;
const_bias.f = desc->DepthBias;
@ -46,23 +46,11 @@ index 68d6cf0..9854906 100644
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_SCISSORTESTENABLE, desc->ScissorEnable);
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_MULTISAMPLEANTIALIAS, desc->MultisampleEnable);
wined3d_device_set_render_state(device->wined3d_device,
diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c
index 3f1ca8c..aea2cdf 100644
--- a/dlls/wined3d/cs.c
+++ b/dlls/wined3d/cs.c
@@ -1065,6 +1065,7 @@ static void wined3d_cs_exec_set_depth_stencil_view(struct wined3d_cs *cs, const
device_invalidate_state(device, STATE_RENDER(WINED3D_RS_STENCILENABLE));
device_invalidate_state(device, STATE_RENDER(WINED3D_RS_STENCILWRITEMASK));
device_invalidate_state(device, STATE_RENDER(WINED3D_RS_DEPTHBIAS));
+ device_invalidate_state(device, STATE_RENDER(WINED3D_RS_DEPTHBIASCLAMP));
}
else if (prev && prev->format->depth_bias_scale != op->view->format->depth_bias_scale)
{
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index a4e4a0c..e595da5 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -233,6 +233,7 @@ static const struct wined3d_extension_map gl_extension_map[] =
diff --git a/dlls/wined3d/adapter_gl.c b/dlls/wined3d/adapter_gl.c
index 686c79a..dc49c88 100644
--- a/dlls/wined3d/adapter_gl.c
+++ b/dlls/wined3d/adapter_gl.c
@@ -180,6 +180,7 @@ static const struct wined3d_extension_map gl_extension_map[] =
{"GL_EXT_packed_depth_stencil", EXT_PACKED_DEPTH_STENCIL },
{"GL_EXT_packed_float", EXT_PACKED_FLOAT },
{"GL_EXT_point_parameters", EXT_POINT_PARAMETERS },
@ -70,7 +58,7 @@ index a4e4a0c..e595da5 100644
{"GL_EXT_provoking_vertex", EXT_PROVOKING_VERTEX },
{"GL_EXT_secondary_color", EXT_SECONDARY_COLOR },
{"GL_EXT_stencil_two_side", EXT_STENCIL_TWO_SIDE },
@@ -3117,6 +3118,8 @@ static void load_gl_funcs(struct wined3d_gl_info *gl_info)
@@ -2473,6 +2474,8 @@ static void load_gl_funcs(struct wined3d_gl_info *gl_info)
/* GL_EXT_point_parameters */
USE_GL_FUNC(glPointParameterfEXT)
USE_GL_FUNC(glPointParameterfvEXT)
@ -79,6 +67,18 @@ index a4e4a0c..e595da5 100644
/* GL_EXT_provoking_vertex */
USE_GL_FUNC(glProvokingVertexEXT)
/* GL_EXT_secondary_color */
diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c
index d6bc739..515982c 100644
--- a/dlls/wined3d/cs.c
+++ b/dlls/wined3d/cs.c
@@ -1124,6 +1124,7 @@ static void wined3d_cs_exec_set_depth_stencil_view(struct wined3d_cs *cs, const
device_invalidate_state(device, STATE_RENDER(WINED3D_RS_STENCILENABLE));
device_invalidate_state(device, STATE_RENDER(WINED3D_RS_STENCILWRITEMASK));
device_invalidate_state(device, STATE_RENDER(WINED3D_RS_DEPTHBIAS));
+ device_invalidate_state(device, STATE_RENDER(WINED3D_RS_DEPTHBIASCLAMP));
}
else if (prev && prev->format->depth_bias_scale != op->view->format->depth_bias_scale)
{
diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c
index 3b2f845..2dd6ac2 100644
--- a/dlls/wined3d/state.c
@ -138,10 +138,10 @@ index b4d1751..093c740 100644
state->render_states[WINED3D_RS_WRAP9] = 0;
state->render_states[WINED3D_RS_WRAP10] = 0;
diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c
index 7cecd8c..0152879 100644
index 861f169..b46f67f 100644
--- a/dlls/wined3d/utils.c
+++ b/dlls/wined3d/utils.c
@@ -4425,6 +4425,7 @@ const char *debug_d3drenderstate(enum wined3d_render_state state)
@@ -4652,6 +4652,7 @@ const char *debug_d3drenderstate(enum wined3d_render_state state)
D3DSTATE_TO_STR(WINED3D_RS_BLENDFACTOR);
D3DSTATE_TO_STR(WINED3D_RS_SRGBWRITEENABLE);
D3DSTATE_TO_STR(WINED3D_RS_DEPTHBIAS);
@ -162,10 +162,10 @@ index 525c298..883faaa 100644
EXT_SECONDARY_COLOR,
EXT_STENCIL_TWO_SIDE,
diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h
index bb4ad48..4a5d0dd 100644
index 239ccd8..884e824 100644
--- a/include/wine/wined3d.h
+++ b/include/wine/wined3d.h
@@ -386,8 +386,9 @@ enum wined3d_render_state
@@ -399,8 +399,9 @@ enum wined3d_render_state
WINED3D_RS_SRCBLENDALPHA = 207,
WINED3D_RS_DESTBLENDALPHA = 208,
WINED3D_RS_BLENDOPALPHA = 209,

View File

@ -1,2 +1 @@
Fixes: Implement support for more d3d11 depth options in RSSetState.
Fixes: [43848] Implement support for depth bias clamping

View File

@ -1,4 +1,4 @@
From aa4d3f847be7541b846438956ca988d3456054b2 Mon Sep 17 00:00:00 2001
From 29ecd040a4524a81da6127c59dbb601c88dde1da Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Fri, 15 Jan 2016 13:17:31 +0100
Subject: ntdll: Add stub for ApiSetQueryApiSetPresence.
@ -17,12 +17,12 @@ index 6d63b5b..1d99dd7 100644
-@ stub ApiSetQueryApiSetPresence
+@ stdcall ApiSetQueryApiSetPresence(ptr ptr) ntdll.ApiSetQueryApiSetPresence
diff --git a/dlls/ntdll/misc.c b/dlls/ntdll/misc.c
index 88e8b33..85b0e32 100644
index 2431662..c84b004 100644
--- a/dlls/ntdll/misc.c
+++ b/dlls/ntdll/misc.c
@@ -484,3 +484,14 @@ void WINAPI DbgUiRemoteBreakin( void *arg )
{
FIXME("stub\n");
@@ -504,3 +504,14 @@ NTSTATUS WINAPI NtCreateLowBoxToken(HANDLE *token_handle, HANDLE existing_token_
*token_handle = NULL;
return STATUS_SUCCESS;
}
+
+/*********************************************************************
@ -36,7 +36,7 @@ index 88e8b33..85b0e32 100644
+ return TRUE;
+}
diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec
index c260b0d..01836a3 100644
index 003e4f9..5e7c463 100644
--- a/dlls/ntdll/ntdll.spec
+++ b/dlls/ntdll/ntdll.spec
@@ -3,6 +3,7 @@

View File

@ -52,7 +52,7 @@ usage()
# Get the upstream commit sha
upstream_commit()
{
echo "ccf6211c0ae6e86218f7e6c1f2fe725a23e568b9"
echo "c698682b3286d72cc7c4c4624b4d14b03dbe6908"
}
# Show version information
@ -296,6 +296,7 @@ patch_enable_all ()
enable_server_device_manager_destroy="$1"
enable_server_send_hardware_message="$1"
enable_setupapi_DiskSpaceList="$1"
enable_setupapi_Display_Device="$1"
enable_setupapi_HSPFILEQ_Check_Type="$1"
enable_setupapi_SPFILENOTIFY_FILEINCABINET="$1"
enable_setupapi_SP_COPY_IN_USE_NEEDS_REBOOT="$1"
@ -1064,6 +1065,9 @@ patch_enable ()
setupapi-DiskSpaceList)
enable_setupapi_DiskSpaceList="$2"
;;
setupapi-Display_Device)
enable_setupapi_Display_Device="$2"
;;
setupapi-HSPFILEQ_Check_Type)
enable_setupapi_HSPFILEQ_Check_Type="$2"
;;
@ -2842,17 +2846,12 @@ fi
# | * [#44052] - Add ID2D1Bitmap1/ID2D1Factory1 support
# |
# | Modified files:
# | * dlls/d2d1/Makefile.in, dlls/d2d1/d2d1_private.h, dlls/d2d1/device.c, dlls/d2d1/device_context.c, dlls/d2d1/factory.c,
# | dlls/d2d1/geometry.c
# | * dlls/d2d1/d2d1_private.h, dlls/d2d1/factory.c, dlls/d2d1/geometry.c
# |
if test "$enable_d2d1_ID2D1Factory1" -eq 1; then
patch_apply d2d1-ID2D1Factory1/0003-d2d1-Use-ID2D1Factory1-in-d2d_geometry.patch
patch_apply d2d1-ID2D1Factory1/0005-d2d1-Stub-ID2D1DeviceContext.patch
patch_apply d2d1-ID2D1Factory1/0006-d2d1-Implement-ID2D1DeviceContext.patch
(
printf '%s\n' '+ { "Lucian Poston", "d2d1: Use ID2D1Factory1 in d2d_geometry.", 1 },';
printf '%s\n' '+ { "Lucian Poston", "d2d1: Stub ID2D1DeviceContext.", 1 },';
printf '%s\n' '+ { "Lucian Poston", "d2d1: Implement ID2D1DeviceContext.", 1 },';
) >> "$patchlist"
fi
@ -3061,7 +3060,7 @@ fi
# | * [#43848] Implement support for depth bias clamping
# |
# | Modified files:
# | * dlls/d3d10core/tests/device.c, dlls/d3d11/device.c, dlls/wined3d/cs.c, dlls/wined3d/directx.c, dlls/wined3d/state.c,
# | * dlls/d3d10core/tests/device.c, dlls/d3d11/device.c, dlls/wined3d/adapter_gl.c, dlls/wined3d/cs.c, dlls/wined3d/state.c,
# | dlls/wined3d/stateblock.c, dlls/wined3d/utils.c, dlls/wined3d/wined3d_gl.h, include/wine/wined3d.h
# |
if test "$enable_d3d11_Depth_Bias" -eq 1; then
@ -6263,6 +6262,25 @@ if test "$enable_setupapi_DiskSpaceList" -eq 1; then
) >> "$patchlist"
fi
# Patchset setupapi-Display_Device
# |
# | This patchset fixes the following Wine bugs:
# | * [#35345] Fix enumeration of display driver properties using setupapi
# |
# | Modified files:
# | * dlls/setupapi/devinst.c, dlls/setupapi/tests/devinst.c, loader/wine.inf.in
# |
if test "$enable_setupapi_Display_Device" -eq 1; then
patch_apply setupapi-Display_Device/0001-setupapi-Create-registry-keys-for-display-devices-an.patch
patch_apply setupapi-Display_Device/0002-setupapi-Handle-the-case-that-a-full-driver-path-is-.patch
patch_apply setupapi-Display_Device/0003-setupapi-Also-create-HardwareId-registry-key-for-dis.patch
(
printf '%s\n' '+ { "Michael Müller", "setupapi: Create registry keys for display devices and display drivers.", 1 },';
printf '%s\n' '+ { "Michael Müller", "setupapi: Handle the case that a full driver path is passed to SetupDiGetClassDevs.", 1 },';
printf '%s\n' '+ { "Sebastian Lackner", "setupapi: Also create HardwareId registry key for display devices.", 1 },';
) >> "$patchlist"
fi
# Patchset setupapi-HSPFILEQ_Check_Type
# |
# | This patchset fixes the following Wine bugs:
@ -7539,7 +7557,8 @@ fi
# Patchset wined3d-Accounting
# |
# | Modified files:
# | * dlls/d3d9/tests/device.c, dlls/wined3d/device.c, dlls/wined3d/directx.c, dlls/wined3d/wined3d_gl.h
# | * dlls/d3d9/tests/device.c, dlls/wined3d/adapter_gl.c, dlls/wined3d/device.c, dlls/wined3d/directx.c,
# | dlls/wined3d/wined3d_gl.h
# |
if test "$enable_wined3d_Accounting" -eq 1; then
patch_apply wined3d-Accounting/0001-wined3d-Use-real-values-for-memory-accounting-on-NVI.patch
@ -7551,7 +7570,7 @@ fi
# Patchset wined3d-Dual_Source_Blending
# |
# | Modified files:
# | * dlls/d3d11/tests/d3d11.c, dlls/wined3d/context.c, dlls/wined3d/directx.c, dlls/wined3d/glsl_shader.c,
# | * dlls/d3d11/tests/d3d11.c, dlls/wined3d/adapter_gl.c, dlls/wined3d/context.c, dlls/wined3d/glsl_shader.c,
# | dlls/wined3d/shader.c, dlls/wined3d/state.c, dlls/wined3d/wined3d_private.h
# |
if test "$enable_wined3d_Dual_Source_Blending" -eq 1; then
@ -7685,7 +7704,7 @@ fi
# | * [#42538] Add check for GL_VENDOR = "Brian Paul" to detect Mesa
# |
# | Modified files:
# | * dlls/wined3d/directx.c
# | * dlls/wined3d/adapter_gl.c
# |
if test "$enable_wined3d_wined3d_guess_gl_vendor" -eq 1; then
patch_apply wined3d-wined3d_guess_gl_vendor/0001-wined3d-Also-check-for-Brian-Paul-to-detect-Mesa-gl_.patch

View File

@ -1,4 +1,4 @@
From 1544a5022eee2874dcf492fc9c863ce21344a572 Mon Sep 17 00:00:00 2001
From 18631bae9b0750d47ce23a4164e49b7ae1f3fe31 Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Fri, 4 Dec 2015 10:36:47 +0100
Subject: server: Introduce a new alloc_handle object callback. (v2)
@ -42,7 +42,7 @@ Signed-off-by: Sebastian Lackner <sebastian@fds-team.de>
34 files changed, 75 insertions(+), 3 deletions(-)
diff --git a/server/async.c b/server/async.c
index cf7a434ebca..9c7b9943975 100644
index adbadc5..7f7b255 100644
--- a/server/async.c
+++ b/server/async.c
@@ -78,6 +78,7 @@ static const struct object_ops async_ops =
@ -53,7 +53,7 @@ index cf7a434ebca..9c7b9943975 100644
no_close_handle, /* close_handle */
async_destroy /* destroy */
};
@@ -459,6 +460,7 @@ static const struct object_ops iosb_ops =
@@ -461,6 +462,7 @@ static const struct object_ops iosb_ops =
no_link_name, /* link_name */
NULL, /* unlink_name */
no_open_file, /* open_file */
@ -62,7 +62,7 @@ index cf7a434ebca..9c7b9943975 100644
iosb_destroy /* destroy */
};
diff --git a/server/atom.c b/server/atom.c
index 3ff75407d9f..7bebf136a21 100644
index 3ff7540..7bebf13 100644
--- a/server/atom.c
+++ b/server/atom.c
@@ -90,6 +90,7 @@ static const struct object_ops atom_table_ops =
@ -74,7 +74,7 @@ index 3ff75407d9f..7bebf136a21 100644
atom_table_destroy /* destroy */
};
diff --git a/server/change.c b/server/change.c
index c5c88da58dd..49d577a44de 100644
index 1f2f7c5..441c510 100644
--- a/server/change.c
+++ b/server/change.c
@@ -172,6 +172,7 @@ static const struct object_ops dir_ops =
@ -86,7 +86,7 @@ index c5c88da58dd..49d577a44de 100644
dir_destroy /* destroy */
};
diff --git a/server/clipboard.c b/server/clipboard.c
index 160eb46959d..70b7e325380 100644
index 160eb46..70b7e32 100644
--- a/server/clipboard.c
+++ b/server/clipboard.c
@@ -87,6 +87,7 @@ static const struct object_ops clipboard_ops =
@ -98,7 +98,7 @@ index 160eb46959d..70b7e325380 100644
clipboard_destroy /* destroy */
};
diff --git a/server/completion.c b/server/completion.c
index 8b8983a157f..72dbc5b821f 100644
index 8b8983a..72dbc5b 100644
--- a/server/completion.c
+++ b/server/completion.c
@@ -75,6 +75,7 @@ static const struct object_ops completion_ops =
@ -110,7 +110,7 @@ index 8b8983a157f..72dbc5b821f 100644
completion_destroy /* destroy */
};
diff --git a/server/console.c b/server/console.c
index cb6410b7741..89909c3569a 100644
index e1ae086..d9c60f9 100644
--- a/server/console.c
+++ b/server/console.c
@@ -87,6 +87,7 @@ static const struct object_ops console_input_ops =
@ -138,7 +138,7 @@ index cb6410b7741..89909c3569a 100644
screen_buffer_destroy /* destroy */
};
diff --git a/server/debugger.c b/server/debugger.c
index 79b7e527f33..d658fc0625f 100644
index 79b7e52..d658fc0 100644
--- a/server/debugger.c
+++ b/server/debugger.c
@@ -84,6 +84,7 @@ static const struct object_ops debug_event_ops =
@ -158,7 +158,7 @@ index 79b7e527f33..d658fc0625f 100644
debug_ctx_destroy /* destroy */
};
diff --git a/server/device.c b/server/device.c
index 90a4b6e8eec..4bb29d897e5 100644
index dcc2946..47fe000 100644
--- a/server/device.c
+++ b/server/device.c
@@ -75,6 +75,7 @@ static const struct object_ops irp_call_ops =
@ -194,7 +194,7 @@ index 90a4b6e8eec..4bb29d897e5 100644
device_file_destroy /* destroy */
};
diff --git a/server/directory.c b/server/directory.c
index 7ffaedc4623..d903ff283c0 100644
index 7ffaedc..d903ff2 100644
--- a/server/directory.c
+++ b/server/directory.c
@@ -67,6 +67,7 @@ static const struct object_ops object_type_ops =
@ -214,7 +214,7 @@ index 7ffaedc4623..d903ff283c0 100644
directory_destroy /* destroy */
};
diff --git a/server/event.c b/server/event.c
index cfc0f6afc0d..608fafb94d7 100644
index cfc0f6a..608fafb 100644
--- a/server/event.c
+++ b/server/event.c
@@ -68,6 +68,7 @@ static const struct object_ops event_ops =
@ -234,7 +234,7 @@ index cfc0f6afc0d..608fafb94d7 100644
no_destroy /* destroy */
};
diff --git a/server/fd.c b/server/fd.c
index fa2b18a46b1..9dbf481259c 100644
index 6118f52..9dc953f 100644
--- a/server/fd.c
+++ b/server/fd.c
@@ -217,6 +217,7 @@ static const struct object_ops fd_ops =
@ -270,7 +270,7 @@ index fa2b18a46b1..9dbf481259c 100644
no_destroy /* destroy */
};
diff --git a/server/file.c b/server/file.c
index 6c036acb641..a7d8f95d972 100644
index 446621a..cbfc257 100644
--- a/server/file.c
+++ b/server/file.c
@@ -95,6 +95,7 @@ static const struct object_ops file_ops =
@ -282,7 +282,7 @@ index 6c036acb641..a7d8f95d972 100644
file_destroy /* destroy */
};
diff --git a/server/handle.c b/server/handle.c
index 35ab8607c85..782baefaaa0 100644
index 35ab860..782baef 100644
--- a/server/handle.c
+++ b/server/handle.c
@@ -133,6 +133,7 @@ static const struct object_ops handle_table_ops =
@ -327,7 +327,7 @@ index 35ab8607c85..782baefaaa0 100644
}
}
diff --git a/server/hook.c b/server/hook.c
index 3a0e4b4d1d3..dc653b8c42e 100644
index 3a0e4b4..dc653b8 100644
--- a/server/hook.c
+++ b/server/hook.c
@@ -91,6 +91,7 @@ static const struct object_ops hook_table_ops =
@ -339,7 +339,7 @@ index 3a0e4b4d1d3..dc653b8c42e 100644
hook_table_destroy /* destroy */
};
diff --git a/server/mailslot.c b/server/mailslot.c
index 9fafedbd204..531c9928e2f 100644
index f4c7007..bc169dd 100644
--- a/server/mailslot.c
+++ b/server/mailslot.c
@@ -89,6 +89,7 @@ static const struct object_ops mailslot_ops =
@ -350,7 +350,7 @@ index 9fafedbd204..531c9928e2f 100644
fd_close_handle, /* close_handle */
mailslot_destroy /* destroy */
};
@@ -144,6 +145,7 @@ static const struct object_ops mail_writer_ops =
@@ -145,6 +146,7 @@ static const struct object_ops mail_writer_ops =
no_link_name, /* link_name */
NULL, /* unlink_name */
no_open_file, /* open_file */
@ -358,7 +358,7 @@ index 9fafedbd204..531c9928e2f 100644
fd_close_handle, /* close_handle */
mail_writer_destroy /* destroy */
};
@@ -200,6 +202,7 @@ static const struct object_ops mailslot_device_ops =
@@ -202,6 +204,7 @@ static const struct object_ops mailslot_device_ops =
directory_link_name, /* link_name */
default_unlink_name, /* unlink_name */
mailslot_device_open_file, /* open_file */
@ -367,7 +367,7 @@ index 9fafedbd204..531c9928e2f 100644
mailslot_device_destroy /* destroy */
};
diff --git a/server/mapping.c b/server/mapping.c
index f9f50edfa60..095cb03d7fb 100644
index 1ed8c9d..8bfaa8e 100644
--- a/server/mapping.c
+++ b/server/mapping.c
@@ -77,6 +77,7 @@ static const struct object_ops ranges_ops =
@ -386,7 +386,7 @@ index f9f50edfa60..095cb03d7fb 100644
no_close_handle, /* close_handle */
shared_map_destroy /* destroy */
};
@@ -167,6 +169,7 @@ static const struct object_ops mapping_ops =
@@ -166,6 +168,7 @@ static const struct object_ops mapping_ops =
directory_link_name, /* link_name */
default_unlink_name, /* unlink_name */
no_open_file, /* open_file */
@ -395,7 +395,7 @@ index f9f50edfa60..095cb03d7fb 100644
mapping_destroy /* destroy */
};
diff --git a/server/mutex.c b/server/mutex.c
index d1887e4bc45..a2a0a24bdc3 100644
index d1887e4..a2a0a24 100644
--- a/server/mutex.c
+++ b/server/mutex.c
@@ -71,6 +71,7 @@ static const struct object_ops mutex_ops =
@ -407,10 +407,10 @@ index d1887e4bc45..a2a0a24bdc3 100644
mutex_destroy /* destroy */
};
diff --git a/server/named_pipe.c b/server/named_pipe.c
index 6f5b3b0bbd5..d7f8a583c92 100644
index ba6f507..215c838 100644
--- a/server/named_pipe.c
+++ b/server/named_pipe.c
@@ -136,6 +136,7 @@ static const struct object_ops named_pipe_ops =
@@ -128,6 +128,7 @@ static const struct object_ops named_pipe_ops =
named_pipe_link_name, /* link_name */
default_unlink_name, /* unlink_name */
named_pipe_open_file, /* open_file */
@ -418,7 +418,7 @@ index 6f5b3b0bbd5..d7f8a583c92 100644
no_close_handle, /* close_handle */
named_pipe_destroy /* destroy */
};
@@ -173,6 +174,7 @@ static const struct object_ops pipe_server_ops =
@@ -169,6 +170,7 @@ static const struct object_ops pipe_server_ops =
no_link_name, /* link_name */
NULL, /* unlink_name */
no_open_file, /* open_file */
@ -426,15 +426,15 @@ index 6f5b3b0bbd5..d7f8a583c92 100644
fd_close_handle, /* close_handle */
pipe_server_destroy /* destroy */
};
@@ -216,6 +218,7 @@ static const struct object_ops pipe_client_ops =
@@ -210,6 +212,7 @@ static const struct object_ops pipe_client_ops =
no_link_name, /* link_name */
NULL, /* unlink_name */
no_open_file, /* open_file */
+ no_alloc_handle, /* alloc_handle */
fd_close_handle, /* close_handle */
pipe_client_destroy /* destroy */
pipe_end_destroy /* destroy */
};
@@ -263,6 +266,7 @@ static const struct object_ops named_pipe_device_ops =
@@ -258,6 +261,7 @@ static const struct object_ops named_pipe_device_ops =
directory_link_name, /* link_name */
default_unlink_name, /* unlink_name */
named_pipe_device_open_file, /* open_file */
@ -443,7 +443,7 @@ index 6f5b3b0bbd5..d7f8a583c92 100644
named_pipe_device_destroy /* destroy */
};
diff --git a/server/object.c b/server/object.c
index 4455718aac3..14cd38e6f7e 100644
index 4455718..14cd38e 100644
--- a/server/object.c
+++ b/server/object.c
@@ -692,6 +692,10 @@ struct object *no_open_file( struct object *obj, unsigned int access, unsigned i
@ -458,7 +458,7 @@ index 4455718aac3..14cd38e6f7e 100644
{
return 1; /* ok to close */
diff --git a/server/object.h b/server/object.h
index b5c50e1cee8..72ad8528c5a 100644
index b5c50e1..72ad852 100644
--- a/server/object.h
+++ b/server/object.h
@@ -89,8 +89,10 @@ struct object_ops
@ -482,7 +482,7 @@ index b5c50e1cee8..72ad8528c5a 100644
extern void no_destroy( struct object *obj );
#ifdef DEBUG_OBJECTS
diff --git a/server/process.c b/server/process.c
index f8739d00b64..c269b50c313 100644
index f8739d0..c269b50 100644
--- a/server/process.c
+++ b/server/process.c
@@ -84,6 +84,7 @@ static const struct object_ops process_ops =
@ -510,7 +510,7 @@ index f8739d00b64..c269b50c313 100644
job_destroy /* destroy */
};
diff --git a/server/queue.c b/server/queue.c
index c479b388bd6..382f14f12d1 100644
index c479b38..382f14f 100644
--- a/server/queue.c
+++ b/server/queue.c
@@ -181,6 +181,7 @@ static const struct object_ops msg_queue_ops =
@ -530,7 +530,7 @@ index c479b388bd6..382f14f12d1 100644
thread_input_destroy /* destroy */
};
diff --git a/server/registry.c b/server/registry.c
index 734a1115b21..6294aa36f03 100644
index 8ad97d4..50b6a0b 100644
--- a/server/registry.c
+++ b/server/registry.c
@@ -170,6 +170,7 @@ static const struct object_ops key_ops =
@ -542,7 +542,7 @@ index 734a1115b21..6294aa36f03 100644
key_destroy /* destroy */
};
diff --git a/server/request.c b/server/request.c
index 6120bc550ff..83e608917f8 100644
index 6120bc5..83e6089 100644
--- a/server/request.c
+++ b/server/request.c
@@ -107,6 +107,7 @@ static const struct object_ops master_socket_ops =
@ -554,7 +554,7 @@ index 6120bc550ff..83e608917f8 100644
master_socket_destroy /* destroy */
};
diff --git a/server/semaphore.c b/server/semaphore.c
index 08ff1536cee..15e73925131 100644
index 08ff153..15e7392 100644
--- a/server/semaphore.c
+++ b/server/semaphore.c
@@ -68,6 +68,7 @@ static const struct object_ops semaphore_ops =
@ -566,7 +566,7 @@ index 08ff1536cee..15e73925131 100644
no_destroy /* destroy */
};
diff --git a/server/serial.c b/server/serial.c
index f7aaebbaf69..94b29c4eef2 100644
index bb976a1..089f47c 100644
--- a/server/serial.c
+++ b/server/serial.c
@@ -102,6 +102,7 @@ static const struct object_ops serial_ops =
@ -578,7 +578,7 @@ index f7aaebbaf69..94b29c4eef2 100644
serial_destroy /* destroy */
};
diff --git a/server/signal.c b/server/signal.c
index 74416fab7be..4b2b8c4a15e 100644
index 74416fa..4b2b8c4 100644
--- a/server/signal.c
+++ b/server/signal.c
@@ -77,6 +77,7 @@ static const struct object_ops handler_ops =
@ -590,7 +590,7 @@ index 74416fab7be..4b2b8c4a15e 100644
handler_destroy /* destroy */
};
diff --git a/server/snapshot.c b/server/snapshot.c
index e35588a136c..6e788abde1c 100644
index e35588a..6e788ab 100644
--- a/server/snapshot.c
+++ b/server/snapshot.c
@@ -71,6 +71,7 @@ static const struct object_ops snapshot_ops =
@ -602,7 +602,7 @@ index e35588a136c..6e788abde1c 100644
snapshot_destroy /* destroy */
};
diff --git a/server/sock.c b/server/sock.c
index 1e126182190..0707515be00 100644
index 84f54f6..43456f0 100644
--- a/server/sock.c
+++ b/server/sock.c
@@ -155,6 +155,7 @@ static const struct object_ops sock_ops =
@ -613,7 +613,7 @@ index 1e126182190..0707515be00 100644
fd_close_handle, /* close_handle */
sock_destroy /* destroy */
};
@@ -979,6 +980,7 @@ static const struct object_ops ifchange_ops =
@@ -980,6 +981,7 @@ static const struct object_ops ifchange_ops =
no_link_name, /* link_name */
NULL, /* unlink_name */
no_open_file, /* open_file */
@ -622,7 +622,7 @@ index 1e126182190..0707515be00 100644
ifchange_destroy /* destroy */
};
diff --git a/server/symlink.c b/server/symlink.c
index 9199bc559d7..ecc0e4300c4 100644
index 9199bc5..ecc0e43 100644
--- a/server/symlink.c
+++ b/server/symlink.c
@@ -70,6 +70,7 @@ static const struct object_ops symlink_ops =
@ -634,7 +634,7 @@ index 9199bc559d7..ecc0e4300c4 100644
symlink_destroy /* destroy */
};
diff --git a/server/thread.c b/server/thread.c
index 2c864a607d0..a641509d601 100644
index 2cf5054..30ef3d2 100644
--- a/server/thread.c
+++ b/server/thread.c
@@ -120,6 +120,7 @@ static const struct object_ops thread_apc_ops =
@ -654,7 +654,7 @@ index 2c864a607d0..a641509d601 100644
destroy_thread /* destroy */
};
diff --git a/server/timer.c b/server/timer.c
index c8b4fa8194c..23c613b3cbd 100644
index 3a786fb..95df28f 100644
--- a/server/timer.c
+++ b/server/timer.c
@@ -75,6 +75,7 @@ static const struct object_ops timer_ops =
@ -666,10 +666,10 @@ index c8b4fa8194c..23c613b3cbd 100644
timer_destroy /* destroy */
};
diff --git a/server/token.c b/server/token.c
index 532d7b74059..63e9833fc88 100644
index 0810a61..e51dccc 100644
--- a/server/token.c
+++ b/server/token.c
@@ -163,6 +163,7 @@ static const struct object_ops token_ops =
@@ -155,6 +155,7 @@ static const struct object_ops token_ops =
no_link_name, /* link_name */
NULL, /* unlink_name */
no_open_file, /* open_file */
@ -678,7 +678,7 @@ index 532d7b74059..63e9833fc88 100644
token_destroy /* destroy */
};
diff --git a/server/winstation.c b/server/winstation.c
index a0be0586523..5f96be8e13f 100644
index a0be058..5f96be8 100644
--- a/server/winstation.c
+++ b/server/winstation.c
@@ -75,6 +75,7 @@ static const struct object_ops winstation_ops =
@ -698,5 +698,5 @@ index a0be0586523..5f96be8e13f 100644
desktop_destroy /* destroy */
};
--
2.14.1
2.7.4

View File

@ -1,4 +1,4 @@
From f32342b9bb7bae0e42b79e61f29ab25d9f6b2873 Mon Sep 17 00:00:00 2001
From 9fb320afdf57221eb32d51a03971ad3d13cf773e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Thu, 11 Feb 2016 03:17:09 +0100
Subject: setupapi: Create registry keys for display devices and display
@ -10,12 +10,12 @@ Subject: setupapi: Create registry keys for display devices and display
2 files changed, 101 insertions(+), 12 deletions(-)
diff --git a/dlls/setupapi/devinst.c b/dlls/setupapi/devinst.c
index 9f77669..74a8e2b 100644
index 4d53bd7..6415298 100644
--- a/dlls/setupapi/devinst.c
+++ b/dlls/setupapi/devinst.c
@@ -92,6 +92,15 @@ static const WCHAR LowerFilters[] = {'L','o','w','e','r','F','i','l','t','e','r'
static const WCHAR Phantom[] = {'P','h','a','n','t','o','m',0};
static const WCHAR SymbolicLink[] = {'S','y','m','b','o','l','i','c','L','i','n','k',0};
@@ -94,6 +94,15 @@ static const WCHAR SymbolicLink[] = {'S','y','m','b','o','l','i','c','L','i','n'
static const WCHAR Control[] = {'C','o','n','t','r','o','l',0};
static const WCHAR Linked[] = {'L','i','n','k','e','d',0};
+/* GUIDs */
+static const WCHAR displayGUIDW[] = {'{','4','d','3','6','e','9','6','8','-','e','3','2','5','-',
@ -29,7 +29,7 @@ index 9f77669..74a8e2b 100644
/* is used to identify if a DeviceInfoSet pointer is
valid or not */
#define SETUP_DEVICE_INFO_SET_MAGIC 0xd00ff056
@@ -127,6 +136,90 @@ struct device_iface
@@ -129,6 +138,90 @@ struct device_iface
struct list entry;
};
@ -120,7 +120,7 @@ index 9f77669..74a8e2b 100644
static inline void copy_device_data(SP_DEVINFO_DATA *data, const struct device *device)
{
data->ClassGuid = device->class;
@@ -393,8 +486,7 @@ static HKEY SETUPDI_CreateDevKey(struct device *device)
@@ -418,8 +511,7 @@ static HKEY SETUPDI_CreateDevKey(struct device *device)
HKEY enumKey, key = INVALID_HANDLE_VALUE;
LONG l;
@ -130,7 +130,7 @@ index 9f77669..74a8e2b 100644
if (!l)
{
RegCreateKeyExW(enumKey, device->instanceId, 0, NULL, 0,
@@ -486,8 +578,7 @@ static void SETUPDI_RemoveDevice(struct device *device)
@@ -511,8 +603,7 @@ static void SETUPDI_RemoveDevice(struct device *device)
HKEY enumKey;
LONG l;
@ -140,7 +140,7 @@ index 9f77669..74a8e2b 100644
if (!l)
{
RegDeleteTreeW(enumKey, device->instanceId);
@@ -2012,8 +2103,7 @@ static void SETUPDI_EnumerateMatchingInterfaces(HDEVINFO DeviceInfoSet,
@@ -2042,8 +2133,7 @@ static void SETUPDI_EnumerateMatchingInterfaces(HDEVINFO DeviceInfoSet,
TRACE("%s\n", debugstr_w(enumstr));
@ -150,7 +150,7 @@ index 9f77669..74a8e2b 100644
for (i = 0; !l; i++)
{
len = sizeof(subKeyName) / sizeof(subKeyName[0]);
@@ -2239,8 +2329,7 @@ static void SETUPDI_EnumerateDevices(HDEVINFO DeviceInfoSet, const GUID *class,
@@ -2269,8 +2359,7 @@ static void SETUPDI_EnumerateDevices(HDEVINFO DeviceInfoSet, const GUID *class,
TRACE("%p, %s, %s, %08x\n", DeviceInfoSet, debugstr_guid(class),
debugstr_w(enumstr), flags);
@ -160,7 +160,7 @@ index 9f77669..74a8e2b 100644
if (enumKey != INVALID_HANDLE_VALUE)
{
if (enumstr)
@@ -3580,8 +3669,7 @@ static HKEY SETUPDI_OpenDevKey(struct device *device, REGSAM samDesired)
@@ -3609,8 +3698,7 @@ static HKEY SETUPDI_OpenDevKey(struct device *device, REGSAM samDesired)
HKEY enumKey, key = INVALID_HANDLE_VALUE;
LONG l;
@ -170,7 +170,7 @@ index 9f77669..74a8e2b 100644
if (!l)
{
RegOpenKeyExW(enumKey, device->instanceId, 0, samDesired, &key);
@@ -3697,8 +3785,7 @@ static BOOL SETUPDI_DeleteDevKey(struct device *device)
@@ -3726,8 +3814,7 @@ static BOOL SETUPDI_DeleteDevKey(struct device *device)
BOOL ret = FALSE;
LONG l;

View File

@ -1,13 +1,13 @@
From a26b9ae70df4b2295567e3d8899b7c995f71e6dd Mon Sep 17 00:00:00 2001
From 676f5e3e1b1f88116b542d4a458ec9a72e626c8d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Sun, 24 May 2015 00:39:14 +0200
Subject: shell32: Add placeholder icons to match icon offset with XP.
---
dlls/shell32/placeholder.ico | Bin 0 -> 1726 bytes
dlls/shell32/shell32.rc | 170 ++++++++++++++++++++++++++++++++++++++++
dlls/shell32/shresdef.h | 179 +++++++++++++++++++++++++++++++++++++++++++
3 files changed, 349 insertions(+)
dlls/shell32/shell32.rc | 168 ++++++++++++++++++++++++++++++++++++++++
dlls/shell32/shresdef.h | 177 +++++++++++++++++++++++++++++++++++++++++++
3 files changed, 345 insertions(+)
create mode 100644 dlls/shell32/placeholder.ico
diff --git a/dlls/shell32/placeholder.ico b/dlls/shell32/placeholder.ico
@ -34,16 +34,14 @@ literal 0
HcmV?d00001
diff --git a/dlls/shell32/shell32.rc b/dlls/shell32/shell32.rc
index 847d2ce..2274997 100644
index 20261de..660ce23 100644
--- a/dlls/shell32/shell32.rc
+++ b/dlls/shell32/shell32.rc
@@ -421,6 +421,176 @@ IDI_SHELL_MY_NETWORK_PLACES ICON mydocs.ico
@@ -503,6 +503,174 @@ IDI_SHELL_MY_NETWORK_PLACES ICON mydocs.ico
/* @makedep: mydocs.ico */
IDI_SHELL_FAVORITES ICON mydocs.ico
+/* placeholder icons to correct icon index */
+IDI_SHELL_PLACEHOLDER2 ICON placeholder.ico
+IDI_SHELL_PLACEHOLDER3 ICON placeholder.ico
+IDI_SHELL_PLACEHOLDER21 ICON placeholder.ico
+IDI_SHELL_PLACEHOLDER22 ICON placeholder.ico
+IDI_SHELL_PLACEHOLDER25 ICON placeholder.ico
@ -215,19 +213,10 @@ index 847d2ce..2274997 100644
IDB_TB_LARGE_LIGHT BITMAP idb_tb_large.bmp
diff --git a/dlls/shell32/shresdef.h b/dlls/shell32/shresdef.h
index 183a75e..ddae063 100644
index 1a054ff..e88ed41 100644
--- a/dlls/shell32/shresdef.h
+++ b/dlls/shell32/shresdef.h
@@ -166,6 +166,8 @@
#define IDD_TREEVIEW 0x3741
#define IDI_SHELL_DOCUMENT 1
+#define IDI_SHELL_PLACEHOLDER2 2
+#define IDI_SHELL_PLACEHOLDER3 3
#define IDI_SHELL_FOLDER 4
#define IDI_SHELL_FOLDER_OPEN 5
#define IDI_SHELL_5_12_FLOPPY 6
@@ -183,25 +185,202 @@
@@ -189,25 +189,202 @@
#define IDI_SHELL_MY_NETWORK_PLACES 18
#define IDI_SHELL_COMPUTERS_NEAR_ME 19
#define IDI_SHELL_FOLDER_SMALL_XP 20
@ -431,5 +420,5 @@ index 183a75e..ddae063 100644
/*
--
2.4.0
2.7.4

View File

@ -1,4 +1,4 @@
From b078695fc13099df9edf2eaba974f6535808f4a3 Mon Sep 17 00:00:00 2001
From f244bd251e05597fa57e8088c3196e0b17726d5f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Sat, 6 Jun 2015 06:53:34 +0200
Subject: [PATCH] wined3d: Use real values for memory accounting on NVIDIA
@ -8,16 +8,16 @@ FIXME: Reimplement wined3d_device_get_available_texture_mem
without using the context on the main thread.
---
dlls/d3d9/tests/device.c | 11 +++++++----
dlls/wined3d/adapter_gl.c | 10 ++++++++++
dlls/wined3d/device.c | 25 +++++++++++++++++++++++++
dlls/wined3d/directx.c | 10 ++++++++++
dlls/wined3d/wined3d_gl.h | 1 +
4 files changed, 43 insertions(+), 4 deletions(-)
diff --git a/dlls/d3d9/tests/device.c b/dlls/d3d9/tests/device.c
index 0ffc1ae..0c3937e 100644
index 66bf5b0..b9ff69c 100644
--- a/dlls/d3d9/tests/device.c
+++ b/dlls/d3d9/tests/device.c
@@ -9470,10 +9470,13 @@ static void test_vidmem_accounting(void)
@@ -9496,10 +9496,13 @@ static void test_vidmem_accounting(void)
}
vidmem_end = IDirect3DDevice9_GetAvailableTextureMem(device);
@ -35,11 +35,39 @@ index 0ffc1ae..0c3937e 100644
for (i = 0; i < ARRAY_SIZE(textures); i++)
{
diff --git a/dlls/wined3d/adapter_gl.c b/dlls/wined3d/adapter_gl.c
index 686c79a..15593ce 100644
--- a/dlls/wined3d/adapter_gl.c
+++ b/dlls/wined3d/adapter_gl.c
@@ -220,6 +220,7 @@ static const struct wined3d_extension_map gl_extension_map[] =
{"GL_NV_vertex_program2", NV_VERTEX_PROGRAM2 },
{"GL_NV_vertex_program2_option", NV_VERTEX_PROGRAM2_OPTION },
{"GL_NV_vertex_program3", NV_VERTEX_PROGRAM3 },
+ {"GL_NVX_gpu_memory_info", NVX_GPU_MEMORY_INFO },
};
static const struct wined3d_extension_map wgl_extension_map[] =
@@ -1002,6 +1003,15 @@ static const struct wined3d_gpu_description *query_gpu_description(const struct
TRACE("Card reports vendor PCI ID 0x%04x, device PCI ID 0x%04x, 0x%s bytes of video memory.\n",
vendor, device, wine_dbgstr_longlong(*vram_bytes));
}
+ else if (gl_info->supported[NVX_GPU_MEMORY_INFO])
+ {
+ GLint vram_kb;
+ gl_info->gl_ops.gl.p_glGetIntegerv(GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX, &vram_kb);
+
+ *vram_bytes = (UINT64)vram_kb * 1024;
+ TRACE("Got 0x%s as video memory from NVX_GPU_MEMORY_INFO extension.\n",
+ wine_dbgstr_longlong(*vram_bytes));
+ }
if (wined3d_settings.pci_vendor_id != PCI_VENDOR_NONE)
{
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index 17103cc..bce8936 100644
index 5079113..2788320 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -1284,8 +1284,33 @@ void CDECL wined3d_device_set_multithreaded(struct wined3d_device *device)
@@ -1301,8 +1301,33 @@ void CDECL wined3d_device_set_multithreaded(struct wined3d_device *device)
UINT CDECL wined3d_device_get_available_texture_mem(const struct wined3d_device *device)
{
@ -73,39 +101,11 @@ index 17103cc..bce8936 100644
TRACE("Emulating 0x%s bytes. 0x%s used, returning 0x%s left.\n",
wine_dbgstr_longlong(device->adapter->vram_bytes),
wine_dbgstr_longlong(device->adapter->vram_bytes_used),
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index f7f6452..ec5d8d8 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -270,6 +270,7 @@ static const struct wined3d_extension_map gl_extension_map[] =
{"GL_NV_vertex_program2", NV_VERTEX_PROGRAM2 },
{"GL_NV_vertex_program2_option", NV_VERTEX_PROGRAM2_OPTION },
{"GL_NV_vertex_program3", NV_VERTEX_PROGRAM3 },
+ {"GL_NVX_gpu_memory_info", NVX_GPU_MEMORY_INFO },
};
static const struct wined3d_extension_map wgl_extension_map[] =
@@ -1578,6 +1579,15 @@ static const struct gpu_description *query_gpu_description(const struct wined3d_
TRACE("Card reports vendor PCI ID 0x%04x, device PCI ID 0x%04x, 0x%s bytes of video memory.\n",
vendor, device, wine_dbgstr_longlong(*vram_bytes));
}
+ else if (gl_info->supported[NVX_GPU_MEMORY_INFO])
+ {
+ GLint vram_kb;
+ gl_info->gl_ops.gl.p_glGetIntegerv(GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX, &vram_kb);
+
+ *vram_bytes = (UINT64)vram_kb * 1024;
+ TRACE("Got 0x%s as video memory from NVX_GPU_MEMORY_INFO extension.\n",
+ wine_dbgstr_longlong(*vram_bytes));
+ }
if (wined3d_settings.pci_vendor_id != PCI_VENDOR_NONE)
{
diff --git a/dlls/wined3d/wined3d_gl.h b/dlls/wined3d/wined3d_gl.h
index cc6f888..daed891 100644
index 525c298..2fc3348 100644
--- a/dlls/wined3d/wined3d_gl.h
+++ b/dlls/wined3d/wined3d_gl.h
@@ -199,6 +199,7 @@ enum wined3d_gl_extension
@@ -202,6 +202,7 @@ enum wined3d_gl_extension
NV_VERTEX_PROGRAM2,
NV_VERTEX_PROGRAM2_OPTION,
NV_VERTEX_PROGRAM3,

View File

@ -1,12 +1,12 @@
From ad95d230cde0c3fe96259e823ed46be34f801fc2 Mon Sep 17 00:00:00 2001
From 344e9d3e5452200b2599348ed7d8c69191c1aaad Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Fri, 18 Aug 2017 23:51:59 +0200
Subject: [PATCH] wined3d: Implement dual source blending.
---
dlls/d3d11/tests/d3d11.c | 2 +-
dlls/wined3d/adapter_gl.c | 10 ++++++++++
dlls/wined3d/context.c | 11 ++++++++++-
dlls/wined3d/directx.c | 10 ++++++++++
dlls/wined3d/glsl_shader.c | 20 +++++++++++++++++---
dlls/wined3d/shader.c | 2 ++
dlls/wined3d/state.c | 14 ++++++++++++--
@ -14,10 +14,10 @@ Subject: [PATCH] wined3d: Implement dual source blending.
7 files changed, 74 insertions(+), 9 deletions(-)
diff --git a/dlls/d3d11/tests/d3d11.c b/dlls/d3d11/tests/d3d11.c
index e6e3c215c1..6e025d23ab 100644
index b3e946d..67158e5 100644
--- a/dlls/d3d11/tests/d3d11.c
+++ b/dlls/d3d11/tests/d3d11.c
@@ -27869,7 +27869,7 @@ static void test_dual_blending(void)
@@ -28153,7 +28153,7 @@ static void test_dual_blending(void)
ID3D11DeviceContext_ClearRenderTargetView(context, rtv[1], white);
ID3D11DeviceContext_Draw(context, 3, 0);
@ -26,11 +26,39 @@ index e6e3c215c1..6e025d23ab 100644
todo_wine check_texture_color(render_target, 0xff0000ff, 0);
ID3D11BlendState_Release(blend_state);
diff --git a/dlls/wined3d/adapter_gl.c b/dlls/wined3d/adapter_gl.c
index 374c9fc..2ece845 100644
--- a/dlls/wined3d/adapter_gl.c
+++ b/dlls/wined3d/adapter_gl.c
@@ -2890,6 +2890,12 @@ static void wined3d_adapter_init_limits(struct wined3d_gl_info *gl_info)
gl_info->limits.buffers = min(MAX_RENDER_TARGET_VIEWS, gl_max);
TRACE("Max draw buffers: %u.\n", gl_max);
}
+ if (gl_info->supported[ARB_BLEND_FUNC_EXTENDED])
+ {
+ gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_DUAL_SOURCE_DRAW_BUFFERS, &gl_max);
+ gl_info->limits.dual_buffers = gl_max;
+ TRACE("Max dual source draw buffers: %u.\n", gl_max);
+ }
if (gl_info->supported[ARB_MULTITEXTURE])
{
if (gl_info->supported[WINED3D_GL_LEGACY_CONTEXT])
@@ -3695,6 +3701,10 @@ static BOOL wined3d_adapter_init_gl_caps(struct wined3d_adapter *adapter,
for (i = 0; i < gl_info->limits.buffers; ++i)
d3d_info->valid_rt_mask |= (1u << i);
+ d3d_info->valid_dual_rt_mask = 0;
+ for (i = 0; i < gl_info->limits.dual_buffers; ++i)
+ d3d_info->valid_dual_rt_mask |= (1u << i);
+
if (!d3d_info->shader_color_key)
{
/* We do not want to deal with re-creating immutable texture storage
diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c
index 21ad11d958..ec5af4f5a4 100644
index 412ff18..0e86f76 100644
--- a/dlls/wined3d/context.c
+++ b/dlls/wined3d/context.c
@@ -3131,10 +3131,19 @@ static DWORD find_draw_buffers_mask(const struct wined3d_context *context, const
@@ -3129,10 +3129,19 @@ static DWORD find_draw_buffers_mask(const struct wined3d_context *context, const
else if (!context->render_offscreen)
return context_generate_rt_mask_from_resource(rts[0]->resource);
@ -51,39 +79,11 @@ index 21ad11d958..ec5af4f5a4 100644
while (mask)
{
i = wined3d_bit_scan(&mask);
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index 3a958991b1..552a4b9a1c 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -3544,6 +3544,12 @@ static void wined3d_adapter_init_limits(struct wined3d_gl_info *gl_info)
gl_info->limits.buffers = min(MAX_RENDER_TARGET_VIEWS, gl_max);
TRACE("Max draw buffers: %u.\n", gl_max);
}
+ if (gl_info->supported[ARB_BLEND_FUNC_EXTENDED])
+ {
+ gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_DUAL_SOURCE_DRAW_BUFFERS, &gl_max);
+ gl_info->limits.dual_buffers = gl_max;
+ TRACE("Max dual source draw buffers: %u.\n", gl_max);
+ }
if (gl_info->supported[ARB_MULTITEXTURE])
{
if (gl_info->supported[WINED3D_GL_LEGACY_CONTEXT])
@@ -4343,6 +4349,10 @@ static BOOL wined3d_adapter_init_gl_caps(struct wined3d_adapter *adapter,
for (i = 0; i < gl_info->limits.buffers; ++i)
d3d_info->valid_rt_mask |= (1u << i);
+ d3d_info->valid_dual_rt_mask = 0;
+ for (i = 0; i < gl_info->limits.dual_buffers; ++i)
+ d3d_info->valid_dual_rt_mask |= (1u << i);
+
if (!d3d_info->shader_color_key)
{
/* We do not want to deal with re-creating immutable texture storage for color keying emulation. */
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index a4e66ccca7..49fb5f7c59 100644
index 76c455b..84afc94 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -3036,6 +3036,7 @@ static void shader_glsl_get_register_name(const struct wined3d_shader_register *
@@ -2757,6 +2757,7 @@ static void shader_glsl_get_register_name(const struct wined3d_shader_register *
break;
case WINED3DSPR_COLOROUT:
@ -91,7 +91,7 @@ index a4e66ccca7..49fb5f7c59 100644
if (reg->idx[0].offset >= gl_info->limits.buffers)
WARN("Write to render target %u, only %d supported.\n",
reg->idx[0].offset, gl_info->limits.buffers);
@@ -7896,7 +7897,10 @@ static GLuint shader_glsl_generate_pshader(const struct wined3d_context *context
@@ -7646,7 +7647,10 @@ static GLuint shader_glsl_generate_pshader(const struct wined3d_context *context
{
const struct wined3d_shader_signature *output_signature = &shader->output_signature;
@ -103,7 +103,7 @@ index a4e66ccca7..49fb5f7c59 100644
if (output_signature->element_count)
{
for (i = 0; i < output_signature->element_count; ++i)
@@ -7911,7 +7915,12 @@ static GLuint shader_glsl_generate_pshader(const struct wined3d_context *context
@@ -7661,7 +7665,12 @@ static GLuint shader_glsl_generate_pshader(const struct wined3d_context *context
continue;
}
if (shader_glsl_use_explicit_attrib_location(gl_info))
@ -117,7 +117,7 @@ index a4e66ccca7..49fb5f7c59 100644
shader_addline(buffer, "out %s4 color_out%u;\n",
component_type_info[output->component_type].glsl_vector_type, output->semantic_idx);
}
@@ -7924,7 +7933,12 @@ static GLuint shader_glsl_generate_pshader(const struct wined3d_context *context
@@ -7674,7 +7683,12 @@ static GLuint shader_glsl_generate_pshader(const struct wined3d_context *context
{
i = wined3d_bit_scan(&mask);
if (shader_glsl_use_explicit_attrib_location(gl_info))
@ -132,7 +132,7 @@ index a4e66ccca7..49fb5f7c59 100644
}
}
diff --git a/dlls/wined3d/shader.c b/dlls/wined3d/shader.c
index 20d4f0773d..f2e3c23976 100644
index 20d4f07..f2e3c23 100644
--- a/dlls/wined3d/shader.c
+++ b/dlls/wined3d/shader.c
@@ -4101,6 +4101,8 @@ void find_ps_compile_args(const struct wined3d_state *state, const struct wined3
@ -145,7 +145,7 @@ index 20d4f0773d..f2e3c23976 100644
static HRESULT pixel_shader_init(struct wined3d_shader *shader, struct wined3d_device *device,
diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c
index 2dd6ac2a63..a2e95a4a56 100644
index d37e809..1bd3863 100644
--- a/dlls/wined3d/state.c
+++ b/dlls/wined3d/state.c
@@ -533,12 +533,14 @@ static void state_blend(struct wined3d_context *context, const struct wined3d_st
@ -188,7 +188,7 @@ index 2dd6ac2a63..a2e95a4a56 100644
state->render_states[WINED3D_RS_SRCBLEND],
state->render_states[WINED3D_RS_DESTBLEND], rt_format);
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 368b817950..c3a3c16aa0 100644
index af29b44..640cf1e 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -190,6 +190,7 @@ struct wined3d_d3d_info
@ -199,7 +199,7 @@ index 368b817950..c3a3c16aa0 100644
DWORD wined3d_creation_flags;
BOOL shader_double_precision;
enum wined3d_feature_level feature_level;
@@ -1351,7 +1352,8 @@ struct ps_compile_args
@@ -1354,7 +1355,8 @@ struct ps_compile_args
DWORD flatshading : 1;
DWORD alpha_test_func : 3;
DWORD render_offscreen : 1;
@ -209,7 +209,7 @@ index 368b817950..c3a3c16aa0 100644
};
enum fog_src_type
@@ -1913,7 +1915,8 @@ struct wined3d_context
@@ -1916,7 +1918,8 @@ struct wined3d_context
DWORD shader_update_mask : 6; /* WINED3D_SHADER_TYPE_COUNT, 6 */
DWORD clip_distance_mask : 8; /* MAX_CLIP_DISTANCES, 8 */
DWORD num_untracked_materials : 2; /* Max value 2 */
@ -219,7 +219,7 @@ index 368b817950..c3a3c16aa0 100644
DWORD constant_update_mask;
DWORD numbered_array_mask;
@@ -2540,6 +2543,7 @@ struct wined3d_fbo_ops
@@ -2543,6 +2546,7 @@ struct wined3d_fbo_ops
struct wined3d_gl_limits
{
UINT buffers;
@ -227,7 +227,7 @@ index 368b817950..c3a3c16aa0 100644
UINT lights;
UINT textures;
UINT texture_coords;
@@ -2881,6 +2885,22 @@ struct wined3d_state
@@ -2928,6 +2932,22 @@ struct wined3d_state
struct wined3d_rasterizer_state *rasterizer_state;
};
@ -251,5 +251,5 @@ index 368b817950..c3a3c16aa0 100644
{
GLuint tex_1d;
--
2.18.0
2.7.4

View File

@ -1,18 +1,18 @@
From 5b080b413d64e68feeddfa6b843835a508ce2262 Mon Sep 17 00:00:00 2001
From 1014fb02f6b629591691fbb321ad794ecb6cc389 Mon Sep 17 00:00:00 2001
From: Jarkko Korpi <jarkko_korpi@hotmail.com>
Date: Tue, 16 May 2017 15:39:29 +0300
Subject: wined3d: Also check for 'Brian Paul' to detect Mesa gl_vendor.
As already done in wined3d_guess_card_vendor.
---
dlls/wined3d/directx.c | 1 +
dlls/wined3d/adapter_gl.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index 7273d6cec10..6366fb2a16a 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -1783,6 +1783,7 @@ static enum wined3d_gl_vendor wined3d_guess_gl_vendor(const struct wined3d_gl_in
diff --git a/dlls/wined3d/adapter_gl.c b/dlls/wined3d/adapter_gl.c
index dc49c88..701455e 100644
--- a/dlls/wined3d/adapter_gl.c
+++ b/dlls/wined3d/adapter_gl.c
@@ -1190,6 +1190,7 @@ static enum wined3d_gl_vendor wined3d_guess_gl_vendor(const struct wined3d_gl_in
return GL_VENDOR_FGLRX;
if (strstr(gl_vendor_string, "Mesa")
@ -21,5 +21,5 @@ index 7273d6cec10..6366fb2a16a 100644
|| strstr(gl_vendor_string, "Advanced Micro Devices, Inc.")
|| strstr(gl_vendor_string, "DRI R300 Project")
--
2.12.2
2.7.4