mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-01 12:28:07 +02:00
mesa: implement glGet queries and error handling for ARB_transform_feedback3
Acked-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
parent
21cb5ed20d
commit
375e73d859
4 changed files with 43 additions and 0 deletions
|
|
@ -655,6 +655,7 @@ _mesa_init_constants(struct gl_context *ctx)
|
|||
ctx->Const.MaxTransformFeedbackBuffers = MAX_FEEDBACK_BUFFERS;
|
||||
ctx->Const.MaxTransformFeedbackSeparateComponents = 4 * MAX_FEEDBACK_ATTRIBS;
|
||||
ctx->Const.MaxTransformFeedbackInterleavedComponents = 4 * MAX_FEEDBACK_ATTRIBS;
|
||||
ctx->Const.MaxVertexStreams = 1;
|
||||
|
||||
/** GL_ARB_uniform_buffer_object */
|
||||
ctx->Const.MaxCombinedUniformBlocks = 36;
|
||||
|
|
|
|||
|
|
@ -328,6 +328,7 @@ EXTRA_EXT(ARB_sync);
|
|||
EXTRA_EXT(ARB_vertex_shader);
|
||||
EXTRA_EXT(EXT_transform_feedback);
|
||||
EXTRA_EXT(ARB_transform_feedback2);
|
||||
EXTRA_EXT(ARB_transform_feedback3);
|
||||
EXTRA_EXT(EXT_pixel_buffer_object);
|
||||
EXTRA_EXT(ARB_vertex_program);
|
||||
EXTRA_EXT2(NV_point_sprite, ARB_point_sprite);
|
||||
|
|
@ -1247,6 +1248,14 @@ static const struct value_desc values[] = {
|
|||
{ GL_TRANSFORM_FEEDBACK_BINDING, LOC_CUSTOM, TYPE_INT, 0,
|
||||
extra_ARB_transform_feedback2 },
|
||||
|
||||
/* GL_ARB_transform_feedback3 */
|
||||
{ GL_MAX_TRANSFORM_FEEDBACK_BUFFERS,
|
||||
CONTEXT_INT(Const.MaxTransformFeedbackBuffers),
|
||||
extra_ARB_transform_feedback3 },
|
||||
{ GL_MAX_VERTEX_STREAMS,
|
||||
CONTEXT_INT(Const.MaxVertexStreams),
|
||||
extra_ARB_transform_feedback3 },
|
||||
|
||||
/* GL_ARB_geometry_shader4 */
|
||||
{ GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB,
|
||||
CONTEXT_INT(Const.MaxGeometryTextureImageUnits),
|
||||
|
|
|
|||
|
|
@ -2837,6 +2837,7 @@ struct gl_constants
|
|||
GLuint MaxTransformFeedbackBuffers;
|
||||
GLuint MaxTransformFeedbackSeparateComponents;
|
||||
GLuint MaxTransformFeedbackInterleavedComponents;
|
||||
GLuint MaxVertexStreams;
|
||||
|
||||
/** GL_EXT_gpu_shader4 */
|
||||
GLint MinProgramTexelOffset, MaxProgramTexelOffset;
|
||||
|
|
|
|||
|
|
@ -603,6 +603,38 @@ _mesa_TransformFeedbackVaryings(GLuint program, GLsizei count,
|
|||
return;
|
||||
}
|
||||
|
||||
if (ctx->Extensions.ARB_transform_feedback3) {
|
||||
if (bufferMode == GL_INTERLEAVED_ATTRIBS) {
|
||||
unsigned buffers = 1;
|
||||
|
||||
for (i = 0; i < count; i++) {
|
||||
if (strcmp(varyings[i], "gl_NextBuffer") == 0)
|
||||
buffers++;
|
||||
}
|
||||
|
||||
if (buffers > ctx->Const.MaxTransformFeedbackBuffers) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glTransformFeedbackVaryings(too many gl_NextBuffer "
|
||||
"occurences)");
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
for (i = 0; i < count; i++) {
|
||||
if (strcmp(varyings[i], "gl_NextBuffer") == 0 ||
|
||||
strcmp(varyings[i], "gl_SkipComponents1") == 0 ||
|
||||
strcmp(varyings[i], "gl_SkipComponents2") == 0 ||
|
||||
strcmp(varyings[i], "gl_SkipComponents3") == 0 ||
|
||||
strcmp(varyings[i], "gl_SkipComponents4") == 0) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glTransformFeedbackVaryings(SEPARATE_ATTRIBS,"
|
||||
"varying=%s)",
|
||||
varyings[i]);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* free existing varyings, if any */
|
||||
for (i = 0; i < shProg->TransformFeedback.NumVarying; i++) {
|
||||
free(shProg->TransformFeedback.VaryingNames[i]);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue