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 serial(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 serial. This used by the reader to synchronize with the |
| 50 // writer that the action associated with the serial has been completed. |
| 51 uint32 serial; |
| 52 |
48 // Error status. | 53 // Error status. |
49 error::Error error; | 54 error::Error error; |
50 | 55 |
51 // Lost context detail information. | 56 // Lost context detail information. |
52 error::ContextLostReason context_lost_reason; | 57 error::ContextLostReason context_lost_reason; |
53 | 58 |
54 // Generation index of this state. The generation index is incremented every | 59 // Generation index of this state. The generation index is incremented every |
55 // time a new state is retrieved from the command processor, so that | 60 // 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. | 61 // consistency can be kept even if IPC messages are processed out-of-order. |
57 uint32 generation; | 62 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. | 116 // Destroy a transfer buffer. The ID must be positive. |
112 virtual void DestroyTransferBuffer(int32 id) = 0; | 117 virtual void DestroyTransferBuffer(int32 id) = 0; |
113 | 118 |
114 // Get the transfer buffer associated with an ID. Returns a null buffer for | 119 // Get the transfer buffer associated with an ID. Returns a null buffer for |
115 // ID 0. | 120 // ID 0. |
116 virtual Buffer GetTransferBuffer(int32 id) = 0; | 121 virtual Buffer GetTransferBuffer(int32 id) = 0; |
117 | 122 |
118 // Allows the reader to update the current token value. | 123 // Allows the reader to update the current token value. |
119 virtual void SetToken(int32 token) = 0; | 124 virtual void SetToken(int32 token) = 0; |
120 | 125 |
| 126 // Allows the reader to update the current serial value. |
| 127 virtual void SetSerial(uint32 serial) = 0; |
| 128 |
121 // Allows the reader to set the current parse error. | 129 // Allows the reader to set the current parse error. |
122 virtual void SetParseError(error::Error) = 0; | 130 virtual void SetParseError(error::Error) = 0; |
123 | 131 |
124 // Allows the reader to set the current context lost reason. | 132 // Allows the reader to set the current context lost reason. |
125 // NOTE: if calling this in conjunction with SetParseError, | 133 // NOTE: if calling this in conjunction with SetParseError, |
126 // call this first. | 134 // call this first. |
127 virtual void SetContextLostReason(error::ContextLostReason) = 0; | 135 virtual void SetContextLostReason(error::ContextLostReason) = 0; |
128 | 136 |
129 // The NaCl Win64 build only really needs the struct definitions above; having | 137 // 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 | 138 // GetLastError declared would mean we'd have to also define it, and pull more |
131 // of gpu in to the NaCl Win64 build. | 139 // of gpu in to the NaCl Win64 build. |
132 #if !defined(NACL_WIN64) | 140 #if !defined(NACL_WIN64) |
133 // TODO(apatrick): this is a temporary optimization while skia is calling | 141 // TODO(apatrick): this is a temporary optimization while skia is calling |
134 // RendererGLContext::MakeCurrent prior to every GL call. It saves returning 6 | 142 // RendererGLContext::MakeCurrent prior to every GL call. It saves returning 6 |
135 // ints redundantly when only the error is needed for the CommandBufferProxy | 143 // ints redundantly when only the error is needed for the CommandBufferProxy |
136 // implementation. | 144 // implementation. |
137 virtual error::Error GetLastError(); | 145 virtual error::Error GetLastError(); |
138 #endif | 146 #endif |
139 | 147 |
140 private: | 148 private: |
141 DISALLOW_COPY_AND_ASSIGN(CommandBuffer); | 149 DISALLOW_COPY_AND_ASSIGN(CommandBuffer); |
142 }; | 150 }; |
143 | 151 |
144 } // namespace gpu | 152 } // namespace gpu |
145 | 153 |
146 #endif // GPU_COMMAND_BUFFER_COMMON_COMMAND_BUFFER_H_ | 154 #endif // GPU_COMMAND_BUFFER_COMMON_COMMAND_BUFFER_H_ |
OLD | NEW |