The nouveau bits are Reviewed-by: Ilia Mirkin <imir...@alum.mit.edu>
If someone can say something non-negative-sounding about the Android.mk change, happy to push this out. [I assume there's some reason why it's part of this change.] On Fri, Jun 19, 2015 at 2:00 PM, Chih-Wei Huang <cwhu...@android-x86.org> wrote: > If build with C++11 standard, use std::unordered_set. > > Otherwise if build on old Android version with stlport, > use std::tr1::unordered_set with a wrapper class. > > Otherwise use std::tr1::unordered_set. > > Signed-off-by: Chih-Wei Huang <cwhu...@linux.org.tw> > --- > Android.common.mk | 2 +- > src/gallium/drivers/nouveau/codegen/nv50_ir.h | 8 ++-- > .../nouveau/codegen/nv50_ir_lowering_nvc0.cpp | 4 +- > .../nouveau/codegen/nv50_ir_lowering_nvc0.h | 4 +- > src/gallium/drivers/nouveau/codegen/nv50_ir_ra.cpp | 5 +-- > .../drivers/nouveau/codegen/unordered_set.h | 48 > ++++++++++++++++++++++ > 6 files changed, 58 insertions(+), 13 deletions(-) > create mode 100644 src/gallium/drivers/nouveau/codegen/unordered_set.h > > diff --git a/Android.common.mk b/Android.common.mk > index d662d60..35dcda2 100644 > --- a/Android.common.mk > +++ b/Android.common.mk > @@ -77,7 +77,7 @@ LOCAL_CFLAGS += \ > endif > > LOCAL_CPPFLAGS += \ > - $(if $(filter true,$(MESA_LOLLIPOP_BUILD)),-D_USING_LIBCXX) \ > + $(if $(filter true,$(MESA_LOLLIPOP_BUILD)),-std=c++11) \ > -Wno-error=non-virtual-dtor \ > -Wno-non-virtual-dtor > > diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir.h > b/src/gallium/drivers/nouveau/codegen/nv50_ir.h > index 529dcb9..03cd569 100644 > --- a/src/gallium/drivers/nouveau/codegen/nv50_ir.h > +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir.h > @@ -29,8 +29,8 @@ > #include <deque> > #include <list> > #include <vector> > -#include <tr1/unordered_set> > > +#include "codegen/unordered_set.h" > #include "codegen/nv50_ir_util.h" > #include "codegen/nv50_ir_graph.h" > > @@ -583,10 +583,10 @@ public: > > static inline Value *get(Iterator&); > > - std::tr1::unordered_set<ValueRef *> uses; > + unordered_set<ValueRef *> uses; > std::list<ValueDef *> defs; > - typedef std::tr1::unordered_set<ValueRef *>::iterator UseIterator; > - typedef std::tr1::unordered_set<ValueRef *>::const_iterator UseCIterator; > + typedef unordered_set<ValueRef *>::iterator UseIterator; > + typedef unordered_set<ValueRef *>::const_iterator UseCIterator; > typedef std::list<ValueDef *>::iterator DefIterator; > typedef std::list<ValueDef *>::const_iterator DefCIterator; > > diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp > b/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp > index 7a5d1ce..eccb09c 100644 > --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp > +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp > @@ -224,7 +224,7 @@ NVC0LegalizePostRA::findFirstUses( > const Instruction *texi, > const Instruction *insn, > std::list<TexUse> &uses, > - std::tr1::unordered_set<const Instruction *>& visited) > + unordered_set<const Instruction *>& visited) > { > for (int d = 0; insn->defExists(d); ++d) { > Value *v = insn->getDef(d); > @@ -323,7 +323,7 @@ NVC0LegalizePostRA::insertTextureBarriers(Function *fn) > if (!uses) > return false; > for (size_t i = 0; i < texes.size(); ++i) { > - std::tr1::unordered_set<const Instruction *> visited; > + unordered_set<const Instruction *> visited; > findFirstUses(texes[i], texes[i], uses[i], visited); > } > > diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.h > b/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.h > index 260e101..8c3dcbc 100644 > --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.h > +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.h > @@ -20,8 +20,6 @@ > * OTHER DEALINGS IN THE SOFTWARE. > */ > > -#include <tr1/unordered_set> > - > #include "codegen/nv50_ir.h" > #include "codegen/nv50_ir_build_util.h" > > @@ -73,7 +71,7 @@ private: > inline bool insnDominatedBy(const Instruction *, const Instruction *) > const; > void findFirstUses(const Instruction *tex, const Instruction *def, > std::list<TexUse>&, > - std::tr1::unordered_set<const Instruction *>&); > + unordered_set<const Instruction *>&); > void findOverwritingDefs(const Instruction *tex, Instruction *insn, > const BasicBlock *term, > std::list<TexUse>&); > diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_ra.cpp > b/src/gallium/drivers/nouveau/codegen/nv50_ir_ra.cpp > index 898653c..219d5f1 100644 > --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_ra.cpp > +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_ra.cpp > @@ -25,7 +25,6 @@ > > #include <stack> > #include <limits> > -#include <tr1/unordered_set> > > namespace nv50_ir { > > @@ -1551,7 +1550,7 @@ SpillCodeInserter::run(const std::list<ValuePair>& lst) > // Keep track of which instructions to delete later. Deleting them > // inside the loop is unsafe since a single instruction may have > // multiple destinations that all need to be spilled (like OP_SPLIT). > - std::tr1::unordered_set<Instruction *> to_del; > + unordered_set<Instruction *> to_del; > > for (Value::DefIterator d = lval->defs.begin(); d != lval->defs.end(); > ++d) { > @@ -1593,7 +1592,7 @@ SpillCodeInserter::run(const std::list<ValuePair>& lst) > } > } > > - for (std::tr1::unordered_set<Instruction *>::const_iterator it = > to_del.begin(); > + for (unordered_set<Instruction *>::const_iterator it = to_del.begin(); > it != to_del.end(); ++it) > delete_Instruction(func->getProgram(), *it); > } > diff --git a/src/gallium/drivers/nouveau/codegen/unordered_set.h > b/src/gallium/drivers/nouveau/codegen/unordered_set.h > new file mode 100644 > index 0000000..8ef6d46 > --- /dev/null > +++ b/src/gallium/drivers/nouveau/codegen/unordered_set.h > @@ -0,0 +1,48 @@ > +#ifndef __NV50_UNORDERED_SET_H__ > +#define __NV50_UNORDERED_SET_H__ > + > +#if (__cplusplus >= 201103L) || defined(ANDROID) > +#include <unordered_set> > +#else > +#include <tr1/unordered_set> > +#endif > + > +namespace nv50_ir { > + > +#if __cplusplus >= 201103L > +using std::unordered_set; > +#elif !defined(ANDROID) > +using std::tr1::unordered_set; > +#else // Android release before lollipop > +using std::isfinite; > +typedef std::tr1::unordered_set<void *> voidptr_unordered_set; > + > +template <typename V> > +class unordered_set : public voidptr_unordered_set { > + public: > + typedef voidptr_unordered_set _base; > + typedef _base::iterator _biterator; > + typedef _base::const_iterator const_biterator; > + > + class iterator : public _biterator { > + public: > + iterator(const _biterator & i) : _biterator(i) {} > + V operator*() const { return > reinterpret_cast<V>(*_biterator(*this)); } > + }; > + class const_iterator : public const_biterator { > + public: > + const_iterator(const iterator & i) : const_biterator(i) {} > + const_iterator(const const_biterator & i) : const_biterator(i) {} > + const V operator*() const { return reinterpret_cast<const > V>(*const_biterator(*this)); } > + }; > + > + iterator begin() { return _base::begin(); } > + iterator end() { return _base::end(); } > + const_iterator begin() const { return _base::begin(); } > + const_iterator end() const { return _base::end(); } > +}; > +#endif > + > +} // namespace nv50_ir > + > +#endif // __NV50_UNORDERED_SET_H__ > -- > 1.9.1 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev