On 05.04.2017 12:30, Gregory Hainaut wrote:
# 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.
Okay, I get it now. But the comment could maybe use some re-wording,
especially because this whole issue only applies to some functions:
those where the marshaling code theoretically has a size, such as with
glCompressedTexImage2D. It would be good to clarify that.
Thanks,
Nicolai
--
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev