diff --git a/dlls/ddraw/ddraw_private.h b/dlls/ddraw/ddraw_private.h
index 09e8133350b..afb02e04791 100644
--- a/dlls/ddraw/ddraw_private.h
+++ b/dlls/ddraw/ddraw_private.h
@@ -328,7 +328,7 @@ struct d3d_device
     LONG ref;
     UINT version;
     BOOL hardware_device;
-    BOOL have_draw_textures;
+    uint32_t draw_texture_mask;
 
     IUnknown *outer_unknown;
     struct wined3d_device *wined3d_device;
diff --git a/dlls/ddraw/device.c b/dlls/ddraw/device.c
index 1cfef5007d5..4c08c31b1b8 100644
--- a/dlls/ddraw/device.c
+++ b/dlls/ddraw/device.c
@@ -3411,7 +3411,7 @@ void d3d_device_sync_surfaces(struct d3d_device *device)
 
     d3d_device_sync_rendertarget(device);
 
-    if (!device->have_draw_textures)
+    if (!device->draw_texture_mask)
         return;
 
     for (i = 0; i < ARRAY_SIZE(state->textures); ++i)
@@ -4646,11 +4646,12 @@ static HRESULT d3d_device7_SetTexture(IDirect3DDevice7 *iface,
         if (surf->draw_texture)
         {
             wined3d_texture = surf->draw_texture;
-            device->have_draw_textures = TRUE;
+            device->draw_texture_mask |= (1u << stage);
         }
         else
         {
             wined3d_texture = surf->wined3d_texture;
+            device->draw_texture_mask &= ~(1u << stage);
         }
     }
 
@@ -4696,11 +4697,12 @@ static HRESULT WINAPI d3d_device3_SetTexture(IDirect3DDevice3 *iface,
         if (tex->draw_texture)
         {
             wined3d_texture = tex->draw_texture;
-            device->have_draw_textures = TRUE;
+            device->draw_texture_mask |= (1u << stage);
         }
         else
         {
             wined3d_texture = tex->wined3d_texture;
+            device->draw_texture_mask &= ~(1u << stage);
         }
     }
 
