[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