# 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
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to