[PATCH 2/4] wined3d: Keep track of renderbuffer capabilities.

Henri Verbeet hverbeet at gmail.com
Thu Apr 30 04:09:10 CDT 2015


On 30 April 2015 at 00:00, Stefan Dösinger <stefan at codeweavers.com> wrote:
> diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
> index 36be539..ad9b496 100644
> --- a/dlls/wined3d/directx.c
> +++ b/dlls/wined3d/directx.c
> @@ -4095,7 +4095,7 @@ static BOOL wined3d_check_pixel_format_color(const struct wined3d_gl_info *gl_in
>      BYTE redSize, greenSize, blueSize, alphaSize, colorBits;
>
>      /* Float formats need FBOs. If FBOs are used this function isn't called */
> -    if (format->flags[WINED3D_GL_RES_TYPE_TEX_2D] & WINED3DFMT_FLAG_FLOAT)
> +    if (format->flags[WINED3D_GL_RES_TYPE_RB] & WINED3DFMT_FLAG_FLOAT)
That's not wrong as such, but it is pretty arbitrary.
WINED3DFMT_FLAG_FLOAT is a basic property of the format, like e.g. the
component masks and sizes, it shouldn't depend on the resource type.
Once we'll get proper integer types for d3d10, it will probably make
sense to keep track of the type (INT/UINT/FLOAT/UNORM/SNORM) as an
enumeration instead, perhaps even per-component.

> @@ -4178,8 +4178,8 @@ HRESULT CDECL wined3d_check_depth_stencil_match(const struct wined3d *wined3d,
>      ds_format = wined3d_get_format(&adapter->gl_info, depth_stencil_format_id);
>      if (wined3d_settings.offscreen_rendering_mode == ORM_FBO)
>      {
> -        if ((rt_format->flags[WINED3D_GL_RES_TYPE_TEX_2D] & WINED3DFMT_FLAG_RENDERTARGET)
> -                && (ds_format->flags[WINED3D_GL_RES_TYPE_TEX_2D] & (WINED3DFMT_FLAG_DEPTH | WINED3DFMT_FLAG_STENCIL)))
> +        if ((rt_format->flags[WINED3D_GL_RES_TYPE_RB] & WINED3DFMT_FLAG_RENDERTARGET)
> +                && (ds_format->flags[WINED3D_GL_RES_TYPE_RB] & (WINED3DFMT_FLAG_DEPTH | WINED3DFMT_FLAG_STENCIL)))
This is actually wrong. At least, as long as we don't allow (plain)
renderbuffers to be used for FBO attachments. There's nothing in the
spec that says formats that can be used for color rendering with
renderbuffers have to be available for color rendering with textures
as well, and in fact that's much of the reason for this patch set.

> @@ -998,9 +998,9 @@ static BOOL fbo_blit_supported(const struct wined3d_gl_info *gl_info, enum wined
>              break;
>
>          case WINED3D_BLIT_OP_DEPTH_BLIT:
> -            if (!(src_format->flags[WINED3D_GL_RES_TYPE_TEX_2D] & (WINED3DFMT_FLAG_DEPTH | WINED3DFMT_FLAG_STENCIL)))
> +            if (!(src_format->flags[WINED3D_GL_RES_TYPE_RB] & (WINED3DFMT_FLAG_DEPTH | WINED3DFMT_FLAG_STENCIL)))
Similar to WINED3DFMT_FLAG_FLOAT, these are basic properties of the format.



More information about the wine-devel mailing list