[Mesa-dev] [PATCH 17/42] i965/blorp: reduce the scope of the explicit compression control
Ian Romanick
idr at freedesktop.org
Fri Jan 10 18:09:02 PST 2014
On 12/20/2013 06:38 AM, Topi Pohjolainen wrote:
> By highlighting these special cases makes it clearer to switch
> to the fs-generator as the wider scoped compression control
> settings used in the current implementation can be simply
> dropped.
>
> No regressions on IVB (piglit quick + unit tests).
>
> Signed-off-by: Topi Pohjolainen <topi.pohjolainen at intel.com>
With the typo fixed,
Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
> ---
> src/mesa/drivers/dri/i965/brw_blorp_blit.cpp | 31 ++++++++++++++++++----------
> 1 file changed, 20 insertions(+), 11 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
> index 4d62411..6de4dc2 100644
> --- a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
> @@ -801,7 +801,20 @@ brw_blorp_blit_program::compile(struct brw_context *brw,
> memset(&prog_data, 0, sizeof(prog_data));
> prog_data.persample_msaa_dispatch = key->persample_msaa_dispatch;
>
> - brw_set_compression_control(&func, BRW_COMPRESSION_NONE);
> + /*
> + * By default everything is emitted as 16-wide with only a few expections
^^^^^^^^^^
exceptions
> + * handled explicitly either here in the compiler or by one of the specific
> + * code emission calls.
> + * It should be also noted that here in this file any alterations of the
> + * compression control settings are only used to affect the execution size
> + * of the instructions. The instruction template used to initialise all the
> + * instructions is effectively not altered -- the value stays at zero
> + * representing either GEN6_COMPRESSION_1Q or GEN6_COMPRESSION_1H depending
> + * on the context.
> + * If any other settings are used in the instruction headers, they are set
> + * elsewhere by the individual code emission calls.
> + */
> + brw_set_compression_control(&func, BRW_COMPRESSION_COMPRESSED);
>
> alloc_regs();
> compute_frag_coords();
> @@ -1077,8 +1090,10 @@ brw_blorp_blit_program::compute_frag_coords()
> struct brw_reg t1_uw1 = retype(t1, BRW_REGISTER_TYPE_UW);
> brw_MOV(&func, vec16(t1_uw1), brw_imm_v(0x3210));
> /* Move to UD sample_index register. */
> + brw_set_compression_control(&func, BRW_COMPRESSION_NONE);
> brw_MOV(&func, S, stride(t1_uw1, 1, 4, 0));
> brw_MOV(&func, offset(S, 1), suboffset(stride(t1_uw1, 1, 4, 0), 2));
> + brw_set_compression_control(&func, BRW_COMPRESSION_COMPRESSED);
> break;
> }
> case 8: {
> @@ -1103,9 +1118,11 @@ brw_blorp_blit_program::compute_frag_coords()
> brw_MOV(&func, vec16(t2_uw1), brw_imm_v(0x3210));
> brw_ADD(&func, vec16(S), retype(t1_ud1, BRW_REGISTER_TYPE_UW),
> stride(t2_uw1, 1, 4, 0));
> + brw_set_compression_control(&func, BRW_COMPRESSION_NONE);
> brw_ADD(&func, offset(S, 1),
> retype(t1_ud1, BRW_REGISTER_TYPE_UW),
> suboffset(stride(t2_uw1, 1, 4, 0), 2));
> + brw_set_compression_control(&func, BRW_COMPRESSION_COMPRESSED);
> break;
> }
> default:
> @@ -1147,7 +1164,6 @@ brw_blorp_blit_program::translate_tiling(bool old_tiled_w, bool new_tiled_w)
> */
> assert(s_is_zero);
>
> - brw_set_compression_control(&func, BRW_COMPRESSION_COMPRESSED);
> if (new_tiled_w) {
> /* Given X and Y coordinates that describe an address using Y tiling,
> * translate to the X and Y coordinates that describe the same address
> @@ -1217,7 +1233,6 @@ brw_blorp_blit_program::translate_tiling(bool old_tiled_w, bool new_tiled_w)
> brw_OR(&func, Yp, t1, t2);
> SWAP_XY_AND_XPYP();
> }
> - brw_set_compression_control(&func, BRW_COMPRESSION_NONE);
> }
>
> /**
> @@ -1234,7 +1249,6 @@ void
> brw_blorp_blit_program::encode_msaa(unsigned num_samples,
> intel_msaa_layout layout)
> {
> - brw_set_compression_control(&func, BRW_COMPRESSION_COMPRESSED);
> switch (layout) {
> case INTEL_MSAA_LAYOUT_NONE:
> /* No translation necessary, and S should already be zero. */
> @@ -1306,7 +1320,6 @@ brw_blorp_blit_program::encode_msaa(unsigned num_samples,
> s_is_zero = true;
> break;
> }
> - brw_set_compression_control(&func, BRW_COMPRESSION_NONE);
> }
>
> /**
> @@ -1323,7 +1336,6 @@ void
> brw_blorp_blit_program::decode_msaa(unsigned num_samples,
> intel_msaa_layout layout)
> {
> - brw_set_compression_control(&func, BRW_COMPRESSION_COMPRESSED);
> switch (layout) {
> case INTEL_MSAA_LAYOUT_NONE:
> /* No translation necessary, and S should already be zero. */
> @@ -1386,7 +1398,6 @@ brw_blorp_blit_program::decode_msaa(unsigned num_samples,
> SWAP_XY_AND_XPYP();
> break;
> }
> - brw_set_compression_control(&func, BRW_COMPRESSION_NONE);
> }
>
> /**
> @@ -1422,7 +1433,6 @@ brw_blorp_blit_program::translate_dst_to_src()
> struct brw_reg Xp_f = retype(Xp, BRW_REGISTER_TYPE_F);
> struct brw_reg Yp_f = retype(Yp, BRW_REGISTER_TYPE_F);
>
> - brw_set_compression_control(&func, BRW_COMPRESSION_COMPRESSED);
> /* Move the UD coordinates to float registers. */
> brw_MOV(&func, Xp_f, X);
> brw_MOV(&func, Yp_f, Y);
> @@ -1470,7 +1480,6 @@ brw_blorp_blit_program::translate_dst_to_src()
> brw_MOV(&func, Yp, Y_f);
> SWAP_XY_AND_XPYP();
> }
> - brw_set_compression_control(&func, BRW_COMPRESSION_NONE);
> }
>
> void
> @@ -1511,12 +1520,10 @@ brw_blorp_blit_program::single_to_blend()
> * that maxe up a pixel). So we need to multiply our X and Y coordinates
> * each by 2 and then add 1.
> */
> - brw_set_compression_control(&func, BRW_COMPRESSION_COMPRESSED);
> brw_SHL(&func, t1, X, brw_imm_w(1));
> brw_SHL(&func, t2, Y, brw_imm_w(1));
> brw_ADD(&func, Xp, t1, brw_imm_w(1));
> brw_ADD(&func, Yp, t2, brw_imm_w(1));
> - brw_set_compression_control(&func, BRW_COMPRESSION_NONE);
> SWAP_XY_AND_XPYP();
> }
>
> @@ -1758,6 +1765,7 @@ brw_blorp_blit_program::manual_blend_bilinear(unsigned num_samples)
>
> #define SAMPLE(x, y) offset(texture_data[x], y)
> brw_set_access_mode(&func, BRW_ALIGN_16);
> + brw_set_compression_control(&func, BRW_COMPRESSION_NONE);
> for (int index = 3; index > 0; ) {
> /* Since we're doing SIMD16, 4 color channels fits in to 8 registers.
> * Counter value of 8 in 'for' loop below is used to interpolate all
> @@ -1777,6 +1785,7 @@ brw_blorp_blit_program::manual_blend_bilinear(unsigned num_samples)
> offset(y_frac, k & 1),
> vec8(SAMPLE(2, k)),
> vec8(SAMPLE(0, k)));
> + brw_set_compression_control(&func, BRW_COMPRESSION_COMPRESSED);
> brw_set_access_mode(&func, BRW_ALIGN_1);
> #undef SAMPLE
> }
>
More information about the mesa-dev
mailing list