glsl: push vertex count determination down one level
We have the prog here, so we don't need the caller to work this out for us. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
567f1b2ee8
commit
0e94f350ee
|
@ -1356,9 +1356,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.
|
||||
|
@ -1369,8 +1366,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);
|
||||
|
@ -1384,6 +1380,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
|
||||
|
@ -1523,7 +1523,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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -3420,8 +3420,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;
|
||||
}
|
||||
|
||||
|
@ -3432,8 +3431,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;
|
||||
}
|
||||
|
||||
|
@ -3461,8 +3459,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);
|
||||
|
@ -3478,12 +3475,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,
|
||||
|
|
Loading…
Reference in New Issue