summaryrefslogtreecommitdiff
path: root/Kernel/Graphics
AgeCommit message (Collapse)Author
2021-07-17Kernel: Rename Lock to MutexAndreas Kling
Let's be explicit about what kind of lock this is meant to be.
2021-07-16Kernel: Remove stale forward declaration of BochsFramebufferDeviceLiav A
2021-07-16Kernel: Return ENOMEM on allocation failures in FramebufferDevice::mmapLuke
2021-07-12Kernel/Graphics: Move Bochs graphics related code into a separate folderLiav A
2021-07-12Kernel/Graphics: Remove unnecessary Bochs.h fileLiav A
Nobody excepts BochsGraphicsAdapter code uses these definitions, so let's put them back into the BochsGraphicsAdapter.cpp file.
2021-07-11Kernel: Remove unused header includes in Graphics subtreeBrian Gianforcaro
2021-07-11Kernel: Fix condition on whether to initialize a display adapter or notLiav A
2021-07-11Kernel/Graphics: Move Intel graphics related code to a separate folderLiav A
2021-07-11Kernel: Rename VMObject::clone() => try_clone()Andreas Kling
And fix an unsafe dereference in SharedInodeVMObject::try_clone() to make it OOM-safe.
2021-07-11Kernel: Rename various *VMObject::create*() => try_create()Andreas Kling
try_*() implies that it can fail (and they all return RefPtr with nullptr signalling failure.)
2021-07-11Kernel: Remove bogus VMObject resizing in VirtIOGPUAndreas Kling
It is not legal to resize a VMObject after it has been created. As far as I can tell, this code would never actually run since the object was already populated with physical pages due to using AllocationStrategy::AllocateNow.
2021-07-11Kernel: Make various T::class_name() and similar return StringViewAndreas Kling
Instead of returning char const*, we can also give you a StringView.
2021-07-10Kernel: Make VirtIO GPU buffer flipping more spec compliantTom
The spec requires a flush after setting the new buffer resource id, which is required by QEMUs SDL backend but not the GTK backend. This brings us in line with the spec and makes it work for the SDL backend.
2021-07-08Kernel: Use range-for wherever possibleDaniel Bertalan
2021-07-08Everywhere: Mark debug-only functions `[[maybe_unused]]`Daniel Bertalan
These functions are only used from within `dbgln_if` calls, so in certain build configurations, they go unused. Similarly to variables, we now signal to the compiler that we understand that these are not always in use.
2021-07-06Kernel: Don't remap BochsGraphicsAdapter MMIO registers on every accessAndreas Kling
We were creating a new memory mapping every time WindowServer performed a buffer flip. This was very visible in whole-system profiles, as the mapping and unmapping of MMIO registers caused quite a bit of kmalloc() and kfree() churn. Avoid this problem by simply keeping the MMIO registers mapped.
2021-07-04Kernel: Implement buffer flipping for VirtIOGPU framebuffersTom
This solves tearing issues and improves performance when updating the VirtIOGPU framebuffers.
2021-07-04WindowServer: Implement support for combined buffer flipping + flushingTom
Some devices may require DMA transfers to flush the updated buffer areas prior to flipping. For those devices we track the areas that require flushing prior to the next flip. For devices that do not support flipping, but require flushing, we'll simply flush after updating the front buffer. This also adds a small optimization that skips these steps entirely for a screen that doesn't have any updates that need to be rendered.
2021-07-03Kernel/Graphics: Unblank the screen when initializing bochs displayLiav A
2021-07-03Kernel: Clarify and make it easy to not use raw numbersLiav A
Let's put the PCI IDs as enums in the PCI namespace so they're free to pollute that namespace, but it's also more easier to use them.
2021-07-03Kernel/Graphics: Assert if trying to initialize with the wrong driverLiav A
2021-07-03Kernel: Simplify graphics initialization somewhatLiav A
We use a switch-case statements to ensure we try to find the best suitable driver for a specific graphics card. In case we don't find such, we use the default statement to initialize the graphics card as a generic VGA adapter, if the adapter is VGA compatible. If we couldn't initialize the driver, we don't touch this adapter anymore. Also, GraphicsDevice should not be tied to a PCI::Address member, as it can be theortically be used with other buses (e.g. ISA cards).
2021-07-03Kernel: Fix miscellaneous warnings when building with ClangDaniel Bertalan
These small changes fix the remaining warnings that come up during kernel compilation with Clang. These specific fixes were for benign things: unused lambda captures and braces around scalar initializers.
2021-07-02Kernel/PCI: Move the PCI components as a subfolder to the Bus directoryLiav A
2021-06-27WindowServer: Coalesce flushing buffers into one ioctl() callTom
We regularily need to flush many rectangles, so instead of making many expensive ioctl() calls to the framebuffer driver, collect the rectangles and only make one call. And if we have too many rectangles then it may be cheaper to just update the entire region, in which case we simply convert them all into a union and just flush that one rectangle instead.
2021-06-27Kernel: Enable additional VirtIO displays only on first resolution setTom
Also, only allocate the amount of memory we actually need for the given resolution.
2021-06-27Kernel: Add support for multiple VirtIO GPU outputsTom
This creates /dev/fbX devices for each physical output, owned by the parent VirtIOGPU instance. This allows mapping and setting resolutions independently for each output.
2021-06-25Kernel: Add VirtIOGPU graphics deviceSahan Fernando
2021-06-25Kernel: Abstract FramebufferConsole away from contiguous physical rangeSahan Fernando
Currently, Kernel::Graphics::FramebufferConsole is written assuming that the underlying framebuffer memory exists in physically contiguous memory. There are a bunch of framebuffer devices that would need to use the components of FramebufferConsole (in particular access to the kernel bitmap font rendering logic). To reduce code duplication, framebuffer console has been split into two parts, the abstract GenericFramebufferConsole class which does the rendering, and the ContiguousFramebufferConsole class which contains all logic related to managing the underling vm object. Also, a new flush method has been added to the class, to support devices that require an extra flush step to render.
2021-06-24Kernel: Move special sections into Sections.hHendiadyoin1
This also removes a lot of CPU.h includes infavor for Sections.h
2021-06-20Kernel: Allow VGA-capable graphics adapters to exist with legacy VGATom
If we have a VGA-capable graphics adapter that we support, we should prefer it over any legacy VGA because we wouldn't use it in legacy VGA mode in this case. This solves the problem where we would only use the legacy VGA card when both a legacy VGA card as well as a VGA-mode capable adapter is present.
2021-06-04Kernel: Use IO ports instad of MMIO with Bochs graphics in VirtualBoxLiav A
This is needed for VirtualBox, because it doesn't support controlling the device with MMIO. Fixes #7558.
2021-06-04Kernel/Graphics: Add a proper method to check if Intel GPU is supportedLiav A
2021-06-03Kernel: Support new lines when doing critical printingLiav A
If we are printing strings in the critical path, handling new lines require us to break abstraction a bit to print new lines. Fixes #7562.
2021-06-03Kernel/Graphics: Remove unused overloaded write methods of ConsoleLiav A
If we happen to print a string, we could use a StringView instead. For now, let's remove them entirely.
2021-05-27Kernel/Graphics: Remove unnecessary derived FramebufferDevice classesLiav A
It seems like overly-specific classes were written for no good reason. Instead of making each adapter to have its own unique FramebufferDevice class, let's generalize everything to keep implementation more consistent.
2021-05-21Kernel/Graphics: Indicate initialization failed if no device was foundLiav A
2021-05-21Kernel: Fix type, dectivate_writes => deactivate_writesLiav A
2021-05-21Kernel/Graphics: Choose VMObject considering enabled state when mmapingLiav A
When mmaping a Framebuffer from userspace, we need to check whether the framebuffer device is actually enabled (e.g. graphical mode is being used) or a textual VirtualConsole is active. Considering the above state, we mmap the right VMObject to ensure we don't have graphical artifacts if we change the resolution from DisplaySettings, changed to textual mode and after the resolution change was reverted, we will see the Desktop reappearing even though we are still in textual mode.
2021-05-21Kernel: Fix framebuffer resolution modesetting after bootLiav A
If we tried to change the resolution before of this patch, we triggered a kernel crash due to mmaping the framebuffer device again. Therefore, on mmaping of the framebuffer device, we create an entire new set of VMObjects and Regions for the new settings. Then, when we change the resolution, the framebuffersconsole needs to be updated with the new resolution and also to be refreshed with the new settings. To ensure we handle both shrinking of the resolution and growth of it, we only copy the right amount of available data from the cells Region.
2021-05-17Everywhere: Fix a bunch of typosLinus Groh
2021-05-17Kernel/Graphics: Be more consistent about arguments passingLiav A
This fixes a bug that was reported on this discord server by @ElectrodeYT - due to the confusion of passing arguments in different orders, we messed up and triggered a page fault due to faulty sizes.
2021-05-16Kernel/Graphics: Round size value when mapping real framebufferLiav A
2021-05-16Kernel/Graphics: Assign console to be from VGACompatibleAdapter alwaysLiav A
If we create a VGACompatibleAdapter object with a preset framebuffer, Always assign the console so we can use it. This is useful for modesetting done by a Multiboot loader, like GRUB.
2021-05-16Kernel/Graphics: Fix a method to be more accurate about its nameLiav A
2021-05-16Kernel/Graphics + SystemServer: Support text mode properlyLiav A
As we removed the support of VBE modesetting that was done by GRUB early on boot, we need to determine if we can modeset the resolution with our drivers, and if not, we should enable text mode and ensure that SystemServer knows about it too. Also, SystemServer should first check if there's a framebuffer device node, which is an indication that text mode was not even if it was requested. Then, if it doesn't find it, it should check what boot_mode argument the user specified (in case it's self-test). This way if we try to use bochs-display device (which is not VGA compatible) and request a text mode, it will not honor the request and will continue with graphical mode. Also try to print critical messages with mininum memory allocations possible. In LibVT, We make the implementation flexible for kernel-specific methods that are implemented in ConsoleImpl class.
2021-05-16Kernel/Graphics: Add basic support for Intel native acceleratorLiav A
We simply modeset the resolution after determining the preferred resolution after getting the EDID from the attached display.
2021-05-16Kernel: Introduce a new graphics subsystemLiav A
This new subsystem is replacing the old code that was used to create device nodes of framebuffer devices in /dev. This subsystem includes for now 3 roles: 1. GraphicsManagement singleton object that is used in the boot process to enumerate and initialize display devices. 2. GraphicsDevice(s) that are used to control the display adapter. 3. FramebufferDevice(s) that are used to control the device node in /dev. For now, we support the Bochs display adapter and any other generic VGA compatible adapter that was configured by the boot loader to a known and fixed resolution. Two improvements in the Bochs display adapter code are that we can support native bochs-display device (this device doesn't expose any VGA capabilities) and also that we use the MMIO region, to configure the device, instead of setting IO ports for such tasks.