// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// gpu/config/gpu_info.h
module gpu.mojom;

import "gpu/ipc/common/dx_diag_node.mojom";
import "mojo/public/mojom/base/time.mojom";
import "ui/gfx/geometry/mojo/geometry.mojom";

// gpu::GPUInfo::GPUDevice
struct GpuDevice {
  uint32 vendor_id;
  uint32 device_id;
  bool active;
  string vendor_string;
  string device_string;
  string driver_vendor;
  string driver_version;
  string driver_date;
  int32 cuda_compute_capability_major;
};

// gpu::VideoCodecProfile
enum VideoCodecProfile {
  VIDEO_CODEC_PROFILE_UNKNOWN = -1,
  H264PROFILE_BASELINE = 0,
  H264PROFILE_MAIN,
  H264PROFILE_EXTENDED,
  H264PROFILE_HIGH,
  H264PROFILE_HIGH10PROFILE,
  H264PROFILE_HIGH422PROFILE,
  H264PROFILE_HIGH444PREDICTIVEPROFILE,
  H264PROFILE_SCALABLEBASELINE,
  H264PROFILE_SCALABLEHIGH,
  H264PROFILE_STEREOHIGH,
  H264PROFILE_MULTIVIEWHIGH,
  VP8PROFILE_ANY,
  VP9PROFILE_PROFILE0,
  VP9PROFILE_PROFILE1,
  VP9PROFILE_PROFILE2,
  VP9PROFILE_PROFILE3,
  HEVCPROFILE_MAIN,
  HEVCPROFILE_MAIN10,
  HEVCPROFILE_MAIN_STILL_PICTURE,
  DOLBYVISION_PROFILE0,
  DOLBYVISION_PROFILE4,
  DOLBYVISION_PROFILE5,
  DOLBYVISION_PROFILE7,
  THEORAPROFILE_ANY,
  AV1PROFILE_PROFILE_MAIN,
  AV1PROFILE_PROFILE_HIGH,
  AV1PROFILE_PROFILE_PRO,
};

// gpu::VideoDecodeAcceleratorSupportedProfile
struct VideoDecodeAcceleratorSupportedProfile {
  VideoCodecProfile profile;
  gfx.mojom.Size max_resolution;
  gfx.mojom.Size min_resolution;
  bool encrypted_only;
};

// gpu::VideoDecodeAcceleratorCapabilities
struct VideoDecodeAcceleratorCapabilities {
  array<VideoDecodeAcceleratorSupportedProfile> supported_profiles;
  uint32 flags;
};

// gpu::VideoEncodeAcceleratorSupportedProfile
struct VideoEncodeAcceleratorSupportedProfile {
  VideoCodecProfile profile;
  gfx.mojom.Size max_resolution;
  uint32 max_framerate_numerator;
  uint32 max_framerate_denominator;
};

// gpu::OverlayFormat
enum OverlayFormat {
  BGRA,
  YUY2,
  NV12,
};

// gpu::OverlayCapability
struct OverlayCapability {
  OverlayFormat format;
  bool is_scaling_supported;
};

// gpu::Dx12VulkanVersionInfo
struct Dx12VulkanVersionInfo {
  bool supports_dx12;
  bool supports_vulkan;
  uint32 d3d12_feature_level;
  uint32 vulkan_version;
};

// Corresponds to |gpu::GPUInfo| in gpu/config/gpu_info.h
struct GpuInfo {
  mojo_base.mojom.TimeDelta initialization_time;
  bool optimus;
  bool amd_switchable;
  GpuDevice gpu;
  array<GpuDevice> secondary_gpus;
  string pixel_shader_version;
  string vertex_shader_version;
  string max_msaa_samples;
  string machine_model_name;
  string machine_model_version;
  string gl_version;
  string gl_vendor;
  string gl_renderer;
  string gl_extensions;
  string gl_ws_vendor;
  string gl_ws_version;
  string gl_ws_extensions;
  uint32 gl_reset_notification_strategy;
  bool software_rendering;
  bool direct_rendering;
  bool sandboxed;
  bool in_process_gpu;
  bool passthrough_cmd_decoder;
  bool can_support_threaded_texture_mailbox;
  [EnableIf=is_win]
  bool direct_composition;
  [EnableIf=is_win]
  bool supports_overlays;
  [EnableIf=is_win]
  array<OverlayCapability> overlay_capabilities;
  [EnableIf=is_win]
  DxDiagNode dx_diagnostics;
  [EnableIf=is_win]
  Dx12VulkanVersionInfo dx12_vulkan_version_info;
  VideoDecodeAcceleratorCapabilities video_decode_accelerator_capabilities;
  array<VideoEncodeAcceleratorSupportedProfile>
    video_encode_accelerator_supported_profiles;
  bool jpeg_decode_accelerator_supported;
  uint64 system_visual;
  uint64 rgba_visual;
  bool oop_rasterization_supported;
};
