d2d1/tests: Test d2d_device_context_SetTarget() with bitmaps of D2D1_ALPHA_MODE_IGNORE.

Signed-off-by: Zhiyi Zhang <zzhang@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Zhiyi Zhang 2022-03-11 14:31:47 +08:00 committed by Alexandre Julliard
parent d0902b7c8e
commit fe4c187a7c
1 changed files with 48 additions and 2 deletions

View File

@ -4341,18 +4341,22 @@ static void test_bitmap_formats(BOOL d3d11)
static void test_alpha_mode(BOOL d3d11)
{
D2D1_RENDER_TARGET_PROPERTIES rt_desc;
D2D1_BITMAP_PROPERTIES1 bitmap_desc1;
D2D1_BITMAP_PROPERTIES bitmap_desc;
ID2D1SolidColorBrush *color_brush;
ID2D1BitmapBrush *bitmap_brush;
struct d2d1_test_context ctx;
ID2D1DeviceContext *context;
ID2D1Bitmap1 *bitmap1;
ID2D1RenderTarget *rt;
IDXGISurface *surface;
ID2D1Bitmap *bitmap;
D2D1_COLOR_F color;
BOOL match, match2;
D2D1_RECT_F rect;
D2D1_SIZE_U size;
ULONG refcount;
HRESULT hr;
BOOL match;
static const DWORD bitmap_data[] =
{
@ -4546,8 +4550,50 @@ static void test_alpha_mode(BOOL d3d11)
refcount = ID2D1Bitmap_Release(bitmap);
ok(refcount == 1, "Bitmap has %lu references left.\n", refcount);
ID2D1SolidColorBrush_Release(color_brush);
ID2D1BitmapBrush_Release(bitmap_brush);
hr = ID2D1RenderTarget_QueryInterface(rt, &IID_ID2D1DeviceContext, (void **)&context);
ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
set_size_u(&size, 4, 4);
memset(&bitmap_desc1, 0, sizeof(bitmap_desc1));
bitmap_desc1.dpiX = 96.0f;
bitmap_desc1.dpiY = 96.0f;
bitmap_desc1.pixelFormat.format = DXGI_FORMAT_B8G8R8A8_UNORM;
bitmap_desc1.pixelFormat.alphaMode = D2D1_ALPHA_MODE_IGNORE;
bitmap_desc1.bitmapOptions = D2D1_BITMAP_OPTIONS_TARGET | D2D1_BITMAP_OPTIONS_CANNOT_DRAW;
hr = ID2D1DeviceContext_CreateBitmap(context, size, bitmap_data, 4 * sizeof(*bitmap_data),
&bitmap_desc1, &bitmap1);
ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
ID2D1DeviceContext_BeginDraw(context);
ID2D1DeviceContext_SetTarget(context, (ID2D1Image *)bitmap1);
set_rect(&rect, 0.0f, 2.0f, 1.0f, 2.0f);
ID2D1SolidColorBrush_SetOpacity(color_brush, 1.0f);
ID2D1DeviceContext_FillRectangle(context, &rect, (ID2D1Brush *)color_brush);
set_rect(&rect, 1.0f, 2.0f, 3.0f, 3.0f);
ID2D1SolidColorBrush_SetOpacity(color_brush, 0.75f);
ID2D1DeviceContext_FillRectangle(context, &rect, (ID2D1Brush *)color_brush);
set_rect(&rect, 3.0f, 2.0f, 3.0f, 3.0f);
ID2D1SolidColorBrush_SetOpacity(color_brush, 0.25f);
ID2D1DeviceContext_FillRectangle(context, &rect, (ID2D1Brush *)color_brush);
hr = ID2D1DeviceContext_EndDraw(context, NULL, NULL);
ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
surface = ctx.surface;
hr = ID2D1Bitmap1_GetSurface(bitmap1, &ctx.surface);
ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
match = compare_surface(&ctx, "e7ee77e89745fa5d195fd78bd398738330cfcde8");
match2 = compare_surface(&ctx, "4855c7c082c8ede364cf6e2dcde83f95b88aecbe");
todo_wine
ok(match || broken(match2) /* Win7 TestBots */, "Surface does not match.\n");
IDXGISurface_Release(ctx.surface);
ctx.surface = surface;
ID2D1DeviceContext_SetTarget(context, NULL);
ID2D1Bitmap1_Release(bitmap1);
ID2D1DeviceContext_Release(context);
ID2D1SolidColorBrush_Release(color_brush);
ID2D1RenderTarget_Release(rt);
release_test_context(&ctx);
}