From 941aced635aab743bf1ec40ae7f3d21989c8a28e Mon Sep 17 00:00:00 2001 From: Topi Pohjolainen Date: Wed, 28 Jan 2015 16:27:25 +0200 Subject: [PATCH] meta/blit: Compile programs with and without depth When color buffers alone are concerned the depth is not needed. No regression on BDW where meta blit is used instead of blorp. I also disabled blorp temporarily for fbo-blits on IVB and saw no regressions there either. I also compared several graphics benchmarks on BDW and saw neither regressions or improvements. Signed-off-by: Topi Pohjolainen Reviewed-by: Kenneth Graunke Reviewed-by: Matt Turner --- src/mesa/drivers/common/meta.h | 3 ++- src/mesa/drivers/common/meta_blit.c | 13 +++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/mesa/drivers/common/meta.h b/src/mesa/drivers/common/meta.h index de3dc6a0ab4..3b9e05e0176 100644 --- a/src/mesa/drivers/common/meta.h +++ b/src/mesa/drivers/common/meta.h @@ -298,7 +298,8 @@ struct blit_state { GLuint VAO; GLuint VBO; - struct blit_shader_table shaders; + struct blit_shader_table shaders_with_depth; + struct blit_shader_table shaders_without_depth; GLuint msaa_shaders[BLIT_MSAA_SHADER_COUNT]; struct temp_texture depthTex; bool no_ctsi_fallback; diff --git a/src/mesa/drivers/common/meta_blit.c b/src/mesa/drivers/common/meta_blit.c index 02e90e0aaf7..4212d94333a 100644 --- a/src/mesa/drivers/common/meta_blit.c +++ b/src/mesa/drivers/common/meta_blit.c @@ -510,7 +510,8 @@ setup_glsl_blit_framebuffer(struct gl_context *ctx, struct blit_state *blit, struct gl_renderbuffer *src_rb, GLenum target, GLenum filter, - bool is_scaled_blit) + bool is_scaled_blit, + bool do_depth) { unsigned texcoord_size; bool is_target_multisample = target == GL_TEXTURE_2D_MULTISAMPLE || @@ -531,7 +532,9 @@ setup_glsl_blit_framebuffer(struct gl_context *ctx, } else if (is_target_multisample) { setup_glsl_msaa_blit_shader(ctx, blit, src_rb, target); } else { - _mesa_meta_setup_blit_shader(ctx, target, true, &blit->shaders); + _mesa_meta_setup_blit_shader(ctx, target, do_depth, + do_depth ? &blit->shaders_with_depth + : &blit->shaders_without_depth); } } @@ -642,7 +645,8 @@ blitframebuffer_texture(struct gl_context *ctx, scaled_blit = dstW != srcW || dstH != srcH; if (glsl_version) { - setup_glsl_blit_framebuffer(ctx, blit, rb, target, filter, scaled_blit); + setup_glsl_blit_framebuffer(ctx, blit, rb, target, filter, scaled_blit, + do_depth); } else { _mesa_meta_setup_ff_tnl_for_blit(&ctx->Meta->Blit.VAO, @@ -962,7 +966,8 @@ _mesa_meta_glsl_blit_cleanup(struct blit_state *blit) blit->VBO = 0; } - _mesa_meta_blit_shader_table_cleanup(&blit->shaders); + _mesa_meta_blit_shader_table_cleanup(&blit->shaders_with_depth); + _mesa_meta_blit_shader_table_cleanup(&blit->shaders_without_depth); _mesa_DeleteTextures(1, &blit->depthTex.TexObj); blit->depthTex.TexObj = 0; -- 2.30.2