diff options
author | Rob Clark <robdclark@gmail.com> | 2015-02-05 09:41:52 -0500 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2015-02-13 17:28:12 -0500 |
commit | e3eb3250d84ef97b766312345774367b6a310db8 (patch) | |
tree | 7220c957097ad78df34d6d2aeacc8afdadb1a9d4 /include/uapi/drm/drm_fourcc.h | |
parent | 17d5538d54c9f9d6e2b44e07d4d577304e22c17a (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.h | 32 |
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 */ |