aboutsummaryrefslogtreecommitdiffstats
path: root/src/gallium
diff options
context:
space:
mode:
authorChristoph Bumiller <[email protected]>2012-04-14 21:30:52 +0200
committerChristoph Bumiller <[email protected]>2012-04-14 21:54:03 +0200
commita765d7880f80d01be261a5d1f4b356a2b6fcfaad (patch)
tree20e77111a5b11c0ffc9771ed8b78b5ba255aa30c /src/gallium
parente43a3a66a9d8a99021d76ff4d07dec7b8cfd62ca (diff)
nv50/ir: add isUniform query to Values
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/drivers/nv50/codegen/nv50_ir.cpp19
-rw-r--r--src/gallium/drivers/nv50/codegen/nv50_ir.h5
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(&reg, 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