LGTM, thanks.
> -----Original Message----- > From: Beignet [mailto:[email protected]] On Behalf Of > Zhigang Gong > Sent: Monday, March 16, 2015 09:42 > To: [email protected] > Cc: Gong, Zhigang > Subject: [Beignet] [PATCH] GBE: fix an image related bugs. > > The bug was introduces when we removed the hacky invalid register. Now > we will not pass in a fixed count of coordinates for the typed_write > instruction. > > Signed-off-by: Zhigang Gong <[email protected]> > --- > backend/src/backend/gen_insn_selection.cpp | 13 +++++++------ > backend/src/ir/instruction.cpp | 28 +++++++++++++++++----------- > 2 files changed, 24 insertions(+), 17 deletions(-) > > diff --git a/backend/src/backend/gen_insn_selection.cpp > b/backend/src/backend/gen_insn_selection.cpp > index 2b166b1..c240261 100644 > --- a/backend/src/backend/gen_insn_selection.cpp > +++ b/backend/src/backend/gen_insn_selection.cpp > @@ -4411,19 +4411,20 @@ namespace gbe > msgs[i] = sel.selReg(sel.reg(FAMILY_DWORD), TYPE_U32); > } else { > uint32_t valueID = 0; > - msgs[0] = sel.selReg(sel.reg(FAMILY_DWORD), TYPE_U32); > - for(uint32_t msgID = 1; msgID < 1 + dim; msgID++, valueID++) > + uint32_t msgID = 0; > + msgs[msgID++] = sel.selReg(sel.reg(FAMILY_DWORD), TYPE_U32); > + for(; msgID < 1 + dim; msgID++, valueID++) > msgs[msgID] = sel.selReg(insn.getSrc(msgID - 1), > insn.getCoordType()); > > // fake v. > if (dim < 2) > - msgs[2] = sel.selReg(sel.reg(FAMILY_DWORD), TYPE_U32); > + msgs[msgID++] = sel.selReg(sel.reg(FAMILY_DWORD), TYPE_U32); > // fake w. > if (dim < 3) > - msgs[3] = sel.selReg(sel.reg(FAMILY_DWORD), TYPE_U32); > + msgs[msgID++] = sel.selReg(sel.reg(FAMILY_DWORD), TYPE_U32); > // LOD. > - msgs[4] = sel.selReg(sel.reg(FAMILY_DWORD), TYPE_U32); > - for(uint32_t msgID = dim + 2; valueID < insn.getSrcNum(); msgID++, > valueID++) > + msgs[msgID++] = sel.selReg(sel.reg(FAMILY_DWORD), TYPE_U32); > + for(; valueID < insn.getSrcNum(); msgID++, valueID++) > msgs[msgID] = sel.selReg(insn.getSrc(valueID), insn.getSrcType()); > } > > diff --git a/backend/src/ir/instruction.cpp b/backend/src/ir/instruction.cpp > index a2bc875..797552f 100644 > --- a/backend/src/ir/instruction.cpp > +++ b/backend/src/ir/instruction.cpp > @@ -522,10 +522,13 @@ namespace ir { > this->outOpcode(out); > out << "." << this->getDstType() > << "." << this->getSrcType() > - << " surface id " << (int)this->getImageIndex() > - << " coord u %" << this->getSrc(fn, 0) > - << " coord v %" << this->getSrc(fn, 1) > - << " coord w %" << this->getSrc(fn, 2) > + << " surface id " << (int)this->getImageIndex(); > + out << " coord u %" << this->getSrc(fn, 0); > + if (srcNum >= 2) > + out << " coord v %" << this->getSrc(fn, 1); > + if (srcNum >= 3) > + out << " coord w %" << this->getSrc(fn, 2); > + out > << " %" << this->getDst(fn, 0) > << " %" << this->getDst(fn, 1) > << " %" << this->getDst(fn, 2) @@ -567,15 +570,18 @@ namespace > ir { > INLINE bool wellFormed(const Function &fn, std::string &why) const; > INLINE void out(std::ostream &out, const Function &fn) const { > this->outOpcode(out); > + uint32_t srcID = 0; > out << "." << this->getSrcType() > << " surface id " << (int)this->getImageIndex() > - << " coord u %" << this->getSrc(fn, 0) > - << " coord v %" << this->getSrc(fn, 1) > - << " coord w %" << this->getSrc(fn, 2) > - << " %" << this->getSrc(fn, 3) > - << " %" << this->getSrc(fn, 4) > - << " %" << this->getSrc(fn, 5) > - << " %" << this->getSrc(fn, 6); > + << " coord u %" << this->getSrc(fn, srcID++); > + if (srcNum >= 6) > + out << " coord v %" << this->getSrc(fn, srcID++); > + if (srcNum >= 7) > + out << " coord w %" << this->getSrc(fn, srcID++); > + out << " %" << this->getSrc(fn, srcID++); > + out << " %" << this->getSrc(fn, srcID++); > + out << " %" << this->getSrc(fn, srcID++); > + out << " %" << this->getSrc(fn, srcID++); > } > > Tuple src; > -- > 1.9.1 > > _______________________________________________ > Beignet mailing list > [email protected] > http://lists.freedesktop.org/mailman/listinfo/beignet _______________________________________________ Beignet mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/beignet
