| /* |
| * Copyright (C) 2015 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. |
| */ |
| |
| #pragma once |
| |
| #include <xf86drmMode.h> |
| |
| #include <cstdint> |
| #include <vector> |
| |
| #include "DrmCrtc.h" |
| #include "DrmProperty.h" |
| #include "compositor/LayerData.h" |
| |
| namespace android { |
| |
| class DrmDevice; |
| struct LayerData; |
| |
| class DrmPlane : public PipelineBindable<DrmPlane> { |
| public: |
| DrmPlane(const DrmPlane &) = delete; |
| DrmPlane &operator=(const DrmPlane &) = delete; |
| |
| static auto CreateInstance(DrmDevice &dev, uint32_t plane_id) |
| -> std::unique_ptr<DrmPlane>; |
| |
| bool IsCrtcSupported(const DrmCrtc &crtc) const; |
| bool IsValidForLayer(LayerData *layer); |
| |
| auto GetType() const { |
| return type_; |
| } |
| |
| bool IsFormatSupported(uint32_t format) const; |
| bool HasNonRgbFormat() const; |
| |
| auto AtomicSetState(drmModeAtomicReq &pset, LayerData &layer, uint32_t zpos, |
| uint32_t crtc_id) -> int; |
| auto AtomicDisablePlane(drmModeAtomicReq &pset) -> int; |
| auto &GetZPosProperty() const { |
| return zpos_property_; |
| } |
| |
| auto GetId() const { |
| return plane_->plane_id; |
| } |
| |
| private: |
| DrmPlane(DrmDevice &dev, DrmModePlaneUnique plane) |
| : drm_(&dev), plane_(std::move(plane)){}; |
| DrmDevice *const drm_; |
| DrmModePlaneUnique plane_; |
| |
| enum class Presence { kOptional, kMandatory }; |
| |
| auto Init() -> int; |
| auto GetPlaneProperty(const char *prop_name, DrmProperty &property, |
| Presence presence = Presence::kMandatory) -> bool; |
| |
| uint32_t type_{}; |
| |
| std::vector<uint32_t> formats_; |
| |
| DrmProperty crtc_property_; |
| DrmProperty fb_property_; |
| DrmProperty crtc_x_property_; |
| DrmProperty crtc_y_property_; |
| DrmProperty crtc_w_property_; |
| DrmProperty crtc_h_property_; |
| DrmProperty src_x_property_; |
| DrmProperty src_y_property_; |
| DrmProperty src_w_property_; |
| DrmProperty src_h_property_; |
| DrmProperty zpos_property_; |
| DrmProperty rotation_property_; |
| DrmProperty alpha_property_; |
| DrmProperty blend_property_; |
| DrmProperty in_fence_fd_property_; |
| DrmProperty color_encoding_propery_; |
| DrmProperty color_range_property_; |
| |
| std::map<BufferBlendMode, uint64_t> blending_enum_map_; |
| std::map<BufferColorSpace, uint64_t> color_encoding_enum_map_; |
| std::map<BufferSampleRange, uint64_t> color_range_enum_map_; |
| std::map<LayerTransform, uint64_t> transform_enum_map_; |
| }; |
| } // namespace android |