From: Iago Toral Quiroga Date: Fri, 6 Jun 2014 10:31:30 +0000 (+0200) Subject: glsl: Store info about geometry shaders that emit vertices to non-zero streams. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=6d3632c9c9c58f8fe1bae26871432342ccaaaf4b;p=mesa.git glsl: Store info about geometry shaders that emit vertices to non-zero streams. 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. Reviewed-by: Ian Romanick --- diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index 5b110a7cdbf..3b472b0a1db 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 */ bool UsesEndPrimitive; + bool UsesStreams; }; @@ -2681,6 +2682,7 @@ struct gl_shader_program GLuint ClipDistanceArraySize; /**< Size of the gl_ClipDistance array, or 0 if not present. */ bool UsesEndPrimitive; + bool UsesStreams; } Geom; /** Vertex shader state */ diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c index 2ec2444daa2..2bbef35d363 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 c6e852c876c..b9feff4a404 100644 --- a/src/mesa/main/shaderobj.c +++ b/src/mesa/main/shaderobj.c @@ -249,6 +249,7 @@ _mesa_init_shader_program(struct gl_context *ctx, struct gl_shader_program *prog prog->Geom.InputType = GL_TRIANGLES; prog->Geom.OutputType = GL_TRIANGLE_STRIP; prog->Geom.UsesEndPrimitive = false; + prog->Geom.UsesStreams = false; prog->TransformFeedback.BufferMode = GL_INTERLEAVED_ATTRIBS; diff --git a/src/mesa/program/program.c b/src/mesa/program/program.c index 988def1a348..aedce3e3c5e 100644 --- a/src/mesa/program/program.c +++ b/src/mesa/program/program.c @@ -553,6 +553,7 @@ _mesa_clone_program(struct gl_context *ctx, const struct gl_program *prog) gpc->Invocations = gp->Invocations; gpc->OutputType = gp->OutputType; gpc->UsesEndPrimitive = gp->UsesEndPrimitive; + gpc->UsesStreams = gp->UsesStreams; } break; default: