nir/spirv: Make the builtins array distinguish between in and out
This commit is contained in:
parent
d11ea76168
commit
9fe907ec79
|
@ -830,7 +830,10 @@ var_decoration_cb(struct vtn_builder *b, struct vtn_value *val, int member,
|
||||||
if (builtin == SpvBuiltInFragCoord || builtin == SpvBuiltInSamplePosition)
|
if (builtin == SpvBuiltInFragCoord || builtin == SpvBuiltInSamplePosition)
|
||||||
var->data.origin_upper_left = b->origin_upper_left;
|
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;
|
break;
|
||||||
}
|
}
|
||||||
case SpvDecorationRowMajor:
|
case SpvDecorationRowMajor:
|
||||||
|
@ -866,7 +869,11 @@ get_builtin_variable(struct vtn_builder *b,
|
||||||
const struct glsl_type *type,
|
const struct glsl_type *type,
|
||||||
SpvBuiltIn builtin)
|
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) {
|
if (!var) {
|
||||||
int location;
|
int location;
|
||||||
|
@ -880,7 +887,10 @@ get_builtin_variable(struct vtn_builder *b,
|
||||||
if (builtin == SpvBuiltInFragCoord || builtin == SpvBuiltInSamplePosition)
|
if (builtin == SpvBuiltInFragCoord || builtin == SpvBuiltInSamplePosition)
|
||||||
var->data.origin_upper_left = b->origin_upper_left;
|
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;
|
return var;
|
||||||
|
|
|
@ -172,7 +172,10 @@ struct vtn_builder {
|
||||||
/*
|
/*
|
||||||
* NIR variable for each SPIR-V builtin.
|
* 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;
|
unsigned value_id_bound;
|
||||||
struct vtn_value *values;
|
struct vtn_value *values;
|
||||||
|
|
Loading…
Reference in New Issue