| 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 #ifndef GPU_COMMAND_BUFFER_CLIENT_GLES2_IMPLEMENTATION_H_ | 5 #ifndef GPU_COMMAND_BUFFER_CLIENT_GLES2_IMPLEMENTATION_H_ |
| 6 #define GPU_COMMAND_BUFFER_CLIENT_GLES2_IMPLEMENTATION_H_ | 6 #define GPU_COMMAND_BUFFER_CLIENT_GLES2_IMPLEMENTATION_H_ |
| 7 | 7 |
| 8 #include <GLES2/gl2.h> | 8 #include <GLES2/gl2.h> |
| 9 | 9 |
| 10 #include <map> | 10 #include <map> |
| 11 #include <string> | 11 #include <string> |
| 12 #include <vector> | 12 #include <vector> |
| 13 | 13 |
| 14 #include "../common/gles2_cmd_utils.h" | 14 #include "../common/gles2_cmd_utils.h" |
| 15 #include "../common/scoped_ptr.h" | 15 #include "../common/scoped_ptr.h" |
| 16 #include "../client/gles2_cmd_helper.h" | 16 #include "../client/gles2_cmd_helper.h" |
| 17 #include "../client/ring_buffer.h" | 17 #include "../client/ring_buffer.h" |
| 18 | 18 |
| 19 #define GLES2_SUPPORT_CLIENT_SIDE_BUFFERS 1 | 19 #define GLES2_SUPPORT_CLIENT_SIDE_BUFFERS 1 |
| 20 | 20 |
| 21 namespace gpu { | 21 namespace gpu { |
| 22 |
| 23 class MappedMemoryManager; |
| 24 |
| 22 namespace gles2 { | 25 namespace gles2 { |
| 23 | 26 |
| 24 class ClientSideBufferHelper; | 27 class ClientSideBufferHelper; |
| 25 | 28 |
| 26 // Base class for IdHandlers | 29 // Base class for IdHandlers |
| 27 class IdHandlerInterface { | 30 class IdHandlerInterface { |
| 28 public: | 31 public: |
| 29 IdHandlerInterface() { } | 32 IdHandlerInterface() { } |
| 30 virtual ~IdHandlerInterface() { } | 33 virtual ~IdHandlerInterface() { } |
| 31 | 34 |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 138 typedef GetVertexAttribiv::Result Result; | 141 typedef GetVertexAttribiv::Result Result; |
| 139 Result* result = GetResultAs<Result*>(); | 142 Result* result = GetResultAs<Result*>(); |
| 140 result->SetNumResults(0); | 143 result->SetNumResults(0); |
| 141 helper_->GetVertexAttribiv( | 144 helper_->GetVertexAttribiv( |
| 142 index, pname, result_shm_id(), result_shm_offset()); | 145 index, pname, result_shm_id(), result_shm_offset()); |
| 143 WaitForCmd(); | 146 WaitForCmd(); |
| 144 result->CopyResult(params); | 147 result->CopyResult(params); |
| 145 } | 148 } |
| 146 #endif | 149 #endif |
| 147 | 150 |
| 148 GLuint MakeTextureId() { | 151 GLuint MakeTextureId() { |
| 149 GLuint id; | 152 GLuint id; |
| 150 texture_id_handler_->MakeIds(0, 1, &id); | 153 texture_id_handler_->MakeIds(0, 1, &id); |
| 151 return id; | 154 return id; |
| 152 } | 155 } |
| 153 | 156 |
| 154 void FreeTextureId(GLuint id) { | 157 void FreeTextureId(GLuint id) { |
| 155 texture_id_handler_->FreeIds(1, &id); | 158 texture_id_handler_->FreeIds(1, &id); |
| 156 } | 159 } |
| 157 | 160 |
| 158 private: | 161 private: |
| 159 // Wraps RingBufferWrapper to provide aligned allocations. | 162 // Wraps RingBufferWrapper to provide aligned allocations. |
| 160 class AlignedRingBuffer : public RingBufferWrapper { | 163 class AlignedRingBuffer : public RingBufferWrapper { |
| 161 public: | 164 public: |
| 162 AlignedRingBuffer(RingBuffer::Offset base_offset, | 165 AlignedRingBuffer(RingBuffer::Offset base_offset, |
| 163 unsigned int size, | 166 unsigned int size, |
| 164 CommandBufferHelper *helper, | 167 CommandBufferHelper *helper, |
| 165 void *base) | 168 void *base) |
| 166 : RingBufferWrapper(base_offset, size, helper, base) { | 169 : RingBufferWrapper(base_offset, size, helper, base) { |
| 167 } | 170 } |
| 168 | 171 |
| 169 static unsigned int RoundToAlignment(unsigned int size) { | 172 static unsigned int RoundToAlignment(unsigned int size) { |
| 170 return (size + kAlignment - 1) & ~(kAlignment - 1); | 173 return (size + kAlignment - 1) & ~(kAlignment - 1); |
| 171 } | 174 } |
| 172 | 175 |
| 173 // Overrriden from RingBufferWrapper | 176 // Overrriden from RingBufferWrapper |
| 174 void *Alloc(unsigned int size) { | 177 void *Alloc(unsigned int size) { |
| 175 return RingBufferWrapper::Alloc(RoundToAlignment(size)); | 178 return RingBufferWrapper::Alloc(RoundToAlignment(size)); |
| 176 } | 179 } |
| 177 | 180 |
| 178 // Overrriden from RingBufferWrapper | 181 // Overrriden from RingBufferWrapper |
| 179 template <typename T> T *AllocTyped(unsigned int count) { | 182 template <typename T> T *AllocTyped(unsigned int count) { |
| 180 return static_cast<T *>(Alloc(count * sizeof(T))); | 183 return static_cast<T *>(Alloc(count * sizeof(T))); |
| 181 } | 184 } |
| 182 }; | 185 }; |
| 183 | 186 |
| 187 // Base class for mapped resources. |
| 188 struct MappedResource { |
| 189 MappedResource(GLenum _access, int _shm_id, void* mem, unsigned int offset) |
| 190 : access(_access), |
| 191 shm_id(_shm_id), |
| 192 shm_memory(mem), |
| 193 shm_offset(offset) { |
| 194 } |
| 195 |
| 196 // access mode. Currently only GL_WRITE_ONLY is valid |
| 197 GLenum access; |
| 198 |
| 199 // Shared memory ID for buffer. |
| 200 int shm_id; |
| 201 |
| 202 // Address of shared memory |
| 203 void* shm_memory; |
| 204 |
| 205 // Offset of shared memory |
| 206 unsigned int shm_offset; |
| 207 }; |
| 208 |
| 209 // Used to track mapped textures. |
| 210 struct MappedTexture : public MappedResource { |
| 211 MappedTexture( |
| 212 GLenum access, |
| 213 int shm_id, |
| 214 void* shm_mem, |
| 215 unsigned int shm_offset, |
| 216 GLenum _target, |
| 217 GLint _level, |
| 218 GLint _xoffset, |
| 219 GLint _yoffset, |
| 220 GLsizei _width, |
| 221 GLsizei _height, |
| 222 GLenum _format, |
| 223 GLenum _type) |
| 224 : MappedResource(access, shm_id, shm_mem, shm_offset), |
| 225 target(_target), |
| 226 level(_level), |
| 227 xoffset(_xoffset), |
| 228 yoffset(_yoffset), |
| 229 width(_width), |
| 230 height(_height), |
| 231 format(_format), |
| 232 type(_type) { |
| 233 } |
| 234 |
| 235 // These match the arguments to TexSubImage2D. |
| 236 GLenum target; |
| 237 GLint level; |
| 238 GLint xoffset; |
| 239 GLint yoffset; |
| 240 GLsizei width; |
| 241 GLsizei height; |
| 242 GLenum format; |
| 243 GLenum type; |
| 244 }; |
| 245 |
| 246 // Used to track mapped buffers. |
| 247 struct MappedBuffer : public MappedResource { |
| 248 MappedBuffer( |
| 249 GLenum access, |
| 250 int shm_id, |
| 251 void* shm_mem, |
| 252 unsigned int shm_offset, |
| 253 GLenum _target, |
| 254 GLintptr _offset, |
| 255 GLsizeiptr _size) |
| 256 : MappedResource(access, shm_id, shm_mem, shm_offset), |
| 257 target(_target), |
| 258 offset(_offset), |
| 259 size(_size) { |
| 260 } |
| 261 |
| 262 // These match the arguments to BufferSubData. |
| 263 GLenum target; |
| 264 GLintptr offset; |
| 265 GLsizeiptr size; |
| 266 }; |
| 267 |
| 184 // Gets the shared memory id for the result buffer. | 268 // Gets the shared memory id for the result buffer. |
| 185 uint32 result_shm_id() const { | 269 uint32 result_shm_id() const { |
| 186 return transfer_buffer_id_; | 270 return transfer_buffer_id_; |
| 187 } | 271 } |
| 188 | 272 |
| 189 // Gets the shared memory offset for the result buffer. | 273 // Gets the shared memory offset for the result buffer. |
| 190 uint32 result_shm_offset() const { | 274 uint32 result_shm_offset() const { |
| 191 return result_shm_offset_; | 275 return result_shm_offset_; |
| 192 } | 276 } |
| 193 | 277 |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 284 #endif | 368 #endif |
| 285 | 369 |
| 286 // Current GL error bits. | 370 // Current GL error bits. |
| 287 uint32 error_bits_; | 371 uint32 error_bits_; |
| 288 | 372 |
| 289 // Map of GLenum to Strings for glGetString. We need to cache these because | 373 // Map of GLenum to Strings for glGetString. We need to cache these because |
| 290 // the pointer passed back to the client has to remain valid for eternity. | 374 // the pointer passed back to the client has to remain valid for eternity. |
| 291 typedef std::map<uint32, std::string> GLStringMap; | 375 typedef std::map<uint32, std::string> GLStringMap; |
| 292 GLStringMap gl_strings_; | 376 GLStringMap gl_strings_; |
| 293 | 377 |
| 378 typedef std::map<const void*, MappedBuffer> MappedBufferMap; |
| 379 MappedBufferMap mapped_buffers_; |
| 380 |
| 381 typedef std::map<const void*, MappedTexture> MappedTextureMap; |
| 382 MappedTextureMap mapped_textures_; |
| 383 |
| 384 scoped_ptr<MappedMemoryManager> mapped_memory_; |
| 385 |
| 294 DISALLOW_COPY_AND_ASSIGN(GLES2Implementation); | 386 DISALLOW_COPY_AND_ASSIGN(GLES2Implementation); |
| 295 }; | 387 }; |
| 296 | 388 |
| 297 } // namespace gles2 | 389 } // namespace gles2 |
| 298 } // namespace gpu | 390 } // namespace gpu |
| 299 | 391 |
| 300 #endif // GPU_COMMAND_BUFFER_CLIENT_GLES2_IMPLEMENTATION_H_ | 392 #endif // GPU_COMMAND_BUFFER_CLIENT_GLES2_IMPLEMENTATION_H_ |
| 301 | 393 |
| OLD | NEW |