Chromium Code Reviews| 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; | |
| 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; | |
| 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( | |
|
spang
2017/04/11 00:07:44
This one doesn't need to be checked?
Daniele Castagna
2017/04/11 00:25:43
I initially thought this would do a syscall and ch
| |
| 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 |