hwc: Update to API 1.1

Change-Id: I59a1102bb4d8e9622362c8909b122a3b99c656fd
tirimbino
Ricardo Cerqueira 11 years ago
parent e1b1ffd5fc
commit 99f63f2a4f
  1. 89
      exynos4/hal/libhwcomposer/SecHWC.cpp

@ -710,6 +710,18 @@ static int hwc_set(hwc_composer_device_1_t *dev,
#endif #endif
return HWC_EGL_ERROR; return HWC_EGL_ERROR;
} }
} else {
list->dpy = eglGetCurrentDisplay();
list->sur = eglGetCurrentSurface(EGL_DRAW);
// We still don't support fences, close them all
for(uint32_t i = 0; i < list->numHwLayers; i++) {
if(list->hwLayers[i].acquireFenceFd >= 0) {
close(list->hwLayers[i].acquireFenceFd);
list->hwLayers[i].acquireFenceFd = -1;
}
}
list->retireFenceFd = -1;
} }
if(ctx->num_of_hwc_layer > NUM_OF_WIN) if(ctx->num_of_hwc_layer > NUM_OF_WIN)
@ -1058,6 +1070,79 @@ static int hwc_blank(struct hwc_composer_device_1 *dev, int dpy, int blank)
} }
} }
int hwc_getDisplayConfigs(struct hwc_composer_device_1* dev, int disp,
uint32_t* configs, size_t* numConfigs) {
int status = 0;
switch(disp) {
case HWC_DISPLAY_PRIMARY:
if(*numConfigs > 0) {
configs[0] = 0;
*numConfigs = 1;
}
status = 0;
break;
case HWC_DISPLAY_EXTERNAL:
status = -1; //Not connected, this is broken atm
break;
}
return status;
}
int hwc_getDisplayAttributes(struct hwc_composer_device_1* dev, int disp,
uint32_t config, const uint32_t* attributes, int32_t* values) {
hwc_context_t* ctx = (hwc_context_t*)(dev);
if(disp == HWC_DISPLAY_EXTERNAL) {
return -1;
}
static const uint32_t DISPLAY_ATTRIBUTES[] = {
HWC_DISPLAY_VSYNC_PERIOD,
HWC_DISPLAY_WIDTH,
HWC_DISPLAY_HEIGHT,
HWC_DISPLAY_DPI_X,
HWC_DISPLAY_DPI_Y,
HWC_DISPLAY_NO_ATTRIBUTE,
};
const int NUM_DISPLAY_ATTRIBUTES = (sizeof(DISPLAY_ATTRIBUTES) /
sizeof(DISPLAY_ATTRIBUTES)[0]);
struct fb_var_screeninfo info = ctx->lcd_info;
for (size_t i = 0; i < NUM_DISPLAY_ATTRIBUTES - 1; i++) {
switch (attributes[i]) {
case HWC_DISPLAY_VSYNC_PERIOD:
values[i] = (int32_t) (1000000000.0 / 57);
ALOGD("My vsync period is %d for %d",values[i],disp);
break;
case HWC_DISPLAY_WIDTH:
values[i] = info.xres;
ALOGD("My width is %d for %d",values[i],disp);
break;
case HWC_DISPLAY_HEIGHT:
values[i] = info.yres;
ALOGD("My height is %d for %d",values[i],disp);
break;
case HWC_DISPLAY_DPI_X:
values[i] = (int32_t) ((info.xres * 25.4f) / info.width);
values[i]*=1000;
ALOGD("My hdpi is %d for %d",values[i],disp);
break;
case HWC_DISPLAY_DPI_Y:
values[i] = (int32_t) ((info.yres * 25.4f) / info.height);
values[i]*=1000;
ALOGD("My vdpi is %d for %d",values[i],disp);
break;
default:
ALOGE("Unknown display attribute %d",
attributes[i]);
return -EINVAL;
}
}
return 0;
}
static int hwc_device_open(const struct hw_module_t* module, const char* name, static int hwc_device_open(const struct hw_module_t* module, const char* name,
struct hw_device_t** device) struct hw_device_t** device)
{ {
@ -1076,7 +1161,7 @@ static int hwc_device_open(const struct hw_module_t* module, const char* name,
/* initialize the procs */ /* initialize the procs */
dev->device.common.tag = HARDWARE_DEVICE_TAG; dev->device.common.tag = HARDWARE_DEVICE_TAG;
dev->device.common.version = HWC_DEVICE_API_VERSION_1_0; dev->device.common.version = HWC_DEVICE_API_VERSION_1_1;
dev->device.common.module = const_cast<hw_module_t*>(module); dev->device.common.module = const_cast<hw_module_t*>(module);
dev->device.common.close = hwc_device_close; dev->device.common.close = hwc_device_close;
dev->device.prepare = hwc_prepare; dev->device.prepare = hwc_prepare;
@ -1085,6 +1170,8 @@ static int hwc_device_open(const struct hw_module_t* module, const char* name,
dev->device.blank = hwc_blank; dev->device.blank = hwc_blank;
dev->device.query = hwc_query; dev->device.query = hwc_query;
dev->device.registerProcs = hwc_registerProcs; dev->device.registerProcs = hwc_registerProcs;
dev->device.getDisplayConfigs = hwc_getDisplayConfigs;
dev->device.getDisplayAttributes = hwc_getDisplayAttributes;
*device = &dev->device.common; *device = &dev->device.common;
//initializing //initializing

Loading…
Cancel
Save