2 // Copyright (c) 2016 Intel Corporation
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
8 // http://www.apache.org/licenses/LICENSE-2.0
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
16 #ifndef WSI_DRMBUFFER_H_
17 #define WSI_DRMBUFFER_H_
19 #include <platformdefines.h>
21 #include "framebuffermanager.h"
22 #include "overlaybuffer.h"
24 #define METADATA(x) image_.handle_->meta_data_.x
26 namespace hwcomposer {
28 class NativeBufferHandler;
30 class DrmBuffer : public OverlayBuffer {
32 DrmBuffer(DrmBuffer&& rhs) = default;
33 DrmBuffer& operator=(DrmBuffer&& other) = default;
35 DrmBuffer() = default;
37 ~DrmBuffer() override;
39 void InitializeFromNativeHandle(
40 HWCNativeHandle handle, ResourceManager* buffer_manager,
41 FrameBufferManager* frame_buffer_manager) override;
43 uint32_t GetDataSpace() const override {
44 return METADATA(dataspace_);
47 uint32_t GetWidth() const override {
48 return METADATA(width_);
51 uint32_t GetHeight() const override {
52 return METADATA(height_);
55 uint32_t GetFormat() const override {
59 HWCLayerType GetUsage() const override {
60 return METADATA(usage_);
63 uint32_t GetFb() const override {
64 return image_.drm_fd_;
67 uint32_t GetPrimeFD() const override {
68 return METADATA(prime_fds_[0]);
71 const uint32_t* GetPitches() const override {
72 return METADATA(pitches_);
75 const uint32_t* GetOffsets() const override {
76 return METADATA(offsets_);
79 uint32_t GetTilingMode() const override {
80 return METADATA(tiling_mode_);
83 void SetDataSpace(uint32_t dataspace) override {
84 METADATA(dataspace_) = dataspace;
87 bool GetInterlace() override {
88 return METADATA(is_interlaced_);
91 void SetInterlace(bool isInterlaced) override {
92 METADATA(is_interlaced_) = isInterlaced;
95 const ResourceHandle& GetGpuResource(GpuDisplay egl_display,
96 bool external_import) override;
98 const ResourceHandle& GetGpuResource() override;
100 const MediaResourceHandle& GetMediaResource(MediaDisplay display,
102 uint32_t height) override;
104 bool CreateFrameBuffer() override;
106 bool CreateFrameBufferWithModifier(uint64_t modifier) override;
108 HWCNativeHandle GetOriginalHandle() const override {
109 return original_handle_;
112 void SetOriginalHandle(HWCNativeHandle handle) override;
114 void Dump() override;
117 void Initialize(const HwcMeta& meta);
118 uint32_t format_ = 0;
119 uint32_t frame_buffer_format_ = 0;
120 uint32_t previous_width_ = 0; // For Media usage.
121 uint32_t previous_height_ = 0; // For Media usage.
122 ResourceManager* resource_manager_ = 0;
123 ResourceHandle image_;
124 MediaResourceHandle media_image_;
125 HWCNativeHandle original_handle_;
126 FrameBufferManager* fb_manager_ = NULL;
129 } // namespace hwcomposer
130 #endif // WSI_DRMBUFFER_H_