[PATCH 5/6] wined3d: Return a texture from the swapchain resource creation callback.

Henri Verbeet hverbeet at gmail.com
Thu Sep 3 06:57:15 CDT 2015


On 3 September 2015 at 12:52, Stefan Dösinger <stefan at codeweavers.com> wrote:
> @@ -3034,32 +3034,29 @@ static HRESULT CDECL device_parent_volume_created(struct wined3d_device_parent *
>      return D3D_OK;
>  }
>
> -static HRESULT CDECL device_parent_create_swapchain_surface(struct wined3d_device_parent *device_parent,
> -        void *container_parent, const struct wined3d_resource_desc *desc, struct wined3d_surface **surface)
> +static HRESULT CDECL device_parent_create_swapchain_texture(struct wined3d_device_parent *device_parent,
> +        void *container_parent, const struct wined3d_resource_desc *desc, struct wined3d_texture **texture)
>  {
>      struct d3d8_device *device = device_from_device_parent(device_parent);
>      struct wined3d_resource_desc texture_desc;
> +    struct wined3d_surface *surface;
>      struct d3d8_surface *d3d_surface;
> -    struct wined3d_texture *texture;
>      HRESULT hr;
>
> -    TRACE("device_parent %p, container_parent %p, desc %p, surface %p.\n",
> -            device_parent, container_parent, desc, surface);
> +    TRACE("device_parent %p, container_parent %p, desc %p, texture %p.\n",
> +            device_parent, container_parent, desc, texture);
>
>      texture_desc = *desc;
>      texture_desc.resource_type = WINED3D_RTYPE_TEXTURE;
Now that you're creating a texture, you don't need to change the
resource type anymore. You should just be able to pass "desc" to
wined3d_texture_create().

> -    *surface = wined3d_surface_from_resource(wined3d_texture_get_sub_resource(texture, 0));
> -    wined3d_surface_incref(*surface);
> -    wined3d_texture_decref(texture);
> -
> -    d3d_surface = wined3d_surface_get_parent(*surface);
> +    surface = wined3d_surface_from_resource(wined3d_texture_get_sub_resource(*texture, 0));
> +    d3d_surface = wined3d_surface_get_parent(surface);
wined3d_resource_get_parent().

> diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
> index 765af0d..d50cd84 100644
> --- a/dlls/wined3d/device.c
> +++ b/dlls/wined3d/device.c
> @@ -4685,32 +4685,37 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device,
>      }
>      if (swapchain->desc.enable_auto_depth_stencil)
>      {
> -        struct wined3d_resource_desc surface_desc;
> -        struct wined3d_surface *surface;
> +        struct wined3d_resource_desc texture_desc;
> +        struct wined3d_texture *texture;
> +        struct wined3d_rendertarget_view_desc view_desc;
>
>          TRACE("Creating the depth stencil buffer\n");
>
> -        surface_desc.resource_type = WINED3D_RTYPE_SURFACE;
> -        surface_desc.format = swapchain->desc.auto_depth_stencil_format;
> -        surface_desc.multisample_type = swapchain->desc.multisample_type;
> -        surface_desc.multisample_quality = swapchain->desc.multisample_quality;
> -        surface_desc.usage = WINED3DUSAGE_DEPTHSTENCIL;
> -        surface_desc.pool = WINED3D_POOL_DEFAULT;
> -        surface_desc.width = swapchain->desc.backbuffer_width;
> -        surface_desc.height = swapchain->desc.backbuffer_height;
> -        surface_desc.depth = 1;
> -        surface_desc.size = 0;
> -
> -        if (FAILED(hr = device->device_parent->ops->create_swapchain_surface(device->device_parent,
> -                device->device_parent, &surface_desc, &surface)))
> +        texture_desc.resource_type = WINED3D_RTYPE_SURFACE;
This looks wrong. It probably works anyway because you overwrite the
resource type in the create_swapchain_texture() implementations.



More information about the wine-devel mailing list