glsl/linker: Pass name and type through to create_shader_variable()

No functional change here, but this now lets us recurse throught structs
in add_shader_variable().
Signed-off-by: default avatarKristian Høgsberg Kristensen <kristian.h.kristensen@intel.com>
Reviewed-by: default avatarKenneth Graunke <kenneth@whitecape.org>
parent 09f01215
...@@ -3518,8 +3518,9 @@ build_stageref(struct gl_shader_program *shProg, const char *name, ...@@ -3518,8 +3518,9 @@ build_stageref(struct gl_shader_program *shProg, const char *name,
*/ */
static gl_shader_variable * static gl_shader_variable *
create_shader_variable(struct gl_shader_program *shProg, create_shader_variable(struct gl_shader_program *shProg,
const ir_variable *in, bool use_implicit_location, const ir_variable *in,
int location) const char *name, const glsl_type *type,
bool use_implicit_location, int location)
{ {
gl_shader_variable *out = ralloc(shProg, struct gl_shader_variable); gl_shader_variable *out = ralloc(shProg, struct gl_shader_variable);
if (!out) if (!out)
...@@ -3532,7 +3533,7 @@ create_shader_variable(struct gl_shader_program *shProg, ...@@ -3532,7 +3533,7 @@ create_shader_variable(struct gl_shader_program *shProg,
in->data.location == SYSTEM_VALUE_VERTEX_ID_ZERO_BASE) { in->data.location == SYSTEM_VALUE_VERTEX_ID_ZERO_BASE) {
out->name = ralloc_strdup(shProg, "gl_VertexID"); out->name = ralloc_strdup(shProg, "gl_VertexID");
} else { } else {
out->name = ralloc_strdup(shProg, in->name); out->name = ralloc_strdup(shProg, name);
} }
if (!out->name) if (!out->name)
...@@ -3560,7 +3561,7 @@ create_shader_variable(struct gl_shader_program *shProg, ...@@ -3560,7 +3561,7 @@ create_shader_variable(struct gl_shader_program *shProg,
out->location = location; out->location = location;
} }
out->type = in->type; out->type = type;
out->index = in->data.index; out->index = in->data.index;
out->patch = in->data.patch; out->patch = in->data.patch;
out->mode = in->data.mode; out->mode = in->data.mode;
...@@ -3571,10 +3572,12 @@ create_shader_variable(struct gl_shader_program *shProg, ...@@ -3571,10 +3572,12 @@ create_shader_variable(struct gl_shader_program *shProg,
static bool static bool
add_shader_variable(struct gl_shader_program *shProg, unsigned stage_mask, add_shader_variable(struct gl_shader_program *shProg, unsigned stage_mask,
GLenum programInterface, ir_variable *var, GLenum programInterface, ir_variable *var,
const char *name, const glsl_type *type,
bool use_implicit_location, int location) bool use_implicit_location, int location)
{ {
gl_shader_variable *sha_v = gl_shader_variable *sha_v =
create_shader_variable(shProg, var, use_implicit_location, location); create_shader_variable(shProg, var, name, type,
use_implicit_location, location);
if (!sha_v) if (!sha_v)
return false; return false;
...@@ -3630,7 +3633,7 @@ add_interface_variables(struct gl_shader_program *shProg, ...@@ -3630,7 +3633,7 @@ add_interface_variables(struct gl_shader_program *shProg,
(stage == MESA_SHADER_FRAGMENT && var->data.mode == ir_var_shader_out); (stage == MESA_SHADER_FRAGMENT && var->data.mode == ir_var_shader_out);
if (!add_shader_variable(shProg, 1 << stage, programInterface, if (!add_shader_variable(shProg, 1 << stage, programInterface,
var, vs_input_or_fs_output, var, var->name, var->type, vs_input_or_fs_output,
var->data.location - loc_bias)) var->data.location - loc_bias))
return false; return false;
} }
...@@ -3664,7 +3667,7 @@ add_packed_varyings(struct gl_shader_program *shProg, int stage, GLenum type) ...@@ -3664,7 +3667,7 @@ add_packed_varyings(struct gl_shader_program *shProg, int stage, GLenum type)
const int stage_mask = const int stage_mask =
build_stageref(shProg, var->name, var->data.mode); build_stageref(shProg, var->name, var->data.mode);
if (!add_shader_variable(shProg, stage_mask, if (!add_shader_variable(shProg, stage_mask,
iface, var, false, iface, var, var->name, var->type, false,
var->data.location - VARYING_SLOT_VAR0)) var->data.location - VARYING_SLOT_VAR0))
return false; return false;
} }
...@@ -3688,8 +3691,8 @@ add_fragdata_arrays(struct gl_shader_program *shProg) ...@@ -3688,8 +3691,8 @@ add_fragdata_arrays(struct gl_shader_program *shProg)
if (!add_shader_variable(shProg, if (!add_shader_variable(shProg,
1 << MESA_SHADER_FRAGMENT, 1 << MESA_SHADER_FRAGMENT,
GL_PROGRAM_OUTPUT, var, true, GL_PROGRAM_OUTPUT, var, var->name, var->type,
var->data.location - FRAG_RESULT_DATA0)) true, var->data.location - FRAG_RESULT_DATA0))
return false; return false;
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment