summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVarad Gautam <[email protected]>2017-05-30 17:23:41 +0530
committerEmil Velikov <[email protected]>2017-06-09 14:12:37 +0100
commit3f8513172ff65ce93a0f8a04c59afbe6b02d60d8 (patch)
treed1891f98d3a88420d88a58c6796acadd73fd2f4d
parentcde963ec359c07182f8633863ec0ecc1ea9fe451 (diff)
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 <[email protected]> Cc: Lucas Stach <[email protected]> Reviewed-by: Lucas Stach <[email protected]>
-rw-r--r--src/gallium/include/state_tracker/drm_driver.h6
-rw-r--r--src/gallium/state_trackers/dri/dri2.c7
2 files changed, 13 insertions, 0 deletions
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);