diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c index de32587050d..ff46153f6d9 100644 --- a/dlls/wined3d/arb_program_shader.c +++ b/dlls/wined3d/arb_program_shader.c @@ -7783,6 +7783,7 @@ static DWORD arbfp_blitter_blit(struct wined3d_blitter *blitter, enum wined3d_bl const struct wined3d_color_key *color_key, enum wined3d_texture_filter_type filter) { struct wined3d_texture_gl *src_texture_gl = wined3d_texture_gl(src_texture); + struct wined3d_context_gl *context_gl = wined3d_context_gl(context); struct wined3d_device *device = dst_texture->resource.device; struct wined3d_texture *staging_texture = NULL; struct wined3d_arbfp_blitter *arbfp_blitter; @@ -7873,7 +7874,7 @@ static DWORD arbfp_blitter_blit(struct wined3d_blitter *blitter, enum wined3d_bl wined3d_texture_load(src_texture, context, FALSE); } - wined3d_context_gl_apply_ffp_blit_state(wined3d_context_gl(context), device); + wined3d_context_gl_apply_ffp_blit_state(context_gl, device); if (dst_location == WINED3D_LOCATION_DRAWABLE) { @@ -7896,7 +7897,7 @@ static DWORD arbfp_blitter_blit(struct wined3d_blitter *blitter, enum wined3d_bl TRACE("Destination texture %p is offscreen.\n", dst_texture); buffer = GL_COLOR_ATTACHMENT0; } - context_apply_fbo_state_blit(context, GL_DRAW_FRAMEBUFFER, + wined3d_context_gl_apply_fbo_state_blit(context_gl, GL_DRAW_FRAMEBUFFER, &dst_texture->resource, dst_sub_resource_idx, NULL, 0, dst_location); context_set_draw_buffer(context, buffer); context_check_fbo_status(context, GL_DRAW_FRAMEBUFFER); diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c index 75abee81ec0..d628d54316a 100644 --- a/dlls/wined3d/context.c +++ b/dlls/wined3d/context.c @@ -783,18 +783,18 @@ static void context_apply_fbo_state(struct wined3d_context *context, GLenum targ } /* Context activation is done by the caller. */ -void context_apply_fbo_state_blit(struct wined3d_context *context, GLenum target, +void wined3d_context_gl_apply_fbo_state_blit(struct wined3d_context_gl *context_gl, GLenum target, struct wined3d_resource *rt, unsigned int rt_sub_resource_idx, struct wined3d_resource *ds, unsigned int ds_sub_resource_idx, DWORD location) { struct wined3d_rendertarget_info ds_info = {{0}}; - memset(context->blit_targets, 0, sizeof(context->blit_targets)); + memset(context_gl->c.blit_targets, 0, sizeof(context_gl->c.blit_targets)); if (rt) { - context->blit_targets[0].resource = rt; - context->blit_targets[0].sub_resource_idx = rt_sub_resource_idx; - context->blit_targets[0].layer_count = 1; + context_gl->c.blit_targets[0].resource = rt; + context_gl->c.blit_targets[0].sub_resource_idx = rt_sub_resource_idx; + context_gl->c.blit_targets[0].layer_count = 1; } if (ds) @@ -804,7 +804,7 @@ void context_apply_fbo_state_blit(struct wined3d_context *context, GLenum target ds_info.layer_count = 1; } - context_apply_fbo_state(context, target, context->blit_targets, &ds_info, location, location); + context_apply_fbo_state(&context_gl->c, target, context_gl->c.blit_targets, &ds_info, location, location); } /* Context activation is done by the caller. */ @@ -2759,7 +2759,7 @@ void wined3d_context_gl_apply_blit_state(struct wined3d_context_gl *context_gl, { wined3d_texture_load(rt, context, FALSE); - context_apply_fbo_state_blit(context, GL_FRAMEBUFFER, &rt->resource, + wined3d_context_gl_apply_fbo_state_blit(context_gl, GL_FRAMEBUFFER, &rt->resource, context->current_rt.sub_resource_idx, NULL, 0, rt->resource.draw_binding); if (rt->resource.format->id != WINED3DFMT_NULL) rt_mask = 1; diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c index 386ce78f419..a3c17294c64 100644 --- a/dlls/wined3d/glsl_shader.c +++ b/dlls/wined3d/glsl_shader.c @@ -13215,6 +13215,7 @@ static DWORD glsl_blitter_blit(struct wined3d_blitter *blitter, enum wined3d_bli { struct wined3d_texture_gl *src_texture_gl = wined3d_texture_gl(src_texture); struct wined3d_texture_gl *dst_texture_gl = wined3d_texture_gl(dst_texture); + struct wined3d_context_gl *context_gl = wined3d_context_gl(context); struct wined3d_device *device = dst_texture->resource.device; const struct wined3d_gl_info *gl_info = context->gl_info; struct wined3d_texture *staging_texture = NULL; @@ -13307,7 +13308,7 @@ static DWORD glsl_blitter_blit(struct wined3d_blitter *blitter, enum wined3d_bli wined3d_texture_load(src_texture, context, FALSE); } - wined3d_context_gl_apply_blit_state(wined3d_context_gl(context), device); + wined3d_context_gl_apply_blit_state(context_gl, device); if (dst_location == WINED3D_LOCATION_DRAWABLE) { @@ -13330,7 +13331,7 @@ static DWORD glsl_blitter_blit(struct wined3d_blitter *blitter, enum wined3d_bli TRACE("Destination texture %p is offscreen.\n", dst_texture); buffer = GL_COLOR_ATTACHMENT0; } - context_apply_fbo_state_blit(context, GL_DRAW_FRAMEBUFFER, + wined3d_context_gl_apply_fbo_state_blit(context_gl, GL_DRAW_FRAMEBUFFER, &dst_texture->resource, dst_sub_resource_idx, NULL, 0, dst_location); context_set_draw_buffer(context, buffer); context_check_fbo_status(context, GL_DRAW_FRAMEBUFFER); diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c index 15d8078fa06..3d0d9c0caf6 100644 --- a/dlls/wined3d/surface.c +++ b/dlls/wined3d/surface.c @@ -62,6 +62,7 @@ static void texture2d_depth_blt_fbo(const struct wined3d_device *device, struct const RECT *src_rect, struct wined3d_texture *dst_texture, unsigned int dst_sub_resource_idx, DWORD dst_location, const RECT *dst_rect) { + struct wined3d_context_gl *context_gl = wined3d_context_gl(context); const struct wined3d_gl_info *gl_info = context->gl_info; DWORD src_mask, dst_mask; GLbitfield gl_mask; @@ -103,11 +104,11 @@ static void texture2d_depth_blt_fbo(const struct wined3d_device *device, struct else wined3d_texture_prepare_location(dst_texture, dst_sub_resource_idx, context, dst_location); - context_apply_fbo_state_blit(context, GL_READ_FRAMEBUFFER, NULL, 0, + wined3d_context_gl_apply_fbo_state_blit(context_gl, GL_READ_FRAMEBUFFER, NULL, 0, &src_texture->resource, src_sub_resource_idx, src_location); context_check_fbo_status(context, GL_READ_FRAMEBUFFER); - context_apply_fbo_state_blit(context, GL_DRAW_FRAMEBUFFER, NULL, 0, + wined3d_context_gl_apply_fbo_state_blit(context_gl, GL_DRAW_FRAMEBUFFER, NULL, 0, &dst_texture->resource, dst_sub_resource_idx, dst_location); context_set_draw_buffer(context, GL_NONE); context_check_fbo_status(context, GL_DRAW_FRAMEBUFFER); @@ -157,6 +158,7 @@ static void texture2d_blt_fbo(const struct wined3d_device *device, struct wined3 struct wined3d_texture *required_texture, *restore_texture; unsigned int required_idx, restore_idx; const struct wined3d_gl_info *gl_info; + struct wined3d_context_gl *context_gl; GLenum gl_filter; GLenum buffer; RECT s, d; @@ -229,6 +231,7 @@ static void texture2d_blt_fbo(const struct wined3d_device *device, struct wined3 return; } + context_gl = wined3d_context_gl(context); gl_info = context->gl_info; if (src_location == WINED3D_LOCATION_DRAWABLE) @@ -245,7 +248,7 @@ static void texture2d_blt_fbo(const struct wined3d_device *device, struct wined3 buffer = GL_COLOR_ATTACHMENT0; } - context_apply_fbo_state_blit(context, GL_READ_FRAMEBUFFER, + wined3d_context_gl_apply_fbo_state_blit(context_gl, GL_READ_FRAMEBUFFER, &src_texture->resource, src_sub_resource_idx, NULL, 0, src_location); gl_info->gl_ops.gl.p_glReadBuffer(buffer); checkGLcall("glReadBuffer()"); @@ -265,7 +268,7 @@ static void texture2d_blt_fbo(const struct wined3d_device *device, struct wined3 buffer = GL_COLOR_ATTACHMENT0; } - context_apply_fbo_state_blit(context, GL_DRAW_FRAMEBUFFER, + wined3d_context_gl_apply_fbo_state_blit(context_gl, GL_DRAW_FRAMEBUFFER, &dst_texture->resource, dst_sub_resource_idx, NULL, 0, dst_location); context_set_draw_buffer(context, buffer); context_check_fbo_status(context, GL_DRAW_FRAMEBUFFER); @@ -709,6 +712,7 @@ static void texture2d_read_from_framebuffer(struct wined3d_texture *texture, uns const struct wined3d_format_gl *format_gl; struct wined3d_texture *restore_texture; const struct wined3d_gl_info *gl_info; + struct wined3d_context_gl *context_gl; unsigned int row_pitch, slice_pitch; unsigned int width, height, level; struct wined3d_bo_address data; @@ -726,18 +730,19 @@ static void texture2d_read_from_framebuffer(struct wined3d_texture *texture, uns context = context_acquire(device, texture, sub_resource_idx); else restore_texture = NULL; + context_gl = wined3d_context_gl(context); gl_info = context->gl_info; if (src_location != resource->draw_binding) { - context_apply_fbo_state_blit(context, GL_READ_FRAMEBUFFER, + wined3d_context_gl_apply_fbo_state_blit(context_gl, GL_READ_FRAMEBUFFER, resource, sub_resource_idx, NULL, 0, src_location); context_check_fbo_status(context, GL_READ_FRAMEBUFFER); context_invalidate_state(context, STATE_FRAMEBUFFER); } else { - wined3d_context_gl_apply_blit_state(wined3d_context_gl(context), device); + wined3d_context_gl_apply_blit_state(context_gl, device); } /* Select the correct read buffer, and give some debug output. @@ -2156,6 +2161,7 @@ static DWORD ffp_blitter_blit(struct wined3d_blitter *blitter, enum wined3d_blit const struct wined3d_color_key *color_key, enum wined3d_texture_filter_type filter) { struct wined3d_texture_gl *src_texture_gl = wined3d_texture_gl(src_texture); + struct wined3d_context_gl *context_gl = wined3d_context_gl(context); const struct wined3d_gl_info *gl_info = context->gl_info; struct wined3d_resource *src_resource, *dst_resource; struct wined3d_texture *staging_texture = NULL; @@ -2228,7 +2234,7 @@ static DWORD ffp_blitter_blit(struct wined3d_blitter *blitter, enum wined3d_blit wined3d_texture_load(src_texture, context, FALSE); } - wined3d_context_gl_apply_ffp_blit_state(wined3d_context_gl(context), device); + wined3d_context_gl_apply_ffp_blit_state(context_gl, device); if (dst_location == WINED3D_LOCATION_DRAWABLE) { @@ -2251,7 +2257,7 @@ static DWORD ffp_blitter_blit(struct wined3d_blitter *blitter, enum wined3d_blit TRACE("Destination texture %p is offscreen.\n", dst_texture); buffer = GL_COLOR_ATTACHMENT0; } - context_apply_fbo_state_blit(context, GL_DRAW_FRAMEBUFFER, + wined3d_context_gl_apply_fbo_state_blit(context_gl, GL_DRAW_FRAMEBUFFER, dst_resource, dst_sub_resource_idx, NULL, 0, dst_location); context_set_draw_buffer(context, buffer); context_check_fbo_status(context, GL_DRAW_FRAMEBUFFER); diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index bb982f8afbd..77d551e1fd1 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -2067,6 +2067,9 @@ void wined3d_context_gl_apply_blit_state(struct wined3d_context_gl *context_gl, const struct wined3d_device *device) DECLSPEC_HIDDEN; BOOL wined3d_context_gl_apply_clear_state(struct wined3d_context_gl *context_gl, const struct wined3d_state *state, unsigned int rt_count, const struct wined3d_fb_state *fb) DECLSPEC_HIDDEN; +void wined3d_context_gl_apply_fbo_state_blit(struct wined3d_context_gl *context_gl, GLenum target, + struct wined3d_resource *rt, unsigned int rt_sub_resource_idx, + struct wined3d_resource *ds, unsigned int ds_sub_resource_idx, DWORD location) DECLSPEC_HIDDEN; void wined3d_context_gl_apply_ffp_blit_state(struct wined3d_context_gl *context_gl, const struct wined3d_device *device) DECLSPEC_HIDDEN; void wined3d_context_gl_bind_texture(struct wined3d_context_gl *context_gl, @@ -2220,9 +2223,6 @@ BOOL wined3d_clip_blit(const RECT *clip_rect, RECT *clipped, RECT *other) DECLSP struct wined3d_context *context_acquire(const struct wined3d_device *device, struct wined3d_texture *texture, unsigned int sub_resource_idx) DECLSPEC_HIDDEN; -void context_apply_fbo_state_blit(struct wined3d_context *context, GLenum target, - struct wined3d_resource *rt, unsigned int rt_sub_resource_idx, - struct wined3d_resource *ds, unsigned int ds_sub_resource_idx, DWORD location) DECLSPEC_HIDDEN; void context_active_texture(struct wined3d_context *context, const struct wined3d_gl_info *gl_info, unsigned int unit) DECLSPEC_HIDDEN; void context_bind_bo(struct wined3d_context *context, GLenum binding, GLuint name) DECLSPEC_HIDDEN;