mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 07:28:11 +02:00
nvc0/ir: avoid generating illegal instructions for compute constbuf loads
For user-supplied constbufs, fileIndex is 0. In that case, when we subtract 1, we'll end up loading from constbuf offset -16. This is illegal, and there are asserts to avoid it. Normally we'd just DCE it, but no point in generating the instructions if they're not going to be used. Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu> Acked-by: Hans de Goede <hdegoede@redhat.com> Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
This commit is contained in:
parent
4f98c94be7
commit
04ecad97ff
1 changed files with 2 additions and 1 deletions
|
|
@ -2180,11 +2180,11 @@ NVC0LoweringPass::handleLDST(Instruction *i)
|
|||
// memory.
|
||||
int8_t fileIndex = i->getSrc(0)->reg.fileIndex - 1;
|
||||
Value *ind = i->getIndirect(0, 1);
|
||||
Value *ptr = loadUboInfo64(ind, fileIndex * 16);
|
||||
|
||||
// TODO: clamp the offset to the maximum number of const buf.
|
||||
if (i->src(0).isIndirect(1)) {
|
||||
Value *offset = bld.loadImm(NULL, i->getSrc(0)->reg.data.offset + typeSizeof(i->sType));
|
||||
Value *ptr = loadUboInfo64(ind, fileIndex * 16);
|
||||
Value *length = loadUboLength32(ind, fileIndex * 16);
|
||||
Value *pred = new_LValue(func, FILE_PREDICATE);
|
||||
if (i->src(0).isIndirect(0)) {
|
||||
|
|
@ -2200,6 +2200,7 @@ NVC0LoweringPass::handleLDST(Instruction *i)
|
|||
bld.mkMov(i->getDef(0), bld.mkImm(0));
|
||||
}
|
||||
} else if (fileIndex >= 0) {
|
||||
Value *ptr = loadUboInfo64(ind, fileIndex * 16);
|
||||
if (i->src(0).isIndirect(0)) {
|
||||
bld.mkOp2(OP_ADD, TYPE_U64, ptr, ptr, i->getIndirect(0, 0));
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue