mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 11:38:05 +02:00
nvc0/ir: output base for reading is based on laneid
PFETCH retrieves the address for incoming vertices, not output vertices in TCS. For output vertices, we must use the laneid as a base. Fixes barrier piglit test, which was failing for entirely non-barrier reasons, but rather that it was (a) trying to draw multiple patches and (b) the incoming patch size was not the same as the outgoing patch size. Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
This commit is contained in:
parent
e42d2948d3
commit
ad75620863
1 changed files with 25 additions and 0 deletions
|
|
@ -1296,6 +1296,7 @@ private:
|
|||
|
||||
Value *shiftAddress(Value *);
|
||||
Value *getVertexBase(int s);
|
||||
Value *getOutputBase(int s);
|
||||
DataArray *getArrayForFile(unsigned file, int idx);
|
||||
Value *fetchSrc(int s, int c);
|
||||
Value *acquireDst(int d, int c);
|
||||
|
|
@ -1525,6 +1526,28 @@ Converter::getVertexBase(int s)
|
|||
return vtxBase[s];
|
||||
}
|
||||
|
||||
Value *
|
||||
Converter::getOutputBase(int s)
|
||||
{
|
||||
assert(s < 5);
|
||||
if (!(vtxBaseValid & (1 << s))) {
|
||||
Value *offset = loadImm(NULL, tgsi.getSrc(s).getIndex(1));
|
||||
if (tgsi.getSrc(s).isIndirect(1))
|
||||
offset = mkOp2v(OP_ADD, TYPE_U32, getSSA(),
|
||||
fetchSrc(tgsi.getSrc(s).getIndirect(1), 0, NULL),
|
||||
offset);
|
||||
vtxBaseValid |= 1 << s;
|
||||
vtxBase[s] = mkOp2v(
|
||||
OP_ADD, TYPE_U32, getSSA(),
|
||||
mkOp2v(
|
||||
OP_SUB, TYPE_U32, getSSA(),
|
||||
mkOp1v(OP_RDSV, TYPE_U32, getSSA(), mkSysVal(SV_LANEID, 0)),
|
||||
mkOp1v(OP_RDSV, TYPE_U32, getSSA(), mkSysVal(SV_INVOCATION_ID, 0))),
|
||||
offset);
|
||||
}
|
||||
return vtxBase[s];
|
||||
}
|
||||
|
||||
Value *
|
||||
Converter::fetchSrc(int s, int c)
|
||||
{
|
||||
|
|
@ -1539,6 +1562,8 @@ Converter::fetchSrc(int s, int c)
|
|||
if (src.is2D()) {
|
||||
switch (src.getFile()) {
|
||||
case TGSI_FILE_OUTPUT:
|
||||
dimRel = getOutputBase(s);
|
||||
break;
|
||||
case TGSI_FILE_INPUT:
|
||||
dimRel = getVertexBase(s);
|
||||
break;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue