diff --git a/patches/d2d1-ID2D1Factory1/0005-d2d1-Stub-ID2D1DeviceContext.patch b/patches/d2d1-ID2D1Factory1/0005-d2d1-Stub-ID2D1DeviceContext.patch deleted file mode 100644 index 2488e9b2..00000000 --- a/patches/d2d1-ID2D1Factory1/0005-d2d1-Stub-ID2D1DeviceContext.patch +++ /dev/null @@ -1,1078 +0,0 @@ -From d74d9f9e5c1502418932e75101979794763706c0 Mon Sep 17 00:00:00 2001 -From: Lucian Poston -Date: Thu, 3 May 2018 02:37:30 -0700 -Subject: d2d1: Stub ID2D1DeviceContext - -This commit contains only stubs in order to keep its size down so the -mailing list doesn't reject it. - -https://bugs.winehq.org/show_bug.cgi?id=44052 - -Signed-off-by: Lucian Poston ---- - dlls/d2d1/Makefile.in | 1 + - dlls/d2d1/device_context.c | 1040 ++++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 1041 insertions(+) - create mode 100644 dlls/d2d1/device_context.c - -diff --git a/dlls/d2d1/Makefile.in b/dlls/d2d1/Makefile.in -index 4bfe3b5..ce3d42d 100644 ---- a/dlls/d2d1/Makefile.in -+++ b/dlls/d2d1/Makefile.in -@@ -9,6 +9,7 @@ C_SRCS = \ - brush.c \ - dc_render_target.c \ - device.c \ -+ device_context.c \ - factory.c \ - geometry.c \ - hwnd_render_target.c \ -diff --git a/dlls/d2d1/device_context.c b/dlls/d2d1/device_context.c -new file mode 100644 -index 0000000..04da4bf ---- /dev/null -+++ b/dlls/d2d1/device_context.c -@@ -0,0 +1,1040 @@ -+/* -+ * Copyright 2018 Lucian Poston -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA -+ */ -+ -+#include "config.h" -+#include "wine/port.h" -+ -+#include "d2d1_private.h" -+ -+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); -+} -+ -+static HRESULT WINAPI d2d_device_context_QueryInterface( -+ ID2D1DeviceContext *iface, -+ REFIID riid, -+ void **ppvObject) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+ return E_NOTIMPL; -+} -+ -+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; -+} -+ -+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; -+} -+ -+static void WINAPI d2d_device_context_GetFactory( -+ ID2D1DeviceContext *iface, -+ ID2D1Factory **factory) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static HRESULT WINAPI d2d_device_context_CreateBitmap( -+ ID2D1DeviceContext *iface, -+ D2D1_SIZE_U size, -+ const void *src_data, -+ UINT32 pitch, -+ const D2D1_BITMAP_PROPERTIES *desc, -+ ID2D1Bitmap **bitmap) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+ return E_NOTIMPL; -+} -+ -+static HRESULT WINAPI d2d_device_context_CreateBitmapFromWicBitmap( -+ ID2D1DeviceContext *iface, -+ IWICBitmapSource *bitmap_source, -+ const D2D1_BITMAP_PROPERTIES *desc, -+ ID2D1Bitmap **bitmap) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+ return E_NOTIMPL; -+} -+ -+static HRESULT WINAPI d2d_device_context_CreateSharedBitmap( -+ ID2D1DeviceContext *iface, -+ REFIID iid, -+ void *data, -+ const D2D1_BITMAP_PROPERTIES *desc, -+ ID2D1Bitmap **bitmap) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+ return E_NOTIMPL; -+} -+ -+static HRESULT WINAPI d2d_device_context_CreateBitmapBrush( -+ ID2D1DeviceContext *iface, -+ ID2D1Bitmap *bitmap, -+ const D2D1_BITMAP_BRUSH_PROPERTIES *bitmap_brush_desc, -+ const D2D1_BRUSH_PROPERTIES *brush_desc, -+ ID2D1BitmapBrush **brush) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+ return E_NOTIMPL; -+} -+ -+static HRESULT WINAPI d2d_device_context_CreateSolidColorBrush( -+ ID2D1DeviceContext *iface, -+ const D2D1_COLOR_F *color, -+ const D2D1_BRUSH_PROPERTIES *desc, -+ ID2D1SolidColorBrush **brush) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+ return E_NOTIMPL; -+} -+ -+static HRESULT WINAPI d2d_device_context_CreateGradientStopCollection( -+ ID2D1DeviceContext *iface, -+ const D2D1_GRADIENT_STOP *stops, -+ UINT32 stop_count, -+ D2D1_GAMMA gamma, -+ D2D1_EXTEND_MODE extend_mode, -+ ID2D1GradientStopCollection **gradient) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+ return E_NOTIMPL; -+} -+ -+static HRESULT WINAPI d2d_device_context_CreateLinearGradientBrush( -+ ID2D1DeviceContext *iface, -+ const D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES *gradient_brush_desc, -+ const D2D1_BRUSH_PROPERTIES *brush_desc, -+ ID2D1GradientStopCollection *gradient, -+ ID2D1LinearGradientBrush **brush) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+ return E_NOTIMPL; -+} -+ -+static HRESULT WINAPI d2d_device_context_CreateRadialGradientBrush( -+ ID2D1DeviceContext *iface, -+ const D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES *gradient_brush_desc, -+ const D2D1_BRUSH_PROPERTIES *brush_desc, -+ ID2D1GradientStopCollection *gradient, -+ ID2D1RadialGradientBrush **brush) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+ return E_NOTIMPL; -+} -+ -+static HRESULT WINAPI d2d_device_context_CreateCompatibleRenderTarget( -+ ID2D1DeviceContext *iface, -+ const D2D1_SIZE_F *size, -+ const D2D1_SIZE_U *pixel_size, -+ const D2D1_PIXEL_FORMAT *format, -+ D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS options, -+ ID2D1BitmapRenderTarget **render_target) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+ return E_NOTIMPL; -+} -+ -+static HRESULT WINAPI d2d_device_context_CreateLayer( -+ ID2D1DeviceContext *iface, -+ const D2D1_SIZE_F *size, -+ ID2D1Layer **layer) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+ return E_NOTIMPL; -+} -+ -+static HRESULT WINAPI d2d_device_context_CreateMesh( -+ ID2D1DeviceContext *iface, -+ ID2D1Mesh **mesh) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+ return E_NOTIMPL; -+} -+ -+static void WINAPI d2d_device_context_DrawLine( -+ ID2D1DeviceContext *iface, -+ D2D1_POINT_2F p0, -+ D2D1_POINT_2F p1, -+ ID2D1Brush *brush, -+ float stroke_width, -+ ID2D1StrokeStyle *stroke_style) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static void WINAPI d2d_device_context_DrawRectangle( -+ ID2D1DeviceContext *iface, -+ const D2D1_RECT_F *rect, -+ ID2D1Brush *brush, -+ float stroke_width, -+ ID2D1StrokeStyle *stroke_style) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static void WINAPI d2d_device_context_FillRectangle( -+ ID2D1DeviceContext *iface, -+ const D2D1_RECT_F *rect, -+ ID2D1Brush *brush) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static void WINAPI d2d_device_context_DrawRoundedRectangle( -+ ID2D1DeviceContext *iface, -+ const D2D1_ROUNDED_RECT *rect, -+ ID2D1Brush *brush, -+ float stroke_width, -+ ID2D1StrokeStyle *stroke_style) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static void WINAPI d2d_device_context_FillRoundedRectangle( -+ ID2D1DeviceContext *iface, -+ const D2D1_ROUNDED_RECT *rect, -+ ID2D1Brush *brush) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static void WINAPI d2d_device_context_DrawEllipse( -+ ID2D1DeviceContext *iface, -+ const D2D1_ELLIPSE *ellipse, -+ ID2D1Brush *brush, -+ float stroke_width, -+ ID2D1StrokeStyle *stroke_style) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static void WINAPI d2d_device_context_FillEllipse( -+ ID2D1DeviceContext *iface, -+ const D2D1_ELLIPSE *ellipse, -+ ID2D1Brush *brush) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static void WINAPI d2d_device_context_DrawGeometry( -+ ID2D1DeviceContext *iface, -+ ID2D1Geometry *geometry, -+ ID2D1Brush *brush, -+ float stroke_width, -+ ID2D1StrokeStyle *stroke_style) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static void WINAPI d2d_device_context_FillGeometry( -+ ID2D1DeviceContext *iface, -+ ID2D1Geometry *geometry, -+ ID2D1Brush *brush, -+ ID2D1Brush *opacity_brush) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static void WINAPI d2d_device_context_FillMesh( -+ ID2D1DeviceContext *iface, -+ ID2D1Mesh *mesh, -+ ID2D1Brush *brush) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static void WINAPI d2d_device_context_FillOpacityMask( -+ ID2D1DeviceContext *iface, -+ ID2D1Bitmap *mask, -+ ID2D1Brush *brush, -+ D2D1_OPACITY_MASK_CONTENT content, -+ const D2D1_RECT_F *dst_rect, -+ const D2D1_RECT_F *src_rect) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static void WINAPI d2d_device_context_DrawBitmap( -+ ID2D1DeviceContext *iface, -+ ID2D1Bitmap *bitmap, -+ const D2D1_RECT_F *dst_rect, -+ float opacity, -+ D2D1_BITMAP_INTERPOLATION_MODE interpolation_mode, -+ const D2D1_RECT_F *src_rect) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static void WINAPI d2d_device_context_DrawText( -+ ID2D1DeviceContext *iface, -+ const WCHAR *string, -+ UINT32 string_len, -+ IDWriteTextFormat *text_format, -+ const D2D1_RECT_F *layout_rect, -+ ID2D1Brush *brush, -+ D2D1_DRAW_TEXT_OPTIONS options, -+ DWRITE_MEASURING_MODE measuring_mode) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static void WINAPI d2d_device_context_DrawTextLayout( -+ ID2D1DeviceContext *iface, -+ D2D1_POINT_2F origin, -+ IDWriteTextLayout *layout, -+ ID2D1Brush *brush, -+ D2D1_DRAW_TEXT_OPTIONS options) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static void WINAPI d2d_device_context_DrawGlyphRun( -+ ID2D1DeviceContext *iface, -+ D2D1_POINT_2F baseline_origin, -+ const DWRITE_GLYPH_RUN *glyph_run, -+ ID2D1Brush *brush, -+ DWRITE_MEASURING_MODE measuring_mode) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static void WINAPI d2d_device_context_SetTransform( -+ ID2D1DeviceContext *iface, -+ const D2D1_MATRIX_3X2_F *transform) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static void WINAPI d2d_device_context_GetTransform( -+ ID2D1DeviceContext *iface, -+ D2D1_MATRIX_3X2_F *transform) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static void WINAPI d2d_device_context_SetAntialiasMode( -+ ID2D1DeviceContext *iface, -+ D2D1_ANTIALIAS_MODE antialias_mode) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+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; -+} -+ -+static void WINAPI d2d_device_context_SetTextAntialiasMode( -+ ID2D1DeviceContext *iface, -+ D2D1_TEXT_ANTIALIAS_MODE antialias_mode) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+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; -+} -+ -+static void WINAPI d2d_device_context_SetTextRenderingParams( -+ ID2D1DeviceContext *iface, -+ IDWriteRenderingParams *text_rendering_params) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static void WINAPI d2d_device_context_GetTextRenderingParams( -+ ID2D1DeviceContext *iface, -+ IDWriteRenderingParams **text_rendering_params) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static void WINAPI d2d_device_context_SetTags( -+ ID2D1DeviceContext *iface, -+ D2D1_TAG tag1, -+ D2D1_TAG tag2) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static void WINAPI d2d_device_context_GetTags( -+ ID2D1DeviceContext *iface, -+ D2D1_TAG *tag1, -+ D2D1_TAG *tag2) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static void WINAPI d2d_device_context_PushLayer( -+ ID2D1DeviceContext *iface, -+ const D2D1_LAYER_PARAMETERS *layer_parameters, -+ ID2D1Layer *layer) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static void WINAPI d2d_device_context_PopLayer( -+ ID2D1DeviceContext *iface) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static HRESULT WINAPI d2d_device_context_Flush( -+ ID2D1DeviceContext *iface, -+ D2D1_TAG *tag1, -+ D2D1_TAG *tag2) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+ return E_NOTIMPL; -+} -+ -+static void WINAPI d2d_device_context_SaveDrawingState( -+ ID2D1DeviceContext *iface, -+ ID2D1DrawingStateBlock *state_block) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static void WINAPI d2d_device_context_RestoreDrawingState( -+ ID2D1DeviceContext *iface, -+ ID2D1DrawingStateBlock *state_block) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static void WINAPI d2d_device_context_PushAxisAlignedClip( -+ ID2D1DeviceContext *iface, -+ const D2D1_RECT_F *clip_rect, -+ D2D1_ANTIALIAS_MODE antialias_mode) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static void WINAPI d2d_device_context_PopAxisAlignedClip( -+ ID2D1DeviceContext *iface) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static void WINAPI d2d_device_context_Clear( -+ ID2D1DeviceContext *iface, -+ const D2D1_COLOR_F *color) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static void WINAPI d2d_device_context_BeginDraw( -+ ID2D1DeviceContext *iface) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static HRESULT WINAPI d2d_device_context_EndDraw( -+ ID2D1DeviceContext *iface, -+ D2D1_TAG *tag1, -+ D2D1_TAG *tag2) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+ return E_NOTIMPL; -+} -+ -+static D2D1_PIXEL_FORMAT * WINAPI d2d_device_context_GetPixelFormat( -+ ID2D1DeviceContext *iface, -+ D2D1_PIXEL_FORMAT *__ret) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+ return NULL; -+} -+ -+static void WINAPI d2d_device_context_SetDpi( -+ ID2D1DeviceContext *iface, -+ float dpi_x, -+ float dpi_y) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static void WINAPI d2d_device_context_GetDpi( -+ ID2D1DeviceContext *iface, -+ float *dpi_x, -+ float *dpi_y) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static D2D1_SIZE_F * WINAPI d2d_device_context_GetSize( -+ ID2D1DeviceContext *iface, -+ D2D1_SIZE_F *__ret) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+ return NULL; -+} -+ -+static D2D1_SIZE_U * WINAPI d2d_device_context_GetPixelSize( -+ ID2D1DeviceContext *iface, -+ D2D1_SIZE_U *__ret) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+ return NULL; -+} -+ -+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; -+} -+ -+static BOOL WINAPI d2d_device_context_IsSupported( -+ ID2D1DeviceContext *iface, -+ const D2D1_RENDER_TARGET_PROPERTIES *desc) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+ return FALSE; -+} -+ -+static HRESULT WINAPI d2d_device_context_ID2D1DeviceContext_CreateBitmap( -+ ID2D1DeviceContext *iface, -+ D2D1_SIZE_U size, -+ const void *srcData, -+ UINT32 pitch, -+ const D2D1_BITMAP_PROPERTIES1 *bitmapProperties, -+ ID2D1Bitmap1 **bitmap) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+ return E_NOTIMPL; -+} -+ -+static HRESULT WINAPI d2d_device_context_ID2D1DeviceContext_CreateBitmapFromWicBitmap( -+ ID2D1DeviceContext *iface, -+ IWICBitmapSource *wicBitmapSource, -+ const D2D1_BITMAP_PROPERTIES1 *bitmapProperties, -+ ID2D1Bitmap1 **bitmap) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+ return E_NOTIMPL; -+} -+ -+static HRESULT WINAPI d2d_device_context_CreateColorContext( -+ ID2D1DeviceContext *iface, -+ D2D1_COLOR_SPACE space, -+ const BYTE *Profile, -+ UINT32 profileSize, -+ ID2D1ColorContext **colorContext) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+ return E_NOTIMPL; -+} -+ -+static HRESULT WINAPI d2d_device_context_CreateColorContextFromFilename( -+ ID2D1DeviceContext *iface, -+ PCWSTR Filename, -+ ID2D1ColorContext **colorContext) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+ return E_NOTIMPL; -+} -+ -+static HRESULT WINAPI d2d_device_context_CreateColorContextFromWicColorContext( -+ ID2D1DeviceContext *iface, -+ IWICColorContext *wicColorContext, -+ ID2D1ColorContext **colorContext) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+ return E_NOTIMPL; -+} -+ -+static HRESULT WINAPI d2d_device_context_CreateBitmapFromDxgiSurface( -+ ID2D1DeviceContext *iface, -+ IDXGISurface *surface, -+ const D2D1_BITMAP_PROPERTIES1 *bitmapProperties, -+ ID2D1Bitmap1 **bitmap) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+ return E_NOTIMPL; -+} -+ -+static HRESULT WINAPI d2d_device_context_CreateEffect( -+ ID2D1DeviceContext *iface, -+ REFCLSID effectId, -+ ID2D1Effect **effect) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+ return E_NOTIMPL; -+} -+ -+static HRESULT WINAPI d2d_device_context_ID2D1DeviceContext_CreateGradientStopCollection( -+ ID2D1DeviceContext *iface, -+ const D2D1_GRADIENT_STOP *gradientStops, -+ UINT gradientStopsCount, -+ D2D1_COLOR_SPACE preInterpolationSpace, -+ D2D1_COLOR_SPACE postInterpolationSpace, -+ D2D1_BUFFER_PRECISION bufferPrecision, -+ D2D1_EXTEND_MODE extendMode, -+ D2D1_COLOR_INTERPOLATION_MODE colorInterpolationMode, -+ ID2D1GradientStopCollection1 **gradientStopCollection) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+ return E_NOTIMPL; -+} -+ -+static HRESULT WINAPI d2d_device_context_CreateImageBrush( -+ ID2D1DeviceContext *iface, -+ ID2D1Image *image, -+ const D2D1_IMAGE_BRUSH_PROPERTIES *imageBrushProperties, -+ const D2D1_BRUSH_PROPERTIES *brushProperties, -+ ID2D1ImageBrush **imageBrush) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+ return E_NOTIMPL; -+} -+ -+static HRESULT WINAPI d2d_device_context_ID2D1DeviceContext_CreateBitmapBrush( -+ ID2D1DeviceContext *iface, -+ ID2D1Bitmap *bitmap, -+ const D2D1_BITMAP_BRUSH_PROPERTIES1 *bitmapBrushProperties, -+ const D2D1_BRUSH_PROPERTIES *brushProperties, -+ ID2D1BitmapBrush1 **bitmapBrush) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+ return E_NOTIMPL; -+} -+ -+static HRESULT WINAPI d2d_device_context_CreateCommandList( -+ ID2D1DeviceContext *iface, -+ ID2D1CommandList **commandList) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+ return E_NOTIMPL; -+} -+ -+static BOOL WINAPI d2d_device_context_IsDxgiFormatSupported( -+ ID2D1DeviceContext *iface, -+ DXGI_FORMAT format) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+ return FALSE; -+} -+ -+static BOOL WINAPI d2d_device_context_IsBufferPrecisionSupported( -+ ID2D1DeviceContext *iface, -+ D2D1_BUFFER_PRECISION bufferPrecision) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+ return FALSE; -+} -+ -+static void WINAPI d2d_device_context_GetImageLocalBounds( -+ ID2D1DeviceContext *iface, -+ ID2D1Image *image, -+ D2D1_RECT_F *localBounds) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static HRESULT WINAPI d2d_device_context_GetImageWorldBounds( -+ ID2D1DeviceContext *iface, -+ ID2D1Image *image, -+ D2D1_RECT_F *worldBounds) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+ return E_NOTIMPL; -+} -+ -+static HRESULT WINAPI d2d_device_context_GetGlyphRunWorldBounds( -+ ID2D1DeviceContext *iface, -+ D2D1_POINT_2F baselineOrigin, -+ const DWRITE_GLYPH_RUN *glyphRun, -+ DWRITE_MEASURING_MODE measuringMode, -+ D2D1_RECT_F *bounds) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+ return E_NOTIMPL; -+} -+ -+static void WINAPI d2d_device_context_GetDevice( -+ ID2D1DeviceContext *iface, -+ ID2D1Device **device) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static void WINAPI d2d_device_context_SetTarget( -+ ID2D1DeviceContext *iface, -+ ID2D1Image *target) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static void WINAPI d2d_device_context_GetTarget( -+ ID2D1DeviceContext *iface, -+ ID2D1Image **target) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static void WINAPI d2d_device_context_SetRenderingControls( -+ ID2D1DeviceContext *iface, -+ const D2D1_RENDERING_CONTROLS *renderingControls) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static void WINAPI d2d_device_context_GetRenderingControls( -+ ID2D1DeviceContext *iface, -+ D2D1_RENDERING_CONTROLS *renderingControls) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static void WINAPI d2d_device_context_SetPrimitiveBlend( -+ ID2D1DeviceContext *iface, -+ D2D1_PRIMITIVE_BLEND primitiveBlend) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static D2D1_PRIMITIVE_BLEND WINAPI d2d_device_context_GetPrimitiveBlend( -+ ID2D1DeviceContext *iface) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+ return D2D1_PRIMITIVE_BLEND_SOURCE_OVER; -+} -+ -+static void WINAPI d2d_device_context_SetUnitMode( -+ ID2D1DeviceContext *iface, -+ D2D1_UNIT_MODE unitMode) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static D2D1_UNIT_MODE WINAPI d2d_device_context_GetUnitMode( -+ ID2D1DeviceContext *iface) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+ return D2D1_UNIT_MODE_DIPS; -+} -+ -+static void WINAPI d2d_device_context_ID2D1DeviceContext_DrawGlyphRun( -+ ID2D1DeviceContext *iface, -+ D2D1_POINT_2F baselineOrigin, -+ const DWRITE_GLYPH_RUN *glyphRun, -+ const DWRITE_GLYPH_RUN_DESCRIPTION *glyphRunDescription, -+ ID2D1Brush *foregroundBrush, -+ DWRITE_MEASURING_MODE measuringMode) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static void WINAPI d2d_device_context_DrawImage( -+ ID2D1DeviceContext *iface, -+ ID2D1Image *image, -+ const D2D1_POINT_2F *targetOffset, -+ const D2D1_RECT_F *imageRectangle, -+ D2D1_INTERPOLATION_MODE interpolationMode, -+ D2D1_COMPOSITE_MODE compositeMode) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static void WINAPI d2d_device_context_DrawGdiMetafile( -+ ID2D1DeviceContext *iface, -+ ID2D1GdiMetafile *gdiMetafile, -+ const D2D1_POINT_2F *targetOffset) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static void WINAPI d2d_device_context_ID2D1DeviceContext_DrawBitmap( -+ ID2D1DeviceContext *iface, -+ ID2D1Bitmap *bitmap, -+ const D2D1_RECT_F *destinationRectangle, -+ float opacity, -+ D2D1_INTERPOLATION_MODE interpolationMode, -+ const D2D1_RECT_F *sourceRectangle, -+ const D2D1_MATRIX_4X4_F *perspectiveTransform) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static void WINAPI d2d_device_context_ID2D1DeviceContext_PushLayer( -+ ID2D1DeviceContext *iface, -+ const D2D1_LAYER_PARAMETERS1 *layerParameters, -+ ID2D1Layer *layer) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static HRESULT WINAPI d2d_device_context_InvalidateEffectInputRectangle( -+ ID2D1DeviceContext *iface, -+ ID2D1Effect *effect, -+ UINT32 input, -+ const D2D1_RECT_F *inputRectangle) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+ return E_NOTIMPL; -+} -+ -+static HRESULT WINAPI d2d_device_context_GetEffectInvalidRectangleCount( -+ ID2D1DeviceContext *iface, -+ ID2D1Effect *effect, -+ UINT32 *rectangleCount) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+ return E_NOTIMPL; -+} -+ -+static HRESULT WINAPI d2d_device_context_GetEffectInvalidRectangles( -+ ID2D1DeviceContext *iface, -+ ID2D1Effect *effect, -+ D2D1_RECT_F *rectangles, -+ UINT32 rectanglesCount) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+ return E_NOTIMPL; -+} -+ -+static HRESULT WINAPI d2d_device_context_GetEffectRequiredInputRectangles( -+ ID2D1DeviceContext *iface, -+ ID2D1Effect *renderEffect, -+ const D2D1_RECT_F *renderImageRectangle, -+ const D2D1_EFFECT_INPUT_DESCRIPTION *inputDescriptions, -+ D2D1_RECT_F *requiredInputRects, -+ UINT32 inputCount) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+ return E_NOTIMPL; -+} -+ -+static void WINAPI d2d_device_context_ID2D1DeviceContext_FillOpacityMask( -+ ID2D1DeviceContext *iface, -+ ID2D1Bitmap *opacityMask, -+ ID2D1Brush *brush, -+ const D2D1_RECT_F *destinationRectangle, -+ const D2D1_RECT_F *sourceRectangle) -+{ -+ struct d2d_device_context *This = impl_from_ID2D1DeviceContext(iface); -+ FIXME("%p stub!\n", This); -+} -+ -+static const struct ID2D1DeviceContextVtbl d2d_device_context_vtbl = -+{ -+ d2d_device_context_QueryInterface, -+ d2d_device_context_AddRef, -+ d2d_device_context_Release, -+ d2d_device_context_GetFactory, -+ d2d_device_context_CreateBitmap, -+ d2d_device_context_CreateBitmapFromWicBitmap, -+ d2d_device_context_CreateSharedBitmap, -+ d2d_device_context_CreateBitmapBrush, -+ d2d_device_context_CreateSolidColorBrush, -+ d2d_device_context_CreateGradientStopCollection, -+ d2d_device_context_CreateLinearGradientBrush, -+ d2d_device_context_CreateRadialGradientBrush, -+ d2d_device_context_CreateCompatibleRenderTarget, -+ d2d_device_context_CreateLayer, -+ d2d_device_context_CreateMesh, -+ d2d_device_context_DrawLine, -+ d2d_device_context_DrawRectangle, -+ d2d_device_context_FillRectangle, -+ d2d_device_context_DrawRoundedRectangle, -+ d2d_device_context_FillRoundedRectangle, -+ d2d_device_context_DrawEllipse, -+ d2d_device_context_FillEllipse, -+ d2d_device_context_DrawGeometry, -+ d2d_device_context_FillGeometry, -+ d2d_device_context_FillMesh, -+ d2d_device_context_FillOpacityMask, -+ d2d_device_context_DrawBitmap, -+ d2d_device_context_DrawText, -+ d2d_device_context_DrawTextLayout, -+ d2d_device_context_DrawGlyphRun, -+ d2d_device_context_SetTransform, -+ d2d_device_context_GetTransform, -+ d2d_device_context_SetAntialiasMode, -+ d2d_device_context_GetAntialiasMode, -+ d2d_device_context_SetTextAntialiasMode, -+ d2d_device_context_GetTextAntialiasMode, -+ d2d_device_context_SetTextRenderingParams, -+ d2d_device_context_GetTextRenderingParams, -+ d2d_device_context_SetTags, -+ d2d_device_context_GetTags, -+ d2d_device_context_PushLayer, -+ d2d_device_context_PopLayer, -+ d2d_device_context_Flush, -+ d2d_device_context_SaveDrawingState, -+ d2d_device_context_RestoreDrawingState, -+ d2d_device_context_PushAxisAlignedClip, -+ d2d_device_context_PopAxisAlignedClip, -+ d2d_device_context_Clear, -+ d2d_device_context_BeginDraw, -+ d2d_device_context_EndDraw, -+ d2d_device_context_GetPixelFormat, -+ d2d_device_context_SetDpi, -+ d2d_device_context_GetDpi, -+ d2d_device_context_GetSize, -+ d2d_device_context_GetPixelSize, -+ d2d_device_context_GetMaximumBitmapSize, -+ d2d_device_context_IsSupported, -+ d2d_device_context_ID2D1DeviceContext_CreateBitmap, -+ d2d_device_context_ID2D1DeviceContext_CreateBitmapFromWicBitmap, -+ d2d_device_context_CreateColorContext, -+ d2d_device_context_CreateColorContextFromFilename, -+ d2d_device_context_CreateColorContextFromWicColorContext, -+ d2d_device_context_CreateBitmapFromDxgiSurface, -+ d2d_device_context_CreateEffect, -+ d2d_device_context_ID2D1DeviceContext_CreateGradientStopCollection, -+ d2d_device_context_CreateImageBrush, -+ d2d_device_context_ID2D1DeviceContext_CreateBitmapBrush, -+ d2d_device_context_CreateCommandList, -+ d2d_device_context_IsDxgiFormatSupported, -+ d2d_device_context_IsBufferPrecisionSupported, -+ d2d_device_context_GetImageLocalBounds, -+ d2d_device_context_GetImageWorldBounds, -+ d2d_device_context_GetGlyphRunWorldBounds, -+ d2d_device_context_GetDevice, -+ d2d_device_context_SetTarget, -+ d2d_device_context_GetTarget, -+ d2d_device_context_SetRenderingControls, -+ d2d_device_context_GetRenderingControls, -+ d2d_device_context_SetPrimitiveBlend, -+ d2d_device_context_GetPrimitiveBlend, -+ d2d_device_context_SetUnitMode, -+ d2d_device_context_GetUnitMode, -+ d2d_device_context_ID2D1DeviceContext_DrawGlyphRun, -+ d2d_device_context_DrawImage, -+ d2d_device_context_DrawGdiMetafile, -+ d2d_device_context_ID2D1DeviceContext_DrawBitmap, -+ d2d_device_context_ID2D1DeviceContext_PushLayer, -+ d2d_device_context_InvalidateEffectInputRectangle, -+ d2d_device_context_GetEffectInvalidRectangleCount, -+ d2d_device_context_GetEffectInvalidRectangles, -+ d2d_device_context_GetEffectRequiredInputRectangles, -+ d2d_device_context_ID2D1DeviceContext_FillOpacityMask, -+}; --- -2.7.4 - diff --git a/patches/d2d1-ID2D1Factory1/0006-d2d1-Implement-ID2D1DeviceContext.patch b/patches/d2d1-ID2D1Factory1/0006-d2d1-Implement-ID2D1DeviceContext.patch deleted file mode 100644 index 1b00c914..00000000 --- a/patches/d2d1-ID2D1Factory1/0006-d2d1-Implement-ID2D1DeviceContext.patch +++ /dev/null @@ -1,950 +0,0 @@ -From a1de88de49c28a61ecc21f380e6ad3c25037eb59 Mon Sep 17 00:00:00 2001 -From: Lucian Poston -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 ---- - 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 - diff --git a/patches/d3d11-Depth_Bias/0006-wined3d-Add-support-for-depth-bias-clamping.patch b/patches/d3d11-Depth_Bias/0006-wined3d-Add-support-for-depth-bias-clamping.patch index 0773e101..bac1f242 100644 --- a/patches/d3d11-Depth_Bias/0006-wined3d-Add-support-for-depth-bias-clamping.patch +++ b/patches/d3d11-Depth_Bias/0006-wined3d-Add-support-for-depth-bias-clamping.patch @@ -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?= 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, diff --git a/patches/d3d11-Depth_Bias/definition b/patches/d3d11-Depth_Bias/definition index f2c5791c..3243bac2 100644 --- a/patches/d3d11-Depth_Bias/definition +++ b/patches/d3d11-Depth_Bias/definition @@ -1,2 +1 @@ -Fixes: Implement support for more d3d11 depth options in RSSetState. Fixes: [43848] Implement support for depth bias clamping diff --git a/patches/ntdll-ApiSetQueryApiSetPresence/0001-ntdll-Add-stub-for-ApiSetQueryApiSetPresence.patch b/patches/ntdll-ApiSetQueryApiSetPresence/0001-ntdll-Add-stub-for-ApiSetQueryApiSetPresence.patch index 3c06bc5c..5acc4599 100644 --- a/patches/ntdll-ApiSetQueryApiSetPresence/0001-ntdll-Add-stub-for-ApiSetQueryApiSetPresence.patch +++ b/patches/ntdll-ApiSetQueryApiSetPresence/0001-ntdll-Add-stub-for-ApiSetQueryApiSetPresence.patch @@ -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?= 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 @@ diff --git a/patches/patchinstall.sh b/patches/patchinstall.sh index b200d29d..61bf993c 100755 --- a/patches/patchinstall.sh +++ b/patches/patchinstall.sh @@ -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 diff --git a/patches/server-Desktop_Refcount/0001-server-Introduce-a-new-alloc_handle-object-callback..patch b/patches/server-Desktop_Refcount/0001-server-Introduce-a-new-alloc_handle-object-callback..patch index 13828324..fa126e07 100644 --- a/patches/server-Desktop_Refcount/0001-server-Introduce-a-new-alloc_handle-object-callback..patch +++ b/patches/server-Desktop_Refcount/0001-server-Introduce-a-new-alloc_handle-object-callback..patch @@ -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 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 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 diff --git a/patches/setupapi-Display_Device/0001-setupapi-Create-registry-keys-for-display-devices-an.patch b/patches/setupapi-Display_Device/0001-setupapi-Create-registry-keys-for-display-devices-an.patch index 085cd9f5..19e4a77c 100644 --- a/patches/setupapi-Display_Device/0001-setupapi-Create-registry-keys-for-display-devices-an.patch +++ b/patches/setupapi-Display_Device/0001-setupapi-Create-registry-keys-for-display-devices-an.patch @@ -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?= 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; diff --git a/patches/shell32-Placeholder_Icons/0001-shell32-Add-placeholder-icons-to-match-icon-offset-w.patch b/patches/shell32-Placeholder_Icons/0001-shell32-Add-placeholder-icons-to-match-icon-offset-w.patch index 3c388a8a..e12a9319 100644 --- a/patches/shell32-Placeholder_Icons/0001-shell32-Add-placeholder-icons-to-match-icon-offset-w.patch +++ b/patches/shell32-Placeholder_Icons/0001-shell32-Add-placeholder-icons-to-match-icon-offset-w.patch @@ -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?= 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 diff --git a/patches/wined3d-Accounting/0001-wined3d-Use-real-values-for-memory-accounting-on-NVI.patch b/patches/wined3d-Accounting/0001-wined3d-Use-real-values-for-memory-accounting-on-NVI.patch index 6fd565be..ba1d903a 100644 --- a/patches/wined3d-Accounting/0001-wined3d-Use-real-values-for-memory-accounting-on-NVI.patch +++ b/patches/wined3d-Accounting/0001-wined3d-Use-real-values-for-memory-accounting-on-NVI.patch @@ -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?= 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, diff --git a/patches/wined3d-Dual_Source_Blending/0003-wined3d-Implement-dual-source-blending.patch b/patches/wined3d-Dual_Source_Blending/0003-wined3d-Implement-dual-source-blending.patch index 9ab2184b..70412d22 100644 --- a/patches/wined3d-Dual_Source_Blending/0003-wined3d-Implement-dual-source-blending.patch +++ b/patches/wined3d-Dual_Source_Blending/0003-wined3d-Implement-dual-source-blending.patch @@ -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?= 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 diff --git a/patches/wined3d-wined3d_guess_gl_vendor/0001-wined3d-Also-check-for-Brian-Paul-to-detect-Mesa-gl_.patch b/patches/wined3d-wined3d_guess_gl_vendor/0001-wined3d-Also-check-for-Brian-Paul-to-detect-Mesa-gl_.patch index b27f9175..278dc1a8 100644 --- a/patches/wined3d-wined3d_guess_gl_vendor/0001-wined3d-Also-check-for-Brian-Paul-to-detect-Mesa-gl_.patch +++ b/patches/wined3d-wined3d_guess_gl_vendor/0001-wined3d-Also-check-for-Brian-Paul-to-detect-Mesa-gl_.patch @@ -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 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