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

[DartPackage="mojo_services"]
module mojo;

import "gpu/interfaces/gpu_capabilities.mojom";

struct CommandBufferState {
  int32 num_entries;
  int32 get_offset;
  int32 put_offset;
  int32 token;
  int32 error;  // TODO(piman): enum
  int32 context_lost_reason;  // TODO(piman): enum
  uint32 generation;
};

interface CommandBufferSyncClient {
  DidInitialize(bool success, GpuCapabilities capabilities);
  DidMakeProgress(CommandBufferState state);
};

interface CommandBufferSyncPointClient {
  DidInsertSyncPoint(uint32 sync_point);
};

interface CommandBufferLostContextObserver {
  DidLoseContext(int32 context_lost_reason);
};

interface CommandBuffer {
  // Initialize attempts to initialize the command buffer. Success or failure
  // will be communicated via the CommandBufferSyncClient DidInitialize() call.
  // If the context is lost after creation the LostContext method on the
  // CommandBufferLostContextObserver's will be called then this pipe will be
  // closed.
  Initialize(CommandBufferSyncClient sync_client,
             CommandBufferSyncPointClient sync_point_client,
             CommandBufferLostContextObserver lost_observer,
             handle<shared_buffer> shared_state);
  SetGetBuffer(int32 buffer);
  Flush(int32 put_offset);
  MakeProgress(int32 last_get_offset);
  RegisterTransferBuffer(
      int32 id, handle<shared_buffer> transfer_buffer, uint32 size);
  DestroyTransferBuffer(int32 id);

  // InsertSyncPoint returns the sync point returned via DidInsertSyncPoint.
  // If |retire| is true, the sync point is retired on insertion. Otherwise,
  // explicitly call RetireSyncPoint to retire it.
  InsertSyncPoint(bool retire);
  RetireSyncPoint(uint32 sync_point);
  Echo() => ();
};
