On Wed, 2014-06-18 at 12:56 -0700, Ian Romanick wrote: > On 06/18/2014 02:51 AM, Iago Toral Quiroga wrote: > > Inter-shader outputs must be on stream 0, which is the default. > > --- > > src/glsl/link_varyings.cpp | 12 +++++++++--- > > src/glsl/link_varyings.h | 7 +++++++ > > 2 files changed, 16 insertions(+), 3 deletions(-) > > > > diff --git a/src/glsl/link_varyings.cpp b/src/glsl/link_varyings.cpp > > index f765d37..9725a43 100644 > > --- a/src/glsl/link_varyings.cpp > > +++ b/src/glsl/link_varyings.cpp > > @@ -291,6 +291,7 @@ tfeedback_decl::init(struct gl_context *ctx, const void > > *mem_ctx, > > this->skip_components = 0; > > this->next_buffer_separator = false; > > this->matched_candidate = NULL; > > + this->stream_id = 0; > > > > if (ctx->Extensions.ARB_transform_feedback3) { > > /* Parse gl_NextBuffer. */ > > @@ -355,8 +356,8 @@ tfeedback_decl::is_same(const tfeedback_decl &x, const > > tfeedback_decl &y) > > > > > > /** > > - * Assign a location for this tfeedback_decl object based on the transform > > - * feedback candidate found by find_candidate. > > + * Assign a location and stream ID for this tfeedback_decl object based on > > the > > + * transform feedback candidate found by find_candidate. > > * > > * If an error occurs, the error is reported through linker_error() and > > false > > * is returned. > > @@ -437,6 +438,11 @@ tfeedback_decl::assign_location(struct gl_context *ctx, > > return false; > > } > > > > + /* Only transform feedback varyings can be assigned to non-zero streams, > > + * so assign the stream id here. > > + */ > > + this->stream_id = this->matched_candidate->toplevel_var->data.stream; > > + > > return true; > > } > > > > @@ -495,7 +501,7 @@ tfeedback_decl::store(struct gl_context *ctx, struct > > gl_shader_program *prog, > > info->Outputs[info->NumOutputs].ComponentOffset = location_frac; > > info->Outputs[info->NumOutputs].OutputRegister = location; > > info->Outputs[info->NumOutputs].NumComponents = output_size; > > - info->Outputs[info->NumOutputs].StreamId = 0; > > + info->Outputs[info->NumOutputs].StreamId = stream_id; > > info->Outputs[info->NumOutputs].OutputBuffer = buffer; > > info->Outputs[info->NumOutputs].DstOffset = > > info->BufferStride[buffer]; > > ++info->NumOutputs; > > diff --git a/src/glsl/link_varyings.h b/src/glsl/link_varyings.h > > index 6fa2681..4e485c3 100644 > > --- a/src/glsl/link_varyings.h > > +++ b/src/glsl/link_varyings.h > > @@ -210,6 +210,13 @@ private: > > * data structure that was found. Otherwise NULL. > > */ > > const tfeedback_candidate *matched_candidate; > > + > > + /** > > + * StreamId assigned to this varying (defaults to 0). Can only be set to > > + * values other than 0 in geometry shaders that use the stream layout > > + * modifier. Accepted values must be in the range [0, > > MAX_VERTEX_STREAMS]. > > MAX_VERTEX_STREAMS-1, right?
Ooops, right. I'll fix that. > > + */ > > + unsigned stream_id; > > }; > > > > > > > > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev