mirror of
git://source.winehq.org/git/wine.git
synced 2024-09-02 21:43:39 +00:00
d2d1: Improve resource properties check when creating a bitmap.
This commit is contained in:
parent
a5426f6ace
commit
b62f3c881b
|
@ -2097,10 +2097,10 @@ static BOOL d2d_bitmap_check_options_with_surface(unsigned int options, unsigned
|
||||||
|
|
||||||
if (options && (options & D2D1_BITMAP_OPTIONS_TARGET) != (surface_options & D2D1_BITMAP_OPTIONS_TARGET))
|
if (options && (options & D2D1_BITMAP_OPTIONS_TARGET) != (surface_options & D2D1_BITMAP_OPTIONS_TARGET))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
if (!(options & D2D1_BITMAP_OPTIONS_CANNOT_DRAW) && (surface_options & D2D1_BITMAP_OPTIONS_CANNOT_DRAW))
|
||||||
|
return FALSE;
|
||||||
if (options & D2D1_BITMAP_OPTIONS_TARGET)
|
if (options & D2D1_BITMAP_OPTIONS_TARGET)
|
||||||
{
|
{
|
||||||
if (!(options & D2D1_BITMAP_OPTIONS_CANNOT_DRAW) && (surface_options & D2D1_BITMAP_OPTIONS_CANNOT_DRAW))
|
|
||||||
return FALSE;
|
|
||||||
if (options & D2D1_BITMAP_OPTIONS_GDI_COMPATIBLE && !(surface_options & D2D1_BITMAP_OPTIONS_GDI_COMPATIBLE))
|
if (options & D2D1_BITMAP_OPTIONS_GDI_COMPATIBLE && !(surface_options & D2D1_BITMAP_OPTIONS_GDI_COMPATIBLE))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
|
@ -13249,6 +13249,24 @@ static void test_bitmap_map(BOOL d3d11)
|
||||||
{
|
{
|
||||||
{ D2D1_BITMAP_OPTIONS_CANNOT_DRAW | D2D1_BITMAP_OPTIONS_CPU_READ },
|
{ D2D1_BITMAP_OPTIONS_CANNOT_DRAW | D2D1_BITMAP_OPTIONS_CPU_READ },
|
||||||
};
|
};
|
||||||
|
static const struct
|
||||||
|
{
|
||||||
|
unsigned int bind_flags;
|
||||||
|
unsigned int options;
|
||||||
|
HRESULT hr;
|
||||||
|
} options_tests[] =
|
||||||
|
{
|
||||||
|
{ D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE,
|
||||||
|
D2D1_BITMAP_OPTIONS_TARGET | D2D1_BITMAP_OPTIONS_CANNOT_DRAW },
|
||||||
|
{ D3D11_BIND_RENDER_TARGET, D2D1_BITMAP_OPTIONS_TARGET | D2D1_BITMAP_OPTIONS_CANNOT_DRAW },
|
||||||
|
{ D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE, D2D1_BITMAP_OPTIONS_NONE },
|
||||||
|
{ 0, D2D1_BITMAP_OPTIONS_CANNOT_DRAW },
|
||||||
|
|
||||||
|
{ 0, D2D1_BITMAP_OPTIONS_TARGET, E_INVALIDARG },
|
||||||
|
{ 0, D2D1_BITMAP_OPTIONS_NONE, E_INVALIDARG },
|
||||||
|
{ D3D11_BIND_RENDER_TARGET, D2D1_BITMAP_OPTIONS_TARGET, E_INVALIDARG },
|
||||||
|
{ D3D11_BIND_RENDER_TARGET, D2D1_BITMAP_OPTIONS_NONE, E_INVALIDARG },
|
||||||
|
};
|
||||||
D2D1_BITMAP_PROPERTIES1 bitmap_desc;
|
D2D1_BITMAP_PROPERTIES1 bitmap_desc;
|
||||||
D3D11_TEXTURE2D_DESC texture_desc;
|
D3D11_TEXTURE2D_DESC texture_desc;
|
||||||
ID2D1Bitmap *bitmap2, *bitmap3;
|
ID2D1Bitmap *bitmap2, *bitmap3;
|
||||||
|
@ -13436,9 +13454,8 @@ static void test_bitmap_map(BOOL d3d11)
|
||||||
ok(hr == E_INVALIDARG, "Got unexpected hr %#lx.\n", hr);
|
ok(hr == E_INVALIDARG, "Got unexpected hr %#lx.\n", hr);
|
||||||
bitmap_desc.bitmapOptions = D2D1_BITMAP_OPTIONS_NONE;
|
bitmap_desc.bitmapOptions = D2D1_BITMAP_OPTIONS_NONE;
|
||||||
hr = ID2D1DeviceContext_CreateBitmapFromDxgiSurface(ctx.context, surface, &bitmap_desc, &bitmap);
|
hr = ID2D1DeviceContext_CreateBitmapFromDxgiSurface(ctx.context, surface, &bitmap_desc, &bitmap);
|
||||||
todo_wine
|
|
||||||
ok(hr == E_INVALIDARG, "Got unexpected hr %#lx.\n", hr);
|
ok(hr == E_INVALIDARG, "Got unexpected hr %#lx.\n", hr);
|
||||||
if (SUCCEEDED(hr)) ID2D1Bitmap1_Release(bitmap);
|
|
||||||
bitmap_desc.bitmapOptions = D2D1_BITMAP_OPTIONS_TARGET | D2D1_BITMAP_OPTIONS_CANNOT_DRAW;
|
bitmap_desc.bitmapOptions = D2D1_BITMAP_OPTIONS_TARGET | D2D1_BITMAP_OPTIONS_CANNOT_DRAW;
|
||||||
hr = ID2D1DeviceContext_CreateBitmapFromDxgiSurface(ctx.context, surface, &bitmap_desc, &bitmap);
|
hr = ID2D1DeviceContext_CreateBitmapFromDxgiSurface(ctx.context, surface, &bitmap_desc, &bitmap);
|
||||||
ok(hr == E_INVALIDARG, "Got unexpected hr %#lx.\n", hr);
|
ok(hr == E_INVALIDARG, "Got unexpected hr %#lx.\n", hr);
|
||||||
|
@ -13454,37 +13471,42 @@ static void test_bitmap_map(BOOL d3d11)
|
||||||
ID3D11Texture2D_Release(texture);
|
ID3D11Texture2D_Release(texture);
|
||||||
IDXGISurface_Release(surface);
|
IDXGISurface_Release(surface);
|
||||||
|
|
||||||
/* Surface D2D1_BITMAP_OPTIONS_TARGET */
|
for (i = 0; i < ARRAY_SIZE(options_tests); ++i)
|
||||||
texture_desc.Width = 4;
|
{
|
||||||
texture_desc.Height = 4;
|
winetest_push_context("Test %u", i);
|
||||||
texture_desc.MipLevels = 1;
|
|
||||||
texture_desc.ArraySize = 1;
|
|
||||||
texture_desc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
|
|
||||||
texture_desc.SampleDesc.Count = 1;
|
|
||||||
texture_desc.SampleDesc.Quality = 0;
|
|
||||||
texture_desc.Usage = D3D11_USAGE_DEFAULT;
|
|
||||||
texture_desc.BindFlags = D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE;
|
|
||||||
texture_desc.CPUAccessFlags = 0;
|
|
||||||
texture_desc.MiscFlags = 0;
|
|
||||||
|
|
||||||
hr = ID3D11Device_CreateTexture2D(d3d_device, &texture_desc, NULL, &texture);
|
texture_desc.Width = 4;
|
||||||
ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
|
texture_desc.Height = 4;
|
||||||
hr = ID3D11Texture2D_QueryInterface(texture, &IID_IDXGISurface, (void **)&surface);
|
texture_desc.MipLevels = 1;
|
||||||
ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
|
texture_desc.ArraySize = 1;
|
||||||
|
texture_desc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
|
||||||
|
texture_desc.SampleDesc.Count = 1;
|
||||||
|
texture_desc.SampleDesc.Quality = 0;
|
||||||
|
texture_desc.Usage = D3D11_USAGE_DEFAULT;
|
||||||
|
texture_desc.BindFlags = options_tests[i].bind_flags;
|
||||||
|
texture_desc.CPUAccessFlags = 0;
|
||||||
|
texture_desc.MiscFlags = 0;
|
||||||
|
|
||||||
bitmap_desc.bitmapOptions = D2D1_BITMAP_OPTIONS_CANNOT_DRAW | D2D1_BITMAP_OPTIONS_TARGET;
|
hr = ID3D11Device_CreateTexture2D(d3d_device, &texture_desc, NULL, &texture);
|
||||||
hr = ID2D1DeviceContext_CreateBitmapFromDxgiSurface(ctx.context, surface, &bitmap_desc, &bitmap);
|
ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
|
||||||
ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
|
hr = ID3D11Texture2D_QueryInterface(texture, &IID_IDXGISurface, (void **)&surface);
|
||||||
ID2D1Bitmap1_Release(bitmap);
|
ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
|
||||||
|
|
||||||
bitmap_desc.bitmapOptions = 0;
|
bitmap = NULL;
|
||||||
hr = ID2D1DeviceContext_CreateBitmapFromDxgiSurface(ctx.context, surface, &bitmap_desc, &bitmap);
|
bitmap_desc.bitmapOptions = options_tests[i].options;
|
||||||
ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
|
hr = ID2D1DeviceContext_CreateBitmapFromDxgiSurface(ctx.context, surface, &bitmap_desc, &bitmap);
|
||||||
check_bitmap_options((ID2D1Bitmap *)bitmap, 0);
|
ok(hr == options_tests[i].hr, "Got unexpected hr %#lx.\n", hr);
|
||||||
ID2D1Bitmap1_Release(bitmap);
|
if (SUCCEEDED(hr))
|
||||||
|
{
|
||||||
|
check_bitmap_options((ID2D1Bitmap *)bitmap, options_tests[i].options);
|
||||||
|
ID2D1Bitmap1_Release(bitmap);
|
||||||
|
}
|
||||||
|
|
||||||
ID3D11Texture2D_Release(texture);
|
ID3D11Texture2D_Release(texture);
|
||||||
IDXGISurface_Release(surface);
|
IDXGISurface_Release(surface);
|
||||||
|
|
||||||
|
winetest_pop_context();
|
||||||
|
}
|
||||||
|
|
||||||
ID3D11Device_Release(d3d_device);
|
ID3D11Device_Release(d3d_device);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue