summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNanley Chery <nanley.g.chery@intel.com>2019-11-15 14:10:38 -0800
committerDylan Baker <dylan@pnwbakers.com>2019-12-10 09:08:41 -0800
commitf3507690f86a78ca47f98b57b7e43c4dc708d8e6 (patch)
tree621ad8add4e883cdfd45a42dbc25faa6dd29f1fc
parent96b8f4261171139cf720807cfe0f323425c5dbd9 (diff)
gallium: Store the image format in winsys_handle
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> (cherry picked from commit 51ee8fff9b5e803592a2fd34730fdcfdfba469cb)
-rw-r--r--src/gallium/include/state_tracker/winsys_handle.h6
-rw-r--r--src/gallium/state_trackers/dri/dri2.c4
2 files changed, 10 insertions, 0 deletions
diff --git a/src/gallium/include/state_tracker/winsys_handle.h b/src/gallium/include/state_tracker/winsys_handle.h
index 53d2fd2b70d..78f5f4b36f2 100644
--- a/src/gallium/include/state_tracker/winsys_handle.h
+++ b/src/gallium/include/state_tracker/winsys_handle.h
@@ -53,6 +53,12 @@ struct winsys_handle
* Input to resource_from_handle.
* Output from resource_get_handle.
*/
+ uint64_t format;
+
+ /**
+ * Input to resource_from_handle.
+ * Output from resource_get_handle.
+ */
uint64_t modifier;
};
diff --git a/src/gallium/state_trackers/dri/dri2.c b/src/gallium/state_trackers/dri/dri2.c
index 2edbae79886..6c836166003 100644
--- a/src/gallium/state_trackers/dri/dri2.c
+++ b/src/gallium/state_trackers/dri/dri2.c
@@ -529,6 +529,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;
@@ -802,6 +803,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);
@@ -903,6 +905,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;
}
@@ -1293,6 +1296,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,