text: //=================================================================
  // Copyright 2020 Advanced Micro Devices, Inc. All rights reserved.
  //=================================================================
  #ifndef RGA_RADEONGPUANALYZERCLI_SRC_KC_DATA_TYPES_H_
  #define RGA_RADEONGPUANALYZERCLI_SRC_KC_DATA_TYPES_H_
  
  // C++.
  #include <string>
  #include <vector>
  #include <map>
  #include <array>
  
  // Local.
  #include "radeon_gpu_analyzer_backend/be_data_types.h"
  
  // Logging callback type.
  typedef void(*LoggingCallbackFunction)(const std::string&);
  
  // Type of Vulkan input file.
  enum class RgVulkanInputType
  {
      kUnknown,
      kGlsl,
      kHlsl,
      kSpirv,
      kSpirvTxt
  };
  
  // Types of entry points.
  enum class RgEntryType
  {
      kUnknown,
      kOpenclKernel,
      kDxVertex,
      kDxHull,
      kDxDomain,
      kDxGeometry,
      kDxPixel,
      kDxCompute,
      kGlVertex,
      kGlTessControl,
      kGlTessEval,
      kGlGeometry,
      kGlFragment,
      kGlCompute
  };
  
  // Structure that contains entry type and names of all output files generated by RGA.
  struct RgOutputFiles
  {
      RgEntryType  entry_type = RgEntryType::kUnknown;
      std::string  input_file;
      std::string  device;
      std::string  isa_file;
      std::string  bin_file;
      std::string  isa_csv_file;
      std::string  stats_file;
      std::string  livereg_file;
      std::string  stall_analysis_file;
      std::string  cfg_file;
      bool         is_bin_file_temp = false;
      bool         is_isa_file_temp = false;
      bool         status = true;
  
      RgOutputFiles() = default;
      RgOutputFiles(const std::string& device)
          : device(device)
          , is_bin_file_temp(false)
          , is_isa_file_temp(false)
          , status(true)
      {
      }
  
      RgOutputFiles(RgEntryType        type,
                    const std::string& isa_file,
                    const std::string& bin_file            = "",
                    const std::string& isa_csv_file        = "",
                    const std::string& stat_file           = "",
                    const std::string& livereg_file        = "",
                    const std::string& stall_analysis_file = "",
                    const std::string& cfg_file            = "")
          : isa_file(isa_file)
          , bin_file(bin_file)
          , isa_csv_file(isa_csv_file)
          , stats_file(stat_file)
          , livereg_file(livereg_file)
          , stall_analysis_file(stall_analysis_file)
          , cfg_file(cfg_file)
          , entry_type(type)
      {
      }
  };
  
  // OpenCL output metadata. Maps  pair{device, kernel} --> OutputFiles structure.
  typedef std::map<std::pair<std::string, std::string>, struct RgOutputFiles> RgClOutputMetadata;
  
  // Vulkan output metadata: an array of per-stage OutputFiles structures.
  typedef std::array<struct RgOutputFiles, BePipelineStage::kCount> RgVkOutputMetadata;
  
  // Vector of tuples {entry_name, start_src_line, end_src_line}
  typedef std::vector<std::tuple<std::string, int, int>> RgEntryData;
  
  // Maps source file name to vector of kernel names found in this source file and corresponding line numbers.
  typedef std::map<std::string, RgEntryData> RgFileEntryData;
  
  #endif // RGA_RADEONGPUANALYZERCLI_SRC_KC_DATA_TYPES_H_
  