# HG changeset patch
# User moel.mich
# Date 1264620610 0
# Node ID 1a0928afac6bd14ecbc9ae7a481b43add5280d7e
# Parent  105939e4eb7e0703623fbf383f5048f227e4fa2f
Changed ATI GPU enumeration.

diff -r 105939e4eb7e -r 1a0928afac6b GUI/AboutBox.resources
Binary file GUI/AboutBox.resources has changed
diff -r 105939e4eb7e -r 1a0928afac6b GUI/LicenseBox.resources
Binary file GUI/LicenseBox.resources has changed
diff -r 105939e4eb7e -r 1a0928afac6b GUI/MainForm.resources
Binary file GUI/MainForm.resources has changed
diff -r 105939e4eb7e -r 1a0928afac6b GUI/PlotPanel.resources
Binary file GUI/PlotPanel.resources has changed
diff -r 105939e4eb7e -r 1a0928afac6b Hardware/ATI/ADL.cs
--- a/Hardware/ATI/ADL.cs	Wed Jan 27 18:12:51 2010 +0000
+++ b/Hardware/ATI/ADL.cs	Wed Jan 27 19:30:10 2010 +0000
@@ -48,7 +48,7 @@
     [MarshalAs(UnmanagedType.ByValTStr, SizeConst = ADL.ADL_MAX_PATH)]
     public string UDID;
     public int BusNumber;
-    public int DriverNumber;
+    public int DeviceNumber;
     public int FunctionNumber;
     public int VendorID;
     [MarshalAs(UnmanagedType.ByValTStr, SizeConst = ADL.ADL_MAX_PATH)]
@@ -124,6 +124,9 @@
     public const int ADL_DL_FANCTRL_SUPPORTS_RPM_READ = 4;
     public const int ADL_DL_FANCTRL_SUPPORTS_RPM_WRITE = 8;
 
+    public const int ATI_VENDOR_ID1 = 1002;
+    public const int ATI_VENDOR_ID2 = 0x1002;
+
     private delegate int ADL_Main_Control_CreateDelegate(
       ADL_Main_Memory_AllocDelegate callback, int enumConnectedAdapters);
     private delegate int ADL_Adapter_AdapterInfo_GetDelegate(IntPtr info,
diff -r 105939e4eb7e -r 1a0928afac6b Hardware/ATI/ATIGPU.cs
--- a/Hardware/ATI/ATIGPU.cs	Wed Jan 27 18:12:51 2010 +0000
+++ b/Hardware/ATI/ATIGPU.cs	Wed Jan 27 19:30:10 2010 +0000
@@ -46,16 +46,22 @@
     private string name;
     private Image icon;
     private int adapterIndex;
+    private int busNumber;
+    private int deviceNumber;
     private Sensor temperature;
     private Sensor fan;
     private Sensor coreClock;
     private Sensor memoryClock;
     private Sensor coreVoltage;
 
-    public ATIGPU(string name, int adapterIndex) {
+    public ATIGPU(string name, int adapterIndex, int busNumber, 
+      int deviceNumber) 
+    {
       this.name = name;
       this.icon = Utilities.EmbeddedResources.GetImage("ati.png");
       this.adapterIndex = adapterIndex;
+      this.busNumber = busNumber;
+      this.deviceNumber = deviceNumber;
 
       ADLFanSpeedInfo speedInfo = new ADLFanSpeedInfo();
       ADL.ADL_Overdrive5_FanSpeedInfo_Get(adapterIndex, 0, ref speedInfo);
@@ -69,6 +75,10 @@
       Update();                   
     }
 
+    public int BusNumber { get { return busNumber; } }
+
+    public int DeviceNumber { get { return deviceNumber; } }
+
     public string Name {
       get { return name; }
     }
diff -r 105939e4eb7e -r 1a0928afac6b Hardware/ATI/ATIGroup.cs
--- a/Hardware/ATI/ATIGroup.cs	Wed Jan 27 18:12:51 2010 +0000
+++ b/Hardware/ATI/ATIGroup.cs	Wed Jan 27 19:30:10 2010 +0000
@@ -73,6 +73,16 @@
                 report.AppendLine(adapterInfo[i].AdapterName);     
                 report.Append("UDID: ");
                 report.AppendLine(adapterInfo[i].UDID);
+                report.Append("Present: ");
+                report.AppendLine(adapterInfo[i].Present.ToString());
+                report.Append("VendorID: ");
+                report.AppendLine(adapterInfo[i].VendorID.ToString());
+                report.Append("BusNumber: ");
+                report.AppendLine(adapterInfo[i].BusNumber.ToString());
+                report.Append("DeviceNumber: ");
+                report.AppendLine(adapterInfo[i].DeviceNumber.ToString());
+                report.Append("FunctionNumber: ");
+                report.AppendLine(adapterInfo[i].FunctionNumber.ToString());
                 report.AppendLine();
 
                 if (isActive == 1) {
@@ -80,10 +90,25 @@
                   ADL.ADL_Adapter_ID_Get(adapterInfo[i].AdapterIndex,
                     out adapterID);
 
-                  if (adapterID > 0 && adapterInfo[i].UDID != "") {
-                    hardware.Add(new ATIGPU(
-                      adapterInfo[i].AdapterName,
-                      adapterInfo[i].AdapterIndex));
+                  if (adapterID > 0 && 
+                    adapterInfo[i].UDID != "" && 
+                    adapterInfo[i].Present > 0 &&
+                    (adapterInfo[i].VendorID == ADL.ATI_VENDOR_ID1 ||
+                     adapterInfo[i].VendorID == ADL.ATI_VENDOR_ID2)) 
+                  {
+                    bool found = false;
+                    foreach (ATIGPU gpu in hardware)
+                      if (gpu.BusNumber == adapterInfo[i].BusNumber &&
+                        gpu.DeviceNumber == adapterInfo[i].DeviceNumber) {
+                        found = true;
+                        break;
+                      }
+                    if (!found)
+                      hardware.Add(new ATIGPU(
+                        adapterInfo[i].AdapterName,
+                        adapterInfo[i].AdapterIndex,
+                        adapterInfo[i].BusNumber, 
+                        adapterInfo[i].DeviceNumber));
                   }
                 }
               }