15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef GPU_COMMAND_BUFFER_SERVICE_TRANSFER_BUFFER_MANAGER_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define GPU_COMMAND_BUFFER_SERVICE_TRANSFER_BUFFER_MANAGER_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <set>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h"
137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/containers/hash_tables.h"
14ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/memory/shared_memory.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/common/command_buffer_shared.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gpu {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GPU_EXPORT TransferBufferManagerInterface {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~TransferBufferManagerInterface();
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
23e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  virtual bool RegisterTransferBuffer(int32 id,
24e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch                                      scoped_ptr<BufferBacking> buffer) = 0;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DestroyTransferBuffer(int32 id) = 0;
26effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual scoped_refptr<Buffer> GetTransferBuffer(int32 id) = 0;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GPU_EXPORT TransferBufferManager
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : public TransferBufferManagerInterface {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TransferBufferManager();
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool Initialize();
35e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  virtual bool RegisterTransferBuffer(int32 id,
36e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch                                      scoped_ptr<BufferBacking> buffer_backing)
37e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      OVERRIDE;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DestroyTransferBuffer(int32 id) OVERRIDE;
39effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual scoped_refptr<Buffer> GetTransferBuffer(int32 id) OVERRIDE;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~TransferBufferManager();
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
44effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  typedef base::hash_map<int32, scoped_refptr<Buffer> > BufferMap;
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  BufferMap registered_buffers_;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  size_t shared_memory_bytes_allocated_;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(TransferBufferManager);
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace gpu
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // GPU_COMMAND_BUFFER_SERVICE_TRANSFER_BUFFER_MANAGER_H_
54