vc4: Refactor shader input setup again.

This makes some space for handling special inputs like fragcoords.
This commit is contained in:
Eric Anholt 2014-08-05 14:23:40 -07:00
parent a7faca5d27
commit d34fbdda12
1 changed files with 24 additions and 17 deletions

View File

@ -569,6 +569,24 @@ emit_vertex_input(struct tgsi_to_qir *trans, int attr)
}
}
static void
emit_fragment_input(struct tgsi_to_qir *trans, int attr)
{
struct qcompile *c = trans->c;
for (int i = 0; i < 4; i++) {
struct qreg vary = {
QFILE_VARY,
attr * 4 + i
};
/* XXX: multiply by W */
trans->inputs[attr * 4 + i] =
qir_VARY_ADD_C(c, qir_MOV(c, vary));
c->num_inputs++;
}
}
static void
emit_tgsi_declaration(struct tgsi_to_qir *trans,
struct tgsi_full_declaration *decl)
@ -577,23 +595,12 @@ emit_tgsi_declaration(struct tgsi_to_qir *trans,
switch (decl->Declaration.File) {
case TGSI_FILE_INPUT:
if (c->stage == QSTAGE_FRAG) {
for (int i = decl->Range.First * 4;
i < (decl->Range.Last + 1) * 4;
i++) {
struct qreg vary = {
QFILE_VARY,
i
};
trans->inputs[i] =
qir_VARY_ADD_C(c, qir_MOV(c, vary));
c->num_inputs++;
}
} else {
for (int i = decl->Range.First;
i <= decl->Range.Last;
i++) {
for (int i = decl->Range.First;
i <= decl->Range.Last;
i++) {
if (c->stage == QSTAGE_FRAG) {
emit_fragment_input(trans, i);
} else {
emit_vertex_input(trans, i);
}
}