Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a6cc4226 authored by Daniel Nicoara's avatar Daniel Nicoara
Browse files

VR: Allow creating virtual displays

Bug: b/35996499
Test: None
Change-Id: Id8fd15791ba9478399a736ee6d5b2f6a847334a6
parent bb68dcc8
Loading
Loading
Loading
Loading
+11 −5
Original line number Diff line number Diff line
@@ -238,12 +238,14 @@ void VrHwc::enableCallback(bool enable) {
  }
}

uint32_t VrHwc::getMaxVirtualDisplayCount() { return 0; }
uint32_t VrHwc::getMaxVirtualDisplayCount() { return 1; }

Error VrHwc::createVirtualDisplay(uint32_t width, uint32_t height,
                                  PixelFormat* format, Display* outDisplay) {
  *format = PixelFormat::RGBA_8888;
  *outDisplay = 0;
  *outDisplay = display_count_;
  displays_[display_count_].reset(new HwcDisplay());
  display_count_++;
  return Error::NONE;
}

@@ -354,7 +356,11 @@ Error VrHwc::getDisplayType(Display display,
    return Error::BAD_DISPLAY;
  }

  if (display == kDefaultDisplayId)
    *outType = IComposerClient::DisplayType::PHYSICAL;
  else
    *outType = IComposerClient::DisplayType::VIRTUAL;

  return Error::NONE;
}

@@ -441,8 +447,8 @@ Error VrHwc::setOutputBuffer(Display display, buffer_handle_t buffer,
  if (!display_ptr)
    return Error::BAD_DISPLAY;

  ALOGE("Virtual display support not implemented");
  return Error::UNSUPPORTED;
  // TODO(dnicoara): Is it necessary to do anything here?
  return Error::NONE;
}

Error VrHwc::validateDisplay(
+1 −0
Original line number Diff line number Diff line
@@ -248,6 +248,7 @@ class VrHwc : public IComposer, public ComposerBase, public ComposerView {
  std::mutex mutex_;

  std::unordered_map<Display, std::unique_ptr<HwcDisplay>> displays_;
  Display display_count_ = 2;

  Observer* observer_ = nullptr;

+8 −0
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@
#include <android/input.h>
#include <binder/IServiceManager.h>
#include <hardware/hwcomposer2.h>
#include <inttypes.h>
#include <log/log.h>

#include "controller_mesh.h"
@@ -180,6 +181,13 @@ void ShellView::dumpInternal(String8& result) {
  result.appendFormat("initialized = %s\n", initialized_ ? "true" : "false");
  result.appendFormat("is_visible = %s\n", is_visible_ ? "true" : "false");
  result.appendFormat("debug_mode = %s\n\n", debug_mode_ ? "true" : "false");

  result.append("[displays]\n");
  result.appendFormat("count = %zu\n", displays_.size());
  for (size_t i = 0; i < displays_.size(); ++i)
    result.appendFormat(" display_id = %" PRId32 "\n", displays_[i]->id());

  result.append("\n");
}

void ShellView::OnDrawFrame() {