[PATCH 2/5] wined3d: Enable multisampling for GPU surface blits.
Chip Davis
cdavis at codeweavers.com
Thu Apr 16 14:30:44 CDT 2020
Signed-off-by: Chip Davis <cdavis at codeweavers.com>
---
dlls/wined3d/surface.c | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
index e965203950e..46a96243f04 100644
--- a/dlls/wined3d/surface.c
+++ b/dlls/wined3d/surface.c
@@ -130,6 +130,11 @@ static void texture2d_depth_blt_fbo(const struct wined3d_device *device, struct
context_invalidate_state(context, STATE_RENDER(WINED3D_RS_STENCILWRITEMASK));
}
+ if (gl_info->supported[ARB_MULTISAMPLE])
+ {
+ gl_info->gl_ops.gl.p_glEnable(GL_MULTISAMPLE);
+ context_invalidate_state(context, STATE_RENDER(WINED3D_RS_MULTISAMPLEANTIALIAS));
+ }
gl_info->gl_ops.gl.p_glDisable(GL_SCISSOR_TEST);
context_invalidate_state(context, STATE_RASTERIZER);
@@ -251,6 +256,11 @@ void texture2d_blt_fbo(struct wined3d_device *device, struct wined3d_context *co
gl_info->gl_ops.gl.p_glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
context_invalidate_state(context, STATE_BLEND);
+ if (gl_info->supported[ARB_MULTISAMPLE])
+ {
+ gl_info->gl_ops.gl.p_glEnable(GL_MULTISAMPLE);
+ context_invalidate_state(context, STATE_RENDER(WINED3D_RS_MULTISAMPLEANTIALIAS));
+ }
gl_info->gl_ops.gl.p_glDisable(GL_SCISSOR_TEST);
context_invalidate_state(context, STATE_RASTERIZER);
@@ -754,6 +764,12 @@ void texture2d_read_from_framebuffer(struct wined3d_texture *texture, unsigned i
gl_info->gl_ops.gl.p_glPixelStorei(GL_PACK_ROW_LENGTH, row_pitch / format_gl->f.byte_count);
checkGLcall("glPixelStorei");
+ if (gl_info->supported[ARB_MULTISAMPLE])
+ {
+ gl_info->gl_ops.gl.p_glEnable(GL_MULTISAMPLE);
+ context_invalidate_state(context, STATE_RENDER(WINED3D_RS_MULTISAMPLEANTIALIAS));
+ }
+
width = wined3d_texture_get_level_width(texture, level);
height = wined3d_texture_get_level_height(texture, level);
gl_info->gl_ops.gl.p_glReadPixels(0, 0, width, height,
@@ -848,6 +864,12 @@ void texture2d_load_fb_texture(struct wined3d_texture_gl *texture_gl,
gl_info->gl_ops.gl.p_glReadBuffer(wined3d_texture_get_gl_buffer(&texture_gl->t));
checkGLcall("glReadBuffer");
+ if (gl_info->supported[ARB_MULTISAMPLE])
+ {
+ gl_info->gl_ops.gl.p_glEnable(GL_MULTISAMPLE);
+ context_invalidate_state(context, STATE_RENDER(WINED3D_RS_MULTISAMPLEANTIALIAS));
+ }
+
level = sub_resource_idx % texture_gl->t.level_count;
target = wined3d_texture_gl_get_sub_resource_target(texture_gl, sub_resource_idx);
gl_info->gl_ops.gl.p_glCopyTexSubImage2D(target, level, 0, 0, 0, 0,
@@ -1421,6 +1443,12 @@ static DWORD ffp_blitter_blit(struct wined3d_blitter *blitter, enum wined3d_blit
gl_info->gl_ops.gl.p_glEnable(src_texture_gl->target);
checkGLcall("glEnable(target)");
+ if (gl_info->supported[ARB_MULTISAMPLE])
+ {
+ gl_info->gl_ops.gl.p_glEnable(GL_MULTISAMPLE);
+ context_invalidate_state(context, STATE_RENDER(WINED3D_RS_MULTISAMPLEANTIALIAS));
+ }
+
if (op == WINED3D_BLIT_OP_COLOR_BLIT_ALPHATEST || color_key)
{
gl_info->gl_ops.gl.p_glEnable(GL_ALPHA_TEST);
--
2.24.0
More information about the wine-devel
mailing list