diff options
| author | 2024-02-21 15:43:36 +0000 | |
|---|---|---|
| committer | 2024-02-21 15:43:36 +0000 | |
| commit | 37cceb7d4e91d742b681d7c66a3da5e03a97bf73 (patch) | |
| tree | d1cb20e8858a024a3b39b4708e7c599c358620b3 | |
| parent | 89d11a36b2236adfd507327e6d22a925ea5a1ef9 (diff) | |
| parent | f3369eda0af91df158d66f1e4d906a0f0b1496e7 (diff) | |
Merge "vulkan_renderengine: Check for support first" into main
| -rw-r--r-- | libs/renderengine/include/renderengine/RenderEngine.h | 2 | ||||
| -rw-r--r-- | libs/renderengine/skia/SkiaVkRenderEngine.cpp | 27 | ||||
| -rw-r--r-- | libs/renderengine/skia/SkiaVkRenderEngine.h | 2 | ||||
| -rw-r--r-- | libs/renderengine/tests/RenderEngineTest.cpp | 8 | ||||
| -rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 7 |
5 files changed, 26 insertions, 20 deletions
diff --git a/libs/renderengine/include/renderengine/RenderEngine.h b/libs/renderengine/include/renderengine/RenderEngine.h index 7047358e62..de05268a67 100644 --- a/libs/renderengine/include/renderengine/RenderEngine.h +++ b/libs/renderengine/include/renderengine/RenderEngine.h @@ -104,6 +104,8 @@ public: static std::unique_ptr<RenderEngine> create(const RenderEngineCreationArgs& args); + static bool canSupport(GraphicsApi); + virtual ~RenderEngine() = 0; // ----- BEGIN DEPRECATED INTERFACE ----- diff --git a/libs/renderengine/skia/SkiaVkRenderEngine.cpp b/libs/renderengine/skia/SkiaVkRenderEngine.cpp index bff12ce7ff..b43ab6c9df 100644 --- a/libs/renderengine/skia/SkiaVkRenderEngine.cpp +++ b/libs/renderengine/skia/SkiaVkRenderEngine.cpp @@ -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)); diff --git a/libs/renderengine/skia/SkiaVkRenderEngine.h b/libs/renderengine/skia/SkiaVkRenderEngine.h index 2e0cf45220..52bc500a5a 100644 --- a/libs/renderengine/skia/SkiaVkRenderEngine.h +++ b/libs/renderengine/skia/SkiaVkRenderEngine.h @@ -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; diff --git a/libs/renderengine/tests/RenderEngineTest.cpp b/libs/renderengine/tests/RenderEngineTest.cpp index 4c18704f52..7b8eb8470f 100644 --- a/libs/renderengine/tests/RenderEngineTest.cpp +++ b/libs/renderengine/tests/RenderEngineTest.cpp @@ -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>> { diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 5bb550834e..edba50bde6 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -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); } } |