Signed-off-by: Henri Verbeet hverbeet@codeweavers.com --- dlls/wined3d/context.c | 8 +++++--- dlls/wined3d/surface.c | 12 +++++++----- dlls/wined3d/wined3d_private.h | 2 +- 3 files changed, 13 insertions(+), 9 deletions(-)
diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c index 84d6f4e86ae..0847cb92c65 100644 --- a/dlls/wined3d/context.c +++ b/dlls/wined3d/context.c @@ -2724,7 +2724,7 @@ static void context_set_render_offscreen(struct wined3d_context *context, BOOL o context->render_offscreen = offscreen; }
-GLenum context_get_offscreen_gl_buffer(const struct wined3d_context *context) +GLenum wined3d_context_gl_get_offscreen_gl_buffer(const struct wined3d_context_gl *context_gl) { switch (wined3d_settings.offscreen_rendering_mode) { @@ -2732,7 +2732,7 @@ GLenum context_get_offscreen_gl_buffer(const struct wined3d_context *context) return GL_COLOR_ATTACHMENT0;
case ORM_BACKBUFFER: - return context->aux_buffers > 0 ? GL_AUX0 : GL_BACK; + return context_gl->c.aux_buffers > 0 ? GL_AUX0 : GL_BACK;
default: FIXME("Unhandled offscreen rendering mode %#x.\n", wined3d_settings.offscreen_rendering_mode); @@ -2742,12 +2742,14 @@ GLenum context_get_offscreen_gl_buffer(const struct wined3d_context *context)
static DWORD context_generate_rt_mask_no_fbo(const struct wined3d_context *context, struct wined3d_resource *rt) { + const struct wined3d_context_gl *context_gl = wined3d_context_gl_const(context); + if (!rt || rt->format->id == WINED3DFMT_NULL) return 0; else if (rt->type != WINED3D_RTYPE_BUFFER && texture_from_resource(rt)->swapchain) return context_generate_rt_mask_from_resource(rt); else - return context_generate_rt_mask(context_get_offscreen_gl_buffer(context)); + return context_generate_rt_mask(wined3d_context_gl_get_offscreen_gl_buffer(context_gl)); }
/* Context activation is done by the caller. */ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c index 318ac19f941..a95b18e6951 100644 --- a/dlls/wined3d/surface.c +++ b/dlls/wined3d/surface.c @@ -754,7 +754,7 @@ static void texture2d_read_from_framebuffer(struct wined3d_texture *texture, uns /* Mapping the primary render target which is not on a swapchain. * Read from the back buffer. */ TRACE("Mapping offscreen render target.\n"); - gl_info->gl_ops.gl.p_glReadBuffer(context_get_offscreen_gl_buffer(context)); + gl_info->gl_ops.gl.p_glReadBuffer(wined3d_context_gl_get_offscreen_gl_buffer(context_gl)); src_is_upside_down = TRUE; } else @@ -845,6 +845,7 @@ void texture2d_load_fb_texture(struct wined3d_texture_gl *texture_gl, { struct wined3d_texture *restore_texture; const struct wined3d_gl_info *gl_info; + struct wined3d_context_gl *context_gl; struct wined3d_resource *resource; unsigned int restore_idx, level; struct wined3d_device *device; @@ -858,17 +859,18 @@ void texture2d_load_fb_texture(struct wined3d_texture_gl *texture_gl, context = context_acquire(device, &texture_gl->t, sub_resource_idx); else restore_texture = NULL; + context_gl = wined3d_context_gl(context);
gl_info = context->gl_info; device_invalidate_state(device, STATE_FRAMEBUFFER);
wined3d_texture_prepare_texture(&texture_gl->t, context, srgb); - wined3d_texture_gl_bind_and_dirtify(texture_gl, wined3d_context_gl(context), srgb); + wined3d_texture_gl_bind_and_dirtify(texture_gl, context_gl, srgb);
TRACE("Reading back offscreen render target %p, %u.\n", texture_gl, sub_resource_idx);
if (wined3d_resource_is_offscreen(resource)) - gl_info->gl_ops.gl.p_glReadBuffer(context_get_offscreen_gl_buffer(context)); + gl_info->gl_ops.gl.p_glReadBuffer(wined3d_context_gl_get_offscreen_gl_buffer(context_gl)); else gl_info->gl_ops.gl.p_glReadBuffer(wined3d_texture_get_gl_buffer(&texture_gl->t)); checkGLcall("glReadBuffer"); @@ -922,7 +924,7 @@ static void fb_copy_to_texture_direct(struct wined3d_texture_gl *dst_texture, un { TRACE("Reading from an offscreen target\n"); upsidedown = !upsidedown; - gl_info->gl_ops.gl.p_glReadBuffer(context_get_offscreen_gl_buffer(context)); + gl_info->gl_ops.gl.p_glReadBuffer(wined3d_context_gl_get_offscreen_gl_buffer(context_gl)); } else { @@ -1036,7 +1038,7 @@ static void fb_copy_to_texture_hwstretch(struct wined3d_texture_gl *dst_texture, wined3d_context_gl_apply_ffp_blit_state(context_gl, device); wined3d_texture_load(&dst_texture->t, context, FALSE);
- offscreen_buffer = context_get_offscreen_gl_buffer(context); + offscreen_buffer = wined3d_context_gl_get_offscreen_gl_buffer(context_gl); src_level = src_sub_resource_idx % src_texture->t.level_count; src_width = wined3d_texture_get_level_width(&src_texture->t, src_level); src_height = wined3d_texture_get_level_height(&src_texture->t, src_level); diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index 94765cb0c3a..0fc56462b0c 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -2081,6 +2081,7 @@ void wined3d_context_gl_free_occlusion_query(struct wined3d_occlusion_query *que void wined3d_context_gl_free_pipeline_statistics_query(struct wined3d_pipeline_statistics_query *query) DECLSPEC_HIDDEN; void wined3d_context_gl_free_so_statistics_query(struct wined3d_so_statistics_query *query) DECLSPEC_HIDDEN; void wined3d_context_gl_free_timestamp_query(struct wined3d_timestamp_query *query) DECLSPEC_HIDDEN; +GLenum wined3d_context_gl_get_offscreen_gl_buffer(const struct wined3d_context_gl *context_gl) DECLSPEC_HIDDEN; const unsigned int *wined3d_context_gl_get_tex_unit_mapping(const struct wined3d_context_gl *context_gl, const struct wined3d_shader_version *shader_version, unsigned int *base, unsigned int *count) DECLSPEC_HIDDEN; HRESULT wined3d_context_gl_init(struct wined3d_context_gl *context_gl, @@ -2246,7 +2247,6 @@ void context_draw_textured_quad(struct wined3d_context *context, struct wined3d_ void context_enable_clip_distances(struct wined3d_context *context, unsigned int mask) DECLSPEC_HIDDEN; void context_end_transform_feedback(struct wined3d_context *context) DECLSPEC_HIDDEN; struct wined3d_context *context_get_current(void) DECLSPEC_HIDDEN; -GLenum context_get_offscreen_gl_buffer(const struct wined3d_context *context) DECLSPEC_HIDDEN; DWORD context_get_tls_idx(void) DECLSPEC_HIDDEN; void context_gl_resource_released(struct wined3d_device *device, GLuint name, BOOL rb_namespace) DECLSPEC_HIDDEN;