diff options
Diffstat (limited to 'src/gallium')
-rw-r--r-- | src/gallium/drivers/nv50/codegen/nv50_ir.cpp | 19 | ||||
-rw-r--r-- | src/gallium/drivers/nv50/codegen/nv50_ir.h | 5 |
2 files changed, 24 insertions, 0 deletions
diff --git a/src/gallium/drivers/nv50/codegen/nv50_ir.cpp b/src/gallium/drivers/nv50/codegen/nv50_ir.cpp index cdf0a133e50..d80fc85126a 100644 --- a/src/gallium/drivers/nv50/codegen/nv50_ir.cpp +++ b/src/gallium/drivers/nv50/codegen/nv50_ir.cpp @@ -268,6 +268,16 @@ LValue::clone(ClonePolicy<Function>& pol) const return that; } +bool +LValue::isUniform() const +{ + if (defs.size() > 1) + return false; + Instruction *insn = getInsn(); + // let's not try too hard here for now ... + return !insn->srcExists(1) && insn->getSrc(0)->isUniform(); +} + Symbol::Symbol(Program *prog, DataFile f, ubyte fidx) { baseSym = NULL; @@ -297,6 +307,15 @@ Symbol::clone(ClonePolicy<Function>& pol) const return that; } +bool +Symbol::isUniform() const +{ + return + reg.file != FILE_SYSTEM_VALUE && + reg.file != FILE_MEMORY_LOCAL && + reg.file != FILE_SHADER_INPUT; +} + ImmediateValue::ImmediateValue(Program *prog, uint32_t uval) { memset(®, 0, sizeof(reg)); diff --git a/src/gallium/drivers/nv50/codegen/nv50_ir.h b/src/gallium/drivers/nv50/codegen/nv50_ir.h index a52cc9a212f..c0a867d9552 100644 --- a/src/gallium/drivers/nv50/codegen/nv50_ir.h +++ b/src/gallium/drivers/nv50/codegen/nv50_ir.h @@ -460,6 +460,7 @@ public: virtual bool equals(const Value *, bool strict = false) const; virtual bool interfers(const Value *) const; + virtual bool isUniform() const { return true; } inline Value *rep() const { return join; } @@ -500,6 +501,8 @@ public: LValue(Function *, LValue *); ~LValue() { } + virtual bool isUniform() const; + virtual LValue *clone(ClonePolicy<Function>&) const; virtual int print(char *, size_t, DataType ty = TYPE_NONE) const; @@ -522,6 +525,8 @@ public: virtual bool equals(const Value *that, bool strict) const; + virtual bool isUniform() const; + virtual int print(char *, size_t, DataType ty = TYPE_NONE) const; // print with indirect values |