aboutsummaryrefslogtreecommitdiffstats
path: root/include/uapi/drm/drm_fourcc.h
diff options
context:
space:
mode:
authorRob Clark <robdclark@gmail.com>2015-02-05 09:41:52 -0500
committerDaniel Vetter <daniel.vetter@ffwll.ch>2015-02-13 17:28:12 -0500
commite3eb3250d84ef97b766312345774367b6a310db8 (patch)
tree7220c957097ad78df34d6d2aeacc8afdadb1a9d4 /include/uapi/drm/drm_fourcc.h
parent17d5538d54c9f9d6e2b44e07d4d577304e22c17a (diff)
drm: add support for tiled/compressed/etc modifier in addfb2
In DRM/KMS we are lacking a good way to deal with tiled/compressed formats. Especially in the case of dmabuf/prime buffer sharing, where we cannot always rely on under-the-hood flags passed to driver specific gem-create ioctl to pass around these extra flags. The proposal is to add a per-plane format modifier. This allows to, if necessary, use different tiling patters for sub-sampled planes, etc. The format modifiers are added at the end of the ioctl struct, so for legacy userspace it will be zero padded. v1: original v1.5: increase modifier to 64b v2: Incorporate review comments from the big thread, plus a few more. - Add a getcap so that userspace doesn't have to jump through hoops. - Allow modifiers only when a flag is set. That way drivers know when they're dealing with old userspace and need to fish out e.g. tiling from other information. - After rolling out checks for ->modifier to all drivers I've decided that this is way too fragile and needs an explicit opt-in flag. So do that instead. - Add a define (just for documentation really) for the "NONE" modifier. Imo we don't need to add mask #defines since drivers really should only do exact matches against values defined with fourcc_mod_code. - Drop the Samsung tiling modifier on Rob's request since he's not yet sure whether that one is accurate. v3: - Also add a new ->modifier[] array to struct drm_framebuffer and fill it in drm_helper_mode_fill_fb_struct. Requested by Tvrkto Uruslin. - Remove TODO in comment and add code comment that modifiers should be properly documented, requested by Rob. Cc: Rob Clark <robdclark@gmail.com> Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Cc: Daniel Stone <daniel@fooishbar.org> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> Cc: Michel Dänzer <michel@daenzer.net> Signed-off-by: Rob Clark <robdclark@gmail.com> (v1.5) Reviewed-by: Rob Clark <robdclark@gmail.com> Reviewed-by: Daniel Stone <daniels@collabora.com> Acked-by: Dave Airlie <airlied@redhat.com> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Diffstat (limited to 'include/uapi/drm/drm_fourcc.h')
-rw-r--r--include/uapi/drm/drm_fourcc.h32
1 files changed, 32 insertions, 0 deletions
diff --git a/include/uapi/drm/drm_fourcc.h b/include/uapi/drm/drm_fourcc.h
index 646ae5f39f42..622109677747 100644
--- a/include/uapi/drm/drm_fourcc.h
+++ b/include/uapi/drm/drm_fourcc.h
@@ -132,4 +132,36 @@
132#define DRM_FORMAT_YUV444 fourcc_code('Y', 'U', '2', '4') /* non-subsampled Cb (1) and Cr (2) planes */ 132#define DRM_FORMAT_YUV444 fourcc_code('Y', 'U', '2', '4') /* non-subsampled Cb (1) and Cr (2) planes */
133#define DRM_FORMAT_YVU444 fourcc_code('Y', 'V', '2', '4') /* non-subsampled Cr (1) and Cb (2) planes */ 133#define DRM_FORMAT_YVU444 fourcc_code('Y', 'V', '2', '4') /* non-subsampled Cr (1) and Cb (2) planes */
134 134
135
136/*
137 * Format Modifiers:
138 *
139 * Format modifiers describe, typically, a re-ordering or modification
140 * of the data in a plane of an FB. This can be used to express tiled/
141 * swizzled formats, or compression, or a combination of the two.
142 *
143 * The upper 8 bits of the format modifier are a vendor-id as assigned
144 * below. The lower 56 bits are assigned as vendor sees fit.
145 */
146
147/* Vendor Ids: */
148#define DRM_FORMAT_MOD_NONE 0
149#define DRM_FORMAT_MOD_VENDOR_INTEL 0x01
150#define DRM_FORMAT_MOD_VENDOR_AMD 0x02
151#define DRM_FORMAT_MOD_VENDOR_NV 0x03
152#define DRM_FORMAT_MOD_VENDOR_SAMSUNG 0x04
153#define DRM_FORMAT_MOD_VENDOR_QCOM 0x05
154/* add more to the end as needed */
155
156#define fourcc_mod_code(vendor, val) \
157 ((((u64)DRM_FORMAT_MOD_VENDOR_## vendor) << 56) | (val & 0x00ffffffffffffffL))
158
159/*
160 * Format Modifier tokens:
161 *
162 * When adding a new token please document the layout with a code comment,
163 * similar to the fourcc codes above. drm_fourcc.h is considered the
164 * authoritative source for all of these.
165 */
166
135#endif /* DRM_FOURCC_H */ 167#endif /* DRM_FOURCC_H */