mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 21:50:12 +01:00
mesa: add support to query GL_TRANSFORM_FEEDBACK_BUFFER_INDEX
Reviewed-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
51142e7705
commit
9e317271d7
4 changed files with 18 additions and 8 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -1618,6 +1618,7 @@ struct gl_transform_feedback_varying_info
|
|||
{
|
||||
char *Name;
|
||||
GLenum Type;
|
||||
GLint BufferIndex;
|
||||
GLint Size;
|
||||
GLint Offset;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue