1*0a9764feSAndroid Build Coastguard Worker /* 2*0a9764feSAndroid Build Coastguard Worker * Copyright (C) 2022 The Android Open Source Project 3*0a9764feSAndroid Build Coastguard Worker * 4*0a9764feSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*0a9764feSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*0a9764feSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*0a9764feSAndroid Build Coastguard Worker * 8*0a9764feSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*0a9764feSAndroid Build Coastguard Worker * 10*0a9764feSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*0a9764feSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*0a9764feSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*0a9764feSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*0a9764feSAndroid Build Coastguard Worker * limitations under the License. 15*0a9764feSAndroid Build Coastguard Worker */ 16*0a9764feSAndroid Build Coastguard Worker 17*0a9764feSAndroid Build Coastguard Worker #define LOG_TAG "drmhwc" 18*0a9764feSAndroid Build Coastguard Worker 19*0a9764feSAndroid Build Coastguard Worker #include "DrmKmsPlan.h" 20*0a9764feSAndroid Build Coastguard Worker 21*0a9764feSAndroid Build Coastguard Worker #include "drm/DrmDevice.h" 22*0a9764feSAndroid Build Coastguard Worker #include "drm/DrmPlane.h" 23*0a9764feSAndroid Build Coastguard Worker #include "utils/log.h" 24*0a9764feSAndroid Build Coastguard Worker 25*0a9764feSAndroid Build Coastguard Worker namespace android { CreateDrmKmsPlan(DrmDisplayPipeline & pipe,std::vector<LayerData> composition)26*0a9764feSAndroid Build Coastguard Workerauto DrmKmsPlan::CreateDrmKmsPlan(DrmDisplayPipeline &pipe, 27*0a9764feSAndroid Build Coastguard Worker std::vector<LayerData> composition) 28*0a9764feSAndroid Build Coastguard Worker -> std::unique_ptr<DrmKmsPlan> { 29*0a9764feSAndroid Build Coastguard Worker auto plan = std::make_unique<DrmKmsPlan>(); 30*0a9764feSAndroid Build Coastguard Worker 31*0a9764feSAndroid Build Coastguard Worker auto avail_planes = pipe.GetUsablePlanes(); 32*0a9764feSAndroid Build Coastguard Worker 33*0a9764feSAndroid Build Coastguard Worker int z_pos = 0; 34*0a9764feSAndroid Build Coastguard Worker for (auto &dhl : composition) { 35*0a9764feSAndroid Build Coastguard Worker std::shared_ptr<BindingOwner<DrmPlane>> plane; 36*0a9764feSAndroid Build Coastguard Worker 37*0a9764feSAndroid Build Coastguard Worker /* Skip unsupported planes */ 38*0a9764feSAndroid Build Coastguard Worker do { 39*0a9764feSAndroid Build Coastguard Worker if (avail_planes.empty()) { 40*0a9764feSAndroid Build Coastguard Worker return {}; 41*0a9764feSAndroid Build Coastguard Worker } 42*0a9764feSAndroid Build Coastguard Worker 43*0a9764feSAndroid Build Coastguard Worker plane = *avail_planes.begin(); 44*0a9764feSAndroid Build Coastguard Worker avail_planes.erase(avail_planes.begin()); 45*0a9764feSAndroid Build Coastguard Worker } while (!plane->Get()->IsValidForLayer(&dhl)); 46*0a9764feSAndroid Build Coastguard Worker 47*0a9764feSAndroid Build Coastguard Worker LayerToPlaneJoining joining = { 48*0a9764feSAndroid Build Coastguard Worker .layer = std::move(dhl), 49*0a9764feSAndroid Build Coastguard Worker .plane = plane, 50*0a9764feSAndroid Build Coastguard Worker .z_pos = z_pos++, 51*0a9764feSAndroid Build Coastguard Worker }; 52*0a9764feSAndroid Build Coastguard Worker 53*0a9764feSAndroid Build Coastguard Worker plan->plan.emplace_back(std::move(joining)); 54*0a9764feSAndroid Build Coastguard Worker } 55*0a9764feSAndroid Build Coastguard Worker 56*0a9764feSAndroid Build Coastguard Worker return plan; 57*0a9764feSAndroid Build Coastguard Worker } 58*0a9764feSAndroid Build Coastguard Worker 59*0a9764feSAndroid Build Coastguard Worker } // namespace android 60