| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ui/gl/gl_fence.h" | 5 #include "ui/gl/gl_fence.h" |
| 6 | 6 |
| 7 #include "base/compiler_specific.h" | 7 #include "base/compiler_specific.h" |
| 8 #include "ui/gl/gl_bindings.h" | 8 #include "ui/gl/gl_bindings.h" |
| 9 #include "ui/gl/gl_context.h" | 9 #include "ui/gl/gl_context.h" |
| 10 | 10 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 29 } | 29 } |
| 30 | 30 |
| 31 virtual bool HasCompleted() OVERRIDE { | 31 virtual bool HasCompleted() OVERRIDE { |
| 32 return !!glTestFenceNV(fence_); | 32 return !!glTestFenceNV(fence_); |
| 33 } | 33 } |
| 34 | 34 |
| 35 virtual void ClientWait() OVERRIDE { | 35 virtual void ClientWait() OVERRIDE { |
| 36 glFinishFenceNV(fence_); | 36 glFinishFenceNV(fence_); |
| 37 } | 37 } |
| 38 | 38 |
| 39 virtual void ServerWait() OVERRIDE { |
| 40 glFinishFenceNV(fence_); |
| 41 } |
| 42 |
| 39 private: | 43 private: |
| 40 virtual ~GLFenceNVFence() { | 44 virtual ~GLFenceNVFence() { |
| 41 glDeleteFencesNV(1, &fence_); | 45 glDeleteFencesNV(1, &fence_); |
| 42 } | 46 } |
| 43 | 47 |
| 44 GLuint fence_; | 48 GLuint fence_; |
| 45 }; | 49 }; |
| 46 | 50 |
| 47 class GLFenceARBSync: public gfx::GLFence { | 51 class GLFenceARBSync: public gfx::GLFence { |
| 48 public: | 52 public: |
| (...skipping 10 matching lines...) Expand all Loading... |
| 59 // We could potentially use glGetSynciv here, but it doesn't work | 63 // We could potentially use glGetSynciv here, but it doesn't work |
| 60 // on OSX 10.7 (always says the fence is not signaled yet). | 64 // on OSX 10.7 (always says the fence is not signaled yet). |
| 61 // glClientWaitSync works better, so let's use that instead. | 65 // glClientWaitSync works better, so let's use that instead. |
| 62 return glClientWaitSync(sync_, 0, 0) != GL_TIMEOUT_EXPIRED; | 66 return glClientWaitSync(sync_, 0, 0) != GL_TIMEOUT_EXPIRED; |
| 63 } | 67 } |
| 64 | 68 |
| 65 virtual void ClientWait() OVERRIDE { | 69 virtual void ClientWait() OVERRIDE { |
| 66 glClientWaitSync(sync_, GL_SYNC_FLUSH_COMMANDS_BIT, GL_TIMEOUT_IGNORED); | 70 glClientWaitSync(sync_, GL_SYNC_FLUSH_COMMANDS_BIT, GL_TIMEOUT_IGNORED); |
| 67 } | 71 } |
| 68 | 72 |
| 73 virtual void ServerWait() OVERRIDE { |
| 74 glWaitSync(sync_, 0, GL_TIMEOUT_IGNORED); |
| 75 } |
| 76 |
| 69 private: | 77 private: |
| 70 virtual ~GLFenceARBSync() { | 78 virtual ~GLFenceARBSync() { |
| 71 glDeleteSync(sync_); | 79 glDeleteSync(sync_); |
| 72 } | 80 } |
| 73 | 81 |
| 74 GLsync sync_; | 82 GLsync sync_; |
| 75 }; | 83 }; |
| 76 | 84 |
| 77 #if !defined(OS_MACOSX) | 85 #if !defined(OS_MACOSX) |
| 78 class EGLFenceSync : public gfx::GLFence { | 86 class EGLFenceSync : public gfx::GLFence { |
| (...skipping 10 matching lines...) Expand all Loading... |
| 89 DCHECK(value == EGL_SIGNALED_KHR || value == EGL_UNSIGNALED_KHR); | 97 DCHECK(value == EGL_SIGNALED_KHR || value == EGL_UNSIGNALED_KHR); |
| 90 return !value || value == EGL_SIGNALED_KHR; | 98 return !value || value == EGL_SIGNALED_KHR; |
| 91 } | 99 } |
| 92 | 100 |
| 93 virtual void ClientWait() OVERRIDE { | 101 virtual void ClientWait() OVERRIDE { |
| 94 EGLint flags = 0; | 102 EGLint flags = 0; |
| 95 EGLTimeKHR time = EGL_FOREVER_KHR; | 103 EGLTimeKHR time = EGL_FOREVER_KHR; |
| 96 eglClientWaitSyncKHR(display_, sync_, flags, time); | 104 eglClientWaitSyncKHR(display_, sync_, flags, time); |
| 97 } | 105 } |
| 98 | 106 |
| 107 virtual void ServerWait() OVERRIDE { |
| 108 EGLint flags = 0; |
| 109 eglWaitSyncKHR(display_, sync_, flags); |
| 110 } |
| 111 |
| 112 |
| 99 private: | 113 private: |
| 100 virtual ~EGLFenceSync() { | 114 virtual ~EGLFenceSync() { |
| 101 eglDestroySyncKHR(display_, sync_); | 115 eglDestroySyncKHR(display_, sync_); |
| 102 } | 116 } |
| 103 | 117 |
| 104 EGLSyncKHR sync_; | 118 EGLSyncKHR sync_; |
| 105 EGLDisplay display_; | 119 EGLDisplay display_; |
| 106 }; | 120 }; |
| 107 #endif // !OS_MACOSX | 121 #endif // !OS_MACOSX |
| 108 | 122 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 123 return new EGLFenceSync(); | 137 return new EGLFenceSync(); |
| 124 #endif | 138 #endif |
| 125 if (gfx::g_driver_gl.ext.b_GL_NV_fence) | 139 if (gfx::g_driver_gl.ext.b_GL_NV_fence) |
| 126 return new GLFenceNVFence(); | 140 return new GLFenceNVFence(); |
| 127 if (gfx::g_driver_gl.ext.b_GL_ARB_sync) | 141 if (gfx::g_driver_gl.ext.b_GL_ARB_sync) |
| 128 return new GLFenceARBSync(); | 142 return new GLFenceARBSync(); |
| 129 return NULL; | 143 return NULL; |
| 130 } | 144 } |
| 131 | 145 |
| 132 } // namespace gfx | 146 } // namespace gfx |
| OLD | NEW |