summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIago Toral Quiroga <[email protected]>2014-06-06 12:31:30 +0200
committerIago Toral Quiroga <[email protected]>2014-06-30 08:08:50 +0200
commit6d3632c9c9c58f8fe1bae26871432342ccaaaf4b (patch)
treefe20b6b1117ed4fb4082e20369e7065b8934b3c3
parent598c2e2c83447cf222f96f833569eeb0bd179871 (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.h2
-rw-r--r--src/mesa/main/shaderapi.c1
-rw-r--r--src/mesa/main/shaderobj.c1
-rw-r--r--src/mesa/program/program.c1
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: