mirror of
https://github.com/RGBCube/serenity
synced 2025-05-30 22:38:12 +00:00

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.
50 lines
1.1 KiB
C
50 lines
1.1 KiB
C
/*
|
|
* Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <AK/Platform.h>
|
|
#include <stddef.h>
|
|
#include <sys/cdefs.h>
|
|
#include <sys/ioctl.h>
|
|
|
|
__BEGIN_DECLS
|
|
|
|
ALWAYS_INLINE int fb_get_size_in_bytes(int fd, size_t* out)
|
|
{
|
|
return ioctl(fd, FB_IOCTL_GET_SIZE_IN_BYTES, out);
|
|
}
|
|
|
|
ALWAYS_INLINE int fb_get_resolution(int fd, FBResolution* info)
|
|
{
|
|
return ioctl(fd, FB_IOCTL_GET_RESOLUTION, info);
|
|
}
|
|
|
|
ALWAYS_INLINE int fb_set_resolution(int fd, FBResolution* info)
|
|
{
|
|
return ioctl(fd, FB_IOCTL_SET_RESOLUTION, info);
|
|
}
|
|
|
|
ALWAYS_INLINE int fb_get_buffer(int fd, int* index)
|
|
{
|
|
return ioctl(fd, FB_IOCTL_GET_BUFFER, index);
|
|
}
|
|
|
|
ALWAYS_INLINE int fb_set_buffer(int fd, int index)
|
|
{
|
|
return ioctl(fd, FB_IOCTL_SET_BUFFER, index);
|
|
}
|
|
|
|
ALWAYS_INLINE int fb_flush_buffers(int fd, int index, FBRect const* rects, unsigned count)
|
|
{
|
|
FBFlushRects fb_flush_rects;
|
|
fb_flush_rects.buffer_index = index;
|
|
fb_flush_rects.count = count;
|
|
fb_flush_rects.rects = rects;
|
|
return ioctl(fd, FB_IOCTL_FLUSH_BUFFERS, &fb_flush_rects);
|
|
}
|
|
|
|
__END_DECLS
|