Index: tools/gpu/gl/GLTestContext.cpp |
diff --git a/tools/gpu/gl/GLTestContext.cpp b/tools/gpu/gl/GLTestContext.cpp |
index 68980922cdc4c986ef1c3fae325a2ec6dfd9a8bf..1d53bbcd83f70ece2d3b9cd6c4b79c4698764450 100644 |
--- a/tools/gpu/gl/GLTestContext.cpp |
+++ b/tools/gpu/gl/GLTestContext.cpp |
@@ -8,21 +8,24 @@ |
#include "GLTestContext.h" |
#include "gl/GrGLUtil.h" |
-namespace sk_gpu_test { |
-class GLTestContext::GLFenceSync : public SkGpuFenceSync { |
+namespace { |
+ |
+class GLFenceSync : public sk_gpu_test::FenceSync { |
public: |
- static GLFenceSync* CreateIfSupported(const GLTestContext*); |
+ static GLFenceSync* CreateIfSupported(const sk_gpu_test::GLTestContext*); |
- SkPlatformGpuFence SK_WARN_UNUSED_RESULT insertFence() const override; |
- bool waitFence(SkPlatformGpuFence fence) const override; |
- void deleteFence(SkPlatformGpuFence fence) const override; |
+ sk_gpu_test::PlatformFence SK_WARN_UNUSED_RESULT insertFence() const override; |
+ bool waitFence(sk_gpu_test::PlatformFence fence) const override; |
+ void deleteFence(sk_gpu_test::PlatformFence fence) const override; |
private: |
- GLFenceSync() {} |
+ GLFenceSync(const sk_gpu_test::GLTestContext*, const char* ext = ""); |
+ |
+ bool validate() { return fGLFenceSync && fGLClientWaitSync && fGLDeleteSync; } |
- static const GrGLenum GL_SYNC_GPU_COMMANDS_COMPLETE = 0x9117; |
- static const GrGLenum GL_WAIT_FAILED = 0x911d; |
- static const GrGLbitfield GL_SYNC_FLUSH_COMMANDS_BIT = 0x00000001; |
+ static constexpr GrGLenum GL_SYNC_GPU_COMMANDS_COMPLETE = 0x9117; |
+ static constexpr GrGLenum GL_WAIT_FAILED = 0x911d; |
+ static constexpr GrGLbitfield GL_SYNC_FLUSH_COMMANDS_BIT = 0x00000001; |
typedef struct __GLsync *GLsync; |
@@ -34,16 +37,57 @@ private: |
GLClientWaitSyncProc fGLClientWaitSync; |
GLDeleteSyncProc fGLDeleteSync; |
- typedef SkGpuFenceSync INHERITED; |
+ typedef FenceSync INHERITED; |
}; |
+GLFenceSync* GLFenceSync::CreateIfSupported(const sk_gpu_test::GLTestContext* ctx) { |
+ SkAutoTDelete<GLFenceSync> ret; |
+ if (kGL_GrGLStandard == ctx->gl()->fStandard) { |
+ if (GrGLGetVersion(ctx->gl()) < GR_GL_VER(3,2) && !ctx->gl()->hasExtension("GL_ARB_sync")) { |
+ return nullptr; |
+ } |
+ ret.reset(new GLFenceSync(ctx)); |
+ } else { |
+ if (!ctx->gl()->hasExtension("GL_APPLE_sync")) { |
+ return nullptr; |
+ } |
+ ret.reset(new GLFenceSync(ctx, "APPLE")); |
+ } |
+ return ret->validate() ? ret.release() : nullptr; |
+} |
+ |
+GLFenceSync::GLFenceSync(const sk_gpu_test::GLTestContext* ctx, const char* ext) { |
+ ctx->getGLProcAddress(&fGLFenceSync, "glFenceSync"); |
+ ctx->getGLProcAddress(&fGLClientWaitSync, "glClientWaitSync"); |
+ ctx->getGLProcAddress(&fGLDeleteSync, "glDeleteSync"); |
+} |
+ |
+sk_gpu_test::PlatformFence GLFenceSync::insertFence() const { |
+ __GLsync* glsync = fGLFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0); |
+ return reinterpret_cast<sk_gpu_test::PlatformFence>(glsync); |
+} |
+ |
+bool GLFenceSync::waitFence(sk_gpu_test::PlatformFence fence) const { |
+ GLsync glsync = reinterpret_cast<GLsync>(fence); |
+ return GL_WAIT_FAILED != fGLClientWaitSync(glsync, GL_SYNC_FLUSH_COMMANDS_BIT, -1); |
+} |
+ |
+void GLFenceSync::deleteFence(sk_gpu_test::PlatformFence fence) const { |
+ GLsync glsync = reinterpret_cast<GLsync>(fence); |
+ fGLDeleteSync(glsync); |
+} |
+ |
+} // anonymous namespace |
+ |
+namespace sk_gpu_test { |
+ |
GLTestContext::GLTestContext() : TestContext() {} |
GLTestContext::~GLTestContext() { |
SkASSERT(nullptr == fGL.get()); |
} |
-void GLTestContext::init(const GrGLInterface* gl, SkGpuFenceSync* fenceSync) { |
+void GLTestContext::init(const GrGLInterface* gl, FenceSync* fenceSync) { |
SkASSERT(!fGL.get()); |
fGL.reset(gl); |
fFenceSync = fenceSync ? fenceSync : GLFenceSync::CreateIfSupported(this); |
@@ -73,55 +117,6 @@ void GLTestContext::finish() { |
} |
} |
-GLTestContext::GLFenceSync* GLTestContext::GLFenceSync::CreateIfSupported(const GLTestContext* ctx) { |
- SkAutoTDelete<GLFenceSync> ret(new GLFenceSync); |
- |
- if (kGL_GrGLStandard == ctx->gl()->fStandard) { |
- const GrGLubyte* versionStr; |
- GR_GL_CALL_RET(ctx->gl(), versionStr, GetString(GR_GL_VERSION)); |
- GrGLVersion version = GrGLGetVersionFromString(reinterpret_cast<const char*>(versionStr)); |
- if (version < GR_GL_VER(3,2) && !ctx->gl()->hasExtension("GL_ARB_sync")) { |
- return nullptr; |
- } |
- ret->fGLFenceSync = reinterpret_cast<GLFenceSyncProc>( |
- ctx->onPlatformGetProcAddress("glFenceSync")); |
- ret->fGLClientWaitSync = reinterpret_cast<GLClientWaitSyncProc>( |
- ctx->onPlatformGetProcAddress("glClientWaitSync")); |
- ret->fGLDeleteSync = reinterpret_cast<GLDeleteSyncProc>( |
- ctx->onPlatformGetProcAddress("glDeleteSync")); |
- } else { |
- if (!ctx->gl()->hasExtension("GL_APPLE_sync")) { |
- return nullptr; |
- } |
- ret->fGLFenceSync = reinterpret_cast<GLFenceSyncProc>( |
- ctx->onPlatformGetProcAddress("glFenceSyncAPPLE")); |
- ret->fGLClientWaitSync = reinterpret_cast<GLClientWaitSyncProc>( |
- ctx->onPlatformGetProcAddress("glClientWaitSyncAPPLE")); |
- ret->fGLDeleteSync = reinterpret_cast<GLDeleteSyncProc>( |
- ctx->onPlatformGetProcAddress("glDeleteSyncAPPLE")); |
- } |
- |
- if (!ret->fGLFenceSync || !ret->fGLClientWaitSync || !ret->fGLDeleteSync) { |
- return nullptr; |
- } |
- |
- return ret.release(); |
-} |
- |
-SkPlatformGpuFence GLTestContext::GLFenceSync::insertFence() const { |
- return fGLFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0); |
-} |
- |
-bool GLTestContext::GLFenceSync::waitFence(SkPlatformGpuFence fence) const { |
- GLsync glsync = static_cast<GLsync>(fence); |
- return GL_WAIT_FAILED != fGLClientWaitSync(glsync, GL_SYNC_FLUSH_COMMANDS_BIT, -1); |
-} |
- |
-void GLTestContext::GLFenceSync::deleteFence(SkPlatformGpuFence fence) const { |
- GLsync glsync = static_cast<GLsync>(fence); |
- fGLDeleteSync(glsync); |
-} |
- |
GrGLint GLTestContext::createTextureRectangle(int width, int height, GrGLenum internalFormat, |
GrGLenum externalFormat, GrGLenum externalType, |
GrGLvoid* data) { |