Module: wine Branch: master Commit: 72de747c6a6cdd0be84a24932a4452f453861dbe URL: https://source.winehq.org/git/wine.git/?a=commit;h=72de747c6a6cdd0be84a24932...
Author: Henri Verbeet hverbeet@codeweavers.com Date: Mon Mar 12 12:54:48 2018 +0330
wined3d: Pass the depth/stencil view as wined3d_rendertarget_info structure to context_apply_fbo_state().
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/wined3d/context.c | 58 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 40 insertions(+), 18 deletions(-)
diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c index 6c635f5..9558fed 100644 --- a/dlls/wined3d/context.c +++ b/dlls/wined3d/context.c @@ -743,8 +743,8 @@ static void context_apply_fbo_entry(struct wined3d_context *context, GLenum targ
/* Context activation is done by the caller. */ static void context_apply_fbo_state(struct wined3d_context *context, GLenum target, - struct wined3d_rendertarget_info *render_targets, struct wined3d_surface *depth_stencil, - DWORD color_location, DWORD ds_location) + const struct wined3d_rendertarget_info *render_targets, + const struct wined3d_rendertarget_info *depth_stencil, DWORD color_location, DWORD ds_location) { struct fbo_entry *entry, *entry2;
@@ -766,16 +766,8 @@ static void context_apply_fbo_state(struct wined3d_context *context, GLenum targ } else { - struct wined3d_rendertarget_info ds = {{0}}; - - if (depth_stencil) - { - ds.resource = &depth_stencil->container->resource; - ds.sub_resource_idx = surface_get_sub_resource_idx(depth_stencil); - ds.layer_count = 1; - } context->current_fbo = context_find_fbo_entry(context, target, - render_targets, &ds, color_location, ds_location); + render_targets, depth_stencil, color_location, ds_location); context_apply_fbo_entry(context, target, context->current_fbo); } } @@ -784,6 +776,8 @@ static void context_apply_fbo_state(struct wined3d_context *context, GLenum targ void context_apply_fbo_state_blit(struct wined3d_context *context, GLenum target, struct wined3d_surface *render_target, struct wined3d_surface *depth_stencil, DWORD location) { + struct wined3d_rendertarget_info ds_info = {{0}}; + memset(context->blit_targets, 0, sizeof(context->blit_targets)); if (render_target) { @@ -791,7 +785,15 @@ void context_apply_fbo_state_blit(struct wined3d_context *context, GLenum target context->blit_targets[0].sub_resource_idx = surface_get_sub_resource_idx(render_target); context->blit_targets[0].layer_count = 1; } - context_apply_fbo_state(context, target, context->blit_targets, depth_stencil, location, location); + + if (depth_stencil) + { + ds_info.resource = &depth_stencil->container->resource; + ds_info.sub_resource_idx = surface_get_sub_resource_idx(depth_stencil); + ds_info.layer_count = 1; + } + + context_apply_fbo_state(context, target, context->blit_targets, &ds_info, location, location); }
/* Context activation is done by the caller. */ @@ -3035,6 +3037,8 @@ BOOL context_apply_clear_state(struct wined3d_context *context, const struct win
if (wined3d_settings.offscreen_rendering_mode == ORM_FBO) { + struct wined3d_rendertarget_info ds_info = {{0}}; + context_validate_onscreen_formats(context, dsv);
if (!rt_count || wined3d_resource_is_offscreen(rts[0]->resource)) @@ -3052,14 +3056,22 @@ BOOL context_apply_clear_state(struct wined3d_context *context, const struct win if (rts[i] && rts[i]->format->id != WINED3DFMT_NULL) rt_mask |= (1u << i); } - context_apply_fbo_state(context, GL_FRAMEBUFFER, context->blit_targets, - wined3d_rendertarget_view_get_surface(dsv), + + if (dsv) + { + ds_info.gl_view = dsv->gl_view; + ds_info.resource = dsv->resource; + ds_info.sub_resource_idx = dsv->sub_resource_idx; + ds_info.layer_count = dsv->layer_count; + } + + context_apply_fbo_state(context, GL_FRAMEBUFFER, context->blit_targets, &ds_info, rt_count ? rts[0]->resource->draw_binding : 0, dsv ? dsv->resource->draw_binding : 0); } else { - context_apply_fbo_state(context, GL_FRAMEBUFFER, NULL, NULL, + context_apply_fbo_state(context, GL_FRAMEBUFFER, NULL, &ds_info, WINED3D_LOCATION_DRAWABLE, WINED3D_LOCATION_DRAWABLE); rt_mask = context_generate_rt_mask_from_resource(rts[0]->resource); } @@ -3164,9 +3176,11 @@ void context_state_fb(struct wined3d_context *context, const struct wined3d_stat
if (wined3d_settings.offscreen_rendering_mode == ORM_FBO) { + struct wined3d_rendertarget_info ds_info = {{0}}; + if (!context->render_offscreen) { - context_apply_fbo_state(context, GL_FRAMEBUFFER, NULL, NULL, + context_apply_fbo_state(context, GL_FRAMEBUFFER, NULL, &ds_info, WINED3D_LOCATION_DRAWABLE, WINED3D_LOCATION_DRAWABLE); } else @@ -3187,8 +3201,16 @@ void context_state_fb(struct wined3d_context *context, const struct wined3d_stat if (!color_location) color_location = fb->render_targets[i]->resource->draw_binding; } - context_apply_fbo_state(context, GL_FRAMEBUFFER, context->blit_targets, - wined3d_rendertarget_view_get_surface(fb->depth_stencil), + + if (fb->depth_stencil) + { + ds_info.gl_view = fb->depth_stencil->gl_view; + ds_info.resource = fb->depth_stencil->resource; + ds_info.sub_resource_idx = fb->depth_stencil->sub_resource_idx; + ds_info.layer_count = fb->depth_stencil->layer_count; + } + + context_apply_fbo_state(context, GL_FRAMEBUFFER, context->blit_targets, &ds_info, color_location, fb->depth_stencil ? fb->depth_stencil->resource->draw_binding : 0); } }