#pragma once // RGB packed layouts: 8-bit / 16-bit (sub-byte) / 32-bit (10-bit) / // 64-bit-normalized, all single-plane single-pixel-per-storage-word. // Names follow the kms++/pixutils register-order convention (MSB-first // in the storage word), so XRGB8888 has X at bits 31..24 and B at 7..0. #include "../layout.h" #include "../io/packed.h" namespace pixpat::formats { // Helper: every format in this file pairs with PackedSource/PackedSink. // Each format struct exposes Source / Sink aliases so the catalog row // in format_catalog.h can stay name-only. #define PIXPAT_RGB_PACKED(name, ...) \ struct name : Layout { \ using Source = PackedSource; \ using Sink = PackedSink; \ } // --------------------------------------------------------------------- // 32-bit packed RGB, 8-bit components. // --------------------------------------------------------------------- PIXPAT_RGB_PACKED(XRGB8888, Plane); PIXPAT_RGB_PACKED(ARGB8888, Plane); PIXPAT_RGB_PACKED(XBGR8888, Plane); PIXPAT_RGB_PACKED(ABGR8888, Plane); PIXPAT_RGB_PACKED(RGBX8888, Plane); PIXPAT_RGB_PACKED(RGBA8888, Plane); PIXPAT_RGB_PACKED(BGRX8888, Plane); PIXPAT_RGB_PACKED(BGRA8888, Plane); // --------------------------------------------------------------------- // 24-bit packed RGB, three bytes per pixel. storage_t is uint32_t but // only bytes_per_pixel = 3 are read/written via memcpy. // --------------------------------------------------------------------- PIXPAT_RGB_PACKED(RGB888, Plane); PIXPAT_RGB_PACKED(BGR888, Plane); // --------------------------------------------------------------------- // 16-bit packed RGB, sub-byte components. // --------------------------------------------------------------------- PIXPAT_RGB_PACKED(RGB565, Plane); PIXPAT_RGB_PACKED(BGR565, Plane); // 8-bit packed RGB: 3-bit R / 3-bit G / 2-bit B in a single byte. PIXPAT_RGB_PACKED(RGB332, Plane); PIXPAT_RGB_PACKED(XRGB1555, Plane); PIXPAT_RGB_PACKED(ARGB1555, Plane); PIXPAT_RGB_PACKED(XBGR1555, Plane); PIXPAT_RGB_PACKED(ABGR1555, Plane); PIXPAT_RGB_PACKED(XRGB4444, Plane); PIXPAT_RGB_PACKED(ARGB4444, Plane); PIXPAT_RGB_PACKED(XBGR4444, Plane); PIXPAT_RGB_PACKED(ABGR4444, Plane); PIXPAT_RGB_PACKED(RGBX4444, Plane); PIXPAT_RGB_PACKED(RGBA4444, Plane); // --------------------------------------------------------------------- // 32-bit packed RGB, 10-bit components. // --------------------------------------------------------------------- PIXPAT_RGB_PACKED(XRGB2101010, Plane); PIXPAT_RGB_PACKED(ARGB2101010, Plane); PIXPAT_RGB_PACKED(XBGR2101010, Plane); PIXPAT_RGB_PACKED(ABGR2101010, Plane); PIXPAT_RGB_PACKED(RGBX1010102, Plane); PIXPAT_RGB_PACKED(RGBA1010102, Plane); PIXPAT_RGB_PACKED(BGRX1010102, Plane); PIXPAT_RGB_PACKED(BGRA1010102, Plane); // --------------------------------------------------------------------- // 64-bit normalized wide RGB (16 bits per component). // --------------------------------------------------------------------- PIXPAT_RGB_PACKED(ABGR16161616, Plane); #undef PIXPAT_RGB_PACKED } // namespace pixpat::formats