diff --git a/Kernel/Graphics/DisplayConnector.cpp b/Kernel/Graphics/DisplayConnector.cpp index e1bcc9de4d..1686c68545 100644 --- a/Kernel/Graphics/DisplayConnector.cpp +++ b/Kernel/Graphics/DisplayConnector.cpp @@ -301,12 +301,14 @@ ErrorOr DisplayConnector::ioctl(OpenFileDescription&, unsigned request, Us return {}; } case GRAPHICS_IOCTL_GET_PROPERTIES: { + VERIFY(m_shared_framebuffer_vmobject); auto user_properties = static_ptr_cast(arg); GraphicsConnectorProperties properties {}; properties.flushing_support = flush_support(); properties.doublebuffer_support = double_framebuffering_capable(); properties.partial_flushing_support = partial_flush_support(); properties.refresh_rate_support = refresh_rate_support(); + properties.max_buffer_bytes = m_shared_framebuffer_vmobject->size(); return copy_to_user(user_properties, &properties); } diff --git a/Userland/Libraries/LibC/sys/ioctl_numbers.h b/Userland/Libraries/LibC/sys/ioctl_numbers.h index c7c596f94f..df044ddf8f 100644 --- a/Userland/Libraries/LibC/sys/ioctl_numbers.h +++ b/Userland/Libraries/LibC/sys/ioctl_numbers.h @@ -24,6 +24,7 @@ struct GraphicsConnectorProperties { unsigned char flushing_support; unsigned char partial_flushing_support; unsigned char refresh_rate_support; + unsigned max_buffer_bytes; }; struct GraphicsHeadModeSetting { diff --git a/Userland/Services/WindowServer/HardwareScreenBackend.cpp b/Userland/Services/WindowServer/HardwareScreenBackend.cpp index 9c9a82b60e..dffbc0b7c2 100644 --- a/Userland/Services/WindowServer/HardwareScreenBackend.cpp +++ b/Userland/Services/WindowServer/HardwareScreenBackend.cpp @@ -33,6 +33,7 @@ ErrorOr HardwareScreenBackend::open() m_can_device_flush_buffers = (properties.partial_flushing_support != 0); m_can_device_flush_entire_framebuffer = (properties.flushing_support != 0); m_can_set_head_buffer = (properties.doublebuffer_support != 0); + m_max_size_in_bytes = properties.max_buffer_bytes; return {}; } diff --git a/Userland/Services/WindowServer/ScreenBackend.h b/Userland/Services/WindowServer/ScreenBackend.h index 2e014d55ed..14870c1aa3 100644 --- a/Userland/Services/WindowServer/ScreenBackend.h +++ b/Userland/Services/WindowServer/ScreenBackend.h @@ -43,6 +43,7 @@ public: Gfx::ARGB32* m_framebuffer { nullptr }; size_t m_size_in_bytes { 0 }; + size_t m_max_size_in_bytes { 0 }; size_t m_back_buffer_offset { 0 }; int m_pitch { 0 };