blob: 824534809d44fc04325d4b7e1b9baa382b9559c5 [file] [log] [blame]
/*
* Copyright 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef ANDROID_HWC_DRMPRESENTER_H
#define ANDROID_HWC_DRMPRESENTER_H
#include <include/drmhwcgralloc.h>
#include <xf86drm.h>
#include <xf86drmMode.h>
#include "Common.h"
namespace android {
class DrmBuffer;
class DrmPresenter;
// A RAII object that will clear a drm framebuffer upon destruction.
class DrmBuffer {
public:
DrmBuffer(const native_handle_t* handle, DrmPresenter& drmPresenter);
~DrmBuffer();
DrmBuffer(const DrmBuffer&) = delete;
DrmBuffer& operator=(const DrmBuffer&) = delete;
DrmBuffer(DrmBuffer&&) = delete;
DrmBuffer& operator=(DrmBuffer&&) = delete;
int flush();
private:
int convertBoInfo(const native_handle_t* handle);
DrmPresenter& mDrmPresenter;
hwc_drm_bo_t mBo;
};
class DrmPresenter {
public:
DrmPresenter();
~DrmPresenter();
DrmPresenter(const DrmPresenter&) = delete;
DrmPresenter& operator=(const DrmPresenter&) = delete;
DrmPresenter(DrmPresenter&&) = delete;
DrmPresenter& operator=(DrmPresenter&&) = delete;
bool init();
int setCrtc(hwc_drm_bo_t& fb);
int getDrmFB(hwc_drm_bo_t& bo);
int clearDrmFB(hwc_drm_bo_t& bo);
bool supportComposeWithoutPost();
uint32_t refreshRate() const { return mRefreshRateAsInteger; }
int exportSyncFdAndSetCrtc(hwc_drm_bo_t& fb);
private:
drmModeModeInfo mMode;
int32_t mFd = -1;
uint32_t mConnectorId;
uint32_t mCrtcId;
uint32_t mConnectorCrtcPropertyId;
uint32_t mOutFencePtrId;
uint32_t mCrtcActivePropretyId;
uint32_t mCrtcModeIdPropertyId;
uint32_t mModeBlobId;
uint32_t mPlaneId;
uint32_t mPlaneCrtcPropertyId;
uint32_t mPlaneFbPropertyId;
uint32_t mPlaneCrtcXPropertyId;
uint32_t mPlaneCrtcYPropertyId;
uint32_t mPlaneCrtcWPropertyId;
uint32_t mPlaneCrtcHPropertyId;
uint32_t mPlaneSrcXPropertyId;
uint32_t mPlaneSrcYPropertyId;
uint32_t mPlaneSrcWPropertyId;
uint32_t mPlaneSrcHPropertyId;
uint32_t mPlaneTypePropertyId;
float mRefreshRateAsFloat;
uint32_t mRefreshRateAsInteger;
int mOutFence = -1;
bool mDidSetCrtc = false;
};
} // namespace android
#endif