[Mesa-dev] [PATCH 17/29] i965/blorp: Remove a pile of blorp_blit restrictions

Jason Ekstrand jason at jlekstrand.net
Tue May 1 22:07:27 UTC 2018


On Tue, Mar 6, 2018 at 12:15 AM, Pohjolainen, Topi <
topi.pohjolainen at gmail.com> wrote:

> On Fri, Jan 26, 2018 at 05:59:46PM -0800, Jason Ekstrand wrote:
> > Previously, blorp could only blit into something that was renderable.
> > Thanks to recent additions to blorp, it can now blit into basically
> > anything so long as it isn't compressed.
> > ---
> >  src/mesa/drivers/dri/i965/brw_blorp.c | 67
> +++++++++++++++++------------------
> >  1 file changed, 33 insertions(+), 34 deletions(-)
> >
> > diff --git a/src/mesa/drivers/dri/i965/brw_blorp.c
> b/src/mesa/drivers/dri/i965/brw_blorp.c
> > index 82d9de1..b3b007f 100644
> > --- a/src/mesa/drivers/dri/i965/brw_blorp.c
> > +++ b/src/mesa/drivers/dri/i965/brw_blorp.c
> > @@ -199,6 +199,26 @@ blorp_surf_for_miptree(struct brw_context *brw,
> >     *level -= mt->first_level;
> >  }
> >
> > +static bool
> > +brw_blorp_supports_dst_format(struct brw_context *brw, mesa_format
> format)
> > +{
> > +   /* If it's renderable, it's definitely supported. */
> > +   if (brw->mesa_format_supports_render[format])
> > +      return true;
> > +
> > +   /* BLORP can't compress anything */
> > +   if (_mesa_is_format_compressed(format))
> > +      return false;
> > +
> > +   /* No exotic formats such as GL_LUMINANCE_ALPHA */
> > +   if (_mesa_get_format_bits(format, GL_RED_BITS) == 0 &&
> > +       _mesa_get_format_bits(format, GL_DEPTH_BITS) == 0 &&
> > +       _mesa_get_format_bits(format, GL_STENCIL_BITS) == 0)
> > +      return false;
> > +
> > +   return true;
> > +}
> > +
> >  static enum isl_format
> >  brw_blorp_to_isl_format(struct brw_context *brw, mesa_format format,
> >                          bool is_render_target)
> > @@ -216,15 +236,20 @@ brw_blorp_to_isl_format(struct brw_context *brw,
> mesa_format format,
> >        return ISL_FORMAT_R32_FLOAT;
> >     case MESA_FORMAT_Z_UNORM16:
> >        return ISL_FORMAT_R16_UNORM;
> > -   default: {
> > +   default:
> >        if (is_render_target) {
> > -         assert(brw->mesa_format_supports_render[format]);
> > -         return brw->mesa_to_isl_render_format[format];
> > +         assert(brw_blorp_supports_dst_format(brw, format));
> > +         if (brw->mesa_format_supports_render[format]) {
> > +            return brw->mesa_to_isl_render_format[format];
> > +         } else {
>

Maybe I should move the comment below up to here where it actually means
something. :-)


> > +            return brw_isl_format_for_mesa_format(format);
> > +         }
> >        } else {
> > +         /* Some destinations (is_render_target == true) are supported
> by
>
> I didn't really understand this comment, this is inside block where
> "is_render_target == false".
>
>
> +          * blorp even though we technically can't render to them.
> > +          */
> >           return brw_isl_format_for_mesa_format(format);
> >        }
> > -      break;
> > -   }
> >     }
> >  }
> >
> > @@ -553,14 +578,6 @@ try_blorp_blit(struct brw_context *brw,
> >        src_mt = find_miptree(buffer_bit, src_irb);
> >        dst_mt = find_miptree(buffer_bit, dst_irb);
> >
> > -      /* We can't handle format conversions between Z24 and other
> formats
> > -       * since we have to lie about the surface format. See the
> comments in
> > -       * brw_blorp_surface_info::set().
> > -       */
> > -      if ((src_mt->format == MESA_FORMAT_Z24_UNORM_X8_UINT) !=
> > -          (dst_mt->format == MESA_FORMAT_Z24_UNORM_X8_UINT))
> > -         return false;
> > -
> >        /* We also can't handle any combined depth-stencil formats
> because we
> >         * have to reinterpret as a color format.
> >         */
> > @@ -629,32 +646,14 @@ brw_blorp_copytexsubimage(struct brw_context *brw,
> >     struct intel_mipmap_tree *src_mt = src_irb->mt;
> >     struct intel_mipmap_tree *dst_mt = intel_image->mt;
> >
> > -   /* There is support for only up to eight samples. */
> > -   if (src_mt->surf.samples > 8 || dst_mt->surf.samples > 8)
> > -      return false;
>
> Previous patches only dealt with formats and I fail to see how they enable
> samples > 8. We probably can, to me it just seems that this is because of
> something else than changes in this series. Or did I miss something?
>

We've been able to support 16x MSAA for a long time.  This series really
has nothing to do with it.  I'm happy to make that it's own patch if you'd
like.


> > -
> > -   if (_mesa_get_format_base_format(src_rb->Format) !=
> > -       _mesa_get_format_base_format(dst_image->TexFormat)) {
> > -      return false;
> > -   }
> > -
> > -   /* We can't handle format conversions between Z24 and other formats
> since
> > -    * we have to lie about the surface format.  See the comments in
> > -    * brw_blorp_surface_info::set().
> > -    */
> > -   if ((src_mt->format == MESA_FORMAT_Z24_UNORM_X8_UINT) !=
> > -       (dst_mt->format == MESA_FORMAT_Z24_UNORM_X8_UINT)) {
> > -      return false;
> > -   }
> > -
> > -   /* We also can't handle any combined depth-stencil formats because we
> > -    * have to reinterpret as a color format.
> > +   /* We can't handle any combined depth-stencil formats because we
> have to
> > +    * reinterpret as a color format.
> >      */
> >     if (_mesa_get_format_base_format(src_mt->format) ==
> GL_DEPTH_STENCIL ||
> >         _mesa_get_format_base_format(dst_mt->format) ==
> GL_DEPTH_STENCIL)
> >        return false;
> >
> > -   if (!brw->mesa_format_supports_render[dst_image->TexFormat])
> > +   if (!brw_blorp_supports_dst_format(brw, dst_image->TexFormat))
> >        return false;
> >
> >     /* Source clipping shouldn't be necessary, since copytexsubimage (in
> > --
> > 2.5.0.400.gff86faf
> >
> > _______________________________________________
> > mesa-dev mailing list
> > mesa-dev at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180501/7e868076/attachment.html>


More information about the mesa-dev mailing list