[Mesa-dev] [PATCH 10/12] i965/meta: Support 16x MSAA in the meta stencil blit

Ben Widawsky ben at bwidawsk.net
Tue Sep 22 16:33:28 PDT 2015


On Thu, Sep 17, 2015 at 05:00:12PM +0100, Neil Roberts wrote:
> The destination rectangle is now drawn at 4x4 the size and the shader
> code to calculate the sample number is adjusted accordingly.
> ---
>  src/mesa/drivers/dri/i965/brw_meta_stencil_blit.c | 22 +++++++++++++++++-----
>  1 file changed, 17 insertions(+), 5 deletions(-)
> 
> diff --git a/src/mesa/drivers/dri/i965/brw_meta_stencil_blit.c b/src/mesa/drivers/dri/i965/brw_meta_stencil_blit.c
> index cbbb919..4e9aa94 100644
> --- a/src/mesa/drivers/dri/i965/brw_meta_stencil_blit.c
> +++ b/src/mesa/drivers/dri/i965/brw_meta_stencil_blit.c
> @@ -163,6 +163,13 @@ static const char *fs_tmpl =
>     "      txl_coords.x = ((X & int(0xfff8)) >> 2) | (X & int(0x1));\n"
>     "      txl_coords.y = ((Y & int(0xfffc)) >> 1) | (Y & int(0x1));\n"
>     "      sample_index = (X & 0x4) | (Y & 0x2) | ((X & 0x2) >> 1);\n"
> +   "      break;\n"
> +   "   case 16:\n"
> +   "      txl_coords.x = ((X & int(0xfff8)) >> 2) | (X & int(0x1));\n"
> +   "      txl_coords.y = ((Y & int(0xfff8)) >> 2) | (Y & int(0x1));\n"
> +   "      sample_index = (((Y & 0x4) << 1) | (X & 0x4) | (Y & 0x2) |\n"
> +   "                      ((X & 0x2) >> 1));\n"
> +   "      break;\n"
>     "   }\n"
>     "}\n"
>     "\n"
> @@ -313,11 +320,16 @@ adjust_msaa(struct blit_dims *dims, int num_samples)
>        dims->dst_x0 *= 2;
>        dims->dst_x1 *= 2;
>     } else if (num_samples) {
> -      const int x_num_samples = num_samples / 2;
> -      dims->dst_x0 = ROUND_DOWN_TO(dims->dst_x0 * x_num_samples, num_samples);
> -      dims->dst_y0 = ROUND_DOWN_TO(dims->dst_y0 * 2, 4);
> -      dims->dst_x1 = ALIGN(dims->dst_x1 * x_num_samples, num_samples);
> -      dims->dst_y1 = ALIGN(dims->dst_y1 * 2, 4);
> +      const int y_num_samples = num_samples >= 16 ? 4 : 2;
> +      const int x_num_samples = num_samples / y_num_samples;
> +      dims->dst_x0 = ROUND_DOWN_TO(dims->dst_x0 * x_num_samples,
> +                                   x_num_samples * 2);
> +      dims->dst_y0 = ROUND_DOWN_TO(dims->dst_y0 * y_num_samples,
> +                                   y_num_samples * 2);
> +      dims->dst_x1 = ALIGN(dims->dst_x1 * x_num_samples,
> +                           x_num_samples * 2);
> +      dims->dst_y1 = ALIGN(dims->dst_y1 * y_num_samples,
> +                           y_num_samples * 2);
>     }
>  }
>  

I am in the middle of implementing stencil blits for gen9+ with stencil_export.
I think this goes away if we do that, right (since only MSAA 16x is gen9+ only)?

BTW, I don't actually care to understand what's going on here, hopefully my
acked-by is good enough...


More information about the mesa-dev mailing list