mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-24 11:30:44 +02:00
nv50: support the InstanceID system value
This commit is contained in:
parent
17b9b757b7
commit
533bf171d4
3 changed files with 25 additions and 0 deletions
|
|
@ -328,10 +328,15 @@ prog_decl(struct nv50_translation_info *ti,
|
|||
}
|
||||
break;
|
||||
case TGSI_FILE_SYSTEM_VALUE:
|
||||
/* For VP/GP inputs, they are put in s[] after the last normal input.
|
||||
* Let sysval_map reflect the order of the sysvals in s[] and fixup later.
|
||||
*/
|
||||
switch (decl->Semantic.Name) {
|
||||
case TGSI_SEMANTIC_FACE:
|
||||
break;
|
||||
case TGSI_SEMANTIC_INSTANCEID:
|
||||
ti->p->vp.attrs[2] |= NV50_3D_VP_GP_BUILTIN_ATTR_EN_INSTANCE_ID;
|
||||
ti->sysval_map[first] = 2;
|
||||
break;
|
||||
case TGSI_SEMANTIC_PRIMID:
|
||||
break;
|
||||
|
|
@ -392,6 +397,18 @@ nv50_vertprog_prepare(struct nv50_translation_info *ti)
|
|||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < TGSI_SEMANTIC_COUNT; ++i) {
|
||||
switch (ti->sysval_map[i]) {
|
||||
case 2:
|
||||
if (!(ti->p->vp.attrs[2] & NV50_3D_VP_GP_BUILTIN_ATTR_EN_VERTEX_ID))
|
||||
ti->sysval_map[i] = 1;
|
||||
ti->sysval_map[i] = (ti->sysval_map[i] - 1) + num_inputs;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (p->vp.psiz < 0x40)
|
||||
p->vp.psiz = p->out[p->vp.psiz].hw;
|
||||
|
||||
|
|
|
|||
|
|
@ -111,6 +111,7 @@ struct nv50_translation_info {
|
|||
ubyte output_file;
|
||||
ubyte input_map[PIPE_MAX_SHADER_INPUTS][4];
|
||||
ubyte output_map[PIPE_MAX_SHADER_OUTPUTS][4];
|
||||
ubyte sysval_map[TGSI_SEMANTIC_COUNT];
|
||||
ubyte interp_mode[PIPE_MAX_SHADER_INPUTS];
|
||||
int input_access[PIPE_MAX_SHADER_INPUTS][4];
|
||||
int output_access[PIPE_MAX_SHADER_OUTPUTS][4];
|
||||
|
|
|
|||
|
|
@ -1159,6 +1159,13 @@ emit_fetch(struct bld_context *bld, const struct tgsi_full_instruction *insn,
|
|||
case TGSI_FILE_PREDICATE:
|
||||
res = bld_fetch_global(bld, &bld->pvs[idx][swz]);
|
||||
break;
|
||||
case TGSI_FILE_SYSTEM_VALUE:
|
||||
res = new_value(bld->pc, bld->ti->input_file, NV_TYPE_U32);
|
||||
res->reg.id = bld->ti->sysval_map[idx];
|
||||
res = bld_insn_1(bld, NV_OP_LDA, res);
|
||||
res = bld_insn_1(bld, NV_OP_CVT, res);
|
||||
res->reg.type = NV_TYPE_F32;
|
||||
break;
|
||||
default:
|
||||
NOUVEAU_ERR("illegal/unhandled src reg file: %d\n", src->Register.File);
|
||||
abort();
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue