[Mesa-dev] [PATCH] i965: Don't bother to call blorp if the blit is zero-sized

Jason Ekstrand jason at jlekstrand.net
Mon Oct 29 17:39:51 UTC 2018


FYI, I don't consider this patch to be the correct approach for solving the
problem.  There are other callers that could run into trouble; in
particular any super-small blits like 0.5-wide.  I think we likely want to
either do a full audit of all blorp_blit callers or somehow solve it in
blorp_blit.  The fact that we're using floats at all bothers me quite a bit
because it means we're likely loosing some precision somewhere.

--Jason

On Mon, Oct 29, 2018 at 11:27 AM Vadim Shovkoplias <
vadim.shovkoplias at gmail.com> wrote:

> Hi Jason,
>
> Looks like there is an issue with the float comparison. It works perfectly
> fine for me if it is compared with some precision:
>
> if( (fabsf(*dstX1 - *dstX0) < 1e-8F) || (fabsf(*dstY1 - *dstY0) < 1e-8F) )
> {
>       return true;
>
>
>
> пн, 1 окт. 2018 г. в 19:24, Eric Engestrom <eric.engestrom at intel.com>:
>
>> On Monday, 2018-10-01 11:04:09 +0200, Juan A. Suarez Romero wrote:
>> > On Tue, 2018-09-11 at 11:15 -0500, Jason Ekstrand wrote:
>> > > Cc: mesa-stable at lists.freedesktop.org
>> > > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=107892
>> > > ---
>> > >  src/mesa/drivers/dri/i965/brw_meta_util.c | 3 +++
>> > >  1 file changed, 3 insertions(+)
>> > >
>> >
>> > This has been reviewed, but not pushed yet.
>> >
>> >
>> >       J.A.
>> >
>> > > diff --git a/src/mesa/drivers/dri/i965/brw_meta_util.c
>> b/src/mesa/drivers/dri/i965/brw_meta_util.c
>> > > index 908b0989769..6714d96237c 100644
>> > > --- a/src/mesa/drivers/dri/i965/brw_meta_util.c
>> > > +++ b/src/mesa/drivers/dri/i965/brw_meta_util.c
>> > > @@ -247,6 +247,9 @@ brw_meta_mirror_clip_and_scissor(const struct
>> gl_context *ctx,
>> > >                      clip_src_y1, clip_dst_y1, clip_dst_y0,
>> > >                      scaleY, false);
>> > >
>> > > +   if (*dstX0 == *dstX1 || *dstY0 == *dstY1)
>> > > +      return true;
>>
>> This comes right after this code (few lines above in the same function):
>>
>>   float scaleX = (float) (*srcX1 - *srcX0) / (*dstX1 - *dstX0);
>>   float scaleY = (float) (*srcY1 - *srcY0) / (*dstY1 - *dstY0);
>>
>> if *dstX0 == *dstX1, that would be a division by 0, so I don't think that
>> this new `if *dstX0 == *dstX1` is reachable (same for *dstY0 == *dstY1)
>>
>> > > +
>> > >     /* Account for the fact that in the system framebuffer, the
>> origin is at
>> > >      * the lower left.
>> > >      */
>> >
>> > _______________________________________________
>> > mesa-dev mailing list
>> > mesa-dev at lists.freedesktop.org
>> > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>>
> _______________________________________________
> 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/20181029/4456cd39/attachment.html>


More information about the mesa-dev mailing list