<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Thu, Sep 8, 2016 at 2:39 PM, Francisco Jerez <span dir="ltr"><<a href="mailto:currojerez@riseup.net" target="_blank">currojerez@riseup.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">Jason Ekstrand <<a href="mailto:jason@jlekstrand.net">jason@jlekstrand.net</a>> writes:<br>
<br>
> Blorp doesn't handle spilling so we set allow_spilling to false in that<br>
> case.  The blorp 16x MSAA resolve shader spills in 16-wide but not 8-wide.<br>
> This commit makes it so that we fail the 16-wide compile and successfully<br>
> fall back to 8-wide instead of just assert-failing when trying to compile<br>
> the 16-wide shader.<br>
><br>
> Signed-off-by: Jason Ekstrand <<a href="mailto:jason@jlekstrand.net">jason@jlekstrand.net</a>><br>
> ---<br>
>  src/mesa/drivers/dri/i965/brw_<wbr>fs.cpp | 7 +++++--<br>
>  1 file changed, 5 insertions(+), 2 deletions(-)<br>
><br>
> diff --git a/src/mesa/drivers/dri/i965/<wbr>brw_fs.cpp b/src/mesa/drivers/dri/i965/<wbr>brw_fs.cpp<br>
> index d0b55ae..73aa5d2 100644<br>
> --- a/src/mesa/drivers/dri/i965/<wbr>brw_fs.cpp<br>
> +++ b/src/mesa/drivers/dri/i965/<wbr>brw_fs.cpp<br>
> @@ -5906,6 +5906,11 @@ fs_visitor::allocate_<wbr>registers(bool allow_spilling)<br>
>     }<br>
><br>
>     if (!allocated_without_spills) {<br>
> +      if (!allow_spilling) {<br>
> +         assert(dispatch_width > 8);<br>
<br>
</span>Not sure it makes sense for the register allocator to set different<br>
requirements based on the build dispatch width, wouldn't it make sense<br>
to just fail() here consistently if allow_spilling is false regardless<br>
of the dispatch width, and let blorp assert fail if none of the dispatch<br>
widths it tries out compiles successfully?<span class=""><br></span></blockquote><div><br></div><div>Agreed.  I'll drop the assert.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">
> +         fail("Failure to register allocate and spilling is not allowed.");<br>
> +      }<br>
> +<br>
>        /* We assume that any spilling is worse than just dropping back to<br>
>         * SIMD8.  There's probably actually some intermediate point where<br>
>         * SIMD16 with a couple of spills is still better.<br>
> @@ -5930,8 +5935,6 @@ fs_visitor::allocate_<wbr>registers(bool allow_spilling)<br>
>        }<br>
>     }<br>
><br>
> -   assert(last_scratch == 0 || allow_spilling);<br>
> -<br>
>     /* This must come after all optimization and register allocation, since<br>
>      * it inserts dead code that happens to have side effects, and it does<br>
>      * so based on the actual physical registers in use.<br>
> --<br>
> 2.5.0.400.gff86faf<br>
><br>
</span>> ______________________________<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>
</blockquote></div><br></div></div>