Files
android_vendor_qcom_opensou…/libhwcomposer/hwc_copybit.h
Shivaraj Shetty e86506ac35 HWC/copybit : Add support to indicate driver on layer with Zorder 0
Some applications send RGBA layer with constant alpha 0xFF and
isOpaque=1. For these types of layer we don't get any wormHole
regions. Hence we see the previous content (framebuffer) due to
wrong selection of blending logic at kernel side.

To fix these kind of issues on MDP3 we make layer with Z order
zero as FG layer. This makes sure that proper blending logic
is chosen in kernel.

CRs-fixed: 521638
CRs-fixed: 517944
Change-Id: I172a46c3284916264a1413a6a16875afea2b1aad
2013-08-14 17:48:52 +05:30

91 lines
3.0 KiB
C++

/*
* Copyright (C) 2010 The Android Open Source Project
* Copyright (C) 2012-2013, The Linux Foundation. All rights reserved.
*
* Not a Contribution, Apache license notifications and license are retained
* for attribution purposes only.
*
* 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 HWC_COPYBIT_H
#define HWC_COPYBIT_H
#include "hwc_utils.h"
#define NUM_RENDER_BUFFERS 3
namespace qhwc {
class CopyBit {
public:
CopyBit();
~CopyBit();
// API to get copybit engine(non static)
struct copybit_device_t *getCopyBitDevice();
//Sets up members and prepares copybit if conditions are met
bool prepare(hwc_context_t *ctx, hwc_display_contents_1_t *list,
int dpy);
//Draws layer if the layer is set for copybit in prepare
bool draw(hwc_context_t *ctx, hwc_display_contents_1_t *list,
int dpy, int* fd);
// resets the values
void reset();
private_handle_t * getCurrentRenderBuffer();
void setReleaseFd(int fd);
private:
// holds the copybit device
struct copybit_device_t *mEngine;
// Helper functions for copybit composition
int drawLayerUsingCopybit(hwc_context_t *dev, hwc_layer_1_t *layer,
private_handle_t *renderBuffer, int dpy, bool isFG);
bool canUseCopybitForYUV (hwc_context_t *ctx);
bool canUseCopybitForRGB (hwc_context_t *ctx,
hwc_display_contents_1_t *list, int dpy);
bool validateParams (hwc_context_t *ctx,
const hwc_display_contents_1_t *list);
//Flags if this feature is on.
bool mIsModeOn;
// flag that indicates whether CopyBit composition is enabled for this cycle
bool mCopyBitDraw;
unsigned int getRGBRenderingArea
(const hwc_display_contents_1_t *list);
void getLayerResolution(const hwc_layer_1_t* layer,
unsigned int &width, unsigned int& height);
int allocRenderBuffers(int w, int h, int f);
void freeRenderBuffers();
int clear (private_handle_t* hnd, hwc_rect_t& rect);
private_handle_t* mRenderBuffer[NUM_RENDER_BUFFERS];
// Index of the current intermediate render buffer
int mCurRenderBufferIndex;
//These are the the release FDs of the T-2 and T-1 round
//We wait on the T-2 fence
int mRelFd[2];
//Dynamic composition threshold for deciding copybit usage.
double mDynThreshold;
};
}; //namespace qhwc
#endif //HWC_COPYBIT_H