From: Stefan Dösinger Subject: [PATCH 1/5] d3d10core/tests: Multisampled render targets are zeroed on creation. Message-Id: <1448399926-17845-1-git-send-email-stefan@codeweavers.com> Date: Tue, 24 Nov 2015 22:18:42 +0100 Signed-off-by: Stefan Dösinger --- dlls/d3d10core/tests/device.c | 64 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/dlls/d3d10core/tests/device.c b/dlls/d3d10core/tests/device.c index bec3763..ed75120 100644 --- a/dlls/d3d10core/tests/device.c +++ b/dlls/d3d10core/tests/device.c @@ -4338,6 +4338,69 @@ static void test_update_subresource(void) DestroyWindow(window); } +static void test_multisample_init(void) +{ + D3D10_TEXTURE2D_DESC desc; + ID3D10Texture2D *single, *multi; + ID3D10Device *device; + ULONG refcount; + DWORD color; + HRESULT hr; + unsigned int x, y; + struct texture_readback rb; + BOOL all_zero = TRUE; + + if (!(device = create_device())) + { + skip("Failed to create device, skipping tests.\n"); + return; + } + + desc.Width = 640; + desc.Height = 480; + desc.MipLevels = 1; + desc.ArraySize = 1; + desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; + desc.SampleDesc.Count = 2; + desc.SampleDesc.Quality = 0; + desc.Usage = D3D10_USAGE_DEFAULT; + desc.BindFlags = D3D10_BIND_RENDER_TARGET; + desc.CPUAccessFlags = 0; + desc.MiscFlags = 0; + hr = ID3D10Device_CreateTexture2D(device, &desc, NULL, &multi); + ok(SUCCEEDED(hr), "Failed to create texture, hr %#x.\n", hr); + + /* CopyResource from a multisampled to a sysmem texture works, but leaks memory on Windows + * (Nvidia, not checked on AMD). Use a single sampled buffer to work around. */ + desc.SampleDesc.Count = 1; + hr = ID3D10Device_CreateTexture2D(device, &desc, NULL, &single); + ok(SUCCEEDED(hr), "Failed to create texture, hr %#x.\n", hr); + ID3D10Device_CopyResource(device, (ID3D10Resource *)single, (ID3D10Resource *)multi); + + get_texture_readback(single, &rb); + for (y = 0; y < 480; ++y) + { + for (x = 0; x < 640; ++x) + { + color = get_readback_color(&rb, x, y); + if (!compare_color(color, 0x00000000, 0)) + { + all_zero = FALSE; + break; + } + } + if (!all_zero) + break; + } + release_texture_readback(&rb); + ok(all_zero, "Got unexpected color 0x%08x, position %ux%u.\n", color, x, y); + + ID3D10Texture2D_Release(single); + ID3D10Texture2D_Release(multi); + refcount = ID3D10Device_Release(device); + ok(!refcount, "Device has %u references left.\n", refcount); +} + START_TEST(device) { test_feature_level(); @@ -4365,4 +4428,5 @@ START_TEST(device) test_il_append_aligned(); test_fragment_coords(); test_update_subresource(); + test_multisample_init(); } -- 2.4.10