[PATCH resend 13/18] wined3d: Use depth/stencil formats for typeless resources only when WINED3DUSAGE_DEPTHSTENCIL is set.

Henri Verbeet hverbeet at gmail.com
Mon Dec 12 02:25:16 CST 2016


On 9 December 2016 at 11:30, Józef Kucia <jkucia at codeweavers.com> wrote:
>  const struct wined3d_format *wined3d_get_format(const struct wined3d_gl_info *gl_info,
> -        enum wined3d_format_id format_id)
> +        enum wined3d_format_id format_id, unsigned int resource_usage)
>  {
> +    const struct wined3d_format *format;
>      int idx = get_format_idx(format_id);
> +    unsigned int i;
>
>      if (idx == -1)
>      {
> -        FIXME("Can't find format %s (%#x) in the format lookup table\n",
> +        FIXME("Can't find format %s (%#x) in the format lookup table.\n",
> +                debug_d3dformat(format_id), format_id);
> +        return &gl_info->formats[get_format_idx(WINED3DFMT_UNKNOWN)];
> +    }
> +
> +    format = &gl_info->formats[idx];
> +
> +    if (resource_usage & WINED3DUSAGE_DEPTHSTENCIL && wined3d_format_is_typeless(format))
> +    {
> +        for (i = 0; i < ARRAY_SIZE(typeless_depth_stencil_formats); ++i)
> +        {
> +            if (typeless_depth_stencil_formats[i].typeless_id == format_id)
> +                return &gl_info->formats[WINED3D_FORMAT_COUNT + i];
> +        }
> +
> +        FIXME("Cannot find depth/stencil typeless format %s (%#x).\n",
>                  debug_d3dformat(format_id), format_id);
> -        /* Get the caller a valid pointer */
> -        idx = get_format_idx(WINED3DFMT_UNKNOWN);
> +        return &gl_info->formats[get_format_idx(WINED3DFMT_UNKNOWN)];
>      }
>
> -    return &gl_info->formats[idx];
> +    return format;
>  }
>
I do have some concerns about whether returning different
wined3d_format structures for different usages/bind flags is better
than having different GL internal formats for different usages/bind
flags within the same wined3d_format structure, but lets give it a
try.



More information about the wine-devel mailing list