Initialize new HWC 1.2 fields
Also rename resolution* to width/height.
Change-Id: Ia5f0c50d3f0a349160f314a3257c3b985e13ef1d
diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.cpp b/services/surfaceflinger/DisplayHardware/HWComposer.cpp
index 992d067..2e4384e 100644
--- a/services/surfaceflinger/DisplayHardware/HWComposer.cpp
+++ b/services/surfaceflinger/DisplayHardware/HWComposer.cpp
@@ -162,8 +162,8 @@
"should only have fbdev if no hwc or hwc is 1.0");
DisplayData& disp(mDisplayData[HWC_DISPLAY_PRIMARY]);
- disp.xres = mFbDev->width;
- disp.yres = mFbDev->height;
+ disp.width = mFbDev->width;
+ disp.height = mFbDev->height;
disp.format = mFbDev->format;
disp.xdpi = mFbDev->xdpi;
disp.ydpi = mFbDev->ydpi;
@@ -297,8 +297,8 @@
static const uint32_t DISPLAY_ATTRIBUTES[] = {
HWC_DISPLAY_VSYNC_PERIOD,
- HWC_DISPLAY_RESOLUTION_X,
- HWC_DISPLAY_RESOLUTION_Y,
+ HWC_DISPLAY_WIDTH,
+ HWC_DISPLAY_HEIGHT,
HWC_DISPLAY_DPI_X,
HWC_DISPLAY_DPI_Y,
HWC_DISPLAY_NO_ATTRIBUTE,
@@ -330,11 +330,11 @@
case HWC_DISPLAY_VSYNC_PERIOD:
mDisplayData[disp].refresh = nsecs_t(values[i]);
break;
- case HWC_DISPLAY_RESOLUTION_X:
- mDisplayData[disp].xres = values[i];
+ case HWC_DISPLAY_WIDTH:
+ mDisplayData[disp].width = values[i];
break;
- case HWC_DISPLAY_RESOLUTION_Y:
- mDisplayData[disp].yres = values[i];
+ case HWC_DISPLAY_HEIGHT:
+ mDisplayData[disp].height = values[i];
break;
case HWC_DISPLAY_DPI_X:
mDisplayData[disp].xdpi = values[i] / 1000.0f;
@@ -395,12 +395,12 @@
return now - ((now - mLastHwVSync) % mDisplayData[disp].refresh);
}
-uint32_t HWComposer::getResolutionX(int disp) const {
- return mDisplayData[disp].xres;
+uint32_t HWComposer::getWidth(int disp) const {
+ return mDisplayData[disp].width;
}
-uint32_t HWComposer::getResolutionY(int disp) const {
- return mDisplayData[disp].yres;
+uint32_t HWComposer::getHeight(int disp) const {
+ return mDisplayData[disp].height;
}
uint32_t HWComposer::getFormat(int disp) const {
@@ -446,9 +446,9 @@
disp.list = (hwc_display_contents_1_t*)malloc(size);
disp.capacity = numLayers;
}
+ disp.list->retireFenceFd = -1;
disp.list->flags = HWC_GEOMETRY_CHANGED;
disp.list->numHwLayers = numLayers;
- disp.list->flipFenceFd = -1;
}
return NO_ERROR;
}
@@ -457,10 +457,20 @@
for (size_t i=0 ; i<mNumDisplays ; i++) {
mLists[i] = mDisplayData[i].list;
if (mLists[i]) {
- mLists[i]->dpy = EGL_NO_DISPLAY;
- mLists[i]->sur = EGL_NO_SURFACE;
+ if (hwcHasApiVersion(mHwc, HWC_DEVICE_API_VERSION_1_2)) {
+ mLists[i]->outbuf = NULL;
+ mLists[i]->outbufAcquireFenceFd = -1;
+ } else if (hwcHasApiVersion(mHwc, HWC_DEVICE_API_VERSION_1_1)) {
+ // garbage data to catch improper use
+ mLists[i]->dpy = (hwc_display_t)0xDEADBEEF;
+ mLists[i]->sur = (hwc_surface_t)0xDEADBEEF;
+ } else {
+ mLists[i]->dpy = EGL_NO_DISPLAY;
+ mLists[i]->sur = EGL_NO_SURFACE;
+ }
}
}
+
int err = mHwc->prepare(mHwc, mNumDisplays, mLists);
if (err == NO_ERROR) {
// here we're just making sure that "skip" layers are set
@@ -517,9 +527,9 @@
for (size_t i=0 ; i<mNumDisplays ; i++) {
DisplayData& disp(mDisplayData[i]);
if (disp.list) {
- if (disp.list->flipFenceFd != -1) {
- close(disp.list->flipFenceFd);
- disp.list->flipFenceFd = -1;
+ if (disp.list->retireFenceFd != -1) {
+ close(disp.list->retireFenceFd);
+ disp.list->retireFenceFd = -1;
}
disp.list->flags &= ~HWC_GEOMETRY_CHANGED;
}