On 3 January 2012 12:57, Ian Romanick <i...@freedesktop.org> wrote: > On 01/02/2012 09:37 PM, Paul Berry wrote: > >> From the EXT_transform_feedback spec: >> >> The error INVALID_OPERATION is generated by >> BeginTransformFeedbackEXT if any transform feedback buffer object >> binding point used in transform feedback mode does not have a >> buffer object bound. >> >> This required adding a new NumBuffers field to the >> gl_transform_feedback_info struct, to keep track of how many transform >> feedback buffers are required by the current program. >> >> Fixes Piglit tests: >> - EXT_transform_feedback/api-**errors interleaved_unbound >> - EXT_transform_feedback/api-**errors separate_unbound_0_1 >> - EXT_transform_feedback/api-**errors separate_unbound_0_2 >> - EXT_transform_feedback/api-**errors separate_unbound_1_2 >> --- >> src/glsl/linker.cpp | 7 +++++-- >> src/mesa/main/mtypes.h | 5 +++++ >> src/mesa/main/**transformfeedback.c | 12 ++++++++++++ >> 3 files changed, 22 insertions(+), 2 deletions(-) >> >> diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp >> index ed9a5d7..43be205 100644 >> --- a/src/glsl/linker.cpp >> +++ b/src/glsl/linker.cpp >> @@ -1889,11 +1889,14 @@ store_tfeedback_info(struct gl_context *ctx, >> struct gl_shader_program *prog, >> tfeedback_decl *tfeedback_decls) >> { >> unsigned total_tfeedback_components = 0; >> + bool separate_attribs_mode = >> + prog->TransformFeedback.**BufferMode == GL_SEPARATE_ATTRIBS; >> memset(&prog->**LinkedTransformFeedback, 0, >> sizeof(prog->**LinkedTransformFeedback)); >> + prog->LinkedTransformFeedback.**NumBuffers = >> + separate_attribs_mode ? num_tfeedback_decls : 1; >> for (unsigned i = 0; i< num_tfeedback_decls; ++i) { >> - unsigned buffer = >> - prog->TransformFeedback.**BufferMode == GL_SEPARATE_ATTRIBS ? >> i : 0; >> + unsigned buffer = separate_attribs_mode ? i : 0; >> > > Is this actually necessary? If separate_attribs_mode is false, > num_tfeedback_decls is 1, and i can only ever be 0. Right? >
No, num_tfeedback_decls is the value of "count" that was passed to TransformFeedbackVaryings--it indicates the number of varyings that should be captured. So if separate_attribs_mode is false, and more than one varying is being interleaved, then num_tfeedback_decls will be greater than 1.
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev