Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(550)

Side by Side Diff: gpu/command_buffer/common/cmd_buffer_common.h

Issue 822713002: Update from https://crrev.com/309415 (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 // This file contains the common parts of command buffer formats. 5 // This file contains the common parts of command buffer formats.
6 6
7 #ifndef GPU_COMMAND_BUFFER_COMMON_CMD_BUFFER_COMMON_H_ 7 #ifndef GPU_COMMAND_BUFFER_COMMON_CMD_BUFFER_COMMON_H_
8 #define GPU_COMMAND_BUFFER_COMMON_CMD_BUFFER_COMMON_H_ 8 #define GPU_COMMAND_BUFFER_COMMON_CMD_BUFFER_COMMON_H_
9 9
10 #include <stddef.h> 10 #include <stddef.h>
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 void Init(uint32_t _command, int32_t _size) { 50 void Init(uint32_t _command, int32_t _size) {
51 DCHECK_LE(_size, kMaxSize); 51 DCHECK_LE(_size, kMaxSize);
52 command = _command; 52 command = _command;
53 size = _size; 53 size = _size;
54 } 54 }
55 55
56 // Sets the header based on the passed in command. Can not be used for 56 // Sets the header based on the passed in command. Can not be used for
57 // variable sized commands like immediate commands or Noop. 57 // variable sized commands like immediate commands or Noop.
58 template <typename T> 58 template <typename T>
59 void SetCmd() { 59 void SetCmd() {
60 COMPILE_ASSERT(T::kArgFlags == cmd::kFixed, Cmd_kArgFlags_not_kFixed); 60 static_assert(T::kArgFlags == cmd::kFixed,
61 "T::kArgFlags should equal cmd::kFixed");
61 Init(T::kCmdId, ComputeNumEntries(sizeof(T))); // NOLINT 62 Init(T::kCmdId, ComputeNumEntries(sizeof(T))); // NOLINT
62 } 63 }
63 64
64 // Sets the header by a size in bytes of the immediate data after the command. 65 // Sets the header by a size in bytes of the immediate data after the command.
65 template <typename T> 66 template <typename T>
66 void SetCmdBySize(uint32_t size_of_data_in_bytes) { 67 void SetCmdBySize(uint32_t size_of_data_in_bytes) {
67 COMPILE_ASSERT(T::kArgFlags == cmd::kAtLeastN, Cmd_kArgFlags_not_kAtLeastN); 68 static_assert(T::kArgFlags == cmd::kAtLeastN,
69 "T::kArgFlags should equal cmd::kAtLeastN");
68 Init(T::kCmdId, 70 Init(T::kCmdId,
69 ComputeNumEntries(sizeof(T) + size_of_data_in_bytes)); // NOLINT 71 ComputeNumEntries(sizeof(T) + size_of_data_in_bytes)); // NOLINT
70 } 72 }
71 73
72 // Sets the header by a size in bytes. 74 // Sets the header by a size in bytes.
73 template <typename T> 75 template <typename T>
74 void SetCmdByTotalSize(uint32_t size_in_bytes) { 76 void SetCmdByTotalSize(uint32_t size_in_bytes) {
75 COMPILE_ASSERT(T::kArgFlags == cmd::kAtLeastN, Cmd_kArgFlags_not_kAtLeastN); 77 static_assert(T::kArgFlags == cmd::kAtLeastN,
78 "T::kArgFlags should equal cmd::kAtLeastN");
76 DCHECK_GE(size_in_bytes, sizeof(T)); // NOLINT 79 DCHECK_GE(size_in_bytes, sizeof(T)); // NOLINT
77 Init(T::kCmdId, ComputeNumEntries(size_in_bytes)); 80 Init(T::kCmdId, ComputeNumEntries(size_in_bytes));
78 } 81 }
79 }; 82 };
80 83
81 COMPILE_ASSERT(sizeof(CommandHeader) == 4, Sizeof_CommandHeader_is_not_4); 84 static_assert(sizeof(CommandHeader) == 4,
85 "size of CommandHeader should equal 4");
82 86
83 // Union that defines possible command buffer entries. 87 // Union that defines possible command buffer entries.
84 union CommandBufferEntry { 88 union CommandBufferEntry {
85 CommandHeader value_header; 89 CommandHeader value_header;
86 uint32_t value_uint32; 90 uint32_t value_uint32;
87 int32_t value_int32; 91 int32_t value_int32;
88 float value_float; 92 float value_float;
89 }; 93 };
90 94
91 #define GPU_COMMAND_BUFFER_ENTRY_ALIGNMENT 4 95 #define GPU_COMMAND_BUFFER_ENTRY_ALIGNMENT 4
92 const size_t kCommandBufferEntrySize = GPU_COMMAND_BUFFER_ENTRY_ALIGNMENT; 96 const size_t kCommandBufferEntrySize = GPU_COMMAND_BUFFER_ENTRY_ALIGNMENT;
93 97
94 COMPILE_ASSERT(sizeof(CommandBufferEntry) == kCommandBufferEntrySize, 98 static_assert(sizeof(CommandBufferEntry) == kCommandBufferEntrySize,
95 Sizeof_CommandBufferEntry_is_not_4); 99 "size of CommandBufferEntry should equal "
100 "kCommandBufferEntrySize");
96 101
97 // Command buffer is GPU_COMMAND_BUFFER_ENTRY_ALIGNMENT byte aligned. 102 // Command buffer is GPU_COMMAND_BUFFER_ENTRY_ALIGNMENT byte aligned.
98 #pragma pack(push, GPU_COMMAND_BUFFER_ENTRY_ALIGNMENT) 103 #pragma pack(push, GPU_COMMAND_BUFFER_ENTRY_ALIGNMENT)
99 104
100 // Gets the address of memory just after a structure in a typesafe way. This is 105 // Gets the address of memory just after a structure in a typesafe way. This is
101 // used for IMMEDIATE commands to get the address of the place to put the data. 106 // used for IMMEDIATE commands to get the address of the place to put the data.
102 // Immediate command put their data direclty in the command buffer. 107 // Immediate command put their data direclty in the command buffer.
103 // Parameters: 108 // Parameters:
104 // cmd: Address of command. 109 // cmd: Address of command.
105 template <typename T> 110 template <typename T>
106 void* ImmediateDataAddress(T* cmd) { 111 void* ImmediateDataAddress(T* cmd) {
107 COMPILE_ASSERT(T::kArgFlags == cmd::kAtLeastN, Cmd_kArgFlags_not_kAtLeastN); 112 static_assert(T::kArgFlags == cmd::kAtLeastN,
113 "T::kArgFlags should equal cmd::kAtLeastN");
108 return reinterpret_cast<char*>(cmd) + sizeof(*cmd); 114 return reinterpret_cast<char*>(cmd) + sizeof(*cmd);
109 } 115 }
110 116
111 // Gets the address of the place to put the next command in a typesafe way. 117 // Gets the address of the place to put the next command in a typesafe way.
112 // This can only be used for fixed sized commands. 118 // This can only be used for fixed sized commands.
113 template <typename T> 119 template <typename T>
114 // Parameters: 120 // Parameters:
115 // cmd: Address of command. 121 // cmd: Address of command.
116 void* NextCmdAddress(void* cmd) { 122 void* NextCmdAddress(void* cmd) {
117 COMPILE_ASSERT(T::kArgFlags == cmd::kFixed, Cmd_kArgFlags_not_kFixed); 123 static_assert(T::kArgFlags == cmd::kFixed,
124 "T::kArgFlags should equal cmd::kFixed");
118 return reinterpret_cast<char*>(cmd) + sizeof(T); 125 return reinterpret_cast<char*>(cmd) + sizeof(T);
119 } 126 }
120 127
121 // Gets the address of the place to put the next command in a typesafe way. 128 // Gets the address of the place to put the next command in a typesafe way.
122 // This can only be used for variable sized command like IMMEDIATE commands. 129 // This can only be used for variable sized command like IMMEDIATE commands.
123 // Parameters: 130 // Parameters:
124 // cmd: Address of command. 131 // cmd: Address of command.
125 // size_of_data_in_bytes: Size of the data for the command. 132 // size_of_data_in_bytes: Size of the data for the command.
126 template <typename T> 133 template <typename T>
127 void* NextImmediateCmdAddress(void* cmd, uint32_t size_of_data_in_bytes) { 134 void* NextImmediateCmdAddress(void* cmd, uint32_t size_of_data_in_bytes) {
128 COMPILE_ASSERT(T::kArgFlags == cmd::kAtLeastN, Cmd_kArgFlags_not_kAtLeastN); 135 static_assert(T::kArgFlags == cmd::kAtLeastN,
136 "T::kArgFlags should equal cmd::kAtLeastN");
129 return reinterpret_cast<char*>(cmd) + sizeof(T) + // NOLINT 137 return reinterpret_cast<char*>(cmd) + sizeof(T) + // NOLINT
130 RoundSizeToMultipleOfEntries(size_of_data_in_bytes); 138 RoundSizeToMultipleOfEntries(size_of_data_in_bytes);
131 } 139 }
132 140
133 // Gets the address of the place to put the next command in a typesafe way. 141 // Gets the address of the place to put the next command in a typesafe way.
134 // This can only be used for variable sized command like IMMEDIATE commands. 142 // This can only be used for variable sized command like IMMEDIATE commands.
135 // Parameters: 143 // Parameters:
136 // cmd: Address of command. 144 // cmd: Address of command.
137 // size_of_cmd_in_bytes: Size of the cmd and data. 145 // size_of_cmd_in_bytes: Size of the cmd and data.
138 template <typename T> 146 template <typename T>
139 void* NextImmediateCmdAddressTotalSize(void* cmd, 147 void* NextImmediateCmdAddressTotalSize(void* cmd,
140 uint32_t total_size_in_bytes) { 148 uint32_t total_size_in_bytes) {
141 COMPILE_ASSERT(T::kArgFlags == cmd::kAtLeastN, Cmd_kArgFlags_not_kAtLeastN); 149 static_assert(T::kArgFlags == cmd::kAtLeastN,
150 "T::kArgFlags should equal cmd::kAtLeastN");
142 DCHECK_GE(total_size_in_bytes, sizeof(T)); // NOLINT 151 DCHECK_GE(total_size_in_bytes, sizeof(T)); // NOLINT
143 return reinterpret_cast<char*>(cmd) + 152 return reinterpret_cast<char*>(cmd) +
144 RoundSizeToMultipleOfEntries(total_size_in_bytes); 153 RoundSizeToMultipleOfEntries(total_size_in_bytes);
145 } 154 }
146 155
147 namespace cmd { 156 namespace cmd {
148 157
149 // This macro is used to safely and convienently expand the list of commnad 158 // This macro is used to safely and convienently expand the list of commnad
150 // buffer commands in to various lists and never have them get out of sync. To 159 // buffer commands in to various lists and never have them get out of sync. To
151 // add a new command, add it this list, create the corresponding structure below 160 // add a new command, add it this list, create the corresponding structure below
(...skipping 15 matching lines...) Expand all
167 #define COMMON_COMMAND_BUFFER_CMD_OP(name) k ## name, 176 #define COMMON_COMMAND_BUFFER_CMD_OP(name) k ## name,
168 177
169 COMMON_COMMAND_BUFFER_CMDS(COMMON_COMMAND_BUFFER_CMD_OP) 178 COMMON_COMMAND_BUFFER_CMDS(COMMON_COMMAND_BUFFER_CMD_OP)
170 179
171 #undef COMMON_COMMAND_BUFFER_CMD_OP 180 #undef COMMON_COMMAND_BUFFER_CMD_OP
172 181
173 kNumCommands, 182 kNumCommands,
174 kLastCommonId = 255 // reserve 256 spaces for common commands. 183 kLastCommonId = 255 // reserve 256 spaces for common commands.
175 }; 184 };
176 185
177 COMPILE_ASSERT(kNumCommands - 1 <= kLastCommonId, Too_many_common_commands); 186 static_assert(kNumCommands - 1 <= kLastCommonId, "too many commands");
178 187
179 const char* GetCommandName(CommandId id); 188 const char* GetCommandName(CommandId id);
180 189
181 // A Noop command. 190 // A Noop command.
182 struct Noop { 191 struct Noop {
183 typedef Noop ValueType; 192 typedef Noop ValueType;
184 static const CommandId kCmdId = kNoop; 193 static const CommandId kCmdId = kNoop;
185 static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN; 194 static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
186 static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3); 195 static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
187 196
188 void SetHeader(uint32_t skip_count) { 197 void SetHeader(uint32_t skip_count) {
189 DCHECK_GT(skip_count, 0u); 198 DCHECK_GT(skip_count, 0u);
190 header.Init(kCmdId, skip_count); 199 header.Init(kCmdId, skip_count);
191 } 200 }
192 201
193 void Init(uint32_t skip_count) { 202 void Init(uint32_t skip_count) {
194 SetHeader(skip_count); 203 SetHeader(skip_count);
195 } 204 }
196 205
197 static void* Set(void* cmd, uint32_t skip_count) { 206 static void* Set(void* cmd, uint32_t skip_count) {
198 static_cast<ValueType*>(cmd)->Init(skip_count); 207 static_cast<ValueType*>(cmd)->Init(skip_count);
199 return NextImmediateCmdAddress<ValueType>( 208 return NextImmediateCmdAddress<ValueType>(
200 cmd, skip_count * sizeof(CommandBufferEntry)); // NOLINT 209 cmd, skip_count * sizeof(CommandBufferEntry)); // NOLINT
201 } 210 }
202 211
203 CommandHeader header; 212 CommandHeader header;
204 }; 213 };
205 214
206 COMPILE_ASSERT(sizeof(Noop) == 4, Sizeof_Noop_is_not_4); 215 static_assert(sizeof(Noop) == 4, "size of Noop should equal 4");
207 COMPILE_ASSERT(offsetof(Noop, header) == 0, Offsetof_Noop_header_not_0); 216 static_assert(offsetof(Noop, header) == 0,
217 "offset of Noop.header should equal 0");
208 218
209 // The SetToken command puts a token in the command stream that you can 219 // The SetToken command puts a token in the command stream that you can
210 // use to check if that token has been passed in the command stream. 220 // use to check if that token has been passed in the command stream.
211 struct SetToken { 221 struct SetToken {
212 typedef SetToken ValueType; 222 typedef SetToken ValueType;
213 static const CommandId kCmdId = kSetToken; 223 static const CommandId kCmdId = kSetToken;
214 static const cmd::ArgFlags kArgFlags = cmd::kFixed; 224 static const cmd::ArgFlags kArgFlags = cmd::kFixed;
215 static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3); 225 static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
216 226
217 void SetHeader() { 227 void SetHeader() {
218 header.SetCmd<ValueType>(); 228 header.SetCmd<ValueType>();
219 } 229 }
220 230
221 void Init(uint32_t _token) { 231 void Init(uint32_t _token) {
222 SetHeader(); 232 SetHeader();
223 token = _token; 233 token = _token;
224 } 234 }
225 static void* Set(void* cmd, uint32_t token) { 235 static void* Set(void* cmd, uint32_t token) {
226 static_cast<ValueType*>(cmd)->Init(token); 236 static_cast<ValueType*>(cmd)->Init(token);
227 return NextCmdAddress<ValueType>(cmd); 237 return NextCmdAddress<ValueType>(cmd);
228 } 238 }
229 239
230 CommandHeader header; 240 CommandHeader header;
231 uint32_t token; 241 uint32_t token;
232 }; 242 };
233 243
234 COMPILE_ASSERT(sizeof(SetToken) == 8, Sizeof_SetToken_is_not_8); 244 static_assert(sizeof(SetToken) == 8, "size of SetToken should equal 8");
235 COMPILE_ASSERT(offsetof(SetToken, header) == 0, 245 static_assert(offsetof(SetToken, header) == 0,
236 Offsetof_SetToken_header_not_0); 246 "offset of SetToken.header should equal 0");
237 COMPILE_ASSERT(offsetof(SetToken, token) == 4, 247 static_assert(offsetof(SetToken, token) == 4,
238 Offsetof_SetToken_token_not_4); 248 "offset of SetToken.token should equal 4");
239 249
240 // Sets the size of a bucket for collecting data on the service side. 250 // Sets the size of a bucket for collecting data on the service side.
241 // This is a utility for gathering data on the service side so it can be used 251 // This is a utility for gathering data on the service side so it can be used
242 // all at once when some service side API is called. It removes the need to add 252 // all at once when some service side API is called. It removes the need to add
243 // special commands just to support a particular API. For example, any API 253 // special commands just to support a particular API. For example, any API
244 // command that needs a string needs a way to send that string to the API over 254 // command that needs a string needs a way to send that string to the API over
245 // the command buffers. While you can require that the command buffer or 255 // the command buffers. While you can require that the command buffer or
246 // transfer buffer be large enough to hold the largest string you can send, 256 // transfer buffer be large enough to hold the largest string you can send,
247 // using this command removes that restriction by letting you send smaller 257 // using this command removes that restriction by letting you send smaller
248 // pieces over and build up the data on the service side. 258 // pieces over and build up the data on the service side.
(...skipping 18 matching lines...) Expand all
267 static void* Set(void* cmd, uint32_t _bucket_id, uint32_t _size) { 277 static void* Set(void* cmd, uint32_t _bucket_id, uint32_t _size) {
268 static_cast<ValueType*>(cmd)->Init(_bucket_id, _size); 278 static_cast<ValueType*>(cmd)->Init(_bucket_id, _size);
269 return NextCmdAddress<ValueType>(cmd); 279 return NextCmdAddress<ValueType>(cmd);
270 } 280 }
271 281
272 CommandHeader header; 282 CommandHeader header;
273 uint32_t bucket_id; 283 uint32_t bucket_id;
274 uint32_t size; 284 uint32_t size;
275 }; 285 };
276 286
277 COMPILE_ASSERT(sizeof(SetBucketSize) == 12, Sizeof_SetBucketSize_is_not_8); 287 static_assert(sizeof(SetBucketSize) == 12,
278 COMPILE_ASSERT(offsetof(SetBucketSize, header) == 0, 288 "size of SetBucketSize should equal 12");
279 Offsetof_SetBucketSize_header_not_0); 289 static_assert(offsetof(SetBucketSize, header) == 0,
280 COMPILE_ASSERT(offsetof(SetBucketSize, bucket_id) == 4, 290 "offset of SetBucketSize.header should equal 0");
281 Offsetof_SetBucketSize_bucket_id_4); 291 static_assert(offsetof(SetBucketSize, bucket_id) == 4,
282 COMPILE_ASSERT(offsetof(SetBucketSize, size) == 8, 292 "offset of SetBucketSize.bucket_id should equal 4");
283 Offsetof_SetBucketSize_size_8); 293 static_assert(offsetof(SetBucketSize, size) == 8,
294 "offset of SetBucketSize.size should equal 8");
284 295
285 // Sets the contents of a portion of a bucket on the service side from data in 296 // Sets the contents of a portion of a bucket on the service side from data in
286 // shared memory. 297 // shared memory.
287 // See SetBucketSize. 298 // See SetBucketSize.
288 struct SetBucketData { 299 struct SetBucketData {
289 typedef SetBucketData ValueType; 300 typedef SetBucketData ValueType;
290 static const CommandId kCmdId = kSetBucketData; 301 static const CommandId kCmdId = kSetBucketData;
291 static const cmd::ArgFlags kArgFlags = cmd::kFixed; 302 static const cmd::ArgFlags kArgFlags = cmd::kFixed;
292 static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3); 303 static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
293 304
(...skipping 29 matching lines...) Expand all
323 } 334 }
324 335
325 CommandHeader header; 336 CommandHeader header;
326 uint32_t bucket_id; 337 uint32_t bucket_id;
327 uint32_t offset; 338 uint32_t offset;
328 uint32_t size; 339 uint32_t size;
329 uint32_t shared_memory_id; 340 uint32_t shared_memory_id;
330 uint32_t shared_memory_offset; 341 uint32_t shared_memory_offset;
331 }; 342 };
332 343
333 COMPILE_ASSERT(sizeof(SetBucketData) == 24, Sizeof_SetBucketData_is_not_24); 344 static_assert(sizeof(SetBucketData) == 24,
334 COMPILE_ASSERT(offsetof(SetBucketData, header) == 0, 345 "size of SetBucketData should be 24");
335 Offsetof_SetBucketData_header_not_0); 346 static_assert(offsetof(SetBucketData, header) == 0,
336 COMPILE_ASSERT(offsetof(SetBucketData, bucket_id) == 4, 347 "offset of SetBucketData.header should be 0");
337 Offsetof_SetBucketData_bucket_id_not_4); 348 static_assert(offsetof(SetBucketData, bucket_id) == 4,
338 COMPILE_ASSERT(offsetof(SetBucketData, offset) == 8, 349 "offset of SetBucketData.bucket_id should be 4");
339 Offsetof_SetBucketData_offset_not_8); 350 static_assert(offsetof(SetBucketData, offset) == 8,
340 COMPILE_ASSERT(offsetof(SetBucketData, size) == 12, 351 "offset of SetBucketData.offset should be 8");
341 Offsetof_SetBucketData_size_not_12); 352 static_assert(offsetof(SetBucketData, size) == 12,
342 COMPILE_ASSERT(offsetof(SetBucketData, shared_memory_id) == 16, 353 "offset of SetBucketData.size should be 12");
343 Offsetof_SetBucketData_shared_memory_id_not_16); 354 static_assert(offsetof(SetBucketData, shared_memory_id) == 16,
344 COMPILE_ASSERT(offsetof(SetBucketData, shared_memory_offset) == 20, 355 "offset of SetBucketData.shared_memory_id should be 16");
345 Offsetof_SetBucketData_shared_memory_offset_not_20); 356 static_assert(offsetof(SetBucketData, shared_memory_offset) == 20,
357 "offset of SetBucketData.shared_memory_offset should be 20");
346 358
347 // Sets the contents of a portion of a bucket on the service side from data in 359 // Sets the contents of a portion of a bucket on the service side from data in
348 // the command buffer. 360 // the command buffer.
349 // See SetBucketSize. 361 // See SetBucketSize.
350 struct SetBucketDataImmediate { 362 struct SetBucketDataImmediate {
351 typedef SetBucketDataImmediate ValueType; 363 typedef SetBucketDataImmediate ValueType;
352 static const CommandId kCmdId = kSetBucketDataImmediate; 364 static const CommandId kCmdId = kSetBucketDataImmediate;
353 static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN; 365 static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
354 static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3); 366 static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
355 367
(...skipping 19 matching lines...) Expand all
375 _size); 387 _size);
376 return NextImmediateCmdAddress<ValueType>(cmd, _size); 388 return NextImmediateCmdAddress<ValueType>(cmd, _size);
377 } 389 }
378 390
379 CommandHeader header; 391 CommandHeader header;
380 uint32_t bucket_id; 392 uint32_t bucket_id;
381 uint32_t offset; 393 uint32_t offset;
382 uint32_t size; 394 uint32_t size;
383 }; 395 };
384 396
385 COMPILE_ASSERT(sizeof(SetBucketDataImmediate) == 16, 397 static_assert(sizeof(SetBucketDataImmediate) == 16,
386 Sizeof_SetBucketDataImmediate_is_not_24); 398 "size of SetBucketDataImmediate should be 16");
387 COMPILE_ASSERT(offsetof(SetBucketDataImmediate, header) == 0, 399 static_assert(offsetof(SetBucketDataImmediate, header) == 0,
388 Offsetof_SetBucketDataImmediate_header_not_0); 400 "offset of SetBucketDataImmediate.header should be 0");
389 COMPILE_ASSERT(offsetof(SetBucketDataImmediate, bucket_id) == 4, 401 static_assert(offsetof(SetBucketDataImmediate, bucket_id) == 4,
390 Offsetof_SetBucketDataImmediate_bucket_id_not_4); 402 "offset of SetBucketDataImmediate.bucket_id should be 4");
391 COMPILE_ASSERT(offsetof(SetBucketDataImmediate, offset) == 8, 403 static_assert(offsetof(SetBucketDataImmediate, offset) == 8,
392 Offsetof_SetBucketDataImmediate_offset_not_8); 404 "offset of SetBucketDataImmediate.offset should be 8");
393 COMPILE_ASSERT(offsetof(SetBucketDataImmediate, size) == 12, 405 static_assert(offsetof(SetBucketDataImmediate, size) == 12,
394 Offsetof_SetBucketDataImmediate_size_not_12); 406 "offset of SetBucketDataImmediate.size should be 12");
395 407
396 // Gets the start of a bucket the service has available. Sending a variable size 408 // Gets the start of a bucket the service has available. Sending a variable size
397 // result back to the client and the portion of that result that fits in the 409 // result back to the client and the portion of that result that fits in the
398 // supplied shared memory. If the size of the result is larger than the supplied 410 // supplied shared memory. If the size of the result is larger than the supplied
399 // shared memory the rest of the bucket's contents can be retrieved with 411 // shared memory the rest of the bucket's contents can be retrieved with
400 // GetBucketData. 412 // GetBucketData.
401 // 413 //
402 // This is used for example for any API that returns a string. The problem is 414 // This is used for example for any API that returns a string. The problem is
403 // the largest thing you can send back in 1 command is the size of your shared 415 // the largest thing you can send back in 1 command is the size of your shared
404 // memory. This command along with GetBucketData implements a way to get a 416 // memory. This command along with GetBucketData implements a way to get a
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
448 460
449 CommandHeader header; 461 CommandHeader header;
450 uint32_t bucket_id; 462 uint32_t bucket_id;
451 uint32_t result_memory_id; 463 uint32_t result_memory_id;
452 uint32_t result_memory_offset; 464 uint32_t result_memory_offset;
453 uint32_t data_memory_size; 465 uint32_t data_memory_size;
454 uint32_t data_memory_id; 466 uint32_t data_memory_id;
455 uint32_t data_memory_offset; 467 uint32_t data_memory_offset;
456 }; 468 };
457 469
458 COMPILE_ASSERT(sizeof(GetBucketStart) == 28, Sizeof_GetBucketStart_is_not_28); 470 static_assert(sizeof(GetBucketStart) == 28,
459 COMPILE_ASSERT(offsetof(GetBucketStart, header) == 0, 471 "size of GetBucketStart should be 28");
460 Offsetof_GetBucketStart_header_not_0); 472 static_assert(offsetof(GetBucketStart, header) == 0,
461 COMPILE_ASSERT(offsetof(GetBucketStart, bucket_id) == 4, 473 "offset of GetBucketStart.header should be 0");
462 Offsetof_GetBucketStart_bucket_id_not_4); 474 static_assert(offsetof(GetBucketStart, bucket_id) == 4,
463 COMPILE_ASSERT(offsetof(GetBucketStart, result_memory_id) == 8, 475 "offset of GetBucketStart.bucket_id should be 4");
464 Offsetof_GetBucketStart_result_memory_id_not_8); 476 static_assert(offsetof(GetBucketStart, result_memory_id) == 8,
465 COMPILE_ASSERT(offsetof(GetBucketStart, result_memory_offset) == 12, 477 "offset of GetBucketStart.result_memory_id should be 8");
466 Offsetof_GetBucketStart_result_memory_offset_not_12); 478 static_assert(offsetof(GetBucketStart, result_memory_offset) == 12,
467 COMPILE_ASSERT(offsetof(GetBucketStart, data_memory_size) == 16, 479 "offset of GetBucketStart.result_memory_offset should be 12");
468 Offsetof_GetBucketStart_data_memory_size_not_16); 480 static_assert(offsetof(GetBucketStart, data_memory_size) == 16,
469 COMPILE_ASSERT(offsetof(GetBucketStart, data_memory_id) == 20, 481 "offset of GetBucketStart.data_memory_size should be 16");
470 Offsetof_GetBucketStart_data_memory_id_not_20); 482 static_assert(offsetof(GetBucketStart, data_memory_id) == 20,
471 COMPILE_ASSERT(offsetof(GetBucketStart, data_memory_offset) == 24, 483 "offset of GetBucketStart.data_memory_id should be 20");
472 Offsetof_GetBucketStart_data_memory_offset_not_24); 484 static_assert(offsetof(GetBucketStart, data_memory_offset) == 24,
485 "offset of GetBucketStart.data_memory_offset should be 24");
473 486
474 // Gets a piece of a result the service as available. 487 // Gets a piece of a result the service as available.
475 // See GetBucketSize. 488 // See GetBucketSize.
476 struct GetBucketData { 489 struct GetBucketData {
477 typedef GetBucketData ValueType; 490 typedef GetBucketData ValueType;
478 static const CommandId kCmdId = kGetBucketData; 491 static const CommandId kCmdId = kGetBucketData;
479 static const cmd::ArgFlags kArgFlags = cmd::kFixed; 492 static const cmd::ArgFlags kArgFlags = cmd::kFixed;
480 static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3); 493 static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
481 494
482 void SetHeader() { 495 void SetHeader() {
(...skipping 28 matching lines...) Expand all
511 } 524 }
512 525
513 CommandHeader header; 526 CommandHeader header;
514 uint32_t bucket_id; 527 uint32_t bucket_id;
515 uint32_t offset; 528 uint32_t offset;
516 uint32_t size; 529 uint32_t size;
517 uint32_t shared_memory_id; 530 uint32_t shared_memory_id;
518 uint32_t shared_memory_offset; 531 uint32_t shared_memory_offset;
519 }; 532 };
520 533
521 COMPILE_ASSERT(sizeof(GetBucketData) == 24, Sizeof_GetBucketData_is_not_20); 534 static_assert(sizeof(GetBucketData) == 24,
522 COMPILE_ASSERT(offsetof(GetBucketData, header) == 0, 535 "size of GetBucketData should be 24");
523 Offsetof_GetBucketData_header_not_0); 536 static_assert(offsetof(GetBucketData, header) == 0,
524 COMPILE_ASSERT(offsetof(GetBucketData, bucket_id) == 4, 537 "offset of GetBucketData.header should be 0");
525 Offsetof_GetBucketData_bucket_id_not_4); 538 static_assert(offsetof(GetBucketData, bucket_id) == 4,
526 COMPILE_ASSERT(offsetof(GetBucketData, offset) == 8, 539 "offset of GetBucketData.bucket_id should be 4");
527 Offsetof_GetBucketData_offset_not_8); 540 static_assert(offsetof(GetBucketData, offset) == 8,
528 COMPILE_ASSERT(offsetof(GetBucketData, size) == 12, 541 "offset of GetBucketData.offset should be 8");
529 Offsetof_GetBucketData_size_not_12); 542 static_assert(offsetof(GetBucketData, size) == 12,
530 COMPILE_ASSERT(offsetof(GetBucketData, shared_memory_id) == 16, 543 "offset of GetBucketData.size should be 12");
531 Offsetof_GetBucketData_shared_memory_id_not_16); 544 static_assert(offsetof(GetBucketData, shared_memory_id) == 16,
532 COMPILE_ASSERT(offsetof(GetBucketData, shared_memory_offset) == 20, 545 "offset of GetBucketData.shared_memory_id should be 16");
533 Offsetof_GetBucketData_shared_memory_offset_not_20); 546 static_assert(offsetof(GetBucketData, shared_memory_offset) == 20,
547 "offset of GetBucketData.shared_memory_offset should be 20");
534 548
535 } // namespace cmd 549 } // namespace cmd
536 550
537 #pragma pack(pop) 551 #pragma pack(pop)
538 552
539 } // namespace gpu 553 } // namespace gpu
540 554
541 #endif // GPU_COMMAND_BUFFER_COMMON_CMD_BUFFER_COMMON_H_ 555 #endif // GPU_COMMAND_BUFFER_COMMON_CMD_BUFFER_COMMON_H_
542 556
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698