Mesa (master): slang: add some comments related to geometry shaders
Zack Rusin
zack at kemper.freedesktop.org
Thu Jul 8 04:26:40 UTC 2010
Module: Mesa
Branch: master
Commit: f11e25ee957549ab867fac4f17a5c61fd9172794
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=f11e25ee957549ab867fac4f17a5c61fd9172794
Author: Zack Rusin <zackr at vmware.com>
Date: Wed Jul 7 16:41:01 2010 -0400
slang: add some comments related to geometry shaders
---
src/mesa/slang/slang_codegen.c | 3 +++
src/mesa/slang/slang_link.c | 12 ++++++++++++
2 files changed, 15 insertions(+), 0 deletions(-)
diff --git a/src/mesa/slang/slang_codegen.c b/src/mesa/slang/slang_codegen.c
index b2fe5b1..8ebe298 100644
--- a/src/mesa/slang/slang_codegen.c
+++ b/src/mesa/slang/slang_codegen.c
@@ -4191,6 +4191,9 @@ _slang_gen_variable(slang_assemble_ctx * A, slang_operation *oper)
slang_variable *var = _slang_variable_locate(oper->locals, name, GL_TRUE);
slang_ir_node *n;
if (!var || !var->declared) {
+ /* Geometry shader set gl_VerticesIn at link time
+ * so we need to way with resolving this variable
+ * until then */
if (A->program->Target == MESA_GEOMETRY_PROGRAM &&
!strcmp((char*)name, "gl_VerticesIn") ){
A->UnresolvedRefs = GL_TRUE;
diff --git a/src/mesa/slang/slang_link.c b/src/mesa/slang/slang_link.c
index c89ab8b..bc2bd31 100644
--- a/src/mesa/slang/slang_link.c
+++ b/src/mesa/slang/slang_link.c
@@ -810,6 +810,12 @@ remove_extra_version_directives(GLchar *source)
}
}
+/* Returns the number of vertices per geometry shader
+ * input primitive.
+ * XXX: duplicated in Gallium in u_vertices_per_prim
+ * method. Once Mesa core will start using Gallium
+ * this should be removed
+ */
static int
vertices_per_prim(int prim)
{
@@ -865,6 +871,8 @@ concat_shaders(struct gl_shader_program *shProg, GLenum shaderType)
return NULL;
}
+ /* Geometry shader will inject definition of
+ * const int gl_VerticesIn */
if (shaderType == GL_GEOMETRY_SHADER_ARB) {
totalLen += 32;
}
@@ -883,6 +891,10 @@ concat_shaders(struct gl_shader_program *shProg, GLenum shaderType)
len += shaderLengths[i];
}
}
+ /* if it's geometry shader we need to inject definition
+ * of "const int gl_VerticesIn = X;" where X is the number
+ * of vertices per input primitive
+ */
if (shaderType == GL_GEOMETRY_SHADER_ARB) {
GLchar gs_pre[32];
GLuint num_verts = vertices_per_prim(shProg->Geom.InputType);
More information about the mesa-commit
mailing list