[PATCH 2/6] wined3d: Get resource info from the texture in swapchain_blit().
Henri Verbeet
hverbeet at codeweavers.com
Mon Mar 28 11:57:57 CDT 2016
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
---
dlls/wined3d/swapchain.c | 43 ++++++++++++++++++++-----------------------
1 file changed, 20 insertions(+), 23 deletions(-)
diff --git a/dlls/wined3d/swapchain.c b/dlls/wined3d/swapchain.c
index 1b6d2e5..67eb2d2 100644
--- a/dlls/wined3d/swapchain.c
+++ b/dlls/wined3d/swapchain.c
@@ -295,8 +295,9 @@ HRESULT CDECL wined3d_swapchain_get_gamma_ramp(const struct wined3d_swapchain *s
static void swapchain_blit(const struct wined3d_swapchain *swapchain,
struct wined3d_context *context, const RECT *src_rect, const RECT *dst_rect)
{
- struct wined3d_surface *backbuffer = surface_from_resource(
- wined3d_texture_get_sub_resource(swapchain->back_buffers[0], 0));
+ struct wined3d_texture *texture = swapchain->back_buffers[0];
+ struct wined3d_surface *back_buffer = texture->sub_resources[0].u.surface;
+ struct wined3d_surface *front_buffer = swapchain->front_buffer->sub_resources[0].u.surface;
UINT src_w = src_rect->right - src_rect->left;
UINT src_h = src_rect->bottom - src_rect->top;
GLenum gl_filter;
@@ -315,23 +316,21 @@ static void swapchain_blit(const struct wined3d_swapchain *swapchain,
GetClientRect(swapchain->win_handle, &win_rect);
win_h = win_rect.bottom - win_rect.top;
- if (gl_info->fbo_ops.glBlitFramebuffer && is_identity_fixup(backbuffer->resource.format->color_fixup))
+ if (gl_info->fbo_ops.glBlitFramebuffer && is_identity_fixup(texture->resource.format->color_fixup))
{
DWORD location = WINED3D_LOCATION_TEXTURE_RGB;
- if (backbuffer->resource.multisample_type)
+ if (texture->resource.multisample_type)
{
location = WINED3D_LOCATION_RB_RESOLVED;
- surface_load_location(backbuffer, context, location);
+ surface_load_location(back_buffer, context, location);
}
- context_apply_fbo_state_blit(context, GL_READ_FRAMEBUFFER, backbuffer, NULL, location);
+ context_apply_fbo_state_blit(context, GL_READ_FRAMEBUFFER, back_buffer, NULL, location);
gl_info->gl_ops.gl.p_glReadBuffer(GL_COLOR_ATTACHMENT0);
context_check_fbo_status(context, GL_READ_FRAMEBUFFER);
- context_apply_fbo_state_blit(context, GL_DRAW_FRAMEBUFFER,
- surface_from_resource(wined3d_texture_get_sub_resource(swapchain->front_buffer, 0)),
- NULL, WINED3D_LOCATION_DRAWABLE);
+ context_apply_fbo_state_blit(context, GL_DRAW_FRAMEBUFFER, front_buffer, NULL, WINED3D_LOCATION_DRAWABLE);
context_set_draw_buffer(context, GL_BACK);
context_invalidate_state(context, STATE_FRAMEBUFFER);
@@ -359,30 +358,28 @@ static void swapchain_blit(const struct wined3d_swapchain *swapchain,
float tex_right = src_rect->right;
float tex_bottom = src_rect->bottom;
- context2 = context_acquire(device, backbuffer);
+ context2 = context_acquire(device, back_buffer);
context_apply_blit_state(context2, device);
- if (backbuffer->container->flags & WINED3D_TEXTURE_NORMALIZED_COORDS)
+ if (back_buffer->container->flags & WINED3D_TEXTURE_NORMALIZED_COORDS)
{
- tex_left /= backbuffer->pow2Width;
- tex_right /= backbuffer->pow2Width;
- tex_top /= backbuffer->pow2Height;
- tex_bottom /= backbuffer->pow2Height;
+ tex_left /= back_buffer->pow2Width;
+ tex_right /= back_buffer->pow2Width;
+ tex_top /= back_buffer->pow2Height;
+ tex_bottom /= back_buffer->pow2Height;
}
- if (is_complex_fixup(backbuffer->resource.format->color_fixup))
+ if (is_complex_fixup(texture->resource.format->color_fixup))
gl_filter = GL_NEAREST;
- context_apply_fbo_state_blit(context2, GL_FRAMEBUFFER,
- surface_from_resource(wined3d_texture_get_sub_resource(swapchain->front_buffer, 0)),
- NULL, WINED3D_LOCATION_DRAWABLE);
- context_bind_texture(context2, backbuffer->texture_target, backbuffer->container->texture_rgb.name);
+ context_apply_fbo_state_blit(context2, GL_FRAMEBUFFER, front_buffer, NULL, WINED3D_LOCATION_DRAWABLE);
+ context_bind_texture(context2, back_buffer->texture_target, texture->texture_rgb.name);
/* Set up the texture. The surface is not in a wined3d_texture
* container, so there are no D3D texture settings to dirtify. */
- device->blitter->set_shader(device->blit_priv, context2, backbuffer, NULL);
- gl_info->gl_ops.gl.p_glTexParameteri(backbuffer->texture_target, GL_TEXTURE_MIN_FILTER, gl_filter);
- gl_info->gl_ops.gl.p_glTexParameteri(backbuffer->texture_target, GL_TEXTURE_MAG_FILTER, gl_filter);
+ device->blitter->set_shader(device->blit_priv, context2, back_buffer, NULL);
+ gl_info->gl_ops.gl.p_glTexParameteri(back_buffer->texture_target, GL_TEXTURE_MIN_FILTER, gl_filter);
+ gl_info->gl_ops.gl.p_glTexParameteri(back_buffer->texture_target, GL_TEXTURE_MAG_FILTER, gl_filter);
context_set_draw_buffer(context, GL_BACK);
--
2.1.4
More information about the wine-patches
mailing list