| 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 <string.h> | 10 #include <string.h> |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 102 | 102 |
| 103 // Typed version of GetSpace for immediate commands. | 103 // Typed version of GetSpace for immediate commands. |
| 104 template <typename T> | 104 template <typename T> |
| 105 T& GetImmediateCmdSpaceTotalSize(size_t total_space) { | 105 T& GetImmediateCmdSpaceTotalSize(size_t total_space) { |
| 106 COMPILE_ASSERT(T::kArgFlags == cmd::kAtLeastN, Cmd_kArgFlags_not_kAtLeastN); | 106 COMPILE_ASSERT(T::kArgFlags == cmd::kAtLeastN, Cmd_kArgFlags_not_kAtLeastN); |
| 107 uint32 space_needed = ComputeNumEntries(total_space); | 107 uint32 space_needed = ComputeNumEntries(total_space); |
| 108 void* data = GetSpace(space_needed); | 108 void* data = GetSpace(space_needed); |
| 109 return *reinterpret_cast<T*>(data); | 109 return *reinterpret_cast<T*>(data); |
| 110 } | 110 } |
| 111 | 111 |
| 112 int32 last_token_read() const { |
| 113 return last_token_read_; |
| 114 } |
| 115 |
| 112 error::Error GetError(); | 116 error::Error GetError(); |
| 113 | 117 |
| 114 // Common Commands | 118 // Common Commands |
| 115 void Noop(uint32 skip_count) { | 119 void Noop(uint32 skip_count) { |
| 116 cmd::Noop& cmd = GetImmediateCmdSpace<cmd::Noop>( | 120 cmd::Noop& cmd = GetImmediateCmdSpace<cmd::Noop>( |
| 117 skip_count * sizeof(CommandBufferEntry)); | 121 skip_count * sizeof(CommandBufferEntry)); |
| 118 cmd.Init(skip_count); | 122 cmd.Init(skip_count); |
| 119 } | 123 } |
| 120 | 124 |
| 121 void SetToken(uint32 token) { | 125 void SetToken(uint32 token) { |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 189 uint32 shared_memory_id, | 193 uint32 shared_memory_id, |
| 190 uint32 shared_memory_offset) { | 194 uint32 shared_memory_offset) { |
| 191 cmd::GetBucketData& cmd = GetCmdSpace<cmd::GetBucketData>(); | 195 cmd::GetBucketData& cmd = GetCmdSpace<cmd::GetBucketData>(); |
| 192 cmd.Init(bucket_id, | 196 cmd.Init(bucket_id, |
| 193 offset, | 197 offset, |
| 194 size, | 198 size, |
| 195 shared_memory_id, | 199 shared_memory_id, |
| 196 shared_memory_offset); | 200 shared_memory_offset); |
| 197 } | 201 } |
| 198 | 202 |
| 203 CommandBuffer* command_buffer() const { |
| 204 return command_buffer_; |
| 205 } |
| 206 |
| 199 private: | 207 private: |
| 200 // Waits until get changes, updating the value of get_. | 208 // Waits until get changes, updating the value of get_. |
| 201 void WaitForGetChange(); | 209 void WaitForGetChange(); |
| 202 | 210 |
| 203 // Returns the number of available entries (they may not be contiguous). | 211 // Returns the number of available entries (they may not be contiguous). |
| 204 int32 AvailableEntries() { | 212 int32 AvailableEntries() { |
| 205 return (get_ - put_ - 1 + usable_entry_count_) % usable_entry_count_; | 213 return (get_ - put_ - 1 + usable_entry_count_) % usable_entry_count_; |
| 206 } | 214 } |
| 207 | 215 |
| 208 // Synchronize with current service state. | 216 // Synchronize with current service state. |
| 209 void SynchronizeState(CommandBuffer::State state); | 217 void SynchronizeState(CommandBuffer::State state); |
| 210 | 218 |
| 211 CommandBuffer* command_buffer_; | 219 CommandBuffer* command_buffer_; |
| 212 Buffer ring_buffer_; | 220 Buffer ring_buffer_; |
| 213 CommandBufferEntry *entries_; | 221 CommandBufferEntry *entries_; |
| 214 int32 total_entry_count_; // the total number of entries | 222 int32 total_entry_count_; // the total number of entries |
| 215 int32 usable_entry_count_; // the usable number (ie, minus space for jump) | 223 int32 usable_entry_count_; // the usable number (ie, minus space for jump) |
| 216 int32 token_; | 224 int32 token_; |
| 217 int32 last_token_read_; | 225 int32 last_token_read_; |
| 218 int32 get_; | 226 int32 get_; |
| 219 int32 put_; | 227 int32 put_; |
| 220 | 228 |
| 221 friend class CommandBufferHelperTest; | 229 friend class CommandBufferHelperTest; |
| 222 DISALLOW_COPY_AND_ASSIGN(CommandBufferHelper); | 230 DISALLOW_COPY_AND_ASSIGN(CommandBufferHelper); |
| 223 }; | 231 }; |
| 224 | 232 |
| 225 } // namespace gpu | 233 } // namespace gpu |
| 226 | 234 |
| 227 #endif // GPU_COMMAND_BUFFER_CLIENT_CMD_BUFFER_HELPER_H_ | 235 #endif // GPU_COMMAND_BUFFER_CLIENT_CMD_BUFFER_HELPER_H_ |
| OLD | NEW |