gbm/dri: Expose visuals table through gbm_dri_device
authorDaniel Stone <daniels@collabora.com>
Tue, 6 Feb 2018 17:42:03 +0000 (17:42 +0000)
committerDaniel Stone <daniels@collabora.com>
Fri, 9 Feb 2018 16:17:16 +0000 (16:17 +0000)
Signed-off-by: Daniel Stone <daniels@collabora.com>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
Tested-by: Ilia Mirkin <imirkin@alum.mit.edu>
src/gbm/backends/dri/gbm_dri.c
src/gbm/backends/dri/gbm_driint.h

index 7e2423e935f117d447f336e873a884b56d523a85..0d088bd62b629b543ee15f80ecff881c6077df4e 100644 (file)
@@ -543,11 +543,7 @@ dri_screen_create_sw(struct gbm_dri_device *dri)
    return dri_screen_create_swrast(dri);
 }
 
-static const struct {
-   uint32_t gbm_format;
-   int dri_image_format;
-   uint32_t rgba_masks[4];
-} gbm_to_dri_image_formats[] = {
+static const struct gbm_dri_visual gbm_dri_visuals_table[] = {
    {
      GBM_FORMAT_R8, __DRI_IMAGE_FORMAT_R8,
      { 0x000000ff, 0x00000000, 0x00000000, 0x00000000 },
@@ -608,9 +604,9 @@ gbm_format_to_dri_format(uint32_t gbm_format)
    int i;
 
    gbm_format = gbm_format_canonicalize(gbm_format);
-   for (i = 0; i < ARRAY_SIZE(gbm_to_dri_image_formats); i++) {
-      if (gbm_to_dri_image_formats[i].gbm_format == gbm_format)
-         return gbm_to_dri_image_formats[i].dri_image_format;
+   for (i = 0; i < ARRAY_SIZE(gbm_dri_visuals_table); i++) {
+      if (gbm_dri_visuals_table[i].gbm_format == gbm_format)
+         return gbm_dri_visuals_table[i].dri_image_format;
    }
 
    return 0;
@@ -621,9 +617,9 @@ gbm_dri_to_gbm_format(int dri_format)
 {
    int i;
 
-   for (i = 0; i < ARRAY_SIZE(gbm_to_dri_image_formats); i++) {
-      if (gbm_to_dri_image_formats[i].dri_image_format == dri_format)
-         return gbm_to_dri_image_formats[i].gbm_format;
+   for (i = 0; i < ARRAY_SIZE(gbm_dri_visuals_table); i++) {
+      if (gbm_dri_visuals_table[i].dri_image_format == dri_format)
+         return gbm_dri_visuals_table[i].gbm_format;
    }
 
    return 0;
@@ -1418,6 +1414,9 @@ dri_device_create(int fd)
 
    dri->base.name = "drm";
 
+   dri->visual_table = gbm_dri_visuals_table;
+   dri->num_visuals = ARRAY_SIZE(gbm_dri_visuals_table);
+
    mtx_init(&dri->mutex, mtx_plain);
 
    force_sw = env_var_as_boolean("GBM_ALWAYS_SOFTWARE", false);
index db9038a623aaa22ec133234c522fcdd8a8f801e1..84a98533c7946b986d1fd9501e5acf3579daf5f1 100644 (file)
 struct gbm_dri_surface;
 struct gbm_dri_bo;
 
+struct gbm_dri_visual {
+   uint32_t gbm_format;
+   int dri_image_format;
+   uint32_t rgba_masks[4];
+};
+
 struct gbm_dri_device {
    struct gbm_device base;
 
@@ -97,6 +103,9 @@ struct gbm_dri_device {
                             void          *loaderPrivate);
 
    struct wl_drm *wl_drm;
+
+   const struct gbm_dri_visual *visual_table;
+   int num_visuals;
 };
 
 struct gbm_dri_bo {