nv50/ir/tgsi: generate UCPs with actual outputs instead of SVs
gl_ClipDistance is treated the same way, this is just nicer and easier assign slots for them on nv50.
This commit is contained in:
parent
d07e4421ab
commit
ce04221081
|
@ -700,9 +700,18 @@ bool Source::scanSource()
|
|||
if (mainTempsInLMem)
|
||||
info->bin.tlsSpace += (scan.file_max[TGSI_FILE_TEMPORARY] + 1) * 16;
|
||||
|
||||
if (info->io.genUserClip > 0)
|
||||
if (info->io.genUserClip > 0) {
|
||||
info->io.clipDistanceMask = (1 << info->io.genUserClip) - 1;
|
||||
|
||||
for (unsigned int n = 0; n < ((info->io.genUserClip + 3) / 4); ++n) {
|
||||
unsigned int i = info->numOutputs++;
|
||||
info->out[i].id = i;
|
||||
info->out[i].sn = TGSI_SEMANTIC_CLIPDIST;
|
||||
info->out[i].si = n;
|
||||
info->out[i].mask = info->io.clipDistanceMask >> (n * 4);
|
||||
}
|
||||
}
|
||||
|
||||
return info->assignSlots(info) == 0;
|
||||
}
|
||||
|
||||
|
@ -2234,7 +2243,7 @@ void
|
|||
Converter::handleUserClipPlanes()
|
||||
{
|
||||
Value *res[8];
|
||||
int i, c;
|
||||
int n, i, c;
|
||||
|
||||
for (c = 0; c < 4; ++c) {
|
||||
for (i = 0; i < info->io.genUserClip; ++i) {
|
||||
|
@ -2248,8 +2257,15 @@ Converter::handleUserClipPlanes()
|
|||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < info->io.genUserClip; ++i)
|
||||
mkOp2(OP_WRSV, TYPE_F32, NULL, mkSysVal(SV_CLIP_DISTANCE, i), res[i]);
|
||||
const int first = info->numOutputs - (info->io.genUserClip + 3) / 4;
|
||||
|
||||
for (i = 0; i < info->io.genUserClip; ++i) {
|
||||
n = i / 4 + first;
|
||||
c = i % 4;
|
||||
Symbol *sym =
|
||||
mkSymbol(FILE_SHADER_OUTPUT, 0, TYPE_F32, info->out[n].slot[c] * 4);
|
||||
mkStore(OP_EXPORT, TYPE_F32, sym, NULL, res[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
Loading…
Reference in New Issue