mesa: add xbgr support adjacent to xrgb
[mesa.git] / src / gallium / state_trackers / dri / dri_screen.c
index adce2ff36dbb1a8b7cfef7991dbd9ff9ce4bf440..bd0925b905518c60b608fe2698dcd173709b320e 100644 (file)
@@ -110,6 +110,8 @@ dri_fill_in_modes(struct dri_screen *screen)
    static const mesa_format mesa_formats[] = {
       MESA_FORMAT_B10G10R10A2_UNORM,
       MESA_FORMAT_B10G10R10X2_UNORM,
+      MESA_FORMAT_R10G10B10A2_UNORM,
+      MESA_FORMAT_R10G10B10X2_UNORM,
       MESA_FORMAT_B8G8R8A8_UNORM,
       MESA_FORMAT_B8G8R8X8_UNORM,
       MESA_FORMAT_B8G8R8A8_SRGB,
@@ -140,6 +142,8 @@ dri_fill_in_modes(struct dri_screen *screen)
    static const enum pipe_format pipe_formats[] = {
       PIPE_FORMAT_B10G10R10A2_UNORM,
       PIPE_FORMAT_B10G10R10X2_UNORM,
+      PIPE_FORMAT_R10G10B10A2_UNORM,
+      PIPE_FORMAT_R10G10B10X2_UNORM,
       PIPE_FORMAT_BGRA8888_UNORM,
       PIPE_FORMAT_BGRX8888_UNORM,
       PIPE_FORMAT_BGRA8888_SRGB,
@@ -238,7 +242,9 @@ dri_fill_in_modes(struct dri_screen *screen)
 
       if (!allow_rgb10 &&
           (mesa_formats[format] == MESA_FORMAT_B10G10R10A2_UNORM ||
-           mesa_formats[format] == MESA_FORMAT_B10G10R10X2_UNORM))
+           mesa_formats[format] == MESA_FORMAT_B10G10R10X2_UNORM ||
+           mesa_formats[format] == MESA_FORMAT_R10G10B10A2_UNORM ||
+           mesa_formats[format] == MESA_FORMAT_R10G10B10X2_UNORM))
          continue;
 
       if (!p_screen->is_format_supported(p_screen, pipe_formats[format],
@@ -310,6 +316,15 @@ dri_fill_st_visual(struct st_visual *stvis, struct dri_screen *screen,
       }
       break;
 
+   case 0x000003FF:
+      if (mode->alphaMask) {
+         assert(mode->alphaMask == 0xC0000000);
+         stvis->color_format = PIPE_FORMAT_R10G10B10A2_UNORM;
+      } else {
+         stvis->color_format = PIPE_FORMAT_R10G10B10X2_UNORM;
+      }
+      break;
+
    case 0x00FF0000:
       if (mode->alphaMask) {
          assert(mode->alphaMask == 0xFF000000);