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 const int kDrmRotate0 = 0; | |
dnicoara
2017/04/11 13:51:06
Do you know if there's plans to have these in libd
Daniele Castagna
2017/04/11 20:21:05
I just asked Kristian and he agreed it should prob
| |
25 const int kDrmRotate90 = 1; | |
26 const int kDrmRotate180 = 4; | |
27 const int kDrmRotate270 = 8; | |
28 const int kDrmReflectX = 16; | |
29 const int kDrmReflectY = 32; | |
dnicoara
2017/04/11 13:51:06
nit: Could these be in hex or as bit shifts?
Daniele Castagna
2017/04/11 20:21:05
Re-used the drm_crtc defines. The bit shifts is no
| |
30 | |
31 uint32_t OverlayTransformToDrmRotationPropertyValue( | |
32 gfx::OverlayTransform transform) { | |
33 switch (transform) { | |
34 case gfx::OVERLAY_TRANSFORM_NONE: | |
35 return kDrmRotate0; | |
36 case gfx::OVERLAY_TRANSFORM_FLIP_HORIZONTAL: | |
37 return kDrmReflectX; | |
38 case gfx::OVERLAY_TRANSFORM_FLIP_VERTICAL: | |
39 return kDrmReflectY; | |
40 case gfx::OVERLAY_TRANSFORM_ROTATE_90: | |
41 return kDrmRotate90; | |
42 case gfx::OVERLAY_TRANSFORM_ROTATE_180: | |
43 return kDrmRotate180; | |
44 case gfx::OVERLAY_TRANSFORM_ROTATE_270: | |
45 return kDrmRotate270; | |
46 default: | |
47 NOTREACHED(); | |
48 } | |
49 return kDrmRotate0; | |
50 } | |
22 | 51 |
23 } // namespace | 52 } // namespace |
24 | 53 |
25 HardwareDisplayPlaneAtomic::Property::Property() { | 54 HardwareDisplayPlaneAtomic::Property::Property() { |
26 } | 55 } |
27 | 56 |
28 bool HardwareDisplayPlaneAtomic::Property::Initialize( | 57 bool HardwareDisplayPlaneAtomic::Property::Initialize( |
29 DrmDevice* drm, | 58 DrmDevice* drm, |
30 const char* name, | 59 const char* name, |
31 const ScopedDrmObjectPropertyPtr& plane_props) { | 60 const ScopedDrmObjectPropertyPtr& plane_props) { |
(...skipping 12 matching lines...) Expand all Loading... | |
44 return true; | 73 return true; |
45 } | 74 } |
46 | 75 |
47 HardwareDisplayPlaneAtomic::HardwareDisplayPlaneAtomic(uint32_t plane_id, | 76 HardwareDisplayPlaneAtomic::HardwareDisplayPlaneAtomic(uint32_t plane_id, |
48 uint32_t possible_crtcs) | 77 uint32_t possible_crtcs) |
49 : HardwareDisplayPlane(plane_id, possible_crtcs) { | 78 : HardwareDisplayPlane(plane_id, possible_crtcs) { |
50 } | 79 } |
51 HardwareDisplayPlaneAtomic::~HardwareDisplayPlaneAtomic() { | 80 HardwareDisplayPlaneAtomic::~HardwareDisplayPlaneAtomic() { |
52 } | 81 } |
53 | 82 |
54 bool HardwareDisplayPlaneAtomic::SetPlaneData(drmModeAtomicReq* property_set, | 83 bool HardwareDisplayPlaneAtomic::SetPlaneData( |
55 uint32_t crtc_id, | 84 drmModeAtomicReq* property_set, |
56 uint32_t framebuffer, | 85 uint32_t crtc_id, |
57 const gfx::Rect& crtc_rect, | 86 uint32_t framebuffer, |
58 const gfx::Rect& src_rect) { | 87 const gfx::Rect& crtc_rect, |
88 const gfx::Rect& src_rect, | |
89 const gfx::OverlayTransform transform) { | |
59 int plane_set_succeeded = | 90 int plane_set_succeeded = |
60 drmModeAtomicAddProperty(property_set, plane_id_, crtc_prop_.id, | 91 drmModeAtomicAddProperty(property_set, plane_id_, crtc_prop_.id, |
61 crtc_id) && | 92 crtc_id) && |
62 drmModeAtomicAddProperty(property_set, plane_id_, fb_prop_.id, | 93 drmModeAtomicAddProperty(property_set, plane_id_, fb_prop_.id, |
63 framebuffer) && | 94 framebuffer) && |
64 drmModeAtomicAddProperty(property_set, plane_id_, crtc_x_prop_.id, | 95 drmModeAtomicAddProperty(property_set, plane_id_, crtc_x_prop_.id, |
65 crtc_rect.x()) && | 96 crtc_rect.x()) && |
66 drmModeAtomicAddProperty(property_set, plane_id_, crtc_y_prop_.id, | 97 drmModeAtomicAddProperty(property_set, plane_id_, crtc_y_prop_.id, |
67 crtc_rect.y()) && | 98 crtc_rect.y()) && |
68 drmModeAtomicAddProperty(property_set, plane_id_, crtc_w_prop_.id, | 99 drmModeAtomicAddProperty(property_set, plane_id_, crtc_w_prop_.id, |
69 crtc_rect.width()) && | 100 crtc_rect.width()) && |
70 drmModeAtomicAddProperty(property_set, plane_id_, crtc_h_prop_.id, | 101 drmModeAtomicAddProperty(property_set, plane_id_, crtc_h_prop_.id, |
71 crtc_rect.height()) && | 102 crtc_rect.height()) && |
72 drmModeAtomicAddProperty(property_set, plane_id_, src_x_prop_.id, | 103 drmModeAtomicAddProperty(property_set, plane_id_, src_x_prop_.id, |
73 src_rect.x()) && | 104 src_rect.x()) && |
74 drmModeAtomicAddProperty(property_set, plane_id_, src_y_prop_.id, | 105 drmModeAtomicAddProperty(property_set, plane_id_, src_y_prop_.id, |
75 src_rect.x()) && | 106 src_rect.x()) && |
76 drmModeAtomicAddProperty(property_set, plane_id_, src_w_prop_.id, | 107 drmModeAtomicAddProperty(property_set, plane_id_, src_w_prop_.id, |
77 src_rect.width()) && | 108 src_rect.width()) && |
78 drmModeAtomicAddProperty(property_set, plane_id_, src_h_prop_.id, | 109 drmModeAtomicAddProperty(property_set, plane_id_, src_h_prop_.id, |
79 src_rect.height()); | 110 src_rect.height()) && |
111 drmModeAtomicAddProperty( | |
112 property_set, plane_id_, rotation_prop_.id, | |
113 OverlayTransformToDrmRotationPropertyValue(transform)); | |
80 if (!plane_set_succeeded) { | 114 if (!plane_set_succeeded) { |
81 PLOG(ERROR) << "Failed to set plane data"; | 115 PLOG(ERROR) << "Failed to set plane data"; |
82 return false; | 116 return false; |
83 } | 117 } |
84 return true; | 118 return true; |
85 } | 119 } |
86 | 120 |
87 bool HardwareDisplayPlaneAtomic::InitializeProperties( | 121 bool HardwareDisplayPlaneAtomic::InitializeProperties( |
88 DrmDevice* drm, | 122 DrmDevice* drm, |
89 const ScopedDrmObjectPropertyPtr& plane_props) { | 123 const ScopedDrmObjectPropertyPtr& plane_props) { |
90 bool props_init = crtc_prop_.Initialize(drm, kCrtcPropName, plane_props) && | 124 bool props_init = |
91 fb_prop_.Initialize(drm, kFbPropName, plane_props) && | 125 crtc_prop_.Initialize(drm, kCrtcPropName, plane_props) && |
92 crtc_x_prop_.Initialize(drm, kCrtcXPropName, plane_props) && | 126 fb_prop_.Initialize(drm, kFbPropName, plane_props) && |
93 crtc_y_prop_.Initialize(drm, kCrtcYPropName, plane_props) && | 127 crtc_x_prop_.Initialize(drm, kCrtcXPropName, plane_props) && |
94 crtc_w_prop_.Initialize(drm, kCrtcWPropName, plane_props) && | 128 crtc_y_prop_.Initialize(drm, kCrtcYPropName, plane_props) && |
95 crtc_h_prop_.Initialize(drm, kCrtcHPropName, plane_props) && | 129 crtc_w_prop_.Initialize(drm, kCrtcWPropName, plane_props) && |
96 src_x_prop_.Initialize(drm, kSrcXPropName, plane_props) && | 130 crtc_h_prop_.Initialize(drm, kCrtcHPropName, plane_props) && |
97 src_y_prop_.Initialize(drm, kSrcYPropName, plane_props) && | 131 src_x_prop_.Initialize(drm, kSrcXPropName, plane_props) && |
98 src_w_prop_.Initialize(drm, kSrcWPropName, plane_props) && | 132 src_y_prop_.Initialize(drm, kSrcYPropName, plane_props) && |
99 src_h_prop_.Initialize(drm, kSrcHPropName, plane_props); | 133 src_w_prop_.Initialize(drm, kSrcWPropName, plane_props) && |
134 src_h_prop_.Initialize(drm, kSrcHPropName, plane_props) && | |
135 rotation_prop_.Initialize(drm, kRotationPropName, plane_props); | |
100 | 136 |
101 if (!props_init) { | 137 if (!props_init) { |
102 LOG(ERROR) << "Unable to get plane properties."; | 138 LOG(ERROR) << "Unable to get plane properties."; |
103 return false; | 139 return false; |
104 } | 140 } |
105 | 141 |
106 return true; | 142 return true; |
107 } | 143 } |
108 | 144 |
109 } // namespace ui | 145 } // namespace ui |
OLD | NEW |