[PATCH 1/5] d3d10core/tests: Multisampled render targets are zeroed on creation.

Henri Verbeet hverbeet at gmail.com
Wed Nov 25 06:44:02 CST 2015


On 24 November 2015 at 22:18, Stefan Dösinger <stefan at codeweavers.com> wrote:
> +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);
> +
You should check if the sample count is supported with
CheckMultisampleQualityLevels().

> +    /* 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. */
Direct3D 10+ doesn't have sysmem textures. You can make resources
accessible to the CPU, but you can't prevent the GPU from reading from
them. How did you verify that the CopyResource() works?

> +    desc.SampleDesc.Count = 1;
> +    hr = ID3D10Device_CreateTexture2D(device, &desc, NULL, &single);
> +    ok(SUCCEEDED(hr), "Failed to create texture, hr %#x.\n", hr);
Note that you're creating a texture here, contrary to what the comment
above claims.

> +    ID3D10Device_CopyResource(device, (ID3D10Resource *)single, (ID3D10Resource *)multi);
At least according to the documentation, CopyResource() doesn't work
at all with multi-sampled resources, and this should use
ResolveSubresource() instead. It's possible the documentation is wrong
about that, but that would need a more convincing test. Right now it
looks like the test only tests that the initial contents of "single"
are zeroes.



More information about the wine-devel mailing list