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