summaryrefslogtreecommitdiff
path: root/cogl/cogl-fence.h
blob: e268f8f5fd4bdbeccff85c45c5c00debe66c8573 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
/*
 * Cogl
 *
 * A Low Level GPU Graphics and Utilities API
 *
 * Copyright (C) 2012 Collabora Ltd.
 *
 * Permission is hereby granted, free of charge, to any person
 * obtaining a copy of this software and associated documentation
 * files (the "Software"), to deal in the Software without
 * restriction, including without limitation the rights to use, copy,
 * modify, merge, publish, distribute, sublicense, and/or sell copies
 * of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 *
 *
 */

#if !defined(__COGL_H_INSIDE__) && !defined(COGL_COMPILATION)
#error "Only <cogl/cogl.h> can be included directly."
#endif

#ifndef __COGL_FENCE_H__
#define __COGL_FENCE_H__

#include <cogl/cogl-types.h>
#include <cogl/cogl-framebuffer.h>

/**
 * SECTION:cogl-fence
 * @short_description: Functions for notification of command completion
 *
 * Cogl allows notification of GPU command completion; users may mark
 * points in the GPU command stream and receive notification when the GPU
 * has executed to that point.
 */

/**
 * CoglFence:
 *
 * An opaque object representing a fence. This type is currently
 * unused but in the future may be used to pass extra information
 * about the fence completion.
 *
 * Since: 2.0
 * Stability: Unstable
 */
typedef struct _CoglFence CoglFence;

/**
 * CoglFenceCallback:
 * @fence: Unused. In the future this parameter may be used to pass
 *   extra information about the fence completion but for now it
 *   should be ignored.
 * @user_data: The private data passed to cogl_framebuffer_add_fence_callback()
 *
 * The callback prototype used with
 * cogl_framebuffer_add_fence_callback() for notification of GPU
 * command completion.
 *
 * Since: 2.0
 * Stability: Unstable
 */
typedef void (* CoglFenceCallback) (CoglFence *fence,
                                    void *user_data);

/**
 * CoglFenceClosure:
 *
 * An opaque type representing one future callback to be made when the
 * GPU command stream has passed a certain point.
 *
 * Since: 2.0
 * Stability: Unstable
 */
typedef struct _CoglFenceClosure CoglFenceClosure;

/**
 * cogl_frame_closure_get_user_data:
 * @closure: A #CoglFenceClosure returned from cogl_framebuffer_add_fence()
 *
 * Returns the user_data submitted to cogl_framebuffer_add_fence() which
 * returned a given #CoglFenceClosure.
 *
 * Since: 2.0
 * Stability: Unstable
 */
void *
cogl_fence_closure_get_user_data (CoglFenceClosure *closure);

/**
 * cogl_framebuffer_add_fence_callback:
 * @framebuffer: The #CoglFramebuffer the commands have been submitted to
 * @callback: (scope notified): A #CoglFenceCallback to be called when
 *            all commands submitted to Cogl have been executed
 * @user_data: (closure): Private data that will be passed to the callback
 *
 * Calls the provided callback when all previously-submitted commands have
 * been executed by the GPU.
 *
 * Returns non-NULL if the fence succeeded, or %NULL if it was unable to
 * be inserted and the callback will never be called.  The user does not
 * need to free the closure; it will be freed automatically when the
 * callback is called, or cancelled.
 *
 * Since: 2.0
 * Stability: Unstable
 */
CoglFenceClosure *
cogl_framebuffer_add_fence_callback (CoglFramebuffer *framebuffer,
                                     CoglFenceCallback callback,
                                     void *user_data);

/**
 * cogl_framebuffer_cancel_fence_callback:
 * @framebuffer: The #CoglFramebuffer the commands were submitted to
 * @closure: The #CoglFenceClosure returned from
 *           cogl_framebuffer_add_fence_callback()
 *
 * Removes a fence previously submitted with
 * cogl_framebuffer_add_fence_callback(); the callback will not be
 * called.
 *
 * Since: 2.0
 * Stability: Unstable
 */
void
cogl_framebuffer_cancel_fence_callback (CoglFramebuffer *framebuffer,
                                        CoglFenceClosure *closure);

#endif /* __COGL_FENCE_H__ */