103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// found in the LICENSE file.
403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#ifndef CONTENT_COMMON_GPU_CLIENT_GPU_MEMORY_BUFFER_IMPL_OZONE_H_
603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#define CONTENT_COMMON_GPU_CLIENT_GPU_MEMORY_BUFFER_IMPL_OZONE_H_
703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "content/common/gpu/client/gpu_memory_buffer_impl.h"
903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
1003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)namespace content {
1103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
1203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Implementation of GPU memory buffer based on Ozone native buffers.
1303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class GpuMemoryBufferImplOzoneNativeBuffer : public GpuMemoryBufferImpl {
1403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) public:
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  static void Create(const gfx::Size& size,
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                     unsigned internalformat,
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                     unsigned usage,
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                     int client_id,
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                     const CreationCallback& callback);
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  static void AllocateForChildProcess(const gfx::Size& size,
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                      unsigned internalformat,
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                      unsigned usage,
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                      int child_client_id,
251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                      const AllocationCallback& callback);
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  static scoped_ptr<GpuMemoryBufferImpl> CreateFromHandle(
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const gfx::GpuMemoryBufferHandle& handle,
2903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      const gfx::Size& size,
3003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      unsigned internalformat,
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const DestructionCallback& callback);
3203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
3303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  static bool IsFormatSupported(unsigned internalformat);
3403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  static bool IsUsageSupported(unsigned usage);
3503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  static bool IsConfigurationSupported(unsigned internalformat, unsigned usage);
3603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
3703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // Overridden from gfx::GpuMemoryBuffer:
3803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual void* Map() OVERRIDE;
3903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual void Unmap() OVERRIDE;
4003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual uint32 GetStride() const OVERRIDE;
4103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual gfx::GpuMemoryBufferHandle GetHandle() const OVERRIDE;
4203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
4303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) private:
441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GpuMemoryBufferImplOzoneNativeBuffer(const gfx::Size& size,
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                       unsigned internalformat,
461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                       const DestructionCallback& callback,
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                       const gfx::GpuMemoryBufferId& id);
481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual ~GpuMemoryBufferImplOzoneNativeBuffer();
4903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
5003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  gfx::GpuMemoryBufferId id_;
5103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
5203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(GpuMemoryBufferImplOzoneNativeBuffer);
5303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)};
5403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
5503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}  // namespace content
5603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
5703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#endif  // CONTENT_COMMON_GPU_CLIENT_GPU_MEMORY_BUFFER_IMPL_OZONE_H_
58