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

Commit 37cceb7d authored by Leon Scroggins's avatar Leon Scroggins Committed by Android (Google) Code Review
Browse files

Merge "vulkan_renderengine: Check for support first" into main

parents 89d11a36 f3369eda
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -104,6 +104,8 @@ public:

    static std::unique_ptr<RenderEngine> create(const RenderEngineCreationArgs& args);

    static bool canSupport(GraphicsApi);

    virtual ~RenderEngine() = 0;

    // ----- BEGIN DEPRECATED INTERFACE -----
+19 −8
Original line number Diff line number Diff line
@@ -287,6 +287,7 @@ static GrVkGetProc sGetProc = [](const char* proc_name, VkInstance instance, VkD
    CHECK_NONNULL(vk##F)

VulkanInterface initVulkanInterface(bool protectedContent = false) {
    const nsecs_t timeBefore = systemTime();
    VulkanInterface interface;

    VK_GET_PROC(EnumerateInstanceVersion);
@@ -598,7 +599,9 @@ VulkanInterface initVulkanInterface(bool protectedContent = false) {
    interface.isProtected = protectedContent;
    // funcs already initialized

    ALOGD("%s: Success init Vulkan interface", __func__);
    const nsecs_t timeAfter = systemTime();
    const float initTimeMs = static_cast<float>(timeAfter - timeBefore) / 1.0E6;
    ALOGD("%s: Success init Vulkan interface in %f ms", __func__, initTimeMs);
    return interface;
}

@@ -654,17 +657,25 @@ static void sSetupVulkanInterface() {
    }
}

bool RenderEngine::canSupport(GraphicsApi graphicsApi) {
    switch (graphicsApi) {
        case GraphicsApi::GL:
            return true;
        case GraphicsApi::VK: {
            if (!sVulkanInterface.initialized) {
                sVulkanInterface = initVulkanInterface(false /* no protected content */);
                ALOGD("%s: initialized == %s.", __func__,
                      sVulkanInterface.initialized ? "true" : "false");
            }
            return sVulkanInterface.initialized;
        }
    }
}

namespace skia {

using base::StringAppendF;

bool SkiaVkRenderEngine::canSupportSkiaVkRenderEngine() {
    VulkanInterface temp = initVulkanInterface(false /* no protected content */);
    ALOGD("SkiaVkRenderEngine::canSupportSkiaVkRenderEngine(): initialized == %s.",
          temp.initialized ? "true" : "false");
    return temp.initialized;
}

std::unique_ptr<SkiaVkRenderEngine> SkiaVkRenderEngine::create(
        const RenderEngineCreationArgs& args) {
    std::unique_ptr<SkiaVkRenderEngine> engine(new SkiaVkRenderEngine(args));
+0 −2
Original line number Diff line number Diff line
@@ -27,8 +27,6 @@ namespace skia {

class SkiaVkRenderEngine : public SkiaRenderEngine {
public:
    // Returns false if Vulkan implementation can't support SkiaVkRenderEngine.
    static bool canSupportSkiaVkRenderEngine();
    static std::unique_ptr<SkiaVkRenderEngine> create(const RenderEngineCreationArgs& args);
    ~SkiaVkRenderEngine() override;

+1 −7
Original line number Diff line number Diff line
@@ -107,7 +107,7 @@ public:

    virtual std::string name() = 0;
    virtual renderengine::RenderEngine::GraphicsApi graphicsApi() = 0;
    virtual bool apiSupported() = 0;
    bool apiSupported() { return renderengine::RenderEngine::canSupport(graphicsApi()); }
    std::unique_ptr<renderengine::RenderEngine> createRenderEngine() {
        renderengine::RenderEngineCreationArgs reCreationArgs =
                renderengine::RenderEngineCreationArgs::Builder()
@@ -131,10 +131,6 @@ public:
    renderengine::RenderEngine::GraphicsApi graphicsApi() override {
        return renderengine::RenderEngine::GraphicsApi::VK;
    }

    bool apiSupported() override {
        return skia::SkiaVkRenderEngine::canSupportSkiaVkRenderEngine();
    }
};

class SkiaGLESRenderEngineFactory : public RenderEngineFactory {
@@ -144,8 +140,6 @@ public:
    renderengine::RenderEngine::GraphicsApi graphicsApi() {
        return renderengine::RenderEngine::GraphicsApi::GL;
    }

    bool apiSupported() override { return true; }
};

class RenderEngineTest : public ::testing::TestWithParam<std::shared_ptr<RenderEngineFactory>> {
+4 −3
Original line number Diff line number Diff line
@@ -816,9 +816,10 @@ void chooseRenderEngineType(renderengine::RenderEngineCreationArgs::Builder& bui
        builder.setThreaded(renderengine::RenderEngine::Threaded::YES)
                .setGraphicsApi(renderengine::RenderEngine::GraphicsApi::VK);
    } else {
        builder.setGraphicsApi(FlagManager::getInstance().vulkan_renderengine()
                                       ? renderengine::RenderEngine::GraphicsApi::VK
                                       : renderengine::RenderEngine::GraphicsApi::GL);
        const auto kVulkan = renderengine::RenderEngine::GraphicsApi::VK;
        const bool useVulkan = FlagManager::getInstance().vulkan_renderengine() &&
                renderengine::RenderEngine::canSupport(kVulkan);
        builder.setGraphicsApi(useVulkan ? kVulkan : renderengine::RenderEngine::GraphicsApi::GL);
    }
}