On Intel hardware when a geometry shader outputs GL_POINTS primitives we only need to emit vertex control bits if it emits vertices to non-zero streams, so use a flag to track this.
This flag will be set to TRUE when a geometry shader calls EmitStreamVertex() or EndStreamPrimitive() with a non-zero stream parameter in a later patch. --- src/mesa/main/mtypes.h | 2 ++ src/mesa/main/shaderapi.c | 1 + src/mesa/main/shaderobj.c | 1 + src/mesa/program/program.c | 1 + 4 files changed, 5 insertions(+) diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index f45dde4..5bc710e 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -2178,6 +2178,7 @@ struct gl_geometry_program GL_TRIANGLES, or GL_TRIANGLES_ADJACENCY_ARB */ GLenum OutputType; /**< GL_POINTS, GL_LINE_STRIP or GL_TRIANGLE_STRIP */ GLboolean UsesEndPrimitive; + GLboolean UsesStreams; }; @@ -2681,6 +2682,7 @@ struct gl_shader_program GLuint ClipDistanceArraySize; /**< Size of the gl_ClipDistance array, or 0 if not present. */ GLboolean UsesEndPrimitive; + GLboolean UsesStreams; } Geom; /** Vertex shader state */ diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c index 2ec2444..2bbef35 100644 --- a/src/mesa/main/shaderapi.c +++ b/src/mesa/main/shaderapi.c @@ -1888,6 +1888,7 @@ _mesa_copy_linked_program_data(gl_shader_stage type, dst_gp->OutputType = src->Geom.OutputType; dst->UsesClipDistanceOut = src->Geom.UsesClipDistance; dst_gp->UsesEndPrimitive = src->Geom.UsesEndPrimitive; + dst_gp->UsesStreams = src->Geom.UsesStreams; } break; case MESA_SHADER_FRAGMENT: { diff --git a/src/mesa/main/shaderobj.c b/src/mesa/main/shaderobj.c index b0f0bfa..03db862 100644 --- a/src/mesa/main/shaderobj.c +++ b/src/mesa/main/shaderobj.c @@ -248,6 +248,7 @@ _mesa_init_shader_program(struct gl_context *ctx, struct gl_shader_program *prog prog->Geom.VerticesOut = 0; prog->Geom.InputType = GL_TRIANGLES; prog->Geom.OutputType = GL_TRIANGLE_STRIP; + prog->Geom.UsesStreams = GL_FALSE; prog->TransformFeedback.BufferMode = GL_INTERLEAVED_ATTRIBS; diff --git a/src/mesa/program/program.c b/src/mesa/program/program.c index b7332fc..1263cea 100644 --- a/src/mesa/program/program.c +++ b/src/mesa/program/program.c @@ -552,6 +552,7 @@ _mesa_clone_program(struct gl_context *ctx, const struct gl_program *prog) gpc->InputType = gp->InputType; gpc->Invocations = gp->Invocations; gpc->OutputType = gp->OutputType; + gpc->UsesStreams = gp->UsesStreams; } break; default: -- 1.9.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev