<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Tue, Apr 3, 2018 at 8:05 AM, Pohjolainen, Topi <span dir="ltr"><<a href="mailto:topi.pohjolainen@gmail.com" target="_blank">topi.pohjolainen@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On Thu, Mar 29, 2018 at 10:58:40AM -0700, Rafael Antognolli wrote:<br>
> gen10 can emit the clear color by setting it on a buffer somewhere, and<br>
> then adding only the address to the surface state.<br>
><br>
> This commit add support for that on isl_surf_fill_state, and if that is<br>
> requested, skip setting the clear value itself.<br>
><br>
> v2: Add assert to make sure we are at least on gen10.<br>
><br>
> Signed-off-by: Rafael Antognolli <<a href="mailto:rafael.antognolli@intel.com">rafael.antognolli@intel.com</a>><br>
> Reviewed-by: Jordan Justen <<a href="mailto:jordan.l.justen@intel.com">jordan.l.justen@intel.com</a>><br>
> ---<br>
>  src/intel/isl/isl.h               |  9 +++++++++<br>
>  src/intel/isl/isl_surface_<wbr>state.c | 18 ++++++++++++++----<br>
>  2 files changed, 23 insertions(+), 4 deletions(-)<br>
><br>
> diff --git a/src/intel/isl/isl.h b/src/intel/isl/isl.h<br>
> index 2edf0522e32..c50b78d4701 100644<br>
> --- a/src/intel/isl/isl.h<br>
> +++ b/src/intel/isl/isl.h<br>
> @@ -1307,6 +1307,15 @@ struct isl_surf_fill_state_info {<br>
>      */<br>
>     union isl_color_value clear_color;<br>
><br>
> +   /**<br>
> +    * Send only the clear value address<br>
> +    *<br>
> +    * If set, we only pass the clear address to the GPU and it will fetch it<br>
> +    * from wherever it is.<br>
> +    */<br>
> +   bool use_clear_address;<br>
> +   uint64_t clear_address;<br>
> +<br>
>     /**<br>
>      * Surface write disables for gen4-5<br>
>      */<br>
> diff --git a/src/intel/isl/isl_surface_<wbr>state.c b/src/intel/isl/isl_surface_<wbr>state.c<br>
> index 32a5429f2bf..bff9693f02d 100644<br>
> --- a/src/intel/isl/isl_surface_<wbr>state.c<br>
> +++ b/src/intel/isl/isl_surface_<wbr>state.c<br>
> @@ -637,11 +637,21 @@ isl_genX(surf_fill_state_s)(<wbr>const struct isl_device *dev, void *state,<br>
>  #endif<br>
><br>
>     if (info->aux_usage != ISL_AUX_USAGE_NONE) {<br>
> +      if (info->use_clear_address) {<br>
> +#if GEN_GEN >= 10<br>
> +         s.ClearValueAddressEnable = true;<br>
<br>
</div></div>This will set it for multisampled also and upset piglit tests. We need<br>
something of this sort:<br>
<br>
            s.ClearValueAddressEnable = info->aux_usage != ISL_AUX_USAGE_MCS;<br><div class="HOEnZb"><div class="h5"></div></div></blockquote><div><br></div><div>Can we assert instead?  If the caller asks for a clear address to be set they should get it and not have it magically disabled when they ask for MCS.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">
> +         s.ClearValueAddress = info->clear_address;<br>
> +#else<br>
> +         unreachable("Gen9 and earlier do not support indirect clear colors");<br>
> +#endif<br>
> +      }<br>
>  #if GEN_GEN >= 9<br>
> -      s.RedClearColor = info->clear_color.u32[0];<br>
> -      s.GreenClearColor = info->clear_color.u32[1];<br>
> -      s.BlueClearColor = info->clear_color.u32[2];<br>
> -      s.AlphaClearColor = info->clear_color.u32[3];<br>
> +      if (!info->use_clear_address) {<br>
> +         s.RedClearColor = info->clear_color.u32[0];<br>
> +         s.GreenClearColor = info->clear_color.u32[1];<br>
> +         s.BlueClearColor = info->clear_color.u32[2];<br>
> +         s.AlphaClearColor = info->clear_color.u32[3];<br>
> +      }<br>
>  #elif GEN_GEN >= 7<br>
>        /* Prior to Sky Lake, we only have one bit for the clear color which<br>
>         * gives us 0 or 1 in whatever the surface's format happens to be.<br>
> --<br>
> 2.14.3<br>
><br>
> ______________________________<wbr>_________________<br>
> mesa-dev mailing list<br>
> <a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
> <a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>mailman/listinfo/mesa-dev</a><br>
______________________________<wbr>_________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>mailman/listinfo/mesa-dev</a><br>
</div></div></blockquote></div><br></div></div>