From: Stefan Dösinger Subject: [PATCH 5/8] wined3d: Access render target view resources through wined3d_rendertarget_view_get_resource. Message-Id: <1442251072-16952-5-git-send-email-stefan@codeweavers.com> Date: Mon, 14 Sep 2015 19:17:49 +0200 --- 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