This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Sliced front buffer rendering on MALI GPUS

I developed a custom front buffer rendering method for VR that supports vertex displacement distortion correction:

https://github.com/Consti10/FPV_VR_2018

therefore i need to render half-screen slices dirctely into the fron tbuffer, similar as descrbed here:

https://www.imgtec.com/blog/reducing-latency-in-vr-by-using-single-buffered-strip-rendering/

While rendering half-screen slices into the front buffer is no problem on QCOM GPUs, because they have a usable extension (

QCOM_tiled_rendering) I am unable to archieve the same one MALI GPUs. Is there a way to render half-screen slices on MALI GPUs
without performance cuts because of half-screen clears ? E.g. like Google does in Daydream ?


Parents
  • Hi,

    This is is possible on Mali - all VR implementations I've seen so far render left and right eyes separately to reduce latency, so it is a commonly used technique on Mali.

    The only time you will hit a performance penalty when just rendering half of the screen (e.g. using scissor boxes to limit the actual draws to the half you are rendering) is when your output surface is using multisample anti-aliasing.

    You can also avoid this overhead on Mali by adding a glInvalidateFramebuffer() as the first operation for each half. Technically this will invalidate the content of the entire front-buffer, but the invalidate will only actually impact 16x16 tiles which intersect the scissor box; for the tiles which do not intersect the scissor we guarantee that the invalidate will not actually modify memory. To make this work reliably we recommend making sure that the scissor box boundary is aligned along the edge of a tile; if it doesn't then the content on the split tile on the "wrong" side of the scissor box boundary will be set to clear color.

    Cheers, 
    P

Reply
  • Hi,

    This is is possible on Mali - all VR implementations I've seen so far render left and right eyes separately to reduce latency, so it is a commonly used technique on Mali.

    The only time you will hit a performance penalty when just rendering half of the screen (e.g. using scissor boxes to limit the actual draws to the half you are rendering) is when your output surface is using multisample anti-aliasing.

    You can also avoid this overhead on Mali by adding a glInvalidateFramebuffer() as the first operation for each half. Technically this will invalidate the content of the entire front-buffer, but the invalidate will only actually impact 16x16 tiles which intersect the scissor box; for the tiles which do not intersect the scissor we guarantee that the invalidate will not actually modify memory. To make this work reliably we recommend making sure that the scissor box boundary is aligned along the edge of a tile; if it doesn't then the content on the split tile on the "wrong" side of the scissor box boundary will be set to clear color.

    Cheers, 
    P

Children
No data