# 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