Henri Verbeet : wined3d: Load/invalidate entire views in ffp_blitter_clear_rendertargets().

Alexandre Julliard julliard at winehq.org
Thu Feb 25 16:45:36 CST 2021


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

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Wed Feb 24 22:57:05 2021 +0100

wined3d: Load/invalidate entire views in ffp_blitter_clear_rendertargets().

In particular, clearing a multi-layer view affects all layers, not just the
first.

Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/d3d10core/tests/d3d10core.c |  4 ++--
 dlls/d3d11/tests/d3d11.c         |  4 ++--
 dlls/wined3d/texture.c           | 21 ++++++++-------------
 3 files changed, 12 insertions(+), 17 deletions(-)

diff --git a/dlls/d3d10core/tests/d3d10core.c b/dlls/d3d10core/tests/d3d10core.c
index a5b2620d98a..b2a2e2028f2 100644
--- a/dlls/d3d10core/tests/d3d10core.c
+++ b/dlls/d3d10core/tests/d3d10core.c
@@ -11250,12 +11250,12 @@ static void test_clear_render_target_view_2d(void)
 
     get_texture_readback(texture, 3, &rb);
     colour = get_readback_color(&rb, 8, 8);
-    todo_wine ok(compare_color(colour, 0x8000ff00, 1), "Got unexpected colour 0x%08x.\n", colour);
+    ok(compare_color(colour, 0x8000ff00, 1), "Got unexpected colour 0x%08x.\n", colour);
     release_resource_readback(&rb);
 
     get_texture_readback(texture, 4, &rb);
     colour = get_readback_color(&rb, 8, 8);
-    todo_wine ok(compare_color(colour, 0x80ff0000, 1), "Got unexpected colour 0x%08x.\n", colour);
+    ok(compare_color(colour, 0x80ff0000, 1), "Got unexpected colour 0x%08x.\n", colour);
     release_resource_readback(&rb);
 
     ID3D10RenderTargetView_Release(rtv[2]);
diff --git a/dlls/d3d11/tests/d3d11.c b/dlls/d3d11/tests/d3d11.c
index a331baf48a0..c40593d31d8 100644
--- a/dlls/d3d11/tests/d3d11.c
+++ b/dlls/d3d11/tests/d3d11.c
@@ -15580,12 +15580,12 @@ static void test_clear_render_target_view_2d(void)
 
     get_texture_readback(texture, 3, &rb);
     colour = get_readback_color(&rb, 8, 8, 0);
-    todo_wine ok(compare_color(colour, 0x8000ff00, 1), "Got unexpected colour 0x%08x.\n", colour);
+    ok(compare_color(colour, 0x8000ff00, 1), "Got unexpected colour 0x%08x.\n", colour);
     release_resource_readback(&rb);
 
     get_texture_readback(texture, 4, &rb);
     colour = get_readback_color(&rb, 8, 8, 0);
-    todo_wine ok(compare_color(colour, 0x80ff0000, 1), "Got unexpected colour 0x%08x.\n", colour);
+    ok(compare_color(colour, 0x80ff0000, 1), "Got unexpected colour 0x%08x.\n", colour);
     release_resource_readback(&rb);
 
     ID3D11RenderTargetView_Release(rtv[2]);
diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c
index b53cd02d75c..d6408fb1c7a 100644
--- a/dlls/wined3d/texture.c
+++ b/dlls/wined3d/texture.c
@@ -5366,12 +5366,10 @@ static void ffp_blitter_clear_rendertargets(struct wined3d_device *device, unsig
 
         if (rtv && rtv->format->id != WINED3DFMT_NULL)
         {
-            struct wined3d_texture *rt = wined3d_texture_from_resource(rtv->resource);
-
             if (flags & WINED3DCLEAR_TARGET && !is_full_clear(rtv, draw_rect, rect_count ? clear_rect : NULL))
-                wined3d_texture_load_location(rt, rtv->sub_resource_idx, context, rtv->resource->draw_binding);
+                wined3d_rendertarget_view_load_location(rtv, context, rtv->resource->draw_binding);
             else
-                wined3d_texture_prepare_location(rt, rtv->sub_resource_idx, context, rtv->resource->draw_binding);
+                wined3d_rendertarget_view_prepare_location(rtv, context, rtv->resource->draw_binding);
         }
     }
 
@@ -5392,18 +5390,17 @@ static void ffp_blitter_clear_rendertargets(struct wined3d_device *device, unsig
     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(dsv, draw_rect, rect_count ? clear_rect : NULL))
-            wined3d_texture_load_location(ds, dsv->sub_resource_idx, context, ds_location);
+            wined3d_rendertarget_view_load_location(dsv, context, ds_location);
         else
-            wined3d_texture_prepare_location(ds, dsv->sub_resource_idx, context, ds_location);
+            wined3d_rendertarget_view_prepare_location(dsv, 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);
+            wined3d_rendertarget_view_validate_location(dsv, ds_location);
+            wined3d_rendertarget_view_invalidate_location(dsv, ~ds_location);
         }
     }
 
@@ -5443,7 +5440,6 @@ static void ffp_blitter_clear_rendertargets(struct wined3d_device *device, unsig
         for (i = 0; i < rt_count; ++i)
         {
             struct wined3d_rendertarget_view *rtv = fb->render_targets[i];
-            struct wined3d_texture *texture;
 
             if (!rtv)
                 continue;
@@ -5454,9 +5450,8 @@ static void ffp_blitter_clear_rendertargets(struct wined3d_device *device, unsig
                 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);
+            wined3d_rendertarget_view_validate_location(rtv, rtv->resource->draw_binding);
+            wined3d_rendertarget_view_invalidate_location(rtv, ~rtv->resource->draw_binding);
         }
 
         if (!gl_info->supported[ARB_FRAMEBUFFER_SRGB] && needs_srgb_write(context->d3d_info, state, fb))




More information about the wine-cvs mailing list