blob: 41eda77f81dc7548e5e80ff1a3d1496139d8f117 [file] [log] [blame]
// Copyright (c) 2009 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.
#ifndef GPU_COMMAND_BUFFER_COMMON_COMMAND_BUFFER_H_
#define GPU_COMMAND_BUFFER_COMMON_COMMAND_BUFFER_H_
#include "../common/buffer.h"
#include "../common/constants.h"
namespace gpu {
// Common interface for CommandBuffer implementations.
class CommandBuffer {
public:
enum {
kMaxCommandBufferSize = 4 * 1024 * 1024
};
struct State {
State()
: num_entries(0),
get_offset(0),
put_offset(0),
token(-1),
error(error::kNoError) {
}
// Size of the command buffer in command buffer entries.
int32 num_entries;
// The offset (in entries) from which the reader is reading.
int32 get_offset;
// The offset (in entries) at which the writer is writing.
int32 put_offset;
// The current token value. This is used by the writer to defer
// changes to shared memory objects until the reader has reached a certain
// point in the command buffer. The reader is responsible for updating the
// token value, for example in response to an asynchronous set token command
// embedded in the command buffer. The default token value is zero.
int32 token;
// Error status.
error::Error error;
};
CommandBuffer() {
}
virtual ~CommandBuffer() {
}
// Initialize the command buffer with the given size.
virtual bool Initialize(int32 size) = 0;
// Gets the ring buffer for the command buffer.
virtual Buffer GetRingBuffer() = 0;
// Returns the current status.
virtual State GetState() = 0;
// The writer calls this to update its put offset. This function returns the
// reader's most recent get offset. Does not return until after the put offset
// change callback has been invoked. Returns -1 if the put offset is invalid.
virtual State Flush(int32 put_offset) = 0;
// Sets the current get offset. This can be called from any thread.
virtual void SetGetOffset(int32 get_offset) = 0;
// Create a transfer buffer and return a handle that uniquely
// identifies it or -1 on error.
virtual int32 CreateTransferBuffer(size_t size) = 0;
// Destroy a transfer buffer and recycle the handle.
virtual void DestroyTransferBuffer(int32 id) = 0;
// Get the transfer buffer associated with a handle.
virtual Buffer GetTransferBuffer(int32 handle) = 0;
// Allows the reader to update the current token value.
virtual void SetToken(int32 token) = 0;
// Allows the reader to set the current parse error.
virtual void SetParseError(error::Error) = 0;
private:
DISALLOW_COPY_AND_ASSIGN(CommandBuffer);
};
} // namespace gpu
#endif // GPU_COMMAND_BUFFER_COMMON_COMMAND_BUFFER_H_