OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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 // This file contains the command buffer helper class. | 5 // This file contains the command buffer helper class. |
6 | 6 |
7 #ifndef GPU_COMMAND_BUFFER_CLIENT_CMD_BUFFER_HELPER_H_ | 7 #ifndef GPU_COMMAND_BUFFER_CLIENT_CMD_BUFFER_HELPER_H_ |
8 #define GPU_COMMAND_BUFFER_CLIENT_CMD_BUFFER_HELPER_H_ | 8 #define GPU_COMMAND_BUFFER_CLIENT_CMD_BUFFER_HELPER_H_ |
9 | 9 |
10 #include "gpu/command_buffer/common/logging.h" | 10 #include "gpu/command_buffer/common/logging.h" |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
48 // was successful. The function will fail if the command buffer service has | 48 // was successful. The function will fail if the command buffer service has |
49 // disconnected. | 49 // disconnected. |
50 bool Finish(); | 50 bool Finish(); |
51 | 51 |
52 // Waits until a given number of available entries are available. | 52 // Waits until a given number of available entries are available. |
53 // Parameters: | 53 // Parameters: |
54 // count: number of entries needed. This value must be at most | 54 // count: number of entries needed. This value must be at most |
55 // the size of the buffer minus one. | 55 // the size of the buffer minus one. |
56 void WaitForAvailableEntries(int32 count); | 56 void WaitForAvailableEntries(int32 count); |
57 | 57 |
58 // Adds a command data to the command buffer. This may wait until sufficient | |
59 // space is available. | |
60 // Parameters: | |
61 // entries: The command entries to add. | |
62 // count: The number of entries. | |
63 void AddCommandData(const CommandBufferEntry* entries, int32 count) { | |
64 WaitForAvailableEntries(count); | |
65 for (; count > 0; --count) { | |
66 entries_[put_++] = *entries++; | |
67 } | |
68 DCHECK_LE(put_, entry_count_); | |
69 if (put_ == entry_count_) put_ = 0; | |
70 } | |
71 | |
72 // A typed version of AddCommandData. | |
73 template <typename T> | |
74 void AddTypedCmdData(const T& cmd) { | |
75 AddCommandData(reinterpret_cast<const CommandBufferEntry*>(&cmd), | |
76 ComputeNumEntries(sizeof(cmd))); | |
77 } | |
78 | |
79 // Adds a command to the command buffer. This may wait until sufficient space | |
80 // is available. | |
81 // Parameters: | |
82 // command: the command index. | |
83 // arg_count: the number of arguments for the command. | |
84 // args: the arguments for the command (these are copied before the | |
85 // function returns). | |
86 void AddCommand(int32 command, | |
87 int32 arg_count, | |
88 const CommandBufferEntry *args) { | |
89 CommandHeader header; | |
90 header.size = arg_count + 1; | |
91 header.command = command; | |
92 WaitForAvailableEntries(header.size); | |
93 entries_[put_++].value_header = header; | |
94 for (int i = 0; i < arg_count; ++i) { | |
95 entries_[put_++] = args[i]; | |
96 } | |
97 DCHECK_LE(put_, entry_count_); | |
98 if (put_ == entry_count_) put_ = 0; | |
99 } | |
100 | |
101 // Inserts a new token into the command buffer. This token either has a value | 58 // Inserts a new token into the command buffer. This token either has a value |
102 // different from previously inserted tokens, or ensures that previously | 59 // different from previously inserted tokens, or ensures that previously |
103 // inserted tokens with that value have already passed through the command | 60 // inserted tokens with that value have already passed through the command |
104 // stream. | 61 // stream. |
105 // Returns: | 62 // Returns: |
106 // the value of the new token or -1 if the command buffer reader has | 63 // the value of the new token or -1 if the command buffer reader has |
107 // shutdown. | 64 // shutdown. |
108 int32 InsertToken(); | 65 int32 InsertToken(); |
109 | 66 |
110 // Waits until the token of a particular value has passed through the command | 67 // Waits until the token of a particular value has passed through the command |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
179 int32 get_; | 136 int32 get_; |
180 int32 put_; | 137 int32 put_; |
181 | 138 |
182 friend class CommandBufferHelperTest; | 139 friend class CommandBufferHelperTest; |
183 DISALLOW_COPY_AND_ASSIGN(CommandBufferHelper); | 140 DISALLOW_COPY_AND_ASSIGN(CommandBufferHelper); |
184 }; | 141 }; |
185 | 142 |
186 } // namespace gpu | 143 } // namespace gpu |
187 | 144 |
188 #endif // GPU_COMMAND_BUFFER_CLIENT_CMD_BUFFER_HELPER_H_ | 145 #endif // GPU_COMMAND_BUFFER_CLIENT_CMD_BUFFER_HELPER_H_ |
OLD | NEW |