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