// 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/common/time.mojom";
import "mojo/common/version.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;
};

// gpu::CollectInfoResult
enum CollectInfoResult {
  kCollectInfoNone = 0,
  kCollectInfoSuccess = 1,
  kCollectInfoNonFatalFailure = 2,
  kCollectInfoFatalFailure = 3
};

// 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,
};

// 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;
};

// Corresponds to |gpu::GPUInfo| in gpu/config/gpu_info.h
struct GpuInfo {
  mojo.common.mojom.TimeDelta initialization_time;
  bool optimus;
  bool amd_switchable;
  GpuDevice gpu;
  array<GpuDevice> secondary_gpus;
  string driver_vendor;
  string driver_version;
  string driver_date;
  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;
  int32 process_crash_count;
  bool in_process_gpu;
  bool passthrough_cmd_decoder;
  bool supports_overlays;
  bool hdr;
  bool can_support_threaded_texture_mailbox;
  CollectInfoResult basic_info_state;
  CollectInfoResult context_info_state;
  CollectInfoResult dx_diagnostics_info_state;
  DxDiagNode? dx_diagnostics;
  VideoDecodeAcceleratorCapabilities video_decode_accelerator_capabilities;
  array<VideoEncodeAcceleratorSupportedProfile>
    video_encode_accelerator_supported_profiles;
  bool jpeg_decode_accelerator_supported;
  uint64 system_visual;
  uint64 rgba_visual;
};
