HAS_ARGB8888 = 1,
HAS_XRGB8888 = 2,
HAS_RGB565 = 4,
+ HAS_ARGB2101010 = 8,
+ HAS_XRGB2101010 = 16,
};
static int
if (dri2_dpy->wl_dmabuf || dri2_dpy->wl_drm) {
if (conf->RedSize == 5)
dri2_surf->format = WL_DRM_FORMAT_RGB565;
- else if (conf->AlphaSize == 0)
+ else if (conf->RedSize == 8 && conf->AlphaSize == 0)
dri2_surf->format = WL_DRM_FORMAT_XRGB8888;
- else
+ else if (conf->RedSize == 8)
dri2_surf->format = WL_DRM_FORMAT_ARGB8888;
+ else if (conf->RedSize == 10 && conf->AlphaSize == 0)
+ dri2_surf->format = WL_DRM_FORMAT_XRGB2101010;
+ else if (conf->RedSize == 10)
+ dri2_surf->format = WL_DRM_FORMAT_ARGB2101010;
} else {
assert(dri2_dpy->wl_shm);
if (conf->RedSize == 5)
uint64_t *modifiers;
int num_modifiers;
- /* currently supports three WL DRM formats,
+ /* currently supports five WL DRM formats,
+ * WL_DRM_FORMAT_ARGB2101010, WL_DRM_FORMAT_XRGB2101010,
* WL_DRM_FORMAT_ARGB8888, WL_DRM_FORMAT_XRGB8888,
* and WL_DRM_FORMAT_RGB565
*/
switch (dri2_surf->format) {
+ case WL_DRM_FORMAT_ARGB2101010:
+ dri_image_format = __DRI_IMAGE_FORMAT_ARGB2101010;
+ break;
+ case WL_DRM_FORMAT_XRGB2101010:
+ dri_image_format = __DRI_IMAGE_FORMAT_XRGB2101010;
+ break;
case WL_DRM_FORMAT_ARGB8888:
dri_image_format = __DRI_IMAGE_FORMAT_ARGB8888;
modifiers = u_vector_tail(&dri2_dpy->wl_modifiers.argb8888);
unsigned int bpp;
switch (dri2_surf->format) {
+ case WL_DRM_FORMAT_ARGB2101010:
+ case WL_DRM_FORMAT_XRGB2101010:
case WL_DRM_FORMAT_ARGB8888:
case WL_DRM_FORMAT_XRGB8888:
bpp = 32;
dri2_dpy->image->queryImage(image, __DRI_IMAGE_ATTRIB_FORMAT, &format);
switch (format) {
+ case __DRI_IMAGE_FORMAT_ARGB2101010:
+ if (!(dri2_dpy->formats & HAS_ARGB2101010))
+ goto bad_format;
+ break;
+ case __DRI_IMAGE_FORMAT_XRGB2101010:
+ if (!(dri2_dpy->formats & HAS_XRGB2101010))
+ goto bad_format;
+ break;
case __DRI_IMAGE_FORMAT_ARGB8888:
if (!(dri2_dpy->formats & HAS_ARGB8888))
goto bad_format;
struct dri2_egl_display *dri2_dpy = data;
switch (format) {
+ case WL_DRM_FORMAT_ARGB2101010:
+ dri2_dpy->formats |= HAS_ARGB2101010;
+ break;
+ case WL_DRM_FORMAT_XRGB2101010:
+ dri2_dpy->formats |= HAS_XRGB2101010;
+ break;
case WL_DRM_FORMAT_ARGB8888:
dri2_dpy->formats |= HAS_ARGB8888;
break;
int has_format;
unsigned int rgba_masks[4];
} visuals[] = {
+ { "XRGB2101010", HAS_XRGB2101010, { 0x3ff00000, 0xffc00, 0x3ff, 0 } },
+ { "ARGB2101010", HAS_ARGB2101010, { 0x3ff00000, 0xffc00, 0x3ff, 0xc0000000 } },
{ "XRGB8888", HAS_XRGB8888, { 0xff0000, 0xff00, 0x00ff, 0xff000000 } },
{ "ARGB8888", HAS_ARGB8888, { 0xff0000, 0xff00, 0x00ff, 0 } },
{ "RGB565", HAS_RGB565, { 0x00f800, 0x07e0, 0x001f, 0 } },
uint32_t stride, uint32_t format)
{
switch (format) {
+ case WL_DRM_FORMAT_ARGB2101010:
+ case WL_DRM_FORMAT_XRGB2101010:
case WL_DRM_FORMAT_ARGB8888:
case WL_DRM_FORMAT_XRGB8888:
case WL_DRM_FORMAT_YUYV:
wl_resource_set_implementation(resource, &drm_interface, data, NULL);
wl_resource_post_event(resource, WL_DRM_DEVICE, drm->device_name);
+ wl_resource_post_event(resource, WL_DRM_FORMAT,
+ WL_DRM_FORMAT_ARGB2101010);
+ wl_resource_post_event(resource, WL_DRM_FORMAT,
+ WL_DRM_FORMAT_XRGB2101010);
wl_resource_post_event(resource, WL_DRM_FORMAT,
WL_DRM_FORMAT_ARGB8888);
wl_resource_post_event(resource, WL_DRM_FORMAT,