diff options
author | Topi Pohjolainen <[email protected]> | 2015-01-28 16:27:25 +0200 |
---|---|---|
committer | Topi Pohjolainen <[email protected]> | 2015-01-30 09:58:32 +0200 |
commit | 941aced635aab743bf1ec40ae7f3d21989c8a28e (patch) | |
tree | 726d56663e1df609d64f933361b891b8cf772697 | |
parent | 97caf5fa04dbd2148378a9e83c0e232f51552ee2 (diff) |
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 <[email protected]>
Reviewed-by: Kenneth Graunke <[email protected]>
Reviewed-by: Matt Turner <[email protected]>
-rw-r--r-- | src/mesa/drivers/common/meta.h | 3 | ||||
-rw-r--r-- | 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; |