Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef GPU_COMMAND_BUFFER_COMMON_COMMAND_BUFFER_H_ | 5 #ifndef GPU_COMMAND_BUFFER_COMMON_COMMAND_BUFFER_H_ |
| 6 #define GPU_COMMAND_BUFFER_COMMON_COMMAND_BUFFER_H_ | 6 #define GPU_COMMAND_BUFFER_COMMON_COMMAND_BUFFER_H_ |
| 7 | 7 |
| 8 #include "gpu/command_buffer/common/buffer.h" | 8 #include "gpu/command_buffer/common/buffer.h" |
| 9 #include "gpu/command_buffer/common/constants.h" | 9 #include "gpu/command_buffer/common/constants.h" |
| 10 #include "gpu/gpu_export.h" | 10 #include "gpu/gpu_export.h" |
| 11 | 11 |
| 12 namespace base { | 12 namespace base { |
| 13 class SharedMemory; | 13 class SharedMemory; |
| 14 } | 14 } |
| 15 | 15 |
| 16 namespace gpu { | 16 namespace gpu { |
| 17 | 17 |
| 18 // Common interface for CommandBuffer implementations. | 18 // Common interface for CommandBuffer implementations. |
| 19 class GPU_EXPORT CommandBuffer { | 19 class GPU_EXPORT CommandBuffer { |
| 20 public: | 20 public: |
| 21 struct State { | 21 struct State { |
| 22 State() | 22 State() |
| 23 : num_entries(0), | 23 : num_entries(0), |
| 24 get_offset(0), | 24 get_offset(0), |
| 25 put_offset(0), | 25 put_offset(0), |
| 26 token(-1), | 26 token(-1), |
| 27 async_token(0), | |
| 27 error(error::kNoError), | 28 error(error::kNoError), |
| 28 context_lost_reason(error::kUnknown), | 29 context_lost_reason(error::kUnknown), |
| 29 generation(0) { | 30 generation(0) { |
| 30 } | 31 } |
| 31 | 32 |
| 32 // Size of the command buffer in command buffer entries. | 33 // Size of the command buffer in command buffer entries. |
| 33 int32 num_entries; | 34 int32 num_entries; |
| 34 | 35 |
| 35 // The offset (in entries) from which the reader is reading. | 36 // The offset (in entries) from which the reader is reading. |
| 36 int32 get_offset; | 37 int32 get_offset; |
| 37 | 38 |
| 38 // The offset (in entries) at which the writer is writing. | 39 // The offset (in entries) at which the writer is writing. |
| 39 int32 put_offset; | 40 int32 put_offset; |
| 40 | 41 |
| 41 // The current token value. This is used by the writer to defer | 42 // The current token value. This is used by the writer to defer |
| 42 // changes to shared memory objects until the reader has reached a certain | 43 // changes to shared memory objects until the reader has reached a certain |
| 43 // point in the command buffer. The reader is responsible for updating the | 44 // point in the command buffer. The reader is responsible for updating the |
| 44 // token value, for example in response to an asynchronous set token command | 45 // token value, for example in response to an asynchronous set token command |
| 45 // embedded in the command buffer. The default token value is zero. | 46 // embedded in the command buffer. The default token value is zero. |
| 46 int32 token; | 47 int32 token; |
| 47 | 48 |
| 49 // The current async token. This used by the reader to synchronize with the | |
| 50 // writer that the action associated with the async token has been | |
| 51 // completed. | |
| 52 uint32 async_token; | |
|
reveman
2014/01/22 17:30:04
is there a good reason this is unsigned but |token
| |
| 53 | |
| 48 // Error status. | 54 // Error status. |
| 49 error::Error error; | 55 error::Error error; |
| 50 | 56 |
| 51 // Lost context detail information. | 57 // Lost context detail information. |
| 52 error::ContextLostReason context_lost_reason; | 58 error::ContextLostReason context_lost_reason; |
| 53 | 59 |
| 54 // Generation index of this state. The generation index is incremented every | 60 // Generation index of this state. The generation index is incremented every |
| 55 // time a new state is retrieved from the command processor, so that | 61 // time a new state is retrieved from the command processor, so that |
| 56 // consistency can be kept even if IPC messages are processed out-of-order. | 62 // consistency can be kept even if IPC messages are processed out-of-order. |
| 57 uint32 generation; | 63 uint32 generation; |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 111 // Destroy a transfer buffer. The ID must be positive. | 117 // Destroy a transfer buffer. The ID must be positive. |
| 112 virtual void DestroyTransferBuffer(int32 id) = 0; | 118 virtual void DestroyTransferBuffer(int32 id) = 0; |
| 113 | 119 |
| 114 // Get the transfer buffer associated with an ID. Returns a null buffer for | 120 // Get the transfer buffer associated with an ID. Returns a null buffer for |
| 115 // ID 0. | 121 // ID 0. |
| 116 virtual Buffer GetTransferBuffer(int32 id) = 0; | 122 virtual Buffer GetTransferBuffer(int32 id) = 0; |
| 117 | 123 |
| 118 // Allows the reader to update the current token value. | 124 // Allows the reader to update the current token value. |
| 119 virtual void SetToken(int32 token) = 0; | 125 virtual void SetToken(int32 token) = 0; |
| 120 | 126 |
| 127 // Allows the reader to update the current async token value. | |
| 128 virtual void SetAsyncToken(uint32 token) = 0; | |
| 129 | |
| 121 // Allows the reader to set the current parse error. | 130 // Allows the reader to set the current parse error. |
| 122 virtual void SetParseError(error::Error) = 0; | 131 virtual void SetParseError(error::Error) = 0; |
| 123 | 132 |
| 124 // Allows the reader to set the current context lost reason. | 133 // Allows the reader to set the current context lost reason. |
| 125 // NOTE: if calling this in conjunction with SetParseError, | 134 // NOTE: if calling this in conjunction with SetParseError, |
| 126 // call this first. | 135 // call this first. |
| 127 virtual void SetContextLostReason(error::ContextLostReason) = 0; | 136 virtual void SetContextLostReason(error::ContextLostReason) = 0; |
| 128 | 137 |
| 129 // The NaCl Win64 build only really needs the struct definitions above; having | 138 // The NaCl Win64 build only really needs the struct definitions above; having |
| 130 // GetLastError declared would mean we'd have to also define it, and pull more | 139 // GetLastError declared would mean we'd have to also define it, and pull more |
| 131 // of gpu in to the NaCl Win64 build. | 140 // of gpu in to the NaCl Win64 build. |
| 132 #if !defined(NACL_WIN64) | 141 #if !defined(NACL_WIN64) |
| 133 // TODO(apatrick): this is a temporary optimization while skia is calling | 142 // TODO(apatrick): this is a temporary optimization while skia is calling |
| 134 // RendererGLContext::MakeCurrent prior to every GL call. It saves returning 6 | 143 // RendererGLContext::MakeCurrent prior to every GL call. It saves returning 6 |
| 135 // ints redundantly when only the error is needed for the CommandBufferProxy | 144 // ints redundantly when only the error is needed for the CommandBufferProxy |
| 136 // implementation. | 145 // implementation. |
| 137 virtual error::Error GetLastError(); | 146 virtual error::Error GetLastError(); |
| 138 #endif | 147 #endif |
| 139 | 148 |
| 140 private: | 149 private: |
| 141 DISALLOW_COPY_AND_ASSIGN(CommandBuffer); | 150 DISALLOW_COPY_AND_ASSIGN(CommandBuffer); |
| 142 }; | 151 }; |
| 143 | 152 |
| 144 } // namespace gpu | 153 } // namespace gpu |
| 145 | 154 |
| 146 #endif // GPU_COMMAND_BUFFER_COMMON_COMMAND_BUFFER_H_ | 155 #endif // GPU_COMMAND_BUFFER_COMMON_COMMAND_BUFFER_H_ |
| OLD | NEW |