Changeset View
Changeset View
Standalone View
Standalone View
plugins/platforms/drm/drm_object.cpp
Show First 20 Lines • Show All 50 Lines • ▼ Show 20 Line(s) | 50 | if (prop->name == m_propsNames[n]) { | |||
---|---|---|---|---|---|
51 | qCDebug(KWIN_DRM).nospace() << m_id << ": " << prop->name << "' (id " << prop->prop_id | 51 | qCDebug(KWIN_DRM).nospace() << m_id << ": " << prop->name << "' (id " << prop->prop_id | ||
52 | << "): " << properties->prop_values[i]; | 52 | << "): " << properties->prop_values[i]; | ||
53 | m_props[n] = new Property(prop, properties->prop_values[i], enumNames); | 53 | m_props[n] = new Property(prop, properties->prop_values[i], enumNames); | ||
54 | } | 54 | } | ||
55 | drmModeFreeProperty(prop); | 55 | drmModeFreeProperty(prop); | ||
56 | } | 56 | } | ||
57 | } | 57 | } | ||
58 | 58 | | |||
59 | void DrmObject::setPropValue(int index, uint64_t new_value) | 59 | bool DrmObject::atomicAddProperty(drmModeAtomicReq *req, int prop, uint64_t value) | ||
60 | { | 60 | { | ||
61 | Q_ASSERT(index < m_props.size()); | 61 | if (drmModeAtomicAddProperty(req, m_id, m_props[prop]->propId(), value) <= 0) { | ||
62 | m_props[index]->setValue(new_value); | 62 | qCWarning(KWIN_DRM) << "Adding property" << m_propsNames[prop] << "to atomic commit failed for object" << this; | ||
63 | return; | 63 | return false; | ||
64 | } | ||||
65 | return true; | ||||
64 | } | 66 | } | ||
65 | 67 | | |||
66 | bool DrmObject::atomicAddProperty(drmModeAtomicReq *req, int prop, uint64_t value) | 68 | bool DrmObject::atomicPopulate(drmModeAtomicReq *req) | ||
67 | { | 69 | { | ||
68 | uint32_t mask = 1U << prop; | 70 | bool ret = true; | ||
69 | if ((m_propsPending | m_propsValid) & mask && value == propValue(prop)) { | 71 | | ||
70 | // no change necessary, don't add property for next atomic commit | 72 | for (int i = 0; i < m_props.size(); i++) { | ||
71 | return true; | 73 | ret &= atomicAddProperty(req, i, m_props[i]->value()); | ||
72 | } | 74 | } | ||
73 | if (drmModeAtomicAddProperty(req, m_id, m_props[prop]->propId(), value) < 0) { | 75 | | ||
74 | // error when adding property | 76 | if (!ret) { | ||
77 | qCWarning(KWIN_DRM) << "Failed to populate atomic plane" << m_id; | ||||
75 | return false; | 78 | return false; | ||
76 | } | 79 | } | ||
77 | m_propsPending |= mask; | | |||
78 | m_propsValid &= ~mask; | | |||
79 | // adding property was successful | | |||
80 | return true; | 80 | return true; | ||
81 | } | 81 | } | ||
82 | 82 | | |||
83 | /* | 83 | /* | ||
84 | * Defintions for struct Prop | 84 | * Defintions for struct Prop | ||
85 | */ | 85 | */ | ||
86 | 86 | | |||
87 | DrmObject::Property::Property(drmModePropertyRes *prop, uint64_t val, QVector<QByteArray> enumNames) | 87 | DrmObject::Property::Property(drmModePropertyRes *prop, uint64_t val, QVector<QByteArray> enumNames) | ||
▲ Show 20 Lines • Show All 58 Lines • Show Last 20 Lines |