aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTopi Pohjolainen <[email protected]>2015-01-28 16:27:25 +0200
committerTopi Pohjolainen <[email protected]>2015-01-30 09:58:32 +0200
commit941aced635aab743bf1ec40ae7f3d21989c8a28e (patch)
tree726d56663e1df609d64f933361b891b8cf772697
parent97caf5fa04dbd2148378a9e83c0e232f51552ee2 (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.h3
-rw-r--r--src/mesa/drivers/common/meta_blit.c13
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;