Home | History | Annotate | Download | only in radeon
      1 //==- AMDILEvergreenDevice.h - Define Evergreen Device for AMDIL -*- C++ -*--=//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //==-----------------------------------------------------------------------===//
      9 //
     10 // Interface for the subtarget data classes.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 // This file will define the interface that each generation needs to
     14 // implement in order to correctly answer queries on the capabilities of the
     15 // specific hardware.
     16 //===----------------------------------------------------------------------===//
     17 #ifndef _AMDILEVERGREENDEVICE_H_
     18 #define _AMDILEVERGREENDEVICE_H_
     19 #include "AMDILDevice.h"
     20 #include "AMDGPUSubtarget.h"
     21 
     22 namespace llvm {
     23   class AMDGPUSubtarget;
     24 //===----------------------------------------------------------------------===//
     25 // Evergreen generation of devices and their respective sub classes
     26 //===----------------------------------------------------------------------===//
     27 
     28 
     29 // The AMDGPUEvergreenDevice is the base device class for all of the Evergreen
     30 // series of cards. This class contains information required to differentiate
     31 // the Evergreen device from the generic AMDGPUDevice. This device represents
     32 // that capabilities of the 'Juniper' cards, also known as the HD57XX.
     33 class AMDGPUEvergreenDevice : public AMDGPUDevice {
     34 public:
     35   AMDGPUEvergreenDevice(AMDGPUSubtarget *ST);
     36   virtual ~AMDGPUEvergreenDevice();
     37   virtual size_t getMaxLDSSize() const;
     38   virtual size_t getMaxGDSSize() const;
     39   virtual size_t getWavefrontSize() const;
     40   virtual uint32_t getGeneration() const;
     41   virtual uint32_t getMaxNumUAVs() const;
     42   virtual uint32_t getResourceID(uint32_t) const;
     43 protected:
     44   virtual void setCaps();
     45 }; // AMDGPUEvergreenDevice
     46 
     47 // The AMDGPUCypressDevice is similiar to the AMDGPUEvergreenDevice, except it has
     48 // support for double precision operations. This device is used to represent
     49 // both the Cypress and Hemlock cards, which are commercially known as HD58XX
     50 // and HD59XX cards.
     51 class AMDGPUCypressDevice : public AMDGPUEvergreenDevice {
     52 public:
     53   AMDGPUCypressDevice(AMDGPUSubtarget *ST);
     54   virtual ~AMDGPUCypressDevice();
     55 private:
     56   virtual void setCaps();
     57 }; // AMDGPUCypressDevice
     58 
     59 
     60 // The AMDGPUCedarDevice is the class that represents all of the 'Cedar' based
     61 // devices. This class differs from the base AMDGPUEvergreenDevice in that the
     62 // device is a ~quarter of the 'Juniper'. These are commercially known as the
     63 // HD54XX and HD53XX series of cards.
     64 class AMDGPUCedarDevice : public AMDGPUEvergreenDevice {
     65 public:
     66   AMDGPUCedarDevice(AMDGPUSubtarget *ST);
     67   virtual ~AMDGPUCedarDevice();
     68   virtual size_t getWavefrontSize() const;
     69 private:
     70   virtual void setCaps();
     71 }; // AMDGPUCedarDevice
     72 
     73 // The AMDGPURedwoodDevice is the class the represents all of the 'Redwood' based
     74 // devices. This class differs from the base class, in that these devices are
     75 // considered about half of a 'Juniper' device. These are commercially known as
     76 // the HD55XX and HD56XX series of cards.
     77 class AMDGPURedwoodDevice : public AMDGPUEvergreenDevice {
     78 public:
     79   AMDGPURedwoodDevice(AMDGPUSubtarget *ST);
     80   virtual ~AMDGPURedwoodDevice();
     81   virtual size_t getWavefrontSize() const;
     82 private:
     83   virtual void setCaps();
     84 }; // AMDGPURedwoodDevice
     85 
     86 } // namespace llvm
     87 #endif // _AMDGPUEVERGREENDEVICE_H_
     88