Can someone REALLY explain the difference between Force Full Composition Pipeline and Force Composition Pipeline?

I have bumped into these two settings as I was looking for a way to get rid of tearing on my Linux desktop (Fedore 25 GNOME 3.22). Both seem to solve my problem. But I’m unable to really grasp the difference between both of them.

The tool tips and documentation basically say this

"“ForceCompositionPipeline”: possible values are “On” or “Off”. The NVIDIA X driver can use a composition pipeline to apply X screen transformations and rotations. “ForceCompositionPipeline” can be used to force the use of this pipeline, even when no transformations or rotations are applied to the screen.

“ForceFullCompositionPipeline”: possible values are “On” or “Off”. This option implicitly enables “ForceCompositionPipeline” and additionally makes use of the composition pipeline to apply ViewPortOut scaling."

But in practice what’s the difference of forcing composition pipeline to apply ViewPortOut scaling or not? Will ForceFullCompositionPipeline have a bigger impact in performance than ForceCompositionPipeline? Can someone please enlighten me?

The difference is scaling between ViewPortIn and ViewPortOut. If the display hardware can do the scaling, then the driver will use it even if ForceCompositionPipeline is enabled. However, ForceFullCompositionPipeline will disable the display scaling and use the GPU’s shaders to do the scaling instead.

There’s no difference if there’s no scaling.

There will be somewhat of an impact to power draw and performance, but it’s hard to quantify and depends heavily on your scaling configuration.