[Mesa-dev] [PATCH v2 3/3] mapi/glthread: generate asynchronous code for PBO transfer
Nicolai Hähnle
nhaehnle at gmail.com
Thu Apr 13 16:31:06 UTC 2017
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.
More information about the mesa-dev
mailing list