gallium: Store the image format in winsys_handle
authorNanley Chery <nanley.g.chery@intel.com>
Fri, 15 Nov 2019 22:10:38 +0000 (14:10 -0800)
committerNanley Chery <nanley.g.chery@intel.com>
Fri, 6 Dec 2019 20:31:48 +0000 (20:31 +0000)
This format will be used to properly handle planar images with modifiers
in iris.

Fixes: 246eebba4a8 ("iris: Export and import surfaces with modifiers that have aux data")
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/gallium/include/state_tracker/winsys_handle.h
src/gallium/state_trackers/dri/dri2.c

index 53d2fd2b70d9be282c9d9f254c33231b3edd07d3..78f5f4b36f209bef5f1895c0949deb4155bd0b9c 100644 (file)
@@ -49,6 +49,12 @@ struct winsys_handle
     */
    unsigned offset;
 
+   /**
+    * Input to resource_from_handle.
+    * Output from resource_get_handle.
+    */
+   uint64_t format;
+
    /**
     * Input to resource_from_handle.
     * Output from resource_get_handle.
index 986f770738dad60f955854096f9033bcd1bf8858..1f72c9d11c56e7c647838454c8bc385ebf2cfac8 100644 (file)
@@ -547,6 +547,7 @@ dri2_allocate_textures(struct dri_context *ctx,
          whandle.handle = buf->name;
          whandle.stride = buf->pitch;
          whandle.offset = 0;
+         whandle.format = format;
          whandle.modifier = DRM_FORMAT_MOD_INVALID;
          if (screen->can_share_buffer)
             whandle.type = WINSYS_HANDLE_TYPE_SHARED;
@@ -820,6 +821,7 @@ dri2_create_image_from_name(__DRIscreen *_screen,
    memset(&whandle, 0, sizeof(whandle));
    whandle.type = WINSYS_HANDLE_TYPE_SHARED;
    whandle.handle = name;
+   whandle.format = map->pipe_format;
    whandle.modifier = DRM_FORMAT_MOD_INVALID;
 
    whandle.stride = pitch * util_format_get_blocksize(map->pipe_format);
@@ -921,6 +923,7 @@ dri2_create_image_from_fd(__DRIscreen *_screen,
       whandles[i].handle = (unsigned)fds[fdnum];
       whandles[i].stride = (unsigned)strides[index];
       whandles[i].offset = (unsigned)offsets[index];
+      whandles[i].format = map->pipe_format;
       whandles[i].modifier = modifier;
       whandles[i].plane = index;
    }
@@ -1311,6 +1314,7 @@ dri2_from_names(__DRIscreen *screen, int width, int height, int format,
    whandle.handle = names[0];
    whandle.stride = strides[0];
    whandle.offset = offsets[0];
+   whandle.format = map->pipe_format;
    whandle.modifier = DRM_FORMAT_MOD_INVALID;
 
    img = dri2_create_image_from_winsys(screen, width, height, map,