[PATCH 2/5] wined3d: Move device_clear_render_targets() to texture.c.

Henri Verbeet hverbeet at codeweavers.com
Mon Apr 27 10:48:44 CDT 2020


Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
---
 dlls/wined3d/device.c          | 245 -------------------------------
 dlls/wined3d/texture.c         | 254 ++++++++++++++++++++++++++++++++-
 dlls/wined3d/wined3d_private.h |   3 -
 3 files changed, 251 insertions(+), 251 deletions(-)

diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index b81cc2f53fe..e16bd84164a 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -257,251 +257,6 @@ void device_context_remove(struct wined3d_device *device, struct wined3d_context
     device->contexts = new_array;
 }
 
-static BOOL is_full_clear(const struct wined3d_texture *texture, unsigned int sub_resource_idx,
-        const RECT *draw_rect, const RECT *clear_rect)
-{
-    unsigned int width, height, level;
-
-    level = sub_resource_idx % texture->level_count;
-    width = wined3d_texture_get_level_width(texture, level);
-    height = wined3d_texture_get_level_height(texture, level);
-
-    /* partial draw rect */
-    if (draw_rect->left || draw_rect->top || draw_rect->right < width || draw_rect->bottom < height)
-        return FALSE;
-
-    /* partial clear rect */
-    if (clear_rect && (clear_rect->left > 0 || clear_rect->top > 0
-            || clear_rect->right < width || clear_rect->bottom < height))
-        return FALSE;
-
-    return TRUE;
-}
-
-void device_clear_render_targets(struct wined3d_device *device, UINT rt_count, const struct wined3d_fb_state *fb,
-        UINT rect_count, const RECT *clear_rect, const RECT *draw_rect, DWORD flags, const struct wined3d_color *color,
-        float depth, DWORD stencil)
-{
-    struct wined3d_rendertarget_view *rtv = rt_count ? fb->render_targets[0] : NULL;
-    struct wined3d_rendertarget_view *dsv = fb->depth_stencil;
-    const struct wined3d_state *state = &device->cs->state;
-    struct wined3d_texture *depth_stencil = NULL;
-    const struct wined3d_gl_info *gl_info;
-    struct wined3d_context_gl *context_gl;
-    struct wined3d_texture *target = NULL;
-    UINT drawable_width, drawable_height;
-    struct wined3d_color colour_srgb;
-    struct wined3d_context *context;
-    GLbitfield clear_mask = 0;
-    BOOL render_offscreen;
-    unsigned int i;
-
-    if (rtv && rtv->resource->type != WINED3D_RTYPE_BUFFER)
-    {
-        target = texture_from_resource(rtv->resource);
-        context = context_acquire(device, target, rtv->sub_resource_idx);
-    }
-    else
-    {
-        context = context_acquire(device, NULL, 0);
-    }
-    context_gl = wined3d_context_gl(context);
-
-    if (dsv && dsv->resource->type != WINED3D_RTYPE_BUFFER)
-        depth_stencil = texture_from_resource(dsv->resource);
-
-    if (!context_gl->valid)
-    {
-        context_release(context);
-        WARN("Invalid context, skipping clear.\n");
-        return;
-    }
-    gl_info = context_gl->gl_info;
-
-    /* When we're clearing parts of the drawable, make sure that the target surface is well up to date in the
-     * drawable. After the clear we'll mark the drawable up to date, so we have to make sure that this is true
-     * for the cleared parts, and the untouched parts.
-     *
-     * If we're clearing the whole target there is no need to copy it into the drawable, it will be overwritten
-     * anyway. If we're not clearing the color buffer we don't have to copy either since we're not going to set
-     * the drawable up to date. We have to check all settings that limit the clear area though. Do not bother
-     * checking all this if the dest surface is in the drawable anyway. */
-    for (i = 0; i < rt_count; ++i)
-    {
-        struct wined3d_rendertarget_view *rtv = fb->render_targets[i];
-
-        if (rtv && rtv->format->id != WINED3DFMT_NULL)
-        {
-            struct wined3d_texture *rt = wined3d_texture_from_resource(rtv->resource);
-
-            if (flags & WINED3DCLEAR_TARGET && !is_full_clear(rt, rtv->sub_resource_idx,
-                    draw_rect, rect_count ? clear_rect : NULL))
-                wined3d_texture_load_location(rt, rtv->sub_resource_idx, context, rtv->resource->draw_binding);
-            else
-                wined3d_texture_prepare_location(rt, rtv->sub_resource_idx, context, rtv->resource->draw_binding);
-        }
-    }
-
-    if (target)
-    {
-        render_offscreen = context->render_offscreen;
-        wined3d_rendertarget_view_get_drawable_size(rtv, context, &drawable_width, &drawable_height);
-    }
-    else
-    {
-        unsigned int ds_level = dsv->sub_resource_idx % depth_stencil->level_count;
-
-        render_offscreen = TRUE;
-        drawable_width = wined3d_texture_get_level_pow2_width(depth_stencil, ds_level);
-        drawable_height = wined3d_texture_get_level_pow2_height(depth_stencil, ds_level);
-    }
-
-    if (depth_stencil)
-    {
-        DWORD ds_location = render_offscreen ? dsv->resource->draw_binding : WINED3D_LOCATION_DRAWABLE;
-        struct wined3d_texture *ds = wined3d_texture_from_resource(dsv->resource);
-
-        if (flags & (WINED3DCLEAR_ZBUFFER | WINED3DCLEAR_STENCIL)
-                && !is_full_clear(ds, dsv->sub_resource_idx, draw_rect, rect_count ? clear_rect : NULL))
-            wined3d_texture_load_location(ds, dsv->sub_resource_idx, context, ds_location);
-        else
-            wined3d_texture_prepare_location(ds, dsv->sub_resource_idx, context, ds_location);
-
-        if (flags & (WINED3DCLEAR_ZBUFFER | WINED3DCLEAR_STENCIL))
-        {
-            wined3d_texture_validate_location(ds, dsv->sub_resource_idx, ds_location);
-            wined3d_texture_invalidate_location(ds, dsv->sub_resource_idx, ~ds_location);
-        }
-    }
-
-    if (!wined3d_context_gl_apply_clear_state(context_gl, state, rt_count, fb))
-    {
-        context_release(context);
-        WARN("Failed to apply clear state, skipping clear.\n");
-        return;
-    }
-
-    /* Only set the values up once, as they are not changing. */
-    if (flags & WINED3DCLEAR_STENCIL)
-    {
-        if (gl_info->supported[EXT_STENCIL_TWO_SIDE])
-        {
-            gl_info->gl_ops.gl.p_glDisable(GL_STENCIL_TEST_TWO_SIDE_EXT);
-            context_invalidate_state(context, STATE_RENDER(WINED3D_RS_TWOSIDEDSTENCILMODE));
-        }
-        gl_info->gl_ops.gl.p_glStencilMask(~0U);
-        context_invalidate_state(context, STATE_RENDER(WINED3D_RS_STENCILWRITEMASK));
-        gl_info->gl_ops.gl.p_glClearStencil(stencil);
-        checkGLcall("glClearStencil");
-        clear_mask = clear_mask | GL_STENCIL_BUFFER_BIT;
-    }
-
-    if (flags & WINED3DCLEAR_ZBUFFER)
-    {
-        gl_info->gl_ops.gl.p_glDepthMask(GL_TRUE);
-        context_invalidate_state(context, STATE_RENDER(WINED3D_RS_ZWRITEENABLE));
-        gl_info->gl_ops.gl.p_glClearDepth(depth);
-        checkGLcall("glClearDepth");
-        clear_mask = clear_mask | GL_DEPTH_BUFFER_BIT;
-    }
-
-    if (flags & WINED3DCLEAR_TARGET)
-    {
-        for (i = 0; i < rt_count; ++i)
-        {
-            struct wined3d_rendertarget_view *rtv = fb->render_targets[i];
-            struct wined3d_texture *texture;
-
-            if (!rtv)
-                continue;
-
-            if (rtv->resource->type == WINED3D_RTYPE_BUFFER)
-            {
-                FIXME("Not supported on buffer resources.\n");
-                continue;
-            }
-
-            texture = texture_from_resource(rtv->resource);
-            wined3d_texture_validate_location(texture, rtv->sub_resource_idx, rtv->resource->draw_binding);
-            wined3d_texture_invalidate_location(texture, rtv->sub_resource_idx, ~rtv->resource->draw_binding);
-        }
-
-        if (!gl_info->supported[ARB_FRAMEBUFFER_SRGB] && needs_srgb_write(context->d3d_info, state, fb))
-        {
-            if (rt_count > 1)
-                WARN("Clearing multiple sRGB render targets without GL_ARB_framebuffer_sRGB "
-                        "support, this might cause graphical issues.\n");
-
-            wined3d_colour_srgb_from_linear(&colour_srgb, color);
-            color = &colour_srgb;
-        }
-
-        gl_info->gl_ops.gl.p_glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
-        context_invalidate_state(context, STATE_BLEND);
-        gl_info->gl_ops.gl.p_glClearColor(color->r, color->g, color->b, color->a);
-        checkGLcall("glClearColor");
-        clear_mask = clear_mask | GL_COLOR_BUFFER_BIT;
-    }
-
-    if (!rect_count)
-    {
-        if (render_offscreen)
-        {
-            gl_info->gl_ops.gl.p_glScissor(draw_rect->left, draw_rect->top,
-                    draw_rect->right - draw_rect->left, draw_rect->bottom - draw_rect->top);
-        }
-        else
-        {
-            gl_info->gl_ops.gl.p_glScissor(draw_rect->left, drawable_height - draw_rect->bottom,
-                        draw_rect->right - draw_rect->left, draw_rect->bottom - draw_rect->top);
-        }
-        gl_info->gl_ops.gl.p_glClear(clear_mask);
-    }
-    else
-    {
-        RECT current_rect;
-
-        /* Now process each rect in turn. */
-        for (i = 0; i < rect_count; ++i)
-        {
-            /* Note that GL uses lower left, width/height. */
-            IntersectRect(&current_rect, draw_rect, &clear_rect[i]);
-
-            TRACE("clear_rect[%u] %s, current_rect %s.\n", i,
-                    wine_dbgstr_rect(&clear_rect[i]),
-                    wine_dbgstr_rect(&current_rect));
-
-            /* Tests show that rectangles where x1 > x2 or y1 > y2 are ignored silently.
-             * The rectangle is not cleared, no error is returned, but further rectangles are
-             * still cleared if they are valid. */
-            if (current_rect.left > current_rect.right || current_rect.top > current_rect.bottom)
-            {
-                TRACE("Rectangle with negative dimensions, ignoring.\n");
-                continue;
-            }
-
-            if (render_offscreen)
-            {
-                gl_info->gl_ops.gl.p_glScissor(current_rect.left, current_rect.top,
-                        current_rect.right - current_rect.left, current_rect.bottom - current_rect.top);
-            }
-            else
-            {
-                gl_info->gl_ops.gl.p_glScissor(current_rect.left, drawable_height - current_rect.bottom,
-                          current_rect.right - current_rect.left, current_rect.bottom - current_rect.top);
-            }
-            gl_info->gl_ops.gl.p_glClear(clear_mask);
-        }
-    }
-    context->scissor_rect_count = WINED3D_MAX_VIEWPORTS;
-    checkGLcall("clear");
-
-    if (flags & WINED3DCLEAR_TARGET && target->swapchain && target->swapchain->front_buffer == target)
-        gl_info->gl_ops.gl.p_glFlush();
-
-    context_release(context);
-}
-
 ULONG CDECL wined3d_device_incref(struct wined3d_device *device)
 {
     ULONG refcount = InterlockedIncrement(&device->ref);
diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c
index 7ede5dea9da..5b0b070998b 100644
--- a/dlls/wined3d/texture.c
+++ b/dlls/wined3d/texture.c
@@ -5176,6 +5176,254 @@ static bool ffp_blit_supported(enum wined3d_blit_op blit_op, const struct wined3
     }
 }
 
