Home | History | Annotate | Download | only in gl
      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
      3 // found in the LICENSE file.
      4 
      5 #include "ui/gl/gl_fence.h"
      6 
      7 #include "base/compiler_specific.h"
      8 #include "ui/gl/gl_bindings.h"
      9 #include "ui/gl/gl_context.h"
     10 #include "ui/gl/gl_fence_arb.h"
     11 #include "ui/gl/gl_fence_egl.h"
     12 #include "ui/gl/gl_fence_nv.h"
     13 #include "ui/gl/gl_gl_api_implementation.h"
     14 #include "ui/gl/gl_version_info.h"
     15 
     16 namespace gfx {
     17 
     18 namespace {
     19 
     20 // static
     21 GLFence* CreateFence(bool flush) {
     22   DCHECK(GLContext::GetCurrent())
     23       << "Trying to create fence with no context";
     24 
     25   scoped_ptr<GLFence> fence;
     26   // Prefer ARB_sync which supports server-side wait.
     27   if (g_driver_gl.ext.b_GL_ARB_sync ||
     28       GetGLVersionInfo()->is_es3) {
     29     fence.reset(new GLFenceARB(flush));
     30 #if !defined(OS_MACOSX)
     31   } else if (g_driver_egl.ext.b_EGL_KHR_fence_sync) {
     32     fence.reset(new GLFenceEGL(flush));
     33 #endif
     34   } else if (g_driver_gl.ext.b_GL_NV_fence) {
     35     fence.reset(new GLFenceNV(flush));
     36   }
     37 
     38   DCHECK_EQ(!!fence.get(), GLFence::IsSupported());
     39   return fence.release();
     40 }
     41 
     42 }  // namespace
     43 
     44 GLFence::GLFence() {
     45 }
     46 
     47 GLFence::~GLFence() {
     48 }
     49 
     50 bool GLFence::IsSupported() {
     51   DCHECK(GetGLVersionInfo());
     52   return g_driver_gl.ext.b_GL_ARB_sync || GetGLVersionInfo()->is_es3 ||
     53 #if !defined(OS_MACOSX)
     54          g_driver_egl.ext.b_EGL_KHR_fence_sync ||
     55 #endif
     56          g_driver_gl.ext.b_GL_NV_fence;
     57 }
     58 
     59 GLFence* GLFence::Create() {
     60   return CreateFence(true);
     61 }
     62 
     63 GLFence* GLFence::CreateWithoutFlush() {
     64   return CreateFence(false);
     65 }
     66 
     67 }  // namespace gfx
     68