[Mesa-dev] [PATCH 36/46] glsl: push vertex count determination down one level
Marek Olšák
maraeo at gmail.com
Tue Jun 16 16:01:32 PDT 2015
From: Chris Forbes <chrisf at ijw.co.nz>
We have the prog here, so we don't need the caller to work this out for
us.
---
src/glsl/link_varyings.cpp | 12 ++++++------
src/glsl/link_varyings.h | 3 +--
src/glsl/linker.cpp | 13 ++++---------
3 files changed, 11 insertions(+), 17 deletions(-)
diff --git a/src/glsl/link_varyings.cpp b/src/glsl/link_varyings.cpp
index d439b62..2f7d19b 100644
--- a/src/glsl/link_varyings.cpp
+++ b/src/glsl/link_varyings.cpp
@@ -1346,9 +1346,6 @@ canonicalize_shader_io(exec_list *ir, enum ir_variable_mode io_mode)
* each of these objects that matches one of the outputs of the
* producer.
*
- * \param gs_input_vertices: if \c consumer is a geometry shader, this is the
- * number of input vertices it accepts. Otherwise zero.
- *
* When num_tfeedback_decls is nonzero, it is permissible for the consumer to
* be NULL. In this case, varying locations are assigned solely based on the
* requirements of transform feedback.
@@ -1359,8 +1356,7 @@ assign_varying_locations(struct gl_context *ctx,
struct gl_shader_program *prog,
gl_shader *producer, gl_shader *consumer,
unsigned num_tfeedback_decls,
- tfeedback_decl *tfeedback_decls,
- unsigned gs_input_vertices)
+ tfeedback_decl *tfeedback_decls)
{
varying_matches matches(ctx->Const.DisableVaryingPacking,
consumer && consumer->Stage == MESA_SHADER_FRAGMENT);
@@ -1374,6 +1370,10 @@ assign_varying_locations(struct gl_context *ctx,
NULL,
};
+ unsigned consumer_vertices = 0;
+ if (consumer && consumer->Stage == MESA_SHADER_GEOMETRY)
+ consumer_vertices = prog->Geom.VerticesIn;
+
/* Operate in a total of four passes.
*
* 1. Sort inputs / outputs into a canonical order. This is necessary so
@@ -1513,7 +1513,7 @@ assign_varying_locations(struct gl_context *ctx,
}
if (consumer) {
lower_packed_varyings(mem_ctx, slots_used, ir_var_shader_in,
- gs_input_vertices, consumer);
+ consumer_vertices, consumer);
}
}
diff --git a/src/glsl/link_varyings.h b/src/glsl/link_varyings.h
index e0d57ce..024c81d 100644
--- a/src/glsl/link_varyings.h
+++ b/src/glsl/link_varyings.h
@@ -255,8 +255,7 @@ assign_varying_locations(struct gl_context *ctx,
struct gl_shader_program *prog,
gl_shader *producer, gl_shader *consumer,
unsigned num_tfeedback_decls,
- tfeedback_decl *tfeedback_decls,
- unsigned gs_input_vertices);
+ tfeedback_decl *tfeedback_decls);
bool
check_against_output_limit(struct gl_context *ctx,
diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp
index acf6f81..5ee84fc 100644
--- a/src/glsl/linker.cpp
+++ b/src/glsl/linker.cpp
@@ -3314,8 +3314,7 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
*/
if (!assign_varying_locations(ctx, mem_ctx, prog,
NULL, prog->_LinkedShaders[first],
- num_tfeedback_decls, tfeedback_decls,
- prog->Geom.VerticesIn))
+ num_tfeedback_decls, tfeedback_decls))
goto done;
}
@@ -3326,8 +3325,7 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
*/
if (!assign_varying_locations(ctx, mem_ctx, prog,
sh, NULL,
- num_tfeedback_decls, tfeedback_decls,
- 0))
+ num_tfeedback_decls, tfeedback_decls))
goto done;
}
@@ -3355,8 +3353,7 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
NULL /* producer */,
sh /* consumer */,
0 /* num_tfeedback_decls */,
- NULL /* tfeedback_decls */,
- 0 /* gs_input_vertices */))
+ NULL /* tfeedback_decls */))
goto done;
} else
demote_shader_inputs_and_outputs(sh, ir_var_shader_in);
@@ -3372,12 +3369,10 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
gl_shader *const sh_i = prog->_LinkedShaders[i];
gl_shader *const sh_next = prog->_LinkedShaders[next];
- unsigned gs_input_vertices =
- next == MESA_SHADER_GEOMETRY ? prog->Geom.VerticesIn : 0;
if (!assign_varying_locations(ctx, mem_ctx, prog, sh_i, sh_next,
next == MESA_SHADER_FRAGMENT ? num_tfeedback_decls : 0,
- tfeedback_decls, gs_input_vertices))
+ tfeedback_decls))
goto done;
do_dead_builtin_varyings(ctx, sh_i, sh_next,
--
2.1.0
More information about the mesa-dev
mailing list