nir/spirv: Make the builtins array distinguish between in and out

This commit is contained in:
Jason Ekstrand 2015-10-22 17:54:24 -07:00
parent d11ea76168
commit 9fe907ec79
2 changed files with 17 additions and 4 deletions

View File

@ -830,7 +830,10 @@ var_decoration_cb(struct vtn_builder *b, struct vtn_value *val, int member,
if (builtin == SpvBuiltInFragCoord || builtin == SpvBuiltInSamplePosition)
var->data.origin_upper_left = b->origin_upper_left;
b->builtins[dec->literals[0]] = var;
if (mode == nir_var_shader_out)
b->builtins[dec->literals[0]].out = var;
else
b->builtins[dec->literals[0]].in = var;
break;
}
case SpvDecorationRowMajor:
@ -866,7 +869,11 @@ get_builtin_variable(struct vtn_builder *b,
const struct glsl_type *type,
SpvBuiltIn builtin)
{
nir_variable *var = b->builtins[builtin];
nir_variable *var;
if (mode == nir_var_shader_out)
var = b->builtins[builtin].out;
else
var = b->builtins[builtin].in;
if (!var) {
int location;
@ -880,7 +887,10 @@ get_builtin_variable(struct vtn_builder *b,
if (builtin == SpvBuiltInFragCoord || builtin == SpvBuiltInSamplePosition)
var->data.origin_upper_left = b->origin_upper_left;
b->builtins[builtin] = var;
if (mode == nir_var_shader_out)
b->builtins[builtin].out = var;
else
b->builtins[builtin].in = var;
}
return var;

View File

@ -172,7 +172,10 @@ struct vtn_builder {
/*
* NIR variable for each SPIR-V builtin.
*/
nir_variable *builtins[42]; /* XXX need symbolic constant from SPIR-V header */
struct {
nir_variable *in;
nir_variable *out;
} builtins[42]; /* XXX need symbolic constant from SPIR-V header */
unsigned value_id_bound;
struct vtn_value *values;