transformfeedback.h revision 848b8605
1/*
2 * Mesa 3-D graphics library
3 *
4 * Copyright (C) 2010  VMware, Inc.  All Rights Reserved.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included
14 * in all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
20 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22 * OTHER DEALINGS IN THE SOFTWARE.
23 */
24
25
26#ifndef TRANSFORM_FEEDBACK_H
27#define TRANSFORM_FEEDBACK_H
28
29#include <stdbool.h>
30#include "bufferobj.h"
31#include "compiler.h"
32#include "glheader.h"
33#include "mtypes.h"
34
35struct _glapi_table;
36struct dd_function_table;
37struct gl_context;
38
39extern void
40_mesa_init_transform_feedback(struct gl_context *ctx);
41
42extern void
43_mesa_free_transform_feedback(struct gl_context *ctx);
44
45extern GLboolean
46_mesa_validate_transform_feedback_buffers(struct gl_context *ctx);
47
48
49extern void
50_mesa_init_transform_feedback_functions(struct dd_function_table *driver);
51
52extern unsigned
53_mesa_compute_max_transform_feedback_vertices(
54      const struct gl_transform_feedback_object *obj,
55      const struct gl_transform_feedback_info *info);
56
57
58/*** GL_EXT_transform_feedback ***/
59
60extern void GLAPIENTRY
61_mesa_BeginTransformFeedback(GLenum mode);
62
63extern void GLAPIENTRY
64_mesa_EndTransformFeedback(void);
65
66extern void
67_mesa_bind_buffer_range_transform_feedback(struct gl_context *ctx,
68					   GLuint index,
69					   struct gl_buffer_object *bufObj,
70					   GLintptr offset,
71					   GLsizeiptr size);
72
73extern void
74_mesa_bind_buffer_base_transform_feedback(struct gl_context *ctx,
75					  GLuint index,
76					  struct gl_buffer_object *bufObj);
77
78extern void GLAPIENTRY
79_mesa_BindBufferOffsetEXT(GLenum target, GLuint index, GLuint buffer,
80                          GLintptr offset);
81
82extern void GLAPIENTRY
83_mesa_TransformFeedbackVaryings(GLuint program, GLsizei count,
84                                const GLchar * const *varyings,
85                                GLenum bufferMode);
86
87extern void GLAPIENTRY
88_mesa_GetTransformFeedbackVarying(GLuint program, GLuint index,
89                                  GLsizei bufSize, GLsizei *length,
90                                  GLsizei *size, GLenum *type, GLchar *name);
91
92
93
94/*** GL_ARB_transform_feedback2 ***/
95extern void
96_mesa_init_transform_feedback_object(struct gl_transform_feedback_object *obj,
97                                     GLuint name);
98
99struct gl_transform_feedback_object *
100_mesa_lookup_transform_feedback_object(struct gl_context *ctx, GLuint name);
101
102extern void GLAPIENTRY
103_mesa_GenTransformFeedbacks(GLsizei n, GLuint *names);
104
105extern GLboolean GLAPIENTRY
106_mesa_IsTransformFeedback(GLuint name);
107
108extern void GLAPIENTRY
109_mesa_BindTransformFeedback(GLenum target, GLuint name);
110
111extern void GLAPIENTRY
112_mesa_DeleteTransformFeedbacks(GLsizei n, const GLuint *names);
113
114extern void GLAPIENTRY
115_mesa_PauseTransformFeedback(void);
116
117extern void GLAPIENTRY
118_mesa_ResumeTransformFeedback(void);
119
120static inline bool
121_mesa_is_xfb_active_and_unpaused(const struct gl_context *ctx)
122{
123   return ctx->TransformFeedback.CurrentObject->Active &&
124      !ctx->TransformFeedback.CurrentObject->Paused;
125}
126
127extern bool
128_mesa_transform_feedback_is_using_program(struct gl_context *ctx,
129                                          struct gl_shader_program *shProg);
130
131static inline void
132_mesa_set_transform_feedback_binding(struct gl_context *ctx,
133                                     struct gl_transform_feedback_object *tfObj, GLuint index,
134                                     struct gl_buffer_object *bufObj,
135                                     GLintptr offset, GLsizeiptr size)
136{
137   _mesa_reference_buffer_object(ctx, &tfObj->Buffers[index], bufObj);
138
139   tfObj->BufferNames[index]   = bufObj->Name;
140   tfObj->Offset[index]        = offset;
141   tfObj->RequestedSize[index] = size;
142}
143
144#endif /* TRANSFORM_FEEDBACK_H */
145