Komponent sprzętowy (HWC) decyduje o najskuteczniejszym sposobie łączenia buforów za pomocą dostępnego sprzętu. Jako interfejs HAL jest on implementowany w zależności od urządzenia i zwykle jest wykonywany przez producenta sprzętowego wyświetlacza.
Wartość tego podejścia jest łatwa do zrozumienia, gdy weźmiemy pod uwagę płaty nakładek, które łączą wiele buforów w sprzęcie wyświetlacza, a nie na karcie graficznej. Weźmy na przykład typowy telefon z Androidem w orientacji pionowej, z paskiem stanu u góry, paskiem nawigacji u dołu i treścią aplikacji w pozostałych miejscach. Zawartość każdej warstwy znajduje się w osobnych buforach. Kompozycję możesz dostosować na jeden z tych sposobów:
- Renderowanie treści aplikacji w buforze pomocniczym, a następnie renderowanie paska stanu i paska nawigacyjnego, a na końcu przekazanie bufora pomocniczego do wyświetlacza.
- Przekazywanie wszystkich 3 buforów na wyświetlacz i instruowanie go do odczytywania danych z różnych buforów w różnych częściach ekranu.
To drugie podejście może być znacznie bardziej efektywne.
Możliwości procesora wyświetlacza różnią się znacznie. Liczba nakładek, możliwość obracania lub mieszania warstw oraz ograniczenia dotyczące pozycjonowania i nakładania mogą być trudne do wyrażenia za pomocą interfejsu API. Aby uwzględnić te opcje, HWC wykonuje te obliczenia:
- SurfaceFlinger przekazuje HWC pełną listę warstw i pyta: „Jak chcesz to zrobić?”.
- HWC reaguje, oznaczając każdą warstwę jako kompozycję urządzenia lub klienta.
- SurfaceFlinger obsługuje dowolnego klienta, przekazując bufor wyjściowy do HWC, a HWC zajmuje się resztą.
Producenci sprzętu mogą dostosowywać kod do podejmowania decyzji, dzięki czemu można uzyskać najlepszą wydajność każdego urządzenia.
Gdy nic na ekranie się nie zmienia, płaszczyzny nakładek mogą być mniej wydajne niż kompozycja GL. Dotyczy to zwłaszcza sytuacji, gdy nakładka zawiera przezroczyste piksele, a nachodzące na siebie warstwy są mieszane. W takich przypadkach HWC może poprosić o kompozycję GLES dla niektórych lub wszystkich warstw i zatrzymać zbufor złożony. Jeśli SurfaceFlinger poprosi o złożenie tego samego zestawu buforów, HWC może wyświetlić wcześniej złożony bufor roboczy. Może to wydłużyć czas pracy urządzenia na baterii.
Urządzenia z Androidem zwykle obsługują 4 poziomy nakładek. Próba złożenia większej liczby warstw niż nakładek powoduje, że system używa do niektórych z nich kompozycji GLES, co oznacza, że liczba warstw używanych przez aplikację może mieć zauważalny wpływ na zużycie energii i wydajność.