1 /* 2 * Copyright 2019 The Android Open Source Project 3 * 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 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 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. 15 */ 16 17 #pragma once 18 19 #include <cstdint> 20 21 #include <gui/BufferQueue.h> 22 #include <gui/HdrMetadata.h> 23 #include <math/mat4.h> 24 #include <ui/FloatRect.h> 25 #include <ui/GraphicBuffer.h> 26 #include <ui/GraphicTypes.h> 27 #include <ui/Rect.h> 28 #include <ui/Region.h> 29 #include <ui/Transform.h> 30 31 #include "DisplayHardware/ComposerHal.h" 32 33 namespace android::compositionengine { 34 35 /* 36 * Used by LayerFE::getCompositionState 37 */ 38 struct LayerFECompositionState { 39 // TODO(lpique): b/121291683 Remove this one we are sure we don't need the 40 // value recomputed / set every frame. 41 Region geomVisibleRegion; 42 43 /* 44 * Geometry state 45 */ 46 47 bool isSecure{false}; 48 bool geomUsesSourceCrop{false}; 49 bool geomBufferUsesDisplayInverseTransform{false}; 50 uint32_t geomBufferTransform{0}; 51 ui::Transform geomLayerTransform; 52 ui::Transform geomInverseLayerTransform; 53 Rect geomBufferSize; 54 Rect geomContentCrop; 55 Rect geomCrop; 56 Region geomActiveTransparentRegion; 57 FloatRect geomLayerBounds; 58 59 /* 60 * Presentation 61 */ 62 63 // The blend mode for this layer 64 Hwc2::IComposerClient::BlendMode blendMode{Hwc2::IComposerClient::BlendMode::INVALID}; 65 66 // The alpha value for this layer 67 float alpha{1.f}; 68 69 /* 70 * Extra metadata 71 */ 72 73 // The type for this layer 74 int type{0}; 75 76 // The appId for this layer 77 int appId{0}; 78 79 /* 80 * Per-frame content 81 */ 82 83 // The type of composition for this layer 84 Hwc2::IComposerClient::Composition compositionType{Hwc2::IComposerClient::Composition::INVALID}; 85 86 // The buffer and related state 87 sp<GraphicBuffer> buffer; 88 int bufferSlot{BufferQueue::INVALID_BUFFER_SLOT}; 89 sp<Fence> acquireFence; 90 Region surfaceDamage; 91 92 // The handle to use for a sideband stream for this layer 93 sp<NativeHandle> sidebandStream; 94 95 // The color for this layer 96 Hwc2::IComposerClient::Color color; 97 98 /* 99 * Per-frame presentation state 100 */ 101 102 // The dataspace for this layer 103 ui::Dataspace dataspace{ui::Dataspace::UNKNOWN}; 104 105 // The metadata for this layer 106 HdrMetadata hdrMetadata; 107 108 // The color transform 109 mat4 colorTransform; 110 }; 111 112 } // namespace android::compositionengine 113