+static bool is_full_clear(const struct wined3d_texture *texture, unsigned int sub_resource_idx,
+        const RECT *draw_rect, const RECT *clear_rect)
+{
+    unsigned int width, height, level;
+
+    level = sub_resource_idx % texture->level_count;
+    width = wined3d_texture_get_level_width(texture, level);
+    height = wined3d_texture_get_level_height(texture, level);
+
+    /* partial draw rect */
+    if (draw_rect->left || draw_rect->top || draw_rect->right < width || draw_rect->bottom < height)
+        return false;
+
+    /* partial clear rect */
+    if (clear_rect && (clear_rect->left > 0 || clear_rect->top > 0
+            || clear_rect->right < width || clear_rect->bottom < height))
+        return false;
+
+    return true;
+}
+
+static void ffp_blitter_clear_rendertargets(struct wined3d_device *device, unsigned int rt_count,
+        const struct wined3d_fb_state *fb, unsigned int rect_count, const RECT *clear_rect, const RECT *draw_rect,
+        uint32_t flags, const struct wined3d_color *colour, float depth, unsigned int stencil)
+{
+    struct wined3d_rendertarget_view *rtv = rt_count ? fb->render_targets[0] : NULL;
+    struct wined3d_rendertarget_view *dsv = fb->depth_stencil;
+    const struct wined3d_state *state = &device->cs->state;
+    struct wined3d_texture *depth_stencil = NULL;
+    unsigned int drawable_width, drawable_height;
+    const struct wined3d_gl_info *gl_info;
+    struct wined3d_context_gl *context_gl;
+    struct wined3d_texture *target = NULL;
+    struct wined3d_color colour_srgb;
+    struct wined3d_context *context;
+    GLbitfield clear_mask = 0;
+    bool render_offscreen;
+    unsigned int i;
+
+    if (rtv && rtv->resource->type != WINED3D_RTYPE_BUFFER)
+    {
+        target = texture_from_resource(rtv->resource);
+        context = context_acquire(device, target, rtv->sub_resource_idx);
+    }
+    else
+    {
+        context = context_acquire(device, NULL, 0);
+    }
+    context_gl = wined3d_context_gl(context);
+
+    if (dsv && dsv->resource->type != WINED3D_RTYPE_BUFFER)
+        depth_stencil = texture_from_resource(dsv->resource);
+
+    if (!context_gl->valid)
+    {
+        context_release(context);
+        WARN("Invalid context, skipping clear.\n");
+        return;
+    }
+    gl_info = context_gl->gl_info;
+
+    /* When we're clearing parts of the drawable, make sure that the target
+     * surface is well up to date in the drawable. After the clear we'll mark
+     * the drawable up to date, so we have to make sure that this is true for
+     * the cleared parts, and the untouched parts.
+     *
+     * If we're clearing the whole target there is no need to copy it into the
+     * drawable, it will be overwritten anyway. If we're not clearing the
+     * colour buffer we don't have to copy either since we're not going to set
+     * the drawable up to date. We have to check all settings that limit the
+     * clear area though. Do not bother checking all this if the destination
+     * surface is in the drawable anyway. */
+    for (i = 0; i < rt_count; ++i)
+    {
+        struct wined3d_rendertarget_view *rtv = fb->render_targets[i];
+
+        if (rtv && rtv->format->id != WINED3DFMT_NULL)
+        {
+            struct wined3d_texture *rt = wined3d_texture_from_resource(rtv->resource);
+
+            if (flags & WINED3DCLEAR_TARGET && !is_full_clear(rt, rtv->sub_resource_idx,
+                    draw_rect, rect_count ? clear_rect : NULL))
+                wined3d_texture_load_location(rt, rtv->sub_resource_idx, context, rtv->resource->draw_binding);
+            else
+                wined3d_texture_prepare_location(rt, rtv->sub_resource_idx, context, rtv->resource->draw_binding);
+        }
+    }
+
+    if (target)
+    {
+        render_offscreen = context->render_offscreen;
+        wined3d_rendertarget_view_get_drawable_size(rtv, context, &drawable_width, &drawable_height);
+    }
+    else
+    {
+        unsigned int ds_level = dsv->sub_resource_idx % depth_stencil->level_count;
+
+        render_offscreen = true;
+        drawable_width = wined3d_texture_get_level_pow2_width(depth_stencil, ds_level);
+        drawable_height = wined3d_texture_get_level_pow2_height(depth_stencil, ds_level);
+    }
+
+    if (depth_stencil)
+    {
+        DWORD ds_location = render_offscreen ? dsv->resource->draw_binding : WINED3D_LOCATION_DRAWABLE;
+        struct wined3d_texture *ds = wined3d_texture_from_resource(dsv->resource);
+
+        if (flags & (WINED3DCLEAR_ZBUFFER | WINED3DCLEAR_STENCIL)
+                && !is_full_clear(ds, dsv->sub_resource_idx, draw_rect, rect_count ? clear_rect : NULL))
+            wined3d_texture_load_location(ds, dsv->sub_resource_idx, context, ds_location);
+        else
+            wined3d_texture_prepare_location(ds, dsv->sub_resource_idx, context, ds_location);
+
+        if (flags & (WINED3DCLEAR_ZBUFFER | WINED3DCLEAR_STENCIL))
+        {
+            wined3d_texture_validate_location(ds, dsv->sub_resource_idx, ds_location);
+            wined3d_texture_invalidate_location(ds, dsv->sub_resource_idx, ~ds_location);
+        }
+    }
+
+    if (!wined3d_context_gl_apply_clear_state(context_gl, state, rt_count, fb))
+    {
+        context_release(context);
+        WARN("Failed to apply clear state, skipping clear.\n");
+        return;
+    }
+
+    /* Only set the values up once, as they are not changing. */
+    if (flags & WINED3DCLEAR_STENCIL)
+    {
+        if (gl_info->supported[EXT_STENCIL_TWO_SIDE])
+        {
+            gl_info->gl_ops.gl.p_glDisable(GL_STENCIL_TEST_TWO_SIDE_EXT);
+            context_invalidate_state(context, STATE_RENDER(WINED3D_RS_TWOSIDEDSTENCILMODE));
+        }
+        gl_info->gl_ops.gl.p_glStencilMask(~0u);
+        context_invalidate_state(context, STATE_RENDER(WINED3D_RS_STENCILWRITEMASK));
+        gl_info->gl_ops.gl.p_glClearStencil(stencil);
+        checkGLcall("glClearStencil");
+        clear_mask = clear_mask | GL_STENCIL_BUFFER_BIT;
+    }
+
+    if (flags & WINED3DCLEAR_ZBUFFER)
+    {
+        gl_info->gl_ops.gl.p_glDepthMask(GL_TRUE);
+        context_invalidate_state(context, STATE_RENDER(WINED3D_RS_ZWRITEENABLE));
+        gl_info->gl_ops.gl.p_glClearDepth(depth);
+        checkGLcall("glClearDepth");
+        clear_mask = clear_mask | GL_DEPTH_BUFFER_BIT;
+    }
+
+    if (flags & WINED3DCLEAR_TARGET)
+    {
+        for (i = 0; i < rt_count; ++i)
+        {
+            struct wined3d_rendertarget_view *rtv = fb->render_targets[i];
+            struct wined3d_texture *texture;
+
+            if (!rtv)
+                continue;
+
+            if (rtv->resource->type == WINED3D_RTYPE_BUFFER)
+            {
+                FIXME("Not supported on buffer resources.\n");
+                continue;
+            }
+
+            texture = texture_from_resource(rtv->resource);
+            wined3d_texture_validate_location(texture, rtv->sub_resource_idx, rtv->resource->draw_binding);
+            wined3d_texture_invalidate_location(texture, rtv->sub_resource_idx, ~rtv->resource->draw_binding);
+        }
+
+        if (!gl_info->supported[ARB_FRAMEBUFFER_SRGB] && needs_srgb_write(context->d3d_info, state, fb))
+        {
+            if (rt_count > 1)
+                WARN("Clearing multiple sRGB render targets without GL_ARB_framebuffer_sRGB "
+                        "support, this might cause graphical issues.\n");
+
+            wined3d_colour_srgb_from_linear(&colour_srgb, colour);
+            colour = &colour_srgb;
+        }
+
+        gl_info->gl_ops.gl.p_glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+        context_invalidate_state(context, STATE_BLEND);
+        gl_info->gl_ops.gl.p_glClearColor(colour->r, colour->g, colour->b, colour->a);
+        checkGLcall("glClearColor");
+        clear_mask = clear_mask | GL_COLOR_BUFFER_BIT;
+    }
+
+    if (!rect_count)
+    {
+        if (render_offscreen)
+        {
+            gl_info->gl_ops.gl.p_glScissor(draw_rect->left, draw_rect->top,
+                    draw_rect->right - draw_rect->left, draw_rect->bottom - draw_rect->top);
+        }
+        else
+        {
+            gl_info->gl_ops.gl.p_glScissor(draw_rect->left, drawable_height - draw_rect->bottom,
+                        draw_rect->right - draw_rect->left, draw_rect->bottom - draw_rect->top);
+        }
+        gl_info->gl_ops.gl.p_glClear(clear_mask);
+    }
+    else
+    {
+        RECT current_rect;
+
+        /* Now process each rect in turn. */
+        for (i = 0; i < rect_count; ++i)
+        {
+            /* Note that GL uses lower left, width/height. */
+            IntersectRect(&current_rect, draw_rect, &clear_rect[i]);
+
+            TRACE("clear_rect[%u] %s, current_rect %s.\n", i,
+                    wine_dbgstr_rect(&clear_rect[i]),
+                    wine_dbgstr_rect(&current_rect));
+
+            /* Tests show that rectangles where x1 > x2 or y1 > y2 are ignored
+             * silently. The rectangle is not cleared, no error is returned,
+             * but further rectangles are still cleared if they are valid. */
+            if (current_rect.left > current_rect.right || current_rect.top > current_rect.bottom)
+            {
+                TRACE("Rectangle with negative dimensions, ignoring.\n");
+                continue;
+            }
+
+            if (render_offscreen)
+            {
+                gl_info->gl_ops.gl.p_glScissor(current_rect.left, current_rect.top,
+                        current_rect.right - current_rect.left, current_rect.bottom - current_rect.top);
+            }
+            else
+            {
+                gl_info->gl_ops.gl.p_glScissor(current_rect.left, drawable_height - current_rect.bottom,
+                          current_rect.right - current_rect.left, current_rect.bottom - current_rect.top);
+            }
+            gl_info->gl_ops.gl.p_glClear(clear_mask);
+        }
+    }
+    context->scissor_rect_count = WINED3D_MAX_VIEWPORTS;
+    checkGLcall("clear");
+
+    if (flags & WINED3DCLEAR_TARGET && target->swapchain && target->swapchain->front_buffer == target)
+        gl_info->gl_ops.gl.p_glFlush();
+
+    context_release(context);
+}
+
 static bool ffp_blitter_use_cpu_clear(struct wined3d_rendertarget_view *view)
 {
     struct wined3d_resource *resource;
@@ -5262,7 +5510,7 @@ static void ffp_blitter_clear(struct wined3d_blitter *blitter, struct wined3d_de
 
         if (have_identical_size)
         {
-            device_clear_render_targets(device, rt_count, fb, rect_count,
+            ffp_blitter_clear_rendertargets(device, rt_count, fb, rect_count,
                     clear_rects, draw_rect, flags, colour, depth, stencil);
         }
         else
@@ -5274,14 +5522,14 @@ static void ffp_blitter_clear(struct wined3d_blitter *blitter, struct wined3d_de
 
                 tmp_fb.render_targets[0] = view;
                 tmp_fb.depth_stencil = NULL;
-                device_clear_render_targets(device, 1, &tmp_fb, rect_count,
+                ffp_blitter_clear_rendertargets(device, 1, &tmp_fb, rect_count,
                         clear_rects, draw_rect, WINED3DCLEAR_TARGET, colour, depth, stencil);
             }
             if (flags & (WINED3DCLEAR_ZBUFFER | WINED3DCLEAR_STENCIL))
             {
                 tmp_fb.render_targets[0] = NULL;
                 tmp_fb.depth_stencil = fb->depth_stencil;
-                device_clear_render_targets(device, 0, &tmp_fb, rect_count,
+                ffp_blitter_clear_rendertargets(device, 0, &tmp_fb, rect_count,
                         clear_rects, draw_rect, flags & ~WINED3DCLEAR_TARGET, colour, depth, stencil);
             }
         }
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 9ced75711f3..2faeca4b35d 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -3431,9 +3431,6 @@ struct wined3d_device
 };
 
 void wined3d_device_cleanup(struct wined3d_device *device) DECLSPEC_HIDDEN;
-void device_clear_render_targets(struct wined3d_device *device, UINT rt_count, const struct wined3d_fb_state *fb,
-        UINT rect_count, const RECT *rects, const RECT *draw_rect, DWORD flags,
-        const struct wined3d_color *color, float depth, DWORD stencil) DECLSPEC_HIDDEN;
 BOOL device_context_add(struct wined3d_device *device, struct wined3d_context *context) DECLSPEC_HIDDEN;
 void device_context_remove(struct wined3d_device *device, struct wined3d_context *context) DECLSPEC_HIDDEN;
 void wined3d_device_create_default_samplers(struct wined3d_device *device,
-- 
2.20.1




More information about the wine-devel mailing list