wined3d: Pass a wined3d_context_gl structure to context_apply_fbo_state_blit().

Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Henri Verbeet 2019-05-15 18:02:54 +04:30 committed by Alexandre Julliard
parent 56f53743a9
commit 907b2a3333
5 changed files with 30 additions and 22 deletions

View File

@ -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);

View File

@ -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;

View File

@ -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);

View File

@ -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);

View File

@ -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;