// 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/public/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() => ();
};
