diff options
author | 2016-05-11 11:55:36 -0700 | |
---|---|---|
committer | 2016-05-11 11:55:36 -0700 | |
commit | c8699321b924c1f284df93cb29b86000c1d73c0a (patch) | |
tree | 79a78db44c72f95769d35c25d0f06739b90f2cfe /tools | |
parent | cf05dcd64b47dcf5e6ff02132d2b57d3b40d0bf1 (diff) |
Nanobench running on Vulkan
This lets nanobench run but the timings are inaccurate because of missing
implementations of synchronization functions in VkTestContext.
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1965273004
Review-Url: https://codereview.chromium.org/1965273004
Diffstat (limited to 'tools')
-rw-r--r-- | tools/gpu/TestContext.cpp | 1 | ||||
-rw-r--r-- | tools/gpu/TestContext.h | 8 | ||||
-rw-r--r-- | tools/gpu/gl/GLTestContext.cpp | 12 | ||||
-rw-r--r-- | tools/gpu/gl/GLTestContext.h | 6 | ||||
-rw-r--r-- | tools/gpu/vk/VkTestContext.cpp | 5 |
5 files changed, 31 insertions, 1 deletions
diff --git a/tools/gpu/TestContext.cpp b/tools/gpu/TestContext.cpp index 09174cd984..c6900fe41d 100644 --- a/tools/gpu/TestContext.cpp +++ b/tools/gpu/TestContext.cpp @@ -34,6 +34,7 @@ void TestContext::waitOnSyncOrSwap() { return; } + this->submit(); if (fFrameFences[fCurrentFenceIdx]) { if (!fFenceSync->waitFence(fFrameFences[fCurrentFenceIdx], true)) { SkDebugf("WARNING: Wait failed for fence sync. Timings might not be accurate.\n"); diff --git a/tools/gpu/TestContext.h b/tools/gpu/TestContext.h index 5143b8a6fa..ffa8cae8f9 100644 --- a/tools/gpu/TestContext.h +++ b/tools/gpu/TestContext.h @@ -54,6 +54,8 @@ public: * Otherwise it will call the platform SwapBuffers method. This may or may * not perform some sort of synchronization, depending on whether the * drawing surface provided by the platform is double buffered. + * + * Implicitly performs a submit(). */ void waitOnSyncOrSwap(); @@ -65,6 +67,12 @@ public: */ virtual void testAbandon(); + /** Ensures all work is submitted to the GPU for execution. */ + virtual void submit() = 0; + + /** Wait until all GPU work is finished. */ + virtual void finish() = 0; + /** * returns the fencesync object owned by this GLTestContext */ diff --git a/tools/gpu/gl/GLTestContext.cpp b/tools/gpu/gl/GLTestContext.cpp index 3bd814762e..87cf724139 100644 --- a/tools/gpu/gl/GLTestContext.cpp +++ b/tools/gpu/gl/GLTestContext.cpp @@ -61,6 +61,18 @@ void GLTestContext::testAbandon() { } } +void GLTestContext::submit() { + if (fGL) { + GR_GL_CALL(fGL.get(), Flush()); + } +} + +void GLTestContext::finish() { + if (fGL) { + GR_GL_CALL(fGL.get(), Finish()); + } +} + GLTestContext::GLFenceSync* GLTestContext::GLFenceSync::CreateIfSupported(const GLTestContext* ctx) { SkAutoTDelete<GLFenceSync> ret(new GLFenceSync); diff --git a/tools/gpu/gl/GLTestContext.h b/tools/gpu/gl/GLTestContext.h index a940f8dce7..efe9d8f100 100644 --- a/tools/gpu/gl/GLTestContext.h +++ b/tools/gpu/gl/GLTestContext.h @@ -47,6 +47,12 @@ public: void testAbandon() override; + /** Ensures all work is submitted to the GPU for execution. */ + void submit() override; + + /** Wait until all GPU work is finished. */ + void finish() override; + /** * Creates a new GL context of the same type and makes the returned context current * (if not null). diff --git a/tools/gpu/vk/VkTestContext.cpp b/tools/gpu/vk/VkTestContext.cpp index 44be9fd242..f6849e4484 100644 --- a/tools/gpu/vk/VkTestContext.cpp +++ b/tools/gpu/vk/VkTestContext.cpp @@ -10,7 +10,7 @@ #ifdef SK_VULKAN namespace { -// TODO: Implement fence syncs and swap buffers +// TODO: Implement fence syncs, swap buffers, submit, and flush class VkTestContextImpl : public sk_gpu_test::VkTestContext { public: VkTestContextImpl() @@ -20,6 +20,9 @@ public: void testAbandon() override {} + void submit() override {} + void finish() override {} + protected: void teardown() override { fVk.reset(nullptr); } |