[PATCH 2/5] wined3d: Use the default queue index for resource fencing.

Henri Verbeet hverbeet at gmail.com
Thu Mar 10 03:06:47 CST 2022


On Thu, 10 Mar 2022 at 08:44, Stefan Dösinger <stefandoesinger at gmail.com> wrote:
> > Am 09.03.2022 um 20:57 schrieb Henri Verbeet <hverbeet at gmail.com>:
> > On Wed, 9 Mar 2022 at 11:48, Stefan Dösinger <stefan at codeweavers.com> wrote:
> >> +#define GE_WRAP(x, y) (((x)-(y)) < (UINT_MAX / 2))
> >> +    if (!GE_WRAP(head, access_time))
> >> +        return;
> >> +
> >> +    while (1)
> >> +    {
> >> +        tail = *(volatile ULONG *)&cs->queue[WINED3D_CS_QUEUE_DEFAULT].tail;
> >> +        if (head == tail) /* Queue empty. */
> >> +            break;
> >> +
> >> +        if (!GE_WRAP(access_time, tail) && access_time != tail)
> >> +            break;
> >> +
> >>         YieldProcessor();
> >> +    }
> >> +#undef GE_WRAP
> >> }
> >> +C_ASSERT(WINED3D_CS_QUEUE_SIZE < UINT_MAX / 4);
> >>
> > GE_WRAP doesn't need to be a macro, and we typically use "for (;;)"
> > instead of "while (1)"; I'm not going to hold the series for that
> > though.
>
> I find GE_WRAP helpful for the comment explaining what we do here.
>
Sure, but a regular function would also do that.



More information about the wine-devel mailing list