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/drm/drm_crtc.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/drm/drm_crtc.h')
-rw-r--r-- | include/drm/drm_crtc.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index 0ebd9286b332..cee54c45eba9 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h | |||
@@ -202,6 +202,7 @@ struct drm_framebuffer { | |||
202 | const struct drm_framebuffer_funcs *funcs; | 202 | const struct drm_framebuffer_funcs *funcs; |
203 | unsigned int pitches[4]; | 203 | unsigned int pitches[4]; |
204 | unsigned int offsets[4]; | 204 | unsigned int offsets[4]; |
205 | uint64_t modifier[4]; | ||
205 | unsigned int width; | 206 | unsigned int width; |
206 | unsigned int height; | 207 | unsigned int height; |
207 | /* depth can be 15 or 16 */ | 208 | /* depth can be 15 or 16 */ |
@@ -1152,6 +1153,9 @@ struct drm_mode_config { | |||
1152 | /* whether async page flip is supported or not */ | 1153 | /* whether async page flip is supported or not */ |
1153 | bool async_page_flip; | 1154 | bool async_page_flip; |
1154 | 1155 | ||
1156 | /* whether the driver supports fb modifiers */ | ||
1157 | bool allow_fb_modifiers; | ||
1158 | |||
1155 | /* cursor size */ | 1159 | /* cursor size */ |
1156 | uint32_t cursor_width, cursor_height; | 1160 | uint32_t cursor_width, cursor_height; |
1157 | }; | 1161 | }; |