From b46ef08c9cd434d71206a0444f1f7040f02400cf Mon Sep 17 00:00:00 2001 From: Henri Verbeet Date: Wed, 23 Mar 2016 17:58:23 +0100 Subject: [PATCH] wined3d: Introduce wined3d_texture_get_gl_buffer(). Signed-off-by: Henri Verbeet Signed-off-by: Alexandre Julliard --- dlls/wined3d/context.c | 2 +- dlls/wined3d/surface.c | 44 +++++----------------------------- dlls/wined3d/texture.c | 32 +++++++++++++++++++++++++ dlls/wined3d/wined3d_private.h | 2 +- 4 files changed, 40 insertions(+), 40 deletions(-) diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c index 0d6ba6931d1..d28ebd37ddc 100644 --- a/dlls/wined3d/context.c +++ b/dlls/wined3d/context.c @@ -337,7 +337,7 @@ static inline DWORD context_generate_rt_mask(GLenum buffer) static inline DWORD context_generate_rt_mask_from_surface(const struct wined3d_surface *target) { - return (1u << 31) | surface_get_gl_buffer(target); + return (1u << 31) | wined3d_texture_get_gl_buffer(target->container); } static inline void context_set_fbo_key_for_surface(const struct wined3d_context *context, diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c index b86cb72da7b..ceea4fe0aa5 100644 --- a/dlls/wined3d/surface.c +++ b/dlls/wined3d/surface.c @@ -698,7 +698,7 @@ static void surface_blt_fbo(const struct wined3d_device *device, if (src_location == WINED3D_LOCATION_DRAWABLE) { TRACE("Source surface %p is onscreen.\n", src_surface); - buffer = surface_get_gl_buffer(src_surface); + buffer = wined3d_texture_get_gl_buffer(src_surface->container); surface_translate_drawable_coords(src_surface, context->win_handle, &src_rect); } else @@ -715,7 +715,7 @@ static void surface_blt_fbo(const struct wined3d_device *device, if (dst_location == WINED3D_LOCATION_DRAWABLE) { TRACE("Destination surface %p is onscreen.\n", dst_surface); - buffer = surface_get_gl_buffer(dst_surface); + buffer = wined3d_texture_get_gl_buffer(dst_surface->container); surface_translate_drawable_coords(dst_surface, context->win_handle, &dst_rect); } else @@ -1444,38 +1444,6 @@ void surface_set_compatible_renderbuffer(struct wined3d_surface *surface, const checkGLcall("set_compatible_renderbuffer"); } -GLenum surface_get_gl_buffer(const struct wined3d_surface *surface) -{ - const struct wined3d_swapchain *swapchain = surface->container->swapchain; - - TRACE("surface %p.\n", surface); - - if (!swapchain) - { - ERR("Surface %p is not on a swapchain.\n", surface); - return GL_NONE; - } - - if (swapchain->back_buffers && swapchain->back_buffers[0] == surface->container) - { - if (swapchain->render_to_fbo) - { - TRACE("Returning GL_COLOR_ATTACHMENT0\n"); - return GL_COLOR_ATTACHMENT0; - } - TRACE("Returning GL_BACK\n"); - return GL_BACK; - } - else if (surface->container == swapchain->front_buffer) - { - TRACE("Returning GL_FRONT\n"); - return GL_FRONT; - } - - FIXME("Higher back buffer, returning GL_BACK\n"); - return GL_BACK; -} - /* Context activation is done by the caller. */ void surface_load(struct wined3d_surface *surface, struct wined3d_context *context, BOOL srgb) { @@ -1913,7 +1881,7 @@ static void read_from_framebuffer(struct wined3d_surface *surface, else { /* Onscreen surfaces are always part of a swapchain */ - GLenum buffer = surface_get_gl_buffer(surface); + GLenum buffer = wined3d_texture_get_gl_buffer(texture); TRACE("Mapping %#x buffer.\n", buffer); gl_info->gl_ops.gl.p_glReadBuffer(buffer); checkGLcall("glReadBuffer"); @@ -2016,7 +1984,7 @@ void surface_load_fb_texture(struct wined3d_surface *surface, BOOL srgb, struct if (wined3d_resource_is_offscreen(&texture->resource)) gl_info->gl_ops.gl.p_glReadBuffer(context_get_offscreen_gl_buffer(context)); else - gl_info->gl_ops.gl.p_glReadBuffer(surface_get_gl_buffer(surface)); + gl_info->gl_ops.gl.p_glReadBuffer(wined3d_texture_get_gl_buffer(texture)); checkGLcall("glReadBuffer"); gl_info->gl_ops.gl.p_glCopyTexSubImage2D(surface->texture_target, surface->texture_level, @@ -2127,7 +2095,7 @@ static void fb_copy_to_texture_direct(struct wined3d_surface *dst_surface, struc } else { - gl_info->gl_ops.gl.p_glReadBuffer(surface_get_gl_buffer(src_surface)); + gl_info->gl_ops.gl.p_glReadBuffer(wined3d_texture_get_gl_buffer(src_texture)); } checkGLcall("glReadBuffer"); @@ -2291,7 +2259,7 @@ static void fb_copy_to_texture_hwstretch(struct wined3d_surface *dst_surface, st } else { - gl_info->gl_ops.gl.p_glReadBuffer(surface_get_gl_buffer(src_surface)); + gl_info->gl_ops.gl.p_glReadBuffer(wined3d_texture_get_gl_buffer(src_texture)); } /* TODO: Only back up the part that will be overwritten */ diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c index 2687bf1ca50..feb691914c6 100644 --- a/dlls/wined3d/texture.c +++ b/dlls/wined3d/texture.c @@ -37,6 +37,38 @@ BOOL wined3d_texture_use_pbo(const struct wined3d_texture *texture, const struct && !(texture->flags & (WINED3D_TEXTURE_PIN_SYSMEM | WINED3D_TEXTURE_COND_NP2_EMULATED)); } +GLenum wined3d_texture_get_gl_buffer(const struct wined3d_texture *texture) +{ + const struct wined3d_swapchain *swapchain = texture->swapchain; + + TRACE("texture %p.\n", texture); + + if (!swapchain) + { + ERR("Texture %p is not part of a swapchain.\n", texture); + return GL_NONE; + } + + if (swapchain->back_buffers && swapchain->back_buffers[0] == texture) + { + if (swapchain->render_to_fbo) + { + TRACE("Returning GL_COLOR_ATTACHMENT0.\n"); + return GL_COLOR_ATTACHMENT0; + } + TRACE("Returning GL_BACK.\n"); + return GL_BACK; + } + else if (texture == swapchain->front_buffer) + { + TRACE("Returning GL_FRONT.\n"); + return GL_FRONT; + } + + FIXME("Higher back buffer, returning GL_BACK.\n"); + return GL_BACK; +} + static HRESULT wined3d_texture_init(struct wined3d_texture *texture, const struct wined3d_texture_ops *texture_ops, UINT layer_count, UINT level_count, const struct wined3d_resource_desc *desc, DWORD flags, struct wined3d_device *device, void *parent, const struct wined3d_parent_ops *parent_ops, diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index c638c4557e0..a9d2a96bc62 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -2453,6 +2453,7 @@ void wined3d_texture_bind_and_dirtify(struct wined3d_texture *texture, struct wined3d_context *context, BOOL srgb) DECLSPEC_HIDDEN; BOOL wined3d_texture_check_block_align(const struct wined3d_texture *texture, unsigned int level, const struct wined3d_box *box) DECLSPEC_HIDDEN; +GLenum wined3d_texture_get_gl_buffer(const struct wined3d_texture *texture) DECLSPEC_HIDDEN; struct wined3d_resource *wined3d_texture_get_sub_resource(const struct wined3d_texture *texture, UINT sub_resource_idx) DECLSPEC_HIDDEN; void wined3d_texture_load(struct wined3d_texture *texture, @@ -2605,7 +2606,6 @@ void wined3d_surface_cleanup(struct wined3d_surface *surface) DECLSPEC_HIDDEN; HRESULT surface_color_fill(struct wined3d_surface *s, const RECT *rect, const struct wined3d_color *color) DECLSPEC_HIDDEN; HRESULT surface_create_dib_section(struct wined3d_surface *surface) DECLSPEC_HIDDEN; -GLenum surface_get_gl_buffer(const struct wined3d_surface *surface) DECLSPEC_HIDDEN; void surface_get_drawable_size(const struct wined3d_surface *surface, const struct wined3d_context *context, unsigned int *width, unsigned int *height) DECLSPEC_HIDDEN; HRESULT wined3d_surface_init(struct wined3d_surface *surface,