14ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
24ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
34ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch// found in the LICENSE file.
44ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch
54ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch#ifndef CONTENT_COMMON_GPU_CLIENT_GPU_MEMORY_BUFFER_IMPL_SURFACE_TEXTURE_H_
64ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch#define CONTENT_COMMON_GPU_CLIENT_GPU_MEMORY_BUFFER_IMPL_SURFACE_TEXTURE_H_
74ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch
84ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch#include "content/common/gpu/client/gpu_memory_buffer_impl.h"
94ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch
104ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdochstruct ANativeWindow;
114ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch
124ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdochnamespace content {
134ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch
14010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Implementation of GPU memory buffer based on SurfaceTextures.
154ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdochclass GpuMemoryBufferImplSurfaceTexture : public GpuMemoryBufferImpl {
164ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch public:
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  static scoped_ptr<GpuMemoryBufferImpl> CreateFromHandle(
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const gfx::GpuMemoryBufferHandle& handle,
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const gfx::Size& size,
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      unsigned internalformat,
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const DestructionCallback& callback);
224ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch
234ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch  static bool IsFormatSupported(unsigned internalformat);
24010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  static bool IsUsageSupported(unsigned usage);
25010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  static bool IsConfigurationSupported(unsigned internalformat, unsigned usage);
264ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch  static int WindowFormat(unsigned internalformat);
274ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch
284ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch  // Overridden from gfx::GpuMemoryBuffer:
29010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void* Map() OVERRIDE;
304ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch  virtual void Unmap() OVERRIDE;
314ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch  virtual gfx::GpuMemoryBufferHandle GetHandle() const OVERRIDE;
324ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch  virtual uint32 GetStride() const OVERRIDE;
334ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch
344ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch private:
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GpuMemoryBufferImplSurfaceTexture(
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const gfx::Size& size,
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      unsigned internalformat,
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const DestructionCallback& callback,
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const gfx::SurfaceTextureId& surface_texture_id,
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      ANativeWindow* native_window);
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual ~GpuMemoryBufferImplSurfaceTexture();
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
434ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch  gfx::SurfaceTextureId surface_texture_id_;
444ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch  ANativeWindow* native_window_;
454ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch  size_t stride_;
464ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch
474ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(GpuMemoryBufferImplSurfaceTexture);
484ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch};
494ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch
504ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch}  // namespace content
514ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch
524ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch#endif  // CONTENT_COMMON_GPU_CLIENT_GPU_MEMORY_BUFFER_IMPL_SURFACE_TEXTURE_H_
53