From 3f8513172ff65ce93a0f8a04c59afbe6b02d60d8 Mon Sep 17 00:00:00 2001 From: Varad Gautam Date: Tue, 30 May 2017 17:23:41 +0530 Subject: [PATCH] gallium/winsys/drm: introduce modifier field to winsys_handle we use this to import resources with format modifiers, and to support per-resource modifier queries. Signed-off-by: Varad Gautam Cc: Lucas Stach Reviewed-by: Lucas Stach --- src/gallium/include/state_tracker/drm_driver.h | 6 ++++++ src/gallium/state_trackers/dri/dri2.c | 7 +++++++ 2 files changed, 13 insertions(+) diff --git a/src/gallium/include/state_tracker/drm_driver.h b/src/gallium/include/state_tracker/drm_driver.h index c80fb09dbc4..88dda0a9977 100644 --- a/src/gallium/include/state_tracker/drm_driver.h +++ b/src/gallium/include/state_tracker/drm_driver.h @@ -45,6 +45,12 @@ struct winsys_handle * Output for texture_get_handle. */ unsigned offset; + + /** + * 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 625678f2575..740c6a4aaf5 100644 --- a/src/gallium/state_trackers/dri/dri2.c +++ b/src/gallium/state_trackers/dri/dri2.c @@ -52,6 +52,10 @@ #include "dri_query_renderer.h" #include "dri2_buffer.h" +#ifndef DRM_FORMAT_MOD_INVALID +#define DRM_FORMAT_MOD_INVALID ((1ULL<<56) - 1) +#endif + static int convert_fourcc(int format, int *dri_components_p) { int dri_components; @@ -869,6 +873,7 @@ dri2_create_image_from_name(__DRIscreen *_screen, memset(&whandle, 0, sizeof(whandle)); whandle.type = DRM_API_HANDLE_TYPE_SHARED; whandle.handle = name; + whandle.modifier = DRM_FORMAT_MOD_INVALID; pf = dri2_format_to_pipe_format (format); if (pf == PIPE_FORMAT_NONE) @@ -929,6 +934,7 @@ dri2_create_image_from_fd(__DRIscreen *_screen, whandles[i].handle = (unsigned)fds[i]; whandles[i].stride = (unsigned)strides[i]; whandles[i].offset = (unsigned)offsets[i]; + whandles[i].modifier = DRM_FORMAT_MOD_INVALID; } if (fourcc == __DRI_IMAGE_FOURCC_YVU420) { @@ -1143,6 +1149,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.modifier = DRM_FORMAT_MOD_INVALID; img = dri2_create_image_from_winsys(screen, width, height, format, 1, &whandle, loaderPrivate); -- 2.30.2