Chromium Code Reviews| Index: ui/ozone/platform/drm/gpu/hardware_display_plane_atomic.cc |
| diff --git a/ui/ozone/platform/drm/gpu/hardware_display_plane_atomic.cc b/ui/ozone/platform/drm/gpu/hardware_display_plane_atomic.cc |
| index 6ca6f6b45f933d69aa3ca748ce2f5f0c9cd21bc7..9ad137f4fa4a196e132983e0616e03c9c466a1a5 100644 |
| --- a/ui/ozone/platform/drm/gpu/hardware_display_plane_atomic.cc |
| +++ b/ui/ozone/platform/drm/gpu/hardware_display_plane_atomic.cc |
| @@ -19,6 +19,38 @@ const char* kSrcXPropName = "SRC_X"; |
| const char* kSrcYPropName = "SRC_Y"; |
| const char* kSrcWPropName = "SRC_W"; |
| const char* kSrcHPropName = "SRC_H"; |
| +const char* kRotationPropName = "rotation"; |
| + |
| +// TODO(dcastagna): Remove the following defines once they're in libdrm headers. |
|
hoegsberg1
2017/04/11 21:24:31
I think the "ABI" is the property strings, not the
|
| +#if !defined(DRM_ROTATE_0) |
| +#define DRM_ROTATE_0 0 |
| +#define DRM_ROTATE_90 1 |
| +#define DRM_ROTATE_180 2 |
| +#define DRM_ROTATE_270 3 |
| +#define DRM_REFLECT_X 4 |
| +#define DRM_REFLECT_Y 5 |
| +#endif |
| + |
| +uint32_t OverlayTransformToDrmRotationPropertyValue( |
| + gfx::OverlayTransform transform) { |
| + switch (transform) { |
| + case gfx::OVERLAY_TRANSFORM_NONE: |
| + return 0; |
| + case gfx::OVERLAY_TRANSFORM_FLIP_HORIZONTAL: |
| + return 1 << DRM_REFLECT_X; |
| + case gfx::OVERLAY_TRANSFORM_FLIP_VERTICAL: |
| + return 1 << DRM_REFLECT_Y; |
| + case gfx::OVERLAY_TRANSFORM_ROTATE_90: |
| + return 1 << DRM_ROTATE_90; |
| + case gfx::OVERLAY_TRANSFORM_ROTATE_180: |
| + return 1 << DRM_ROTATE_180; |
| + case gfx::OVERLAY_TRANSFORM_ROTATE_270: |
| + return 1 << DRM_ROTATE_270; |
| + default: |
| + NOTREACHED(); |
| + } |
| + return 0; |
| +} |
| } // namespace |
| @@ -51,11 +83,13 @@ HardwareDisplayPlaneAtomic::HardwareDisplayPlaneAtomic(uint32_t plane_id, |
| HardwareDisplayPlaneAtomic::~HardwareDisplayPlaneAtomic() { |
| } |
| -bool HardwareDisplayPlaneAtomic::SetPlaneData(drmModeAtomicReq* property_set, |
| - uint32_t crtc_id, |
| - uint32_t framebuffer, |
| - const gfx::Rect& crtc_rect, |
| - const gfx::Rect& src_rect) { |
| +bool HardwareDisplayPlaneAtomic::SetPlaneData( |
| + drmModeAtomicReq* property_set, |
| + uint32_t crtc_id, |
| + uint32_t framebuffer, |
| + const gfx::Rect& crtc_rect, |
| + const gfx::Rect& src_rect, |
| + const gfx::OverlayTransform transform) { |
| int plane_set_succeeded = |
| drmModeAtomicAddProperty(property_set, plane_id_, crtc_prop_.id, |
| crtc_id) && |
| @@ -76,7 +110,10 @@ bool HardwareDisplayPlaneAtomic::SetPlaneData(drmModeAtomicReq* property_set, |
| drmModeAtomicAddProperty(property_set, plane_id_, src_w_prop_.id, |
| src_rect.width()) && |
| drmModeAtomicAddProperty(property_set, plane_id_, src_h_prop_.id, |
| - src_rect.height()); |
| + src_rect.height()) && |
| + drmModeAtomicAddProperty( |
| + property_set, plane_id_, rotation_prop_.id, |
| + OverlayTransformToDrmRotationPropertyValue(transform)); |
| if (!plane_set_succeeded) { |
| PLOG(ERROR) << "Failed to set plane data"; |
| return false; |
| @@ -87,16 +124,18 @@ bool HardwareDisplayPlaneAtomic::SetPlaneData(drmModeAtomicReq* property_set, |
| bool HardwareDisplayPlaneAtomic::InitializeProperties( |
| DrmDevice* drm, |
| const ScopedDrmObjectPropertyPtr& plane_props) { |
| - bool props_init = crtc_prop_.Initialize(drm, kCrtcPropName, plane_props) && |
| - fb_prop_.Initialize(drm, kFbPropName, plane_props) && |
| - crtc_x_prop_.Initialize(drm, kCrtcXPropName, plane_props) && |
| - crtc_y_prop_.Initialize(drm, kCrtcYPropName, plane_props) && |
| - crtc_w_prop_.Initialize(drm, kCrtcWPropName, plane_props) && |
| - crtc_h_prop_.Initialize(drm, kCrtcHPropName, plane_props) && |
| - src_x_prop_.Initialize(drm, kSrcXPropName, plane_props) && |
| - src_y_prop_.Initialize(drm, kSrcYPropName, plane_props) && |
| - src_w_prop_.Initialize(drm, kSrcWPropName, plane_props) && |
| - src_h_prop_.Initialize(drm, kSrcHPropName, plane_props); |
| + bool props_init = |
| + crtc_prop_.Initialize(drm, kCrtcPropName, plane_props) && |
| + fb_prop_.Initialize(drm, kFbPropName, plane_props) && |
| + crtc_x_prop_.Initialize(drm, kCrtcXPropName, plane_props) && |
| + crtc_y_prop_.Initialize(drm, kCrtcYPropName, plane_props) && |
| + crtc_w_prop_.Initialize(drm, kCrtcWPropName, plane_props) && |
| + crtc_h_prop_.Initialize(drm, kCrtcHPropName, plane_props) && |
| + src_x_prop_.Initialize(drm, kSrcXPropName, plane_props) && |
| + src_y_prop_.Initialize(drm, kSrcYPropName, plane_props) && |
| + src_w_prop_.Initialize(drm, kSrcWPropName, plane_props) && |
| + src_h_prop_.Initialize(drm, kSrcHPropName, plane_props) && |
| + rotation_prop_.Initialize(drm, kRotationPropName, plane_props); |
| if (!props_init) { |
| LOG(ERROR) << "Unable to get plane properties."; |