gfx, gma: Add helper to decide scaling aspect

Scaling_Type() returns the resulting scaling format, `Letterbox`,
`Pillarbox`, or `Evenly` when keeping aspect ratio.

Change-Id: I86fb15b03c2f4b55cb00e85b57dc7a64583557d0
Signed-off-by: Nico Huber <nico.h@gmx.de>
Reviewed-on: https://review.coreboot.org/26766
Reviewed-by: Arthur Heymans <arthur@aheymans.xyz>
This commit is contained in:
Nico Huber
2018-06-02 16:56:35 +02:00
parent 71677460a2
commit b217ecebcc
2 changed files with 17 additions and 0 deletions

View File

@@ -164,6 +164,9 @@ private
function Requires_Scaling (Pipe_Cfg : Pipe_Config) return Boolean is
(Requires_Scaling (Pipe_Cfg.Framebuffer, Pipe_Cfg.Mode));
function Scaling_Type (Pipe_Cfg : Pipe_Config) return Scaling_Aspect is
(Scaling_Type (Pipe_Cfg.Framebuffer, Pipe_Cfg.Mode));
----------------------------------------------------------------------------
-- Internal representation of a single pipe's configuration

View File

@@ -197,4 +197,18 @@ private
(Rotated_Width (FB) /= Mode.H_Visible or
Rotated_Height (FB) /= Mode.V_Visible);
type Scaling_Aspect is (Uniform, Letterbox, Pillarbox);
function Scaling_Type (FB : Framebuffer_Type; Mode : Mode_Type)
return Scaling_Aspect is
(if Pos32 (Mode.H_Visible) * Pos32 (Rotated_Height (FB)) <
Pos32 (Mode.V_Visible) * Pos32 (Rotated_Width (FB))
then
Letterbox
elsif Pos32 (Mode.H_Visible) * Pos32 (Rotated_Height (FB)) >
Pos32 (Mode.V_Visible) * Pos32 (Rotated_Width (FB))
then
Pillarbox
else
Uniform);
end HW.GFX;