[Mesa-dev] [PATCH v2 3/3] mapi/glthread: generate asynchronous code for PBO transfer

Gregory Hainaut gregory.hainaut at gmail.com
Wed Apr 5 10:30:54 UTC 2017


             # Classify fixed and variable parameters.
             self.fixed_params = []
             self.variable_params = []
             for p in self.parameters:
                 if p.is_padding:
                     continue
    -            if p.is_variable_length():
    +            if self.marshal == "upbo" and p.is_pointer():
    +                # Pixel buffer transfer API is tricky. By default
it contains
    +                # a pointer to user memory so a variable length parameter.
    +                # When a pixel buffer is bound, the pointer
becomes an offset.
    +                #
    +                # Non-PBO transfer will be synchronous so
parameter type isn't
    +                # important. PBO transfer will be asynchronous so
the parameter
    +                # must be marked as fixed
    +                self.fixed_params.append(p)


> If this is needed for upbo, shouldn't it also be needed for ppbo?
>
> Cheers,
> Nicolai

Hello Nicolai,

It isn't symmetrical. In case of UPBO data ought to be copied from app
thread to gl thread. You can see variable_length parameter as input
pointer. Variable length will generate the memcpy code.

However PPBO will copy from GPU to user pointer. There is no data
associated with the pointer so the pointer isn't "used" by glthread,
only transferred to GL.

I think the code would love an extra comment.

Cheers,
Gregory


More information about the mesa-dev mailing list