diff options
-rw-r--r-- | libs/renderengine/RenderEngine.cpp | 4 | ||||
-rw-r--r-- | libs/renderengine/gl/GLESRenderEngine.cpp | 22 | ||||
-rw-r--r-- | libs/renderengine/gl/GLESRenderEngine.h | 10 | ||||
-rw-r--r-- | libs/renderengine/include/renderengine/RenderEngine.h | 37 | ||||
-rw-r--r-- | libs/renderengine/include/renderengine/mock/RenderEngine.h | 1 | ||||
-rw-r--r-- | libs/renderengine/tests/RenderEngineThreadedTest.cpp | 20 | ||||
-rw-r--r-- | libs/renderengine/threaded/RenderEngineThreaded.cpp | 76 | ||||
-rw-r--r-- | libs/renderengine/threaded/RenderEngineThreaded.h | 7 |
8 files changed, 28 insertions, 149 deletions
diff --git a/libs/renderengine/RenderEngine.cpp b/libs/renderengine/RenderEngine.cpp index c3fbb60af2..eb0074bc40 100644 --- a/libs/renderengine/RenderEngine.cpp +++ b/libs/renderengine/RenderEngine.cpp @@ -62,10 +62,6 @@ bool RenderEngine::useNativeFenceSync() const { return SyncFeatures::getInstance().useNativeFenceSync(); } -bool RenderEngine::useWaitSync() const { - return SyncFeatures::getInstance().useWaitSync(); -} - } // namespace impl } // namespace renderengine } // namespace android diff --git a/libs/renderengine/gl/GLESRenderEngine.cpp b/libs/renderengine/gl/GLESRenderEngine.cpp index 3dcfebe483..3090d193d1 100644 --- a/libs/renderengine/gl/GLESRenderEngine.cpp +++ b/libs/renderengine/gl/GLESRenderEngine.cpp @@ -114,6 +114,28 @@ namespace android { namespace renderengine { namespace gl { +class BindNativeBufferAsFramebuffer { +public: + BindNativeBufferAsFramebuffer(GLESRenderEngine& engine, ANativeWindowBuffer* buffer, + const bool useFramebufferCache) + : mEngine(engine), mFramebuffer(mEngine.getFramebufferForDrawing()), mStatus(NO_ERROR) { + mStatus = mFramebuffer->setNativeWindowBuffer(buffer, mEngine.isProtected(), + useFramebufferCache) + ? mEngine.bindFrameBuffer(mFramebuffer) + : NO_MEMORY; + } + ~BindNativeBufferAsFramebuffer() { + mFramebuffer->setNativeWindowBuffer(nullptr, false, /*arbitrary*/ true); + mEngine.unbindFrameBuffer(mFramebuffer); + } + status_t getStatus() const { return mStatus; } + +private: + GLESRenderEngine& mEngine; + Framebuffer* mFramebuffer; + status_t mStatus; +}; + using base::StringAppendF; using ui::Dataspace; diff --git a/libs/renderengine/gl/GLESRenderEngine.h b/libs/renderengine/gl/GLESRenderEngine.h index 2c6eae2fff..2a98bd88a6 100644 --- a/libs/renderengine/gl/GLESRenderEngine.h +++ b/libs/renderengine/gl/GLESRenderEngine.h @@ -60,13 +60,10 @@ public: void primeCache() const override; void genTextures(size_t count, uint32_t* names) override; void deleteTextures(size_t count, uint32_t const* names) override; - void bindExternalTextureImage(uint32_t texName, const Image& image) override; status_t bindExternalTextureBuffer(uint32_t texName, const sp<GraphicBuffer>& buffer, const sp<Fence>& fence) EXCLUDES(mRenderingMutex); void cacheExternalTextureBuffer(const sp<GraphicBuffer>& buffer) EXCLUDES(mRenderingMutex); void unbindExternalTextureBuffer(uint64_t bufferId) EXCLUDES(mRenderingMutex); - status_t bindFrameBuffer(Framebuffer* framebuffer) override; - void unbindFrameBuffer(Framebuffer* framebuffer) override; bool isProtected() const override { return mInProtectedContext; } bool supportsProtectedContent() const override; @@ -102,13 +99,15 @@ public: std::shared_ptr<ImageManager::Barrier> unbindExternalTextureBufferForTesting(uint64_t bufferId); protected: - Framebuffer* getFramebufferForDrawing() override; + Framebuffer* getFramebufferForDrawing(); void dump(std::string& result) override EXCLUDES(mRenderingMutex) EXCLUDES(mFramebufferImageCacheMutex); size_t getMaxTextureSize() const override; size_t getMaxViewportDims() const override; private: + friend class BindNativeBufferAsFramebuffer; + enum GlesVersion { GLES_VERSION_1_0 = 0x10000, GLES_VERSION_1_1 = 0x10001, @@ -133,6 +132,9 @@ private: status_t cacheExternalTextureBufferInternal(const sp<GraphicBuffer>& buffer) EXCLUDES(mRenderingMutex); void unbindExternalTextureBufferInternal(uint64_t bufferId) EXCLUDES(mRenderingMutex); + status_t bindFrameBuffer(Framebuffer* framebuffer); + void unbindFrameBuffer(Framebuffer* framebuffer); + void bindExternalTextureImage(uint32_t texName, const Image& image); // A data space is considered HDR data space if it has BT2020 color space // with PQ or HLG transfer function. diff --git a/libs/renderengine/include/renderengine/RenderEngine.h b/libs/renderengine/include/renderengine/RenderEngine.h index 09a0f65b43..6db2af8612 100644 --- a/libs/renderengine/include/renderengine/RenderEngine.h +++ b/libs/renderengine/include/renderengine/RenderEngine.h @@ -44,7 +44,6 @@ class Region; namespace renderengine { -class BindNativeBufferAsFramebuffer; class Image; class Mesh; class Texture; @@ -90,10 +89,8 @@ public: virtual void dump(std::string& result) = 0; virtual bool useNativeFenceSync() const = 0; - virtual bool useWaitSync() const = 0; virtual void genTextures(size_t count, uint32_t* names) = 0; virtual void deleteTextures(size_t count, uint32_t const* names) = 0; - virtual void bindExternalTextureImage(uint32_t texName, const Image& image) = 0; // Legacy public method used by devices that don't support native fence // synchronization in their GPU driver, as this method provides implicit // synchronization for latching buffers. @@ -116,10 +113,6 @@ public: // a buffer should never occur before binding the buffer if the caller // called {bind, cache}ExternalTextureBuffer before calling unbind. virtual void unbindExternalTextureBuffer(uint64_t bufferId) = 0; - // When binding a native buffer, it must be done before setViewportAndProjection - // Returns NO_ERROR when binds successfully, NO_MEMORY when there's no memory for allocation. - virtual status_t bindFrameBuffer(Framebuffer* framebuffer) = 0; - virtual void unbindFrameBuffer(Framebuffer* framebuffer) = 0; enum class CleanupMode { CLEAN_OUTPUT_RESOURCES, @@ -187,13 +180,6 @@ public: base::unique_fd&& bufferFence, base::unique_fd* drawFence) = 0; protected: - // Gets a framebuffer to render to. This framebuffer may or may not be - // cached depending on the implementation. - // - // Note that this method does not transfer ownership, so the caller most not - // live longer than RenderEngine. - virtual Framebuffer* getFramebufferForDrawing() = 0; - friend class BindNativeBufferAsFramebuffer; friend class threaded::RenderEngineThreaded; }; @@ -280,28 +266,6 @@ private: RenderEngine::RenderEngineType renderEngineType = RenderEngine::RenderEngineType::GLES; }; -class BindNativeBufferAsFramebuffer { -public: - BindNativeBufferAsFramebuffer(RenderEngine& engine, ANativeWindowBuffer* buffer, - const bool useFramebufferCache) - : mEngine(engine), mFramebuffer(mEngine.getFramebufferForDrawing()), mStatus(NO_ERROR) { - mStatus = mFramebuffer->setNativeWindowBuffer(buffer, mEngine.isProtected(), - useFramebufferCache) - ? mEngine.bindFrameBuffer(mFramebuffer) - : NO_MEMORY; - } - ~BindNativeBufferAsFramebuffer() { - mFramebuffer->setNativeWindowBuffer(nullptr, false, /*arbitrary*/ true); - mEngine.unbindFrameBuffer(mFramebuffer); - } - status_t getStatus() const { return mStatus; } - -private: - RenderEngine& mEngine; - Framebuffer* mFramebuffer; - status_t mStatus; -}; - namespace impl { // impl::RenderEngine contains common implementation that is graphics back-end agnostic. @@ -310,7 +274,6 @@ public: virtual ~RenderEngine() = 0; bool useNativeFenceSync() const override; - bool useWaitSync() const override; protected: RenderEngine(const RenderEngineCreationArgs& args); diff --git a/libs/renderengine/include/renderengine/mock/RenderEngine.h b/libs/renderengine/include/renderengine/mock/RenderEngine.h index e03dd58c3a..3fd125ec74 100644 --- a/libs/renderengine/include/renderengine/mock/RenderEngine.h +++ b/libs/renderengine/include/renderengine/mock/RenderEngine.h @@ -43,7 +43,6 @@ public: MOCK_CONST_METHOD0(isCurrent, bool()); MOCK_METHOD2(genTextures, void(size_t, uint32_t*)); MOCK_METHOD2(deleteTextures, void(size_t, uint32_t const*)); - MOCK_METHOD2(bindExternalTextureImage, void(uint32_t, const renderengine::Image&)); MOCK_METHOD1(cacheExternalTextureBuffer, void(const sp<GraphicBuffer>&)); MOCK_METHOD3(bindExternalTextureBuffer, status_t(uint32_t, const sp<GraphicBuffer>&, const sp<Fence>&)); diff --git a/libs/renderengine/tests/RenderEngineThreadedTest.cpp b/libs/renderengine/tests/RenderEngineThreadedTest.cpp index 97c74421e6..78fec29036 100644 --- a/libs/renderengine/tests/RenderEngineThreadedTest.cpp +++ b/libs/renderengine/tests/RenderEngineThreadedTest.cpp @@ -93,26 +93,6 @@ TEST_F(RenderEngineThreadedTest, unbindExternalTextureBuffer) { mThreadedRE->unbindExternalTextureBuffer(0x0); } -TEST_F(RenderEngineThreadedTest, bindFrameBuffer_returnsBadValue) { - std::unique_ptr<renderengine::Framebuffer> framebuffer; - EXPECT_CALL(*mRenderEngine, bindFrameBuffer(framebuffer.get())).WillOnce(Return(BAD_VALUE)); - status_t result = mThreadedRE->bindFrameBuffer(framebuffer.get()); - ASSERT_EQ(BAD_VALUE, result); -} - -TEST_F(RenderEngineThreadedTest, bindFrameBuffer_returnsNoError) { - std::unique_ptr<renderengine::Framebuffer> framebuffer; - EXPECT_CALL(*mRenderEngine, bindFrameBuffer(framebuffer.get())).WillOnce(Return(NO_ERROR)); - status_t result = mThreadedRE->bindFrameBuffer(framebuffer.get()); - ASSERT_EQ(NO_ERROR, result); -} - -TEST_F(RenderEngineThreadedTest, unbindFrameBuffer) { - std::unique_ptr<renderengine::Framebuffer> framebuffer; - EXPECT_CALL(*mRenderEngine, unbindFrameBuffer(framebuffer.get())); - mThreadedRE->unbindFrameBuffer(framebuffer.get()); -} - TEST_F(RenderEngineThreadedTest, getMaxTextureSize_returns20) { size_t size = 20; EXPECT_CALL(*mRenderEngine, getMaxTextureSize()).WillOnce(Return(size)); diff --git a/libs/renderengine/threaded/RenderEngineThreaded.cpp b/libs/renderengine/threaded/RenderEngineThreaded.cpp index d4184fdf72..dc47070460 100644 --- a/libs/renderengine/threaded/RenderEngineThreaded.cpp +++ b/libs/renderengine/threaded/RenderEngineThreaded.cpp @@ -131,21 +131,6 @@ bool RenderEngineThreaded::useNativeFenceSync() const { return resultFuture.get(); } -bool RenderEngineThreaded::useWaitSync() const { - std::promise<bool> resultPromise; - std::future<bool> resultFuture = resultPromise.get_future(); - { - std::lock_guard lock(mThreadMutex); - mFunctionCalls.push([&resultPromise](renderengine::RenderEngine& /*instance*/) { - ATRACE_NAME("REThreaded::useWaitSync"); - bool returnValue = SyncFeatures::getInstance().useWaitSync(); - resultPromise.set_value(returnValue); - }); - } - mCondition.notify_one(); - return resultFuture.get(); -} - void RenderEngineThreaded::genTextures(size_t count, uint32_t* names) { std::promise<void> resultPromise; std::future<void> resultFuture = resultPromise.get_future(); @@ -176,22 +161,6 @@ void RenderEngineThreaded::deleteTextures(size_t count, uint32_t const* names) { resultFuture.wait(); } -void RenderEngineThreaded::bindExternalTextureImage(uint32_t texName, const Image& image) { - std::promise<void> resultPromise; - std::future<void> resultFuture = resultPromise.get_future(); - { - std::lock_guard lock(mThreadMutex); - mFunctionCalls.push( - [&resultPromise, texName, &image](renderengine::RenderEngine& instance) { - ATRACE_NAME("REThreaded::bindExternalTextureImage"); - instance.bindExternalTextureImage(texName, image); - resultPromise.set_value(); - }); - } - mCondition.notify_one(); - resultFuture.wait(); -} - status_t RenderEngineThreaded::bindExternalTextureBuffer(uint32_t texName, const sp<GraphicBuffer>& buffer, const sp<Fence>& fence) { @@ -240,36 +209,6 @@ void RenderEngineThreaded::unbindExternalTextureBuffer(uint64_t bufferId) { resultFuture.wait(); } -status_t RenderEngineThreaded::bindFrameBuffer(Framebuffer* framebuffer) { - std::promise<status_t> resultPromise; - std::future<status_t> resultFuture = resultPromise.get_future(); - { - std::lock_guard lock(mThreadMutex); - mFunctionCalls.push([&resultPromise, &framebuffer](renderengine::RenderEngine& instance) { - ATRACE_NAME("REThreaded::bindFrameBuffer"); - status_t status = instance.bindFrameBuffer(framebuffer); - resultPromise.set_value(status); - }); - } - mCondition.notify_one(); - return resultFuture.get(); -} - -void RenderEngineThreaded::unbindFrameBuffer(Framebuffer* framebuffer) { - std::promise<void> resultPromise; - std::future<void> resultFuture = resultPromise.get_future(); - { - std::lock_guard lock(mThreadMutex); - mFunctionCalls.push([&resultPromise, &framebuffer](renderengine::RenderEngine& instance) { - ATRACE_NAME("REThreaded::unbindFrameBuffer"); - instance.unbindFrameBuffer(framebuffer); - resultPromise.set_value(); - }); - } - mCondition.notify_one(); - resultFuture.wait(); -} - size_t RenderEngineThreaded::getMaxTextureSize() const { std::promise<size_t> resultPromise; std::future<size_t> resultFuture = resultPromise.get_future(); @@ -346,21 +285,6 @@ bool RenderEngineThreaded::useProtectedContext(bool useProtectedContext) { return resultFuture.get(); } -Framebuffer* RenderEngineThreaded::getFramebufferForDrawing() { - std::promise<Framebuffer*> resultPromise; - std::future<Framebuffer*> resultFuture = resultPromise.get_future(); - { - std::lock_guard lock(mThreadMutex); - mFunctionCalls.push([&resultPromise](renderengine::RenderEngine& instance) { - ATRACE_NAME("REThreaded::getFramebufferForDrawing"); - Framebuffer* framebuffer = instance.getFramebufferForDrawing(); - resultPromise.set_value(framebuffer); - }); - } - mCondition.notify_one(); - return resultFuture.get(); -} - bool RenderEngineThreaded::cleanupPostRender(CleanupMode mode) { std::promise<bool> resultPromise; std::future<bool> resultFuture = resultPromise.get_future(); diff --git a/libs/renderengine/threaded/RenderEngineThreaded.h b/libs/renderengine/threaded/RenderEngineThreaded.h index 86a49e949d..96a49b3a0b 100644 --- a/libs/renderengine/threaded/RenderEngineThreaded.h +++ b/libs/renderengine/threaded/RenderEngineThreaded.h @@ -46,16 +46,12 @@ public: void dump(std::string& result) override; bool useNativeFenceSync() const override; - bool useWaitSync() const override; void genTextures(size_t count, uint32_t* names) override; void deleteTextures(size_t count, uint32_t const* names) override; - void bindExternalTextureImage(uint32_t texName, const Image& image) override; status_t bindExternalTextureBuffer(uint32_t texName, const sp<GraphicBuffer>& buffer, const sp<Fence>& fence) override; void cacheExternalTextureBuffer(const sp<GraphicBuffer>& buffer) override; void unbindExternalTextureBuffer(uint64_t bufferId) override; - status_t bindFrameBuffer(Framebuffer* framebuffer) override; - void unbindFrameBuffer(Framebuffer* framebuffer) override; size_t getMaxTextureSize() const override; size_t getMaxViewportDims() const override; @@ -69,9 +65,6 @@ public: const sp<GraphicBuffer>& buffer, const bool useFramebufferCache, base::unique_fd&& bufferFence, base::unique_fd* drawFence) override; -protected: - Framebuffer* getFramebufferForDrawing() override; - private: void threadMain(CreateInstanceFactory factory); |