On 01/03/2012 01:07 PM, Paul Berry wrote:
On 3 January 2012 12:57, Ian Romanick <i...@freedesktop.org
<mailto: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.
Oh, right. I misread the line before the loop. I'll blame it on being
sick.
Reviewed-by: Ian Romanick <ian.d.roman...@intel.com>
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev