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

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

[Client=CommandBufferClient]
interface CommandBuffer {
  Initialize(CommandBufferSyncClient sync_client,
             CommandBufferSyncPointClient sync_point_client,
             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() => ();

  // TODO(piman): sync points
};

interface CommandBufferClient {
  DidDestroy();
  LostContext(int32 lost_reason);  // TODO(piman): enum
};
