Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/d2d1/device.c | 23 +++++++++++++++++++++-- dlls/d2d1/tests/d2d1.c | 16 ++++++---------- 2 files changed, 27 insertions(+), 12 deletions(-)
diff --git a/dlls/d2d1/device.c b/dlls/d2d1/device.c index 97ec0afe88..967b90d038 100644 --- a/dlls/d2d1/device.c +++ b/dlls/d2d1/device.c @@ -3826,9 +3826,28 @@ 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_context *object; + HRESULT hr;
- return E_NOTIMPL; + TRACE("iface %p, options %#x, context %p.\n", iface, options, context); + + if (options) + FIXME("Options are ignored %#x.\n", options); + + if (!(object = heap_alloc_zero(sizeof(*object)))) + return E_OUTOFMEMORY; + + if (FAILED(hr = d2d_device_context_init(object, iface, NULL, NULL))) + { + WARN("Failed to initialize device context, hr %#x.\n", hr); + heap_free(object); + return hr; + } + + TRACE("Created device context %p.\n", object); + *context = &object->ID2D1DeviceContext_iface; + + return S_OK; }
static HRESULT WINAPI d2d_device_CreatePrintControl(ID2D1Device *iface, IWICImagingFactory *wic_factory, diff --git a/dlls/d2d1/tests/d2d1.c b/dlls/d2d1/tests/d2d1.c index 54d5618f17..d31c8ad97e 100644 --- a/dlls/d2d1/tests/d2d1.c +++ b/dlls/d2d1/tests/d2d1.c @@ -6999,7 +6999,6 @@ static void check_rt_bitmap_surface_(unsigned int line, ID2D1RenderTarget *rt, B { hr = ID2D1RenderTarget_CreateCompatibleRenderTarget(rt, NULL, NULL, NULL, D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_NONE, &compatible_rt); - todo_wine ok_(__FILE__, line)(hr == WINCODEC_ERR_UNSUPPORTEDPIXELFORMAT, "Unexpected hr %#x.\n", hr); }
@@ -7139,11 +7138,8 @@ static void test_bitmap_surface(void) ok(SUCCEEDED(hr), "Failed to get ID2D1Device, hr %#x.\n", hr);
hr = ID2D1Device_CreateDeviceContext(device, D2D1_DEVICE_CONTEXT_OPTIONS_NONE, &device_context); -todo_wine ok(SUCCEEDED(hr), "Failed to create device context, hr %#x.\n", hr);
-if (SUCCEEDED(hr)) -{ for (i = 0; i < ARRAY_SIZE(bitmap_format_tests); ++i) { memset(&bitmap_desc, 0, sizeof(bitmap_desc)); @@ -7151,9 +7147,10 @@ if (SUCCEEDED(hr)) bitmap_desc.bitmapOptions = D2D1_BITMAP_OPTIONS_TARGET | D2D1_BITMAP_OPTIONS_CANNOT_DRAW;
hr = ID2D1DeviceContext_CreateBitmapFromDxgiSurface(device_context, surface, &bitmap_desc, &bitmap); + todo_wine_if(bitmap_format_tests[i].hr == WINCODEC_ERR_UNSUPPORTEDPIXELFORMAT) ok(hr == bitmap_format_tests[i].hr, "%u: unexpected hr %#x.\n", i, hr);
- if (SUCCEEDED(hr)) + if (SUCCEEDED(bitmap_format_tests[i].hr)) { pixel_format = ID2D1Bitmap1_GetPixelFormat(bitmap);
@@ -7243,7 +7240,7 @@ if (SUCCEEDED(hr)) ID2D1Bitmap1_Release(bitmap);
ID2D1DeviceContext_Release(device_context); -} + ID2D1Device_Release(device); IDXGIDevice_Release(dxgi_device); IDXGISurface_Release(surface); @@ -7352,11 +7349,8 @@ static void test_device_context(void) IDXGIDevice_Release(dxgi_device);
hr = ID2D1Device_CreateDeviceContext(device, D2D1_DEVICE_CONTEXT_OPTIONS_NONE, &device_context); -todo_wine ok(SUCCEEDED(hr), "Failed to create device context, hr %#x.\n", hr);
-if (SUCCEEDED(hr)) -{ ID2D1DeviceContext_GetDevice(device_context, &device2); ok(device2 == device, "Unexpected device instance.\n"); ID2D1Device_Release(device2); @@ -7434,6 +7428,7 @@ if (SUCCEEDED(hr)) ok(options == (D2D1_BITMAP_OPTIONS_TARGET | D2D1_BITMAP_OPTIONS_CANNOT_DRAW), "Unexpected bitmap options %#x.\n", options); hr = ID2D1Bitmap1_GetSurface(bitmap, &surface); +todo_wine ok(hr == E_FAIL, "Unexpected hr %#x.\n", hr); ID2D1Bitmap1_Release(bitmap);
@@ -7495,6 +7490,7 @@ if (SUCCEEDED(hr))
ID2D1DeviceContext_GetTarget(device_context, (ID2D1Image **)&bitmap); options = ID2D1Bitmap1_GetOptions(bitmap); +todo_wine ok(options == (D2D1_BITMAP_OPTIONS_TARGET | D2D1_BITMAP_OPTIONS_CANNOT_DRAW | D2D1_BITMAP_OPTIONS_GDI_COMPATIBLE), "Unexpected bitmap options %#x.\n", options); hr = ID2D1Bitmap1_GetSurface(bitmap, &surface); @@ -7508,7 +7504,7 @@ if (SUCCEEDED(hr)) ID2D1DeviceContext_Release(device_context); ID2D1DCRenderTarget_Release(dc_rt); DeleteDC(hdc); -} + ID2D1Device_Release(device); ID2D1Factory1_Release(factory); ID3D10Device1_Release(d3d_device);
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/d2d1/bitmap.c | 6 +++++- dlls/d2d1/tests/d2d1.c | 5 ++--- 2 files changed, 7 insertions(+), 4 deletions(-)
diff --git a/dlls/d2d1/bitmap.c b/dlls/d2d1/bitmap.c index 3948c26ec9..6eee1d1442 100644 --- a/dlls/d2d1/bitmap.c +++ b/dlls/d2d1/bitmap.c @@ -338,7 +338,11 @@ HRESULT d2d_bitmap_create(struct d2d_device_context *context, D2D1_SIZE_U size, texture_desc.SampleDesc.Count = 1; texture_desc.SampleDesc.Quality = 0; texture_desc.Usage = D3D10_USAGE_DEFAULT; - texture_desc.BindFlags = D3D10_BIND_SHADER_RESOURCE; + texture_desc.BindFlags = 0; + if (desc->bitmapOptions & D2D1_BITMAP_OPTIONS_TARGET) + texture_desc.BindFlags |= D3D10_BIND_RENDER_TARGET; + if (!(desc->bitmapOptions & D2D1_BITMAP_OPTIONS_CANNOT_DRAW)) + texture_desc.BindFlags |= D3D10_BIND_SHADER_RESOURCE; texture_desc.CPUAccessFlags = 0; texture_desc.MiscFlags = 0;
diff --git a/dlls/d2d1/tests/d2d1.c b/dlls/d2d1/tests/d2d1.c index d31c8ad97e..55d2f568f9 100644 --- a/dlls/d2d1/tests/d2d1.c +++ b/dlls/d2d1/tests/d2d1.c @@ -813,9 +813,8 @@ static void check_bitmap_surface_(unsigned int line, ID2D1Bitmap *bitmap, BOOL h if (!(options & D2D1_BITMAP_OPTIONS_CANNOT_DRAW)) bind_flags |= D3D10_BIND_SHADER_RESOURCE;
- todo_wine_if (options == D2D1_BITMAP_OPTIONS_TARGET) - ok_(__FILE__, line)(desc.BindFlags == bind_flags, "Unexpected bind flags %#x for bitmap options %#x.\n", - desc.BindFlags, options); + ok_(__FILE__, line)(desc.BindFlags == bind_flags, "Unexpected bind flags %#x for bitmap options %#x.\n", + desc.BindFlags, options); ok_(__FILE__, line)(!desc.CPUAccessFlags, "Unexpected cpu access flags %#x.\n", desc.CPUAccessFlags); ok_(__FILE__, line)(!desc.MiscFlags, "Unexpected misc flags %#x.\n", desc.MiscFlags);
Hi,
While running your changed tests on Windows, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=42766
Your paranoid android.
=== build (build log) ===
error: patch failed: dlls/d2d1/tests/d2d1.c:6999 error: patch failed: dlls/d2d1/tests/d2d1.c:813 Task: Patch failed to apply
=== debian9 (build log) ===
error: patch failed: dlls/d2d1/tests/d2d1.c:6999 error: patch failed: dlls/d2d1/tests/d2d1.c:813 Task: Patch failed to apply
On 10/02/2018 09:36 AM, Marvin wrote:
Hi,
While running your changed tests on Windows, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=42766
Your paranoid android.
=== build (build log) ===
error: patch failed: dlls/d2d1/tests/d2d1.c:6999 error: patch failed: dlls/d2d1/tests/d2d1.c:813 Task: Patch failed to apply
=== debian9 (build log) ===
error: patch failed: dlls/d2d1/tests/d2d1.c:6999 error: patch failed: dlls/d2d1/tests/d2d1.c:813 Task: Patch failed to apply
Testbot is not using up-to-date wine repo.
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/d2d1/bitmap.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/dlls/d2d1/bitmap.c b/dlls/d2d1/bitmap.c index 6eee1d1442..c0aef3c072 100644 --- a/dlls/d2d1/bitmap.c +++ b/dlls/d2d1/bitmap.c @@ -345,6 +345,8 @@ HRESULT d2d_bitmap_create(struct d2d_device_context *context, D2D1_SIZE_U size, texture_desc.BindFlags |= D3D10_BIND_SHADER_RESOURCE; texture_desc.CPUAccessFlags = 0; texture_desc.MiscFlags = 0; + if (desc->bitmapOptions & D2D1_BITMAP_OPTIONS_GDI_COMPATIBLE) + texture_desc.MiscFlags |= D3D10_RESOURCE_MISC_GDI_COMPATIBLE;
resource_data.pSysMem = src_data; resource_data.SysMemPitch = pitch;
Hi,
While running your changed tests on Windows, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=42767
Your paranoid android.
=== debian9 (build log) ===
error: patch failed: dlls/d2d1/tests/d2d1.c:6999 error: patch failed: dlls/d2d1/tests/d2d1.c:813 Task: Patch failed to apply
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/d2d1/dc_render_target.c | 64 ++++++++++++++---------------------- dlls/d2d1/tests/d2d1.c | 1 - 2 files changed, 25 insertions(+), 40 deletions(-)
diff --git a/dlls/d2d1/dc_render_target.c b/dlls/d2d1/dc_render_target.c index b4306fb2fe..b095008080 100644 --- a/dlls/d2d1/dc_render_target.c +++ b/dlls/d2d1/dc_render_target.c @@ -686,11 +686,13 @@ static HRESULT STDMETHODCALLTYPE d2d_dc_render_target_BindDC(ID2D1DCRenderTarget const HDC hdc, const RECT *rect) { struct d2d_dc_render_target *render_target = impl_from_ID2D1DCRenderTarget(iface); - D3D10_TEXTURE2D_DESC texture_desc; + D2D1_BITMAP_PROPERTIES1 bitmap_desc; + struct d2d_bitmap *bitmap_impl; IDXGISurface1 *dxgi_surface; ID2D1DeviceContext *context; - ID3D10Texture2D *texture; - ID2D1Bitmap1 *bitmap; + ID3D10Resource *resource; + D2D1_SIZE_U bitmap_size; + ID2D1Bitmap *bitmap; HRESULT hr;
TRACE("iface %p, hdc %p, rect %s.\n", iface, hdc, wine_dbgstr_rect(rect)); @@ -698,49 +700,33 @@ static HRESULT STDMETHODCALLTYPE d2d_dc_render_target_BindDC(ID2D1DCRenderTarget if (!hdc) return E_INVALIDARG;
- texture_desc.Width = rect->right - rect->left; - texture_desc.Height = rect->bottom - rect->top; - texture_desc.MipLevels = 1; - texture_desc.ArraySize = 1; - texture_desc.Format = render_target->pixel_format.format; - texture_desc.SampleDesc.Count = 1; - texture_desc.SampleDesc.Quality = 0; - texture_desc.Usage = D3D10_USAGE_DEFAULT; - texture_desc.BindFlags = D3D10_BIND_RENDER_TARGET | D3D10_BIND_SHADER_RESOURCE; - texture_desc.CPUAccessFlags = 0; - texture_desc.MiscFlags = D3D10_RESOURCE_MISC_GDI_COMPATIBLE; - - if (FAILED(hr = ID3D10Device1_CreateTexture2D(render_target->d3d_device, &texture_desc, NULL, &texture))) - { - WARN("Failed to create texture, hr %#x.\n", hr); - return hr; - } - - hr = ID3D10Texture2D_QueryInterface(texture, &IID_IDXGISurface1, (void **)&dxgi_surface); - ID3D10Texture2D_Release(texture); - if (FAILED(hr)) - { - WARN("Failed to get surface interface from a texture, hr %#x.\n", hr); - return hr; - } - /* Switch dxgi target to new surface. */ ID2D1RenderTarget_QueryInterface(render_target->dxgi_target, &IID_ID2D1DeviceContext, (void **)&context); - hr = ID2D1DeviceContext_CreateBitmapFromDxgiSurface(context, (IDXGISurface *)dxgi_surface, NULL, &bitmap); - if (SUCCEEDED(hr)) - { - ID2D1DeviceContext_SetTarget(context, (ID2D1Image *)bitmap); - ID2D1Bitmap1_Release(bitmap); - } - ID2D1DeviceContext_Release(context);
- if (FAILED(hr)) + bitmap_size.width = rect->right - rect->left; + bitmap_size.height = rect->bottom - rect->top; + + memset(&bitmap_desc, 0, sizeof(bitmap_desc)); + bitmap_desc.pixelFormat = render_target->pixel_format; + bitmap_desc.bitmapOptions = D2D1_BITMAP_OPTIONS_TARGET | D2D1_BITMAP_OPTIONS_CANNOT_DRAW | + D2D1_BITMAP_OPTIONS_GDI_COMPATIBLE; + if (FAILED(hr = ID2D1DeviceContext_CreateBitmap(context, bitmap_size, NULL, 0, &bitmap_desc, + (ID2D1Bitmap1 **)&bitmap))) { - WARN("Failed to create new target bitmap, hr %#x.\n", hr); - IDXGISurface1_Release(dxgi_surface); + WARN("Failed to create target bitmap, hr %#x.\n", hr); + ID2D1DeviceContext_Release(context); return hr; }
+ bitmap_impl = unsafe_impl_from_ID2D1Bitmap(bitmap); + ID3D10ShaderResourceView_GetResource(bitmap_impl->view, &resource); + ID3D10Resource_QueryInterface(resource, &IID_IDXGISurface1, (void **)&dxgi_surface); + ID3D10Resource_Release(resource); + + ID2D1DeviceContext_SetTarget(context, (ID2D1Image *)bitmap); + ID2D1Bitmap_Release(bitmap); + ID2D1DeviceContext_Release(context); + if (render_target->dxgi_surface) IDXGISurface1_Release(render_target->dxgi_surface); render_target->dxgi_surface = dxgi_surface; diff --git a/dlls/d2d1/tests/d2d1.c b/dlls/d2d1/tests/d2d1.c index 55d2f568f9..feebeff8d0 100644 --- a/dlls/d2d1/tests/d2d1.c +++ b/dlls/d2d1/tests/d2d1.c @@ -7489,7 +7489,6 @@ todo_wine
ID2D1DeviceContext_GetTarget(device_context, (ID2D1Image **)&bitmap); options = ID2D1Bitmap1_GetOptions(bitmap); -todo_wine ok(options == (D2D1_BITMAP_OPTIONS_TARGET | D2D1_BITMAP_OPTIONS_CANNOT_DRAW | D2D1_BITMAP_OPTIONS_GDI_COMPATIBLE), "Unexpected bitmap options %#x.\n", options); hr = ID2D1Bitmap1_GetSurface(bitmap, &surface);
Hi,
While running your changed tests on Windows, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=42768
Your paranoid android.
=== build (build log) ===
error: patch failed: dlls/d2d1/tests/d2d1.c:6999 error: patch failed: dlls/d2d1/tests/d2d1.c:813 error: patch failed: dlls/d2d1/dc_render_target.c:686 error: patch failed: dlls/d2d1/tests/d2d1.c:7489 Task: Patch failed to apply
=== debian9 (build log) ===
error: patch failed: dlls/d2d1/tests/d2d1.c:6999 error: patch failed: dlls/d2d1/tests/d2d1.c:813 error: patch failed: dlls/d2d1/dc_render_target.c:686 error: patch failed: dlls/d2d1/tests/d2d1.c:7489 Task: Patch failed to apply
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- include/d2d1_1.idl | 123 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 122 insertions(+), 1 deletion(-)
diff --git a/include/d2d1_1.idl b/include/d2d1_1.idl index c6cd9c7398..8e6554831b 100644 --- a/include/d2d1_1.idl +++ b/include/d2d1_1.idl @@ -32,7 +32,6 @@ interface ID2D1Effect; interface ID2D1GradientStopCollection1; interface ID2D1ImageBrush; interface ID2D1BitmapBrush1; -interface ID2D1CommandList;
cpp_quote("#ifndef __dwrite_h__") /* already defined in dwrite.h but needed for WIDL */ @@ -429,6 +428,128 @@ interface ID2D1Device : ID2D1Resource ); }
+[ + object, + uuid(54d7898a-a061-40a7-bec7-e465bcba2c4f), + local, +] +interface ID2D1CommandSink : IUnknown +{ + HRESULT BeginDraw(); + HRESULT EndDraw(); + HRESULT SetAntialiasMode( + [in] D2D1_ANTIALIAS_MODE antialias_mode + ); + HRESULT SetTags( + [in] D2D1_TAG tag1, + [in] D2D1_TAG tag2 + ); + HRESULT SetTextAntialiasMode( + [in] D2D1_TEXT_ANTIALIAS_MODE antialias_mode + ); + HRESULT SetTextRenderingParams( + [in] IDWriteRenderingParams *text_rendering_params + ); + HRESULT SetTransform( + [in] D2D1_MATRIX_3X2_F *transform + ); + HRESULT SetPrimitiveBlend( + [in] D2D1_PRIMITIVE_BLEND primitive_blend + ); + HRESULT SetUnitMode( + [in] D2D1_UNIT_MODE unit_mode + ); + HRESULT Clear( + [in] const D2D1_COLOR_F *color + ); + HRESULT DrawGlyphRun( + [in] D2D1_POINT_2F baseline_origin, + [in] const DWRITE_GLYPH_RUN *glyph_run, + [in] const DWRITE_GLYPH_RUN_DESCRIPTION *glyph_run_desc, + [in] ID2D1Brush *brush, + [in] DWRITE_MEASURING_MODE measuring_mode + ); + HRESULT DrawLine( + [in] D2D1_POINT_2F p0, + [in] D2D1_POINT_2F p1, + [in] float stroke_width, + [in] ID2D1StrokeStyle *stroke_style + ); + HRESULT DrawGeometry( + [in] ID2D1Geometry *geometry, + [in] ID2D1Brush *brush, + [in] float stroke_width, + [in] ID2D1StrokeStyle *stroke_style + ); + HRESULT DrawRectangle( + [in] const D2D1_RECT_F *rect, + [in] ID2D1Brush *brush, + [in] float stroke_width, + [in] ID2D1StrokeStyle *stroke_style + ); + HRESULT DrawBitmap( + [in] ID2D1Bitmap *bitmap, + [in] const D2D1_RECT_F *dst_rect, + [in] float opacity, + [in] D2D1_INTERPOLATION_MODE interpolation_mode, + [in] const D2D1_RECT_F *src_rect, + [in] const D2D1_MATRIX_4X4_F *perspective_transform + ); + HRESULT DrawImage( + [in] ID2D1Image *image, + [in] const D2D1_POINT_2F *target_offset, + [in] const D2D1_POINT_2F *image_rect, + [in] D2D1_INTERPOLATION_MODE interpolation_mode, + [in] D2D1_COMPOSITE_MODE composite_mode + ); + HRESULT DrawGdiMetafile( + [in] ID2D1GdiMetafile *metafile, + [in] const D2D1_POINT_2F *target_offset + ); + HRESULT FillMesh( + [in] ID2D1Mesh *mesh, + [in] ID2D1Brush *brush + ); + HRESULT FillOpacityMask( + [in] ID2D1Bitmap *bitmap, + [in] ID2D1Brush *brush, + [in] const D2D1_RECT_F *dst_rect, + [in] const D2D1_RECT_F *src_rect + ); + HRESULT FillGeometry( + [in] ID2D1Geometry *geometry, + [in] ID2D1Brush *brush, + [in] ID2D1Brush *opacity_brush + ); + HRESULT FillRectangle( + [in] const D2D1_RECT_F *rect, + [in] ID2D1Brush *brush + ); + HRESULT PushAxisAlignedClip( + [in] const D2D1_RECT_F *clip_rect, + [in] D2D1_ANTIALIAS_MODE antialias_mode + ); + HRESULT PushLayer( + [in] const D2D1_LAYER_PARAMETERS1 *layer_parameters, + [in] ID2D1Layer *layer + ); + HRESULT PopAxisAlignedClip(); + HRESULT PopLayer(); +} + +[ + object, + uuid(b4f34a19-2383-4d76-94f6-ec343657c3dc), + local, +] +interface ID2D1CommandList : ID2D1Image +{ + HRESULT Stream( + [in] ID2D1CommandSink *sink + ); + HRESULT Close(); +} + [ object, uuid(e8f7fe7a-191c-466d-ad95-975678bda998),
Hi,
While running your changed tests on Windows, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=42769
Your paranoid android.
=== debian9 (build log) ===
error: patch failed: dlls/d2d1/tests/d2d1.c:6999 error: patch failed: dlls/d2d1/tests/d2d1.c:813 error: patch failed: dlls/d2d1/dc_render_target.c:686 error: patch failed: dlls/d2d1/tests/d2d1.c:7489 Task: Patch failed to apply
On Tue, 2 Oct 2018 at 10:03, Nikolay Sivov nsivov@codeweavers.com wrote:
- HRESULT DrawLine(
[in] D2D1_POINT_2F p0,
[in] D2D1_POINT_2F p1,
[in] float stroke_width,
[in] ID2D1StrokeStyle *stroke_style
- );
Should this have a "brush" parameter?
Hi,
While running your changed tests on Windows, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=42765
Your paranoid android.
=== build (build log) ===
error: patch failed: dlls/d2d1/tests/d2d1.c:6999 Task: Patch failed to apply
=== debian9 (build log) ===
error: patch failed: dlls/d2d1/tests/d2d1.c:6999 Task: Patch failed to apply