Writeback connector is a special case of connector, which can be linked to a CRTC in order to get the result of the composition back to a memory buffer. This had not been merged to the mainline kernel yet, latest version of the kernel patches could be found here [1]. [1] https://lists.freedesktop.org/archives/dri-devel/2018-February/167703.html Signed-off-by: Alexandru Gheorghe <alexandru-cosmin.gheorghe@xxxxxxx> --- drmconnector.cpp | 42 +++++++++++++++++++++++++++++++++++++++++- drmconnector.h | 7 +++++++ 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/drmconnector.cpp b/drmconnector.cpp index 145518f..e482832 100644 --- a/drmconnector.cpp +++ b/drmconnector.cpp @@ -52,6 +52,26 @@ int DrmConnector::Init() { ALOGE("Could not get CRTC_ID property\n"); return ret; } + if (writeback()) { + ret = drm_->GetConnectorProperty(*this, "WRITEBACK_PIXEL_FORMATS", + &writeback_pixel_formats_); + if (ret) { + ALOGE("Could not get WRITEBACK_PIXEL_FORMATS connector_id = %d\n", id_); + return ret; + } + ret = + drm_->GetConnectorProperty(*this, "WRITEBACK_FB_ID", &writeback_fb_id_); + if (ret) { + ALOGE("Could not get WRITEBACK_FB_ID connector_id = %d\n", id_); + return ret; + } + ret = drm_->GetConnectorProperty(*this, "WRITEBACK_OUT_FENCE_PTR", + &writeback_out_fence_); + if (ret) { + ALOGE("Could not get WRITEBACK_OUT_FENCE_PTR connector_id = %d\n", id_); + return ret; + } + } return 0; } @@ -78,8 +98,16 @@ bool DrmConnector::external() const { type_ == DRM_MODE_CONNECTOR_VGA; } +bool DrmConnector::writeback() const { +#ifdef DRM_MODE_CONNECTOR_WRITEBACK + return type_ == DRM_MODE_CONNECTOR_WRITEBACK; +#else + return false; +#endif +} + bool DrmConnector::valid_type() const { - return internal() || external(); + return internal() || external() || writeback(); } int DrmConnector::UpdateModes() { @@ -130,6 +158,18 @@ const DrmProperty &DrmConnector::crtc_id_property() const { return crtc_id_property_; } +const DrmProperty &DrmConnector::writeback_pixel_formats() const { + return writeback_pixel_formats_; +} + +const DrmProperty &DrmConnector::writeback_fb_id() const { + return writeback_fb_id_; +} + +const DrmProperty &DrmConnector::writeback_out_fence() const { + return writeback_out_fence_; +} + DrmEncoder *DrmConnector::encoder() const { return encoder_; } diff --git a/drmconnector.h b/drmconnector.h index 5601e06..e139730 100644 --- a/drmconnector.h +++ b/drmconnector.h @@ -46,6 +46,7 @@ class DrmConnector { bool internal() const; bool external() const; + bool writeback() const; bool valid_type() const; int UpdateModes(); @@ -58,6 +59,9 @@ class DrmConnector { const DrmProperty &dpms_property() const; const DrmProperty &crtc_id_property() const; + const DrmProperty &writeback_pixel_formats() const; + const DrmProperty &writeback_fb_id() const; + const DrmProperty &writeback_out_fence() const; const std::vector<DrmEncoder *> &possible_encoders() const { return possible_encoders_; @@ -88,6 +92,9 @@ class DrmConnector { DrmProperty dpms_property_; DrmProperty crtc_id_property_; + DrmProperty writeback_pixel_formats_; + DrmProperty writeback_fb_id_; + DrmProperty writeback_out_fence_; std::vector<DrmEncoder *> possible_encoders_; }; -- 2.7.4 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel