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

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

Issue 555129: Add commands Jump, Call and Return... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 years, 10 months 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 | Annotate | Revision Log
OLDNEW
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 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 "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 20 matching lines...) Expand all
31 // Rounds up to a multiple of entries in bytes. 31 // Rounds up to a multiple of entries in bytes.
32 inline size_t RoundSizeToMultipleOfEntries(size_t size_in_bytes) { 32 inline size_t RoundSizeToMultipleOfEntries(size_t size_in_bytes) {
33 return ComputeNumEntries(size_in_bytes) * sizeof(uint32); // NOLINT 33 return ComputeNumEntries(size_in_bytes) * sizeof(uint32); // NOLINT
34 } 34 }
35 35
36 // Struct that defines the command header in the command buffer. 36 // Struct that defines the command header in the command buffer.
37 struct CommandHeader { 37 struct CommandHeader {
38 Uint32 size:21; 38 Uint32 size:21;
39 Uint32 command:11; 39 Uint32 command:11;
40 40
41 void Init(uint32 _command, uint32 _size) { 41 static const int32 kMaxSize = (1 << 21) - 1;
42 DCHECK_LE(_size, 1u << 22); 42
43 void Init(uint32 _command, int32 _size) {
44 DCHECK_LE(_size, kMaxSize);
43 command = _command; 45 command = _command;
44 size = _size; 46 size = _size;
45 } 47 }
46 48
47 // Sets the header based on the passed in command. Can not be used for 49 // Sets the header based on the passed in command. Can not be used for
48 // variable sized commands like immediate commands or Noop. 50 // variable sized commands like immediate commands or Noop.
49 template <typename T> 51 template <typename T>
50 void SetCmd() { 52 void SetCmd() {
51 COMPILE_ASSERT(T::kArgFlags == cmd::kFixed, Cmd_kArgFlags_not_kFixed); 53 COMPILE_ASSERT(T::kArgFlags == cmd::kFixed, Cmd_kArgFlags_not_kFixed);
52 Init(T::kCmdId, ComputeNumEntries(sizeof(T))); // NOLINT 54 Init(T::kCmdId, ComputeNumEntries(sizeof(T))); // NOLINT
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 175
174 const char* GetCommandName(CommandId id); 176 const char* GetCommandName(CommandId id);
175 177
176 // A Noop command. 178 // A Noop command.
177 struct Noop { 179 struct Noop {
178 typedef Noop ValueType; 180 typedef Noop ValueType;
179 static const CommandId kCmdId = kNoop; 181 static const CommandId kCmdId = kNoop;
180 static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN; 182 static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
181 183
182 void SetHeader(uint32 skip_count) { 184 void SetHeader(uint32 skip_count) {
183 header.Init(kCmdId, skip_count + 1); 185 DCHECK_GT(skip_count, 0u);
186 header.Init(kCmdId, skip_count);
184 } 187 }
185 188
186 void Init(uint32 skip_count) { 189 void Init(uint32 skip_count) {
187 SetHeader(skip_count); 190 SetHeader(skip_count);
188 } 191 }
189 192
190 static void* Set(void* cmd, uint32 skip_count) { 193 static void* Set(void* cmd, uint32 skip_count) {
191 static_cast<ValueType*>(cmd)->Init(skip_count); 194 static_cast<ValueType*>(cmd)->Init(skip_count);
192 return NextImmediateCmdAddress<ValueType>( 195 return NextImmediateCmdAddress<ValueType>(
193 cmd, skip_count * sizeof(CommandBufferEntry)); // NOLINT 196 cmd, skip_count * sizeof(CommandBufferEntry)); // NOLINT
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
232 // The Jump command jumps to another place in the command buffer. 235 // The Jump command jumps to another place in the command buffer.
233 struct Jump { 236 struct Jump {
234 typedef Jump ValueType; 237 typedef Jump ValueType;
235 static const CommandId kCmdId = kJump; 238 static const CommandId kCmdId = kJump;
236 static const cmd::ArgFlags kArgFlags = cmd::kFixed; 239 static const cmd::ArgFlags kArgFlags = cmd::kFixed;
237 240
238 void SetHeader() { 241 void SetHeader() {
239 header.SetCmd<ValueType>(); 242 header.SetCmd<ValueType>();
240 } 243 }
241 244
242 void Init(uint32 _shared_memory_id, uint32 _shared_memory_offset) { 245 void Init(uint32 _offset) {
243 SetHeader(); 246 SetHeader();
244 shared_memory_id = _shared_memory_id; 247 offset = _offset;
245 shared_memory_offset = _shared_memory_offset;
246 } 248 }
247 static void* Set( 249 static void* Set(
248 void* cmd, uint32 _shared_memory_id, uint32 _shared_memory_offset) { 250 void* cmd, uint32 _offset) {
249 static_cast<ValueType*>(cmd)->Init( 251 static_cast<ValueType*>(cmd)->Init(_offset);
250 _shared_memory_id, _shared_memory_offset);
251 return NextCmdAddress<ValueType>(cmd); 252 return NextCmdAddress<ValueType>(cmd);
252 } 253 }
253 254
254 CommandHeader header; 255 CommandHeader header;
255 uint32 shared_memory_id; 256 uint32 offset;
256 uint32 shared_memory_offset;
257 }; 257 };
258 258
259 COMPILE_ASSERT(sizeof(Jump) == 12, Sizeof_Jump_is_not_12); 259 COMPILE_ASSERT(sizeof(Jump) == 8, Sizeof_Jump_is_not_8);
260 COMPILE_ASSERT(offsetof(Jump, header) == 0, 260 COMPILE_ASSERT(offsetof(Jump, header) == 0,
261 Offsetof_Jump_header_not_0); 261 Offsetof_Jump_header_not_0);
262 COMPILE_ASSERT(offsetof(Jump, shared_memory_id) == 4, 262 COMPILE_ASSERT(offsetof(Jump, offset) == 4,
263 Offsetof_Jump_shared_memory_id_not_4); 263 Offsetof_Jump_offset_not_4);
264 COMPILE_ASSERT(offsetof(Jump, shared_memory_offset) == 8,
265 Offsetof_Jump_shared_memory_offset_not_8);
266 264
267 // The JumpRelative command jumps to another place in the command buffer 265 // The JumpRelative command jumps to another place in the command buffer
268 // relative to the end of this command. In other words. JumpRelative with an 266 // relative to the end of this command. In other words. JumpRelative with an
269 // offset of zero is effectively a noop. 267 // offset of zero is effectively a noop.
270 struct JumpRelative { 268 struct JumpRelative {
271 typedef JumpRelative ValueType; 269 typedef JumpRelative ValueType;
272 static const CommandId kCmdId = kJumpRelative; 270 static const CommandId kCmdId = kJumpRelative;
273 static const cmd::ArgFlags kArgFlags = cmd::kFixed; 271 static const cmd::ArgFlags kArgFlags = cmd::kFixed;
274 272
275 void SetHeader() { 273 void SetHeader() {
(...skipping 23 matching lines...) Expand all
299 // Return command. 297 // Return command.
300 struct Call { 298 struct Call {
301 typedef Call ValueType; 299 typedef Call ValueType;
302 static const CommandId kCmdId = kCall; 300 static const CommandId kCmdId = kCall;
303 static const cmd::ArgFlags kArgFlags = cmd::kFixed; 301 static const cmd::ArgFlags kArgFlags = cmd::kFixed;
304 302
305 void SetHeader() { 303 void SetHeader() {
306 header.SetCmd<ValueType>(); 304 header.SetCmd<ValueType>();
307 } 305 }
308 306
309 void Init(uint32 _shared_memory_id, uint32 _shared_memory_offset) { 307 void Init(uint32 _offset) {
310 SetHeader(); 308 SetHeader();
311 shared_memory_id = _shared_memory_id; 309 offset = _offset;
312 shared_memory_offset = _shared_memory_offset;
313 } 310 }
314 static void* Set( 311 static void* Set(void* cmd, uint32 _offset) {
315 void* cmd, uint32 _shared_memory_id, uint32 _shared_memory_offset) { 312 static_cast<ValueType*>(cmd)->Init(_offset);
316 static_cast<ValueType*>(cmd)->Init(
317 _shared_memory_id, _shared_memory_offset);
318 return NextCmdAddress<ValueType>(cmd); 313 return NextCmdAddress<ValueType>(cmd);
319 } 314 }
320 315
321 CommandHeader header; 316 CommandHeader header;
322 uint32 shared_memory_id; 317 uint32 offset;
323 uint32 shared_memory_offset;
324 }; 318 };
325 319
326 COMPILE_ASSERT(sizeof(Call) == 12, Sizeof_Call_is_not_12); 320 COMPILE_ASSERT(sizeof(Call) == 8, Sizeof_Call_is_not_8);
327 COMPILE_ASSERT(offsetof(Call, header) == 0, 321 COMPILE_ASSERT(offsetof(Call, header) == 0,
328 Offsetof_Call_header_not_0); 322 Offsetof_Call_header_not_0);
329 COMPILE_ASSERT(offsetof(Call, shared_memory_id) == 4, 323 COMPILE_ASSERT(offsetof(Call, offset) == 4,
330 Offsetof_Call_shared_memory_id_not_4); 324 Offsetof_Call_offset_not_4);
331 COMPILE_ASSERT(offsetof(Call, shared_memory_offset) == 8,
332 Offsetof_Call_shared_memory_offset_not_8);
333 325
334 // The CallRelative command jumps to a subroutine using a relative offset. The 326 // The CallRelative command jumps to a subroutine using a relative offset. The
335 // offset is relative to the end of this command.. 327 // offset is relative to the end of this command..
336 struct CallRelative { 328 struct CallRelative {
337 typedef CallRelative ValueType; 329 typedef CallRelative ValueType;
338 static const CommandId kCmdId = kCallRelative; 330 static const CommandId kCmdId = kCallRelative;
339 static const cmd::ArgFlags kArgFlags = cmd::kFixed; 331 static const cmd::ArgFlags kArgFlags = cmd::kFixed;
340 332
341 void SetHeader() { 333 void SetHeader() {
342 header.SetCmd<ValueType>(); 334 header.SetCmd<ValueType>();
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after
649 Offsetof_GetBucketData_shared_memory_offset_not_20); 641 Offsetof_GetBucketData_shared_memory_offset_not_20);
650 642
651 } // namespace cmd 643 } // namespace cmd
652 644
653 #pragma pack(pop) 645 #pragma pack(pop)
654 646
655 } // namespace gpu 647 } // namespace gpu
656 648
657 #endif // GPU_COMMAND_BUFFER_COMMON_CMD_BUFFER_COMMON_H_ 649 #endif // GPU_COMMAND_BUFFER_COMMON_CMD_BUFFER_COMMON_H_
658 650
OLDNEW
« no previous file with comments | « gpu/command_buffer/client/cmd_buffer_helper_test.cc ('k') | gpu/command_buffer/service/cmd_buffer_engine.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698