Merge "Revert "virtio-gpu-asg transport""
diff --git a/system/hwc2/EmuHWC2.cpp b/system/hwc2/EmuHWC2.cpp
index bac4eac..e77e27d 100644
--- a/system/hwc2/EmuHWC2.cpp
+++ b/system/hwc2/EmuHWC2.cpp
@@ -391,7 +391,7 @@
return Error::None;
}
-const native_handle_t* EmuHWC2::allocateDisplayColorBuffer() {
+const native_handle_t* EmuHWC2::allocateDisplayColorBuffer(int width, int height) {
const uint32_t layerCount = 1;
const uint64_t graphicBufferId = 0; // not used
@@ -399,7 +399,7 @@
uint32_t stride;
if (GraphicBufferAllocator::get().allocate(
- mDisplayWidth, mDisplayHeight,
+ width, height,
PIXEL_FORMAT_RGBA_8888,
layerCount,
(GraphicBuffer::USAGE_HW_COMPOSER | GraphicBuffer::USAGE_HW_RENDER),
@@ -437,7 +437,7 @@
std::atomic<hwc2_display_t> EmuHWC2::Display::sNextId(0);
-EmuHWC2::Display::Display(EmuHWC2& device, DisplayType type)
+EmuHWC2::Display::Display(EmuHWC2& device, DisplayType type, int width, int height)
: mDevice(device),
mId(sNextId++),
mHostDisplayId(0),
@@ -458,7 +458,7 @@
mSetColorTransform(false),
mStateMutex() {
mVsyncThread.run("", ANDROID_PRIORITY_URGENT_DISPLAY);
- mTargetCb = device.allocateDisplayColorBuffer();
+ mTargetCb = device.allocateDisplayColorBuffer(width, height);
}
EmuHWC2::Display::~Display() {
@@ -1325,7 +1325,7 @@
}
HWC2::Error EmuHWC2::Display::populateSecondaryConfigs(uint32_t width, uint32_t height,
- uint32_t dpi) {
+ uint32_t dpi, uint32_t idx) {
ALOGVV("%s DisplayId %u, width %u, height %u, dpi %u",
__FUNCTION__, (uint32_t)mId, width, height, dpi);
std::unique_lock<std::mutex> lock(mStateMutex);
@@ -1338,24 +1338,29 @@
newConfig->setAttribute(Attribute::DpiX, dpi*1000);
newConfig->setAttribute(Attribute::DpiY, dpi*1000);
- newConfig->setId(static_cast<hwc2_config_t>(mConfigs.size()));
+ int configId = mConfigs.size();
+ newConfig->setId(static_cast<hwc2_config_t>(configId));
ALOGV("Found new secondary config %d: %s", (uint32_t)newConfig->getId(),
newConfig->toString().c_str());
mConfigs.emplace_back(std::move(newConfig));
- // we need to reset these values after populatePrimaryConfigs()
- mActiveConfig = mConfigs[0];
+ mActiveConfig = mConfigs[configId];
mActiveColorMode = HAL_COLOR_MODE_NATIVE;
mColorModes.emplace((android_color_mode_t)HAL_COLOR_MODE_NATIVE);
- uint32_t displayId = 0;
+ uint32_t displayId = hostDisplayIdStart + idx;
DEFINE_AND_VALIDATE_HOST_CONNECTION
hostCon->lock();
+ rcEnc->rcDestroyDisplay(rcEnc, displayId);
rcEnc->rcCreateDisplay(rcEnc, &displayId);
rcEnc->rcSetDisplayPose(rcEnc, displayId, -1, -1, width, height);
hostCon->unlock();
+ if (displayId != hostDisplayIdStart + idx) {
+ ALOGE("Something wrong with host displayId allocation, want %d "
+ "allocated %d", hostDisplayIdStart + idx, displayId);
+ }
mHostDisplayId = displayId;
ALOGVV("%s: mHostDisplayId=%d", __FUNCTION__, mHostDisplayId);
@@ -1623,7 +1628,8 @@
int EmuHWC2::populatePrimary() {
int ret = 0;
- auto display = std::make_shared<Display>(*this, HWC2::DisplayType::Physical);
+ auto display = std::make_shared<Display>(*this, HWC2::DisplayType::Physical,
+ mDisplayWidth, mDisplayHeight);
ret = display->populatePrimaryConfigs(mDisplayWidth, mDisplayHeight,
mDisplayDpiX, mDisplayDpiY);
if (ret != 0) {
@@ -1678,6 +1684,7 @@
ALOGE("%s: invalid value for system property: %s", __FUNCTION__, EXTERANL_DISPLAY_PROP);
return -1;
}
+ uint32_t idx = 0;
while (!values.empty()) {
// uint64_t physicalId = values[0];
uint32_t width = values[1];
@@ -1687,8 +1694,8 @@
values.erase(values.begin(), values.begin() + 5);
Error ret = Error::None;
- auto display = std::make_shared<Display>(*this, HWC2::DisplayType::Physical);
- ret = display->populateSecondaryConfigs(width, height, dpi);
+ auto display = std::make_shared<Display>(*this, HWC2::DisplayType::Physical, width, height);
+ ret = display->populateSecondaryConfigs(width, height, dpi, idx++);
if (ret != Error::None) {
return -2;
}
diff --git a/system/hwc2/EmuHWC2.h b/system/hwc2/EmuHWC2.h
index 1ff3394..4ab09e1 100644
--- a/system/hwc2/EmuHWC2.h
+++ b/system/hwc2/EmuHWC2.h
@@ -205,7 +205,7 @@
class Display {
public:
- Display(EmuHWC2& device, HWC2::DisplayType type);
+ Display(EmuHWC2& device, HWC2::DisplayType type, int width, int height);
~Display();
hwc2_display_t getId() const {return mId;}
@@ -260,7 +260,7 @@
// Read configs from PRIMARY Display
int populatePrimaryConfigs(int width, int height, int dpiX, int dpiY);
HWC2::Error populateSecondaryConfigs(uint32_t width, uint32_t height,
- uint32_t dpi);
+ uint32_t dpi, uint32_t idx);
private:
void post(HostConnection *hostCon, ExtendedRCEncoderContext *rcEnc,
@@ -346,6 +346,7 @@
EmuHWC2& mDevice;
// Display ID generator.
static std::atomic<hwc2_display_t> sNextId;
+ static const uint32_t hostDisplayIdStart = 6;
const hwc2_display_t mId;
// emulator side displayId
uint32_t mHostDisplayId;
@@ -466,7 +467,7 @@
hwc2_layer_t layerId);
HWC2::Error initDisplayParameters();
- const native_handle_t* allocateDisplayColorBuffer();
+ const native_handle_t* allocateDisplayColorBuffer(int width, int height);
void freeDisplayColorBuffer(const native_handle_t* h);
std::unordered_set<HWC2::Capability> mCapabilities;