[prev in list] [next in list] [prev in thread] [next in thread] 

List:       wine-devel
Subject:    [PATCH 5/5] wined3d: Validate format capabilities against the bind flags instead of the usage flags 
From:       Henri Verbeet <hverbeet () codeweavers ! com>
Date:       2018-10-31 9:43:51
Message-ID: 20181031093151.23515-5-hverbeet () codeweavers ! com
[Download RAW message or body]

Note that buffer resources don't have an inherent format, so validating bind
flags against WINED3DFMT_UNKNOWN doesn't make a lot of sense. This wasn't an
issue previously because d3d11 doesn't set the usage flags corresponding to
the bind flags for buffer resources, and earlier versions of D3D didn't allow
buffers to be used as e.g. shader resources.

Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
---
 dlls/wined3d/resource.c | 47 ++++++++++++++++++++++++++---------------------
 1 file changed, 26 insertions(+), 21 deletions(-)

diff --git a/dlls/wined3d/resource.c b/dlls/wined3d/resource.c
index 512546d699b..ff584567975 100644
--- a/dlls/wined3d/resource.c
+++ b/dlls/wined3d/resource.c
@@ -107,28 +107,33 @@ HRESULT resource_init(struct wined3d_resource *resource, struct \
wined3d_device *  if (base_type == WINED3D_GL_RES_TYPE_COUNT)
             base_type = gl_type;
 
-        if ((usage & WINED3DUSAGE_RENDERTARGET) && !(format->flags[gl_type] & \
WINED3DFMT_FLAG_RENDERTARGET)) +        if (type != WINED3D_RTYPE_BUFFER)
         {
-            WARN("Format %s cannot be used for render targets.\n", \
                debug_d3dformat(format->id));
-            continue;
-        }
-        if ((usage & WINED3DUSAGE_DEPTHSTENCIL)
-                && !(format->flags[gl_type] & (WINED3DFMT_FLAG_DEPTH | \
                WINED3DFMT_FLAG_STENCIL)))
-        {
-            WARN("Format %s cannot be used for depth/stencil buffers.\n", \
                debug_d3dformat(format->id));
-            continue;
-        }
-        if (wined3d_settings.offscreen_rendering_mode == ORM_FBO
-                && usage & (WINED3DUSAGE_RENDERTARGET | WINED3DUSAGE_DEPTHSTENCIL)
-                && !(format->flags[gl_type] & WINED3DFMT_FLAG_FBO_ATTACHABLE))
-        {
-            WARN("Render target or depth stencil is not FBO attachable.\n");
-            continue;
-        }
-        if ((usage & WINED3DUSAGE_TEXTURE) && !(format->flags[gl_type] & \
                WINED3DFMT_FLAG_TEXTURE))
-        {
-            WARN("Format %s cannot be used for texturing.\n", \
                debug_d3dformat(format->id));
-            continue;
+            if ((bind_flags & WINED3D_BIND_RENDER_TARGET)
+                    && !(format->flags[gl_type] & WINED3DFMT_FLAG_RENDERTARGET))
+            {
+                WARN("Format %s cannot be used for render targets.\n", \
debug_d3dformat(format->id)); +                continue;
+            }
+            if ((bind_flags & WINED3D_BIND_DEPTH_STENCIL)
+                    && !(format->flags[gl_type] & (WINED3DFMT_FLAG_DEPTH | \
WINED3DFMT_FLAG_STENCIL))) +            {
+                WARN("Format %s cannot be used for depth/stencil buffers.\n", \
debug_d3dformat(format->id)); +                continue;
+            }
+            if (wined3d_settings.offscreen_rendering_mode == ORM_FBO
+                    && bind_flags & (WINED3D_BIND_RENDER_TARGET | \
WINED3D_BIND_DEPTH_STENCIL) +                    && !(format->flags[gl_type] & \
WINED3DFMT_FLAG_FBO_ATTACHABLE)) +            {
+                WARN("Render target or depth stencil is not FBO attachable.\n");
+                continue;
+            }
+            if ((bind_flags & WINED3D_BIND_SHADER_RESOURCE)
+                    && !(format->flags[gl_type] & WINED3DFMT_FLAG_TEXTURE))
+            {
+                WARN("Format %s cannot be used for texturing.\n", \
debug_d3dformat(format->id)); +                continue;
+            }
         }
         if (((width & (width - 1)) || (height & (height - 1)))
                 && !d3d_info->texture_npot
-- 
2.11.0


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic