On 13/7/24 17:56, SamJakob wrote:
> It is common practice when implementing double-buffering
> on VideoCore to do so by multiplying the height of the
> virtual buffer by the number of virtual screens desired
> (i.e., two - in the case of double-bufferring).
>
> At present, this won't work in QEMU because the logic in
> fb_use_offsets require that both the virtual width and
> height exceed their physical counterparts.
>
> This appears to be unintentional/a typo and indeed the
> comment states; "Experimentally, the hardware seems to
> do this only if the viewport size is larger than the
> physical screen". The viewport/virtual size would be
> larger than the physical size if either virtual dimension
> were larger than their physical counterparts and not
> necessarily both.
>
> Signed-off-by: SamJakob <me@samjakob.com>
> ---
> hw/display/bcm2835_fb.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/hw/display/bcm2835_fb.c b/hw/display/bcm2835_fb.c
> index e40ed2d2e1..650db3da82 100644
> --- a/hw/display/bcm2835_fb.c
> +++ b/hw/display/bcm2835_fb.c
> @@ -145,7 +145,7 @@ static bool fb_use_offsets(BCM2835FBConfig *config)
> * viewport size is larger than the physical screen. (It doesn't
> * prevent the guest setting this silly viewport setting, though...)
> */
> - return config->xres_virtual > config->xres &&
> + return config->xres_virtual > config->xres ||
> config->yres_virtual > config->yres;
> }
>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>