Henri Verbeet : wined3d: Validate format capabilities against the bind flags instead of the usage flags in resource_init ().

Alexandre Julliard julliard at winehq.org
Wed Oct 31 15:58:32 CDT 2018


Module: wine
Branch: master
Commit: 00275acca850a337f5e97f78bb2d8eaea00ffc1b
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=00275acca850a337f5e97f78bb2d8eaea00ffc1b

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Wed Oct 31 13:19:51 2018 +0330

wined3d: Validate format capabilities against the bind flags instead of the usage flags in resource_init().

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 at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 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 512546d..ff58456 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




More information about the wine-cvs mailing list