diff --git a/android/filament-android/src/main/cpp/Engine.cpp b/android/filament-android/src/main/cpp/Engine.cpp index 59041ee97e..569be2475b 100644 --- a/android/filament-android/src/main/cpp/Engine.cpp +++ b/android/filament-android/src/main/cpp/Engine.cpp @@ -154,9 +154,9 @@ Java_com_google_android_filament_Engine_nDestroyScene(JNIEnv*, jclass, extern "C" JNIEXPORT jlong JNICALL Java_com_google_android_filament_Engine_nCreateFence(JNIEnv*, jclass, - jlong nativeEngine, jint fenceType) { + jlong nativeEngine) { Engine* engine = (Engine*) nativeEngine; - return (jlong) engine->createFence((Fence::Type) fenceType); + return (jlong) engine->createFence(); } extern "C" JNIEXPORT void JNICALL diff --git a/android/filament-android/src/main/java/com/google/android/filament/Engine.java b/android/filament-android/src/main/java/com/google/android/filament/Engine.java index d0e017f95f..801dd4a348 100644 --- a/android/filament-android/src/main/java/com/google/android/filament/Engine.java +++ b/android/filament-android/src/main/java/com/google/android/filament/Engine.java @@ -199,8 +199,8 @@ public class Engine { // Fence @NonNull - public Fence createFence(@NonNull Fence.Type type) { - long nativeFence = nCreateFence(getNativeObject(), type.ordinal()); + public Fence createFence() { + long nativeFence = nCreateFence(getNativeObject()); if (nativeFence == 0) throw new IllegalStateException("Couldn't create Fence"); return new Fence(nativeFence); } @@ -274,7 +274,7 @@ public class Engine { } public void flushAndWait() { - Fence.waitAndDestroy(createFence(Fence.Type.HARD), Fence.Mode.FLUSH); + Fence.waitAndDestroy(createFence(), Fence.Mode.FLUSH); } @UsedByReflection("TextureHelper.java") @@ -304,7 +304,7 @@ public class Engine { private static native void nDestroyCamera(long nativeEngine, long nativeCamera); private static native long nCreateScene(long nativeEngine); private static native void nDestroyScene(long nativeEngine, long nativeScene); - private static native long nCreateFence(long nativeEngine, int fenceType); + private static native long nCreateFence(long nativeEngine); private static native void nDestroyFence(long nativeEngine, long nativeFence); private static native void nDestroyStream(long nativeEngine, long nativeStream); private static native void nDestroyIndexBuffer(long nativeEngine, long nativeIndexBuffer); diff --git a/android/filament-android/src/main/java/com/google/android/filament/Fence.java b/android/filament-android/src/main/java/com/google/android/filament/Fence.java index 29d6383f40..f620216428 100644 --- a/android/filament-android/src/main/java/com/google/android/filament/Fence.java +++ b/android/filament-android/src/main/java/com/google/android/filament/Fence.java @@ -26,11 +26,6 @@ public class Fence { public static final long WAIT_FOR_EVER = -1; - public enum Type { - SOFT, - HARD - } - public enum Mode { FLUSH, DONT_FLUSH diff --git a/filament/include/filament/Engine.h b/filament/include/filament/Engine.h index 09824904d4..d4b9332147 100644 --- a/filament/include/filament/Engine.h +++ b/filament/include/filament/Engine.h @@ -310,11 +310,9 @@ public: /** * Creates a Fence. * - * @param type Type of Fence to create - * * @return A pointer to the newly created Fence or nullptr if it couldn't be created. */ - Fence* createFence(Fence::Type type = Fence::Type::SOFT) noexcept; + Fence* createFence() noexcept; void destroy(const VertexBuffer* p); //!< Destroys an VertexBuffer object. void destroy(const Fence* p); //!< Destroys a Fence object. diff --git a/filament/include/filament/Fence.h b/filament/include/filament/Fence.h index c021cbad6a..f54db8737c 100644 --- a/filament/include/filament/Fence.h +++ b/filament/include/filament/Fence.h @@ -42,25 +42,6 @@ public: //! Error codes for Fence::wait() using FenceStatus = backend::FenceStatus; - //! Type of the Fence being created - enum class Type : uint8_t { - /** - * Synchronization with the command stream. - * - * Calling wait() on a SOFT fence will only wait for all commands prior to the Fence to - * be issued, but not for the commands themselves to complete on the GPU. - */ - SOFT, - - /** - * Synchronization with the GPU - * - * Calling wait() on a HARD fence will wait for all commands prior to the Fence to - * have completed on the GPU. - */ - HARD - }; - /** Mode controls the behavior of the command stream when calling wait() * * @attention diff --git a/filament/src/Engine.cpp b/filament/src/Engine.cpp index f726c87765..1cc2d99329 100644 --- a/filament/src/Engine.cpp +++ b/filament/src/Engine.cpp @@ -536,7 +536,7 @@ FView* FEngine::createView() noexcept { return p; } -FFence* FEngine::createFence(Fence::Type type) noexcept { +FFence* FEngine::createFence(FFence::Type type) noexcept { FFence* p = mHeapAllocator.make(*this, type); if (p) { mFences.insert(p); @@ -817,8 +817,8 @@ void Engine::destroyCameraComponent(utils::Entity entity) noexcept { upcast(this)->destroyCameraComponent(entity); } -Fence* Engine::createFence(Fence::Type type) noexcept { - return upcast(this)->createFence(type); +Fence* Engine::createFence() noexcept { + return upcast(this)->createFence(FFence::Type::SOFT); } SwapChain* Engine::createSwapChain(void* nativeWindow, uint64_t flags) noexcept { diff --git a/filament/src/FrameInfo.cpp b/filament/src/FrameInfo.cpp index e72c4376ea..d7cc600fbf 100644 --- a/filament/src/FrameInfo.cpp +++ b/filament/src/FrameInfo.cpp @@ -40,7 +40,7 @@ FrameInfoManager::FrameInfoManager(FEngine& engine) FrameInfoManager::~FrameInfoManager() noexcept = default; void FrameInfo::beginFrame(FrameInfoManager* mgr) { - Fence* fence = mgr->getEngine().createFence(Fence::Type::HARD); + Fence* fence = mgr->getEngine().createFence(FFence::Type::HARD); mgr->push([this, fence]() { Fence::waitAndDestroy(fence, Fence::Mode::DONT_FLUSH); laps[START] = clock::now(); @@ -48,7 +48,7 @@ void FrameInfo::beginFrame(FrameInfoManager* mgr) { } void FrameInfo::lap(FrameInfoManager* mgr, lap_id id) { - Fence* fence = mgr->getEngine().createFence(Fence::Type::HARD); + Fence* fence = mgr->getEngine().createFence(FFence::Type::HARD); mgr->push([this, fence, id]() { Fence::waitAndDestroy(fence, Fence::Mode::DONT_FLUSH); laps[id] = clock::now(); @@ -56,7 +56,7 @@ void FrameInfo::lap(FrameInfoManager* mgr, lap_id id) { } void FrameInfo::endFrame(FrameInfoManager* mgr) { - Fence* fence = mgr->getEngine().createFence(Fence::Type::HARD); + Fence* fence = mgr->getEngine().createFence(FFence::Type::HARD); mgr->push([this, mgr, fence]() { char buf[256]; snprintf(buf, 256, "GPU time [id=%u]", frame); diff --git a/filament/src/FrameInfo.h b/filament/src/FrameInfo.h index 76c319b0c7..f002a9ce70 100644 --- a/filament/src/FrameInfo.h +++ b/filament/src/FrameInfo.h @@ -86,7 +86,7 @@ public: explicit FrameInfoManager(FEngine& engine); ~FrameInfoManager() noexcept; - Engine& getEngine() { return mEngine; } + FEngine& getEngine() { return mEngine; } void run() { mSyncThread.run(); diff --git a/filament/src/FrameSkipper.cpp b/filament/src/FrameSkipper.cpp index f643f2a3b5..a8ba966e3a 100644 --- a/filament/src/FrameSkipper.cpp +++ b/filament/src/FrameSkipper.cpp @@ -51,7 +51,7 @@ bool FrameSkipper::beginFrame() noexcept { } void FrameSkipper::endFrame() noexcept { - mDelayedFences[mLast] = mEngine.createFence(Fence::Type::HARD); + mDelayedFences[mLast] = mEngine.createFence(FFence::Type::HARD); } diff --git a/filament/src/Renderer.cpp b/filament/src/Renderer.cpp index 4d9ebfda45..d55f532401 100644 --- a/filament/src/Renderer.cpp +++ b/filament/src/Renderer.cpp @@ -123,7 +123,7 @@ void FRenderer::terminate(FEngine& engine) { // that all pending commands have been executed (as they could reference data in this // instance, e.g. Fences, Callbacks, etc...) if (UTILS_HAS_THREADING) { - Fence::waitAndDestroy(engine.createFence()); + Fence::waitAndDestroy(engine.createFence(FFence::Type::SOFT)); mFrameInfoManager.terminate(); } else { // In single threaded mode, allow recently-created objects (e.g. no-op fences in Skipper) diff --git a/filament/src/Stream.cpp b/filament/src/Stream.cpp index 65c477c917..f122c72a41 100644 --- a/filament/src/Stream.cpp +++ b/filament/src/Stream.cpp @@ -109,7 +109,7 @@ void FStream::setDimensions(uint32_t width, uint32_t height) noexcept { // unfortunately, because this call is synchronous, we must make sure the handle has been // created first if (UTILS_UNLIKELY(!mStreamHandle)) { - FFence::waitAndDestroy(mEngine.createFence(Fence::Type::SOFT), Fence::Mode::FLUSH); + FFence::waitAndDestroy(mEngine.createFence(FFence::Type::SOFT), Fence::Mode::FLUSH); } mEngine.getDriverApi().setStreamDimensions(mStreamHandle, mWidth, mHeight); } diff --git a/filament/src/details/Engine.h b/filament/src/details/Engine.h index e2e160ff26..e4df728e18 100644 --- a/filament/src/details/Engine.h +++ b/filament/src/details/Engine.h @@ -28,6 +28,7 @@ #include "details/Allocators.h" #include "details/Camera.h" #include "details/DebugRegistry.h" +#include "details/Fence.h" #include "details/RenderTarget.h" #include "details/ResourceList.h" #include "details/Skybox.h" @@ -234,7 +235,7 @@ public: FScene* createScene() noexcept; FView* createView() noexcept; - FFence* createFence(Fence::Type type = Fence::Type::SOFT) noexcept; + FFence* createFence(FFence::Type type) noexcept; FSwapChain* createSwapChain(void* nativeWindow, uint64_t flags) noexcept; FCamera* createCamera(utils::Entity entity) noexcept; diff --git a/filament/src/details/Fence.h b/filament/src/details/Fence.h index de57726585..75695eecba 100644 --- a/filament/src/details/Fence.h +++ b/filament/src/details/Fence.h @@ -37,6 +37,12 @@ class FEngine; class FFence : public Fence { public: + // Type of the Fence being created + enum class Type : uint8_t { + SOFT, + HARD + }; + FFence(FEngine& engine, Type type); void terminate(FEngine& engine) noexcept;