You don't really need a GPU when your screen is small and you might only be updating it no faster than ~1 fps and could tolerate ~100ms latency in response to an event. And keep in mind most DOS games were software-rendered on CPUs much less powerful than your modern higher-end microcontroller (e.g. rpi pico, stm32, esp32, etc).
Instead of a full GPU, some microcontrollers may have a special "Blitter" engine...for instance NXP has a "Pixel Pipeline-Processor" (PXP) engine which is just-enough hardware for scaling, rotating, alpha-blending, and copying pixels, and it is for instance possible to configure lvgl to use the PXP to handle such grunt work while leaving the rest of lvgl rendering to software.
DOS games on weaker chips still weren't 1fps 100ms. Even without blitters, which commonly appeared only around windows 95 era afair, they ran pretty smoothly for the hardware they had. Any modern cheapest weakest chip will run timespace-warping circles around 8086, not to mention "prev gen" chips.
Exactly my point (I couldn't tell if you were agreeing or disagreeing). I pulled the "1fps 100ms" number as target that a user might tolerate for a typical embedded display. And since as I said modern higher-end microcontrollers are much more powerful that dos-era CPUs (which could run games much faster), the unspoken conclusion I was trying to convince the previous commenter of is that a GPU (beyond maybe a specialized blitter-like pipeline) is unnecessary for the demands of typical embedded application displays. I was also going to give the example that the GUIs of early versions of Windows were software-rendered too.
Out of curiosity I'm looking at the most recent demo video LVGL posted, which benchmarked an ESP32-S2, and it's getting between 50ms-100ms for various tests like rotating multiple bitmaps and such.[1] So seems like the "100ms" number I pulled was quite apprirate for what LVGL can do on on a popular modern microcontroller.
(Also note for any readers: when I typed "1fps", that wasn't a typo for "10 fps". An embedded application would be wanting to do something else for that ~90% remaining CPU time each second that is not spent software-rendering the GUI.)
Instead of a full GPU, some microcontrollers may have a special "Blitter" engine...for instance NXP has a "Pixel Pipeline-Processor" (PXP) engine which is just-enough hardware for scaling, rotating, alpha-blending, and copying pixels, and it is for instance possible to configure lvgl to use the PXP to handle such grunt work while leaving the rest of lvgl rendering to software.