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

Commit 87670ffe authored by Hendrik Wagenaar's avatar Hendrik Wagenaar
Browse files

Allow surfaceflinger to run vrflinger

* Allows surface flinger to switch in and out of vr mode

Bug: None
Test: Manually ran various vr test programs.
Change-Id: I15fbba0eb67cbcffeef41be31429550448a1db9c
parent 5305b763
Loading
Loading
Loading
Loading
+8 −5
Original line number Diff line number Diff line
@@ -49,14 +49,11 @@ LOCAL_C_INCLUDES := \
LOCAL_CFLAGS := -DLOG_TAG=\"SurfaceFlinger\"
LOCAL_CFLAGS += -DGL_GLEXT_PROTOTYPES -DEGL_EGLEXT_PROTOTYPES

ifeq ($(TARGET_IN_VR_MODE),true)
    LOCAL_CFLAGS += -DIN_VR_MODE
endif

ifeq ($(TARGET_USES_HWC2),true)
    LOCAL_CFLAGS += -DUSE_HWC2
    LOCAL_SRC_FILES += \
        SurfaceFlinger.cpp \
        VrStateCallbacks.cpp \
        DisplayHardware/HWComposer.cpp
    ifeq ($(TARGET_USES_HWC2ON1ADAPTER), true)
        LOCAL_CFLAGS += -DBYPASS_IHWC
@@ -134,7 +131,13 @@ endif

LOCAL_CFLAGS += -fvisibility=hidden -Werror=format

LOCAL_STATIC_LIBRARIES := libhwcomposer-command-buffer libtrace_proto libvkjson
LOCAL_STATIC_LIBRARIES := \
    libhwcomposer-command-buffer \
    libtrace_proto \
    libvkjson \
    libvr_manager \
    libvrflinger

LOCAL_SHARED_LIBRARIES := \
    android.dvr.composer@1.0 \
    android.hardware.graphics.allocator@2.0 \
+5 −8
Original line number Diff line number Diff line
@@ -124,13 +124,11 @@ void Composer::CommandWriter::setLayerInfo(uint32_t type, uint32_t appId)
    endCommand();
}

Composer::Composer() : mWriter(kWriterInitialSize)
Composer::Composer(bool useVrComposer)
    : mWriter(kWriterInitialSize),
      mIsUsingVrComposer(useVrComposer)
{
#if defined(IN_VR_MODE)
    mIsInVrMode = true;
#endif

    if (mIsInVrMode) {
    if (mIsUsingVrComposer) {
        mComposer = IComposer::getService("vr_hwcomposer");
    } else {
        mComposer = IComposer::getService("hwcomposer");
@@ -622,8 +620,7 @@ Error Composer::setLayerZOrder(Display display, Layer layer, uint32_t z)
Error Composer::setLayerInfo(Display display, Layer layer, uint32_t type,
                             uint32_t appId)
{
    if (mIsInVrMode)
    {
    if (mIsUsingVrComposer) {
        mWriter.selectDisplay(display);
        mWriter.selectLayer(layer);
        mWriter.setLayerInfo(type, appId);
+5 −3
Original line number Diff line number Diff line
@@ -26,7 +26,6 @@
#include <android/hardware/graphics/composer/2.1/IComposer.h>
#include <utils/StrongPointer.h>
#include <IComposerCommandBuffer.h>
#include <MessageQueue.h>

namespace android {

@@ -128,7 +127,7 @@ private:
// Composer is a wrapper to IComposer, a proxy to server-side composer.
class Composer {
public:
    Composer();
    Composer(bool useVrComposer);

    std::vector<IComposer::Capability> getCapabilities();
    std::string dumpDebugInfo();
@@ -136,6 +135,7 @@ public:
    void registerCallback(const sp<IComposerCallback>& callback);

    uint32_t getMaxVirtualDisplayCount();
    bool isUsingVrComposer() const { return mIsUsingVrComposer; }
    Error createVirtualDisplay(uint32_t width, uint32_t height,
            PixelFormat* format, Display* outDisplay);
    Error destroyVirtualDisplay(Display display);
@@ -248,7 +248,9 @@ private:
    CommandWriter mWriter;
    CommandReader mReader;

    bool mIsInVrMode = false;
    // When true, the we attach to the vr_hwcomposer service instead of the
    // hwcomposer. This allows us to redirect surfaces to 3d surfaces in vr.
    const bool mIsUsingVrComposer;
};

} // namespace Hwc2
+2 −2
Original line number Diff line number Diff line
@@ -135,8 +135,8 @@ Device::Device(hwc2_device_t* device)
    mSetLayerVisibleRegion(nullptr),
    mSetLayerZOrder(nullptr),
#else
Device::Device()
  : mComposer(std::make_unique<Hwc2::Composer>()),
Device::Device(bool useVrComposer)
  : mComposer(std::make_unique<Hwc2::Composer>(useVrComposer)),
#endif // BYPASS_IHWC
    mCapabilities(),
    mDisplays(),
+10 −1
Original line number Diff line number Diff line
@@ -67,7 +67,10 @@ public:
#ifdef BYPASS_IHWC
    explicit Device(hwc2_device_t* device);
#else
    Device();
    // useVrComposer is passed to the composer HAL. When true, the composer HAL
    // will use the vr composer service, otherwise it uses the real hardware
    // composer.
    Device(bool useVrComposer);
#endif
    ~Device();

@@ -106,6 +109,12 @@ public:

    bool hasCapability(HWC2::Capability capability) const;

#ifdef BYPASS_IHWC
    android::Hwc2::Composer* getComposer() { return nullptr; }
#else
    android::Hwc2::Composer* getComposer() { return mComposer.get(); }
#endif

private:
    // Initialization methods

Loading