aboutsummaryrefslogtreecommitdiff
path: root/include/render
diff options
context:
space:
mode:
Diffstat (limited to 'include/render')
-rw-r--r--include/render/pixel_format.h21
1 files changed, 19 insertions, 2 deletions
diff --git a/include/render/pixel_format.h b/include/render/pixel_format.h
index 04a095b2..a024ff9d 100644
--- a/include/render/pixel_format.h
+++ b/include/render/pixel_format.h
@@ -7,6 +7,13 @@
* Information about a pixel format.
*
* A pixel format is identified via its DRM four character code (see <drm_fourcc.h>).
+ *
+ * Simple formats have a block size of 1×1 pixels and bytes_per_block contains
+ * the number of bytes per pixel (including padding).
+ *
+ * Tiled formats (e.g. sub-sampled YCbCr) are described with a block size
+ * greater than 1×1 pixels. A block is a rectangle of pixels which are stored
+ * next to each other in a byte-aligned memory region.
*/
struct wlr_pixel_format_info {
uint32_t drm_format;
@@ -16,8 +23,10 @@ struct wlr_pixel_format_info {
*/
uint32_t opaque_substitute;
- /* Bits per pixels */
- uint32_t bpp;
+ /* Bytes per block (including padding) */
+ uint32_t bytes_per_block;
+ /* Size of a block in pixels (zero for 1×1) */
+ uint32_t block_width, block_height;
/* True if the format has an alpha channel */
bool has_alpha;
@@ -30,6 +39,14 @@ struct wlr_pixel_format_info {
*/
const struct wlr_pixel_format_info *drm_get_pixel_format_info(uint32_t fmt);
/**
+ * Get the number of pixels per block for a pixel format.
+ */
+uint32_t pixel_format_info_pixels_per_block(const struct wlr_pixel_format_info *info);
+/**
+ * Get the minimum stride for a given pixel format and width.
+ */
+int32_t pixel_format_info_min_stride(const struct wlr_pixel_format_info *info, int32_t width);
+/**
* Check whether a stride is large enough for a given pixel format and width.
*/
bool pixel_format_info_check_stride(const struct wlr_pixel_format_info *info,