From: Jason Ekstrand Date: Mon, 25 Jul 2016 21:44:50 +0000 (-0700) Subject: i965/blorp: Refactor fast-clear logic a bit X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=583f040fdab9f9cbd1b5e874cad820296d7a02a4;p=mesa.git i965/blorp: Refactor fast-clear logic a bit This pulls the mcs allocation into the if statement where we initially determine that we are doing a fast clear and moves the programming of wm_inputs and figuring out the fast clear rect into it's own if statement. The next commit will put code inbetween the two. Reviewed-by: Topi Pohjolainen --- diff --git a/src/mesa/drivers/dri/i965/brw_blorp_clear.cpp b/src/mesa/drivers/dri/i965/brw_blorp_clear.cpp index df491d1393b..6c527f51633 100644 --- a/src/mesa/drivers/dri/i965/brw_blorp_clear.cpp +++ b/src/mesa/drivers/dri/i965/brw_blorp_clear.cpp @@ -166,22 +166,11 @@ do_single_blorp_clear(struct brw_context *brw, struct gl_framebuffer *fb, params.color_write_disable)) use_simd16_replicated_data = false; + bool is_fast_clear = false; if (irb->mt->fast_clear_state != INTEL_FAST_CLEAR_STATE_NO_MCS && !partial_clear && use_simd16_replicated_data && brw_is_color_fast_clear_compatible(brw, irb->mt, &ctx->Color.ClearColor)) { - memset(¶ms.wm_inputs, 0xff, 4*sizeof(float)); - params.fast_clear_op = GEN7_PS_RENDER_TARGET_FAST_CLEAR_ENABLE; - - brw_get_fast_clear_rect(brw, irb->mt, ¶ms.x0, ¶ms.y0, - ¶ms.x1, ¶ms.y1); - } - - brw_blorp_params_get_clear_kernel(brw, ¶ms, use_simd16_replicated_data); - - const bool is_fast_clear = - params.fast_clear_op == GEN7_PS_RENDER_TARGET_FAST_CLEAR_ENABLE; - if (is_fast_clear) { /* Record the clear color in the miptree so that it will be * programmed in SURFACE_STATE by later rendering and resolve * operations. @@ -208,8 +197,20 @@ do_single_blorp_clear(struct brw_context *brw, struct gl_framebuffer *fb, return false; } } + + is_fast_clear = true; } + if (is_fast_clear) { + memset(¶ms.wm_inputs, 0xff, 4*sizeof(float)); + params.fast_clear_op = GEN7_PS_RENDER_TARGET_FAST_CLEAR_ENABLE; + + brw_get_fast_clear_rect(brw, irb->mt, ¶ms.x0, ¶ms.y0, + ¶ms.x1, ¶ms.y1); + } + + brw_blorp_params_get_clear_kernel(brw, ¶ms, use_simd16_replicated_data); + intel_miptree_check_level_layer(irb->mt, irb->mt_level, layer); intel_miptree_used_for_rendering(irb->mt);