diff options
author | Iago Toral Quiroga <[email protected]> | 2014-06-06 12:31:30 +0200 |
---|---|---|
committer | Iago Toral Quiroga <[email protected]> | 2014-06-30 08:08:50 +0200 |
commit | 6d3632c9c9c58f8fe1bae26871432342ccaaaf4b (patch) | |
tree | fe20b6b1117ed4fb4082e20369e7065b8934b3c3 | |
parent | 598c2e2c83447cf222f96f833569eeb0bd179871 (diff) |
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 <[email protected]>
-rw-r--r-- | src/mesa/main/mtypes.h | 2 | ||||
-rw-r--r-- | src/mesa/main/shaderapi.c | 1 | ||||
-rw-r--r-- | src/mesa/main/shaderobj.c | 1 | ||||
-rw-r--r-- | src/mesa/program/program.c | 1 |
4 files changed, 5 insertions, 0 deletions
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: |