16e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
26e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
36e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// found in the LICENSE file.
46e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
56e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#ifndef MOJO_PUBLIC_PLATFORM_NATIVE_GLES2_IMPL_CHROMIUM_SYNC_POINT_THUNKS_H_
66e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#define MOJO_PUBLIC_PLATFORM_NATIVE_GLES2_IMPL_CHROMIUM_SYNC_POINT_THUNKS_H_
76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
86e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include <stddef.h>
96e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "mojo/public/c/gles2/chromium_sync_point.h"
116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Specifies the frozen API for the GLES2 CHROMIUM_sync_point extension.
136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#pragma pack(push, 8)
146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)struct MojoGLES2ImplChromiumSyncPointThunks {
156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  size_t size;  // Should be set to sizeof(*this).
166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#define VISIT_GL_CALL(Function, ReturnType, PARAMETERS, ARGUMENTS) \
186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  ReturnType(*Function) PARAMETERS;
196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "mojo/public/c/gles2/gles2_call_visitor_chromium_sync_point_autogen.h"
206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#undef VISIT_GL_CALL
216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)};
226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#pragma pack(pop)
236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Intended to be called from the embedder to get the embedder's implementation
256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// of GLES2.
266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)inline MojoGLES2ImplChromiumSyncPointThunks
276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)MojoMakeGLES2ImplChromiumSyncPointThunks() {
286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  MojoGLES2ImplChromiumSyncPointThunks gles2_impl_chromium_sync_point_thunks = {
296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      sizeof(MojoGLES2ImplChromiumSyncPointThunks),
306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#define VISIT_GL_CALL(Function, ReturnType, PARAMETERS, ARGUMENTS) gl##Function,
316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "mojo/public/c/gles2/gles2_call_visitor_chromium_sync_point_autogen.h"
326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#undef VISIT_GL_CALL
336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  };
346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  return gles2_impl_chromium_sync_point_thunks;
366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Use this type for the function found by dynamically discovering it in
396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// a DSO linked with mojo_system.
406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// The contents of |gles2_impl_chromium_sync_point_thunks| are copied.
416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)typedef size_t (*MojoSetGLES2ImplChromiumSyncPointThunksFn)(
426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    const MojoGLES2ImplChromiumSyncPointThunks* thunks);
436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif  // MOJO_PUBLIC_PLATFORM_NATIVE_GLES2_IMPL_CHROMIUM_SYNC_POINT_THUNKS_H_
45