From: Timothy Arceri Date: Thu, 10 Mar 2016 04:57:19 +0000 (+1100) Subject: mesa: add support to query GL_TRANSFORM_FEEDBACK_BUFFER_INDEX X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=9e317271d7694d912da99e524294156b6c2de96e;p=mesa.git mesa: add support to query GL_TRANSFORM_FEEDBACK_BUFFER_INDEX Reviewed-by: Dave Airlie --- diff --git a/src/compiler/glsl/link_varyings.cpp b/src/compiler/glsl/link_varyings.cpp index b091eaf5512..a3b7e1c65c7 100644 --- a/src/compiler/glsl/link_varyings.cpp +++ b/src/compiler/glsl/link_varyings.cpp @@ -725,8 +725,9 @@ tfeedback_decl::get_num_outputs() const bool tfeedback_decl::store(struct gl_context *ctx, struct gl_shader_program *prog, struct gl_transform_feedback_info *info, - unsigned buffer, const unsigned max_outputs, - bool *explicit_stride, bool has_xfb_qualifiers) const + unsigned buffer, unsigned buffer_index, + const unsigned max_outputs, bool *explicit_stride, + bool has_xfb_qualifiers) const { assert(!this->next_buffer_separator); @@ -823,6 +824,7 @@ tfeedback_decl::store(struct gl_context *ctx, struct gl_shader_program *prog, this->orig_name); info->Varyings[info->NumVarying].Type = this->type; info->Varyings[info->NumVarying].Size = this->size; + info->Varyings[info->NumVarying].BufferIndex = buffer_index; info->NumVarying++; return true; @@ -976,8 +978,8 @@ store_tfeedback_info(struct gl_context *ctx, struct gl_shader_program *prog, /* GL_SEPARATE_ATTRIBS */ for (unsigned i = 0; i < num_tfeedback_decls; ++i) { if (!tfeedback_decls[i].store(ctx, prog, &prog->LinkedTransformFeedback, - num_buffers, num_outputs, NULL, - has_xfb_qualifiers)) + num_buffers, num_buffers, num_outputs, + NULL, has_xfb_qualifiers)) return false; buffers |= 1 << num_buffers; @@ -1008,6 +1010,7 @@ store_tfeedback_info(struct gl_context *ctx, struct gl_shader_program *prog, buffer != tfeedback_decls[i].get_buffer()) { /* we have moved to the next buffer so reset stream id */ buffer_stream_id = -1; + num_buffers++; } if (tfeedback_decls[i].is_next_buffer_separator()) { @@ -1036,11 +1039,11 @@ store_tfeedback_info(struct gl_context *ctx, struct gl_shader_program *prog, } else { buffer = num_buffers; } - buffers |= 1 << num_buffers; + buffers |= 1 << buffer; if (!tfeedback_decls[i].store(ctx, prog, &prog->LinkedTransformFeedback, - num_buffers, num_outputs, + buffer, num_buffers, num_outputs, explicit_stride, has_xfb_qualifiers)) return false; } diff --git a/src/compiler/glsl/link_varyings.h b/src/compiler/glsl/link_varyings.h index 9ea79f04fa8..543b80ff29b 100644 --- a/src/compiler/glsl/link_varyings.h +++ b/src/compiler/glsl/link_varyings.h @@ -98,8 +98,8 @@ public: unsigned get_num_outputs() const; bool store(struct gl_context *ctx, struct gl_shader_program *prog, struct gl_transform_feedback_info *info, unsigned buffer, - const unsigned max_outputs, bool *explicit_stride, - bool has_xfb_qualifiers) const; + unsigned buffer_index, const unsigned max_outputs, + bool *explicit_stride, bool has_xfb_qualifiers) const; const tfeedback_candidate *find_candidate(gl_shader_program *prog, hash_table *tfeedback_candidates); diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index 320297cdfe9..33923d195c9 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -1618,6 +1618,7 @@ struct gl_transform_feedback_varying_info { char *Name; GLenum Type; + GLint BufferIndex; GLint Size; GLint Offset; }; diff --git a/src/mesa/main/shader_query.cpp b/src/mesa/main/shader_query.cpp index 15cc49afbfc..ee2eeab0f8d 100644 --- a/src/mesa/main/shader_query.cpp +++ b/src/mesa/main/shader_query.cpp @@ -1322,6 +1322,12 @@ _mesa_program_resource_prop(struct gl_shader_program *shProg, default: goto invalid_operation; } + + case GL_TRANSFORM_FEEDBACK_BUFFER_INDEX: + VALIDATE_TYPE(GL_TRANSFORM_FEEDBACK_VARYING); + *val = RESOURCE_XFV(res)->BufferIndex; + return 1; + default: goto invalid_enum; }