// 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.

module gfx.mojom;

import "mojom/shared_memory.mojom";
import "mojom/unguessable_token.mojom";

// gfx::BufferFormat
enum BufferFormat {
  R_8,
  R_16,
  RG_88,
  BGR_565,
  RGBA_4444,
  RGBX_8888,
  RGBA_8888,
  BGRX_8888,
  BGRX_1010102,
  RGBX_1010102,
  BGRA_8888,
  RGBA_F16,
  YVU_420,
  YUV_420_BIPLANAR,
  UYVY_422,
  P010,
};

// gfx::BufferUsage
enum BufferUsage {
  GPU_READ,
  SCANOUT,
  SCANOUT_CAMERA_READ_WRITE,
  CAMERA_AND_CPU_READ_WRITE,
  SCANOUT_CPU_READ_WRITE,
  SCANOUT_VDA_WRITE,
  GPU_READ_CPU_READ_WRITE,
};

struct BufferUsageAndFormat {
  BufferUsage usage;
  BufferFormat format;
};

// gfx::GpuMemoryBufferId
struct GpuMemoryBufferId {
  int32 id;
};

// gfx::NativePixmapPlane
[EnableIf=supports_native_pixmap]
struct NativePixmapPlane {
  uint32 stride;
  uint64 offset;
  uint64 size;

  // A platform-specific handle the underlying memory object.
  handle buffer_handle;
};

// gfx::NativePixmapHandle
[EnableIf=supports_native_pixmap]
struct NativePixmapHandle {
  array<NativePixmapPlane> planes;
  uint64 modifier;

  [EnableIf=is_fuchsia]
  mojo_base.mojom.UnguessableToken? buffer_collection_id;
  [EnableIf=is_fuchsia]
  uint32 buffer_index;
};

[EnableIf=is_android]
struct AHardwareBufferHandle {
  // The actual file descriptor used to wrap the AHardwareBuffer object for
  // serialization.
  handle buffer_handle;

  // A message pipe handle which tracks the lifetime of this
  // AHardwareBufferHandle. The sender may use this to observe the lifetime
  // remotely by watching the other end of this pipe. Useful for retaining a
  // sender-side AHB ref until the receiver deserializes the AHB and acquires its
  // own ref.
  handle<message_pipe> tracking_pipe;
};

union GpuMemoryBufferPlatformHandle {
  mojo_base.mojom.UnsafeSharedMemoryRegion shared_memory_handle;

  [EnableIf=supports_native_pixmap]
  NativePixmapHandle native_pixmap_handle;

  [EnableIf=is_mac]
  handle mach_port;

  [EnableIf=is_win]
  handle dxgi_handle;

  [EnableIf=is_android]
  AHardwareBufferHandle android_hardware_buffer_handle;
};

// gfx::GpuMemoryBufferHandle
struct GpuMemoryBufferHandle {
  GpuMemoryBufferId id;
  uint32 offset;
  uint32 stride;
  GpuMemoryBufferPlatformHandle? platform_handle;
};
