[PATCH 3/5] d3d9: Handle multisample depth resolve in d3d9_device_SetRenderState().

Henri Verbeet hverbeet at gmail.com
Tue Dec 10 08:38:09 CST 2019


On Sat, 7 Dec 2019 at 19:41, Zebediah Figura <z.figura12 at gmail.com> wrote:
> +static void resolve_depth_buffer(struct d3d9_device *device)
> +{
> +    const struct wined3d_stateblock_state *state = wined3d_stateblock_get_state(device->state);
> +    struct wined3d_rendertarget_view *wined3d_dsv;
> +    struct wined3d_resource *dst_resource;
> +    struct wined3d_texture *dst_texture;
> +    struct wined3d_resource_desc desc;
> +    struct d3d9_surface *d3d9_dsv;
> +
> +    if (!(dst_texture = state->textures[0]))
> +        return;
> +    dst_resource = wined3d_texture_get_resource(dst_texture);
> +    wined3d_resource_get_desc(dst_resource, &desc);
> +    if (desc.format != WINED3DFMT_D24_UNORM_S8_UINT
> +            && desc.format != WINED3DFMT_X8D24_UNORM
> +            && desc.format != MAKEFOURCC('D','F','1','6')
> +            && desc.format != MAKEFOURCC('D','F','2','4')
> +            && desc.format != WINED3DFMT_INTZ)
> +        return;
> +
> +    if (!(wined3d_dsv = wined3d_device_get_depth_stencil_view(device->wined3d_device)))
> +        return;
> +    d3d9_dsv = wined3d_rendertarget_view_get_sub_resource_parent(wined3d_dsv);
> +
> +    wined3d_device_resolve_sub_resource(device->wined3d_device, dst_resource, 0,
> +            wined3d_rendertarget_view_get_resource(wined3d_dsv), d3d9_dsv->sub_resource_idx, desc.format);
> +}
If we're going to implement this in d3d9 (but note that the feature is
supported by d3d8 as well), it would be best to implement the
corresponding feature query in d3d9 instead of wined3d as well.

Note that you can't (currently) create DF16/24 resources. Checking for
those isn't necessarily an issue, but in that case please just add en
entry for them to the wined3d_format_id enumeration.



More information about the wine-devel mailing list