[PATCH 5/8] wined3d: Access render target view resources through wined3d_rendertarget_view_get_resource.

Stefan Dösinger stefan at codeweavers.com
Mon Sep 14 12:17:49 CDT 2015


---
 dlls/wined3d/context.c         | 12 ++++++------
 dlls/wined3d/device.c          | 12 +++++++-----
 dlls/wined3d/drawprim.c        |  4 ++--
 dlls/wined3d/view.c            | 10 +++++-----
 dlls/wined3d/wined3d_private.h |  5 +++--
 5 files changed, 23 insertions(+), 20 deletions(-)

diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c
index 3e2a804..561318a 100644
--- a/dlls/wined3d/context.c
+++ b/dlls/wined3d/context.c
@@ -2381,7 +2381,7 @@ BOOL context_apply_clear_state(struct wined3d_context *context, const struct win
         {
             context_validate_onscreen_formats(context, dsv);
 
-            if (!rt_count || wined3d_resource_is_offscreen(rts[0]->resource))
+            if (!rt_count || wined3d_resource_is_offscreen(wined3d_rendertarget_view_get_resource(rts[0])))
             {
                 for (i = 0; i < rt_count; ++i)
                 {
@@ -2396,8 +2396,8 @@ BOOL context_apply_clear_state(struct wined3d_context *context, const struct win
                 }
                 context_apply_fbo_state(context, GL_FRAMEBUFFER, context->blit_targets,
                         wined3d_rendertarget_view_get_surface(dsv),
-                        rt_count ? rts[0]->resource->draw_binding : 0,
-                        dsv ? dsv->resource->draw_binding : 0);
+                        rt_count ? wined3d_rendertarget_view_get_resource(rts[0])->draw_binding : 0,
+                        dsv ? wined3d_rendertarget_view_get_resource(dsv)->draw_binding : 0);
             }
             else
             {
@@ -2418,7 +2418,7 @@ BOOL context_apply_clear_state(struct wined3d_context *context, const struct win
         }
     }
     else if (wined3d_settings.offscreen_rendering_mode == ORM_FBO
-            && (!rt_count || wined3d_resource_is_offscreen(rts[0]->resource)))
+            && (!rt_count || wined3d_resource_is_offscreen(wined3d_rendertarget_view_get_resource(rts[0]))))
     {
         for (i = 0; i < rt_count; ++i)
         {
@@ -2517,8 +2517,8 @@ void context_state_fb(struct wined3d_context *context, const struct wined3d_stat
             }
             context_apply_fbo_state(context, GL_FRAMEBUFFER, context->blit_targets,
                     wined3d_rendertarget_view_get_surface(fb->depth_stencil),
-                    fb->render_targets[0]->resource->draw_binding,
-                    fb->depth_stencil ? fb->depth_stencil->resource->draw_binding : 0);
+                    wined3d_rendertarget_view_get_resource(fb->render_targets[0])->draw_binding,
+                    fb->depth_stencil ? wined3d_rendertarget_view_get_resource(fb->depth_stencil)->draw_binding : 0);
         }
     }
 
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index e81366c..64d80b3 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -341,7 +341,8 @@ void device_clear_render_targets(struct wined3d_device *device, UINT rt_count, c
 
     if (flags & WINED3DCLEAR_ZBUFFER)
     {
-        DWORD location = render_offscreen ? fb->depth_stencil->resource->draw_binding : WINED3D_LOCATION_DRAWABLE;
+        DWORD location = render_offscreen ?
+                wined3d_rendertarget_view_get_resource(fb->depth_stencil)->draw_binding : WINED3D_LOCATION_DRAWABLE;
 
         if (!render_offscreen && depth_stencil != device->onscreen_depth_stencil)
             device_switch_onscreen_ds(device, context, depth_stencil);
@@ -373,7 +374,8 @@ void device_clear_render_targets(struct wined3d_device *device, UINT rt_count, c
 
     if (flags & WINED3DCLEAR_ZBUFFER)
     {
-        DWORD location = render_offscreen ? fb->depth_stencil->resource->draw_binding : WINED3D_LOCATION_DRAWABLE;
+        DWORD location = render_offscreen ?
+                wined3d_rendertarget_view_get_resource(fb->depth_stencil)->draw_binding : WINED3D_LOCATION_DRAWABLE;
 
         surface_modify_ds_location(depth_stencil, location, ds_rect.right, ds_rect.bottom);
 
@@ -4036,7 +4038,7 @@ HRESULT CDECL wined3d_device_clear_rendertarget_view(struct wined3d_device *devi
     TRACE("device %p, view %p, rect %s, color {%.8e, %.8e, %.8e, %.8e}.\n",
             device, view, wine_dbgstr_rect(rect), color->r, color->g, color->b, color->a);
 
-    resource = view->resource;
+    resource = wined3d_rendertarget_view_get_resource(view);
     if (resource->type != WINED3D_RTYPE_TEXTURE && resource->type != WINED3D_RTYPE_CUBE_TEXTURE)
     {
         FIXME("Not implemented for %s resources.\n", debug_d3dresourcetype(resource->type));
@@ -4095,9 +4097,9 @@ HRESULT CDECL wined3d_device_set_rendertarget_view(struct wined3d_device *device
         return WINED3DERR_INVALIDCALL;
     }
 
-    if (view && !(view->resource->usage & WINED3DUSAGE_RENDERTARGET))
+    if (view && !(wined3d_rendertarget_view_get_resource(view)->usage & WINED3DUSAGE_RENDERTARGET))
     {
-        WARN("View resource %p doesn't have render target usage.\n", view->resource);
+        WARN("View resource %p doesn't have render target usage.\n", wined3d_rendertarget_view_get_resource(view));
         return WINED3DERR_INVALIDCALL;
     }
 
diff --git a/dlls/wined3d/drawprim.c b/dlls/wined3d/drawprim.c
index dcfebe4..8f2c22c 100644
--- a/dlls/wined3d/drawprim.c
+++ b/dlls/wined3d/drawprim.c
@@ -641,8 +641,8 @@ void draw_primitive(struct wined3d_device *device, UINT start_idx, UINT index_co
          * Z-compare function into account, but we could skip loading the
          * depthstencil for D3DCMP_NEVER and D3DCMP_ALWAYS as well. Also note
          * that we never copy the stencil data.*/
-        DWORD location = context->render_offscreen ? device->fb.depth_stencil->resource->draw_binding
-                : WINED3D_LOCATION_DRAWABLE;
+        DWORD location = context->render_offscreen ?
+                wined3d_rendertarget_view_get_resource(device->fb.depth_stencil)->draw_binding : WINED3D_LOCATION_DRAWABLE;
         if (state->render_states[WINED3D_RS_ZWRITEENABLE] || state->render_states[WINED3D_RS_ZENABLE])
         {
             struct wined3d_surface *ds = wined3d_rendertarget_view_get_surface(device->fb.depth_stencil);
diff --git a/dlls/wined3d/view.c b/dlls/wined3d/view.c
index 1ff36da..694b65f 100644
--- a/dlls/wined3d/view.c
+++ b/dlls/wined3d/view.c
@@ -44,7 +44,7 @@ ULONG CDECL wined3d_rendertarget_view_decref(struct wined3d_rendertarget_view *v
         /* Call wined3d_object_destroyed() before releasing the resource,
          * since releasing the resource may end up destroying the parent. */
         view->parent_ops->wined3d_object_destroyed(view->parent);
-        wined3d_resource_decref(view->resource);
+        wined3d_resource_decref(wined3d_rendertarget_view_get_resource(view));
         HeapFree(GetProcessHeap(), 0, view);
     }
 
@@ -64,11 +64,11 @@ void * CDECL wined3d_rendertarget_view_get_sub_resource_parent(const struct wine
 
     TRACE("view %p.\n", view);
 
-    if (view->resource->type == WINED3D_RTYPE_BUFFER)
-        return wined3d_buffer_get_parent(buffer_from_resource(view->resource));
+    if (wined3d_rendertarget_view_get_resource(view)->type == WINED3D_RTYPE_BUFFER)
+        return wined3d_buffer_get_parent(buffer_from_resource(wined3d_rendertarget_view_get_resource(view)));
 
-    if (!(sub_resource = wined3d_texture_get_sub_resource(wined3d_texture_from_resource(view->resource),
-            view->sub_resource_idx)))
+    if (!(sub_resource = wined3d_texture_get_sub_resource(wined3d_texture_from_resource(
+            wined3d_rendertarget_view_get_resource(view)), view->sub_resource_idx)))
         return NULL;
 
     return wined3d_resource_get_parent(sub_resource);
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 758af54..05de360 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -2751,10 +2751,11 @@ static inline struct wined3d_surface *wined3d_rendertarget_view_get_surface(
     if (!view)
         return NULL;
 
-    if (view->resource->type != WINED3D_RTYPE_TEXTURE && view->resource->type != WINED3D_RTYPE_CUBE_TEXTURE)
+    resource = view->resource;
+    if (resource->type != WINED3D_RTYPE_TEXTURE && resource->type != WINED3D_RTYPE_CUBE_TEXTURE)
         return NULL;
 
-    texture = wined3d_texture_from_resource(view->resource);
+    texture = wined3d_texture_from_resource(resource);
     if (!(resource = wined3d_texture_get_sub_resource(texture, view->sub_resource_idx)))
         return NULL;
 
-- 
2.4.6




More information about the wine-patches mailing list