OLD | NEW |
---|---|
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ui/ozone/platform/drm/gpu/hardware_display_plane_atomic.h" | 5 #include "ui/ozone/platform/drm/gpu/hardware_display_plane_atomic.h" |
6 | 6 |
7 #include "ui/ozone/platform/drm/gpu/drm_device.h" | 7 #include "ui/ozone/platform/drm/gpu/drm_device.h" |
8 | 8 |
9 namespace ui { | 9 namespace ui { |
10 namespace { | 10 namespace { |
11 | 11 |
12 const char* kCrtcPropName = "CRTC_ID"; | 12 const char* kCrtcPropName = "CRTC_ID"; |
13 const char* kFbPropName = "FB_ID"; | 13 const char* kFbPropName = "FB_ID"; |
14 const char* kCrtcXPropName = "CRTC_X"; | 14 const char* kCrtcXPropName = "CRTC_X"; |
15 const char* kCrtcYPropName = "CRTC_Y"; | 15 const char* kCrtcYPropName = "CRTC_Y"; |
16 const char* kCrtcWPropName = "CRTC_W"; | 16 const char* kCrtcWPropName = "CRTC_W"; |
17 const char* kCrtcHPropName = "CRTC_H"; | 17 const char* kCrtcHPropName = "CRTC_H"; |
18 const char* kSrcXPropName = "SRC_X"; | 18 const char* kSrcXPropName = "SRC_X"; |
19 const char* kSrcYPropName = "SRC_Y"; | 19 const char* kSrcYPropName = "SRC_Y"; |
20 const char* kSrcWPropName = "SRC_W"; | 20 const char* kSrcWPropName = "SRC_W"; |
21 const char* kSrcHPropName = "SRC_H"; | 21 const char* kSrcHPropName = "SRC_H"; |
22 const char* kRotationPropName = "rotation"; | |
23 | |
24 // 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
| |
25 #if !defined(DRM_ROTATE_0) | |
26 #define DRM_ROTATE_0 0 | |
27 #define DRM_ROTATE_90 1 | |
28 #define DRM_ROTATE_180 2 | |
29 #define DRM_ROTATE_270 3 | |
30 #define DRM_REFLECT_X 4 | |
31 #define DRM_REFLECT_Y 5 | |
32 #endif | |
33 | |
34 uint32_t OverlayTransformToDrmRotationPropertyValue( | |
35 gfx::OverlayTransform transform) { | |
36 switch (transform) { | |
37 case gfx::OVERLAY_TRANSFORM_NONE: | |
38 return 0; | |
39 case gfx::OVERLAY_TRANSFORM_FLIP_HORIZONTAL: | |
40 return 1 << DRM_REFLECT_X; | |
41 case gfx::OVERLAY_TRANSFORM_FLIP_VERTICAL: | |
42 return 1 << DRM_REFLECT_Y; | |
43 case gfx::OVERLAY_TRANSFORM_ROTATE_90: | |
44 return 1 << DRM_ROTATE_90; | |
45 case gfx::OVERLAY_TRANSFORM_ROTATE_180: | |
46 return 1 << DRM_ROTATE_180; | |
47 case gfx::OVERLAY_TRANSFORM_ROTATE_270: | |
48 return 1 << DRM_ROTATE_270; | |
49 default: | |
50 NOTREACHED(); | |
51 } | |
52 return 0; | |
53 } | |
22 | 54 |
23 } // namespace | 55 } // namespace |
24 | 56 |
25 HardwareDisplayPlaneAtomic::Property::Property() { | 57 HardwareDisplayPlaneAtomic::Property::Property() { |
26 } | 58 } |
27 | 59 |
28 bool HardwareDisplayPlaneAtomic::Property::Initialize( | 60 bool HardwareDisplayPlaneAtomic::Property::Initialize( |
29 DrmDevice* drm, | 61 DrmDevice* drm, |
30 const char* name, | 62 const char* name, |
31 const ScopedDrmObjectPropertyPtr& plane_props) { | 63 const ScopedDrmObjectPropertyPtr& plane_props) { |
(...skipping 12 matching lines...) Expand all Loading... | |
44 return true; | 76 return true; |
45 } | 77 } |
46 | 78 |
47 HardwareDisplayPlaneAtomic::HardwareDisplayPlaneAtomic(uint32_t plane_id, | 79 HardwareDisplayPlaneAtomic::HardwareDisplayPlaneAtomic(uint32_t plane_id, |
48 uint32_t possible_crtcs) | 80 uint32_t possible_crtcs) |
49 : HardwareDisplayPlane(plane_id, possible_crtcs) { | 81 : HardwareDisplayPlane(plane_id, possible_crtcs) { |
50 } | 82 } |
51 HardwareDisplayPlaneAtomic::~HardwareDisplayPlaneAtomic() { | 83 HardwareDisplayPlaneAtomic::~HardwareDisplayPlaneAtomic() { |
52 } | 84 } |
53 | 85 |
54 bool HardwareDisplayPlaneAtomic::SetPlaneData(drmModeAtomicReq* property_set, | 86 bool HardwareDisplayPlaneAtomic::SetPlaneData( |
55 uint32_t crtc_id, | 87 drmModeAtomicReq* property_set, |
56 uint32_t framebuffer, | 88 uint32_t crtc_id, |
57 const gfx::Rect& crtc_rect, | 89 uint32_t framebuffer, |
58 const gfx::Rect& src_rect) { | 90 const gfx::Rect& crtc_rect, |
91 const gfx::Rect& src_rect, | |
92 const gfx::OverlayTransform transform) { | |
59 int plane_set_succeeded = | 93 int plane_set_succeeded = |
60 drmModeAtomicAddProperty(property_set, plane_id_, crtc_prop_.id, | 94 drmModeAtomicAddProperty(property_set, plane_id_, crtc_prop_.id, |
61 crtc_id) && | 95 crtc_id) && |
62 drmModeAtomicAddProperty(property_set, plane_id_, fb_prop_.id, | 96 drmModeAtomicAddProperty(property_set, plane_id_, fb_prop_.id, |
63 framebuffer) && | 97 framebuffer) && |
64 drmModeAtomicAddProperty(property_set, plane_id_, crtc_x_prop_.id, | 98 drmModeAtomicAddProperty(property_set, plane_id_, crtc_x_prop_.id, |
65 crtc_rect.x()) && | 99 crtc_rect.x()) && |
66 drmModeAtomicAddProperty(property_set, plane_id_, crtc_y_prop_.id, | 100 drmModeAtomicAddProperty(property_set, plane_id_, crtc_y_prop_.id, |
67 crtc_rect.y()) && | 101 crtc_rect.y()) && |
68 drmModeAtomicAddProperty(property_set, plane_id_, crtc_w_prop_.id, | 102 drmModeAtomicAddProperty(property_set, plane_id_, crtc_w_prop_.id, |
69 crtc_rect.width()) && | 103 crtc_rect.width()) && |
70 drmModeAtomicAddProperty(property_set, plane_id_, crtc_h_prop_.id, | 104 drmModeAtomicAddProperty(property_set, plane_id_, crtc_h_prop_.id, |
71 crtc_rect.height()) && | 105 crtc_rect.height()) && |
72 drmModeAtomicAddProperty(property_set, plane_id_, src_x_prop_.id, | 106 drmModeAtomicAddProperty(property_set, plane_id_, src_x_prop_.id, |
73 src_rect.x()) && | 107 src_rect.x()) && |
74 drmModeAtomicAddProperty(property_set, plane_id_, src_y_prop_.id, | 108 drmModeAtomicAddProperty(property_set, plane_id_, src_y_prop_.id, |
75 src_rect.x()) && | 109 src_rect.x()) && |
76 drmModeAtomicAddProperty(property_set, plane_id_, src_w_prop_.id, | 110 drmModeAtomicAddProperty(property_set, plane_id_, src_w_prop_.id, |
77 src_rect.width()) && | 111 src_rect.width()) && |
78 drmModeAtomicAddProperty(property_set, plane_id_, src_h_prop_.id, | 112 drmModeAtomicAddProperty(property_set, plane_id_, src_h_prop_.id, |
79 src_rect.height()); | 113 src_rect.height()) && |
114 drmModeAtomicAddProperty( | |
115 property_set, plane_id_, rotation_prop_.id, | |
116 OverlayTransformToDrmRotationPropertyValue(transform)); | |
80 if (!plane_set_succeeded) { | 117 if (!plane_set_succeeded) { |
81 PLOG(ERROR) << "Failed to set plane data"; | 118 PLOG(ERROR) << "Failed to set plane data"; |
82 return false; | 119 return false; |
83 } | 120 } |
84 return true; | 121 return true; |
85 } | 122 } |
86 | 123 |
87 bool HardwareDisplayPlaneAtomic::InitializeProperties( | 124 bool HardwareDisplayPlaneAtomic::InitializeProperties( |
88 DrmDevice* drm, | 125 DrmDevice* drm, |
89 const ScopedDrmObjectPropertyPtr& plane_props) { | 126 const ScopedDrmObjectPropertyPtr& plane_props) { |
90 bool props_init = crtc_prop_.Initialize(drm, kCrtcPropName, plane_props) && | 127 bool props_init = |
91 fb_prop_.Initialize(drm, kFbPropName, plane_props) && | 128 crtc_prop_.Initialize(drm, kCrtcPropName, plane_props) && |
92 crtc_x_prop_.Initialize(drm, kCrtcXPropName, plane_props) && | 129 fb_prop_.Initialize(drm, kFbPropName, plane_props) && |
93 crtc_y_prop_.Initialize(drm, kCrtcYPropName, plane_props) && | 130 crtc_x_prop_.Initialize(drm, kCrtcXPropName, plane_props) && |
94 crtc_w_prop_.Initialize(drm, kCrtcWPropName, plane_props) && | 131 crtc_y_prop_.Initialize(drm, kCrtcYPropName, plane_props) && |
95 crtc_h_prop_.Initialize(drm, kCrtcHPropName, plane_props) && | 132 crtc_w_prop_.Initialize(drm, kCrtcWPropName, plane_props) && |
96 src_x_prop_.Initialize(drm, kSrcXPropName, plane_props) && | 133 crtc_h_prop_.Initialize(drm, kCrtcHPropName, plane_props) && |
97 src_y_prop_.Initialize(drm, kSrcYPropName, plane_props) && | 134 src_x_prop_.Initialize(drm, kSrcXPropName, plane_props) && |
98 src_w_prop_.Initialize(drm, kSrcWPropName, plane_props) && | 135 src_y_prop_.Initialize(drm, kSrcYPropName, plane_props) && |
99 src_h_prop_.Initialize(drm, kSrcHPropName, plane_props); | 136 src_w_prop_.Initialize(drm, kSrcWPropName, plane_props) && |
137 src_h_prop_.Initialize(drm, kSrcHPropName, plane_props) && | |
138 rotation_prop_.Initialize(drm, kRotationPropName, plane_props); | |
100 | 139 |
101 if (!props_init) { | 140 if (!props_init) { |
102 LOG(ERROR) << "Unable to get plane properties."; | 141 LOG(ERROR) << "Unable to get plane properties."; |
103 return false; | 142 return false; |
104 } | 143 } |
105 | 144 |
106 return true; | 145 return true; |
107 } | 146 } |
108 | 147 |
109 } // namespace ui | 148 } // namespace ui |
OLD | NEW |