Index: tools/gpu/gl/GLTestContext.cpp |
diff --git a/tools/gpu/gl/GLTestContext.cpp b/tools/gpu/gl/GLTestContext.cpp |
index 68980922cdc4c986ef1c3fae325a2ec6dfd9a8bf..cb5f42540573851dfce4b4ab5c5e075dce19a9bc 100644 |
--- a/tools/gpu/gl/GLTestContext.cpp |
+++ b/tools/gpu/gl/GLTestContext.cpp |
@@ -6,36 +6,11 @@ |
*/ |
#include "GLTestContext.h" |
+ |
+#include "GLFenceSync.h" |
#include "gl/GrGLUtil.h" |
namespace sk_gpu_test { |
-class GLTestContext::GLFenceSync : public SkGpuFenceSync { |
-public: |
- static GLFenceSync* CreateIfSupported(const GLTestContext*); |
- |
- SkPlatformGpuFence SK_WARN_UNUSED_RESULT insertFence() const override; |
- bool waitFence(SkPlatformGpuFence fence) const override; |
- void deleteFence(SkPlatformGpuFence fence) const override; |
- |
-private: |
- GLFenceSync() {} |
- |
- 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; |
- |
- typedef struct __GLsync *GLsync; |
- |
- typedef GLsync (GR_GL_FUNCTION_TYPE* GLFenceSyncProc) (GrGLenum, GrGLbitfield); |
- typedef GrGLenum (GR_GL_FUNCTION_TYPE* GLClientWaitSyncProc) (GLsync, GrGLbitfield, GrGLuint64); |
- typedef GrGLvoid (GR_GL_FUNCTION_TYPE* GLDeleteSyncProc) (GLsync); |
- |
- GLFenceSyncProc fGLFenceSync; |
- GLClientWaitSyncProc fGLClientWaitSync; |
- GLDeleteSyncProc fGLDeleteSync; |
- |
- typedef SkGpuFenceSync INHERITED; |
-}; |
GLTestContext::GLTestContext() : TestContext() {} |
@@ -43,7 +18,7 @@ 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 +48,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) { |