summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorbin Simpson <MostAwesomeDude@gmail.com>2009-10-15 16:05:27 -0700
committerCorbin Simpson <MostAwesomeDude@gmail.com>2009-10-15 16:05:27 -0700
commit0bb7c6458d84dbe88d3002721347471bb61c1373 (patch)
tree046e80c9554094ad05043aebc9f2e6e10577b496
parent3011de86c1f41677180bcd205fee7c379e76318d (diff)
Kill EnumEntry and force ordering upon the emitted enum values.HEADmaster
-rw-r--r--r300reg.xml136
-rwxr-xr-xradeonreg.py86
2 files changed, 100 insertions, 122 deletions
diff --git a/r300reg.xml b/r300reg.xml
index 13d2da4..f00d2d1 100644
--- a/r300reg.xml
+++ b/r300reg.xml
@@ -675,42 +675,42 @@ xsi:schemaLocation="rules-ng.xsd">
</value>
</enum>
<enum name="ENUM73">
- <value name="C" value="0">
- <doc>C</doc>
- </value>
<value name="1ST_TEXTURE_COMPONENT" value="0">
<doc>1st texture component</doc>
</value>
- <value name="C" value="1">
+ <value name="C" value="0">
<doc>C</doc>
</value>
+ <value name="THE_VALUE_0" value="0">
+ <doc>The value 0.0</doc>
+ </value>
<value name="2ND_TEXTURE_COMPONENT" value="1">
<doc>2nd texture component</doc>
</value>
- <value name="C" value="2">
+ <value name="C" value="1">
<doc>C</doc>
</value>
+ <value name="THE_VALUE_1" value="1">
+ <doc>The value 1.0</doc>
+ </value>
<value name="3RD_TEXTURE_COMPONENT" value="2">
<doc>3rd texture component</doc>
</value>
- <value name="C" value="3">
+ <value name="C" value="2">
<doc>C</doc>
</value>
<value name="4TH_TEXTURE_COMPONENT" value="3">
<doc>4th texture component</doc>
</value>
+ <value name="C" value="3">
+ <doc>C</doc>
+ </value>
<value name="K" value="4">
<doc>K</doc>
</value>
- <value name="THE_VALUE_0" value="0">
- <doc>The value 0.0</doc>
- </value>
<value name="K" value="5">
<doc>K</doc>
</value>
- <value name="THE_VALUE_1" value="1">
- <doc>The value 1.0</doc>
- </value>
</enum>
<enum name="ENUM74">
<value name="L" value="0">
@@ -1545,16 +1545,10 @@ xsi:schemaLocation="rules-ng.xsd">
</value>
</enum>
<enum name="ENUM185">
- <value name="255" value="0">
- <doc>255.0) 0 1 0.</doc>
- </value>
<value name="1" value="0">
<doc>1.0 1 0 -2^(n-1) - (2^(n-1) - 1) (i.e. 8-bit -&gt;
-128.</doc>
</value>
- <value name="127" value="0">
- <doc>127.0) 1 1 -1.</doc>
- </value>
<value name="1" value="0">
<doc>1.0 where n is the number of bits in the associated
fixed point value For signed, normalize conversion, since the
@@ -1562,6 +1556,12 @@ xsi:schemaLocation="rules-ng.xsd">
are 3 different methods supported by R300. See the
VAP_PSC_SGN_NORM_CNTL description for details.</doc>
</value>
+ <value name="127" value="0">
+ <doc>127.0) 1 1 -1.</doc>
+ </value>
+ <value name="255" value="0">
+ <doc>255.0) 0 1 0.</doc>
+ </value>
</enum>
<enum name="ENUM187">
<value name="HIERARCHICAL_Z_DISABLED" value="0">
@@ -5068,6 +5068,12 @@ xsi:schemaLocation="rules-ng.xsd">
<value name="OP_MIN" value="2">
<doc>OP_MIN: Result = min(A,B)</doc>
</value>
+ <value name="RESULT" value="2">
+ <doc>Result = 2^^A</doc>
+ </value>
+ <value name="RESULT" value="2">
+ <doc>Result = log2(A)</doc>
+ </value>
<value name="OP_MAX" value="3">
<doc>OP_MAX: Result = max(A,B)</doc>
</value>
@@ -5084,15 +5090,9 @@ xsi:schemaLocation="rules-ng.xsd">
<value name="OP_EX" value="8">
<doc>OP_EX</doc>
</value>
- <value name="RESULT" value="2">
- <doc>Result = 2^^A</doc>
- </value>
<value name="OP_LN" value="9">
<doc>OP_LN</doc>
</value>
- <value name="RESULT" value="2">
- <doc>Result = log2(A)</doc>
- </value>
<value name="OP_RCP" value="10">
<doc>OP_RCP: Result = 1/A</doc>
</value>
@@ -5197,22 +5197,22 @@ xsi:schemaLocation="rules-ng.xsd">
<value name="OP_DP" value="1">
<doc>OP_DP</doc>
</value>
- <value name="RESULT" value="3">
- <doc>Result = A.r*B.r + A.g*B.g + A.b*B.b</doc>
- </value>
<value name="OP_DP" value="2">
<doc>OP_DP</doc>
</value>
- <value name="RESULT" value="4">
- <doc>Result = A.r*B.r + A.g*B.g + A.b*B.b +
- A.a*B.a</doc>
- </value>
<value name="OP_D2A" value="3">
<doc>OP_D2A: Result = A.r*B.r + A.g*B.g + C.b</doc>
</value>
+ <value name="RESULT" value="3">
+ <doc>Result = A.r*B.r + A.g*B.g + A.b*B.b</doc>
+ </value>
<value name="OP_MIN" value="4">
<doc>OP_MIN: Result = min(A,B)</doc>
</value>
+ <value name="RESULT" value="4">
+ <doc>Result = A.r*B.r + A.g*B.g + A.b*B.b +
+ A.a*B.a</doc>
+ </value>
<value name="OP_MAX" value="5">
<doc>OP_MAX: Result = max(A,B)</doc>
</value>
@@ -5415,12 +5415,12 @@ xsi:schemaLocation="rules-ng.xsd">
<value name="W" value="1">
<doc>W</doc>
</value>
- <value name="24" value="24">
- <doc>24-bit fixed point</doc>
- </value>
<value name="W24_FP" value="2">
<doc>W24_FP - 24-bit floating point</doc>
</value>
+ <value name="24" value="24">
+ <doc>24-bit fixed point</doc>
+ </value>
</bitfield>
<doc>Format for W</doc>
<bitfield high="2" low="2" name="W_SRC">
@@ -7435,20 +7435,20 @@ xsi:schemaLocation="rules-ng.xsd">
<bitfield high="7" low="6" name="PIPE3_ID" />
<doc>Maps physical pipe 3 to logical pipe ID (def 3).</doc>
<bitfield high="11" low="8" name="PIPE_MASK">
- <value name="P3" value="3">
- <doc>P3, B</doc>
+ <value name="DISABLED" value="0">
+ <doc>disabled</doc>
</value>
- <value name="P2" value="2">
- <doc>P2, B</doc>
+ <value name="P0" value="0">
+ <doc>P0. -- 1: enabled,</doc>
</value>
<value name="P1" value="1">
<doc>P1, B</doc>
</value>
- <value name="P0" value="0">
- <doc>P0. -- 1: enabled,</doc>
+ <value name="P2" value="2">
+ <doc>P2, B</doc>
</value>
- <value name="DISABLED" value="0">
- <doc>disabled</doc>
+ <value name="P3" value="3">
+ <doc>P3, B</doc>
</value>
</bitfield>
<doc>4b mask, indicates which physical pipes are enabled (def
@@ -7458,14 +7458,8 @@ xsi:schemaLocation="rules-ng.xsd">
<doc>2b, indicates, by the fuses, the max number of allowed
pipes. 0 = 1 pipe ... 3 = 4 pipes -- Read Only</doc>
<bitfield high="17" low="14" name="BAD_PIPES">
- <value name="P3" value="3">
- <doc>P3, B</doc>
- </value>
- <value name="P2" value="2">
- <doc>P2, B</doc>
- </value>
- <value name="P1" value="1">
- <doc>P1, B</doc>
+ <value name="GOOD" value="0">
+ <doc>good -- Read Only</doc>
</value>
<value name="P0" value="0">
<doc>P0 --</doc>
@@ -7473,8 +7467,14 @@ xsi:schemaLocation="rules-ng.xsd">
<value name="BAD" value="1">
<doc>bad,</doc>
</value>
- <value name="GOOD" value="0">
- <doc>good -- Read Only</doc>
+ <value name="P1" value="1">
+ <doc>P1, B</doc>
+ </value>
+ <value name="P2" value="2">
+ <doc>P2, B</doc>
+ </value>
+ <value name="P3" value="3">
+ <doc>P3, B</doc>
</value>
</bitfield>
<doc>4b, indicates, by the fuses, the bad pipes: B3=P3,
@@ -8598,6 +8598,12 @@ xsi:schemaLocation="rules-ng.xsd">
<value name="OP_MIN" value="2">
<doc>OP_MIN: Result = min(A,B)</doc>
</value>
+ <value name="RESULT" value="2">
+ <doc>Result = 2^^A</doc>
+ </value>
+ <value name="RESULT" value="2">
+ <doc>Result = log2(A)</doc>
+ </value>
<value name="OP_MAX" value="3">
<doc>OP_MAX: Result = max(A,B)</doc>
</value>
@@ -8614,15 +8620,9 @@ xsi:schemaLocation="rules-ng.xsd">
<value name="OP_EX" value="8">
<doc>OP_EX</doc>
</value>
- <value name="RESULT" value="2">
- <doc>Result = 2^^A</doc>
- </value>
<value name="OP_LN" value="9">
<doc>OP_LN</doc>
</value>
- <value name="RESULT" value="2">
- <doc>Result = log2(A)</doc>
- </value>
<value name="OP_RCP" value="10">
<doc>OP_RCP: Result = 1/A</doc>
</value>
@@ -8806,22 +8806,22 @@ xsi:schemaLocation="rules-ng.xsd">
<value name="OP_DP" value="1">
<doc>OP_DP</doc>
</value>
- <value name="RESULT" value="3">
- <doc>Result = A.r*B.r + A.g*B.g + A.b*B.b</doc>
- </value>
<value name="OP_DP" value="2">
<doc>OP_DP</doc>
</value>
- <value name="RESULT" value="4">
- <doc>Result = A.r*B.r + A.g*B.g + A.b*B.b +
- A.a*B.a</doc>
- </value>
<value name="OP_D2A" value="3">
<doc>OP_D2A: Result = A.r*B.r + A.g*B.g + C.b</doc>
</value>
+ <value name="RESULT" value="3">
+ <doc>Result = A.r*B.r + A.g*B.g + A.b*B.b</doc>
+ </value>
<value name="OP_MIN" value="4">
<doc>OP_MIN: Result = min(A,B)</doc>
</value>
+ <value name="RESULT" value="4">
+ <doc>Result = A.r*B.r + A.g*B.g + A.b*B.b +
+ A.a*B.a</doc>
+ </value>
<value name="OP_MAX" value="5">
<doc>OP_MAX: Result = max(A,B)</doc>
</value>
@@ -9899,9 +9899,6 @@ xsi:schemaLocation="rules-ng.xsd">
<value name="W" value="1">
<doc>W</doc>
</value>
- <value name="24" value="24">
- <doc>24-bit fixed point</doc>
- </value>
<value name="W24_FP" value="2">
<doc>W24_FP - 24-bit floating point. The floating point
values are a special format that preserve sorting order
@@ -9909,6 +9906,9 @@ xsi:schemaLocation="rules-ng.xsd">
precision in W without additional logic in other
blocks.</doc>
</value>
+ <value name="24" value="24">
+ <doc>24-bit fixed point</doc>
+ </value>
</bitfield>
<doc>Format for W</doc>
<bitfield high="2" low="2" name="W_SRC">
diff --git a/radeonreg.py b/radeonreg.py
index 36fefd4..00bff30 100755
--- a/radeonreg.py
+++ b/radeonreg.py
@@ -59,42 +59,14 @@ class RadeonField(object):
def __ne__(self, other):
return not self == other
-class EnumEntry(object):
-
- def __init__(self, val, name, desc):
- self.val = val
- self.name = name
- self.desc = desc
-
- def __eq__(self, other):
- if (not isinstance(other, EnumEntry)): return False
-
- if self.val == other.val and \
- self.name == other.name and \
- self.desc == other.desc: return True
- return False
-
- def __ne__(self, other):
- return not self == other
-
class RadeonEnum(object):
def __init__(self):
- self.entries = []
+ self.entries = set()
self.refs = 0
-
- def add(self, val, name, desc):
- self.entries.append(EnumEntry(val, name, desc))
def __eq__(self, other):
- if (not isinstance(other, RadeonEnum)): return False
-
- if len(self.entries) != len(other.entries): return False
-
- for i in xrange(len(self.entries)):
- if self.entries[i] != other.entries[i]: return False
-
- return True
+ return self.entries == other.entries
def __ne__(self, other):
return not self == other
@@ -131,10 +103,12 @@ def ExtractEnum(s):
desc = StripSpaces(entry[2].replace('\n', ' '))
if reserved_regex.search(desc): continue
name = StripUnders(enum_ename.match(desc.replace(' ', '_')).group(1).upper())
- enum.add(val, name, desc)
+ enum.entries.add((val, name, desc))
- if len(enum.entries) == 0: enum = None
- return [d, enum]
+ if not enum.entries:
+ enum = None
+
+ return (d, enum)
subs = [re.compile('^.+ 2008 Advanced Micro Devices, Inc.$'),
re.compile('^Proprietary *[0-9]*$'),
@@ -207,7 +181,8 @@ def FormatPDFDump(pdf):
e = ExtractEnum(fdesc)
cfield.desc = e[0]
- if e[1] != None: cfield.enum = AddEnum(e[1])
+ if e[1]:
+ cfield.enum = AddEnum(e[1])
if len(creg.fields) > 0:
if creg.fields[0].low == 0 and creg.fields[0].high == 31:
@@ -234,6 +209,27 @@ def CompareRegs(regs1, regs2):
return [regs_both, regs_a, regs_b]
+def CreateEnumChildren(root, enum):
+ for (value, name, description) in sorted(enum.entries):
+ if not name:
+ continue
+ value_tag = ElementTree.SubElement(root, "value")
+ value_tag.attrib["name"] = name
+ value_tag.attrib["value"] = str(value)
+ ElementTree.SubElement(value_tag, "doc").text = description
+
+def CreateEnumElement(root, enum, index):
+ if not enum.entries:
+ return
+
+ enum_tag = ElementTree.Element("enum")
+ enum_tag.attrib["name"] = "ENUM%d" % index
+
+ CreateEnumChildren(enum_tag, enum)
+
+ if enum_tag:
+ root.append(enum_tag)
+
def CreateXML(handle, regs, variants):
comment = ElementTree.Comment(
"""
@@ -256,18 +252,7 @@ before attempting to read it.
for i, enum in enumerate(enums):
if enum.refs > 1:
- enum_tag = ElementTree.Element("enum")
- enum_tag.attrib["name"] = "ENUM%d" % i
- for entry in enum.entries:
- if not entry.name:
- continue
- value = ElementTree.SubElement(enum_tag, "value")
- value.attrib["name"] = entry.name
- value.attrib["value"] = str(entry.val)
- doc = ElementTree.SubElement(value, "doc")
- doc.text = entry.desc
- if enum_tag:
- database.append(enum_tag)
+ CreateEnumElement(database, enum, i)
for (group, name, prepend) in regs:
group_tag = ElementTree.SubElement(database, "group", name=name)
@@ -296,14 +281,7 @@ before attempting to read it.
ElementTree.SubElement(reg32, "doc").text = field.desc
if field.enum:
if enums[field.enum].refs == 1:
- for entry in enums[field.enum].entries:
- if not entry.name:
- continue
- value = ElementTree.SubElement(bitfield, "value")
- value.attrib["name"] = entry.name
- value.attrib["value"] = str(entry.val)
- doc = ElementTree.SubElement(value, "doc")
- doc.text = entry.desc
+ CreateEnumChildren(bitfield, enums[field.enum])
else:
use_enum = ElementTree.SubElement(bitfield, "use-enum")
use_enum.attrib["ref"] = "ENUM%d" % field.enum