[PATCH 1/5] d3d9: Correct ColorFill validation.

Stefan Dösinger stefan at codeweavers.com
Thu Mar 12 04:55:15 CDT 2015


---
 dlls/d3d9/device.c | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/dlls/d3d9/device.c b/dlls/d3d9/device.c
index a80b30a..da462b1 100644
--- a/dlls/d3d9/device.c
+++ b/dlls/d3d9/device.c
@@ -1287,18 +1287,22 @@ static HRESULT WINAPI d3d9_device_ColorFill(IDirect3DDevice9Ex *iface,
     wined3d_resource = wined3d_surface_get_resource(surface_impl->wined3d_surface);
     wined3d_resource_get_desc(wined3d_resource, &desc);
 
-    /* This method is only allowed with surfaces that are render targets, or
-     * offscreen plain surfaces in D3DPOOL_DEFAULT. */
-    if (!(desc.usage & WINED3DUSAGE_RENDERTARGET) && desc.pool != WINED3D_POOL_DEFAULT)
+    if (desc.pool != WINED3D_POOL_DEFAULT)
     {
         wined3d_mutex_unlock();
-        WARN("Surface is not a render target, or not a stand-alone D3DPOOL_DEFAULT surface\n");
+        WARN("Colorfill is not allowed on surfaces in pool %#x, returning D3DERR_INVALIDCALL.\n", desc.pool);
         return D3DERR_INVALIDCALL;
     }
-
-    if (desc.pool != WINED3D_POOL_DEFAULT && desc.pool != WINED3D_POOL_SYSTEM_MEM)
+    if ((desc.usage & (WINED3DUSAGE_RENDERTARGET | WINED3DUSAGE_TEXTURE)) == WINED3DUSAGE_TEXTURE)
+    {
+        wined3d_mutex_unlock();
+        WARN("Colorfill is not allowed on non-RT textures, returning D3DERR_INVALIDCALL.\n");
+        return D3DERR_INVALIDCALL;
+    }
+    if (desc.usage & WINED3DUSAGE_DEPTHSTENCIL)
     {
-        WARN("Color-fill not allowed on surfaces in pool %#x.\n", desc.pool);
+        wined3d_mutex_unlock();
+        WARN("Colorfill is not allowed on depth stencil surfaces, returning D3DERR_INVALIDCALL.\n");
         return D3DERR_INVALIDCALL;
     }
 
-- 
2.3.0




More information about the wine-patches mailing list